Тип данных сообщаемых свойств для синхронизации свойств устройства IotCentral типа toggle

#java #azure #azure-iot-central

#java #azure #azure-iot-central

Вопрос:

Я пишу клиент устройства для Azure IotCentral на Java. У меня возникли проблемы с отображением двойных свойств устройства как «синхронизированных» в IotCentral. В частности, у меня есть свойство «toggle» с именем «test».

Я получаю изменения в желаемом свойстве в моем клиенте устройства. Требуемое свойство имеет значение HashMap{«значение»: true}.

Когда я сообщаю об изменении в качестве сообщаемого свойства, свойство не отображается как синхронизированное в интерфейсе IotCentral, но показывает уведомление «Нет обновления в течение n минут».

Я подозреваю, что мое сообщаемое свойство не имеет правильного формата?

Я пытался

  • ключ: «test», значение: Boolean.true
  • ключ: «test», значение: «true»
  • ключ: «test», значение: HashMap{«value»: Boolean.true}

Ничего из этого не работает.

 public static void main(String[] args) throws Exception {
        String connectString = "HostName=iotc-xxx.azure-devices.net;DeviceId=showcase1;SharedAccessKey=yyy=";
        DeviceClient client = new DeviceClient(connectString, IotHubClientProtocol.MQTT);
        client.open();
        client.startDeviceTwin(
                (status, ctx)->System.out.println("IoT Hub responded to device twin operation with status "   status.name()),
                null,
                (prop,ctx)->System.out.println("onProperty callback for "   (prop.getIsReported() ? "reported" : "desired")  
                        " property "   prop.getKey()   " to "   prop.getValue()   ", Properties version:"   prop.getVersion()),
                null);

        Map<Property, Pair<TwinPropertyCallBack, Object>> desiredProperties = new HashMap<Property, Pair<TwinPropertyCallBack, Object>>()
        {
            {
                put(new Property("test", null), new Pair<TwinPropertyCallBack, Object>((p,o)-> {
                    HashMap<String,Object> hm = (HashMap)p.getValue();
                    Boolean v = (Boolean)hm.get("value");
                    System.out.println("Received value for test: "   v);

                    try {
                        var hs = new HashSet<Property>();
                        hs.add(new Property("test", v));
                        client.sendReportedProperties(hs);
                        System.out.println("Sent reported property map: "   hs);
                    } catch(IOException e) {
                        System.out.println("Could not report property: "  e);
                    }
                }, null));
            }
        };
        client.subscribeToTwinDesiredProperties(desiredProperties);
        client.getDeviceTwin(); // For each desired property in the Service, the SDK will call the appropriate callback with the value and version.
    }
  

Когда я выполняю программу и меняю элемент пользовательского интерфейса toggle, программа выводит это:

 10:50:12.471 [MQTT Call: pumpshowcase1] INFO  c.m.a.s.i.d.t.mqtt.MqttDeviceTwin - Message received on DT DEVICE_OPERATION_TWIN_SUBSCRIBE_DESIRED_PROPERTIES_RESPONSE
 10:50:12.473 [MQTT Call: pumpshowcase1] INFO  c.m.a.s.i.d.t.IotHubTransport - Message with hashcode 1740719682 is received from IotHub on Tue Mar 26 10:50:12 CET 2019, method name is onMessageReceived
 Received value for test: true
10:50:12.486 [azure-iot-sdk-IotHubReceiveTask] INFO  c.m.azure.sdk.iot.device.DeviceIO - Message with messageid 7d034cd6-2eb3-4c9e-9946-9d14c7bc11a4 along with callback and callbackcontext is added to the queue, method name is sendEventAsync 
 Sent reported property map: [test - true]
10:50:12.493 [azure-iot-sdk-IotHubSendTask] INFO  c.m.a.s.i.d.t.IotHubTransport - Get the message from waiting message queue to be sent to IoT Hub, method name is sendMessages 
 10:50:12.983 [azure-iot-sdk-IotHubSendTask] INFO  c.m.a.s.i.d.t.IotHubTransport - Invoking the callback function for sent message, IoT Hub responded to message with status OK_EMPTY, method name is invokeCallbacks 
 10:50:13.022 [MQTT Call: pumpshowcase1] INFO  c.m.a.s.i.d.t.IotHubTransport - Message with hashcode 506690950 is received from IotHub on Tue Mar 26 10:50:13 CET 2019, method name is onMessageReceived
 IoT Hub responded to device twin operation with status OK_EMPTY
  

Итак, каков ожидаемый формат для сообщаемого свойства?
Есть ли документация по этому поводу?

Комментарии:

1. Вы видели код в этой статье? learn.microsoft.com/en-us/azure/iot-central /…

2. Спасибо, Альберто, эта ссылка — это то, что я почему-то никогда не мог найти, и она предоставляет ключевой факт, что телеметрия отправляется как событие, а не как сообщаемое свойство (для меня нелогично, поскольку «событие» — это отдельное значимое событие, а не непрерывная точка данных).