Seite 1 von 4
Abwesenheitsregel in Openhab
Verfasst: 17. Jan 2020 18:22
von HeHa
Hallo,
also eigentlich möchte ich gerne das Regelwerk verstehen ...
weil die Logic die ich hab funktioniert nicht :=)
wenn ich im Log ermittelt habe:
2020-01-17 18:13:03.338 [vent.ItemStateChangedEvent] - HenningsAHandy changed from OPEN to CLOSED
und
2020-01-17 18:15:00.814 [ome.event.ItemCommandEvent] - Item 'Buero_S' received command OFF
2020-01-17 18:15:00.819 [nt.ItemStatePredictedEvent] - Buero_S predicted to become OFF
2020-01-17 18:15:00.853 [vent.ItemStateChangedEvent] - Buero_S changed from ON to OFF
und meine erste Regel wie folgt aussieht:
Code: Alles auswählen
rule "Abwesenheit Ausschalten"
when
Item HenningsAHandy changed to CLOSED
then
Buero_S.sendCommand(OFF)
end
Mein Hintergedanken ... wenn mein Arbeits Handy (HenningsAHandy) nicht mehr in der Fritz Box erkannt wird, dann Soll die Lampe im Büro (Buero_S) ausgehen...
Wenn ich mir das Regelwek so ansehe denke ich müsste die erste Regel funktionieren ..
Bah denkste tut Sie aber nicht
Regel Aktiv - Handy CLOSED - Licht bleibt an
ich arbeite mit einer presence.map:
OPEN=Anwesend
CLOSED= Abwesend
NULL=unbekannt
Aber wenn ich versuchsweise Abwesend setze in die Regel passiert auch nix
Somit denke ich stimmt was am Regel-Werk nicht.
Kann mir jemand helfen ..
Gruß Henning
Re: Abwesenheitsregel in Openhab
Verfasst: 18. Jan 2020 00:42
von peter-pan
... wie sehen denn deine Items aus ? Switch oder String ?
Reagiert deine Regel überhaupt bei dem Trigger-Event ? Das kannst einfach nachprüfen, wenn du nach "then" eine "logInfo("meine Regel"," triggert") einbaust.
Re: Abwesenheitsregel in Openhab
Verfasst: 18. Jan 2020 06:12
von udo1toni
Die Regel sieht auf den ersten Blick gut aus.
Gibt es denn in openhab.log zum Zeitpunkt des Speicherns der *.rules Datei Meldungen? (Notfalls Datei neu speichern)
Re: Abwesenheitsregel in Openhab
Verfasst: 18. Jan 2020 07:16
von HeHa
Hallo,
also beine ITEMS sehen wie folgt aus dazu:
Handy:
Code: Alles auswählen
Contact HenningsHandy "Henning [MAP(presence.map):%s]" (gfritzbox) {fritzboxtr064="maconline:CE-BF-65-43-5C-03"}
und die Lampe:
Code: Alles auswählen
Switch Buero_S "Schalter im Büro" (GF_Office) { channel="homematic:HM-LC-Sw1PBU-FM:3014F711A061A7D7098E1690:OEQ0475368:1#STATE" }
Regel habe ich nach langem studieren der Logs nochmals umgebaut .. nicht viel verändert ..
Code: Alles auswählen
rule "Abwesenheit Ausschalten"
when
Item HenningsAHandy changed from OPEN to CLOSED
then
Buero_S.sendCommand(OFF)
end
Jetzt funktioniert es. Hinzugefügt habe ich
Deshalb nun meine Fragen ...
Muss ich den Wechsel immer angeben also
oder
.. ? und wer weiß was noch für Zustände gibt
und ich kann nur die Zustände Verwenden die das Gerät selber produziert ... nicht die von mir umgewandelten (in meinem Fall mit einer presence.map) ?
Vielen Dank für Eure Hilfe werde weiter in das Regelwerk einsteigen ...
Gibt es irgendwo gute Erläuterungen mit Beispielen .. und Verschachtelungen ?
Grüße und nochmals vielen lieben Dank
Henning
Re: Abwesenheitsregel in Openhab
Verfasst: 18. Jan 2020 09:30
von udo1toni
Nein, beide Parameter sind optional, also sind alle Varianten erlaubt:
Code: Alles auswählen
when
Item myItem changed
or Item myItem changed from ON
or Item myItem changed from ON to OFF
or Item myItem changed to OFF
then
und natürlich auch mit allen anderen möglichen Status wie OPEN, CLOSED, 0, 100, PLAYING, PAUSED,.. halt abhängig vom Itemtyp.
Re: Abwesenheitsregel in Openhab
Verfasst: 19. Jan 2020 14:29
von HeHa
Hallo
udo1toni ich verstehe.... nächster Step:
auf der HP von openhab wird in einem Abschnitt der Regel folgendes erkläer:
Code: Alles auswählen
rule "<RULE_NAME>"
when
<TRIGGER_CONDITION> [or <TRIGGER_CONDITION2> [or ...]]
then
<SCRIPT_BLOCK>
end
OR = ODER
Bedeutet ... wenn ich drei Items habe:
Code: Alles auswählen
Contact RitasHandy "Rita [MAP(presence.map):%s]" (gfritzbox) {fritzboxtr064="maconline:40-B8-37-B7-6F-43"}
Contact HenningsHandy "Henning [MAP(presence.map):%s]" (gfritzbox) {fritzboxtr064="maconline:CE-BF-65-43-5C-03"}
Contact HenningsAHandy "Henning Arbeit [MAP(presence.map):%s]" (gfritzbox) {fritzboxtr064="maconline:C4-61-8B-77-13-34"}
wenn eins davon aktiviert wird egal welches dann wird der <Script_Block> ausgeführt ......
Was ist, wenn ich nur möchte, dass wenn alle drei Handies den Status CLOSED erhalten der <Script_Block> ausgeführt wird ? Darf ich OR durch AND ersetzen oder wie wird das realisiert:
Code: Alles auswählen
rule "Abwesenheit Ausschalten"
when
Item HenningsAHandy changed from OPEN to CLOSED AND
Item RitasHandy changed from OPEN to CLOSED AND
Item HenningsHandy changed from OPEN to CLOSED
then
Buero_S.sendCommand(OFF)
end
Oder muss ich einen ganz anderen Ansatz finden weil es kein AND gibt ???
ZIEL: Wenn alle drei Handies von OPEN to CLOSED wechseln egal wann .. also nur wenn ALLE drei Handies CLOSED haben wird die Bürolampe ausgeschaltet .....
Gruß Henning
Re: Abwesenheitsregel in Openhab
Verfasst: 19. Jan 2020 15:31
von violine21
Das sollte so funktionieren
Code: Alles auswählen
rule "Abwesenheit Ausschalten"
when
Item HenningsAHandy changed or
Item RitasHandy changed or
Item HenningsHandy changed or
then
if(HenningsAHandy.state == CLOSED && RitasHandy.state == CLOSED && HenningsHandy.state == CLOSED)
Buero_S.sendCommand(OFF)
end
Re: Abwesenheitsregel in Openhab
Verfasst: 19. Jan 2020 22:59
von udo1toni
Typisches Missverständnis.
Die Rules arbeiten eventbasiert. Im when-Teil der Rule werden alle Trigger der Rule aufgeführt. Eine Rule kann belieibg viele Trigger haben. Es ist aber nicht möglich, die Trigger per AND zu verbinden, denn das würde ja bedeuten, dass mehrere Trigger exakt zeitgleich auftreten müssten.
Was Du möchtest, ist hingegen, dass die Rule von mehreren Triggern ausgelöst wird, der Code, der dort (nach dem then) hinterlegt ist, aber nur ausgeführt wird, wenn mehrere Items zu diesem Zeitpunkt einen bestimmten Status haben.
Man muss unbedingt verstehen, dass Trigger (oder Events) und Status zwei komplett verschiedene Dinge sind. Es gibt Events, die auf Status basieren (Item changed oder Item received update), aber die basieren nicht auf dem Status, sondern auf dem Zeitpunkt der Änderung oder des Updates.
Es gibt weiterhin Trigger, die auf dem Empfang von Commands basieren (welche wieder nichts mit Status zu tun haben müssen) oder auch zeitbasierte Trigger (Time cron), aber auch hier geht es um das Eintreten eines Zeitpunkts (Event), während man innerhalb des Codes auf einen Zeitraum prüft
Re: Abwesenheitsregel in Openhab
Verfasst: 20. Jan 2020 09:30
von HeHa
Hallo udo1toni
Ja .. jetzt leuchtet das natürlich mir ein ..... absolut .... oben sammeln unten auswerten und Aktion.
Oh man... dan nwerde ich mal weiter basteln ...
Gruß und wiedermal Danke
Henning
Re: Abwesenheitsregel in Openhab
Verfasst: 20. Jan 2020 09:34
von HeHa
Hallo violine21
vielen Dank für Deinen Hinweis / Tipp / Regel:
violine21 hat geschrieben: ↑19. Jan 2020 15:31
Das sollte so funktionieren
Code: Alles auswählen
rule "Abwesenheit Ausschalten"
when
Item HenningsAHandy changed or
Item RitasHandy changed or
Item HenningsHandy changed or
then
if(HenningsAHandy.state == CLOSED && RitasHandy.state == CLOSED && HenningsHandy.state == CLOSED)
Buero_S.sendCommand(OFF)
end
Ich habe Sie so übernommen nur ein or hinter dem dritten Item habe ich weggelassen
Danke Gruß Henning