Интеграция Azure IoT Hub в мобильное IoT-приложение
Azure IoT Hub отличается от AWS IoT Core прежде всего моделью аутентификации и протоколами. Здесь нет MQTT over WebSocket через SigV4 — вместо этого SAS-токены (Shared Access Signatures) или X.509. Для мобильного приложения это означает другую стратегию: не давать SAS Connection String пользователю, а генерировать короткоживущие SAS-токены на бэкенде.
Аутентификация через SAS-токены
SAS Connection String (HostName=...;SharedAccessKeyName=...;SharedAccessKey=...) — это эквивалент root credentials. Встраивать его в мобильное приложение нельзя. Решение — бэкенд-прокси: пользователь авторизуется в вашей системе, бэкенд генерирует SAS-токен с ограниченным сроком действия (8–24 часа) для конкретного device ID и возвращает его клиенту.
Генерация токена на Node.js:
const crypto = require('crypto');
function generateSasToken(resourceUri, signingKey, expiresInMins) {
const expiry = Math.ceil(Date.now() / 1000 + expiresInMins * 60);
const stringToSign = `${encodeURIComponent(resourceUri)}\n${expiry}`;
const hmac = crypto.createHmac('sha256', Buffer.from(signingKey, 'base64'));
const signature = hmac.update(stringToSign).digest('base64');
return `SharedAccessSignature sr=${encodeURIComponent(resourceUri)}&sig=${encodeURIComponent(signature)}&se=${expiry}`;
}
Мобильный клиент получает этот токен и подключается к IoT Hub через AMQP over WebSocket или MQTT. На Flutter используем mqtt_client с SAS-токеном в поле password. На React Native — azure-iot-device npm-пакет через react-native-tcp-socket или AMQP через rhea (AMQP 1.0).
Cloud-to-Device и Device-to-Cloud сообщения
IoT Hub поддерживает несколько паттернов обмена сообщениями:
Device-to-Cloud (D2C) — телеметрия от устройства к хабу. Мобильное приложение как «виртуальное устройство» публикует команды через D2C messages. Лимит: 256 KB на сообщение, не более 8000 сообщений в день на free tier.
Cloud-to-Device (C2D) — команды от облака к устройству. Используем для push-команд: бэкенд отправляет C2D message на конкретный deviceId, устройство принимает и выполняет. Delivery acknowledgment — positive/negative/none.
Direct Methods — синхронный запрос-ответ с таймаутом (1–300 сек). Идеально для команд, требующих подтверждения: «установи температуру 22°C» → ответ от устройства с текущим статусом. Вызов из мобильного приложения идёт через REST API IoT Hub: POST /twins/{deviceId}/methods.
Device Twin
Аналог AWS Device Shadow — Device Twin. Хранит desired и reported properties. Для мобильного приложения — основной способ читать текущее состояние устройства без постоянного MQTT-соединения: GET /twins/{deviceId} через IoT Hub REST API с Bearer-токеном.
Типичная ошибка: обращаться к Device Twin напрямую из мобильного приложения, передавая IoT Hub connection string. Правильно — через собственный API-слой, который проксирует запросы и проверяет права доступа пользователя к конкретному устройству.
Azure Notification Hubs для push
Push-уведомления по IoT-событиям — через Azure Event Grid + Azure Function + Azure Notification Hubs. Event Grid подписывается на IoT Hub events (Microsoft.Devices.DeviceTelemetry), триггерит Function, Function отправляет push через Notification Hubs на FCM/APNs.
На Flutter интегрируем через firebase_messaging (для FCM) — Azure Notification Hubs управляет регистрацией устройств и таргетингом, а доставку делегирует FCM/APNs. Тегирование регистраций по userId позволяет отправлять push конкретному пользователю без хранения токенов на стороне IoT-бэкенда.
Сроки
Базовая интеграция (SAS-токены, MQTT/AMQP подключение, Device Twin) — 2–3 недели. Direct Methods, Event Grid, push-уведомления — дополнительно 2 недели. Стоимость зависит от количества устройств, тира IoT Hub и требуемой частоты сообщений.







