Інтеграція 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 через react-native-tcp-socket або AMQP через rhea (AMQP 1.0).
Cloud-to-Device та Device-to-Cloud повідомлення
IoT Hub підтримує кілька паттернів обміну повідомленнями:
Device-to-Cloud (D2C) — телеметрія від пристрою до хаба. Мобільний додаток як «віртуальний пристрій» публікує команди через D2C. Ліміт: 256 KB на повідомлення, не більше 8000 повідомлень на день на free tier.
Cloud-to-Device (C2D) — команди від облака до пристрою. Використовуємо для push-команд: бекенд відправляє C2D на конкретний deviceId, пристрій приймає та виконує. Delivery acknowledgment — positive/negative/none.
Direct Methods — синхронний запит-відповідь з таймаутом (1–300 сек). Ідеально для команд, які потребують підтвердження: «встановити температуру 22°C» → відповідь від пристрою з статусом. Виклик з мобільного через REST API: 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 и требуемой частоты сообщений.







