Hi,
ich möchte gerne die "ON"-Zustände von bis zu vier KNX Geräten zählen und habe dazu diese Regel gebaut:
KNX_K_sL_xxxx steht dabei für 4 Aktoren (für die 4 Infragekommenden Räume im Keller), die CL_xxxx Switche dienen dazu, die Relevanz für die Zählung konfigurierbar zu machen. Insgesamt soll also im Number-Item CL_NumberOfOther die Anzahl der eingeschalteten und relevanten Aktoren erscheinen.
Zwei Probleme habe ich:
1. Wird während der Laufzeit der Rule ein zweiter Schalter betätigt, läuft die Rule ein zweites Mal an, die Ergebnisse, weil in einem Item gespeichert sind eher zufällig.
Frage dazu: ist es möglich, die sequentielle Abarbeitung der Rule zu erzwingen? Für mein Empfinden würde zwar die Umstellung auf eine Variable einen Teil des Problems lösen, aber meine Erfahrungen mit Variablen zeigen, dass die gerne mal plötzlich undefiniert sind.
2. Wenn ich KNX_K_sL_Uhren betätige, bekomme ich wie erwartet das hier:
Mit betätigen von KNX_K_sL_Vorrat wird es aber das hier:
und das leuchtet mir nicht so recht ein. Einzige Möglichkeit, die mir einfällt, ist, dass die Addition länger dauert, und der nachfolgende Befehl (die Anzeige) schon vor Fertigstellung ausgeführt wird.
Kann da jemand bei mir mal einen Geisteblitz zünden?
Gruß
Peter
ich möchte gerne die "ON"-Zustände von bis zu vier KNX Geräten zählen und habe dazu diese Regel gebaut:
Code:
rule "KellerAndereSchalterON" when Item KNX_K_sL_Uhren received update or Item KNX_K_sL_Werkstatt received update or Item KNX_K_sL_Vorrat received update or Item KNX_K_sL_Wasch received update then // if (Dbg_Kellerlicht.state == ON) {logDebug("DEBUGMSG", " IN OTHER CHANGED")} CL_NumberOfOther.postUpdate(0) if ((CL_Uhren.state == ON) && (KNX_K_sL_Uhren.state == ON)) { CL_NumberOfOther.postUpdate(CL_NumberOfOther.state as DecimalType + 1) } if (Dbg_Kellerlicht.state == ON) {logDebug("DEBUGMSG", " Number 1: " + CL_NumberOfOther.state)} if ((CL_Werkstatt.state == ON) && (KNX_K_sL_Werkstatt.state == ON)) { CL_NumberOfOther.postUpdate(CL_NumberOfOther.state as DecimalType + 1) } if (Dbg_Kellerlicht.state == ON) {logDebug("DEBUGMSG", " Number 2: " + CL_NumberOfOther.state)} if ((CL_Vorrat.state == ON) && (KNX_K_sL_Vorrat.state == ON)) { CL_NumberOfOther.postUpdate(CL_NumberOfOther.state as DecimalType + 1) } if (Dbg_Kellerlicht.state == ON) {logDebug("DEBUGMSG", " Number 3: " + CL_NumberOfOther.state)} if ((CL_Wasch.state == ON) && (KNX_K_sL_Wasch.state == ON)) { CL_NumberOfOther.postUpdate(CL_NumberOfOther.state as DecimalType + 1) } if (Dbg_Kellerlicht.state == ON) {logDebug("DEBUGMSG", " Number of Others is: " + CL_NumberOfOther.state)} end
Zwei Probleme habe ich:
1. Wird während der Laufzeit der Rule ein zweiter Schalter betätigt, läuft die Rule ein zweites Mal an, die Ergebnisse, weil in einem Item gespeichert sind eher zufällig.
Frage dazu: ist es möglich, die sequentielle Abarbeitung der Rule zu erzwingen? Für mein Empfinden würde zwar die Umstellung auf eine Variable einen Teil des Problems lösen, aber meine Erfahrungen mit Variablen zeigen, dass die gerne mal plötzlich undefiniert sind.
2. Wenn ich KNX_K_sL_Uhren betätige, bekomme ich wie erwartet das hier:
Code:
2017-01-14 21:45:07 - IN OTHER CHANGED 2017-01-14 21:45:07 - Number 1: 1 2017-01-14 21:45:07 - Number 2: 1 2017-01-14 21:45:07 - Number 3: 1 2017-01-14 21:45:07 - Number of Others is: 1
Code:
2017-01-14 21:46:39 - IN OTHER CHANGED 2017-01-14 21:46:39 - Number 1: 0 2017-01-14 21:46:39 - Number 2: 1 2017-01-14 21:46:39 - Number 3: 2 2017-01-14 21:46:39 - Number of Others is: 2
Kann da jemand bei mir mal einen Geisteblitz zünden?
Gruß
Peter
Kommentar