I’ve got this rule:
version: 1
rules:
haarden-onverwachte-doving:
label: Haarden - Onverwachte afkoeling
description: Soms gaan de haarden onverwacht uit. Dit kan misschien opgemerkt worden middels de temperatuurssensors.
triggers:
- id: "1"
config:
itemName: haard_eetkamer_temperatuur
type: ItemChanged
- id: "2"
config:
itemName: haard_salon_temperatuur
type: ItemChanged
actions:
- id: "3"
config:
type: JavaScript
script: [see below]
type: Script
const eventitemnaam = event.itemName;
const nieuwenumericstatusitem = items.getItem(eventitemnaam).numericState;
const oudenumericstatusitem = items.getItem(eventitemnaam).previousNumericState;
function main() {
if (nieuwenumericstatusitem < oudenumericstatusitem && nieuwenumericstatusitem > 40) {
const statusitemsuffix = "_gewenste_status";
const haardprefix = eventitemnaam.split("_temperatuur")[0];
const haardstatusitemstring = haardprefix + statusitemsuffix;
const haardstatusitem = items.getItem(haardstatusitemstring);
const haardstatus = haardstatusitem.boolState;
if (haardstatus) {
const melding = haardprefix + " is aan het afkoelen, maar " + haardstatusitemstring + " = " + haardstatus;
rules.runRule("melding_gsm_DBE", { 'gsm': true, 'melding': melding });
console.log(melding);
}
}
}
main();
Now see this chain of logging events:
events.log:
2026-11-07 14:46:52.484 [INFO ] [openhab.event.ItemStateChangedEvent - 429 ] - Item 'haard_eetkamer_gewenste_status' changed from OFF to ON (source: org.openhab.core.autoupdate)
[...]
2026-11-07 14:47:35.515 [INFO ] [openhab.event.ItemStateChangedEvent - 429 ] - Item 'haard_eetkamer_temperatuur' changed from 91.25 °C to 87 °C (source: org.openhab.core.thing$esphome:device:haard-eetkamer:temperatuur)
openhab.log:
2026-11-07 14:47:35.520 [INFO ] [ting.rule.haarden-onverwachte-doving - 41765 ] - haard_eetkamer is aan het afkoelen, maar haard_eetkamer_gewenste_status = true
Why does the script use a value of haard_eetkamer_gewenste_status that’s already been changed?