FHEM Forum

FHEM => Frontends => FHEMWEB => Thema gestartet von: derHeimwerker am 31 Mai 2022, 17:15:01

Titel: mehrzeilige devStateIcons
Beitrag von: derHeimwerker am 31 Mai 2022, 17:15:01
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!
Titel: Antw:mehrzeilige devStateIcons
Beitrag von: rudolfkoenig am 01 Juni 2022, 12:32:57
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.
Titel: Antw:mehrzeilige devStateIcons
Beitrag von: derHeimwerker am 01 Juni 2022, 21:18:55
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.


Titel: Antw:mehrzeilige devStateIcons
Beitrag von: rudolfkoenig am 02 Juni 2022, 18:13:47
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]
Titel: Antw:mehrzeilige devStateIcons
Beitrag von: derHeimwerker am 02 Juni 2022, 22:10:30
Super. Vielen Dank. Funktioniert wunderbar. SetMagic war mir neu!
Titel: Antw:[erledigt]mehrzeilige devStateIcons
Beitrag von: derHeimwerker am 02 Juni 2022, 22:42:26
Doch nocht nicht ganz zu ende...

kann ich die Attribute auch noch per Klick auf das Icon on/off Schalten?
Titel: Antw:mehrzeilige devStateIcons
Beitrag von: rudolfkoenig am 03 Juni 2022, 09:22:47
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.