Я пишу клиент устройства для Azure IotCentral на Java.У меня проблемы с отображением свойств двойника устройства как "синхронизированных" в IotCentral.В частности, у меня есть свойство «toggle» с именем «test».
Я получаю изменения в желаемом свойстве в моем клиенте устройства.Желаемое свойство имеет значение HashMap {"value": true}.
Когда я сообщаю об изменении как сообщаемое свойство, свойство не отображается как синхронизированное в интерфейсе IotCentral, но показывает уведомление "Нет"обновить за n минут ".
Я подозреваю, что указанное в сообщении свойство имеет неправильный формат?
Я пытался
- ключ:" тест ", значение:Boolean.true
- ключ: «тест», значение: «истина»
- ключ: «тест», значение: HashMap {«значение»: 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.
}
Когда я запускаю программу и меняю элемент переключателя UI, программа выводит следующее:
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
Так, какой это ожидаемый форматдля заявленной собственности?Есть ли на это документация?