Forum: Haus & Smart Home Smartmeter SML Tasmota negative Momentanleistung mit signed Wert von Zähler DVSB20.2TH
 Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Hallo zusammen,
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?
Als Rohdaten bekomme ich von dem Sensor:
Fall Einspeisung:
77 07 01 00 10 07 00 ff 01 72 62 01 62 00 62 1b 52 fe 55 00 fc 9a 4b 01
01 01 63 d9 91 00 76 05 62 00 1b 1b 1b 1b 01 01
--> 55 00 fc 9a 4b := aktuelle Leistung
fc 9a 4b --> -222645 = -2226,45 Watt (richtiger Wert)
Tasmota Skript --> 16554571 = 165545,71 Watt (falscher Wert)
Fall Netzbezug:
77 07 01 00 10 07 00 FF 01 72 62 01 62 00 62 1B 52 FE 54 01 5E 9F 01 01
01 63 E1 D7 00 76 05 B6 29 1F 00 1B 1B 1B 1B 01
--> 54 01 5E 9F := aktuelle Leistung
01 5E 9F --> 89759 = 897,59 Watt (richtiger Wert)
Tasmota Skript --> 89759 = 897,59 Watt (wird korrekt angezeigt)
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.
Weiß hier jemand eine Lösung?
Vielen Dank im Vorraus
Hallo,
da ich das gleiche Problem habe,
wollte ich höflich fragen, ob es denn schon einen Lösungsweg gibt?
Grüße
Georg
Hallo Georg,
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.
Grüße
Chris
Ist es evtl. dieses Problem hier:
https://ottelo.jimdofree.com/2022/12/16/update-stromz%C3%A4hler-auslesen-bugfix-f%C3%BCr-dws74/
sonst versuche es mal mit einer anderen Tasmota-Version - ich hatte mit
der 13.1 auch große Probleme bei einem DZG-Zähler
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
#
Der Zähler ist ein E320.
MINION schrieb:
> Kann dir heute Abend gern den Codeausschnitt hier
> hochladen dann wirds glaube ich deutlicher,
>
> Grüße
> Chris
Das wäre natürlich super!
Gruß Georg
Ich habe:
Tasmota Version 13.3.0(tasmota32)
Erstellungszeitpunkt 2024.01.18 10:41:04
Core-/SDK-Version 2_0_14/4.4.6.231122
Bei meinem Zähler ist das Problem "nur" wenn die Leistung Prinzipiell
negativ ist.
Guten Abend,
hier ist mal der Ausschnitt aus meinem Skript, hab im Grunde das
Volkszähler Tasmota Skript mit den Google Charts Anzeigen von dieser
Seite:
https://ottelo.jimdofree.com/stromz%C3%A4hler-auslesen-tasmota/
1 | ;-- SML --
| 2 | >M 1
| 3 |
| 4 | ;1. line = sml[1] (actual power W), 2. = sml[2] (energy from grid kWh), 3. = sml[3] (energy to grid kWh)
| 5 | +1,3,s,16,9600,DZG
| 6 | 1,=so1,00010800,64,11,65,11,00100700
| 7 | 1,00100700ff@1,Leistung (falsch bei -),W,Power_curr,2
| 8 | 1,00010800ff@1000,Verbrauch,kWh,Total_in,4
| 9 | 1,00020800ff@1000,Einspeisung,kWh,Total_out,4
| 10 | #
| 11 |
| 12 |
| 13 |
| 14 | ; -- EVERY SECOND --
| 15 | >S
| 16 | ;start mqtt if smartmeter is sending
| 17 | if (sml[2]>0)
| 18 | {
| 19 | smlj=1
| 20 | }
| 21 |
| 22 | ;check if Power is negative and correct value
| 23 | pnew=sml[1]
| 24 | if (pnew<0)
| 25 | {
| 26 | pnew*=-1
| 27 | if (pnew>=655.36)
| 28 | {
| 29 | pnew-=167772.16
| 30 | }
| 31 |
| 32 | if (pnew>=2.56)
| 33 | {
| 34 | pnew-=655.36
| 35 | }
| 36 | else
| 37 | {
| 38 | pnew-=2.56
| 39 | }
| 40 | }
| 41 | power=pnew
|
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
Danke
Georg
Hallo,
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.
Ahh, ich verstehe,
du korrigierst gar nicht die Werte die das Tasmota via MQTT überträgt
sondern korrigiert sie in deiner Anzeigelogig.
Für mich hiese das, ich müsste die Umrechnung im Home Assistant
vornehmen, oder?
Danke
Georg
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.
Danke sehr,
Deine Rechenmurmel hat mir sehr geholfen. Ich habe das in Home Assistant
im configuration.yaml wie folgt gelöst: 1 | template:
| 2 | - sensor:
| 3 | - name: "Leistungsaufnahme"
| 4 | unique_id: latasmta
| 5 | unit_of_measurement: W
| 6 | state_class: measurement
| 7 | device_class: power
| 8 | state: >
| 9 | {% set mypower = (states("sensor.strom_dzg_Power_cur") | float(0)) %}
| 10 | {% if mypower < 0 %}
| 11 | {% set mypower = -1 * mypower %}
| 12 | {% if mypower >= 655.38 %}
| 13 | {% set mypower = mypower - 167772.16 %}
| 14 | {% if mypower >= 2.56 %}
| 15 | {% set mypower = mypower - 655.36 %}
| 16 | {% else %}
| 17 | {%set mypower = mypower - 2.56 %}
| 18 | {% endif %}
| 19 | {% endif %}
| 20 | {% endif %}
| 21 | {{ mypower | round (1) }}
|
Grüße Georg.
Hallo zusammen
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.
19:11:04.197 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 89
19:11:04.216 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:05.167 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:05.216 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 4a d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:06.168 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:06.215 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 25 d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:07.167 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:07.197 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 89
19:11:07.214 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:08.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:08.197 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 a2
19:11:08.215 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:09.167 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:09.216 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 4b d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:10.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:10.197 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 a2
19:11:10.214 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:11.165 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:11.197 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 a2
19:11:11.214 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:12.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:12.196 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 f3
19:11:12.213 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:13.167 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:13.215 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 4c d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:14.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:14.214 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 26 d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:15.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:15.214 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 37 d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:16.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:16.214 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 13 d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:17.167 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:17.214 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 4d d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:18.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:18.196 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 f3
19:11:18.214 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:19.167 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:19.196 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 f3
19:11:19.213 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:20.165 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:20.196 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 f3
19:11:20.213 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:21.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:21.215 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 4e d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:22.165 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:22.213 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 27 d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:23.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:23.196 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 f3
19:11:23.213 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:24.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:24.195 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 f3
19:11:24.214 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:25.164 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:25.212 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 4f d7 07 01 00 60 32 01 01 01 01 01 01 04 44
19:11:26.165 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:26.196 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 f3
19:11:26.213 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:27.165 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:27.195 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 f3
19:11:27.212 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:28.165 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:28.194 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 d1
19:11:28.212 : 77 07 01 00 60 32 01 01 01 01 01 01 04 44 5a 47 01
19:11:29.166 : 77 07 01 00 60 01 00 ff 40 40 40 40 48 28 44 5a 47 00 02
63 4a ed 40 07 01 00 01 08 00 ff f6 1c 01 04 72 62 01 65 08 96
19:11:29.214 : 77 01 0b 0a 01 44 5a 47 00 02 63 4a ed 78 00 62 0a ff fb
62 01 65 08 96 43 50 d7 07 01 00 60 32 01 01 01 01 01 01 04 44
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
doch es kommt nur so was heraus (siehe Bild)
Für Hilfe wäre ich sehr dankbar.
toptobias
Probier mal das....
>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
#
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|