Hallo Zusammen,
ich habe ein Problem mit den rules.
Vorgeschichte: Mein Wasserzähler hat einen S0 Ausgang, der an einem Binäreingang hängt. Der Binäreingang schickt einen Zähler auf den Bus, in der Regel nach jedem Impuls (Differenz also 1), je nach Durchflussmenge können es aber auch mal 2 oder mehr Impulse sein.
Um die Daten besser auswerten zu können, möchte ich nicht die absoluten Zählerstände speichern, sondern nur die Differenz zum letzten Stand. Als Rule verwende ich dafür folgendes:
Im Logfile taucht dann folgendes auf:
Problem: Ab und zu wird ein deltaVal=2 berechnet, obwohl auf dem Bus nur deltaVal=1 Telegramme verschickt wurden. previousState scheint offensichtlich auch in allen Fällen korrekt zu sein, Wasser_Garten.state hat allerdings sporadisch schon den Wert des nächsten Telegrams, obwohl die aktuell laufende Rule noch nicht beendet wurde.
Ist das ein Bug oder muss man by design damit umgehen?
Danke,
Florian
ich habe ein Problem mit den rules.
Vorgeschichte: Mein Wasserzähler hat einen S0 Ausgang, der an einem Binäreingang hängt. Der Binäreingang schickt einen Zähler auf den Bus, in der Regel nach jedem Impuls (Differenz also 1), je nach Durchflussmenge können es aber auch mal 2 oder mehr Impulse sein.
Um die Daten besser auswerten zu können, möchte ich nicht die absoluten Zählerstände speichern, sondern nur die Differenz zum letzten Stand. Als Rule verwende ich dafür folgendes:
Code:
import org.openhab.core.library.types.* import org.openhab.model.script.actions.* import java.util.concurrent.locks.ReentrantLock var java.util.concurrent.locks.ReentrantLock lock = new java.util.concurrent.locks.ReentrantLock() rule "Wasserverbrauch" when Item Wasser_Garten changed then lock.lock() try { var Number oldVal = previousState as DecimalType var Number newVal = Wasser_Garten.state as DecimalType var Number deltaVal = newVal - oldVal logError("rules.wasser", "Wasser: oldval=" + oldVal + " newval=" + newVal + " deltaVal=" + deltaVal) postUpdate(Wasser_Garten_Minute, deltaVal) } finally { lock.unlock() } end
Im Logfile taucht dann folgendes auf:
Code:
[FONT=Monaco][SIZE=10px]2015-04-23 10:59:00.748 [ERROR] [nhab.model.script.rules.wasser] - Wasser: oldval=6510 newval=6511 deltaVal=1[/SIZE][/FONT] [FONT=Monaco][SIZE=10px]2015-04-23 10:59:01.077 [ERROR] [nhab.model.script.rules.wasser] - Wasser: oldval=6511 newval=6512 deltaVal=1[/SIZE][/FONT] [FONT=Monaco][SIZE=10px]2015-04-23 10:59:01.314 [ERROR] [nhab.model.script.rules.wasser] - Wasser: oldval=6512 newval=6513 deltaVal=1[/SIZE][/FONT] [FONT=Monaco][SIZE=10px]2015-04-23 10:59:01.691 [ERROR] [nhab.model.script.rules.wasser] - Wasser: oldval=6513 newval=6514 deltaVal=1[/SIZE][/FONT] [FONT=Monaco][SIZE=10px]2015-04-23 10:59:01.993 [ERROR] [nhab.model.script.rules.wasser] - Wasser: oldval=6514 newval=6515 deltaVal=1[/SIZE][/FONT] [FONT=Monaco][SIZE=10px]2015-04-23 10:59:02.804 [ERROR] [nhab.model.script.rules.wasser] - Wasser: oldval=6515 newval=6517 deltaVal=2 <--- Problem[/SIZE][/FONT] [FONT=Monaco][SIZE=10px]2015-04-23 10:59:03.307 [ERROR] [nhab.model.script.rules.wasser] - Wasser: oldval=6516 newval=6517 deltaVal=1[/SIZE][/FONT] [FONT=Monaco][SIZE=10px]2015-04-23 10:59:03.691 [ERROR] [nhab.model.script.rules.wasser] - Wasser: oldval=6517 newval=6518 deltaVal=1[/SIZE][/FONT]
Ist das ein Bug oder muss man by design damit umgehen?
Danke,
Florian
Kommentar