wie im Betreff geschrieben habe ich den Zweirichtungszähler DZG DVBS20.2TH. Aus diesem möchte ich über einen Infrarotlesekopf und einen Wemos D1 Mini mit Tasmota die Zählerstände und den aktuellen Verbrauch/Einspeisung auslesen.
Dafür benutze ich folgendes SML Skript:
1
>D
2
>B
3
=>sensor53 r
4
>M 1
5
+1,3,s,0,9600,#
6
7
;Zählerstände
8
1,00010800ff@1000,Energie bezogen,kWh,energy,4
9
1,00020800ff@1000,Energie geliefert,kWh,energy,4
10
11
;Leistung
12
1,=so1,00010800,64,11,65,11,00100700
13
1,00100700ff@1,Leistung,W,power,2
14
#
Das funktioniert für die Zählerstände so weit auch (siehe Bild). Die aktuelle Leistung wird bei Netzbezug auch richtig dargestellt, wenn jedoch Strom eingespeist wird, bekomme ich wie auf dem Screenshot zu sehen eine falsche Ausgabe. Der Zähler liefert in der Nachricht 00100700 einen signed Wert, Tasmota verrechnet diesen aber als unsigned. Über die Zeile 1,=so1,00010800,64,11,65,11,00100700 wird im Statuswort der Nachricht 00010800 überprüft wie die aktuelle Energierichtung ist und dadurch auch das Minuszeichen für die Leistung richtig gesetzt, jedoch ist der Wert an sich ja noch falsch da das Vorzeichenbit aus dem Leistungswert falsch interpretiert wird. Gibt es hier eine Möglichkeit im Skript festzulegen, das es sich um einen signed Wert handelt?
Ein weiteres Problem ist, dass im Fall Einspeisung noch ein leeres Byte (00 nach 55) mit ausgegeben wird, wodurch das Vorzeichenbit auch nicht mehr an erster Stelle steht.
ich habs mitllerweile über einen kleinen Umweg für mich gelöst. Im Endeffekt schaue ich ob die Leistung negativ ist und rechne dann entsprechend den Bitfehler raus. Hab das im Tasmota Skript mit einprogrammiert. Kann dir heute Abend gern den Codeausschnitt hier hochladen dann wirds glaube ich deutlicher, bin nur gerade noch unterwegs.
Bei meinem Zähler funktioniert das Problemlos.
Info1_Module
Sonoff Basic
Info1_Version
9.5.0(tasmota)
mit MQTT
mein Script:
D
B
=>sensor53 r
M 1
+1,3,s,20,9600,E320
1,77070100020800ff@1000,Total Delivered,KWh,Total_out,3
1,77070100010800ff@1000,Total Consumed,KWh,Total_in,3
1,77070100100700ff@1,Current power,W,Power_in,3
1,77070100600100ff@#,Server-ID,,Meter_Number,0
Das Problem ist ja, dass der Zähler ein Vorzeichenbit mitschickt, das von dem Skript falsch interpretiert wird. Ich schaue also, ob die aktuelle Leistung negativ ist (das wird ja durch die Energierichtung trotzdem erkannt) und wenn ja, wie groß der Wert ist. Je nachdem wie groß der richtige Wert ist, rutscht das Vorzeichenbit noch ein Byte nach vorne und deshalb muss die Korrektur größer werden. 2^8=256; 2^16=65536; 2^24=16777216 und so weiter, aber so große Werte sollten nicht mehr auftreten.
Das funktioniert wie auf den Screenshots zu sehen soweit ganz gut, nur wenn die Leistung gerade öfters zwischen positiv und negativ wechselt bekomme ich noch manchmal Ausreißer von ca. -17000 die ich noch nicht ganz nachvollziehen kann.
Danke Für das Script,
Leider korrigiert das bei mir die Werte nicht. Wobei ich mich auch frage, wie denn die Werte, die in "check if Power is negative and correct value" überhaupt auf den Ausgangswert zurück gespielt werden? Also power -> Power_Curr
wie auf den Screenshots zu sehen bleibt der Leistungswert in der ersten Zeile falsch. Der Ausgangswert wird also nicht überschrieben, im Skript wird dann aber mit power weitergerechnet, was ja über die letzte Zeile power=pnew auf den richtigen Wert gesetzt wird. Dadurch bekomme ich in der vierten Zeile in den Schreenshots bei "Leistung:" den richtigen Wert angezeigt und die Diagramme werden auch mit den richtigen Daten gefüttert.
Hab das gesamte Skript mal als Datei angehängt. Falls du auch einen ESP8622 hast musst du das allerdings wie in der zuvor genannten Website beschrieben über ein das Tool ScriptEditor hochladen da der Controller sonst zu wenig RAM hat.
Ja genau bei mir läuft alles nur über den einen Tasmota.
Mit MQTT und HomeAssistant habe ich mich bisher noch nicht befasst, da kann ich leider auch nicht weiterhelfen.
Vielleicht könnt ihr mir helfen, bei mir funktioniert die codierung überhapt nicht. Ich besitze ein Drehstromzähler vom Typ DZG DWSB06.2TH.
Der Tasmota gibt folgende Zeichenfolge aus.
Doch leider finde ich nicht die passenden einträge wie
Energie bezogen, geliefert, aktuelle Leistung.
Am Zähler konnte ich den Code vom Energiezuliefer eintragen und sehe am Zähler die aktuelle Leistung.
Kann mir bitte jemand helfen beim richtigen Codieren, aktuelle habe ich im Tasmota dieses script laufen:
D
B
=>sensor53 r
M 1
+1,3,s,16,9600,DWSB122
1,77070100010800ff@1000,Energie bezogen,kWh,energy,0
1,77070100020800ff@1000,Energie geliefert,kWh,energy,0
1,77070100100700ff@1,Leistung,W,power,2
1,7707010060320101@#,Service ID,,meter_id,0
1,77010b0a01445a47@#,Unbekannt,,unknown,0
1,77070100600100ff@#,Zählernummer,,meter_number,0
D
B
=>sensor53 r
M 1
;1. line = sml[1] (actual power W), 2. = sml[2] (energy from grid kWh), 3. = sml[3] (energy to grid kWh)
+1,5,s,16,9600,DZG
1,=so1,00010800,64,11,65,11,00100700
1,00100700ff@1,Leistung,W,Power_cur,2
1,00010800ff@1000,Verbrauch,kWh,energy180,4
1,00020800ff@1000,Einspeisung,kWh,energy280,4