D0 Zähler SML auslesen mit Tasmota

  • Nabend,

    per Zufall bin ich auf diesen super Beitrag gestoßen und habe mich angemeldet.

    Ich habe alle 64 Seiten gelesen und mir raucht die Birne.

    Respekt allen, welche diesen Thread unterstützen und Probleme fixen.

    Meiner einer, 55 Winter alt, hat schon Erfahrung, mit guter Anleitung, für das Anpassen und Flashen von Marlin auf Arduino und diverser STM MCU's .

    Meine Sonoff's und Phototransistoren sind auf dem Weg zu mir. Ein Precompile ist klaglos durchgelaufen -dank der guten Dokumentation hier. Kann es kaum abwarten den Upload durchzuführen.


    Mein Ansinnen ist es einen kleinen 5kwh Solarspeicher, ohne Netzbezug, aus meiner 9,9Kw PV zu Laden.

    Gleich gesagt: Es rechnet sich schwerlich...


    Der Lösungsansatz:

    Den Solar- Überschuss mit dem vorhandenen den EMH PW8 xxx zu detektieren und das "Ladegerät" -ein Meanwell Netzteil, über einen 2. ESP zu schalten/regeln.

    Nun gut, den Überschuss zu ermitteln sollte mit den gegebenen Mitteln machbar sein.

    Nun wird es mehr OT. Weiter geht es hier: PV Überschuss verwerten

  • Hallo an alle,


    ich verfolge das Thema bei euch schon einige Zeit und auch von meiner Seite - ganz großes DANKE an alle für die ganzen Infos.


    Nachdem ich einen "digitalen" Stromzähler bekommen habe musse ich meine Selbstbaulösung zum ablesen der Ferraris Scheibe upgraden. Dabei bin ich auf "euch" aufmerksam geworden.

    NodeMCU + TEKT5400S + 1K Ohm und los gings.

    Der Spaß hat irgendwann auch echt super funktioniert.....


    Allerdings hatte ich nach einiger Zeit extreme Ausreißer in den Werte des Verbrauchts.... statt 243 Watt waren es 800243......

    Liegt wohl daran, dass die Daten nicht sauber gelesen werden - dies hat sich bestätigt durch nen check in der Konsole "sensor53 d1" .... zum Teil Kraut und Rüben.


    Mein Skript schaut wie folgt aus:



    Ich habe bereits mit den Widerstandswerten gespielt und grade eben auch einen neuen NodeMCU mit der neuesten Tasmota Version (9.1.0) getestet.

    Leider bekomme ich bei der neuen Tasmota Version gar nix an Werten - wenn ich auf den alten NodeMCU (Tasmota 6.6.0.10) wechsel bekomme ich mit demselben Skript wieder meine Werte (aber mit Lesefehlern...)


    Der Lesekopf ist ein 3D Druck + Magnetring und hängt gut am Zählerkasten..


    Besteht Hoffnung für mich, da saubere Werte auslesen zu können?

    Was könnte ich als nächstes Testen?


    Vielen Dank und viele Grüße

    Christian

  • Moin Christian,

    leider ich Dir auch nicht helfen.....fange gerade erst an.

    Vielen Dank für den Tipp mit dem 1k Widerstand.


    Also für die Nachwelt:

    Die Kombination aus

    Tasmota 9..

    Sonoff Basic r2 Revision 1.0 /Flashmode über normalen Taster

    Tekt 5400s

    --Kollektor an RX-+-1KOhm-+-3,3V // Emitter (= linkes Beinchen, wenn man auf die Empfängerlinse schaut) an GND

    Funktioniert !!!!


    Danke an alle hier:!:


    Beste Grüße

  • Hallo,


    ich habe seit kurzem einen neuen Stromzähler, einen Logarex LK13BE803039.

    Ich möchte nun einen TTL IR Leser ranhängen, der mit einem NodeMCU verbunden ist und mittels MQTT an einen MQTT Broker die Daten schickt.

    Auf dem NodeMCU habe ich Tasmota installiert.

    Ich habe das Ding noch nicht an einen Stromzähler gehängt, da ich gelesen habe, dass man erstmal mit einer IR Fernbedienung testen soll, ob Daten ankommen.

    Leider klappt das ganze überhaupt nicht.


    Aufbau:

    ---------------------------------------------

    Den Lesekopf habe ich von hier (https://www.photovoltaikforum.…-smd-l%C3%B6ten/?pageNo=1) bestellt und zusammengelötet:

    Die Anschlussbelegung:

    Lesekopf -> NodeMCU

    GND -> GND

    VCC -> 3.3V

    TX -> TX

    RX -> RX


    Die Firmware habe ich selbst kompiliert nach folgender Anleitung:


    Das Script was ich eingetragen habe, habe ich von hier:

    RE: D0 Zähler SML auslesen mit Tasmota

    (d1 in r geändert)



    Im Tasmota Webfrontend sehe ich: STROM Total consumption: 0.0000 KWh

    In der Konsole sehe ich aber nichts, wenn ich die Fernbedienung nehme.

    Wenn ich "sensor53 d1" in die Webkonsole eingebe, und mit einer IR Fernbedienung rumfuchtele, passiert rein gar nichts.

    Wie gehe ich nun am besten vor um den Fehler zu finden? Zuerst muss ich denke ich wissen, ob es an meiner Firmware oder dem Lesekopf liegt.

    Wie kann ich am einfachsten sicherstellen, dass der Lesekopf funktioniert?


    Über jede Hilfe würde ich mich freuen.

  • Moin nezteew

    Wenn du den Code verwendest, den du verlinkt hast, solltest du mit deiner Handykamera sehen können, dass deine Sende Diode blinkt. Um es etwas besser sehen zu können, kannst du die Baudrate auf 300 herunterstellen. Also 9600 ->300 Baud.

    Ich kenne die Schaltung von deinem Lesekopf nicht. Aber möglicherweise, musst du RX mit TX überkreuzen. Also RX ->TX und TX->RX.

    Das sind die ersten Dinge die du checken solltest.

    Oh, und auch wenn ich davon ausgehe, dass du es getan hast, nicht vergessen das Skript im Skripteditor Fenster zu aktivieren ;)! (Häkchen setzen.)

    Sollte die Kommunikation über RX/TX des NodeMCU nicht funktionieren, verwende mal GPIO12 und 13.

    Das Skript musst du dann aber auch dementsprechend anpassen.


    Code
    >D
    >B
    =>sensor53 d1
    >M 1
    +1,12,o,0,9600,STROM,13,100,2F3F210D0A,063035310D0A
    
    1,1-0:1.8.1*255(@1,Total consumption,KWh,Total_in,4
    #


    Ein Blick in die Dokumentation lohnt sich auch immer!

    https://tasmota.github.io/docs…erface/#meter-declaration


    Viel Erfolg.

  • Entferne mal alles hinter Strom. Also das Komma die 13 etc. Und schau ob es dabei bleibt.

    Falls nicht, könnte soweit alles korrekt sein.

    Ansonsten evtl auch mal die Verdrahtung zwischen 12 und 13 bzw. Rx tx tauschen und schauen ob es weiterhin dauerhaft an bleibt.

    Hierbei sollte allerdings das gelöschte wieder eingefügt sein.

  • Seltsam. Ich hatte den ESP nun vom Strom und habe ihn wieder drangehängt um Deinen Test durchzuführen.

    Jetzt blinkt es alle paar Sekunden mal (ohne dass ich die Zeichen entfernt habe). Ein durchgehendes Leuchten kann ich nicht mehr beobachten.

    Vielleicht hätte ich das Ding komplett Neustarten müssen, hatte nur die Pins vertauscht und das Script geändert.


    Ok, also es scheint zu senden.

    Aber was ich ja eigentlich brauche ist das Empfangen, oder?

  • Ok, also es scheint zu senden.

    Aber was ich ja eigentlich brauche ist das Empfangen, oder?

    Was dein Zähler genau benötigt weiß ich nicht. Manche Zähler wollen gerne "angestoßen" werden, ehe sie etwas senden andere Senden dauerhaft ohne das sie etwas Empfangen müssen. Dazu musst du ins Datenblatt deines Zählers schauen oder auch einfach googln. Gerne auch deinen Zähler in zusammenhang mit "Volkszähler" googlen. evtl. lässt sich dort etwas dazu finden.

    Ob du etwas empfängst, kannst du immer noch via Fernbedienung herausfinden. Oder du packst deinen Lesekopf einfach auf deinen Zähler.

    Wenn die "sende" Richtung nun schon mal funktioniert. Kann man davon ausgehen, dass die Empfangsrichtung auch richtig verkabelt ist. Genau das haben wir nun damit überprüft.

  • Hallo,

    ich lese hier schon seit einigen Tagen mit, sowie parallel in den Github Dokumentationen und den Installationsanleitungen. Bin echt begeistert, was mit Tasmota und Script offensichtlich möglich ist.


    Zum Auslesen von Puls-Zählern (Countern) habe ich bisher leider wenig Informationen gefunden (außer fertige Code-Beispiele).


    Zum Testen habe ich hier aus dem Thread das für mich halbwegs überschaubare Script für einen Regenmengenzähler übernommen und zum Laufen bekommen:

    Leider verstehe ich die vorletzte Programzeile nicht. Was genau macht:

    Code
    1-0:1.8.0*255(@3

    Gibt es hierzu irgendwo eine Dokumentation? In den Anleitungen und auf Github wird für die >M Sektion primär nur auf SML bzw. Obis eingegangen - oder habe ich etwas übersehen? Wäre super wenn Ihr mir weiterhelfen könnt.

  • Ok, bin einen kleinen Schritt weiter. Habe endlich den entsprechenden Abschnitt in der Doku gefunden:

    https://tasmota.github.io/docs…-Interface/#meter-metrics


    <M>,<decoder>@<scale>,<label>,<UoM>,<var>,<precision>

    Code
    1,1-0:1.8.0*255(@3,Menge,mm,Total_In,2

    Soweit ist mir jetzt alles klar, bis auf den <decoder> 1-0:1.8.0*255(

    Könnt Ihr mir hierzu einen Hinweis geben, was das bedeutet, bzw. was man hier einstellen kann/muss?


  • ark9 Das hat keine bestimmte Bedeutung. Normalerweise, wenn du OBIS oder SML Zähler mit dem Skript aussliest, dann enthält diese Stelle, den Vergleichsstring für den Decoder. Sprich: Das Skript sucht nach genau diesen Zahlen und Zeichen und wenn diese Zeichenreihenfolge von dem NodeMCU empfangen wird, weiß es, Ah! Es handelt sich um den Akt.Verbrauchswert.

    Bei Countern ist das somit also garnicht nötig.

    Störe dich also garnicht daran. Es macht nichts mit deinem Counter.

    Allerdings solltest du schauen ob du in deiner Meterdefinition das Debouncing etwas höher stellst. vielleicht auf 20 oder 50ms. statt 1ms um Fehlzählungen zu vermeiden.

  • sunburstc Hi, das geht ja schnell hier - vielen Dank für Deine Erklärung.

    Dann ist das Auslesen eines Puls-Zählers per Script ja recht simpel. Habe das inzwischen mal für meinen Gaszähler als Minimalvariante angepasst:


    In der Console läßt sich der Anfangszählerstand mit dem Befehl sensor53 c1 xxxxx.xx setzen. Der aktuelle Zählerstand wird dann per Sonof-Adapter an iobroker übertragen. Super, bisher klappt alles.

    Mit den Debouncing Einstellungen ist klar, das werde ich noch testen. Hatte das bisher als Tasmota Counter zu laufen. Solange ich den D1 Mini per USB-Kabel mit Strom versorgt hatte und das Kabel zum Reed Kontakt kurz war, hatte ich kaum Fehlzählungen.


    Ich habe noch eine Frage. Ich möchte auch meinen Stromzähler auslesen. Ist leider auch nur ein Zähler mit Pulsausgang (DRT751DE-MID),

    (1 Puls = 1Wh). Hier wäre die aktelle Leistung in Watt interessant. Der Rechenweg ist klar - Pulse pro Zeiteinheit....

    Leider fehlt mir völlig die Erfahrung, wie ich das mit dem Scripteditor umsetzen kann, z.B. Zeitstempel der Pulse auslesen, usw.

    Gibt es hier evtl. schon eine Lösung, oder habt Ihr vielleicht ein paar Tips für mich zum einsteigen?

  • ark9

    Eine fertige Lösung ist mir nicht bekannt.

    Auf der Seite, Scripting in den Docs, https://tasmota.github.io/docs/Scripting-Language/ , findest du allerlei nützliche System Variablen und Beispiele für verschiedene Berechnungen.


    mit chg[X]>0 lässt sich das ändern einer Variable X erfassen.


    Evtl. für dich interessant, dazu müsstest du aber neu kompilieren, ist #define USE_SML_SCRIPT_CMD um direkt auf den Wert aus dem Descripter zuzugreifen.

    Zitat

    sml[n] = get value of SML energy register n (if defined USE_SML_SCRIPT_CMD)

    n stellt die Zeilennummer aus dem Descriptor da. Ich glaube es wird mit 1 angefangen zu zählen.


    Mit der variable upsecs hättest du eine mögliche Variable für deine Zeit.

    Die Sektion >S wird Sekündlich aufgerufen. Sektion >F alle 200ms wenn ich mich recht erinnere.

    Allerdings kann ich nicht sagen, wie genau diese Sektionen zeitlich ticken.







  • Zitat

    Ob du etwas empfängst, kannst du immer noch via Fernbedienung herausfinden. Oder du packst deinen Lesekopf einfach auf deinen Zähler.

    Wenn die "sende" Richtung nun schon mal funktioniert. Kann man davon ausgehen, dass die Empfangsrichtung auch richtig verkabelt ist. Genau das haben wir nun damit überprüft.

    sunburstc : Ich wollte mich noch mal für Deine Hilfe bedanken. Das mit der Fernbedienung habe ich nicht hinbekommen, aber nach dem ich das Ding an den Zähler gehängt habe, hat er direkt funktioniert.


    Hier nochmal für etwaige andere mit dem gleichen Zähler:

    Mein Zähler: Logarex LK13BE803039.


    Mein Script:


    Damit bekomme ich im Webinterface von Tasmota folgende Anzeige:

  • sunburstc Deine Hilfe ist echt super und Dein Hinweis auf chg[X]>0 war goldwert! Also mit


    if chg[X]>0

    then

    führe irgend etwas aus

    endif


    kann man z.B. die Änderung des Puls-Counters triggern. Die Variable millis liefert die aktuelle Zeit in Millisekunden. Damit lässt sich die Zeitdifferenz zwischen zwei Impulsen bestimmen und daraus die aktulle Leistung berechnen:


    Die Möglichkeit in Tasmota Script ausführen zu können, begeistert mich immer mehr und mit dem ScriptEditor geht das Testen sehr einfach. Drum hier auch nochmal meinen Dank an gemu2015 und alle, die dieses Projekt voran gebracht haben.


    Übrigens, mein Gaszähler läuft mit Debounce 50 seit gestern ohne irgend eine Fehlzählung - sogar mit externem 5V Netzeil am D1 Mini. Das hatte ich mit dem Tasmota Counter so nicht hinbekommen.

    Viele Grüße

  • So hier ist schon mal eine Anweisung wie man die Uhr definieren muss.


    Wenn jemand von euch dann weiter damit arbeiten will lasst es mich wissen und wir machen einen eigenen Tread auf


    esp32_watch_setup.pdf

    Habe heute die Uhr bekommen, mal schaun ob ich Tasmota installieren kann,

    Gibt es weitere die diese Uhr bekommen haben ?

    grüsse aus Heidelberg


    2x Touch, 6x S20, 24x Basic (davon 8x 4.Relais am GPIO), 2x 4ch Pro, 1x 4ch, 2x TH16, 2x 7-32V Sonoff, 4x POW, 6x DUAL, 20x IR+Bridge.,3 RF-Bridhge.2xZigbee-Bridhe mit 5 Geräte, ,2x Obi Steckdose,4x Shelly 2.5, 6x Shelly 1, diverse Wemos und ESP01, Wemos mit SML Script.

    Domoticz, HA-Bridge,, 3xAlexa, MQTT, Pilot APP zur Steuerung , 2xFeinstaunsensor via Domoticz

  • Kann mir jemand vielleicht weiter helfen. Ich habe mich durch den Thread gewühlt, aber leider keine Lösung gefunden.

    Ich möchte meinen Easymeter Q3DB1004 mittels einer NodeMCU (ESP8266 ESP-12E V3 Development Board mit CH340 Chip) und einem KY-022.

    Ich verwende die aktuelle Version von Tasmota und habe diese wie hier angepasst und das entsprechende Skript verwendet.

    @opferwurst hat es ja ja zum Laufen bekommen, Ich selbst stochere noch etwas im Dunklen, tippe aber auf den IR-Empfänger.


    Verwende ich das Skript von opferwurst

    erhalte ich keine Ausgabe. Ich habe auch schon andere GPIOs versucht.


    Zum Spaß habe ich dann mal von obis auf sml gestellt und dann sehe ich zumindest im Debug über "sensor53 d1" folgendes:

    Ich habe noch vorsichtshalber einen TSOP4838 bestellt in der Hoffnung mit diesem mehr Erfolg zu haben. (Hat mir hier jemand kurz einen Link wie ich diesem an die NodeMCU anschließe (Pullup-Widerstände?).


    Ich bin dankbar für jede Hilfe die ihr mir bieten könnt.

    Viele Grüße



    Update:

    Okay, man sollte sich natürlich erstmal klar machen, dass IR-Empfänger != Fotoresistor. Da ich mich mit sowas zuvor nie auseinander gesetzt habe, habe ich das natürlich nicht berücksichtigt. Also Fotoresistor (BPW78A) + 1kOhm Widerstand und dann schauen wir nochmal ...

  • CloudySky


    Also ich würde denken, dass Dein Q3D SML statt OBIS sendet. Bisher hatte zwar nur bei Q3B SML aber egal.

    Wenn Dein Zähler also SML sendet, dann ist das hier falsch :


    >M 1
    +1,13,o,0,9600,OBIS

    1,1-0:1.8.0*255(@1,Verbrauch,KWh,Total_in,7

    1,1-0:21.7.255*255(@1,Verbrauch P1,W,Power_p1,2

    1,1-0:41.7.255*255(@1,Verbrauch P2,W,Power_p2,2

    1,1-0:61.7.255*255(@1,Verbrauch P3,W,Power_p3,2

    1,1-0:1.7.255*255(@1,Aktueller Verbrauch,W,Power_curr,2

    1,1-0:0.0.0*255(@#),Zähler Nr,,Meter_number,0


    dass muss dann z.B. so aussehen:


    >M 1

    +1,13,s,16,9600,SML

    1,77070100010800ff@1000,Verbrauch,KWh,Total_in,1

    1,77070100020801ff@1000,Einspeisung,KWh,Total_out,1

    1,77070100010700ff@1,Aktueller Verbrauch,W,Power_curr,0


    ggf. musst Du die entsprechenden Register (z.B. 77070100010800FF) anpassen

  • Es war der IR-Sensor, mit dem Fototransistor klappt es.

    Die Tasmota-Integration findet auch alles, das Einzige was nicht passt, ist die Einheit. Klappt das nur wenn ich die Sensoren von Hand definiere?