Abwesenheitsregel in Openhab

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

violine21
Beiträge: 589
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Abwesenheitsregel in Openhab

Beitrag von violine21 »

HeHa hat geschrieben: 20. Jan 2020 09:34 ...nur ein or hinter dem dritten Item habe ich weggelassen...
Na klar! Klassischer Copy-Paste-Fehler :oops:

Timtam
Beiträge: 40
Registriert: 20. Jan 2020 15:51

Re: Abwesenheitsregel in Openhab

Beitrag von Timtam »

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:

Code: Alles auswählen

Group:Contact:AND(CLOSED,OPEN) gZuHause
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:

Code: Alles auswählen

Group:Contact:OR(OPEN,CLOSED) gZuHause
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:

Code: Alles auswählen

rule "Abwesend setzen"
when
  Item gZuHause changes to CLOSED
then
  ...
end
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:

Code: Alles auswählen

gLampenWohnzimmer.sendCommand(OFF)
alle Lampen im Wohnzimmer ausschalten.

Vielleicht räumt das deinen Code etwas auf und dient der Übersichtlichkeit :).

HeHa
Beiträge: 50
Registriert: 13. Nov 2019 17:41
Answers: 1

Re: Abwesenheitsregel in Openhab

Beitrag von HeHa »

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

HeHa
Beiträge: 50
Registriert: 13. Nov 2019 17:41
Answers: 1

Re: Abwesenheitsregel in Openhab

Beitrag von HeHa »

so ....

Ausgehend von der Rule:

Code: Alles auswählen

rule "Automatisches Ausschalten ab 2200 Uhr"
when
 
then
Buero_S.sendCommand(OFF)
end
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

Timtam
Beiträge: 40
Registriert: 20. Jan 2020 15:51

Re: Abwesenheitsregel in Openhab

Beitrag von Timtam »

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.

Code: Alles auswählen

rule "blablabla"
when
  Time cron "hier string einfuegen"
then
  ...
end
MfG.

Timtam

HeHa
Beiträge: 50
Registriert: 13. Nov 2019 17:41
Answers: 1

Re: Abwesenheitsregel in Openhab

Beitrag von HeHa »

Hallo Timtam,

aha ..

bedeutet wenn ich jeden Tag um 22:00 uhr die rule starten möchte gebe ich das wie folgt ein:
1cron.PNG
und erhalte als Ergebnis:

Code: Alles auswählen

0 0 22 1/1 * ? *
in der Regel:

Code: Alles auswählen

rule "blablabla"
when
  Time cron 0 0 22 1/1 * ? *
then
  ...
end
stimmt so .. wie gut dass es so Seiten gibt ...

Gruß Henning
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 13865
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Abwesenheitsregel in Openhab

Beitrag von udo1toni »

Wobei das Ergebnis auch nur die halbe Wahrheit ausspuckt.
Der Time cron Ausdruck sollte übrigens in Anführungszeichen stehen.

Code: Alles auswählen

Time cron "0 0 22 1/1 * ? *"
geht einfacher:

Code: Alles auswählen

Time cron "0 0 22 * * ?"
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:

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

HeHa
Beiträge: 50
Registriert: 13. Nov 2019 17:41
Answers: 1

Re: Abwesenheitsregel in Openhab

Beitrag von HeHa »

Danke udo1toni

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
Meine dazugehörigen Items:

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"}
presence.map:

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:
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
rule.PNG
Warum ?

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)
Gruß Henning
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

violine21
Beiträge: 589
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Abwesenheitsregel in Openhab

Beitrag von violine21 »

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   }

HeHa
Beiträge: 50
Registriert: 13. Nov 2019 17:41
Answers: 1

Re: Abwesenheitsregel in Openhab

Beitrag von HeHa »

Hallo violine,

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
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 ..

Code: Alles auswählen

logInfo("Abwesenheit ALEXA Ausschalten"," triggert")
Im Log erscheint:
2020-01-25 10:08:45.180 [INFO ] [script.Abwesenheit ALEXA Ausschalten] - triggert
was mich aber stutzig macht ist das alles aus geht ausser

Code: Alles auswählen

Mehrfachsteckdos_02_S5.sendCommand(OFF)
Gruß Henning

Antworten