Отправка облачных сообщений на устройства с помощью IoT DevKit и Azure IoT Hub - код устройства - PullRequest
0 голосов
/ 22 октября 2019

Мне нужно отправить сообщение из 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 Ответ

0 голосов
/ 22 октября 2019

Вот пример, который я использовал ранее с 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...