Stromzähler ablesen in Fhem

Begonnen von Tommy82, 27 Februar 2019, 20:58:18

Vorheriges Thema - Nächstes Thema

RalfRog

Zitat von: Stephan27 am 10 Juni 2022, 09:56:15
@RalfRog
Die Daten die ich auf der letzten Seite gepostet hatte waren die Rohdaten, wenn ich Tasmota ohne Skript in Debug-Modus schalte. Ist also Alles was per RX reinkommt.

Was die OBIS-Geschichte angeht.
Da müsste ich wahrscheinlich das Tasmota umstellen bzw. was Anderes flashen um das direkt anzusprechen?

Ja vermutlich. Ich hatte mir die Daten im Vorfeld per ESPEasy auf das OBIS Modul geholt um zu sehen was der Zähler so liefert. Habe Tasmota erst dann geflasht.
Tasmota kann zwar auch ser2net aber nur wenn man es mit #define USE_TCP_BRIDGE kompiliert hat - oder man den zbbridge build im Einsatz hat.

Also on-the-fly in der vorhandenen Konstellation lässt sich das wohl nicht auf die Schnele gegenchecken.  :-[

FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

Stephan27

Zitat von: Sany am 12 Juni 2022, 16:02:06
...und wo ist da jetzt Dein Problem? Es sitzt ja keiner vor Deinem Bildschirm, also solltest Du etwas mehr Infos liefern, dann kann man auch was erreichen.

Wenn Du sagst, Tasmota zeigt jetzt 3 Nachkommastellen, dann vermute ich, auf der Main-Seite von Tasmota, right?
Dann schau Dir doch einfach mal die Console in Tasmota an, dort werden die MQT-posts geziegt. Dort siehst Du sehr leicht, ob und wie der Wert an den MQTT-Broker weitergegeben wird. Ist das soweit richtig gehts an fhem.
Das MQTT-Device in fhem wird ja automatisch angelegt, also sollte vorhanden sein.
Dann würde ich mal die event-on-change etc vorrübergehend rausnehmen, damit Du einfach mal alles siehst, was ankommt. Dann den Event-monitor anschmeissen, die events eine Weile beobachten, diese dann nach Wunsch einschränken und für die Power-rechnung das userreadings anlegen (wurde hier ja schon beschrieben).


Viel Erfolg!


Sany

Also wo liegt das Problem?
Ich hatte mich jetzt an Damian seinen Links orientiert und versucht die entsprechend kurzen Auswertungen/ Anzeigen zubauen, also Tages, Monats und Jahreszähler (neben den Diagrammen die permanent laufen) und hier funktionieren zunächst die Berechnungen nicht.

Ich versuchs nochmal zu rekapitulieren, auch wenns in den einzelnen Posts schon auftaucht:
- Tasmota zeigt erstmal Alles was ich brauche und mittlerweile auch in der erforderlichen Genauigkeit
- Tasmota übermittelt Alles was es anzeigt auch per MQTT an FHEM und hat auch die entsprechenden Readings drin
- FHEM hat automatisch das MQTT-Device angelegt, ich zusätzlich von Hand einen Zähler
- in den Zähler habe ich von Damian die Formel übernommen.

Um die Screens nochmal zusammenzufassen hier nochmal: (Basis-Daten von MQTT vom Zähler + Attribute und Daten vom Counter)


Meine Zählernummer, WLAN usw. habe ich geschwärzt.

Damian

Es geht hier wohl um das angegebene Reading des MQTT-Devices SML_Power_in.

Warum ist es hier nicht zu sehen? Alles andere interessiert hier nicht.

Power wäre aber das falsche Reading, denn Power ist Leistung, aber diese willst du aus dem Energiezähler erst bestimmen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Stephan27

#153
Zitat von: Damian am 20 Juni 2022, 22:06:54
Es geht hier wohl um das angegebene Reading des MQTT-Devices SML_Power_in.

Warum ist es hier nicht zu sehen? Alles andere interessiert hier nicht.

Power wäre aber das falsche Reading, denn Power ist Leistung, aber diese willst du aus dem Energiezähler erst bestimmen.

Das Reading ist nicht zu sehen, weil ich scheinbar einen Screenshot vergessen habe, SML_Power_in ist aber im Device vorhanden und liefert den Zählerstand. (Screen reiche ich gerne nach)
Der Name des Readings wird doch durch den Skript und Tasmota vorgegeben und ist von mir aus der Anleitung von Hand so benannt und taucht auch im FHEM so auf mit dem Gesamtzählerstand.

Quelle hier:
https://edv.mueggelland.de/smarter-stromzaehler/

"1,77070100010800ff@1000,Verbrauch,KWh,Power_in,1" -- so habe ich es auch benannt und das taucht im FHEM als "SML_Power_in" auf.


Sany

Zitatweil ich scheinbar einen Screenshot vergessen habe]
ZitatScreen reiche ich gerne nach

bitte keine Screenshots, poste ein list vom Zählerdevice MQTT_HAUS_xyz, nur da sieht man alles relevante, um weiterzuhelfen. Du kannst gerne Deine "privaten" Daten mit X ersetzen, bei der FUUID ist das aber vergebliche Liebesmüh....

Und gerne auch mal das Script aus dem Script-Editor von Tasmota auch posten.


Gruß

Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Stephan27

#155
MQTT-Device:

Internals:
   CID        DVES_1EC934
   DEF        DVES_1EC934
   DEVICETOPIC MQTT_HAUS_zaehlernummer
   FUUID      6298caf3-f33f-c6f7-1830-c1e5c99c0578ec7d
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     14836
   NAME       MQTT_HAUS_zaehlernummer
   NR         34
   STATE      ???
   TYPE       MQTT2_DEVICE
   myBroker_CONN myBroker_172.16.1.117_63404
   myBroker_MSGCNT 14836
   myBroker_TIME 2022-06-22 20:35:53
   Helper:
     DBLOG:
       SML_Power_act:
         DBLogging:
           TIME       1655922953.08933
           VALUE      356.9
       SML_Power_in:
         DBLogging:
           TIME       1655922953.08933
           VALUE      11061.704
   READINGS:
     2022-06-22 20:35:53   Heap            21
     2022-06-21 23:59:52   IODev           myBroker
     2022-06-02 22:40:27   Info1_FallbackTopic cmnd/DVES_1EC934_fb/
     2022-06-02 22:40:27   Info1_GroupTopic cmnd/tasmotas/
     2022-06-02 22:40:27   Info1_Module    Generic
     2022-06-02 22:40:27   Info1_Version   11.1.0(tasmota)
     2022-06-02 22:40:27   Info2_Hostname  tasmota-1EC934-2356
     2022-06-02 22:40:27   Info2_IPAddress 172.16.1.117
     2022-06-02 22:40:27   Info2_WebServerMode Admin
     2022-06-02 22:40:27   Info3_BootCount 10
     2022-06-02 22:40:27   Info3_RestartReason Software/System restart
     2022-06-22 00:00:00   LWT             Online
     2022-06-22 20:35:53   LoadAvg         19
     2022-06-22 20:35:53   MqttCount       27
     2022-06-22 00:00:00   POWER           
     2022-06-02 22:43:58   SML_1           217
     2022-06-02 22:43:33   SML_1_1         217
     2022-06-02 22:28:13   SML_1__1        0.000000000000000
     2022-06-11 14:46:01   SML_CMD         restart
     2022-06-02 22:39:52   SML_E_in        0.000
     2022-06-02 22:39:52   SML_E_out       0.000
     2022-06-02 22:39:52   SML_L1          0.00
     2022-06-02 22:39:52   SML_L2          0.00
     2022-06-02 22:39:52   SML_L3          0.00
     2022-06-02 22:39:52   SML_NetID       0
     2022-06-02 22:39:52   SML_P_in        0.00
     2022-06-02 22:37:53   SML_Power_Sum   10925
     2022-06-02 22:37:53   SML_Power_T1    10925
     2022-06-02 22:37:53   SML_Power_T2    0
     2022-06-02 22:37:53   SML_Power_Use_Sum 0.0
     2022-06-22 20:35:53   SML_Power_act   356.9
     2022-06-22 20:35:53   SML_Power_in    11061.704
     2022-06-22 20:35:53   SML_Power_out   0.2
     2022-06-22 20:35:53   SML_Power_p1    0.0
     2022-06-22 20:35:53   SML_Power_p2    0.0
     2022-06-22 20:35:53   SML_Power_p3    0.0
     2022-06-02 22:37:13   SML_Volt_L1     0.0
     2022-06-02 22:37:13   SML_Volt_L2     0.0
     2022-06-02 22:37:13   SML_Volt_L3     0.0
     2022-06-02 22:37:13   SML_Watt_L1     0.00
     2022-06-02 22:37:13   SML_Watt_L2     0.00
     2022-06-02 22:37:13   SML_Watt_L3     0.00
     2022-06-02 22:37:17   SML_Watt_Summe  589.24
     2022-06-02 22:43:33   SML_serial     
     2022-06-22 20:35:53   Sleep           50
     2022-06-22 20:35:53   SleepMode       Dynamic
     2022-06-22 20:35:53   Time            2022-06-22T19:35:53
     2022-06-22 20:35:53   Uptime          19T21:55:31
     2022-06-22 20:35:53   UptimeSec       1720531
     2022-06-22 20:35:53   Wifi_AP         1
     2022-06-22 20:35:53   Wifi_BSSId      D0:6F:82:39:64:C0
     2022-06-22 20:35:53   Wifi_Channel    1
     2022-06-22 20:35:53   Wifi_Downtime   0T00:00:03
     2022-06-22 20:35:53   Wifi_LinkCount  1
     2022-06-22 20:35:53   Wifi_Mode       11n
     2022-06-22 20:35:53   Wifi_RSSI       96
     2022-06-22 20:35:53   Wifi_SSId       wlan
     2022-06-22 20:35:53   Wifi_Signal     -52
     2022-06-22 00:00:00   btn_1           0
     2022-06-22 00:00:00   btn_2           0
     2022-06-22 00:00:00   btn_3           0
     2022-06-22 00:00:00   btn_4           0
     2022-06-22 00:00:00   btn_5           0
     2022-06-22 00:00:00   btn_6           0
     2022-06-22 00:00:00   btn_7           0
     2022-06-22 00:00:00   btn_8           0
     2022-06-22 00:00:00   dn              Tasmota
     2022-06-22 00:00:00   fn_1            Tasmota
     2022-06-22 00:00:00   ft              %prefix%/%topic%/
     2022-06-22 00:00:00   hn              tasmota-1EC934-2356
     2022-06-22 00:00:00   if              0
     2022-06-22 00:00:00   ip              ip_tasmota
     2022-06-22 00:00:00   lk              0
     2022-06-22 00:00:00   lt_st           0
     2022-06-22 00:00:00   mac             mac
     2022-06-22 00:00:00   md              Generic
     2022-06-22 00:00:00   ofln            Offline
     2022-06-22 00:00:00   onln            Online
     2022-06-22 00:00:00   rl_1            0
     2022-06-22 00:00:00   rl_2            0
     2022-06-22 00:00:00   rl_3            0
     2022-06-22 00:00:00   rl_4            0
     2022-06-22 00:00:00   rl_5            0
     2022-06-22 00:00:00   rl_6            0
     2022-06-22 00:00:00   rl_7            0
     2022-06-22 00:00:00   rl_8            0
     2022-06-22 00:00:00   sho_1           0
     2022-06-22 00:00:00   sho_2           0
     2022-06-22 00:00:00   sho_3           0
     2022-06-22 00:00:00   sho_4           0
     2022-06-02 22:43:22   sn_SML_1_1      217
     2022-06-02 22:39:48   sn_SML_E_in     0.000
     2022-06-02 22:39:48   sn_SML_E_out    0.000
     2022-06-02 22:39:48   sn_SML_L1       0.00
     2022-06-02 22:39:48   sn_SML_L2       0.00
     2022-06-02 22:39:48   sn_SML_L3       0.00
     2022-06-02 22:39:48   sn_SML_NetID    0
     2022-06-02 22:39:48   sn_SML_P_in     0.00
     2022-06-22 00:00:00   sn_SML_Power_act 221.3
     2022-06-22 00:00:00   sn_SML_Power_in 11057.440
     2022-06-22 00:00:00   sn_SML_Power_out 0.2
     2022-06-22 00:00:00   sn_SML_Power_p1 0.0
     2022-06-22 00:00:00   sn_SML_Power_p2 0.0
     2022-06-22 00:00:00   sn_SML_Power_p3 0.0
     2022-06-02 22:43:22   sn_SML_serial   
     2022-06-22 00:00:00   sn_Time         2022-06-21T23:00:00
     2022-06-22 00:00:00   so_11           0
     2022-06-22 00:00:00   so_114          0
     2022-06-22 00:00:00   so_117          0
     2022-06-22 00:00:00   so_13           0
     2022-06-22 00:00:00   so_17           0
     2022-06-22 00:00:00   so_20           0
     2022-06-22 00:00:00   so_30           0
     2022-06-22 00:00:00   so_4            0
     2022-06-22 00:00:00   so_68           0
     2022-06-22 00:00:00   so_73           0
     2022-06-22 00:00:00   so_82           0
     2022-06-22 00:00:00   state_1         OFF
     2022-06-22 00:00:00   state_2         ON
     2022-06-22 00:00:00   state_3         TOGGLE
     2022-06-22 00:00:00   state_4         HOLD
     2022-06-22 00:00:52   subscriptions   cmnd/DVES_1EC934_fb/# cmnd/tasmota_1EC934/# cmnd/tasmotas/#
     2022-06-22 00:00:00   sw              11.1.0
     2022-06-22 00:00:00   swc_1           -1
     2022-06-22 00:00:00   swc_2           -1
     2022-06-22 00:00:00   swc_3           -1
     2022-06-22 00:00:00   swc_4           -1
     2022-06-22 00:00:00   swc_5           -1
     2022-06-22 00:00:00   swc_6           -1
     2022-06-22 00:00:00   swc_7           -1
     2022-06-22 00:00:00   swc_8           -1
     2022-06-22 00:00:00   t               tasmota_1EC934
     2022-06-22 00:00:00   tp_1            cmnd
     2022-06-22 00:00:00   tp_2            stat
     2022-06-22 00:00:00   tp_3            tele
     2022-06-22 00:00:00   ty              0
     2022-06-22 00:00:00   ver             1
Attributes:
   DbLogExclude .*
   DbLogInclude SML_Power_act,SML_Power_in:3600
   readingList DVES_1EC934:tele/tasmota_1EC934/LWT:.* LWT
DVES_1EC934:cmnd/tasmota_1EC934/POWER:.* POWER
DVES_1EC934:tele/tasmota_1EC934/INFO1:.* { json2nameValue($EVENT) }
DVES_1EC934:tele/tasmota_1EC934/INFO2:.* { json2nameValue($EVENT) }
DVES_1EC934:tele/tasmota_1EC934/INFO3:.* { json2nameValue($EVENT) }
DVES_1EC934:tele/tasmota_1EC934/STATE:.* { json2nameValue($EVENT) }
DVES_1EC934:tele/tasmota_1EC934/SENSOR:.* { json2nameValue($EVENT) }
DVES_1EC934:tasmota/discovery/A4E57C1EC934/config:.* { json2nameValue($EVENT) }
DVES_1EC934:tasmota/discovery/A4E57C1EC934/sensors:.* { json2nameValue($EVENT) }
DVES_1EC934:stat/tasmota_1EC934/RESULT:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE



Tasmota_Device Skript:

>D
>B
=>sensor53 r
>M
+1,3,s,1,9600,SML
1,77070100010800ff@1000,Verbrauch,KWh,Power_in,3
1,77070100100700ff@1,Akt. Verbrauch,W,Power_act,1
1,=h--
1,77070100020800ff@1000,Einspeisung,KWh,Power_out,1
1,=h--
1,77070100240700ff@1,Wirkleistung L1,W,Power_p1,1
1,77070100380700ff@1,Wirkleistung L2,W,Power_p2,1
1,770701004c0700ff@1,Wirkleistung L3,W,Power_p3,1

#



CounteR:
Internals:
   DEF        ##
   FUUID      629b435b-f33f-c6f7-3a3b-9eb50884f8162fea
   MODEL      FHEM
   NAME       di_counter_new
   NOTIFYDEV  global,MQTT_HAUS_zaehlernummer
   NR         35
   NTFY_ORDER 50-di_counter_new
   STATE      initialized
   TYPE       DOIF
   VERSION    25819 2022-03-12 23:15:22
   READINGS:
     2022-06-04 13:34:52   cmd             0
     2022-06-04 13:34:52   mode            enabled
     2022-06-22 20:40:03   power_c         0.240
     2022-06-04 13:34:52   state           initialized
   Regex:
     accu:
       MQTT_HAUS_zaehlernummer:
         accu:
           SML_Power_in ^MQTT_HAUS_zaehlernummer$:^SML_Power_in:
     collect:
     event_Readings:
       MQTT_HAUS_zaehlernummer:
         power_c:
           SML_Power_in ^MQTT_HAUS_zaehlernummer$:^SML_Power_in:
   accu:
     MQTT_HAUS_zaehlernummer SML_Power_in:
       dim        2
       value:
         11061.793
         11061.797
   condition:
   do:
     0:
   event_Readings:
     power_c    sprintf("%0.3f",::ReadingValDoIf($hash,'MQTT_HAUS_zaehlernummer','SML_Power_in','','diff')*60)
   helper:
     NOTIFYDEV  global,MQTT_HAUS_zaehlernummer
     event      SML_Power_in: 11061.797,SML_Power_p2: 0.0,SML_Power_p3: 0.0,SML_Power_act: 1653.5,Time: 2022-06-22T19:40:03,SML_Power_out: 0.2,SML_Power_p1: 0.0
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev MQTT_HAUS_zaehlernummer
     triggerEvents:
       SML_Power_in: 11061.797
       SML_Power_p2: 0.0
       SML_Power_p3: 0.0
       SML_Power_act: 1653.5
       Time: 2022-06-22T19:40:03
       SML_Power_out: 0.2
       SML_Power_p1: 0.0
     triggerEventsState:
       SML_Power_in: 11061.797
       SML_Power_p2: 0.0
       SML_Power_p3: 0.0
       SML_Power_act: 1653.5
       Time: 2022-06-22T19:40:03
       SML_Power_out: 0.2
       SML_Power_p1: 0.0
   perlblock:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   event_Readings power_c:sprintf("%0.3f",[MQTT_HAUS_zaehlernummer:SML_Power_in:diff]*60)

Damian

Die letzten beiden empfangen Werte sind:

Zitatvalue:
         11061.793
         11061.797

Differenz ist also 0.004

Daraus wird berechnet 0.004*60=0.240

Also ein Verbrauch von 240 Watt, was auch in power_c-Reading zu finden ist.

Es funktioniert also alles wie es soll.

Wichtig ist halt nur, dass die Werte von SML_Power_in  immer alle 60 Sekunden kommen.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Stephan27

Dann weiß ich nicht, was ich dort zuletzt gesehen habe. (ist ja auch das einzige Reading, also kann ich mich auch nicht verguckt haben) :o
Ich nehme Power_C mal wieder in die Aufzeichung zur Datenbank auf beobachte wie sich der Wert entwickelt.

Der Power_C ist ja jetzt der Schnitt auf eine Minute und den summiert man dann für den Tag oder die Woche auf, richtig?
Oder bilde ich auf selbem Weg mit anderem Faktor einfach z.B. den Tag?

"Wichtig ist halt nur, dass die Werte von SML_Power_in  immer alle 60 Sekunden kommen."

Da ist mir eins jetzt noch nicht ganz klar.
"Muss" der Wert alle 60 Sekunden kommen oder "Darf" er nur alle 60 Sekunden kommen?
Aktuell übermittelt Tasmota jede Sekunde, da ja auch der echt Momentanverbrauch übertragen wird. (was der Zähler meldet) - vlt. liegt auch hier der Fehler?
Wie kann ich das einzelne Reading im Bezug darauf einschränken, dass es garnicht so häufig aktualisiert wird? (aktuell habe ich nur eingestellt, dass es nicht jedesmal in die DB geschrieben wird)

Damian

Also dein Zähler sendet wohl im Sekundentakt, dass kannst du auch nicht beeinflussen. Die Übertragung an FHEM per MQTT habe ich auf 60 Sekunden eingestellt (Telemetry period unter Logging parameters). Das ist auch die Voraussetzung für die Bestimmung der durchschnittlichen Leistung der letzten Minute über Event_Readings. Da hier nicht die Zeitpunkte der Readings ausgewertet werden, funktioniert die Sache nur, wenn genau alle 60 Sekunden das Reading per MQTT aktualisiert wird - nicht öfters und auch nicht seltener.

Ich habe bei mir die durchschnittliche Leistung deswegen so gelöst, um synchron mit dem PV-Zähler zu sein, damit meine grafische Darstellung von der PV-Anlage und vom Einspeisezähler zueinander passt (beide Zähler hängen ja am Tasmota).

Wenn man das nicht braucht/will, dann kann man auch die aktuelle Leistung, die vom Zähler gesendet wird, nehmen.

Ich wollte aber auf jeden Fall FHEM nicht sekündlich mit Zählerdaten belasten, daher habe ich die 60 Sekunden für das Senden per MQTT gewählt.

Für die Berechnung der Tages-, Monats- oder Jahres-Energie, wird nicht die errechnete Durchschnittsleistung (kW) genommen, sondern die absoluten Zählerstände der Energie (kWh), damit man den genauen Verbrauch bestimmen kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Stephan27

Danke für die ausführliche Erklärung.
Dann bin ich die ganze Zeit von den falschen Umständen ausgegangen.
Ich denke ich habe jetzt erstmal was ich brauche und werde mich wenn etwas mehr Zeit ist nochmal genau damit befassen, was ich wie erfassen und wieder anzeigen möchte.
So richtig interessant wird es eh erst mit der PV.

Danke nochmal für die Mühe und Geduld.

Damian

#160
An dieser Stelle noch ein Nachtrag.

Die Berechnung der durchschnittlichen Leistung (der letzten X-Sekunden) lässt sich noch eleganter im MQTT-Devices vornehmen. Hierbei spielt es keine Rolle wie lange die Zeitspanne zwischen dem MQTT-Senden ist, solange sie größer als eine Sekunde ist.

attr MQTT2_DVES_C58DCB userReadings power_pv:SENSOR_COUNTER_C1.* differential {ReadingsVal($name,"SENSOR_COUNTER_C1",0)*3.6},\
power_c:SENSOR_MT681_Total_in.* differential {ReadingsVal($name,"SENSOR_MT681_Total_in",0)*3600},\
power_f:SENSOR_MT681_Total_out.* differential {ReadingsVal($name,"SENSOR_MT681_Total_out",0)*3600},\
power_fc:SENSOR_MT681_Total_.* differential {(ReadingsVal($name,"SENSOR_MT681_Total_out",0)-ReadingsVal($name,"SENSOR_MT681_Total_in",0))*3600}


In den Reading power_pv ist dann die durchschnittliche PV-Leistung, in power_c ist die Bezugsleistung, in power_f die Einspeiseleistung, in power_fc die Einspeiseleistung (positiv) oder die Bezugsleistung (negativ).

Der PV-Zähler (SENSOR_COUNTER_C1) ist ein einfacher S0-Zähler und der Stromzähler (SENSOR_MT681) ein Zweirichtungszähler mit D0-Schnittstelle.

Da beide Zähler am gleichen Tasmota hängen, werden die Leistungsangaben des PV-Zählers und des Stromzählers über den gleichen Zeitraum bestimmt und passen daher zueinander.

PV-Leistung und Netz-Leistung (Einspeisung/Bezug) lässt sich dann gut über die Readings power_pv und power_fc visualisieren

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sammy51

#161
Hallo zusammen,

hatte mein Tasmota Hichi-IR-Wifi Lesekopf zunächst so konfiguriert, dass er meinen alten Pafal oder alternativ den neueren Landys+Gyr Zähler korrekt ausliest. Das wurde dann auf der Tasmota Startseite im Webdialog angezeigt.

Sobal ich dann die Kommunikation zwischen Tasmota und FHEM eingestellt habe und das Tasmota Teil neustartet wird scheinbar das Skript innerhalb Tasmota ignoriert und nichts mehr ausgelesen bzw. in der Weboberfläche anzeigt.

Hat jemand eine Idee wie das repaeriert werden kann (ggf. auch zur Diskusssion in folgenden noch kürzeren Thread)?
Sobald das klappt benötige ich dann vermutlich ienen Tipp wie ich die Wert die Tasmota ausließt auch in FHEM übetrage/nutze und dort in eine kW Zeitreihe umwandle.

Vielen Dank im Voraus!
Beste Grüße
Sammy

https://forum.fhem.de/index.php/topic,128685.msg1246484.html#msg1246484


Nachtrag: Obiges Problem ist gelöst .. am Ende des Skript fehlte "#" dadurch wurde das nach Neustart des Devices offenbar nicht mehr interpretiert das ganze skript.
----------------------------------------------------------------
PI3b FHEM@Buster | Homematic via HMLAN | Phillips HUE/Zigbee | EnoCean via USB300 | Z-Wave via USB | Sonos | AlexaConnector

In Schublade (Anwendungstipps?): Raspy 1 | HM-Raspi-Modul | USB-Serial Adapter

Sammy51

#162
Zitat von: Damian am 25 Juni 2022, 12:58:55
An dieser Stelle noch ein Nachtrag.

Die Berechnung der durchschnittlichen Leistung (der letzten X-Sekunden) lässt sich noch eleganter im MQTT-Devices vornehmen. Hierbei spielt es keine Rolle wie lange die Zeitspanne zwischen dem MQTT-Senden ist, solange sie größer als eine Sekunde ist.

attr MQTT2_DVES_C58DCB userReadings power_pv:SENSOR_COUNTER_C1.* differential {ReadingsVal($name,"SENSOR_COUNTER_C1",0)*3.6},\
power_c:SENSOR_MT681_Total_in.* differential {ReadingsVal($name,"SENSOR_MT681_Total_in",0)*3600},\
power_f:SENSOR_MT681_Total_out.* differential {ReadingsVal($name,"SENSOR_MT681_Total_out",0)*3600},\
power_fc:SENSOR_MT681_Total_.* differential {(ReadingsVal($name,"SENSOR_MT681_Total_out",0)-ReadingsVal($name,"SENSOR_MT681_Total_in",0))*3600}


In den Reading power_pv ist dann die durchschnittliche PV-Leistung, in power_c ist die Bezugsleistung, in power_f die Einspeiseleistung, in power_fc die Einspeiseleistung (positiv) oder die Bezugsleistung (negativ).

Der PV-Zähler (SENSOR_COUNTER_C1) ist ein einfacher S0-Zähler und der Stromzähler (SENSOR_MT681) ein Zweirichtungszähler mit D0-Schnittstelle.

Da beide Zähler am gleichen Tasmota hängen, werden die Leistungsangaben des PV-Zählers und des Stromzählers über den gleichen Zeitraum bestimmt und passen daher zueinander.

PV-Leistung und Netz-Leistung (Einspeisung/Bezug) lässt sich dann gut über die Readings power_pv und power_fc visualisieren

Hi Damian,

das klingt toll und scheint eine gute Lösung!
* In meinem Fall geht es für zwei Messgeräte (1x Hausstrom zwei Richtungszähler wegen PV-Anlage, 1x Wärmepumpe zwei Tarifzähler) mit mittelfristig jeweils einem Hichi-IR-Wifi Lesekopf nur über zwei verschiedene MQTT Devices in FHEM oder?
* Eins davon ist nun aktiv (zunächst für die Wärmepumpe, weil ich dort Zeitreihen generieren will um besser die Wirtschaftlichkeit des 2. Zählers bewerten zu können (besserer Stromtarif vs. Eigenerzeugung und Eigennutzung von x%).

Jetzt bin ich nicht sicher wie ich Deinn Beispiel korrekt auf mich transportiere. Bzw. der erste Versuch funktioniert nicht.
Standard-Readings von meinem Tasmota Device (Bezeichnung des Device in FHEM ist  Strommessung_WP) sehen zunächst wie folgt aus:

2022-11-26_14:48:53 Strommessung_WP Pafal-WP___Total_day: 22622.85
2022-11-26_14:48:53 Strommessung_WP Pafal-WP___Total_night: 6999.03
2022-11-26_14:48:53 Strommessung_WP Time: 2022-11-26T14:48:53
2022-11-26_14:48:53 Strommessung_WP Pafal-WP___Total: 29621.88


Jetzt glaube ich verstanden zu haben, dass eine Anpassung Deines Codes in die RAW Definition des MQTT Devices muss (nicht etwa in das Skript auf dem Tasmota Device). Von dem Zähler ist primär das Reading "Pafal-WP___Total" relevant für die Gesamtleistungszeitreihe. Daneben könnte man vielleicht auch die HT und NT Leistung berechnen um später auch die verschiedenen HT/NT PReise in die Berechnung einzubeziehen.

Wie muss dann das UserReading Attribut aussehen?

Folgendes wirft zwar keinen Fehler führt aber auch nicht zur Ausgabe eines zusätzlichen Readings in das Device-Log:

attr Strommessung_WP userReadings power_WP_in:Pafal-WP___Total.* differential {ReadingsVal($name,"Pafal-WP___Total",0)*3600},\
power_WP_in_HT:Pafal-WP___Total_day.* differential {ReadingsVal($name,"Pafal-WP___Total_day",0)*3600},\
power_WP_in_NT:Pafal-WP___Total_night.* differential {ReadingsVal($name,"Pafal-WP___Total_night",0)*3600}


Im Voraus vielen Dank!
Beste Grüße
Sammy

EDIT: Inzwischen taucht dann doch zumindest eine weitere Zeile im Logfile auf. Ein aktueller Wert von 0 ist zunächst nicht unplausibel. Aktualisierung kann zunächst vermutlich nur im 5min Raster erfolgen (Logging Konfig auf dem Tasmota Device 300sec).

2022-11-26_16:15:42 Strommessung_WP power_WP_in: 0
2022-11-26_16:15:42 Strommessung_WP power_WP_in_HT: 0
2022-11-26_16:15:42 Strommessung_WP power_WP_in_NT: 0



BTW: Wie hast du die Schicke grafische Anzeige generiert?
----------------------------------------------------------------
PI3b FHEM@Buster | Homematic via HMLAN | Phillips HUE/Zigbee | EnoCean via USB300 | Z-Wave via USB | Sonos | AlexaConnector

In Schublade (Anwendungstipps?): Raspy 1 | HM-Raspi-Modul | USB-Serial Adapter

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dennis_n

Hallo,

ich habe meinen Stromzähler jetzt auch per MQTT in fhem angebunden. Die Standardwerte werden auch ordentlich übertragen.
Allerdings habe ich das Script vom user @hapege gesehen, womit er auch den Tagesverbrauch im state angezeigt bekommt.
Das Script sieht so aus und habe ich an meinen Zähler angepasst:
>D
pin=0   
pi_t=0
pi_l=0
pi_h=0
pi_lh=0
hr=0
hrr=0
; permanent midnight values
p:pi_m=0
p:pi_d=0
p:pi_y=0
>B
->sensor53 r
>T
; get total consumption and total feed
pin=MT681#EnergyTotal
;=>publish tele/%topic%/DAY {"dayconsumption":%pi_d%}
>S
; at midnight, save meter total values
hr=hours
if chg[hr]>0
and hr==0
then
pi_y=pin-pi_m
pi_m=pin
=>publish tele/%topic%/DAY {"dayconsumption":%pi_y%,"tillmidnight":%pi_d%}
svars
endif
hrr=hr
if chg[hrr]>0
then
pi_h=pin-pi_lh
pi_lh=pin
=>publish tele/%topic%/HOUR {"lasthour":%pi_h%,"sumtillmtime":%pi_d%,"mtime":%hrr%}
; =>publish tele/%topic%/DAY {"dayconsumption":%pi_y%,"tillmidnight":%pi_d%}
svars
endif
; on teleperiod calculate current daily values from midnight
if upsecs%tper==0
then
pi_d=pin-pi_m
pi_t=(pin-pi_l)*1000
pi_l=pin
endif
; show these values on WEB UI
>W
Tagesverbrauch: {m} %pi_d% kWh
Messinterval (%tper s): {m} %pi_t% Wh   
; transmit these values with MQTT
>J
,"sincemidnight":%pi_d%,"lastperiod":%pi_t%
; meter definition
>M 1
+1,3,s,0,9600,MT681
1,77070100010800ff@1000,Energy Total,KWh,EnergyTotal,4
1,77070100020800ff@1000,Energy Out,kWh,EnergyOut,4
1,77070100100700ff@1,Power Now,W,PowerNow,0
1,77070100000009ff@#,Service ID,,MeterID,0
#


Aber ich bekomme die Readings nicht entsprechend in fhem angezeigt.
Hier mal noch ein list vom Device:
Internals:
   CFGFN     
   CID        DVES_74ED88
   DEF        DVES_74ED88
   FUUID      63d30bf6-f33f-8212-9f84-178e2884e2f3ba8c
   IODev      mqttBroker
   LASTInputDev mqttBroker
   MSGCNT     247
   NAME       MQTT2_DVES_74ED88
   NR         1872
   STATE      ???
   TYPE       MQTT2_DEVICE
   eventCount 259
   mqttBroker_CONN mqttBroker_192.168.2.175_60481
   mqttBroker_MSGCNT 247
   mqttBroker_TIME 2023-01-27 10:25:47
   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
   OLDREADINGS:
   READINGS:
     2023-01-27 10:25:47   Heap            19
     2023-01-27 00:25:42   IODev           mqttBroker
     2023-01-27 05:14:45   LWT             Online
     2023-01-27 10:25:47   LoadAvg         19
     2023-01-27 10:25:47   MT681_Meter_id  090149534b00050c0c4a
     2023-01-27 10:25:47   MT681_Power_curr 387
     2023-01-27 10:25:47   MT681_Total_in  1531.592
     2023-01-27 10:25:47   MT681_Total_out 4956.063
     2023-01-27 10:25:47   MqttCount       2
     2023-01-27 00:30:05   SaveData        on
     2023-01-27 00:30:05   SetOption26     on
     2023-01-27 10:25:47   Sleep           50
     2023-01-27 10:25:47   SleepMode       Dynamic
     2023-01-27 00:30:04   StateText1      off
     2023-01-27 00:30:04   StateText2      on
     2023-01-27 00:30:04   StateText3      toggle
     2023-01-27 00:30:04   StateText4      hold
     2023-01-27 10:25:47   Time            2023-01-27T10:25:46
     2023-01-27 10:25:47   Uptime          0T10:00:10
     2023-01-27 10:25:47   UptimeSec       36010
     2023-01-27 10:25:47   Wifi_AP         1
     2023-01-27 10:25:47   Wifi_BSSId      44:4E:6D:AE:C0:DC
     2023-01-27 10:25:47   Wifi_Channel    6
     2023-01-27 10:25:47   Wifi_Downtime   0T00:00:07
     2023-01-27 10:25:47   Wifi_LinkCount  2
     2023-01-27 10:25:47   Wifi_Mode       11n
     2023-01-27 10:25:47   Wifi_RSSI       56
     2023-01-27 10:25:47   Wifi_SSId       Homer
     2023-01-27 10:25:47   Wifi_Signal     -72
     2023-01-27 00:30:04   attrTemplateVersion 20210523
Attributes:
   alias      Stromzaehler
   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/cmnd/tasmota_74ED88/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
   genericDeviceType switch
   icon       hue_filled_outlet
   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 tele/tasmota_74ED88/LWT:.* LWT
  tele/tasmota_74ED88/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_74ED88/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_74ED88/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_74ED88/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
  stat/tasmota_74ED88/POWER1:.* state
  stat/tasmota_74ED88/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
   room       Homestatus
   setList    off:noArg    cmnd/tasmota_74ED88/POWER1 0
  on:noArg     cmnd/tasmota_74ED88/POWER1 1
  toggle:noArg cmnd/tasmota_74ED88/POWER1 2
  setOtaUrl:textField cmnd/tasmota_74ED88/OtaUrl $EVTPART1
  upgrade:noArg   cmnd/tasmota_74ED88/upgrade 1
   setStateList on off toggle


Was muss ich denn machen, damit mir der Tagesverbrauch angezeigt wird?

Gruss
Dennis