Как выполнить метод на устройстве из функции Azure в C #? - PullRequest
1 голос
/ 10 октября 2019

У меня есть Stream Analytics, который в зависимости от того, что он получает, выводит некоторые данные в функцию Azure в C #. Эта функция должна отправлять JSON на устройство, и когда он читает JSON, он запускает локальный метод в зависимости от полученных данных. Моя проблема в том, что я не могу найти способ сделать это.

Я уже сделал это на Java, но я не могу найти способ сделать это в C #. Я делаю это с помощью триггера HTTP и кода ниже.

Вот как я десериализирую полученные данные:

String body = request.getBody().get().toString().replace("[", "").replace("\"", "\'");
JSONObject bodyJson = new JSONObject(body);

String deviceMac = bodyJson.getString("deviceid");
deviceId = bodyJson.getString("receiveruuid");

И вот как я отправляю результат вустройство:

DeviceMethod methodClient = DeviceMethod.createFromConnectionString(iotHubConnectionString);
Map<String, Object> payload = new HashMap<String, Object>() {
{
    //PAYLOAD DATA
}};
MethodResult result = methodClient.invoke(deviceId, methodName, responseTimeout, connectTimeout, payload);

Спасибо за помощь


ОБНОВЛЕНИЕ

Я наконец решил проблему всюда.

        var serviceClient = ServiceClient.CreateFromConnectionString(iotHubConnectionString);
        var methodname = new CloudToDeviceMethod("method_defatult").SetPayloadJson(" {\"message\": \""+ message +"\"}");
        await serviceClient.InvokeDeviceMethodAsync("moviltest", methodname);

С помощью первой строки вы создаете строку подключения к iotHub. Вторая строка создает CloudToDeviceMethod, а также вы устанавливаете полезную нагрузку. Убедитесь, что JSON верен. Наконец, вызывает метод в устройстве.

Ответы [ 2 ]

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

Наконец-то я решил проблему следующим образом.

    var serviceClient = ServiceClient.CreateFromConnectionString(iotHubConnectionString);
    var methodname = new CloudToDeviceMethod("method_defatult").SetPayloadJson(" {\"message\": \""+ message +"\"}");
    await serviceClient.InvokeDeviceMethodAsync("moviltest", methodname);

В первой строке вы создаете строку подключения к iotHub. Вторая строка создает CloudToDeviceMethod, а также вы устанавливаете полезную нагрузку. Убедитесь, что JSON верен. Наконец, он вызывает метод в устройстве.

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

Вам необходимо получить байты из сообщения и отправить его на устройство:

private async static Task SendCloudToDeviceMessageAsync()
{
    var serviceClient = ServiceClient.CreateFromConnectionString(iotHubConnectionString);
    var commandMessage = new
    Message(Encoding.ASCII.GetBytes("Cloud to device message."));
    await serviceClient.SendAsync("myFirstDevice", commandMessage);
}

Более подробная информация здесь: https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-csharp-csharp-c2d

...