Отправка сообщений из облака на устройство с помощью IoT DevKit и Azure IoT Hub - код устройства
Мне нужно отправить сообщение из Центра Интернета вещей на устройство DevKit. На основании https://docs.microsoft.com/en-au/azure/iot-hub/iot-hub-devguide-c2d-guidance я хочу отправить прямой метод, поскольку мне нужно управлять банком реле.
У меня есть IoT DevKit, я успешно настроил его и могу отправлять сообщения с устройства в IoT Hub, но я ищу образец, чтобы сделать это другим способом. В настоящее время я могу найти только образцы, которые задают свойства двойника устройства, но не отправляют прямые методы. На стороне сервера я считаю, что использовал бы Microsoft.Azure.Devices.ServiceClient для SendAsync сообщения на устройство (с удовольствием исправлю неверно).
На устройстве я думаю (???) мне нужно использовать SetDeviceMethodCallback, но я понятия не имею, как его инициализировать и получать сообщения. В идеале образец также должен включать в себя, как отправить подтверждение того, что сообщение было получено и выполнено.
Любая помощь будет оценена, даже если просто дайте мне знать, что я на правильном пути. Заранее спасибо.
1 ответ
Вот пример, который я раньше использовал с IoT DevKit (=Mxchip) на стороне устройства:
static int DeviceMethodCallback(const char *methodName, const unsigned char *payload, int size, unsigned char **response, int *response_size)
{
LogInfo("Try to invoke method %s", methodName);
const char *responseMessage = "\"Successfully invoke device method\"";
int result = 200;
if (strcmp(methodName, "start") == 0)
{
DoSomething();
}
else if (strcmp(methodName, "stop") == 0)
{
DoSomethingElse();
}
else
{
LogInfo("No method %s found", methodName);
responseMessage = "\"No method found\"";
result = 404;
}
*response_size = strlen(responseMessage) + 1;
*response = (unsigned char *)strdup(responseMessage);
return result;
}
DevKitMQTTClient_SetDeviceMethodCallback(DeviceMethodCallback);
На стороне служб (где вы вызываете метод) вот пример C#
ServiceClient _iothubServiceClient = ServiceClient.CreateFromConnectionString(config["iothubowner_cs"]);
var result = await _iothubServiceClient.InvokeDeviceMethodAsync(deviceid, "start");
var status = result.Status;