Azure IoT HUB. сообщения от облака к устройству (MQTT, пользовательские темы)

Azure IoT HUB. сообщения от облака к устройству (MQTT, пользовательская тема)

У меня есть Azure IoT Hub. Здесь я создал пользовательское устройство. Это устройство успешно подключено к концентратору IoT Azure. Я также могу получать данные с этого устройства (от устройства к облаку).

Но я также хочу отправить сообщение на это устройство.

Это устройство использует "протокол MQTT". Я не могу изменить тему подписки и тему публикации на этом устройстве, поэтому я должен иметь возможность устанавливать эти "пользовательские темы" в Azure (приложение функции).

Для этого я создал функцию App (IoT Hub (Event Hub)), но я не знаю, как реализовать здесь "опубликовать и / или подписаться на тему". Все примеры о "сообщениях / событиях".

run.csx

public static async void Run(EventData myIoTHubMessage, TraceWriter log)
{
    log.Info($"{myIoTHubMessage.SystemProperties["iothub-connection-device-id"]}");
    var deviceId = myIoTHubMessage.SystemProperties["iothub-connection-device-id"].ToString();
    var msg = JsonConvert.SerializeObject("{\"Values\": {\"Slave 8.Channel 1.Output\": false,");
    var c2dmsg = new Microsoft.Azure.Devices.Message(Encoding.ASCII.GetBytes(msg));

    await client.SendAsync(deviceId, c2dmsg);
}

Конфигурация устройства Конфигурация устройства

Тест проводника устройства

1 ответ

Azure IOT Hub не является универсальным брокером MQTT. Существуют предопределенные темы для устройства, обращайтесь к более подробной информации здесь.

Отправка C2D-сообщения на устройство осуществляется через конечную точку, ориентированную на обслуживание, на основе протокола AMQP. Вам следует использовать прокси-сервер ServiceClient из SDK служебного клиента IoT Microsoft Azure (Microsoft.Azure.Devices). Следующий фрагмент кода показывает эту часть:

// create proxy
string connectionString = ConfigurationManager.AppSettings["myIoTHub"];
var client = ServiceClient.CreateFromConnectionString(connectionString);

// send AMQP message
await client.SendAsync(deviceId, c2dmsg);

Со стороны устройства устройство должно подписаться на следующий фильтр тем:

devices/{device_id}/messages/devicebound/#
Другие вопросы по тегам