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