FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Wassergerd am 24 Juli 2022, 13:17:30

Titel: StateFormat anzeigen mit einem Counter und dem state
Beitrag von: Wassergerd am 24 Juli 2022, 13:17:30
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

Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag 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".
Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag von: DetlefR am 24 Juli 2022, 14:35:53
Hallo,

stateformat ist dein Freund.

Sie dir das mal an https://wiki.fhem.de/wiki/DeviceOverview_anpassen
Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag von: Wassergerd am 24 Juli 2022, 16:15:45
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

Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag von: TomLee am 24 Juli 2022, 16:41:34
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 ?
Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag von: Wassergerd am 24 Juli 2022, 19:42:39
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
Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag von: TomLee am 24 Juli 2022, 20:18:00
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 :'(
Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag von: DetlefR am 24 Juli 2022, 21:11:44
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
Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag von: Wassergerd am 24 Juli 2022, 22:24:10
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
&nbsp;&nbsp;  %.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?
Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag von: OdfFhem am 25 Juli 2022, 06:53:20
@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. /.../
Titel: Antw:StateFormat anzeigen mit einem Counter und dem state
Beitrag von: Wassergerd am 25 Juli 2022, 12:24:51
@OdFhem
Danke, dann habe ich es, glaube ich, Verstanden.
Und wieder was gelernt.