Fensterkontakt Status

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02

Re: Fensterkontakt Status

Beitrag von tommesd »

Jetzt bin ich ganz verwirrt, ich dachte g steht für eine Variable einer Schleife, so wie das i. Als was muss ich dann g konfigurieren und was ist der Inhalt der Gruppe g? Sorry für die vielleicht für den einen oder anderen dumme Fragen und danke für die Hilfe...
Openhabian 4.0.4

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

Re: Fensterkontakt Status

Beitrag von udo1toni »

g ist ein Objekt, welches durch die Schleife erzeugt und gefüllt wird.

gFenster_alle -> Ein Group Item, welches ausschließlich Group Items enthält.
.members -> Die Methode stellt eine Liste von Elementen zur Verfügung, eben die unmittelbaren Member der Gruppe gFenster_alle
.forEach[ -> führe das Lambda für jedes Element der Liste aus.
g| -> Verwende g als Platzhalter (bei jedem Durchlauf wird g zum Stellvertreter des aktuellen Listenelements. Dabei erbt es alle Eigenschaften. Mehr noch, es ist in diesem Moment synonym zum aktuellen Listenelement, deshalb funktioniert später auch das .postUpdate())
if( -> logische Bedingung, die true oder false liefern muss
g -> Das aktuelle Listenelement (ein Group Item)
.members -> die Member dieses Group Items
.filter[ -> filtere die Liste anhand des angegebenen Lambda (dabei wird die Liste elementweise durchlaufen. Nur die Elemente, für die die angegeben Bedingung erfüllt ist, werden in die Ausgangsliste übernommen)
i| -> verwende i als Platzhalter für das aktuelle Listenelement.
i.state != "CLOSED" -> Der Status des Elements darf nicht dem Wort "CLOSED" entsprechen
] -> End des Filter-Lambda
.size -> Anzahl der Elemente der Liste (dies ist die gefilterte Liste...
> 0) -> Falls größer 0 (es gibt mindestens ein Element, auf welches die Bedingung zutrifft)
g.postUpdate(OPEN) -> setze den Status von g (Platzhalter für die aktuell untersuchte Gruppe) auf OPEN
else -> falls nicht größer 0
g.postUpdate(CLOSED) -> setze auf CLOSED
] -> Ende des forEach Lambda
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02

Re: Fensterkontakt Status

Beitrag von tommesd »

Vielen Dank für die ausführliche Erläuterung.
Ich habe jetzt alles soweit angepasst. In gFenster_alle sind alle Group Items der Räume, darin sind die String Item von den Griff Sensoren. Die ganzen Group Items besitzen den Status NULL. Die String Items der Fenster wechseln beim Ändern der Zustände. Wenn ich die Rule speichere erscheint im Log folgender Hinweis.

Code: Alles auswählen

[INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'updatewindowgroupstatus.rules'

Code: Alles auswählen

[INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'updatewindowgroupstatus.rules', using it anyway:
Kannst Du damit was anfangen?

Code: Alles auswählen

rule "update group status" 
when
    Member of gFenster_alle changed
then
    gFenster_alle.members.forEach[g|
        if(g.members.filter[i|i.state != "CLOSED"].size > 0)
            g.postUpdate(OPEN)
        else
            g.postUpdate(CLOSED)
    ]
end

Code: Alles auswählen

Group gFenster_Gaestezimmer  "Fenster [%s]" <window> (gGaestezimmer,gFenster_alle)  ["Equipment"]
Group gFenster_Hobbyraum     "Fenster [%s]" <window> (gHobbyraum,gFenster_alle)     ["Equipment"]
Openhabian 4.0.4

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

Re: Fensterkontakt Status

Beitrag von udo1toni »

Der validation Issue bedeutet, dass dort eventuell etwas nicht komplett richtig ist, die Regel sollte aber funtionieren (das kann z.B. auftreten, wenn openHAB nicht sicherstellen kann, dass die verwendeten Methoden überhaupt zur Verfügung stehen).

Es wäre noch wichtig, dass die Group Items, in denen die String Items gespeichert sind, als Group:Contact definiert sind, sonst kann der Zustand ja nicht in diesem Item als Status gespeichert werden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02

Re: Fensterkontakt Status

Beitrag von tommesd »

Hallo nochmal,
irgendwie funktioniert es immer noch nicht ganz. Wenn ich ein Fenster von offen auf gekippt stelle, springt das GroupItem auf CLOSED. Könntest Du da nochmal drüber schauen oder brauchst Du noch mehr Infos?
Danke

Code: Alles auswählen

2022-03-07 15:03:26.222 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'updatewindowgroupstatus.rules'

2022-03-07 15:03:26.697 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'updatewindowgroupstatus.rules', using it anyway:

Code: Alles auswählen

2022-03-07 15:04:22.331 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'updatewindowgroupstatus-1' failed: 'members' is not a member of 'org.openhab.core.items.Item'; line 6, column 12, length 9 in updatewindowgroupstatus

Code: Alles auswählen

2022-03-07 15:04:22.325 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'FensterBueroVorneSTATE' changed from OPEN to TILTED

2022-03-07 15:04:22.326 [INFO ] [hab.event.GroupItemStateChangedEvent] - Item 'gFenster_Buero' changed from OPEN to CLOSED through FensterBueroVorneSTATE

2022-03-07 15:04:22.330 [INFO ] [hab.event.GroupItemStateChangedEvent] - Item 'gFenster_alle' changed from OPEN to CLOSED through gFenster_Buero

Code: Alles auswählen

Group:Contact:OR(OPEN,CLOSED) gFenster_Buero         "Fenster [%s]" <window> (gBuero,gFenster_alle)     ["Equipment"]
Group:Contact:OR(OPEN,CLOSED) gFenster_alle   	     "alle Fenster" <window> (gSonstiges) 		["Equipment"]
String  FensterBueroVorneSTATE              	     "Büro vorne [MAP(de.map):%s]" <window>  (gFenster_Buero)                  ["Point"]      {channel="homematic:HmIP-SRH:HomematicBridge:0007XXXXXXXXXX:1#STATE"}

Openhabian 4.0.4

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

Re: Fensterkontakt Status

Beitrag von udo1toni »

Ich hatte oben aber schon darauf hingewiesen, dass die Gruppen keine eigene Aggregation machen dürfen, oder? Die Rule dienst ja gerade dazu, die Aggregation zu berechnen. Also mach bitte das :OR(OPEN,CLOSED) mindestens von den Untergruppen weg. Für die Gruppe gFenster_alle hingegen kannst Du die Funktion stehen lassen, da hier ja nur noch Contact Items enthalten sind, für die die Aggregation funktionieren sollte.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02

Re: Fensterkontakt Status

Beitrag von tommesd »

Die Aggregation ist beim Wechsel von UI zu Textfile Configuration reingerutscht, sorry. Ich habe das angepasst, aber es funktioniert noch immer nicht.
Das FensterItem ist ja ein String mit den Zuständen OPEN, CLOSED und TILTED. Wenn ich Deine RULE richtig verstehe setzt diese das CONTACT GROUP Item auf OPEN wenn das STRING ITEM != CLOSED ist und sonst auf CLOSED.
Openhabian 4.0.4

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

Re: Fensterkontakt Status

Beitrag von udo1toni »

Genau. Contact unterstützt CLOSED und OPEN. Die Rule setzt das jeweilige Group Item auf OPEN, sobald eines der zugehörigen Items nicht auf CLOSED steht.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02

Re: Fensterkontakt Status

Beitrag von tommesd »

Dann habe ich das Prinzip verstanden, allerdings funktioniert es so immer noch nicht. Hier exemplarisch die Group Items

Code: Alles auswählen

Group:Contact                    gFenster_Buero                 "Fenster [%s]"          <window>            (gBuero,gFenster_alle)            ["Equipment"]
Group:Contact:OR(OPEN,CLOSED)    gFenster_alle                  "alle Fenster [%s]"     <window>            (gSonstiges)                      ["Equipment"]
So sehen jetzt die Fenster aus

Code: Alles auswählen

String    FensterBueroVorneSTATE            "Büro vorne"                              <window>       (gFenster_Buero)            ["Point"]    {channel="homematic:HmIP-SRH:HomematicBridge:0007YYYYYYYYYY:1#STATE"}
String    FensterBueroSeiteSTATE            "Büro Seite"                              <window>       (gFenster_Buero)            ["Point"]    {channel="homematic:HmIP-SRH:HomematicBridge:0007XXXXXXXXXX:1#STATE"}
Was mich u.a. wundert, im Log werden die Fenster scheinbar zyklisch abgefragt, d.h. nicht (nur) bei Änderung des Status.

Code: Alles auswählen

2022-03-08 07:46:23.877 [ERROR] [org.openhab.core.items.GenericItem  ] - Tried to set invalid state CLOSED (StringType) on item gFenster_Esszimmer of type ContactItem, ignoring it

2022-03-08 07:46:23.883 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'updatewindowgroupstatus-1' failed: 'members' is not a member of 'org.openhab.core.items.Item'; line 7, column 12, length 9 in updatewindowgroupstatus
Wenn ich ein Fenster öffne passiert mit dem Group Item gar nichts, wenn ich es dann schließe passiert folgendes:

Code: Alles auswählen

2022-03-08 07:52:41.981 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'FensterBueroVorneSTATE' changed from OPEN to CLOSED

2022-03-08 07:52:41.982 [INFO ] [hab.event.GroupItemStateChangedEvent] - Item 'gFenster_Buero' changed from UNDEF to CLOSED through FensterBueroVorneSTATE

Openhabian 4.0.4

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

Re: Fensterkontakt Status

Beitrag von udo1toni »

Zeige bitte mal alle betroffenen Items, nicht nur eine exemplarische Auswahl.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten