Member of Group - last Item falsch

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
mcdandrew
Beiträge: 175
Registriert: 13. Dez 2018 17:42
Answers: 0

Member of Group - last Item falsch

Beitrag von mcdandrew »

Ich habe verschiedene Items welche einfache nur via Ping auf Verfügbarkeit gecheckt werden.
Beispielsweise für unsere Fernseher gibt es folgende Items, welche alle einer Gruppe angehören

Code: Alles auswählen

Group:Switch:OR(ON,OFF) gfernseher		"Fernseher"

Switch phillips_tv	"Fernseher Wohnzimmer [MAP(pingdevice.map):%s]"	(gfernseher) {channel="network:pingdevice:phillips_tv:online"}
Switch samsung_gz_tv "Fernseher Gästezimmer[MAP(pingdevice.map):%s]"	(gfernseher) {channel="network:pingdevice:samsung_gz_tv:online"}
Switch samsung_oben_tv "Fernseher oben[MAP(pingdevice.map):%s]"		(gfernseher) {channel="network:pingdevice:samsung_jolin_tv:online"}
Um den Fernsehkonsum unserer Kinder kontrollieren zu können, hätte ich gerne bei jedem Eisnchalten und Abschalten eine Nachricht auf mein Handy.
Um nun nicht für jeden Fernseher eine eigene Rule zu erstellen, dachte ich mir ich erstelle eine Rule und lasse diese auf die Gruppe triggern. In einer Liste wird dann das letzte Element ausgelesen, welches seinen Status geändert hat.
So recht funktioniert das aber nicht....die Nachtricht kommt zwar an aber mit dem falschen Gerät.
Das Problem eigentlich nur bei der "Offline" Regel auf.

Code: Alles auswählen

rule "fernseher_offline"
when
	Member of gfernseher changed from ON to OFF 
then 
	val lastItem = gfernseher.members.filter[i | i.state==OFF ].head
	val labelOfItem = lastItem.label
	
	sendNotification("xxxxxxxxxx", labelOfItem + " - ausgeschalten")	
end


rule "fernseher_online"
when
	Member of gfernseher changed from OFF to ON 
then 
	
	val lastItem = gfernseher.members.filter[i | i.state==ON ].head
	val labelOfItem = lastItem.label
		
	sendNotification("xxxxxxxxx", labelOfItem + " - eingeschalten")
end

Anbeku
Beiträge: 216
Registriert: 12. Nov 2020 10:26
Answers: 4

Re: Member of Group - last Item falsch

Beitrag von Anbeku »

Ich kenne mich mit der DSL nicht so aus, aber wenn ich das richtig interpretiere, schaust du nur was das erste Element der Gruppe ist, welches eingeschaltet (oder ausgeschaltet) ist. Die Reihenfolge dürfte da völlig willkürlich sein. Das muss nicht das Element sein, dass diese Rule ausgelöst hat. Ich denke du kkannst einfach die Variable "triggeringItem" nehmen, die enthält immer das Item, das getriggert hat. Damit dürftest du deine Rule auch deutlich verkürzen können.

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

Re: Member of Group - last Item falsch

Beitrag von udo1toni »

Warum überhaupt zwei Rules? Warum der Umweg über die Gruppenmember? Du brauchst lediglich diese Rule:

Code: Alles auswählen

rule "Fernseher on-off"
when
    Member of gfernseher changed
then
    val String strState = if(triggeringItem.state == ON) "ein" else "aus"
    sendNotification("xxxxxxxxxx", triggeringItem.label + " - " + strState + "geschalten")
end
triggeringItem enthält das Item, welches die Rule ausgelöst hat.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

mcdandrew
Beiträge: 175
Registriert: 13. Dez 2018 17:42
Answers: 0

Re: Member of Group - last Item falsch

Beitrag von mcdandrew »

Manchmal kann es doch so einfach sein :lol:

Ich danke euch!

Antworten