[fast gelöst] Gleichzeitig devStateIcon und stateFormat nutzen, nur wie?

Begonnen von Gisbert, 31 Januar 2021, 12:31:21

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo,

ich habe folgendes MQTT_DEVICE, bei dem ich devStateIcon zum An- und Ausschalten nutzen möchte, aber auch gleichzeitig stateFormat, um mir weitere textliche Informationen anzeigen zu lassen. Das gelingt mir nicht, da die Icon von deveStatIcon nur angezeigt werden, wenn ich kein stateFormat benutze. Ich habe im Forum gesucht, bin aber aus den Beiträgen nicht schlau geworden. Auch die commandref ist an der Stelle nicht sehr ausführlich. Ich will damit nur sagen, dass ich mich bemüht habe, aber noch nicht den richtigen Weg gefunden habe.

raw-Definition:
defmod WS_FlurEG MQTT_DEVICE
attr WS_FlurEG IODev MyBroker
attr WS_FlurEG autoSubscribeReadings WechselschalterFlurEG_13/+/+
attr WS_FlurEG cmdIcon auto_off:time_manual_mode auto_on:light_ceiling
attr WS_FlurEG devStateIcon 1:li_wht_off:switch 0:li_wht_on:switch
attr WS_FlurEG eventMap /cmd event,Schalten:switch/cmd event,Tag:day/cmd event,Nacht:night/cmd event,Auto:auto_on/cmd event,noAuto:auto_off/read
attr WS_FlurEG group Switch
attr WS_FlurEG icon li_wht_on
attr WS_FlurEG publishSet_cmd WechselschalterFlurEG_13/cmd
attr WS_FlurEG room CUL_HM
attr WS_FlurEG stateFormat {'uptime: '.ReadingsVal($name,'Laufzeit','').\
'</br> <div style="vertical-align: middle;; font-size: 85%">'.\
ReadingsVal($name,'Zeitstempel','').'</div> Vcc: '.\
round(ReadingsVal($name,'WechselschalterFlurEG.VCC',''),2).'V - Wifi: '.\
ReadingsVal($name,'WechselschalterFlurEG.Wifi','').'</br>'.\
ReadingsVal($name,'IPaddress','')}
attr WS_FlurEG subscribeReading_Dummy WechselschalterFlurEG_13/automode/Dummy
attr WS_FlurEG subscribeReading_LWT WechselschalterFlurEG_13/status/LWT
attr WS_FlurEG subscribeReading_PIRstate WechselschalterFlurEG_13/PIR/PIRstate
attr WS_FlurEG subscribeReading_Relais WechselschalterFlurEG_13/Relais/Relais
attr WS_FlurEG subscribeReading_Wechselschalter2 WechselschalterFlurEG_13/Wechselschalter2/Wechselschalter2
attr WS_FlurEG subscribeReading_WechselschalterFlurEG.System.Info WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.System.Info
attr WS_FlurEG subscribeReading_WechselschalterFlurEG.VCC WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.VCC
attr WS_FlurEG subscribeReading_WechselschalterFlurEG.Wifi WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.Wifi
attr WS_FlurEG subscribeReading_WechselschalterFlurEG.load WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.load
attr WS_FlurEG subscribeReading_day WechselschalterFlurEG_13/daylight/day
attr WS_FlurEG subscribeReading_mode WechselschalterFlurEG_13/automode/mode
attr WS_FlurEG subscribeReading_state WechselschalterFlurEG_13/detectVcc/state
attr WS_FlurEG userReadings Zeitstempel {substr(ReadingsTimestamp($name,'state',''),0,16)}, \
Laufzeit {min2human(ReadingsVal($name,'WechselschalterFlurEG.System.Info',''))}, \
IPaddress {"<a href='http://192.168.2.19' style='color: green;; text-decoration: underline;;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a>"}
attr WS_FlurEG webCmd auto_off:auto_on

setstate WS_FlurEG uptime: 0<span style='vertical-align: +4px;;;; font-size: 75%;;;;'>d</span><font size=2> </font>4<span style='vertical-align: +4px;;;; font-size: 75%;;;;'>h</span><font size=2> </font>0<span style='vertical-align: +4px;;;; font-size: 75%;;;;'>m</span></br> <div style="vertical-align: middle;; font-size: 85%">2021-01-31 12:05</div> Vcc: 3.37V - Wifi: -55</br><a href='http://192.168.2.19' style='color: green;; text-decoration: underline;;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a>
setstate WS_FlurEG 2021-01-31 12:07:54 IPaddress <a href='http://192.168.2.19' style='color: green;; text-decoration: underline;;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a>
setstate WS_FlurEG 2021-01-31 12:01:07 LWT Connected
setstate WS_FlurEG 2021-01-31 12:07:54 Laufzeit 0<span style='vertical-align: +4px;;;; font-size: 75%;;;;'>d</span><font size=2> </font>4<span style='vertical-align: +4px;;;; font-size: 75%;;;;'>h</span><font size=2> </font>0<span style='vertical-align: +4px;;;; font-size: 75%;;;;'>m</span>
setstate WS_FlurEG 2021-01-31 11:15:27 PIRstate 1
setstate WS_FlurEG 2021-01-31 11:15:27 Relais 0
setstate WS_FlurEG 2021-01-31 08:04:48 Wechselschalter2 0
setstate WS_FlurEG 2021-01-31 12:04:48 WechselschalterFlurEG.System.Info 240
setstate WS_FlurEG 2021-01-31 12:04:48 WechselschalterFlurEG.VCC 3.366
setstate WS_FlurEG 2021-01-31 12:04:48 WechselschalterFlurEG.Wifi -55
setstate WS_FlurEG 2021-01-31 12:04:48 WechselschalterFlurEG.load 5
setstate WS_FlurEG 2021-01-31 12:07:54 Zeitstempel 2021-01-31 12:07
setstate WS_FlurEG 2021-01-31 11:16:02 cmd event,noAuto
setstate WS_FlurEG 2021-01-31 12:04:48 day 1
setstate WS_FlurEG 2021-01-31 12:06:08 mode 0
setstate WS_FlurEG 2021-01-31 12:07:54 state 1
setstate WS_FlurEG 2021-01-31 12:07:54 transmission-state incoming publish received



list:
Internals:
   DEF       
   FUUID      60132502-f33f-e986-520d-2589f97a9fc6c021
   IODev      MyBroker
   NAME       WS_FlurEG
   NR         1017
   STATE      uptime: 0<span style='vertical-align: +4px;; font-size: 75%;;'>d</span><font size=2> </font>4<span style='vertical-align: +4px;; font-size: 75%;;'>h</span><font size=2> </font>0<span style='vertical-align: +4px;; font-size: 75%;;'>m</span></br> <div style="vertical-align: middle; font-size: 85%">2021-01-31 12:05</div> Vcc: 3.37V - Wifi: -55</br><a href='http://192.168.2.19' style='color: green; text-decoration: underline;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a>
   TYPE       MQTT_DEVICE
   OLDREADINGS:
   READINGS:
     2021-01-31 12:07:54   IPaddress       <a href='http://192.168.2.19' style='color: green; text-decoration: underline;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a>
     2021-01-31 12:01:07   LWT             Connected
     2021-01-31 12:07:54   Laufzeit        0<span style='vertical-align: +4px;; font-size: 75%;;'>d</span><font size=2> </font>4<span style='vertical-align: +4px;; font-size: 75%;;'>h</span><font size=2> </font>0<span style='vertical-align: +4px;; font-size: 75%;;'>m</span>
     2021-01-31 11:15:27   PIRstate        1
     2021-01-31 11:15:27   Relais          0
     2021-01-31 08:04:48   Wechselschalter2 0
     2021-01-31 12:04:48   WechselschalterFlurEG.System.Info 240
     2021-01-31 12:04:48   WechselschalterFlurEG.VCC 3.366
     2021-01-31 12:04:48   WechselschalterFlurEG.Wifi -55
     2021-01-31 12:04:48   WechselschalterFlurEG.load 5
     2021-01-31 12:07:54   Zeitstempel     2021-01-31 12:07
     2021-01-31 11:16:02   cmd             event,noAuto
     2021-01-31 12:04:48   day             1
     2021-01-31 12:06:08   mode            0
     2021-01-31 12:07:54   state           1
     2021-01-31 12:07:54   transmission-state incoming publish received
   helper:
     bm:
       MQTT::DEVICE::Attr:
         cnt        145
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        31.01. 12:00:56
         max        0.0790469646453857
         tot        0.483263731002808
         mAr:
           set
           WS_FlurEG
           autoSubscribeReadings
           WechselschalterFlurEGG_13/+/+
       MQTT::DEVICE::Define:
         cnt        3
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        31.01. 11:17:56
         max        0.000991106033325195
         tot        0.0015411376953125
         mAr:
           HASH(0x55ca28d39680)
           WS_FlurEG MQTT_DEVICE
       MQTT::DEVICE::Set:
         cnt        4214
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        31.01. 11:16:03
         max        0.0787770748138428
         tot        2.99313521385193
         mAr:
           HASH(0x55ca28d39680)
           WS_FlurEG
           cmd
           event,noAuto
   message_ids:
   publishSets:
     cmd:
       topic      WechselschalterFlurEG_13/cmd
       values:
   sets:
     cmd       
   subscribe:
   subscribeExpr:
   subscribeQos:
   subscribeReadings:
     WechselschalterFlurEG_13/PIR/PIRstate:
       cmd       
       name       PIRstate
     WechselschalterFlurEG_13/Relais/Relais:
       cmd       
       name       Relais
     WechselschalterFlurEG_13/Wechselschalter2/Wechselschalter2:
       cmd       
       name       Wechselschalter2
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.System.Info:
       cmd       
       name       WechselschalterFlurEG.System.Info
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.VCC:
       cmd       
       name       WechselschalterFlurEG.VCC
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.Wifi:
       cmd       
       name       WechselschalterFlurEG.Wifi
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.load:
       cmd       
       name       WechselschalterFlurEG.load
     WechselschalterFlurEG_13/automode/Dummy:
       cmd       
       name       Dummy
     WechselschalterFlurEG_13/automode/mode:
       cmd       
       name       mode
     WechselschalterFlurEG_13/daylight/day:
       cmd       
       name       day
     WechselschalterFlurEG_13/detectVcc/state:
       cmd       
       name       state
     WechselschalterFlurEG_13/status/LWT:
       cmd       
       name       LWT
Attributes:
   IODev      MyBroker
   autoSubscribeReadings WechselschalterFlurEG_13/+/+
   cmdIcon    auto_off:time_manual_mode auto_on:light_ceiling
   eventMap   /cmd event,Schalten:switch/cmd event,Tag:day/cmd event,Nacht:night/cmd event,Auto:auto_on/cmd event,noAuto:auto_off/read
   group      Switch
   icon       li_wht_on
   publishSet_cmd WechselschalterFlurEG_13/cmd
   room       CUL_HM
   stateFormat {'uptime: '.ReadingsVal($name,'Laufzeit','').
'</br> <div style="vertical-align: middle; font-size: 85%">'.
ReadingsVal($name,'Zeitstempel','').'</div> Vcc: '.
round(ReadingsVal($name,'WechselschalterFlurEG.VCC',''),2).'V - Wifi: '.
ReadingsVal($name,'WechselschalterFlurEG.Wifi','').'</br>'.
ReadingsVal($name,'IPaddress','')}
   subscribeReading_Dummy WechselschalterFlurEG_13/automode/Dummy
   subscribeReading_LWT WechselschalterFlurEG_13/status/LWT
   subscribeReading_PIRstate WechselschalterFlurEG_13/PIR/PIRstate
   subscribeReading_Relais WechselschalterFlurEG_13/Relais/Relais
   subscribeReading_Wechselschalter2 WechselschalterFlurEG_13/Wechselschalter2/Wechselschalter2
   subscribeReading_WechselschalterFlurEG.System.Info WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.System.Info
   subscribeReading_WechselschalterFlurEG.VCC WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.VCC
   subscribeReading_WechselschalterFlurEG.Wifi WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.Wifi
   subscribeReading_WechselschalterFlurEG.load WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.load
   subscribeReading_day WechselschalterFlurEG_13/daylight/day
   subscribeReading_mode WechselschalterFlurEG_13/automode/mode
   subscribeReading_state WechselschalterFlurEG_13/detectVcc/state
   userReadings Zeitstempel {substr(ReadingsTimestamp($name,'state',''),0,16)},
Laufzeit {min2human(ReadingsVal($name,'WechselschalterFlurEG.System.Info',''))},
IPaddress {"<a href='http://192.168.2.19' style='color: green; text-decoration: underline;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a>"}
   webCmd     auto_off:auto_on


Angehängt ist noch ein Screenshot mit stateformat, und ein weiterer, bei dem stateFormat gelöscht wurde.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

rudolfkoenig

devStateIcon kann auch als perl-Expression definiert werden (siehe https://fhem.de/commandref_modular.html#devStateIcon, Second form), damit kann man sich austoben.

TomLee

#2
Nutze kein MQTT_DEVICE mehr und habs an einem dummy nachvollzogen, bin der Meinung wenn du das devstateIcon genauso übernimmst sollte das auch bei dir klappen.

defmod WS_FlurEG dummy
attr WS_FlurEG devStateIcon {my $icon = ReadingsNum($name,"state","0") == "1"?"li_wht_off":"li_wht_on";;\
'<a href=\"/fhem?cmd.dummy=set $name switch&XHR=1\">'.FW_makeImage($icon).'</a></br>\
uptime: '.ReadingsVal($name,'Laufzeit','').\
'</br> <div style="vertical-align: middle;; font-size: 85%">'.\
ReadingsVal($name,'Zeitstempel','').'</div> Vcc: '.\
round(ReadingsVal($name,'WechselschalterFlurEG.VCC','3,37V'),2).'V - Wifi: '.\
ReadingsVal($name,'WechselschalterFlurEG.Wifi','-55').'</br>'.\
ReadingsVal($name,'IPaddress','')}
attr WS_FlurEG setList 1 0

setstate WS_FlurEG 0
setstate WS_FlurEG 2021-01-31 12:07:54 IPaddress <a href='http://192.168.2.19' style='color: green;; text-decoration: underline;;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a>
setstate WS_FlurEG 2021-01-31 12:01:07 LWT Connected
setstate WS_FlurEG 2021-01-31 12:07:54 Laufzeit 0<span style='vertical-align: +4px;;;; font-size: 75%;;;;'>d</span><font size=2> </font>4<span style='vertical-align: +4px;;;; font-size: 75%;;;;'>h</span><font size=2> </font>0<span style='vertical-align: +4px;;;; font-size: 75%;;;;'>m</span>
setstate WS_FlurEG 2021-01-31 11:15:27 PIRstate 1
setstate WS_FlurEG 2021-01-31 11:15:27 Relais 0
setstate WS_FlurEG 2021-01-31 08:04:48 Wechselschalter2 0
setstate WS_FlurEG 2021-01-31 12:04:48 WechselschalterFlurEG.System.Info 240
setstate WS_FlurEG 2021-01-31 12:04:48 WechselschalterFlurEG.VCC 3.366
setstate WS_FlurEG 2021-01-31 12:04:48 WechselschalterFlurEG.Wifi -55
setstate WS_FlurEG 2021-01-31 12:04:48 WechselschalterFlurEG.load 5
setstate WS_FlurEG 2021-01-31 12:07:54 Zeitstempel 2021-01-31 12:07
setstate WS_FlurEG 2021-01-31 11:16:02 cmd event,noAuto
setstate WS_FlurEG 2021-01-31 12:04:48 day 1
setstate WS_FlurEG 2021-01-31 12:06:08 mode 0
setstate WS_FlurEG 2021-01-31 14:21:01 state switch 0
setstate WS_FlurEG 2021-01-31 12:07:54 transmission-state incoming publish received


Gruß

Thomas

Gisbert

Hallo Thomas,
hallo Rudi,

vielen Dank für deine Mühe, es funktioniert "etwas", und führt aber noch zu einem pop-up Fenster (mit ok), das quittiert werden muss, also noch keine Lösung.

In der Zwischenzeit bin ich auf folgenden Hinweis gestoßen: https://forum.fhem.de/index.php/topic,97586.0.html
Die scheint mir zielführender zu sein, wobei das angeführte Beispiel dermaßen verwirrend ist (hätte nur der Hinweis gefehlt, das rot schwarz ist, und unten oben ;) ;D), dass ich es mir erstmals durch andere Readingnamen und Readingswerte "gefügig" machen musste, bevor ich eine Idee hatte, wie es funktionieren soll. Das habe ich jetzt verstanden, so dass ich mich an die Anwendung in meinem Beispiel machen kann.

Wenn es fertig ist, gebe ich eine Rückmeldung.
Vielen Dank bis hierher und viele Grüße
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

xenos1984

Ich habe eine ganze Reihe ähnlicher MQTT2_DEVICE im Einsatz, bei denen ein devStateIcon als Schaltelement und darunter eine Textausgabe vorkommen. Perl habe ich dafür weder in stateFormat, noch in devStateIcon gebraucht. Basierend auf deinem Beispiel würde ich es so machen (ungetestet):

attr WS_FlurEG devStateIcon S.1:li_wht_off:switch S.0:li_wht_on:switch

attr WS_FlurEG stateFormat {'S:'.ReadingsVal($name,'state','')."\n".\
'<br/>uptime: '.ReadingsVal($name,'Laufzeit','').\
'<br/> <div style="vertical-align: middle;; font-size: 85%">'.\
ReadingsVal($name,'Zeitstempel','').'</div> Vcc: '.\
round(ReadingsVal($name,'WechselschalterFlurEG.VCC',''),2).'V - Wifi: '.\
ReadingsVal($name,'WechselschalterFlurEG.Wifi','').'<br/>'.\
ReadingsVal($name,'IPaddress','')}


Erklärung: Dieses stateFormat liefert eine mehrzeilige Ausgabe zurück, die in STATE übernommen wird (darum das \n). Die erste Zeile hat die Form

S:0

oder

S:1

je nach Reading state. Nun wird devStateIcon auf jede Zeile angewandt. Die RegEx S.0 bzw. S.1 passt dabei genau auf die erste Zeile und ersetzt sie durch das Icon mit Schaltfunktion. Der Rest bleibt unverändert.

Übrigens: Ein HTML-Tag ohne Inhalt kürzt man <br/> ab statt </br> (letzteres wäre ein schließendes Tag nach einem <br>).

TomLee

Die Perl-Variante hab ich mir nochmal angeschaut und leicht umgebaut.
Übersichtlicher, ohne viel Hochkommata und aneinanderhängen mit dem Punkt, weiß aber nicht ob das so richtig definiert ist, auf jedenfall wird alles so angezeigt wie auf deinem Bild.

So sollte das Dialogfenster nicht mehr beim betätigen des Icon kommen :

attr WS_FlurEG devStateIcon {my $icon = ReadingsNum($name,'state','1') == '1'?'li_wht_off':'li_wht_on';;\
my $lz = ReadingsVal($name,'Laufzeit','');;\
my $zs = ReadingsVal($name,'Zeitstempel','');;\
my $rws = round(ReadingsVal($name,'WechselschalterFlurEG.VCC',''),2);;\
my $ws = ReadingsVal($name,'WechselschalterFlurEG.Wifi','');;\
my $ip = ReadingsVal($name,'IPaddress','');;\
"<a href=\"/fhem?cmd.dummy=set $name switch&XHR=1\">".FW_makeImage($icon)."</a><br/>\
<div>uptime: $lz</div>\
<div style='vertical-align: middle;; font-size: 85%'>$zs</div>\
<div>Vcc: $rws V - Wifi: $ws <br/>$ip</div>"}


Gisbert

Hallo xenos1984,
hallo Thomas,

das Beispiel in https://forum.fhem.de/index.php/topic,97586.0.html habe ich fürs Verrecken nicht zum Laufen gebracht :-[ :-\

Ich schaue eure beiden Vorschläge an, höre aber für heute auf und komme erst im späteren Verlauf der Woche zum Testen.
Ich melde mich, wenn ich weitermache.

Vielen Dank bis hierher und viele Grüße
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

rudolfkoenig

Der Haken der stateFormat Variante ist, dass STATE auch in der Ausgabe von list, JsonList2, XmlList, etc auftaucht (was vmtl nicht gewuenscht ist). Auch in der Detail-Ansicht wird STATE nochmal angezeigt, und damit u.U. doppelt.

devSteteIcon ist FHEMWEB-only, d.h. es sollte keine Nebeneffekte haben.

Gisbert

#8
Zitat von: xenos1984 am 31 Januar 2021, 18:36:08
Ich habe eine ganze Reihe ähnlicher MQTT2_DEVICE im Einsatz, bei denen ein devStateIcon als Schaltelement und darunter eine Textausgabe vorkommen. Perl habe ich dafür weder in stateFormat, noch in devStateIcon gebraucht. Basierend auf deinem Beispiel würde ich es so machen (ungetestet):

attr WS_FlurEG devStateIcon S.1:li_wht_off:switch S.0:li_wht_on:switch

attr WS_FlurEG stateFormat {'S:'.ReadingsVal($name,'state','')."\n".\
'<br/>uptime: '.ReadingsVal($name,'Laufzeit','').\
'<br/> <div style="vertical-align: middle;; font-size: 85%">'.\
ReadingsVal($name,'Zeitstempel','').'</div> Vcc: '.\
round(ReadingsVal($name,'WechselschalterFlurEG.VCC',''),2).'V - Wifi: '.\
ReadingsVal($name,'WechselschalterFlurEG.Wifi','').'<br/>'.\
ReadingsVal($name,'IPaddress','')}


Erklärung: Dieses stateFormat liefert eine mehrzeilige Ausgabe zurück, die in STATE übernommen wird (darum das \n). Die erste Zeile hat die Form

S:0
oder
S:1

je nach Reading state. Nun wird devStateIcon auf jede Zeile angewandt. Die RegEx S.0 bzw. S.1 passt dabei genau auf die erste Zeile und ersetzt sie durch das Icon mit Schaltfunktion. Der Rest bleibt unverändert.

Hallo xenos1984,,

ich hab's so wie vorgeschlagen umgesetzt, bekomme auch eine Lampe, aber mit der folgenden Fehlermeldung in einem Pop-up-Fenster:
ZitatUnknown argument switch, choose one of cmd
Im STATE steht z.B. S.1


attr WS_FlurEG devStateIcon S.1:li_wht_off:switch S.0:li_wht_on:switch
attr WS_FlurEG stateFormat {'S:'.ReadingsVal($name,'state','')."\n".\
'<br/><div style="vertical-align: middle;; font-size: 85%">'.\
ReadingsVal($name,'Zeitstempel','').'</div>.<br/>'.\
ReadingsVal($name,'IPaddress','').'<br/>\
uptime: '.ReadingsVal($name,'Laufzeit','').'<br/>'.\
'Vcc: '.round(ReadingsVal($name,'WechselschalterFlurEG.VCC',''),2).'V - Wifi: '.\
ReadingsVal($name,'WechselschalterFlurEG.Wifi','')}


Viele Grüße Gisbert

Edit:
Es gibt einen unschönen Nebeneffekt, dass nämlich state nicht beim Schalten wechselt, was aber für meine Funktionalität essentiell ist.
Ich habe das ganze mal mit cmdIcon realsiert. Dann muss man aber ein Icon für das Einschalten und ein weiteres für das Ausschalten benutzen. Ein Toggeln scheint bei cmdIcon nicht vorgesehen zu sein.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Gisbert

#9
Zitat von: TomLee am 31 Januar 2021, 19:57:05
Die Perl-Variante hab ich mir nochmal angeschaut und leicht umgebaut.
Übersichtlicher, ohne viel Hochkommata und aneinanderhängen mit dem Punkt, weiß aber nicht ob das so richtig definiert ist, auf jedenfall wird alles so angezeigt wie auf deinem Bild.

So sollte das Dialogfenster nicht mehr beim betätigen des Icon kommen :

attr WS_FlurEG devStateIcon {my $icon = ReadingsNum($name,'state','1') == '1'?'li_wht_off':'li_wht_on';;\
my $lz = ReadingsVal($name,'Laufzeit','');;\
my $zs = ReadingsVal($name,'Zeitstempel','');;\
my $rws = round(ReadingsVal($name,'WechselschalterFlurEG.VCC',''),2);;\
my $ws = ReadingsVal($name,'WechselschalterFlurEG.Wifi','');;\
my $ip = ReadingsVal($name,'IPaddress','');;\
"<a href=\"/fhem?cmd.dummy=set $name switch&XHR=1\">".FW_makeImage($icon)."</a><br/>\
<div>uptime: $lz</div>\
<div style='vertical-align: middle;; font-size: 85%'>$zs</div>\
<div>Vcc: $rws V - Wifi: $ws <br/>$ip</div>"}


Hallo Thomas,

vom Ergebnis her ist die Lösung nahezu identisch zu der von xenos1984, mit folgenden Differenzen:
- Die "Lampe"/Icon ändert ihre Farbe bei Ein- und Ausschalten (durch externen Weg realisiert)
- Ein Anklicken ist hier auch nicht möglich, aber es kommt das gleiche Pop-up-Fenster, ohne dass geschaltet wird.
- Ein minimaler Nachteil: das V von (V)olt muss abgesetzt zu $rwz stehen, lässt sich aber anders lösen.

Viele Grüße Gisbert

Edit:
Ich muss mich korrigieren, denn als ich Ein- und Ausschalten wiederholt habe, hat das Lampen-Icon nicht gewechselt und der für mich wichtige state, ebenfalls nicht.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

xenos1984

Zitat von: Gisbert am 06 Februar 2021, 11:54:52
ich hab's so wie vorgeschlagen umgesetzt, bekomme auch eine Lampe, aber mit der folgenden Fehlermeldung in einem Pop-up-Fenste

Das könnte daran liegen, dass in devStateIcon der Befehl switch erzeugt wird, in publishSet aber cmd definiert ist. (Das hatte ich aus deiner ursprünglichen Definition übernommen - von daher würde ich sagen, dass es schon vorher "falsch" war.) Es müsste stattdessen in beiden Attributen der gleiche Befehl sein.

Gisbert

#11
Hallo xenos1984,

vermutlich liegst du da völlig richtig, aber bevor die Aktion noch weitere Kreise zieht, mit Nebeneffekten etc. belasse ich es mit der Lösung, die ich jetzt habe.
Ich habe jeweils ein Icon cmIcon zum Ein- und Ausschalten, sowie im stateFormat ein eindeutige Erkennung, ob Licht an oder aus ist.
Damit komme ich klar. Schade nur, dass cmdIcons nicht toggeln können.

Das list sieht jetzt wie folgt aus, und bildlich schaut es wie im Anhang aus.

Viele Grüße Gisbert

Internals:
   FUUID      60132502-f33f-e986-520d-2589f97a9fc6c021
   IODev      MyBroker
   NAME       WS_FlurEG
   NR         1017
   STATE      Licht <span style='color:#000000'>ist aus</span><br/>
<div style='vertical-align: middle; font-size: 85%'>2021-02-06 12:37</div><br/>
<a href='http://192.168.2.19' style='color: green; text-decoration: underline;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a><br/>
uptime: 0<span style='vertical-align: +4px;; font-size: 75%;;'>d</span><font size=2> </font>15<span style='vertical-align: +4px;; font-size: 75%;;'>h</span><font size=2> </font>20<span style='vertical-align: +4px;; font-size: 75%;;'>m</span><br/>
Vcc: 3.37V - Wifi: -55
   TYPE       MQTT_DEVICE
   READINGS:
     2021-02-06 12:38:27   IPaddress       <a href='http://192.168.2.19' style='color: green; text-decoration: underline;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a>
     2021-02-06 12:35:46   LWT             Connected
     2021-02-06 12:38:27   Lampe           <span style='color:#000000'>ist aus</span>
     2021-02-06 12:38:27   Laufzeit        0<span style='vertical-align: +4px;; font-size: 75%;;'>d</span><font size=2> </font>15<span style='vertical-align: +4px;; font-size: 75%;;'>h</span><font size=2> </font>20<span style='vertical-align: +4px;; font-size: 75%;;'>m</span>
     2021-02-06 12:37:57   PIRstate        1
     2021-02-06 12:38:27   Relais          0
     2021-02-05 21:17:31   Wechselschalter2 0
     2021-02-06 12:37:16   WechselschalterFlurEG.System.Info 920
     2021-02-06 12:37:16   WechselschalterFlurEG.VCC 3.366
     2021-02-06 12:37:16   WechselschalterFlurEG.Wifi -55
     2021-02-06 12:37:16   WechselschalterFlurEG.load 5
     2021-02-06 12:38:27   Zeitstempel     2021-02-06 12:37
     2021-02-06 12:38:26   cmd             event,Ausschalten
     2021-02-06 12:37:31   day             1
     2021-02-06 12:37:31   mode            0
     2021-02-06 12:38:27   state           1
     2021-02-06 12:38:27   transmission-state incoming publish received
   helper:
     bm:
       MQTT::DEVICE::Set:
         cnt        46
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        06.02. 12:38:26
         max        0.0839641094207764
         tot        0.164658308029175
         mAr:
           HASH(0x55fbdd8bc018)
           WS_FlurEG
           cmd
           event,Ausschalten
   message_ids:
   publishSets:
     cmd:
       topic      WechselschalterFlurEG_13/cmd
       values:
   sets:
     cmd       
   subscribe:
     WechselschalterFlurEG_13/+/+
     WechselschalterFlurEG_13/status/LWT
     WechselschalterFlurEG_13/PIR/PIRstate
     WechselschalterFlurEG_13/Relais/Relais
     WechselschalterFlurEG_13/Wechselschalter2/Wechselschalter2
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.System.Info
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.VCC
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.Wifi
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.load
     WechselschalterFlurEG_13/daylight/day
     WechselschalterFlurEG_13/automode/mode
     WechselschalterFlurEG_13/detectVcc/state
   subscribeExpr:
     ^WechselschalterFlurEG_13\/[^/]+\/([^/]+)$
     ^WechselschalterFlurEG_13\/status\/LWT$
     ^WechselschalterFlurEG_13\/PIR\/PIRstate$
     ^WechselschalterFlurEG_13\/Relais\/Relais$
     ^WechselschalterFlurEG_13\/Wechselschalter2\/Wechselschalter2$
     ^WechselschalterFlurEG_13\/WechselschalterFlurEG\/WechselschalterFlurEG.System.Info$
     ^WechselschalterFlurEG_13\/WechselschalterFlurEG\/WechselschalterFlurEG.VCC$
     ^WechselschalterFlurEG_13\/WechselschalterFlurEG\/WechselschalterFlurEG.Wifi$
     ^WechselschalterFlurEG_13\/WechselschalterFlurEG\/WechselschalterFlurEG.load$
     ^WechselschalterFlurEG_13\/daylight\/day$
     ^WechselschalterFlurEG_13\/automode\/mode$
     ^WechselschalterFlurEG_13\/detectVcc\/state$
   subscribeQos:
     WechselschalterFlurEG_13/+/+
     WechselschalterFlurEG_13/PIR/PIRstate 0
     WechselschalterFlurEG_13/Relais/Relais 0
     WechselschalterFlurEG_13/Wechselschalter2/Wechselschalter2 0
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.System.Info 0
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.VCC 0
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.Wifi 0
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.load 0
     WechselschalterFlurEG_13/automode/mode 0
     WechselschalterFlurEG_13/daylight/day 0
     WechselschalterFlurEG_13/detectVcc/state 0
     WechselschalterFlurEG_13/status/LWT 0
   subscribeReadings:
     WechselschalterFlurEG_13/PIR/PIRstate:
       cmd       
       name       PIRstate
     WechselschalterFlurEG_13/Relais/Relais:
       cmd       
       name       Relais
     WechselschalterFlurEG_13/Wechselschalter2/Wechselschalter2:
       cmd       
       name       Wechselschalter2
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.System.Info:
       cmd       
       name       WechselschalterFlurEG.System.Info
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.VCC:
       cmd       
       name       WechselschalterFlurEG.VCC
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.Wifi:
       cmd       
       name       WechselschalterFlurEG.Wifi
     WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.load:
       cmd       
       name       WechselschalterFlurEG.load
     WechselschalterFlurEG_13/automode/mode:
       cmd       
       name       mode
     WechselschalterFlurEG_13/daylight/day:
       cmd       
       name       day
     WechselschalterFlurEG_13/detectVcc/state:
       cmd       
       name       state
     WechselschalterFlurEG_13/status/LWT:
       cmd       
       name       LWT
Attributes:
   IODev      MyBroker
   autoSubscribeReadings WechselschalterFlurEG_13/+/+
   cmdIcon    _on:on _off:off auto_off:time_manual_mode auto_on:light_ceiling
   eventMap   /cmd event,Einschalten:_on/cmd event,Ausschalten:_off/cmd event,Tag:day/cmd event,Nacht:night/cmd event,Auto:auto_on/cmd event,noAuto:auto_off
   group      Switch
   icon       li_wht_on
   publishSet_cmd WechselschalterFlurEG_13/cmd
   room       CUL_HM
   stateFormat Licht [$name:Lampe]<br/>
<div style='vertical-align: middle; font-size: 85%'>[$name:Zeitstempel]</div><br/>
[$name:IPaddress]<br/>
uptime: [$name:Laufzeit]<br/>
Vcc: [$name:WechselschalterFlurEG.VCC:r2]V - Wifi: [$name:WechselschalterFlurEG.Wifi]
   subscribeReading_LWT WechselschalterFlurEG_13/status/LWT
   subscribeReading_PIRstate WechselschalterFlurEG_13/PIR/PIRstate
   subscribeReading_Relais WechselschalterFlurEG_13/Relais/Relais
   subscribeReading_Wechselschalter2 WechselschalterFlurEG_13/Wechselschalter2/Wechselschalter2
   subscribeReading_WechselschalterFlurEG.System.Info WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.System.Info
   subscribeReading_WechselschalterFlurEG.VCC WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.VCC
   subscribeReading_WechselschalterFlurEG.Wifi WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.Wifi
   subscribeReading_WechselschalterFlurEG.load WechselschalterFlurEG_13/WechselschalterFlurEG/WechselschalterFlurEG.load
   subscribeReading_day WechselschalterFlurEG_13/daylight/day
   subscribeReading_mode WechselschalterFlurEG_13/automode/mode
   subscribeReading_state WechselschalterFlurEG_13/detectVcc/state
   userReadings Lampe {(ReadingsVal($name,'state','') eq "1") ? "<span style='color:#000000'>ist aus</span>":"<span style='color:#FF0000'><b>brennt</b></span>"},
Zeitstempel {substr(ReadingsTimestamp($name,'WechselschalterFlurEG.VCC',''),0,16)},
Laufzeit {min2human(ReadingsVal($name,'WechselschalterFlurEG.System.Info',''))},
IPaddress {"<a href='http://192.168.2.19' style='color: green; text-decoration: underline;' target='_blank' rel='noopener noreferrer'>http://192.168.2.19</a>"}
   webCmd     _on:_off:auto_off:auto_on
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

xenos1984

Na gut, Hauptsache es funktioniert wie gewünscht. Falls du doch noch mal basteln möchtest - hier ist zum Vergleich ein List eines meiner Geräte mit ähnlicher Funktion:


Internals:
   CID        arduino_server
   DEF        arduino_server
   DEVICETOPIC climate_server
   FUUID      5ea5ae48-f33f-edb2-3a37-084c09f683aed438
   IODev      mqtt
   LASTInputDev mqtt
   MSGCNT     364452
   NAME       climate_server
   NR         35
   STATE      1:online
2:ok
3:off
<br>
22.4&deg;C
21.2&percnt;
   TYPE       MQTT2_DEVICE
   mqtt_MSGCNT 364452
   mqtt_TIME  2021-02-06 16:46:24
   READINGS:
     2021-02-06 16:46:04   absoluteHumidity 4.2
     2021-01-25 00:56:49   arduino         online
     2021-02-06 16:45:40   backlight       off
     2021-02-06 16:46:04   dewpoint        -0.9
     2021-02-06 16:46:24   humidity        21.2
     2021-02-06 16:45:40   state           backlight
     2021-01-23 13:54:45   subscriptions   cmd/climate/server/+
     2021-02-06 16:46:24   temperature     22.4
     2021-02-06 16:46:24   valid           ok
     2021-02-06 16:46:04   vapourPressure  5.7
Attributes:
   IODev      mqtt
   alias      Server
   devStateIcon 1.online:arduino@green
1.offline:arduino@red
2.ok:temperature_humidity@green
2.error:temperature_humidity@red
3.on:light_light_dim_100@orange:backlight+off
3.off:light_light_dim_00@black:backlight+on
   event-on-change-reading .*
   icon       it_server
   readingList status/climate/server/arduino:.* {{"arduino" => ($EVTPART0 ? "online" : "offline")}}
status/climate/server/humidity:.* humidity
status/climate/server/temperature:.* temperature
status/climate/server/valid:.* {{"valid" => ($EVTPART0 ? "ok" : "error")}}
status/climate/server/backlight:.* {{"backlight" => ($EVTPART0 ? "on" : "off")}}
   room       Rooms->Server,Sensors->Climate
   setList    backlight:on,off {"cmd/climate/server/backlight:r " . ($EVTPART1 eq "on" ? 1 : 0)}
   stateFormat 1:arduino
2:valid
3:backlight
<br>
temperature&deg;C
humidity&percnt;


Die Zeilen mit "backlight" liefern mir ein Lampensymbol, das sich anklicken lässt und die Hintergrundbeleuchtung beim Display schaltet. Unter den Symbolen stehen Temperatur und Luftfeuchtigkeit.