use of com.microsoft.azure.sdk.iot.service.digitaltwin.UpdateOperationUtility in project azure-iot-sdk-java by Azure.
the class TemperatureController method UpdateDigitalTwinComponentProperty.
private static void UpdateDigitalTwinComponentProperty() {
// Get digital twin.
ServiceResponseWithHeaders<String, DigitalTwinGetHeaders> getResponse = GetDigitalTwin();
// Construct the options for conditional update.
DigitalTwinUpdateRequestOptions options = new DigitalTwinUpdateRequestOptions();
options.setIfMatch(getResponse.headers().eTag());
UpdateOperationUtility updateOperationUtility = new UpdateOperationUtility();
// The json patch format can be found here - https://docs.microsoft.com/en-us/azure/iot-pnp/howto-manage-digital-twin#update-a-digital-twin.
// Add a new component.
String newComponentName = "newThermostat";
System.out.println("--------------------------------------------------------------------------------------------");
System.out.println("Add a new component " + newComponentName);
System.out.println("--------------------------------------------------------------------------------------------");
options.setIfMatch(getResponse.headers().eTag());
String path = "/" + newComponentName;
Map<String, Object> properties = new HashMap<>();
properties.put(propertyName, 50);
updateOperationUtility.appendAddComponentOperation(path, properties);
List<Object> digitalTwinUpdateOperations = updateOperationUtility.getUpdateOperations();
ServiceResponseWithHeaders<Void, DigitalTwinUpdateHeaders> updateResponse = client.updateDigitalTwinWithResponse(digitalTwinid, digitalTwinUpdateOperations, options);
System.out.println("Update Digital Twin response status: " + updateResponse.response().message());
getResponse = GetDigitalTwin();
// Replace an existing component.
String component1 = "thermostat1";
String component2 = "thermostat2";
System.out.println("--------------------------------------------------------------------------------------------");
System.out.println("Replace existing components " + component1 + " and " + component2);
System.out.println("--------------------------------------------------------------------------------------------");
options.setIfMatch(getResponse.headers().eTag());
path = "/" + component1;
Map<String, Object> t1properties = new HashMap<>();
t1properties.put(propertyName, 50);
updateOperationUtility.appendReplaceComponentOperation(path, t1properties);
path = "/" + component2;
Map<String, Object> t2properties = new HashMap<>();
t2properties.put(propertyName, 40);
updateOperationUtility.appendReplaceComponentOperation(path, t2properties);
digitalTwinUpdateOperations = updateOperationUtility.getUpdateOperations();
updateResponse = client.updateDigitalTwinWithResponse(digitalTwinid, digitalTwinUpdateOperations, options);
System.out.println("Update Digital Twin response status: " + updateResponse.response().message());
getResponse = GetDigitalTwin();
// Remove the new component.
System.out.println("--------------------------------------------------------------------------------------------");
System.out.println("Remove the new component " + newComponentName);
System.out.println("--------------------------------------------------------------------------------------------");
options.setIfMatch(getResponse.headers().eTag());
path = "/newThermostat";
updateOperationUtility.appendRemoveComponentOperation(path);
digitalTwinUpdateOperations = updateOperationUtility.getUpdateOperations();
updateResponse = client.updateDigitalTwinWithResponse(digitalTwinid, digitalTwinUpdateOperations, options);
System.out.println("Update Digital Twin response status: " + updateResponse.response().message());
GetDigitalTwin();
}
use of com.microsoft.azure.sdk.iot.service.digitaltwin.UpdateOperationUtility in project azure-iot-sdk-java by Azure.
the class DigitalTwinClientComponentTests method updateDigitalTwin.
@Test
@StandardTierHubOnlyTest
public void updateDigitalTwin() {
// arrange
String newProperty = "currentTemperature";
Integer newPropertyValue = 35;
String newComponent = "newThermostat";
String newComponentPath = "/newThermostat";
Map<String, Object> componentProperties = new HashMap<>();
componentProperties.put(newProperty, newPropertyValue);
DigitalTwinUpdateRequestOptions optionsWithoutEtag = new DigitalTwinUpdateRequestOptions();
optionsWithoutEtag.setIfMatch("*");
// get digital twin and Etag before update
ServiceResponseWithHeaders<BasicDigitalTwin, DigitalTwinGetHeaders> responseWithHeaders = digitalTwinClient.getDigitalTwinWithResponse(deviceId, BasicDigitalTwin.class);
DigitalTwinUpdateRequestOptions optionsWithEtag = new DigitalTwinUpdateRequestOptions();
optionsWithEtag.setIfMatch(responseWithHeaders.headers().eTag());
// act
// Add component at root level - conditional update with max overload
UpdateOperationUtility updateOperationUtility = new UpdateOperationUtility().appendAddComponentOperation(newComponentPath, componentProperties);
digitalTwinClient.updateDigitalTwinWithResponse(deviceId, updateOperationUtility.getUpdateOperations(), optionsWithEtag);
BasicDigitalTwin digitalTwin = digitalTwinClient.getDigitalTwinWithResponse(deviceId, BasicDigitalTwin.class).body();
// assert
assertEquals(E2ETestConstants.TEMPERATURE_CONTROLLER_MODEL_ID, digitalTwin.getMetadata().getModelId());
assertTrue(digitalTwin.getCustomProperties().containsKey(newComponent));
}
use of com.microsoft.azure.sdk.iot.service.digitaltwin.UpdateOperationUtility in project azure-iot-sdk-java by Azure.
the class DigitalTwinClientTests method updateDigitalTwin.
@Test
@StandardTierHubOnlyTest
public void updateDigitalTwin() throws IOException {
// arrange
String newProperty = "currentTemperature";
String newPropertyPath = "/currentTemperature";
Integer newPropertyValue = 35;
// Property update callback
TwinPropertyCallBack twinPropertyCallBack = (property, context) -> {
Set<Property> properties = new HashSet<>();
properties.add(property);
try {
deviceClient.sendReportedProperties(properties);
} catch (IOException e) {
}
};
// IotHub event callback
IotHubEventCallback iotHubEventCallback = (responseStatus, callbackContext) -> {
};
// start device twin and setup handler for property updates in device
deviceClient.startDeviceTwin(iotHubEventCallback, null, twinPropertyCallBack, null);
Map<Property, Pair<TwinPropertyCallBack, Object>> desiredPropertyUpdateCallback = Collections.singletonMap(new Property(newProperty, null), new Pair<>(twinPropertyCallBack, null));
deviceClient.subscribeToTwinDesiredProperties(desiredPropertyUpdateCallback);
DigitalTwinUpdateRequestOptions optionsWithoutEtag = new DigitalTwinUpdateRequestOptions();
optionsWithoutEtag.setIfMatch("*");
// get digital twin and Etag before update
ServiceResponseWithHeaders<BasicDigitalTwin, DigitalTwinGetHeaders> responseWithHeaders = digitalTwinClient.getDigitalTwinWithResponse(deviceId, BasicDigitalTwin.class);
DigitalTwinUpdateRequestOptions optionsWithEtag = new DigitalTwinUpdateRequestOptions();
optionsWithEtag.setIfMatch(responseWithHeaders.headers().eTag());
// act
// Add properties at root level - conditional update with max overload
UpdateOperationUtility updateOperationUtility = new UpdateOperationUtility().appendAddPropertyOperation(newPropertyPath, newPropertyValue);
digitalTwinClient.updateDigitalTwinWithResponse(deviceId, updateOperationUtility.getUpdateOperations(), optionsWithEtag);
BasicDigitalTwin digitalTwin = digitalTwinClient.getDigitalTwinWithResponse(deviceId, BasicDigitalTwin.class).body();
// assert
assertEquals(E2ETestConstants.THERMOSTAT_MODEL_ID, digitalTwin.getMetadata().getModelId());
assertTrue(digitalTwin.getMetadata().getWriteableProperties().containsKey(newProperty));
assertEquals(newPropertyValue, digitalTwin.getMetadata().getWriteableProperties().get(newProperty).getDesiredValue());
}
use of com.microsoft.azure.sdk.iot.service.digitaltwin.UpdateOperationUtility in project azure-iot-sdk-java by Azure.
the class Thermostat method UpdateDigitalTwin.
private static void UpdateDigitalTwin() throws InterruptedException {
CountDownLatch latch1 = new CountDownLatch(1);
// Update the digital twin.
UpdateOperationUtility updateOperationUtility = new UpdateOperationUtility();
// Add a new property at root level.
String newProperty = "currentTemperature";
String existingProperty = "targetTemperature";
System.out.println("--------------------------------------------------------------------------------------------");
System.out.println("Add properties at root level - " + newProperty + " and " + existingProperty);
System.out.println("--------------------------------------------------------------------------------------------");
updateOperationUtility.appendAddPropertyOperation("/" + newProperty, 35);
updateOperationUtility.appendAddPropertyOperation("/" + existingProperty, 35);
asyncClient.updateDigitalTwin(digitalTwinid, updateOperationUtility.getUpdateOperations()).subscribe(getResponse -> {
System.out.println("Updated Digital Twin");
latch1.countDown();
}, error -> {
System.out.println("Update Digital Twin failed: " + error);
latch1.countDown();
});
latch1.await(MAX_WAIT_TIME_ASYNC_OPERATIONS_IN_SECONDS, TimeUnit.SECONDS);
GetDigitalTwin();
// Replace an existing property at root level.
CountDownLatch latch2 = new CountDownLatch(1);
System.out.println("--------------------------------------------------------------------------------------------");
System.out.println("Replace an existing property at root level " + existingProperty);
System.out.println("--------------------------------------------------------------------------------------------");
updateOperationUtility.appendReplacePropertyOperation("/targetTemperature", 50);
asyncClient.updateDigitalTwin(digitalTwinid, updateOperationUtility.getUpdateOperations()).subscribe(getResponse -> {
System.out.println("Updated Digital Twin");
latch2.countDown();
}, error -> {
System.out.println("Update Digital Twin failed: " + error);
latch2.countDown();
});
latch2.await(MAX_WAIT_TIME_ASYNC_OPERATIONS_IN_SECONDS, TimeUnit.SECONDS);
GetDigitalTwin();
// Remove the new property at root level.
CountDownLatch latch3 = new CountDownLatch(1);
System.out.println("--------------------------------------------------------------------------------------------");
System.out.println("Remove the new property at root level " + newProperty);
System.out.println("--------------------------------------------------------------------------------------------");
updateOperationUtility.appendRemovePropertyOperation("/currentTemperature");
asyncClient.updateDigitalTwin(digitalTwinid, updateOperationUtility.getUpdateOperations()).subscribe(getResponse -> {
System.out.println("Updated Digital Twin");
latch3.countDown();
}, error -> {
System.out.println("Update Digital Twin failed: " + error);
latch3.countDown();
});
latch3.await(MAX_WAIT_TIME_ASYNC_OPERATIONS_IN_SECONDS, TimeUnit.SECONDS);
GetDigitalTwin();
}
Aggregations