Na klar! Klassischer Copy-Paste-Fehler
Abwesenheitsregel in Openhab
-
- Beiträge: 40
- Registriert: 20. Jan 2020 15:51
Re: Abwesenheitsregel in Openhab
Ich würde hier noch eine Verbesserung vorschlagen.
Sicher kannst du es so lösen, wie du es jetzt gelöst hast. Das Problem dabei ist, je mehr Geräte dazu kommen (vielleicht noch ein Tablet, noch ein Ersatz Handy, Familienmitglieder, wer weiß was noch) wird deine If-Abfrage immer länger und länger, die Lesbarkeit leidet darunter und die Wartbarkeit auch.
OpenHAB bietet hierfür Gruppen an. Man kann also einfach die entsprechenden Switch-Items in einer Gruppe zusammenfassen und diese mit einer sogenannten Aggregationsfunktion verknüpfen (Fachchinesisch ). Die einfachste Funktion wäre hier AND, sprich, die Gruppe nimmt den Status an, der vorliegt, wenn alle darin enthaltenen Items diesen Status haben, ansonsten einen anderen Status. Du kannst natürlich auch ein OR verwenden, dann sieht deine Anweisung nur etwas anders aus. Im bei den Items legst du also eine Gruppe an, die wie folgt aussieht:
Die Gruppe verhält sich dann so: sind alle Items, die sich in der Gruppe befinden, CLOSED, dann ist die Gruppe CLOSED, ansonsten (also mindestens ein Item ist OPEN) ist sie auch OPEN.
Mit OR ginge das auch:
Hier ist es genau umgekehrt. Ist irgend ein Item der Gruppe OPEN, ist die Gruppe dies auch. Ansonsten ist sie CLOSED.
In der Regel kannst Du dann einfach auf die Gruppe prüfen:
Generell verhält sich diese Gruppe dann wie ein normales Item, du kannst also auch ihren State abfragen. Ganz praktisch ist das zum Beispiel auch dafür, mehrere Lampen gesammelt ein- oder auszuschalten, ohne jede Lampe in der Regel separat aufführen zu müssen. Einfach die Lampen in so eine Gruppe hinzufügen und dann einfach mittels:
alle Lampen im Wohnzimmer ausschalten.
Vielleicht räumt das deinen Code etwas auf und dient der Übersichtlichkeit .
Sicher kannst du es so lösen, wie du es jetzt gelöst hast. Das Problem dabei ist, je mehr Geräte dazu kommen (vielleicht noch ein Tablet, noch ein Ersatz Handy, Familienmitglieder, wer weiß was noch) wird deine If-Abfrage immer länger und länger, die Lesbarkeit leidet darunter und die Wartbarkeit auch.
OpenHAB bietet hierfür Gruppen an. Man kann also einfach die entsprechenden Switch-Items in einer Gruppe zusammenfassen und diese mit einer sogenannten Aggregationsfunktion verknüpfen (Fachchinesisch ). Die einfachste Funktion wäre hier AND, sprich, die Gruppe nimmt den Status an, der vorliegt, wenn alle darin enthaltenen Items diesen Status haben, ansonsten einen anderen Status. Du kannst natürlich auch ein OR verwenden, dann sieht deine Anweisung nur etwas anders aus. Im bei den Items legst du also eine Gruppe an, die wie folgt aussieht:
Code: Alles auswählen
Group:Contact:AND(CLOSED,OPEN) gZuHause
Mit OR ginge das auch:
Code: Alles auswählen
Group:Contact:OR(OPEN,CLOSED) gZuHause
In der Regel kannst Du dann einfach auf die Gruppe prüfen:
Code: Alles auswählen
rule "Abwesend setzen"
when
Item gZuHause changes to CLOSED
then
...
end
Code: Alles auswählen
gLampenWohnzimmer.sendCommand(OFF)
Vielleicht räumt das deinen Code etwas auf und dient der Übersichtlichkeit .
-
- Beiträge: 50
- Registriert: 13. Nov 2019 17:41
Re: Abwesenheitsregel in Openhab
Hallo Timtam,
vielen Dank für diese Hilfestellung.
Ja stimmt ...
mit der Gruppenfunktion meiner a) Gruppe für die Items die OPEN/CLOSE melden und b) der Gruppe für die Items die geschalten ON/OFF gehören ist das ganze sehr übersichtlich geworden vor allem, man findet sich auch noch nach einem halben Jahr zurecht wenn man sich die Rule ansieht ..
Vielen Dank .. funktioniert.
Gruß Henning
vielen Dank für diese Hilfestellung.
Ja stimmt ...
mit der Gruppenfunktion meiner a) Gruppe für die Items die OPEN/CLOSE melden und b) der Gruppe für die Items die geschalten ON/OFF gehören ist das ganze sehr übersichtlich geworden vor allem, man findet sich auch noch nach einem halben Jahr zurecht wenn man sich die Rule ansieht ..
Vielen Dank .. funktioniert.
Gruß Henning
-
- Beiträge: 50
- Registriert: 13. Nov 2019 17:41
Re: Abwesenheitsregel in Openhab
so ....
Ausgehend von der Rule:
wie muss man mit den Con jobs in Rules Arbeiten ?
Wenn man z.B.: die obere Regel so aufbauen möchte dass Sie jeden Abend um 22:00 Uhr läuft und die unter erhaltenen Items ausschalten soll.
Gruß Henning
Ausgehend von der Rule:
Code: Alles auswählen
rule "Automatisches Ausschalten ab 2200 Uhr"
when
then
Buero_S.sendCommand(OFF)
end
Wenn man z.B.: die obere Regel so aufbauen möchte dass Sie jeden Abend um 22:00 Uhr läuft und die unter
Code: Alles auswählen
then
Gruß Henning
-
- Beiträge: 40
- Registriert: 20. Jan 2020 15:51
Re: Abwesenheitsregel in Openhab
Dafür gibt es zum Glück Helferlein im Netz .
http://www.cronmaker.com/
lässt dich beispielsweise einfach einstellen, was genau du möchtest, und gibt dir danach den String aus, den du dann nur noch in die when-Klausel deiner Regel kopieren musst.
MfG.
Timtam
http://www.cronmaker.com/
lässt dich beispielsweise einfach einstellen, was genau du möchtest, und gibt dir danach den String aus, den du dann nur noch in die when-Klausel deiner Regel kopieren musst.
Code: Alles auswählen
rule "blablabla"
when
Time cron "hier string einfuegen"
then
...
end
Timtam
-
- Beiträge: 50
- Registriert: 13. Nov 2019 17:41
Re: Abwesenheitsregel in Openhab
Hallo Timtam,
aha ..
bedeutet wenn ich jeden Tag um 22:00 uhr die rule starten möchte gebe ich das wie folgt ein:
und erhalte als Ergebnis:
in der Regel:
stimmt so .. wie gut dass es so Seiten gibt ...
Gruß Henning
aha ..
bedeutet wenn ich jeden Tag um 22:00 uhr die rule starten möchte gebe ich das wie folgt ein:
und erhalte als Ergebnis:
Code: Alles auswählen
0 0 22 1/1 * ? *
Code: Alles auswählen
rule "blablabla"
when
Time cron 0 0 22 1/1 * ? *
then
...
end
Gruß Henning
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 13864
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Abwesenheitsregel in Openhab
Wobei das Ergebnis auch nur die halbe Wahrheit ausspuckt.
Der Time cron Ausdruck sollte übrigens in Anführungszeichen stehen.
geht einfacher:
und man braucht auch nicht unbedingt einen Generator aus dem Internet. Das Format lautet
Sekunde, Minute, Stunde, Tag im Monat, Monat im Jahr, Wochentag, Jahr. Die einzelnen Positionen werden mit Leerzeichen getrennt. Mehrere zulässige Werte für eine Position werden mit Komma getrennt, Bereiche werden mit von-bis angegeben, Feste Abstände werden mit Startwert/Abstand angegeben.
Alle Werte müssen angegeben werden, nur das Jahr ist optional und kann entfallen, Ein Wert, der keine Rolle spielt, wird mit einem * gesetzt. Es muss exakt ein Fragezeichen im Ausdruck vorkommen, und zwar entweder im Wochentag-Feld oder im Tag-des-Monats-Feld. also:
Der Time cron Ausdruck sollte übrigens in Anführungszeichen stehen.
Code: Alles auswählen
Time cron "0 0 22 1/1 * ? *"
Code: Alles auswählen
Time cron "0 0 22 * * ?"
Sekunde, Minute, Stunde, Tag im Monat, Monat im Jahr, Wochentag, Jahr. Die einzelnen Positionen werden mit Leerzeichen getrennt. Mehrere zulässige Werte für eine Position werden mit Komma getrennt, Bereiche werden mit von-bis angegeben, Feste Abstände werden mit Startwert/Abstand angegeben.
Alle Werte müssen angegeben werden, nur das Jahr ist optional und kann entfallen, Ein Wert, der keine Rolle spielt, wird mit einem * gesetzt. Es muss exakt ein Fragezeichen im Ausdruck vorkommen, und zwar entweder im Wochentag-Feld oder im Tag-des-Monats-Feld. also:
Code: Alles auswählen
Time cron "0 0 22 * * ?"
| | | | | |
| | | | | Wochentag egal
| | | | Monat egal
| | | Tag im Monat egal
| | Stunde 22
| Minute 0
Sekunde 0
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 50
- Registriert: 13. Nov 2019 17:41
Re: Abwesenheitsregel in Openhab
Danke udo1toni
mal zrück zu der ersten Regel die die Abwesemheit regeln soll:
Meine dazugehörigen Items:
presence.map:
Wenn alle drei Handys den Status "CLOSED" erhalten, dann soll die Regel auslösen.... und alles obrige ausschalten ...
Problem :
Sie startet schon wenn nur ein Gerät den status "CLOSED" erhält:
Es muss doch an diesm Part liegen oder:
Gruß Henning
mal zrück zu der ersten Regel die die Abwesemheit regeln soll:
Code: Alles auswählen
rule "Abwesenheit ALEXA Ausschalten"
when
Item HenningsAHandy changed from OPEN to CLOSED or
Item RitasHandy changed from OPEN to CLOSED or
Item HenningsHandy changed from OPEN to CLOSED
then
if(HenningsAHandy.state == CLOSED && RitasHandy.state == CLOSED && HenningsHandy.state == CLOSED)
Mehrfachsteckdos_02_S5.sendCommand(OFF)
Printer.sendCommand(OFF)
Buero_S.sendCommand(OFF)
TplinkEGOG.sendCommand(OFF)
TplinkKG.sendCommand(OFF)
dlinkWo.sendCommand(OFF)
Einliegerwohnung.sendCommand(OFF)
Light1_ColorTemperature_Switch.sendCommand(OFF)
Light3_ColorTemperature_Switch.sendCommand(OFF)
Light2_ColorTemperature_switch.sendCommand(OFF)
end
Code: Alles auswählen
Contact RitasHandy "Rita [MAP(presence.map):%s]" (gfritzbox) {fritzboxtr064="maconline:xxxxxxx"}
Contact HenningsHandy "Henning [MAP(presence.map):%s]" (gfritzbox) {fritzboxtr064="maconline:xxxxxxx"}
Contact HenningsAHandy "Henning Arbeit [MAP(presence.map):%s]" (gfritzbox) {fritzboxtr064="maconline:x"}
Code: Alles auswählen
OPEN=Anwesend
CLOSED= Abwesend
NULL=unbekannt
Wenn alle drei Handys den Status "CLOSED" erhalten, dann soll die Regel auslösen.... und alles obrige ausschalten ...
Problem :
Sie startet schon wenn nur ein Gerät den status "CLOSED" erhält:
Warum ?HenningsHandy changed from OPEN to CLOSED
2020-01-25 08:10:44.540 [vent.ItemStateChangedEvent] - fboxWanLayer1DownstreamMaxBitRate changed from 134168000 to 134529000
2020-01-25 08:10:44.542 [vent.ItemStateChangedEvent] - Echo_Living_Room_MediaProgressTime changed from 109 s to 110 s
2020-01-25 08:10:44.545 [ome.event.ItemCommandEvent] - Item 'Printer' received command OFF
2020-01-25 08:10:44.558 [ome.event.ItemCommandEvent] - Item 'Buero_S' received command OFF
2020-01-25 08:10:44.570 [ome.event.ItemCommandEvent] - Item 'TplinkEGOG' received command OFF
2020-01-25 08:10:44.581 [ome.event.ItemCommandEvent] - Item 'TplinkKG' received command OFF
2020-01-25 08:10:44.596 [ome.event.ItemCommandEvent] - Item 'dlinkWo' received command OFF
2020-01-25 08:10:44.608 [ome.event.ItemCommandEvent] - Item 'Einliegerwohnung' received command OFF
2020-01-25 08:10:44.612 [nt.ItemStatePredictedEvent] - Printer predicted to become OFF
2020-01-25 08:10:44.620 [ome.event.ItemCommandEvent] - Item 'Light1_ColorTemperature_Switch' received command OFF
2020-01-25 08:10:44.634 [ome.event.ItemCommandEvent] - Item 'Light3_ColorTemperature_Switch' received command OFF
2020-01-25 08:10:44.646 [ome.event.ItemCommandEvent] - Item 'Light2_ColorTemperature_switch' received command OFF
2020-01-25 08:10:44.656 [nt.ItemStatePredictedEvent] - Buero_S predicted to become OFF
2020-01-25 08:10:44.678 [nt.ItemStatePredictedEvent] - TplinkEGOG predicted to become OFF
2020-01-25 08:10:44.693 [nt.ItemStatePredictedEvent] - TplinkKG predicted to become OFF
2020-01-25 08:10:44.702 [nt.ItemStatePredictedEvent] - dlinkWo predicted to become OFF
2020-01-25 08:10:45.139 [nt.ItemStatePredictedEvent] - Light1_ColorTemperature_Switch predicted to become OFF
2020-01-25 08:10:45.149 [nt.ItemStatePredictedEvent] - Light3_ColorTemperature_Switch predicted to become OFF
2020-01-25 08:10:45.159 [nt.ItemStatePredictedEvent] - Light2_ColorTemperature_switch predicted to become OFF
2020-01-25 08:10:45.166 [vent.ItemStateChangedEvent] - TplinkEGOG changed from ON to OFF
2020-01-25 08:10:45.169 [vent.ItemStateChangedEvent] - TplinkKG changed from ON to OFF
2020-01-25 08:10:45.172 [vent.ItemStateChangedEvent] - dlinkWo changed from ON to OFF
2020-01-25 08:10:45.173 [vent.ItemStateChangedEvent] - Light1_ColorTemperature_Switch changed from ON to OFF
Es muss doch an diesm Part liegen oder:
Code: Alles auswählen
when
Item HenningsAHandy changed from OPEN to CLOSED or
Item RitasHandy changed from OPEN to CLOSED or
Item HenningsHandy changed from OPEN to CLOSED
then
if(HenningsAHandy.state == CLOSED && RitasHandy.state == CLOSED && HenningsHandy.state == CLOSED)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
-
- Beiträge: 589
- Registriert: 20. Sep 2019 05:49
Re: Abwesenheitsregel in Openhab
Versuch mal:
Code: Alles auswählen
when
Item HenningsAHandy changed or
Item RitasHandy changed or
Item HenningsHandy changed
then
if(HenningsAHandy.state == CLOSED && RitasHandy.state == CLOSED && HenningsHandy.state == CLOSED)
{ deine Wünsche }
-
- Beiträge: 50
- Registriert: 13. Nov 2019 17:41
Re: Abwesenheitsregel in Openhab
Hallo violine,
Die Regel nach Änderung mit Deinem Vorschlag:
hat leider auch geschalten, wenn nur ein Gerät CLOSED bekommt.
Ich habe mal folgende Zeile nach "then" eingefügt ob die Regel auch triggert ..
Im Log erscheint:
Gruß Henning
Die Regel nach Änderung mit Deinem Vorschlag:
Code: Alles auswählen
rule "Abwesenheit ALEXA Ausschalten"
when
Item HenningsAHandy changed or
Item RitasHandy changed or
Item HenningsHandy changed
then
if(HenningsAHandy.state == CLOSED && RitasHandy.state == CLOSED && HenningsHandy.state == CLOSED)
Mehrfachsteckdos_02_S5.sendCommand(OFF)
Printer.sendCommand(OFF)
Buero_S.sendCommand(OFF)
TplinkEGOG.sendCommand(OFF)
TplinkKG.sendCommand(OFF)
dlinkWo.sendCommand(OFF)
Einliegerwohnung.sendCommand(OFF)
Light1_ColorTemperature_Switch.sendCommand(OFF)
Light3_ColorTemperature_Switch.sendCommand(OFF)
Light2_ColorTemperature_switch.sendCommand(OFF)
end
Ich habe mal folgende Zeile nach "then" eingefügt ob die Regel auch triggert ..
Code: Alles auswählen
logInfo("Abwesenheit ALEXA Ausschalten"," triggert")
was mich aber stutzig macht ist das alles aus geht ausser2020-01-25 10:08:45.180 [INFO ] [script.Abwesenheit ALEXA Ausschalten] - triggert
Code: Alles auswählen
Mehrfachsteckdos_02_S5.sendCommand(OFF)