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

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);
}

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

Device explorer twin test

1 Ответ

0 голосов
/ 31 августа 2018

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/#
...