Bloodboy
(Tobias)
1
Hello everyone,
after the migration to version 4.2.1 I have the following behavior, but I’m not sure if it was the same before:
In a js-rule I call the .persistence.lastUpdate() and have the problem that very often null comes out!
2024-09-24 09:46:03.484 [INFO ] [.file.generic_min-_and_max_values.js] - Generic Min- and Max values js | 1727163963451 | forEach | loopKey: minDay item.persistence.lastUpdate(): 2024-09-24T09:46:03+02:00[Europe/Berlin]
2024-09-24 09:50:41.634 [INFO ] [.file.generic_min-_and_max_values.js] - Generic Min- and Max values js | 1727164241625 | forEach | loopKey: minDay item.persistence.lastUpdate(): null
The database looks like this:
The item is defined as follows:
item = items[event.itemName];
The rule is very long and contains some loops…
Can anyone explain this behavior? Is this simply a runtime error, but if so, why isn’t an older date returned instead of null?
openHAB 4.2.1
persistence: jdbc as standard
binderth
(Thomas Binder)
2
Hi Tobias,
see discussion on this thread.
long story short:
- if there’s an update of the item value in parallel to the time your
lastUpdate
-call, the response is ‘null’
- there’s an
lastUpdate
attribute in the making on the item itself - no persistence needed, coming with 4.3 if all works out
- for the time being, you could insert an if-clause on the lastUpdate for “null” and then try again with the next rule-call…
Bloodboy
(Tobias)
3
Ahh, didn’t see that
As a workaround, I now have a while loop that waits for the result for a maximum of 5 seconds:
if(item.persistence.lastUpdate() == null)
{
var sleep = true;
while(sleep == true)
{
//log(ruleName + ' | sleep | item.persistence.lastUpdate(): ',item.persistence.lastUpdate());
var newTime = time.ZonedDateTime.now().toInstant().toEpochMilli();
if((newTime-timeStamp) >= 5000 || item.persistence.lastUpdate() != null)
{
log(ruleName + ' | sleep | item.persistence.lastUpdate(): ',item.persistence.lastUpdate());
sleep = false;
}
}
}
if(item.persistence.lastUpdate() == null)
{
log(ruleName + ' | .lastUpdate() is null!' );
return;
}
Maybe someone can still use this