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
devStateIcon kann auch als perl-Expression definiert werden (siehe https://fhem.de/commandref_modular.html#devStateIcon, Second form), damit kann man sich austoben.
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
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 (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
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>).
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 xenos1984,
hallo Thomas,
das Beispiel in https://forum.fhem.de/index.php/topic,97586.0.html (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
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.
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.
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.
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.
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
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°C
21.2%
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°C
humidity%
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.