Stromzähler ablesen in Fhem

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

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: Stephan27 am 02 Juni 2022, 22:06:54
Ich glaub ich habe die Rohdaten gefunden:

Wären die drei/ vier, die ich aktuell nicht auslese:
1,77078181c78203ff
1,77070100000009ff
1,77070100010801ff
1,77070100010802ff

Diese Angaben kommen bei dir nicht vor:

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


Die Zeile würde ich mir genauer anschauen:

77 07 01 00 10 07 00 ff 01 01 62 1b 52 fe 59 00 00 00 00 00 00 05 f7 01 01 01 63 ab bb 00 76 0b 45 53 59 4d 81 fa 18 c1
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Stephan27

Zitat von: Damian am 03 Juni 2022, 07:43:29
Diese Angaben kommen bei dir nicht vor:

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


Die Zeile würde ich mir genauer anschauen:

77 07 01 00 10 07 00 ff 01 01 62 1b 52 fe 59 00 00 00 00 00 00 05 f7 01 01 01 63 ab bb 00 76 0b 45 53 59 4d 81 fa 18 c1

Genau die "Wirkleistungen" die überall im Netz dokumentiert sind gibt er bei mir leider nicht aus.
Die Zeile die du "extrahiert" hast ist der Momentanverbrauch in Watt, also zumindest der erste Teil:
77 07 01 00 10 07 00 ff
im Vergleich:
1,77070100100700ff@1,Akt. Verbrauch,W,Power_act,1


Ansich ist es okay, hätte aber gehofft noch was mehr aus dem Zähler zu bekommen.


Stephan27

#137
Zitat von: Damian am 02 Juni 2022, 21:07:17
In FHEM verzichte ich bewusst auf diesen Wert, denn das Übertragungsintervall der Werte habe ich auf 60 Sekunden gestellt. Dann ist ein momentaner Bezug bzw. Einspeisung ggf. nach einigen Sekunden nicht mehr aktuell, daher errechne ich lieber in FHEM die durchschnittliche Leistung des Bezugs/Einspeisung der letzten Minute aus den Zählerständen.

Das war u.A. in dem Link zum Wiki mit drin die Berechnungen?(DOIF) Du hattest aber alles FileBased? (also die Logs?)

Damian

So berechne ich die Leistung:

attr di_counter_new event_Readings power_pv:sprintf("%0.3f",[MQTT2_DVES_C58DCB:SENSOR_COUNTER_C1:diff]*3.6/60),\
power_f:sprintf("%0.3f",[MQTT2_DVES_C58DCB:SENSOR_MT681_Total_out:diff]*60),\
power_c:sprintf("%0.3f",[MQTT2_DVES_C58DCB:SENSOR_MT681_Total_in:diff]*60),\
power_fc:[$SELF:power_f]-[$SELF:power_c]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

RalfRog

#139
Zitat von: Stephan27 am 03 Juni 2022, 12:23:56
....
Ansich ist es okay, hätte aber gehofft noch was mehr aus dem Zähler zu bekommen.
Vielleicht hilft das https://www.msxfaq.de/sonst/bastelbude/smartmeter_d0_sml_protokoll.htm ein wenig die Daten zu verstehen.

Und es macht eventuell Sinn die Rohdaten (also das ganze Protokoll) mal am Lesekopf abzugreifen/auszulesen. Hatte ich vorab an einem TestRaspi mit Lesekopf an RX/TX gemacht (oder mit EspEasy ser2net, bei Tasmota weiss ich nicht ob man die ganzen Rohdaten abgreifen kann).
==> Also von Hex 1B 1B 1B 1B 01 01 01 01 .....  bis 1B 1B 1B 1B 1A XX XX XX XX
Dann kann man es mal auf die Bereiche mit 77 07 zerlegen und sehen was der Zähler alles schickt um es von Tasmota interpretieren zu lassen.

Edit:
Eine Variante ohne Hex-Jonglieren ist, das OBIS-Modul zu aktivieren und mit dem Datenstrom des Lesekopfs seriell oder per LAN (z.B. ser2net) zu verbinden. Dann kann man sehen welche Daten vom Zähler durch das Modul erkannt werden.

Aus der Commandref zum OBIS Modul
If you use a ser2net connection, <device> is ip-address:port or hostname:port.

Optional: MeterType can be of

    VSM102 -> Voltcraft VSM102
    E110 -> Landis&&;Gyr E110
    E350USB -> Landis&&;Gyr E350 USB-Version
    MT382 -> ISKRA MT382
    Standard -> Data comes as plainText
    SML -> Smart Message Language


Example:
define myPowerMeter OBIS /dev/ttyPlugwise@9600,7,E,1 VSM102
define myPowerMeter OBIS 192.168.0.12:1234 Standard
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

#140
Zitat von: Damian am 03 Juni 2022, 23:18:26
So berechne ich die Leistung:

attr di_counter_new event_Readings power_pv:sprintf("%0.3f",[MQTT2_DVES_C58DCB:SENSOR_COUNTER_C1:diff]*3.6/60),\
power_f:sprintf("%0.3f",[MQTT2_DVES_C58DCB:SENSOR_MT681_Total_out:diff]*60),\
power_c:sprintf("%0.3f",[MQTT2_DVES_C58DCB:SENSOR_MT681_Total_in:diff]*60),\
power_fc:[$SELF:power_f]-[$SELF:power_c]


Ich hab das letzte Woche auf die Schnelle mal wie folgt für mich abgegriffen und in die DB schreiben lassen:
power_c:sprintf("%0.3f",[*MeinDevice*:SML_Power_in:diff]*60)

Einen Eintrag habe ich 1x je Minute, was ja okay ist...
90% sagt es aber 0,00
10% sagt es 6,00

Hab mal nen Screen vom Counter mit angehangen.

@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?

Damian

also:

power_c:sprintf("%0.3f",[*MeinDevice*:SML_Power_in:diff]*60)


kann schon mal nicht funktionieren, denn es geht um den Inhalt eines konkreten Readings und da sind Sterne im Namen nicht erlaubt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Stephan27

#142
Zitat von: Damian am 10 Juni 2022, 20:08:37
also:

power_c:sprintf("%0.3f",[*MeinDevice*:SML_Power_in:diff]*60)


kann schon mal nicht funktionieren, denn es geht um den Inhalt eines konkreten Readings und da sind Sterne im Namen nicht erlaubt.

*Mein Device* stand und steht natürlich mein Gerät, also der Definierte Name drin, da ich aber zwei Zähler Auslese steht dort meine Zählernummer im Namen, die ich hier nicht öffentlich posten möchte. Sieht man aber auch im Screenshot bereits.

Damian

#143
Mein Zähler liefert kWh mit drei Nachkommastellen. Hier die Umrechnung:

1 kWh entspricht 1000 Watt/3600 Sekunden, da ich im 60 Sekundenintervall messe, muss ich die Differenz mal 60 nehmen um auf Kilowatt zu kommen.

Wenn die Differenz in 60 Sekunden  z. B. 0.001 (kleinste mögliche Differenz) beträgt, dann habe ich in dieser Zeit eine durchschnittliche Leistungsaufnahme von 0,001*60=0,06 Kilowatt, was 60 Watt entspricht. Ich kann also die Leistung mit einer Genauigkeit von maximal 60 Watt bestimmen. Würde ich alle 3 Minuten senden, dann würde ich die Genauigkeit auf 20 Watt erhöhen, dafür müsste ich länger warten und der durchschnittliche Verbrauch würde weniger dem momentanen Verbrauch entsprechen.

Die Umrechnung hängt in erste Linie davon ab, in welcher Einheit  der Zähler sendet. event-on-change-reading-Attribut ist natürlich für die Messung bei diesem Reading verboten ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Stephan27

#144
Danke für die ausführliche Antwort.
Ich habe im Tasmota nur eine Nachkommastelle ausgeben lassen. Ich habe das jetzt auch mal auf 3 Stellen umgestellt mal sehen ob das schon die Lösung ist.

Hab es mal geändert, aber keine Ahnung. Der Output alterniert jetzt immer zwischen 0 und 0,06.

Bin aber auch nicht wirklich schlauer was ich nun genau wo eintragen muss.
Tasmota ist wie in deinem Link damals beschrieben eingestellt und liefert Werte, in Fhem hat das MQTT automatisch Tasmota als Gerät angelegt und den Zähler habe ich so angelegt wie du weiter oben kurz geschrieben hast und mit dem Event_Reading versehen.

Damian

Mit einer Nachkommastelle kann es nicht funktionieren, dafür ist die Auflösung viel zu gering, um in einer Minute etwas zu messen. 0,1*60, das wären 6 Kilowatt, soviel wirst du selten verbrauchen ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Stephan27

Wie gesagt die Änderung auf 3 hat aber augenscheinlich nichts gebracht. Keine Ahnung was jetzt nicht stimmt oder wo ich suchen muss.

Damian

Zitat von: Stephan27 am 11 Juni 2022, 16:14:45
Wie gesagt die Änderung auf 3 hat aber augenscheinlich nichts gebracht. Keine Ahnung was jetzt nicht stimmt oder wo ich suchen muss.

Dein Zähler muss auch die Genauigkeit auf drei Nachkommastellen liefern. Wenn er das nicht tut, dann kannst du dir den Aufwand sparen und eben die momentane Leistung anzeigen, die geliefert wird.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Stephan27

Sorry habe ich nicht erwähnt, er zeigt es auch an ja. Also Tasmota zeigt mir jetzt Zählerstand in KWh bis 3 Nachkommastellen an. Haut auch hin wenn ich das so beobachte.

Sany

ZitatAlso Tasmota zeigt mir jetzt Zählerstand in KWh bis 3 Nachkommastellen an

...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
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....