D0 Zähler SML auslesen mit Tasmota

  • Old_Engineer

    ich habe auf dem Gaszähler noch 6.xxxx das werden sie aber auch gespeichert.
    Evtl. gibt es eine Einstellung die evtl. bei Dir nicht default war?!?!?

    Also generell, kann ich das verstehen, dass man nicht immer wieder neu schreiben möchte.

    Also bei Stromzählern brauchst Du Dir eigentlich keine Sorge machen, das Du dort ja immer den Gesamtwert mit
    übergeben bekommst...

    Bei den Impulszählern, sollte Tasmota ebenfalls den Gesamtwert speichern und auch bei Stromausfall
    parat haben, theoretischen könntest Du den ESP ja auch mit Accu puffern...
    und er würde eine gewisse Zeit weiter mit zählen, falls Du evtl. mit Gas kochst...

    Wasser ist für mich noch ein schwarzes Tuch, da ich eine Magnetscheibe oder Reflexscheibe in der

    Wasseruhr habe und nur ein sehr feines schwarzes Rädchen...


    Im Grund ist Dein Problem dann ja mit dem Update gelöst....

    Eine Idee wäre evtl. Du aktivierst die Variablen im Script, so dass DU im ioBroker script siehst,
    dort könntest Du ja wert in eine Variable vom Script setzen, bin mir aber nicht sicher ob es geht
    dann diesen Wert in den C1 zu schreiben vom Script aus....

    Gemu liest normale mit, ggf. (gezielt eine Beitragsinfo zukommen lassen....)mit

    gemu2015 ,
    kann man über http request, den Counter wert im Sensor53 setzen?
    Und liege ich richtig, dass der Gesamtwert im counter auch im Stromausfall gespeichert ist?
    Kann man das an und ausschalten?

    Danke

    Gruß Jens

  • Hallo Jens,

    Hallo Old_Engineer,

    den counter kann ich problemlos mit dem Kommando über http setzen http://192.168.188.61/cm?cmnd=sensor53%20c1%20123456

    der c1 muss KLEIN geschrieben werden.

    Also das mit dem Speichern von Variablen geht so vor sich:

    Tasmota selbst speichert Variablen jede Sekunde (default) ins Flash ab falls sich was geändert hat

    (Befehl SaveData)

    Die counter Register sind im Tasmota Variablenbereich werden also jede Sekunde abgespeichert.

    P (permanente) Variablen im Scripter werden bei restart oder mit dem Befehl svars in den Tasmota Variablenbereich kopiert und dann eine Sekunde später ins Flash geschrieben.

    Wohlgemerkt NUR dann wenn sich etwas geändert hat.

    Wenn sich also der counter dauernd ändert dann wird jede Sekunde gespeichert.

    wenn man das Flash entlasten will, gibt man bei SaveData einen höheren Wert ein z.B. 10

    Dann gehen Werte verloren wenn der ESP vor Ablauf dieser 10 Sekunden abstürzt.

    Gruß Gerhard

    Einmal editiert, zuletzt von gemu2015 (4. Februar 2022 um 19:09)

  • Ich muss mal leider diesen tread missbrauchen und hoffe es kann mir jemand helfen.

    Ich habe einen wlanlesekopf mit tasmota der auch funktioniert.

    Ich habe den an meinem Wärmemengenzähler. Leider bekomme ich nur ganz komische werte und weis nicht warum das so ist.

    So wie es aussieht muss ich mit 300 baud senden und mit 2400 baud lesen. Das habe ich hier rausgefunden: http://www.sedelmaier.at/node/112#comment-51657

    Das ist auch der Zähler den ich habe.

    Mein Script sieht so aus:

    Was bei raus kommt ist irgendwie sowas:

    Kann mir evtl jemand helfen bei dem Problem?

    Danke und Gruss Danyel

  • hier gibt es mehrere Fehler.

    Ein String darf nur maximal 20 Zeichen lang sein oder wenn du >D 48 angibst 48 Zeichen, eigentlich nur 1 Zeichen weniger

    also >D 48 erlaubt 47 Zeichen.

    also das hier eventuell auf 2 oder mehr Strings aufteilen.

    res=sml(1 1 "000000000000000000000000000000000000000000000000000000000000000000000000000000002F3F210D0A")

    dann soll als erstes der lange Nuller String kommen und dann erst der kurze

    res=sml(1 1 "2F3F210D0A")

    es sieht auch so aus als ob die Baudrate und oder Parity nicht stimmt. soll ja 7E1 sein

    allerdings sollte wenn du obis einstellst das auf 7E1 voreingestellt sein.

    im Zweifelsfall 7E1 erzwingen mit

    +1,3,oE1,0,300,LUGCU,1

    der Name darf hier nicht länger als 7 Zeichen sein.

    dass du den langen Nuller String wiederholt Senden must kann ich mir schwer vorstellen aber wer weis.

    Gruß Gerhard

  • Wenn ich von Hand in der Console welchsel mit

    baudrate 300 serialsend5

    und

    baudrate 2400 serialsend5

    Dann kommen tatsächlich lesbare werte.

    Das kann ja nur heisen das mein script irgendwie falsch ist.

    Ich weis nur leider nicht wo.

  • Servus. Ich bin gerade dabei einen D1 Mini mit zwei Leseköpfen in Betrieb zu nehmen. Die Leseköpfe (Volkszähler TTL) sind an GPIO 5 und 13 angeschlossen. Ich habe Tastmota 10.1.0.1 nach der Anleitung von Matthias Kleine (Youtube) geflashed. Dazu habe ich diesen fork benutzt: https://github.com/esplesekopf/Tasmota

    Angepasst habe ich sonst an der Firmware nichts mehr. Nach dem flashen habe ich noch den Module Type auf "Generic (0)" umgestellt und mein Skript eingegeben. Natürlich auch den Haken bei "Script enable" gesetzt. Hier mein Skript:

    Leider bleiben die Werte auf dem Webinterface alle auf 0 stehen. Wenn ich über die Konsole "sensor53 d1" oder sensor53 d2" auswerte dann kommen die Rohdaten sauber sein. Hier ein Auszug:

    Kann mir da jemand auf die Sprünge helfen wieso die Werte im Webinterface und auch per MQTT nicht korrekt angezeigt werden?

    Gruß Jascha

  • jaschkopf

    Probiere es so.

  • Ich hab den Fehler mittlerweile gefunden. Die Sendediode hat permanent Kauderwelsch gesendet was der lesekopf irgendwie mit gelesen hat. Hab die Diode raus gelötet und jetzt läuft es problemlos.

    Gruß Jascha

  • Hallo,

    ich fühle mich in der Smart Home Welt recht wohl und bastele hier gerne immer weiter. Ich habe aber bei meinem Stromzählerausleseprojekt ein Problem:

    • Stromzähler MT175
    • IR Lesekopf TTL
    • Wemos D1 mini
    • Tasmota 11.0

    Der Zähler blinkt auf der Sende-Diode zyklisch im 1..2 sek Takt. PIN ist freigeschaltet und ich sehe alle Werte am Display (aktuell, Tages, Wochen, Monatswerte,...)

    Script:

    >D

    >B

    ->sensor53 r

    >M 1

    +1,13,s,16,9600,MT175,15

    1,77070100010800ff@1000,E_in,kWh,E_in,3

    1,77070100100700ff@1,P,W,P,18

    ;1,77070100240700ff@1,L1,W,L1,18

    ;1,77070100380700ff@1,L2,W,L2,18

    ;1,770701004C0700ff@1,L3,W,L3,18

    1,77070100000009ff@#,Server_ID,,Server_ID,0

    #

    Wenn ich den Zähler auslese bekomme ich nicht das, was ich erwartet habe sondern andere Zeichenfolgen, mit denen ich nichts anfangen kann:

    77 7b 4a aa 1b 2a f5 fd fd 39 f3 7d ff 13 f5 e1 43 4b 6f a7 3b ff 1b 39 fb fd 1d fd 39 67 11 c9 c9 c9 c9 cb ff 75 45 72

    77 7b 4a aa 1b 2a f5 fd fd 39 01 69 13 f5 e1 43 4b db fa 3b ff 1b 39 fb fd 1d fd 39 ef 53 c9 c9 c9 c9 cb ff bb 19 72 72

    77 7b 4a aa 1b 2a f5 fd fd 39 27 2d 13 f5 e1 43 4b 6c a7 3b ff 1b 39 fb fd 1d fd 39 89 ed c9 c9 c9 c9 cb ff bf 40 72 72

    77 7b 4a aa 1b 2a f5 fd fd 39 0f 4a 13 f5 e1 43 4b b5 a7 3b ff 1b 39 fb fd 1d fd 39 55 30 c9 c9 c9 c9 cb ff b7 2b 72 72

    77 7b 4a aa 1b 2a f5 fd fd 39 ff af 13 f5 e1 43 4b 69 a7 3b ff 1b 39 fb fd 1d fd 39 99 81 ff c9 c9 c9 c9 cb ff 37 33 72

    77 7b 4a aa 1b 2a f5 fd fd 39 9b 75 13 f5 e1 43 4b b6 fa 3b ff 1b 39 fb fd 1d fd 39 cf 0d c9 c9 c9 c9 cb ff e1 3f 72 72

    77 7a 7b 7f 5b 56 5a f7 a9 4f fb fd fd 39 15 8a 13 f5 e1 43 4b b3 a7 3b ff 1b 39 f1 fd 11 fd e9 ed fd 6d 59 69 ff f7 a9

    77 7b 4a aa 1b 2a f5 fd fd 39 bb fb ff 13 f5 e1 43 4b 66 a7 3b ff 1b 39 fb fd 1d fd 39 a9 7c c9 c9 c9 c9 cb ff 89 22 72

    77 7b 4a aa 1b 2a f5 fd fd 39 ff 68 13 f5 e1 43 4b b2 a7 3b ff 1b 39 fb fd 1d fd 39 21 e7 ff c9 c9 c9 c9 cb ff eb 3f 72

    77 7b 4a aa 1b 2a f5 fd fd 39 31 35 13 f5 e1 43 4b 63 a7 3b ff 1b 39 fb fd 1d fd 39 b9 df ff c9 c9 c9 c9 cb ff e9 33 72

    any ideas???

    Gruß hans

  • Ich hatte die Tage ein Wemos D1 Mini basiertes Interface an einen Holley DTZ541 eingebaut und musste leider erstmal das Tasmota Script bauen, damit die Werte richtig eingelesen werden.

    Irgendwie habe ich auf die schnelle kein _wirklich_ gutes Beispiel gefunden und die Tasmota Dokumentation hatte zwar für andere Zähler etwas, aber nix für den Holley.

    Ich hatte dann geplant, die SML Werte selber zu dekodieren, aber das ist mir dann zu doof geworden. libsml von volkszaehler wollte ich dann auch nicht bauen, weil ich den Eindruck hatte beim Lesen der Dokumentation und beachten der Testdaten, dass libsml gerne einen vollständigen SML Datensatz hätte und nicht nur einzelne Datensätze, wie Tasmota sie mit sensor53 d1 auswirft.

    Ich hätte ja irgendwie erwartet, dass es da eine bequeme Alternative gibt. Irgendein Formular, die SML Nachrichten einwerfen und dann schön aufgeschlüsselt zu bekommen, was der Zähler eigentlich auswirft. Aber scheinbar gibt es sowas nicht. ☹️

    Ich habe mir dann ein eigenes Script gebaut in Python, daß https://github.com/spacemanspiff2007/SmlLib verwendet und mir ordentlichen Output generierte. Der Code ist auf https://github.com/ixs/tasmota-sm…/sml_decoder.py falls jemand sich austoben will.

    Für alle anderen, habe ich das Ding als Fingerübung in eine WebApp gegossen, die auf https://tasmota-sml-parser.dicp.net/ liegt.

    sensor53 d1 auf dem Tasmota eingeben. Kurz warten bis was in der Konsole auftauchte, dann sensor53 d0 eingeben, damit Ruhe herrscht.
    Den Konsoleninhalt in das Textfeld im Formular auf der WebApp reinkopieren, "Dekodieren" drücken und sich anschauen, was der Zähler so alles liefert.

    Wenn ein bisschen mehr als nur der SML Dump mitkopiert wurde, isses auch egal, das wird ignoriert.


    Eine passende Tasmota Meter Definition wird auch gleich erzeugt, die muss aber im allgemeinen noch etwas nachbearbeitet werden. z.B. liefern die Zähler häufig Wh und man will KWh haben, also noch den Faktor und Precision anpassen.

    Sollten irgendwelche Parsing-Fehler auftauchen, dann werden diese ausgegeben, damit man einen Anhaltspunkt hat, was schiefgehen könnte.

    Viel Spaß mit dem Tool, das könnte sich eventuell als hilfreich erweisen.

    Einmal editiert, zuletzt von ixs (8. März 2022 um 15:49)

  • Hallo ixs,

    vielen Dank für Deine Erklärung und die Links. Das hört sich alles sehr gut an, allerdings kann die WebApp mit meinen Daten nix anfangen. Keine Fehlermeldung, keine Definition, nix. Schade.

    So muss ich weiter im Dunkeln stochern.

    Grüße

  • vielen Dank für Deine Erklärung und die Links. Das hört sich alles sehr gut an, allerdings kann die WebApp mit meinen Daten nix anfangen. Keine Fehlermeldung, keine Definition, nix. Schade.

    Das "Problem" an Deinen Werten ist, dass sie mit 0x77 0x7b 0x4a anfangen.
    Die Technische Richtlinie unter https://www.bsi.bund.de/SharedDocs/Dow…icationFile&v=1 die das SML Protokoll beschreibt, gibt vor, dass ein GetList Request 0x77 0x07 0x00 sein sollte und ein GetList Response dann 0x77 0x07 0x01 darstellt.

    D.h. Deine Daten entsprechen nicht dem SML Standard aus der TR-03109-1.

    Woran das liegt, weiß ich nicht. Ich würde vermuten, dass Deine Meter Definition inkorrekt ist.

    Deine Defintion ist "+1,13,s,16,9600,MT175,15". Du legst also GPIO13 fest, was zumindest ungewöhnlich ist. RX ist normalerweise Pin 3. Statt dem Flag 16 würde ich mal 0 probieren, weil dein Lesekopf vermutlich keinen Pull-Up Widerstand hat...

    Im Endeffekt ist das, was Du da bekommst kein SML. D.h. der Fehler sitzt irgendwo zwischen Tasmota und Zähler. Viel Glück.

  • Woran das liegt, weiß ich nicht. Ich würde vermuten, dass Deine Meter Definition inkorrekt ist.

    ja, es stimmt, dass ich GPIO 13 und 15 verwende, habe es aber auch schon auf 3 / 1 versucht. Mit Flag 16 und 0 habe ich auch schon rumgespielt. Pullup Widerstand vorhanden. Es wundert mich ja auch, dass ich nicht wie erwartet 77 07 01 bekomme sondern 77 7b 4a

    Da ich derzeit auch den Fehler zwischen Tasmota und Zähler vermute habe ich mal den IR Lesekopf vor eine reflektierende Oberfläche gehalten und in Python mit serial.write was auf Tx geschrieben und das ganze mit serial.read auf Rx wieder eingelesen. Es kam exakt das an, was ich gesendet habe.

    Um Tasmota auszuschließen habe ich den Lesekopf an einem Raspberry angeschlossen und den Zähler zum einen über minicom und zum anderen über ein kleines Python Programm ausgelesen. Beides mal leider nicht das ausgelesen, was ich erwartet habe.

    Den Zähler würde ich ausschließen, da hoffe ich einfach mal, dass alles passt.

  • Gaszähler

    Hallo,

    Ich versuche seit Wochen folgendes Setup zum laufen zu bringen

    - Tasmota mit ESP8266 (NodeMCU)

    - Pipersberg Gaszähler g4 rf1c

    - LJ12A3-4-Z/BX Inductive Proximity Sensor Switch NPN

    - gedruckte Halterung

    Ich verwende dafür aktuell den in Tasmota den Counter_n (an D4 GPIO2) mit CounterDebounce:12000, CounterDebounceLow:0, CounterDebounceHigh:100.

    Problem:

    Mein Counter verzählt sich weiterhin leider auch nach unendlich vielen Versuchen mit den Parametern oben (zählt deutlich zu viel).

    Ich war von diesem Thread hierher geleitet worden - leider ist dieser Thread inzwischen mit 86 Seiten doch ziemlich unübersichtlich.

    Wer hat noch eine Idee wie ich das Problem beheben könnte?