Mal wieder eine "rule" Frage
-
- Beiträge: 95
- Registriert: 15. Jan 2019 19:07
- Wohnort: Weil am Rhein
Re: Mal wieder eine "rule" Frage
Ja, mich macht das auch langsam nervös.
Selbst für meine Verhältnisse ist die rule nicht wirklich kompliziert oder komplex.
Habe auch an eventuelle Abhängigkeiten gedacht. Aber alle rules , die z.B. den Lichtsensor verwenden, sind ok.
Habe auch mal testweise diverse andere items und things abgeschaltet.
Desweiteren einen / mehrere "saubere" reboots von OH und NAS remacht (cache, tmp und log gelöscht)
Ich werde heute Abend die rule nochmal ersetzten, testen und berichten.
Im schlimmsten Fall ist der Umzug auf das Qnap ja ein Vorteil. Ich mache dort eine saubere Neuinstallation und vielleicht läuft es dann. Kann ja durchaus sein, das in der momentanen Installation eine "Macke" ist.
Dennoch einen herzlichen Dank für euren Einsatz.
Gruss
atk69
Selbst für meine Verhältnisse ist die rule nicht wirklich kompliziert oder komplex.
Habe auch an eventuelle Abhängigkeiten gedacht. Aber alle rules , die z.B. den Lichtsensor verwenden, sind ok.
Habe auch mal testweise diverse andere items und things abgeschaltet.
Desweiteren einen / mehrere "saubere" reboots von OH und NAS remacht (cache, tmp und log gelöscht)
Ich werde heute Abend die rule nochmal ersetzten, testen und berichten.
Im schlimmsten Fall ist der Umzug auf das Qnap ja ein Vorteil. Ich mache dort eine saubere Neuinstallation und vielleicht läuft es dann. Kann ja durchaus sein, das in der momentanen Installation eine "Macke" ist.
Dennoch einen herzlichen Dank für euren Einsatz.
Gruss
atk69
and IT works
-
- Beiträge: 95
- Registriert: 15. Jan 2019 19:07
- Wohnort: Weil am Rhein
Re: Mal wieder eine "rule" Frage
So, habe es jetzt getestet. geändert habe ich nur:
im log:
d.h. der Lumwert wurde unterschritten und der timer läuft los.
hat wohl keinen Einfluss, dass der Lumwert nach 2 min wieder drüber liegt.
Ergebnis: Rollos bleiben oben
Code: Alles auswählen
if ((dataLum.state as Number) < 7600 && now.getHourOfDay > 12 && now.getHourOfDay < 23 && tLum === null) {
Code: Alles auswählen
2019-08-13 17:17:47.530 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'WZ_WI_ROLL_LUM.rules'
2019-08-13 17:18:44.415 [INFO ] [smarthome.model.script.luminanz_test] - Rule getriggert!
2019-08-13 17:18:44.420 [INFO ] [smarthome.model.script.luminanz_test] - dataLum: 6938; tLum: null
2019-08-13 17:18:44.936 [INFO ] [smarthome.model.script.luminanz_test] - Timer wird angelegt!
2019-08-13 17:18:45.299 [INFO ] [smarthome.model.script.luminanz_test] - Ende der Rule
2019-08-13 17:18:45.969 [INFO ] [smarthome.model.script.luminanz_test] - Timer wird ausgeführt! nLum: 0
2019-08-13 17:20:43.116 [INFO ] [smarthome.model.script.luminanz_test] - Rule getriggert!
2019-08-13 17:20:43.122 [INFO ] [smarthome.model.script.luminanz_test] - dataLum: 9237; tLum: null
2019-08-13 17:20:43.128 [INFO ] [smarthome.model.script.luminanz_test] - Ende der Rule
hat wohl keinen Einfluss, dass der Lumwert nach 2 min wieder drüber liegt.
Ergebnis: Rollos bleiben oben
and IT works
- udo1toni
- Beiträge: 13869
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Mal wieder eine "rule" Frage
Blöd, ich komme momentan nicht zum Testen...
Verschiebe bitte mal eine Logzeile:
und setze bitte mal beim switch Klammern um den Wert:
Eigentlich sollte es auch ohne funktionieren, aber der Teufel ist ein Eichhörnchen...
Verschiebe bitte mal eine Logzeile:
Code: Alles auswählen
tLum = createTimer(now.plusSeconds(1), [|
logInfo("luminanz","Timer wird ausgeführt! nLum: {}",nLum) // <--- hier weg
var Number nTime = 1
nLum += 1
logInfo("luminanz","Timer wird ausgeführt! nLum: {}",nLum) // <--- hier hin
switch nLum {
Code: Alles auswählen
switch (nLum) {
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
- peter-pan
- Beiträge: 2564
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Mal wieder eine "rule" Frage
Also, jetzt weisst du, dass die Rule funktioniert. Sie beginnt und endet auch korrekt. Im ersten Fall wird der Timer angelegt und auch ausgeführt.
Nach 2 Minuten wird die Rule wieder angestossen, aber da die Bedingungen nicht erfüllt sind, wird auch kein Timer mehr angelegt und ausgeführt.
D.h. das Problem sind die Befehle in der Schleife. Eigentlich müsstest du hier auch Infos im Logger sehen. z.B.
Schau dir auch mal den Log an, wenn du den Rollo per Schalter schaltest. Das müsste eigentlich auch einen event im Logger auslösen.
Nach 2 Minuten wird die Rule wieder angestossen, aber da die Bedingungen nicht erfüllt sind, wird auch kein Timer mehr angelegt und ausgeführt.
D.h. das Problem sind die Befehle in der Schleife. Eigentlich müsstest du hier auch Infos im Logger sehen. z.B.
Code: Alles auswählen
2019-03-21 14:40:08.619 [vent.ItemStateChangedEvent] - Sonoff_socket_08_RSSI changed from 94 to 98
2019-03-21 14:40:09.848 [vent.ItemStateChangedEvent] - Sonoff_socket_03_RSSI changed from 98 to 96
2019-03-21 14:40:12.091 [vent.ItemStateChangedEvent] - TVUE48H6890_Channel changed from 8 to 2
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian
-
- Beiträge: 95
- Registriert: 15. Jan 2019 19:07
- Wohnort: Weil am Rhein
Re: Mal wieder eine "rule" Frage
hab es wie angegeben gemacht.
LumWert ist auf 940 eingestellt:
das wars, rollos bleiben oben .
LumWert ist auf 940 eingestellt:
Code: Alles auswählen
2019-08-13 19:42:05.582 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'WZ_WI_ROLL_LUM.rules'
2019-08-13 19:42:44.727 [INFO ] [smarthome.model.script.luminanz_test] - Rule getriggert!
2019-08-13 19:42:44.732 [INFO ] [smarthome.model.script.luminanz_test] - dataLum: 875; tLum: null
2019-08-13 19:42:44.743 [INFO ] [smarthome.model.script.luminanz_test] - Timer wird angelegt!
2019-08-13 19:42:44.750 [INFO ] [smarthome.model.script.luminanz_test] - Ende der Rule
2019-08-13 19:42:45.748 [INFO ] [smarthome.model.script.luminanz_test] - Timer wird ausgeführt! nLum: 1
2019-08-13 19:44:43.469 [INFO ] [smarthome.model.script.luminanz_test] - Rule getriggert!
2019-08-13 19:44:43.474 [INFO ] [smarthome.model.script.luminanz_test] - dataLum: 805; tLum: null
2019-08-13 19:44:43.484 [INFO ] [smarthome.model.script.luminanz_test] - Timer wird angelegt!
2019-08-13 19:44:43.492 [INFO ] [smarthome.model.script.luminanz_test] - Ende der Rule
and IT works
- peter-pan
- Beiträge: 2564
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Mal wieder eine "rule" Frage
Das gibt's doch gar nicht.
Also hier noch einmal deine Regel ergänzt um die Loginfos für jeden Schritt.
Probier das jetzt nochmal mit der Ausgabe der einzelnen Schritte. Das wäre doch gelacht, wenn wir das nicht hinkriegen. Und dann sollte es eigentlich genauso ablaufen, wie Udo dir das beschrieben hat. Die Regel wird ab dem zweiten mal triggern abgewiesen (nach ca. 2 Minuten), da die 10 Minuten noch nicht vorbei sind.
Also hier noch einmal deine Regel ergänzt um die Loginfos für jeden Schritt.
Code: Alles auswählen
// Globale Variablen immer zu Beginn der Datei definieren!
var Timer tLum = null
var Number nLum = 0
rule "Luminanz"
when
Item dataLum changed
then
logInfo("luminanz_test","Rule getriggert!")
if(!(dataLum.state instanceof Number)) {
logWarn("luminanz_test","dataLum enthält keinen gültigen Wert!")
return;
}
logInfo("luminanz_test","dataLum: {}; tLum: {}",dataLum.state,tLum)
if ((dataLum.state as Number) < 4 && now.getHourOfDay > 17 && now.getHourOfDay < 23 && tLum === null) {
logInfo("luminanz_test","Timer wird angelegt!")
nLum = 0
tLum = createTimer(now.plusSeconds(1), [|
var Number nTime = 1
nLum += 1
logInfo("luminanz_test","Timer wird ausgeführt! nLum: {}",nLum)
switch nLum {
case 1: {
logInfo("luminanz_test","1 Status Markise: {}",Markise.state) // test
Markise.sendCommand(DOWN)
nTime = 60
}
case 2: {
logInfo("luminanz_test","2 Status Roll_WZ_W_li: {}",Roll_WZ_W_li.state) // test
Roll_WZ_W_li.sendCommand(DOWN)
}
case 3: {
logInfo("luminanz_test","3 Status Roll_WZ_W_re: {}",Roll_WZ_W_re.state) // test
Roll_WZ_W_re.sendCommand(DOWN)
}
case 4: {
logInfo("luminanz_test","4 Status Markise: {}",Markise.state) // test
Markise.sendCommand(DOWN)
}
case 5: {
logInfo("luminanz_test","5 Status Roll_WZ_W_li: {}",Roll_WZ_W_li.state) // test
Roll_WZ_W_li.sendCommand(DOWN)
}
case 6: {
logInfo("luminanz_test","6 Status Roll_WZ_W_re: {}",Roll_WZ_W_re.state) // test
Roll_WZ_W_re.sendCommand(DOWN)
nTime = 600
}
default: {
logInfo("luminanz_test","7 Status nTime: {}",nTime) // test
nTime = 0
}
}
if(nTime > 0) {
logInfo("luminanz_test","8 Status nTime Reschedule: {}",nTime) // test
tLum.reschedule(now.plusSeconds(nTime))
}
else {
tLum = null
}
])
}
logInfo("luminanz_test"," Ende der Rule")
end
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian
-
- Beiträge: 95
- Registriert: 15. Jan 2019 19:07
- Wohnort: Weil am Rhein
Re: Mal wieder eine "rule" Frage
habs mal schnell heute morgen umgesetzt peter-pan:
wobei ich die werte natürlich dem Morgen anpassen musste:
zeit und lum. Nach dem abspeichern habe ich nach 2+min den Sensor abgedunkelt.
Edit:
habe das Thema QNAp jetzt mal vorgezogen. T-453 mit Quadcore celeron 1,6GHz. 8GB RAM und 4x 3 TB
Zuerst OH via Docker probiert. Gefällt mir gar nicht. Pfade sind schlecht zu finden und diverse Dienste gehen wohl nicht (z.B. ping)
Jetzt ganz normal als Paket installiert und es werkelt. Ordner conf, userdata und addons kopiert.
Muss nur noch dem Mosqitto konfigurieren und alles "startklar" machen. Dann kann ich vom Synology auf QNAP wechseln.
P.S. meine Frau dreht auch schon langsam am Rad, weil ich ständig am schrauben bin
Code: Alles auswählen
2019-08-14 07:11:54.774 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'WZ_WI_ROLL_LUM.rules'
2019-08-14 07:12:45.830 [INFO ] [smarthome.model.script.luminanz_test] - Rule getriggert!
2019-08-14 07:12:45.835 [INFO ] [smarthome.model.script.luminanz_test] - dataLum: 261; tLum: null
2019-08-14 07:12:45.840 [INFO ] [smarthome.model.script.luminanz_test] - Ende der Rule
2019-08-14 07:14:44.048 [INFO ] [smarthome.model.script.luminanz_test] - Rule getriggert!
2019-08-14 07:14:44.054 [INFO ] [smarthome.model.script.luminanz_test] - dataLum: 270; tLum: null
2019-08-14 07:14:44.059 [INFO ] [smarthome.model.script.luminanz_test] - Ende der Rule
2019-08-14 07:16:44.048 [INFO ] [smarthome.model.script.luminanz_test] - Rule getriggert!
2019-08-14 07:16:44.053 [INFO ] [smarthome.model.script.luminanz_test] - dataLum: 279; tLum: null
2019-08-14 07:16:44.058 [INFO ] [smarthome.model.script.luminanz_test] - Ende der Rule
2019-08-14 07:18:44.060 [INFO ] [smarthome.model.script.luminanz_test] - Rule getriggert!
2019-08-14 07:18:44.070 [INFO ] [smarthome.model.script.luminanz_test] - dataLum: 7; tLum: null
2019-08-14 07:18:44.082 [INFO ] [smarthome.model.script.luminanz_test] - Timer wird angelegt!
2019-08-14 07:18:44.105 [INFO ] [smarthome.model.script.luminanz_test] - Ende der Rule
2019-08-14 07:18:45.093 [INFO ] [smarthome.model.script.luminanz_test] - Timer wird ausgeführt! nLum: 1
2019-08-14 07:18:45.096 [INFO ] [smarthome.model.script.luminanz_test] - 7 Status nTime: 1
Code: Alles auswählen
if ((dataLum.state as Number) < 250 && now.getHourOfDay > 01 && now.getHourOfDay < 23 && tLum === null) {
Edit:
habe das Thema QNAp jetzt mal vorgezogen. T-453 mit Quadcore celeron 1,6GHz. 8GB RAM und 4x 3 TB
Zuerst OH via Docker probiert. Gefällt mir gar nicht. Pfade sind schlecht zu finden und diverse Dienste gehen wohl nicht (z.B. ping)
Jetzt ganz normal als Paket installiert und es werkelt. Ordner conf, userdata und addons kopiert.
Muss nur noch dem Mosqitto konfigurieren und alles "startklar" machen. Dann kann ich vom Synology auf QNAP wechseln.
P.S. meine Frau dreht auch schon langsam am Rad, weil ich ständig am schrauben bin
and IT works
- peter-pan
- Beiträge: 2564
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Mal wieder eine "rule" Frage
Da haben wir's doch. Irgend etwas mit den Bedingungen ist nicht in Ordnung.
1. Die Regel triggert immer (alle 2 Minuten durch dataLum).
2a. Die Regel wird sofort wieder beendet, da die erste If-Klausel nicht zutrifft. - Durchgang 1 - 3
2b. Die Regel triggert, der Timer wird angelegt, der Timer wird ausgeführt (nLum: 1) .
Aber es wird nur dieser Teil der Switch/Case-Bedingung ausgeführt
D.h. Switch/Case erkennt den Wert (nLum) nicht und führt deshalb nur den default-Teil aus. vielleicht müsste man die Variable als "Number" deklarieren oder vielleicht auch z.B. diese Schreibweise case "1" anwenden. Aber dazu hab ich zuwenig Erfahrung damit und leider auch nicht die passende Testumgebung zum Herumspielen.
Vielleicht kann @Udo1toni sich das nochmal genauer anschauen, der findet das sofort heraus. Aber ich bin mir sicher, dass da der Hund begraben liegt.
Gruss,
Peter
Edit: Vergiss das mit der "Number" ( das wurde ja so gleich am Anfang deklariert ).
1. Die Regel triggert immer (alle 2 Minuten durch dataLum).
2a. Die Regel wird sofort wieder beendet, da die erste If-Klausel nicht zutrifft. - Durchgang 1 - 3
2b. Die Regel triggert, der Timer wird angelegt, der Timer wird ausgeführt (nLum: 1) .
Aber es wird nur dieser Teil der Switch/Case-Bedingung ausgeführt
Code: Alles auswählen
default: {
logInfo("luminanz_test","7 Status nTime: {}",nTime) // test
nTime = 0
}
Vielleicht kann @Udo1toni sich das nochmal genauer anschauen, der findet das sofort heraus. Aber ich bin mir sicher, dass da der Hund begraben liegt.
Gruss,
Peter
Edit: Vergiss das mit der "Number" ( das wurde ja so gleich am Anfang deklariert ).
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian
-
- Beiträge: 226
- Registriert: 11. Aug 2019 06:39
Re: Mal wieder eine "rule" Frage
Stehe vor genau den selben Problem.... er springt immer sofort in den defaultpeter-pan hat geschrieben: ↑14. Aug 2019 13:15 Da haben wir's doch. Irgend etwas mit den Bedingungen ist nicht in Ordnung.
1. Die Regel triggert immer (alle 2 Minuten durch dataLum).
2a. Die Regel wird sofort wieder beendet, da die erste If-Klausel nicht zutrifft. - Durchgang 1 - 3
2b. Die Regel triggert, der Timer wird angelegt, der Timer wird ausgeführt (nLum: 1) .
Aber es wird nur dieser Teil der Switch/Case-Bedingung ausgeführt
D.h. Switch/Case erkennt den Wert (nLum) nicht und führt deshalb nur den default-Teil aus. vielleicht müsste man die Variable als "Number" deklarieren oder vielleicht auch z.B. diese Schreibweise case "1" anwenden. Aber dazu hab ich zuwenig Erfahrung damit und leider auch nicht die passende Testumgebung zum Herumspielen.Code: Alles auswählen
default: { logInfo("luminanz_test","7 Status nTime: {}",nTime) // test nTime = 0 }
Vielleicht kann @Udo1toni sich das nochmal genauer anschauen, der findet das sofort heraus. Aber ich bin mir sicher, dass da der Hund begraben liegt.
Gruss,
Peter
Edit: Vergiss das mit der "Number" ( das wurde ja so gleich am Anfang deklariert ).
Code: Alles auswählen
var Timer tLum = null
var Number nLum = 0
rule "Luminanz"
when
Item Alle_Rolladen_Auf changed from OFF to ON
then
logInfo("luminanz","Rule getriggert!")
if (tLum === null) {
logInfo("luminanz","Timer wird angelegt!")
nLum = 0
tLum = createTimer(now.plusSeconds(1), [|
logInfo("luminanz","Timer wird ausgeführt! nLum: {}",nLum)
var Number nTime = 1
nLum += 1
logInfo("luminanz","nLUM Zähler! nLum: {}",nLum)
switch nLum {
case 1: {
logInfo("luminanz","case 1!")
}
case 2: {
logInfo("luminanz","case 2!")
}
case 3: {
logInfo("luminanz","case 3!")
}
default: {
nTime = 0
logInfo("luminanz","case default!")
}
}
if(nTime > 0)
tLum.reschedule(now.plusSeconds(nTime))
else {
tLum = null
logInfo("luminanz","Rule ist beendet!")
}
])
}
end
Code: Alles auswählen
15:38:40.408 [INFO ] [smarthome.event.ItemStateChangedEvent] - Alle_Rolladen_Auf changed from OFF to ON
15:38:41.108 [INFO ] [lipse.smarthome.model.script.luminanz] - Rule getriggert!
15:38:41.138 [INFO ] [lipse.smarthome.model.script.luminanz] - Timer wird angelegt!
15:38:42.173 [INFO ] [lipse.smarthome.model.script.luminanz] - Timer wird ausgeführt! nLum: 0
15:38:42.233 [INFO ] [lipse.smarthome.model.script.luminanz] - nLUM Zähler! nLum: 1
15:38:42.279 [INFO ] [lipse.smarthome.model.script.luminanz] - case default!
15:38:42.307 [INFO ] [lipse.smarthome.model.script.luminanz] - Rule ist beendet!
-
- Beiträge: 226
- Registriert: 11. Aug 2019 06:39
Re: Mal wieder eine "rule" Frage
Ich auch und ich verstehe nicht warum.... habe die Rule mal zum Test auf das einfachste runter gebrochen.
Ergebnis: immer case default
Code: Alles auswählen
var Number nLum = 0
rule "Test"
when
Item Licht_Buero changed from OFF to ON
then
nLum = 0
nLum += 1
logInfo("luminanz","nLUM Zähler! nLum: {}",nLum)
switch nLum {
case 1: {
logInfo("luminanz","case 1!")
}
default: {
logInfo("luminanz","case default!")
}
}
logInfo("luminanz","Rule ist beendet!")
end
Code: Alles auswählen
16:01:18.016 [INFO ] [smarthome.event.ItemStateChangedEvent] - Licht_Buero changed from OFF to ON
16:01:18.341 [INFO ] [lipse.smarthome.model.script.luminanz] - nLUM Zähler! nLum: 1
16:01:18.369 [INFO ] [lipse.smarthome.model.script.luminanz] - case default!
16:01:18.403 [INFO ] [lipse.smarthome.model.script.luminanz] - Rule ist beendet!