Seite 2 von 2

Re: Openhab und Prozedur?

Verfasst: 13. Feb 2019 15:18
von udo1toni
Nein, das geht so nicht. Das Icon ist entweder dynamisch, dann ändert es sich mit dem Status, oder es ist fest. Ein Workaround existiert aber, und zwar über die visibility eines Widgets:
*.items

Code: Alles auswählen

String myItem "Mein Item" ... 
Number myItemIcon
myItemIcon ist ein Hilfsitem, um das Icon zu steuern.

*.sitemap

Code: Alles auswählen

Text item=myItem icon="icon1" visibility=[myItemIcon==1]
Text item=myItem icon="icon2" visibility=[myItemIcon==2]
Text item=myItem icon="icon3" visibility=[myItemIcon==3]
Text item=myItem icon="icon4" visibility=[myItemIcon==4]
Text item=myItem icon="icon5" visibility=[myItemIcon==5]
Es sind also 5 Widgets in der Sitemap angelegt, allerdings erscheint nur eines davon, abhängig davon, welchen Wert myItemIcon gerade hat. Man kann dann sogar zwischen statischen und dynamischen Icons umschalten.

Re: Openhab und Prozedur?

Verfasst: 13. Feb 2019 16:03
von fkempter
Hallo Udo
schade.
Aber ich denke es gibt mit visible ein anderse Problem.
Die Gruppe "gIoT_Status" beinhaltet cq 40 Items.
Kann ich die auch in die Schleife mitnehmen?
Ähnlich "m + myItemicon". und dan posUpdate.

Code: Alles auswählen

       
        gIoT_Status.members.forEach[m| {
                 m.postUpdate("OFFLINE")
                 m + myItemIcon.postUpdate(0)
        }

Re: Openhab und Prozedur?

Verfasst: 13. Feb 2019 19:35
von udo1toni
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.

Re: Openhab und Prozedur?

Verfasst: 13. Feb 2019 21:33
von fkempter
Hallo Udo
das ist ja Genial was es alles für funktionen gibt.
Aber ich habe kein Change auf sowas selbst daraufzukommen.
Ich habe lauter Eindeutige Itemnamen, somit bekomme ich das Problem nicht dopplete zu filtern
Vielen lieben Dank aus der Bodenseeregion.

Re: Openhab und Prozedur? [gelöst]

Verfasst: 14. Feb 2019 20:15
von udo1toni
Na ja, Chancen, das selbst zu finden... zugegebenermaßen nicht trivial. Am ehesten kann man noch die Rules anschauen, die es (vermutlich inzwischen zu tausenden) in den deutschen und englischen Foren sowie in github (openhab1-addons) gibt.
Eine andere Variante wäre noch, VSCode als Editor zu nutzen, korrekt eingerichtet (mit openHAB Plugin und in dessen Konfiguration eingetragenem openHAB Server) bekommt man Vorschläge für die Ergänzung des Eingebenen, wenn man z.B. einen Itemnamen eingibt und einen Punkt dahinter, bekommt man alle möglichen Ergänzungen mit kurzer Info zu notwendigen Parametern. Die Namen sind sprechend, und man kann sich meist an der Java Dokumentation orientieren (man sollte aber nicht vergessen, dass es sich um eine DSL handelt, die nicht auf Java aufsetzt, sondern auf XText.