Hallo
ich habe mir mit einem WEMOS D1 mini und nem Relais und nem Durchlusszähler eine Steuerung für eine Gartenbewässerung gebastellt. Das ganze habe ich als MQTT2_DEVICE in FHEM eingebunden.
Die Steuerung funktioniert schon sehr schön. Ich lasse eine bestimmte Menge Wasser laufen und schalte dann mit dem Relais mein Magnetventil wieder ab.
Soweit so gut.
Schön wäre es jetzt noch wenn ich im Status von meinem Device den Durchfluss in Liter (also den wert von COUNTER_C1 geteit durch 400) und zusätzlich den Status des Relais (also on oder off) angezeigt bekäme. Hier wäre das Icon natürlich schön, aber der Text "on", bzw. "off" würde mir schon genügen.
Ich kann machen was ich will ich bekomme das nicht hin. :(
Kann mir da jemand helfen?
Internals:
CFGFN
FUUID 62dc03fd-f33f-bc50-6534-96c008aaed167a08
IODev MQTT2
LASTInputDev MQTT2
MQTT2_MSGCNT 3221
MQTT2_TIME 2022-07-24 13:04:44
MSGCNT 3221
NAME Garten_Wasser
NR 96272
STATE off
TYPE MQTT2_DEVICE
eventCount 3195
JSONMAP:
Channel_0 0
Channel_1 0
Channel_2 0
Channel_3 0
Channel_4 0
Channel_5 0
Color 0
Dimmer 0
HSBColor 0
POWER1 0
POWER2 0
POWER3 0
POWER4 0
READINGS:
2022-07-24 11:00:59 BootCount 36
2022-07-24 13:04:44 COUNTER_C1 3730
2022-07-24 11:00:59 FallbackTopic cmnd/DVES_AA7C1A_fb/
2022-07-23 18:32:42 GPIO0_0 None
2022-07-23 18:32:42 GPIO12_0 None
2022-07-23 18:32:42 GPIO13_256 Relay_i1
2022-07-23 18:32:42 GPIO14_384 Counter_n1
2022-07-23 18:32:42 GPIO15_0 None
2022-07-23 18:32:42 GPIO16_0 None
2022-07-23 18:32:42 GPIO17_0 None
2022-07-23 18:32:42 GPIO1_0 None
2022-07-23 18:32:42 GPIO2_0 None
2022-07-23 18:32:42 GPIO3_0 None
2022-07-23 18:32:42 GPIO4_32 Button1
2022-07-23 18:32:42 GPIO5_0 None
2022-07-24 11:00:59 GroupTopic WEMOS/Garten/tasmotas/cmnd/
2022-07-24 13:04:44 Heap 26
2022-07-24 11:00:59 Hostname Garten-Wasser-7194
2022-07-23 16:21:49 IODev MQTT2
2022-07-24 11:00:59 IPAddress 10.xx.xx.xx
2022-07-24 11:00:59 LWT Online
2022-07-24 13:04:44 LoadAvg 25
2022-07-24 11:00:59 Module Generic
2022-07-23 18:32:42 Module_18 Generic
2022-07-24 13:04:44 MqttCount 1
2022-07-23 16:23:46 POWER ON
2022-07-24 11:00:59 RestartReason Power On
2022-07-23 16:23:55 SaveData on
2022-07-23 16:23:55 SetOption26 on
2022-07-24 13:04:44 Sleep 50
2022-07-24 13:04:44 SleepMode Dynamic
2022-07-23 16:23:54 StateText1 off
2022-07-23 16:23:54 StateText2 on
2022-07-23 16:23:55 StateText3 toggle
2022-07-23 16:23:55 StateText4 hold
2022-07-24 13:04:44 Time 2022-07-24T12:04:44
2022-07-24 13:04:44 Uptime 0T02:03:50
2022-07-24 13:04:44 UptimeSec 7430
2022-07-24 11:00:59 Version 11.1.0(tasmota)
2022-07-24 11:00:59 WebServerMode Admin
2022-07-24 13:04:44 Wifi_AP 1
2022-07-24 13:04:44 Wifi_BSSId xx:xx:xx
2022-07-24 13:04:44 Wifi_Channel 6
2022-07-24 13:04:44 Wifi_Downtime 0T00:00:04
2022-07-24 13:04:44 Wifi_LinkCount 1
2022-07-24 13:04:44 Wifi_Mode 11n
2022-07-24 13:04:44 Wifi_RSSI 50
2022-07-24 13:04:44 Wifi_SSId Skaro
2022-07-24 13:04:44 Wifi_Signal -75
2022-07-23 16:23:42 attrTemplateVersion 20210523
2022-07-24 12:04:33 state off
hmccu:
Attributes:
autocreate 0
comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10; 'cmnd/WEMOS/Garten/Garten_Wasser/cmnd/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
devStateIcon on:sani_water_tap@orange off:sani_water_tap@white
group Gartenbewässerung
icon sani_water_tap
jsonMap POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 Channel_5:0 HSBColor:0 Color:0
model tasmota_basic_state_power1
readingList WEMOS/Garten/Garten_Wasser/tele/LWT:.* LWT
WEMOS/Garten/Garten_Wasser/tele/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
WEMOS/Garten/Garten_Wasser/tele/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
WEMOS/Garten/Garten_Wasser/tele/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ? json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
WEMOS/Garten/Garten_Wasser/tele/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
WEMOS/Garten/Garten_Wasser/stat/POWER1:.* state
WEMOS/Garten/Garten_Wasser/stat/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
room Garten
setList off:noArg WEMOS/Garten/Garten_Wasser/cmnd/POWER1 0
on:noArg WEMOS/Garten/Garten_Wasser/cmnd/POWER1 1
toggle:noArg WEMOS/Garten/Garten_Wasser/cmnd/POWER1 2
setOtaUrl:textField WEMOS/Garten/Garten_Wasser/cmnd/OtaUrl $EVTPART1
upgrade:noArg WEMOS/Garten/Garten_Wasser/cmnd/upgrade 1
setStateList on off toggle
Ein Vorschlag, von zig möglichen Varianten die Anzeige zu realisieren, mit der aber STATE "sauber" bleibt:
attr Garten_Wasser devStateIcon {sprintf(q(%s <td>%s</td>),FW_makeImage(ReadingsVal($name,'state','off')),(ReadingsVal($name,'COUNTER_C1','off')/400))}
Wenn das on off in der DEVICEOVERVIEW stört, das kann man mit einem Doppelpunkt im Attribut webCmd "wegzaubern".
Hallo,
stateformat ist dein Freund.
Sie dir das mal an https://wiki.fhem.de/wiki/DeviceOverview_anpassen
Zitat von: TomLee am 24 Juli 2022, 14:33:05
Ein Vorschlag, von zig möglichen Varianten die Anzeige zu realisieren, mit der aber STATE "sauber" bleibt:
attr Garten_Wasser devStateIcon {sprintf(q(%s <td>%s</td>),FW_makeImage(ReadingsVal($name,'state','off')),(ReadingsVal($name,'COUNTER_C1','off')/400))}
Wenn das on off in der DEVICEOVERVIEW stört, das kann man mit einem Doppelpunkt im Attribut webCmd "wegzaubern".
Vielen Dank @TomLee
Das Ergebnis verwundert mich aber etwas: (siehe Anhang)
Wobei sich der 2. Wert (also die 9.335) sich erst nach mehreren Sekunden ändert
@DetlefR vielen Dank diese Seite habe ich seit gestern Nachmittag gesucht
Erstmal keine Ahnung, ohne jetzige Definition, zeig halt mal, steht vlt. noch was in stateFormat ?
Bei mir klappts bei einer Testdefinition wie gewünscht, da teste ich allerdings mit setreading, evtl. übersehe ich da auch was ?
StateFormat hab ich im Moment keins.
So sieht die definition im Derzeit aus:
Internals:
CFGFN
FUUID 62dc03fd-f33f-bc50-6534-96c008aaed167a08
IODev MQTT2
LASTInputDev MQTT2
MQTT2_MSGCNT 5990
MQTT2_TIME 2022-07-24 19:40:29
MSGCNT 5990
NAME Garten_Wasser
NR 96272
STATE on
TYPE MQTT2_DEVICE
eventCount 5958
JSONMAP:
Channel_0 0
Channel_1 0
Channel_2 0
Channel_3 0
Channel_4 0
Channel_5 0
Color 0
Dimmer 0
HSBColor 0
POWER1 0
POWER2 0
POWER3 0
POWER4 0
READINGS:
2022-07-24 19:38:45 BootCount 37
2022-07-24 19:40:29 COUNTER_C1 3262
2022-07-24 19:38:45 FallbackTopic cmnd/DVES_AA7C1A_fb/
2022-07-23 18:32:42 GPIO0_0 None
2022-07-23 18:32:42 GPIO12_0 None
2022-07-23 18:32:42 GPIO13_256 Relay_i1
2022-07-23 18:32:42 GPIO14_384 Counter_n1
2022-07-23 18:32:42 GPIO15_0 None
2022-07-23 18:32:42 GPIO16_0 None
2022-07-23 18:32:42 GPIO17_0 None
2022-07-23 18:32:42 GPIO1_0 None
2022-07-23 18:32:42 GPIO2_0 None
2022-07-23 18:32:42 GPIO3_0 None
2022-07-23 18:32:42 GPIO4_32 Button1
2022-07-23 18:32:42 GPIO5_0 None
2022-07-24 19:38:45 GroupTopic WEMOS/Garten/tasmotas/cmnd/
2022-07-24 19:40:29 Heap 27
2022-07-24 19:38:45 Hostname Garten-Wasser-7194
2022-07-23 16:21:49 IODev MQTT2
2022-07-24 19:38:45 IPAddress 10.xx.xx.xx
2022-07-24 19:38:45 LWT Online
2022-07-24 19:40:29 LoadAvg 25
2022-07-24 19:38:45 Module Generic
2022-07-23 18:32:42 Module_18 Generic
2022-07-24 19:40:29 MqttCount 1
2022-07-23 16:23:46 POWER ON
2022-07-24 19:38:45 RestartReason Power On
2022-07-23 16:23:55 SaveData on
2022-07-23 16:23:55 SetOption26 on
2022-07-24 19:40:29 Sleep 50
2022-07-24 19:40:29 SleepMode Dynamic
2022-07-23 16:23:54 StateText1 off
2022-07-23 16:23:54 StateText2 on
2022-07-23 16:23:55 StateText3 toggle
2022-07-23 16:23:55 StateText4 hold
2022-07-24 19:40:29 Time 2022-07-24T18:40:29
2022-07-24 19:40:29 Uptime 0T00:01:50
2022-07-24 19:40:29 UptimeSec 110
2022-07-24 19:38:45 Version 11.1.0(tasmota)
2022-07-24 19:38:45 WebServerMode Admin
2022-07-24 19:40:29 Wifi_AP 1
2022-07-24 19:40:29 Wifi_BSSId xx:xx:xx:xx:xx
2022-07-24 19:40:29 Wifi_Channel 6
2022-07-24 19:40:29 Wifi_Downtime 0T00:00:04
2022-07-24 19:40:29 Wifi_LinkCount 1
2022-07-24 19:40:29 Wifi_Mode 11n
2022-07-24 19:40:29 Wifi_RSSI 62
2022-07-24 19:40:29 Wifi_SSId Skaro
2022-07-24 19:40:29 Wifi_Signal -69
2022-07-23 16:23:42 attrTemplateVersion 20210523
2022-07-24 19:40:10 state on
hmccu:
Attributes:
autocreate 0
comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10; 'cmnd/WEMOS/Garten/Garten_Wasser/cmnd/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
devStateIcon {sprintf(q(%s <td>%s</td>),FW_makeImage(ReadingsVal($name,'state','off')),(ReadingsVal($name,"COUNTER_C1",0)/400))}
group Gartenbewässerung
icon sani_water_tap
jsonMap POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 Channel_5:0 HSBColor:0 Color:0
model tasmota_basic_state_power1
readingList WEMOS/Garten/Garten_Wasser/tele/LWT:.* LWT
WEMOS/Garten/Garten_Wasser/tele/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
WEMOS/Garten/Garten_Wasser/tele/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
WEMOS/Garten/Garten_Wasser/tele/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ? json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
WEMOS/Garten/Garten_Wasser/tele/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
WEMOS/Garten/Garten_Wasser/stat/POWER1:.* state
WEMOS/Garten/Garten_Wasser/stat/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
room Garten
setList off:noArg WEMOS/Garten/Garten_Wasser/cmnd/POWER1 0
on:noArg WEMOS/Garten/Garten_Wasser/cmnd/POWER1 1
toggle:noArg WEMOS/Garten/Garten_Wasser/cmnd/POWER1 2
setOtaUrl:textField WEMOS/Garten/Garten_Wasser/cmnd/OtaUrl $EVTPART1
upgrade:noArg WEMOS/Garten/Garten_Wasser/cmnd/upgrade 1
setStateList on off toggle
Habs jetzt mal nachvollzogen an einem "echten" Device und da ist es bei mir (auch ?) so.
Ruf ich das Device in der Detailansicht auf ist der zweite Wert (COUNTER_C1) ganz rechts nicht in der DEVICEOVERVIEW vorhanden.
Schalte ich einmal (egal ob on oder off) erscheint der zweite Wert, der bleibt aber nach einer Aktualisierung von FHEMWEB nicht erhalten.
Das gleiche Verhalten hat man auch wenn man es ohne sprintf umsetzt:
{FW_makeImage(ReadingsVal($name,'state','off')).'<td>'.(ReadingsVal($name,"attrTemplateVersion",0)/400).'</td>'}
Ich weiß ehrlich gesagt jetzt nicht an was es liegt. Dachte eigentlich hab die Zusammenhänge, zumindest soweit, verstanden :'(
Eine interessante Herausforderung :D
Hier ein Vorschlag mit stateFormat.
{sprintf(q(%s
%s),(ReadingsVal($name,'state','ON')), (ReadingsNum($name,'COUNTER_C1',0)/400))}
Der Absatz ist notwendig da ansonsten nur das Icon angezeigt wird.
devStateIcon kannst du trotzdem verwenden, wenn ein anderes Icon als die Lampe erscheinen soll. So wie im Ursprung.
devStateIcon on:sani_water_tap@orange off:sani_water_tap@white
Super! Vielen Dank!
mit ner kleinen Änderung ist das Perfekt. Ich hab noch etwas Abstand Zwischen das Icon on die Literanzeige gebracht, die Literzahl auf 2 Nachkommastellen gerundet und ein kleines l (für Liter) dahinter gepackt:
{sprintf(q(%s
%.2f l),(ReadingsVal($name,'state','ON')), (ReadingsNum($name,'COUNTER_C1',0)/400))}
Da mein ursprünglicher Ansatz schon sehr ähnlich war, was macht das q nach dem sprintf?
@Wassergerd
q steht quasi als Abkürzung für quote bzw. Anführungszeichen:
- q meint einfaches Anführungszeichen ... '
- qq meint doppeltes Anführungszeichen ... "
- qx meint das rückwärtige Anführungszeichen ... `
Kann im Zusammenhang mit Zeichenketten eigentlich immer verwendet werden; gedacht ist es aber hauptsächlich dafür, dass man sich das (lästige) Maskieren von (Anführungs)zeichen spart.
q(ich nutze ' gerne) entspricht 'ich nutze \' gerne'
Zusätzlich kann man auch den Begrenzer festlegen:
q(ich nutze ' und ) gerne) ... wäre vermutlich keine gute Anweisung
q/ich nutze ' und ) gerne/ ... könnte klappen
Begrenzer können sein: (...) [...] {...} oder ein einzelnes Zeichen als Anfang und Ende - z.B. /.../
@OdFhem
Danke, dann habe ich es, glaube ich, Verstanden.
Und wieder was gelernt.