Fensterkontakt Status
-
- Beiträge: 70
- Registriert: 15. Nov 2021 10:02
Re: Fensterkontakt Status
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
- udo1toni
- Beiträge: 13864
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Fensterkontakt Status
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
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
-
- Beiträge: 70
- Registriert: 15. Nov 2021 10:02
Re: Fensterkontakt Status
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.
Kannst Du damit was anfangen?
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:
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
- udo1toni
- Beiträge: 13864
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Fensterkontakt Status
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.
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
-
- Beiträge: 70
- Registriert: 15. Nov 2021 10:02
Re: Fensterkontakt Status
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
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
- udo1toni
- Beiträge: 13864
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Fensterkontakt Status
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
-
- Beiträge: 70
- Registriert: 15. Nov 2021 10:02
Re: Fensterkontakt Status
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.
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
- udo1toni
- Beiträge: 13864
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Fensterkontakt Status
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
-
- Beiträge: 70
- Registriert: 15. Nov 2021 10:02
Re: Fensterkontakt Status
Dann habe ich das Prinzip verstanden, allerdings funktioniert es so immer noch nicht. Hier exemplarisch die Group Items
So sehen jetzt die Fenster aus
Was mich u.a. wundert, im Log werden die Fenster scheinbar zyklisch abgefragt, d.h. nicht (nur) bei Änderung des Status.
Wenn ich ein Fenster öffne passiert mit dem Group Item gar nichts, wenn ich es dann schließe passiert folgendes:
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"]
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"}
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
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
- udo1toni
- Beiträge: 13864
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Fensterkontakt Status
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