I’m using a ECMA-rule to fetch a JSON (from my Nuki) and want to use the results to update my items.
So, basically the rule is:
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var client = java.net.http.HttpClient.newBuilder().build();
function httpGet(uri) {
try {
var request = java.net.http.HttpRequest.newBuilder()
.GET()
.uri(java.net.URI.create(uri))
.build();
var response = client.send(request, java.net.http.HttpResponse.BodyHandlers.ofString());
return response;
} catch (e) {
print(e);
}
}
var result = JSON.parse(httpGet("http://192.168.xx.yy:8080/list?token=xxxxx&nukiid=xxxxx").body());
// Infos rausziehen
logger.info("nuki: " + result[0].lastKnownState.state);
logger.info("nuki: " + result[0].lastKnownState.state.toString());
events.postUpdate("NukiSmartLock_LockState", result[0].lastKnownState.state.toString());
...
The JSON looks like this
[{"deviceType": 0, "nukiId": xxx, "name": "BinderTür", "firmwareVersion": "2.9.10", "lastKnownState": {"mode": 2, "state": 1, "stateName": "locked", "batteryCritical": false, "batteryCharging": false, "batteryChargeState": 86, "doorsensorState": 2, "doorsensorStateName": "door closed", "timestamp": "2021-01-25T09:26:58+00:00"}}]
what I get in the logs is a bit strange, even after I added “.toString()” to it:
2021-01-25 10:56:25.424 [INFO ] [org.openhab.rule.NukiStatusPoll ] - nuki: 1
2021-01-25 10:56:25.434 [INFO ] [org.openhab.rule.NukiStatusPoll ] - nuki: 1
2021-01-25 10:56:25.528 [WARN ] [e.automation.internal.RuleEngineImpl] - Fail to execute action: 2
java.lang.IllegalArgumentException: The argument 'state' must not be null.
at org.openhab.core.events.AbstractEventFactory.checkNotNull(AbstractEventFactory.java:115) ~[?:?]
at org.openhab.core.items.events.ItemEventFactory.assertValidArguments(ItemEventFactory.java:401) ~[?:?]
:::
so, what do I miss?