Ich kopiere hie mal die ganze Rule hin:
Code: Alles auswählen
rule "log count"
when
Member of gSwitchgroup changed
then
logInfo("logCount","eingeschaltet sind {} items",gSwitchgroup.members.filter[m|m.state == ON].size)
logInfo("logCount","ausgeschaltet sind {} items",gSwitchgroup.members.filter[m|m.state == OFF].size)
logInfo("logCount","uninitialisiert sind {} items",gSwitchgroup.members.filter[m|m.state == NULL].size)
end
logInfo(Logger,Message) erzeugt einen Logeintrag in openhab.log, mit dem Level INFO, unter der Voraussetzung, dass das Loglevel für den angegebenen Logger auch mindestens INFO ist.
Logger ist der Name des Loggers (wobei das nur ein Teil des Loggernamen ist), Message ist die eigentliche Nachricht.
Die geschweiften Klammen werden als Platzhalter für einen Variablenwert betrachtet, dieser wird dann als weiterer Parameter angegeben.
In der vorliegenden Rule ist das
gSwitchgroup.members.filter[].size .size ergibt die Anzahl Einträge der zugehörigen Liste. Die Liste besteht in dem Fall aus den members, die aber gefiltert werden.
Der Filterausdruck
m | m.state == ON bedeutet: Nimm jedes Element und lade es ins Objekt
m. Prüfe ob die Bedingung
m.state == ON zutrifft. Wenn ja, lass das Element in der Liste, wenn nein lösche das Element von der Liste.
Links vom | steht also, wie das Objekt heißen soll, welches rechts vom | verwendet wird. Man kann auch noch links eine zweite Variable angeben (mit Komma getrennt), die enthält dann die Nummer auf der Liste (also bei einer Liste mit 10 Einträgen erhöht sich diese Variable bei jedem Durchlauf um eins, von 0 bis 9).
Das Lambda (das ist der Teil zwischen [ und ]) darf auch mehrere Befehle beinhalten. Beim Filter ist das eher nicht sinnvoll, man könnte aber auch noch mit forEach[] jedes der gefilterten Elemente ausgeben, z.B. so:
Code: Alles auswählen
gSwitchgroup.members.filter[m|m.state == ON].forEach[i, j |
logInfo("logCount","das {} Element heißt {}",j+1,i.name)
]
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet