Optimierung einer RULE

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Optimierung einer RULE

Beitrag 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 :)
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

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

Re: Optimierung einer RULE

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Re: Optimierung einer RULE

Beitrag 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. ;)
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

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

Re: Optimierung einer RULE

Beitrag von udo1toni »

Tut mir leid, :) da kann ich nur auf die Foren verweisen...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Optimierung einer RULE

Beitrag 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
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

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

Re: Optimierung einer RULE

Beitrag von udo1toni »

:lol:
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Optimierung einer RULE

Beitrag von PeterA »

ich bin ja für eine "UDOpedia" :)
- OpenHab 2.4
#PWRUP

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Optimierung einer RULE

Beitrag 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:
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Optimierung einer RULE

Beitrag 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
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Antworten