Dynamische Icons verwenden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Thor4x
Beiträge: 9
Registriert: 3. Jan 2021 13:53

Dynamische Icons verwenden

Beitrag von Thor4x »

Hallo,

ich möchte für ein Dachfenster dynamische Icons verwenden, damit ich in der openHAB App auf dem Smartphone sofort sehe, ob das Fenster offen oder geschlossen ist.

So sieht der relevante Teil meiner Sitemap aus:

Code: Alles auswählen

Default	item=GaesteWC_Rollo_Dachfenster_Set 	label="Dachfenster [%s]"	icon="window-open" 	visibility=[GaesteWC_Rollo_Dachfenster_Level==0]
Default	item=GaesteWC_Rollo_Dachfenster_Set 	label="Dachfenster [%s]"	icon="window-closed"	visibility=[GaesteWC_Rollo_Dachfenster_Level==100]
Ich habe selbst keine Icons angelegt, sondern verwende die Standard-Icons, also die "classic icons" wie hier geschildert:
https://www.openhab.org/docs/configurat ... s/classic/

Wenn man auf dieser Seite mit der Maus über das Fenster/Window-Icon fährt, dann sieht man, dass es dort, dass man z.B. "window-closed" und "window-open" als dynamische Icons verwenden kann. Das würde ich auch gerne, mir wird aber stattdessen immer nur das Standard-Icon "window" angezeigt, unabhängig davon, ob das Item "GaesteWC_Rollo_Dachfenster_Set" den Wert "0" oder den Wert "100" hat.

Visibility scheine ich aber korrekt zu verwenden, denn wenn ich dort den Wert beispielsweise von "100" auf "10" abändere (während das Item auch wirklich den Wert "100" hat), dann wird (korrekterweise) gar kein Icon mehr angezeigt.

Ich bin Anfänger und vermute auch einen Anfängerfehler. Kann mir jemand helfen? Warum klappt das mit den dynamischen Icons nicht?

Hier noch der Auszug aus der Karaf Konsole, wenn ich den Button zum Schließen des Dachfensters drücke:

Code: Alles auswählen

19:30:49.849 [INFO ] [smarthome.event.ItemCommandEvent     ] - Item 'GaesteWC_Rollo_Dachfenster_Set' received command DOWN
19:30:49.861 [INFO ] [arthome.event.ItemStatePredictedEvent] - GaesteWC_Rollo_Dachfenster_Set predicted to become DOWN
19:30:49.895 [INFO ] [smarthome.event.ItemStateChangedEvent] - GaesteWC_Rollo_Dachfenster_Set changed from 0 to 100
19:30:50.121 [INFO ] [smarthome.event.ItemStateChangedEvent] - GaesteWC_Rollo_Dachfenster_Set changed from 100 to 0
19:30:50.898 [INFO ] [smarthome.event.ItemStateChangedEvent] - GaesteWC_Rollo_Dachfenster_Set changed from 0 to 100
Warum am Ende von 0 zu 100, wieder zu 0 und wieder zu 100 gewechselt wird verstehe ich übrigens auch nicht. :/
von udo1toni » 16. Mai 2022 20:10
Ich hab es gerade noch mal ausprobiert, es ist tatsächlich so, dass die Zuordnung des icon Namens den dynamischen Teil nicht mehr berücksichtigt. Das hat mal funktioniert. Ich vermute, jemand hat das "repariert", weil irgendjemand anderes sich über fehlende Dynamik beschwert hat...

Workaround hat @peter-pan ja schon beschrieben... Entweder Du fügst drei Dateien window1.svg, window1-0.svg und window1-90.svg ein, wobei 0 dann das open-Icon ist und 90 das closed-Icon. Das Icon funktioniert dann automatisch mit dem normalen Status, ohne dass Du extra (außer dem iconnamen window1) etwas konfigurieren musst.
Oder Du benennst die Dateien ohne bindestrinch, also z.B. windowopen.svg und windowclosed.svg. Dann musst Du über die visibility gehen, wie Du es schon versucht hast.
Gehe zur vollständigen Antwort

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

Re: Dynamische Icons verwenden

Beitrag von udo1toni »

Warum willst Du überhaupt ein Fenster als Icon, wenn es sich doch um einen Rollladen handelt?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Thor4x
Beiträge: 9
Registriert: 3. Jan 2021 13:53

Re: Dynamische Icons verwenden

Beitrag von Thor4x »

Es handelt sich nicht um einen Rollo, sondern um ein (Dach-)Fenster, welches sich elektrisch öffnen und schließen lässt.
Die Item-Bezeichnung hat dich vermutlich verwirrt. Die ist unglücklich gewählt und rührt daher, dass ein Rolladenaktor (HmIP-BROLL) verwendet wird.

Hat zwar nichts mit dem Thema hier zu tun, aber so sieht das Schaltbild aus:
Bild

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

Re: Dynamische Icons verwenden

Beitrag von udo1toni »

Da möchte ich dann aber dringend dazu raten, anders vorzugehen.

Erst mal: Ja, openHAB generiert aus den Channels irgendwelche Itemnamen, die dann meist Hardware Namen enthalten. Aber diese Automatik ist allenfalls für schnelles Arbeiten beim Anlegen interessant. Später hat man damit aber mehr Arbeit.

Ich hatte das letztens schon länglich erläutert und versuche mich hier kurz zu fassen: Things sind als Modell der Hardware gedacht. Deshalb kann es sinnvoll sein, im Thingnamen Bezug auf die Hardware zu nehmen, aber in der Kürze liegt die Würze. also z.B. roll1 für das Thing - homematic kommt ja durch das Binding automatisch hinzu - und ch1 für den ersten Channel (auch wenn der Aktor vielleicht ohnehin nur einen Channel hat, aber damit werden die Namen konsistent). Nicht sinnvoll ist ein Channelname wie Hauptschalter oder Fenster_Im_Kinderzimmer_rechts_oben, selbst wenn der gleiche Aktor auch noch für das Kinderzimmer links unten zuständig sein sollte, einfach, weil so lange _Namen nur stören. In der Channelliste wird ohnehin das Label bevorzugt, dort kann man dann gerne auch mehr schreiben, wobei auch hier sicher gilt, sich kurz zu fassen.

Items sind komplett Hardware unabhängig. Das Fenster wird mutmaßlich das einzige Fenster im Gäste-WC sein. Es wird vermutlich höchstens noch einen Rollladen (also zusätzlich...) geben, aber ansonsten nichts weiter. Als Itemname sollte also GaesteWC_Fenster reichen. Oder meinetwegen GaesteWC_Fenster_Motor oder sowas in der Richtung. Ein Rollo ist es nicht. Dass es sich um ein Dachfenster handelt, wirst Du selbst wissen, es ist eine unnötige Information, die nur zu einem langen Itemnamen führt.

Das Icon wollte ich jetzt gerade selbst mal einbauen (in openHAB2 nutze ich das auch so), musste aber feststellen, dass der aktuelle Snapshot bezüglich der Sitemaps erhebliche Bugs enthält. Zum einen lässt sich keine Sitemap über die normale Text Konfiguration anlegen, zum zweiten wird der Parameter visibility überhaupt nicht erkannt und steht auch nicht als Option über die UI zur Verfügung.

Welche Version (exakt, am besten den Build) nutzt Du denn?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Thor4x
Beiträge: 9
Registriert: 3. Jan 2021 13:53

Re: Dynamische Icons verwenden

Beitrag von Thor4x »

Danke für deine Ausführungen. Ich habe damals einfach irgendwie mit der Benamung angefangen und dann hat sich das leider verselbständigt. Im konkreten Fall beispielsweise habe ich Copy & Paste von meinen Bestandskomponenten gemacht.
Da aber alles auch so läuft, wie es sollte, habe ich es getreu dem Motto "never touch a running system" auch nicht mehr angepackt und die Bezeichnungen eher als zu vernachlässigenden optischen Makel betrachtet.
Du hast aber natürlich vollkommen recht, dass das weder schön noch sinnvoll ist. Ich muss da wohl nochmal ran...

Ich benutze die Version 2.5.12.

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

Re: Dynamische Icons verwenden

Beitrag von udo1toni »

Ah. Die 2er Reihe sollte mit dem Icon überhaupt keine Probleme haben. Kann ich aber erst heute abend noch mal genauer testen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Thor4x
Beiträge: 9
Registriert: 3. Jan 2021 13:53

Re: Dynamische Icons verwenden

Beitrag von Thor4x »

udo1toni hat geschrieben: 11. Mai 2022 17:20 Ah. Die 2er Reihe sollte mit dem Icon überhaupt keine Probleme haben. Kann ich aber erst heute abend noch mal genauer testen.
Hattest du schon Gelegenheit, dir das Thema nochmal anzuschauen?

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

Re: Dynamische Icons verwenden

Beitrag von peter-pan »

Das mit den dynamischen Icons ist so eine Sache. Es gibt diese Icons eigentlich gar nicht im Ordner "classic". Dieser Ordner ist dafür da, dass du dir selber Icons dort einstellen kannst. Die Standard Icon sind irgendwo in den Tiefen des Systems verankert (aber frag mich bitte nicht wo :oops: )

Das Standard-Icon "window" hat einen festen Namen und kann in verschieden Ausprägungen vorkommen (AJAR, OPEN, CLOSED). Dies ist aber wieder abhängig vom Status des(r) Items. Bei dir also 0 - 100. Deshalb wird bei dir auch nur der Default-Wert angezeigt.

Um das in deiner Sitemap zu umgehen, müsstest du dir zwei eigene Icons im Classic-Ordner ablegen (aber bitte nicht mit den Standard-Icon-Namen), oder dir mit den Blinds- bzw- Rullerschutter-Icons, wie von Udo bereits beschrieben, behelfen. Und natürlich auch die Tatsache, dass Fenster eigentlich offen, zu oder gekippt sind und nicht irgend ein Wert zwischen 0 - 100.

Im Anhang findest du einen Satz mit Icons, die du in deinen Icon-Ordner kopieren kannst, dann kannst du diese auch in deiner Sitemap verwenden, wenn du die Namen dort anpasst. Ich hoffe das SVG-Icons erkannt werden.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

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

Re: Dynamische Icons verwenden

Beitrag von udo1toni »

Ich hab es gerade noch mal ausprobiert, es ist tatsächlich so, dass die Zuordnung des icon Namens den dynamischen Teil nicht mehr berücksichtigt. Das hat mal funktioniert. Ich vermute, jemand hat das "repariert", weil irgendjemand anderes sich über fehlende Dynamik beschwert hat...

Workaround hat @peter-pan ja schon beschrieben... Entweder Du fügst drei Dateien window1.svg, window1-0.svg und window1-90.svg ein, wobei 0 dann das open-Icon ist und 90 das closed-Icon. Das Icon funktioniert dann automatisch mit dem normalen Status, ohne dass Du extra (außer dem iconnamen window1) etwas konfigurieren musst.
Oder Du benennst die Dateien ohne bindestrinch, also z.B. windowopen.svg und windowclosed.svg. Dann musst Du über die visibility gehen, wie Du es schon versucht hast.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Thor4x
Beiträge: 9
Registriert: 3. Jan 2021 13:53

Re: Dynamische Icons verwenden

Beitrag von Thor4x »

peter-pan hat geschrieben: 16. Mai 2022 12:43 Im Anhang findest du einen Satz mit Icons, die du in deinen Icon-Ordner kopieren kannst, dann kannst du diese auch in deiner Sitemap verwenden, wenn du die Namen dort anpasst. Ich hoffe das SVG-Icons erkannt werden.
SVG-Icons werden nicht erkannt, ich verwende PNG-Icons und hatte mir auch schon welche angelegt. Deine sind allerdings schöner daher werde ich sie mir in PNG konvertieren, wie du es selbst auch schon in diesem Thread empfohlen hattest. ;)
udo1toni hat geschrieben: 16. Mai 2022 20:10 Workaround hat @peter-pan ja schon beschrieben... Entweder Du fügst drei Dateien window1.svg, window1-0.svg und window1-90.svg ein, wobei 0 dann das open-Icon ist und 90 das closed-Icon. Das Icon funktioniert dann automatisch mit dem normalen Status, ohne dass Du extra (außer dem iconnamen window1) etwas konfigurieren musst.
Oder Du benennst die Dateien ohne bindestrinch, also z.B. windowopen.svg und windowclosed.svg. Dann musst Du über die visibility gehen, wie Du es schon versucht hast.
Ich habe beide deiner Vorschläge getestet und tatsächlich hat auch beides funktioniert!

Für den Fall, dass es nochmal jemand nachvollziehen möchte, hier noch die Umsetzung in der Sitemap:

1)
"Visibility-Ansatz" (2 Bilddateien und zwei Zeilen in der Sitemap):

Code: Alles auswählen

	Default 	item=GaesteWC_Rollo_Dachfenster_Set 	label="Dachfenster (geöffnet) []"	icon="windowopen" 	visibility=[GaesteWC_Rollo_Dachfenster_Set==0]
	Default 	item=GaesteWC_Rollo_Dachfenster_Set 	label="Dachfenster (geschlossen) []"	icon="windowclosed"	visibility=[GaesteWC_Rollo_Dachfenster_Set==100]
Benötigte Dateien:
- windowopen.png
- windowclosed.png

2)
"Standard-Ansatz" (3 Bilddateien und eine Zeile in der Sitemap):

Code: Alles auswählen

	Default 	item=GaesteWC_Rollo_Dachfenster_Set 	label="Dachfenster []"	icon="window1"
Benötigte Dateien:
- window1.png
- window1-0.png
- window1-90.png

Habe mich für Variante 1) entschieden, weil ich dort den Zustand des Fensters noch zusätzlich im Text des Labels unterbringen kann.

Vielen Dank nochmal an Euch beide für eure Antworten :!:

Antworten