Seite 1 von 1

Dynamische Icons

Verfasst: 11. Aug 2024 16:02
von kaiserdom
Hallo geschätztes Forum!

Ich benutze openHAB 4.2.1 auf einem Raspi5 und alles läuft soweit zufriedenstellend.
Nun sticht mich der Hafer und ich wollte dynamische Icons ausprobieren am Beispiel der Mondphasen.
Ich habe also aus dem Astro Bindingg den channel astro:moon:local:phase#name mit einem neuen Item MoonPhase verlinkt:
  • Name: MoonPhase
    Label: Mond Phase
    Type: String
    Category: oh:moon2
In /etc/openhab/icons/classic befinden sich dazu 8 Dateien (moon2-new.svg, moon2-waxing_crescent.svg, ...) gemäß den 8 möglichen Mondphasen aus dem Astro Binding sowie eine "leere" Datei moon2.svg. Und tatsächlich wird in der Item-Liste (Einstellungen / Items) das Item samt Icon korrekt dargestellt.

Nun wollte ich noch den englischen Zustandstext (im Moment: WAXING_CRESCENT) ins Deutsche übersetzen. Dazu gibt es nun in /etc/openhab/transform eine Übersetzungstabelle moon.map. Weiters habe ich beim channel das Profil MAP und unter Profile Configuration die Datei moon.map gewählt.

Nach einem Save wird tatsächlich der deutsche Text (Zunehmende Sichel) angezeigt, allerdings ist das Icon verschwunden - es wird das Standard-Icon moon2.svg angezeigt! Da hilft es auch nicht, bei den Item-Metadaten unter Default List Item Widget den Schalter Icon depends on state zu aktivieren.
Ich kann entweder das korrekte dynamische Icon angezeigt bekommen (Profile Standard) oder den deutschen State-Text (Profile MAP mit moon.map), aber nicht beides gleichzeitig!

Was ist da los?
Kennt jemand diesen Effekt?
Kann mir jemand helfen?

Gruß kaiserdom

Re: Dynamische Icons

Verfasst: 11. Aug 2024 20:04
von udo1toni
Falsche Stelle :)
Die Übersetzung sollte nicht den Status des Items ändern, sondern ausschließlich die Anzeige.
Das heißt, Du darfst das Mapping nicht im Channel vornehmen und auch nicht im Link zwischen Chanel und Item, sondern im Pattern (Metadaten-> State Description->Pattern). Die Notation sieht dann so aus:

Code: Alles auswählen

MAP(dateiname.map):%s

Re: Dynamische Icons

Verfasst: 12. Aug 2024 15:33
von kaiserdom
Hallo udo1toni,

vielen Dank für die prompte und kompetente Hilfe.

Ich habe das bestehende Item MoonPhase gelöscht, und aus dem channel astro:moon:local:phase#name ein neues Item mit selbem Namen erzeugt, und dann unter Metadata -> State Description -> Pattern eingetragen: MAP(moon2.map):%s.

Soweit, so gut; in der Liste der Items sieht das so aus: (1-Item-Liste.jpg) - mit originalem englischen State-Text,
wenn man das Icon anklickt, dann so: (2-Icon-Detail.jpg) - mit übersetztem deutschen Text.

Aber eigentlich wollte ich den übersetzten deutschen Text (auch) in der Items-Liste haben.
Geht das?

Gruß, kaiserdom

Re: Dynamische Icons

Verfasst: 12. Aug 2024 19:14
von udo1toni
Nein, das geht nicht. Die Itemliste zeigt immer den originalen Wert an, und das auch mit Absicht. Die Übersetzung wird aber an allen anderen Stellen automatisch angezeigt.
Bitte immer daran denken: Die Administrationsoberfläche ist ausschließlich für die Administration gedacht, nicht zum gewöhnlichen Zugriff.

Re: Dynamische Icons

Verfasst: 13. Aug 2024 13:06
von kaiserdom
Schade, der Admin müßte doch alle Rechte haben, so auch die Anzeige nach eigenem Gutdünken wählen zu können, seis drum.

Noch eine Frage / Anmerkung zu Items vom Typ Number, wo die Doku sagt:

"Number State Matching Rule: For Number Items the equal or next lowest state icon that can be found will be used. The default icon will be used for negative numbers, or above 100 i.e. the available filename range is icon-0 to icon-99 only. Dimmer type Items work in the same way, being limited to 0-100 anyway."

Das ist etwas irreführend, ich habe z.B. Icons definiert für die Stützwerte 0, 8, 13, 18, 24, 40 - also nicht von 0 ... 100 und auch nicht äquidistant. Die Icon-Dateien heißen demnach: icon.svg, icon-8.svg, icon-13.svg, icon-18.svg, icon-24.svg, icon-40.svg. Und tatsächlich - für ein Item mit einem bestimmten Wert wird das gleiche oder nächstniedrige Icon gewählt (z.B. Item-Wert 22 -> icon-18.svg). Werte <0 und >100 führen zum Default-Icon.

Etwas anders verhält sich die Zuordnung Item-Wert zum entsprechenden Icon für negative Item-Werte:
Stützwerte: 0, -8, -13, -18,-24, -40 mit den Icon-Dateien: icon.svg, icon-0.svg, icon--8.svg, icon--13.svg, icon--18.svg, icon--24.svg, icon--40.svg.
Nur wenn der Item-Wert genau mit einer Icon-Datei übereinstimmt, wird das zugehörige Icon dargestellt (z.B. Item-Wert= -18 -> icon--18.svg wird dargestellt), Zwischenwerte werden ignoriert und führen zum Default-Icon.

Das ist etwa dann bedeutsam, wenn man rssi-Werte (received signal strength indication) dynamisch darstellen will. Der übliche Bereich liegt hier etwa zwischen -40 und -100 dBm.
Ich habe mir die Mühe gemacht, für jeden einzelnen dBm-Wert eine Icon-Datei zu definieren - also ca. 60 Dateien mit 1 dBm Increment. Es funktioniert zwar, aber elegant ist das nicht!

Geht das auch anders/besser?

Gruß, kaiserdom

Re: Dynamische Icons

Verfasst: 13. Aug 2024 16:32
von udo1toni
Tatsächlich ist es nicht vorgesehen, dass negative Werte überhaupt auf ein anderes als das default Icon gemappt werden.
Es ist also ein Fehler, dass dies für negative Werte überhaupt funktioniert :)
Ich verstehe aber das Anliegen bezüglich "technisch korrekter" Werte.
Mutmaßlich wäre es das beste, einen Verbesserungsvorschlag einzureichen.
Das Verhalten müsste dann, um konsistent zu bleiben, alle Werte niedriger als das "negativste" Icon als Default darstellen, genauso wie alle ungültigen Werte (NULL, UNDEF usw.) und vermutlich auch alle Werte über 100 (Abwärtskompatibilität). Alle Werte dazwischen muss es dann abhängig vom Bereich auf das "nächst niedrigere" oder "gleich große" Icon mappen.