Seite 1 von 1

Optimierung einer RULE

Verfasst: 26. Sep 2019 10:51
von Heavy-Dee
Hallo zusammen,
In meinem Haus gibt es mehrer Beleuchtungsgruppen (grpLichtWohnzimmer, grpLichtEsszimmer, ...) je nach Item mit HUE oder einfach nur Tasmota geschaltet.
Zusätzlich habe ich eine Gruppe für Fernsehbeleuchtung (grpLichtTV) erstellt und diese bei den Items eingetragen.
Mit dem Switch "TV-Beleuchtung" werden alle Licht-Raumgruppen aus- und die Gruppe "grpLichtTV" eingeschaltet.

Code: Alles auswählen

rule "TV Beleuchtung"
when
    Item TV_Beleuchtung changed
then 
    if (previousState == OFF) 
    {   
    	// Licht-Raumgruppen ausschalten
        grpLichtWohnzimmer?.allMembers.filter(x | x.state != OFF).forEach[ item |
            item.sendCommand(OFF) 
        ]
        grpLichtEsszimmer?.allMembers.filter(x | x.state != OFF).forEach[ item |  
            item.sendCommand(OFF) 
        ]
        grpLichtGalerie?.allMembers.filter(x | x.state != OFF).forEach[ item |  
            item.sendCommand(OFF) 
        ]
        grpLichtWintergarten?.allMembers.filter(x | x.state != OFF).forEach[ item |  
            item.sendCommand(OFF) 
        ]
        // TV Licht einschalten
        grpLichtTV?.allMembers.filter(x | x.state != ON).forEach[ item |
            item.sendCommand(ON) 
            Thread::sleep(250)
        ]
    }
end
Eigentlich funktioniert alles soweit, unschön ist nur das erst alle Lampen aus- und die entsprechenden TV Lampen kurz danach wieder eingeschaltet werden.

Eigentlich hätte ich gerne das zuerst die Gruppe "grpLichtTV" ein und danach alle anderen ausgeschaltet werden!

Code: Alles auswählen

rule "TV Beleuchtung"
when
    Item TV_Beleuchtung changed
then
    if (previousState == OFF) 
    {   
        // TV Licht einschalten
        grpLichTVt?.allMembers.filter(x | x.state != ON).forEach[ item |
                item.sendCommand(ON) 
                Thread::sleep(250)
            ]
    }
    else if (previousState == ON) 
    {
    	// Licht-Raumgruppen ausschalten
        grpLichtWohnzimmer?.allMembers.filter(x | x.state != OFF).forEach[ item |  
            item.sendCommand(OFF) 
        ]
        grpLichtEsszimmer?.allMembers.filter(x | x.state != OFF).forEach[ item |  
            item.sendCommand(OFF) 
        ]
        grpLichtGalerie?.allMembers.filter(x | x.state != OFF).forEach[ item |
                item.sendCommand(OFF) 
        ]
        grpLichtWintergarten?.allMembers.filter(x | x.state != OFF).forEach[ item |  
            item.sendCommand(OFF) 
        ]
    }
end
Damit diese Rule funktioniert müssten bei den Licht-Raumgruppen die Items die zu der Gruppe "grpLichtTV" gehören ausgenommen werden.
Ist das über die Befehlszeilen:
"grpLichtWohnzimmer?.allMembers(ohne grpLichtTV).filter(x | x.state != OFF).forEach[ item | item.sendCommand(OFF) ]"
oder
"grpLichtWohnzimmer?.allMembers.filter(x | x.state != OFF).forEach[ item (!=grpLichtTV) | item.sendCommand(OFF) ]"
möglich bzw. wie zu realisieren?

Würde mich über ein paar Anregungen freuen :)

Re: Optimierung einer RULE

Verfasst: 26. Sep 2019 14:28
von udo1toni
Du suchst nach der Gruppenzugehörigkeit, dafür gibt es die Eigenschaft groupNames, welche eine Auflistung aller Gruppen bildet, der ein Item angehört.Der Filter sollte also ungefähr so aussehen (ohne getestet zu haben)

Code: Alles auswählen

grpLichtTV.members.filter[i|i.state != ON].forEach[m|m.sendCommand(ON)]
grpLichtAlle.allMembers.filter[i|!(i.groupNames.contains("grpLichtTV")) && i.state != OFF].forEach[m|m.sendCommand(OFF)]
In der Gruppe grpLichtAlle wären dann alle Licht-Gruppen drin.

Re: Optimierung einer RULE

Verfasst: 27. Sep 2019 08:41
von Heavy-Dee
Hallo Toni,
habe deinen Code ausprobiert und funktioniert Super
-> Du bist ne Wucht! Vielen, vielen Dank für deine tollen Lösungen :!: :!: :!:

Könntest du bitte mal nen Link schicken auf welchen Seiten man die Infos zu diesem Thema (GroupMember/Filterregeln usw.) findet?
Ich möchte ja auch was lernen und nicht nur von anderen meine Codes schreiben lassen. ;)

Re: Optimierung einer RULE

Verfasst: 27. Sep 2019 12:18
von udo1toni
Tut mir leid, :) da kann ich nur auf die Foren verweisen...

Re: Optimierung einer RULE

Verfasst: 27. Sep 2019 13:31
von sihui
udo1toni hat geschrieben: 27. Sep 2019 12:18 da kann ich nur auf die Foren verweisen...
Oder du schreibst doch endlich ein Buch über openHAB :D

Re: Optimierung einer RULE

Verfasst: 27. Sep 2019 15:13
von udo1toni
:lol:

Re: Optimierung einer RULE

Verfasst: 27. Sep 2019 15:41
von PeterA
ich bin ja für eine "UDOpedia" :)

Re: Optimierung einer RULE

Verfasst: 27. Sep 2019 23:25
von peter-pan
Ich glaub ja er hat das Buch(Bücher) schon längst geschrieben und gibt uns immer wieder einen kleinen Auszug davon preis ;)

BTW: Ich denke der Almanach wiegt so zwischen 20 - 30 Kilo 8-) :lol:

Re: Optimierung einer RULE

Verfasst: 28. Sep 2019 07:56
von Tokamak
Heavy-Dee hat geschrieben: 27. Sep 2019 08:41 Könntest du bitte mal nen Link schicken auf welchen Seiten man die Infos zu diesem Thema (GroupMember/Filterregeln usw.) findet?
Ich möchte ja auch was lernen und nicht nur von anderen meine Codes schreiben lassen. ;)
Mir hatte diese Sete geholfen: https://community.openhab.org/t/design- ... ules/20512