So ähnlich
Der Trick besteht in diesem Fall darin, auch die myItemIcon Items in einer Gruppe zusammenzufassen (nennen wir sie mal gItemIcon). Dann kann man die Rule sehr einfach gestalten:
Code: Alles auswählen
gIoT_Status.members.forEach[m|
m.postUpdate("OFFLINE")
gItemIcon.members.filter[i|i.name.contains(m.name)].head.postUpdate(0)
]
Voraussetzung ist natürlich, dass die Member aus gIoT_Status alle Namen tragen, die nicht als Teil eines anderen Items der Gruppe stehen.
Weil das jetzt etwas verschwurbelt klingt, ein Beispiel:
Ein Item heißt
Heinz, ein weiteres Item heißt
Heinz01, das ist nicht erlaubt, denn wenn das Item
Heinz verarbeitet wird, wird der Filter zwei Items ausspucken (eben
HeinzIcon und
Heinz01Icon). Man könnte die Gruppe vor der Selektion noch sortieren, um sicher zu sein, dass das Item mit dem kürzesten Namen zuerst kommt
aber die einfachere Variante wird sicher sein, alle Items eineindeutig zu benennen, also z.B. das Item
Heinz in
Heinz00 umzubenennen.
Die geschweiften Klammern sind hier unnötig, das Lambda markiert bereits den Codeblock als zusammenhängend.
.filter gibt übrigens immer eine Liste zurück, weshalb man ein Element dieser Liste (
.head ist das erste Element der Liste) auswählen muss.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet