mehrzeilige devStateIcons

Begonnen von derHeimwerker, 31 Mai 2022, 17:15:01

Vorheriges Thema - Nächstes Thema

derHeimwerker

Hallo zusammen,

hier wird beschrieben, wie ich ein mehrzeilige devStateIcon setzen kann:
https://forum.fhem.de/index.php/topic,97586.msg908277.html#msg908277

Ich bekomme es nicht hin, meine Attribute ähnlich darzustellen.

Mein "stateFormat" sieht wie folgt aus:
{'Abschattung'.AttrVal($name,'ARS_AktivAbschattung','nv').' <br>
morgens:'.AttrVal($name,'ARS_AktivMorgens','nv').' <br>
abends:'.AttrVal($name,'ARS_AktivAbends','nv').' <br>
Komfort:'.AttrVal($name,'ARS_AktivLueften','nv')}br>


Damit werden mir die vier Attribute auch sauber untereinander dargestellt.
Aber den Part mit den Icons bekomme ich nicht hin. Kan mir da jemand helfen?
Danke!

rudolfkoenig

Ich habe angenommen, dass alle Readings nur on und off als Wert annehmen koennen.

Dann kann ich mit dieser Definition:
define i2 dummy
attr i2 room iconDemo
attr i2 stateFormat\
Abschattung:\
1:ARS_AktivAbschattung\
<br>\
morgens:\
2:ARS_AktivMorgens\
<br>\
abends:\
3:ARS_AktivAbends\
<br>\
Komfort:\
4:ARS_AktivLueften

attr i2 devStateIcon 1.on:on 1.off:off 2.on:on 2.off:off 3.on:on 3.off:off 4.on:on 4.off:off


und nachfolgende Initialisierung:
setstate i2 2019-02-19 10:15:12  ARS_AktivAbschattung on
setstate i2 2019-02-19 10:20:24  ARS_AktivMorgens     off
setstate i2 2019-02-19 10:15:14  ARS_AktivAbends      on
setstate i2 2019-02-19 10:14:32  ARS_AktivLueften     off

set i2 on


das angehaengete Bild erzeugen.

Kurze Erklaerung:
- die Daten fuer ein Bild muessen im state in einer eigenen Zeile stehen (z.Bsp. 1:ARS_AktivAbschattung)
- stateFormat erkennt Reading Namen, und loest diese automatisch auf (aus 1:ARS_AktivAbschattung wird 1:on)
- der Kunstgriff mit 1:, 2:, etc ist fuer devstateicon, damit man da das on fuer Abschattung vom on fuer morgens unterscheiden kann. Wenn das nicht noetig ist, kann mann 1: usw sparen, und im devstateIcon 1.on, 2.on etc als on zusammenfassen.
- im devStateIcon schreibt man 1.on fuer 1:on, da hier : der Trenner ist, und damit im Regexp-Teil nicht verwendet werden darf, aber 1.on auch 1:on matcht.

derHeimwerker

Vielen Dank für die Erklärung. Allerings sollen bei mir Attribute dargestellt werden und keine readings.
Es sind die Attribute:

ARS_AktivAbschattung
ARS_AktivMorgens
ARS_AktivAbends
ARS_AktivLueften

Die ich mir über stateFormat
{'Abschattung'.AttrVal($name,'ARS_AktivAbschattung','nv').' <br>
morgens:'.AttrVal($name,'ARS_AktivMorgens','nv').' <br>
abends:'.AttrVal($name,'ARS_AktivAbends','nv').' <br>
Komfort:'.AttrVal($name,'ARS_AktivLueften','nv')}br>


anzeigen lasse.

Mit Attributen scheint das aber so nicht zu funktionieren.



rudolfkoenig

Dass es hier um Attribute geht, habe ich uebersehen, ist fuer mich irgendwie ungewoehnlich.

stateFormat unterstuetzt noch "Set Magic" (https://fhem.de/commandref_modular.html#set), oder perl.
Fuer diesen Zweck sollte Set Magic reichen:
attr i2 stateFormat\
Abschattung:\
1:[a:$name:ARS_AktivAbschattung]\
<br>\
morgens:\
2:[a:$name:ARS_AktivMorgens]\
<br>\
abends:\
3:[a:$name:ARS_AktivAbends]\
<br>\
Komfort:\
4:[a:$name:ARS_AktivLueften]

derHeimwerker

Super. Vielen Dank. Funktioniert wunderbar. SetMagic war mir neu!

derHeimwerker

Doch nocht nicht ganz zu ende...

kann ich die Attribute auch noch per Klick auf das Icon on/off Schalten?

rudolfkoenig

Ja, es braucht aber neben einem angepassten devStateIcon einen cmdalias:
attr i2 devStateIcon\
1.on:on:ARS_AktivAbschattung+off 1.off:off:ARS_AktivAbschattung+on\
2.on:on:ARS_AktivMorgens+off     2.off:off:ARS_AktivMorgens+on\
3.on:on:ARS_AktivAbends+off      3.off:off:ARS_AktivAbends+on\
4.on:on:ARS_AktivLueften+off     4.off:off:ARS_AktivLueften+on

define ca_i2 cmdalias set i2 ARS_A.* AS attr i2 $EVTPART1 $EVTPART2;; set i2 eval



Es wird hier zunehmend klar, dass man fuer diese Art von Aufgaben nicht Attribute sondern Readings verwenden sollte.