D0 Zähler SML auslesen mit Tasmota

  • Kurz mein Bericht es funktioniert jetzt mit meinem Zähler L&G E220 soweit alles.

    Voraussetzung war allerdings der PIN den ich vom meinem Netzbetreiber bekommen habe.

    Damit man die erweiterte Ausgabe der Optischen Schnittstelle aktivieren kann. (Momentanleistung)

    (Pin auf OFF + erweiterte Ausgabe auf on)

    Ich habe alles in ein Mini Gehäuse gepackt. (Haltemagnet im Gehäuse)

    Wemos d1, tekt 5400s mit pullup 4.7 Kohm , IR Sender Diode mit 150 Ohm Vorwiederstand + Taster

    Stromversorgung des Wemos via usb Netzteil über eine Hutschienen Steckdose im Zählerschrank.

    Jetzt folgt noch die Integration in FHEM (via MQTT) mit Statistik usw.

    Habe nur die Werte die ich benötige eingebaut .


    #if METER==E220

    #define METERS_USED 1

    struct METER_DESC const meter_desc[METERS_USED]={

    [0]={0,'s',0,SML_BAUDRATE,"SML"}};

    // 2 Richtungszähler EHZ SML 8 bit 9600 baud, binär

    const uint8_t meter[]=

    //0x77,0x07,0x01,0x00,0x01,0x08,0x00,0xff

    "1,77070100010800ff@1000," D_TPWRIN ",KWh," DJ_TPWRIN ",1|"

    //0x77,0x07,0x01,0x00,0x10,0x07,0x00,0xff

    "1,77070100100700ff@1," D_TPWRCURR ",W," DJ_TPWRCURR ",0|"

    //0x77,0x07,0x01,0x00,0x00,0x00,0x09,0xff

    "1,77070100600100ff@#," D_METERNR ",," DJ_METERNR ",0";

    #endif


  • Hallo zusammen,

    ich habe auch den noch nicht erwähnten Zähler EBZD_G erfolgreich hinzugefügt.


    Läuft super der Code by the way. Danke.

  • Wie definiere ich denn jetzt den Gaszähler? Wie trage ich diese Daten bei Uni3 ein?

    #define GAS_COUNTER_MODE 5000

    #define GAS_POLL_MODE

    I habe Universal4 von gemu2015 kompiliert und laufen auf einem Wemos D1 Mini. Das Ganze ist angeschlossen an ein Metrix Impulsnehmer NI-3 mit einem 4.7KOhm Widerstand. Abgesehen von der Genauigkeit funktioniert das auch.

    Für die Justierung wollte ich nun mit den Parametern GAS_COUNTER_MODE und GAS_POLL_MODE experimentieren. Leider gibt es weder in sonoff\xsns_01_counter.ino noch in sonoff\xsns_95_sml.ino einen Hinweis, wie die Parametern in den neueren Branches verändert werden können.

    Oder passiert die Konfiguration nun über

    "2,1-0:1.8.0*255(@100," D_GasIN ",cbm," DJ_COUNTER ",2|"


    Kann irgendwer helfen?

    Einmal editiert, zuletzt von ControlYourHome (2. Juli 2019 um 11:57)

  • Hallo,

    nachdem jetzt der Wasserzähler 3 Wochen Fehlerfrei läuft habe ich jetzt mal wieder Powerline in Betrieb genommen, Powerline hatte ich ja immer als Fehlerquelle gesehen.

    Jetzt prüfe ich mal wieder nach ob es mit PL auch fehlerfrei bleibt.

  • Lentzendlich muss nichts eingestellt werden, funktioniert direkt. Sitzt der Reedkontakt evtl. nicht richtig?

    Alles klar, kann ich nun bestätigen. Es funktioniert ohne jegliche Anpassung.

    Hier noch mal zusammenfassend die Schritte für einen Gasmeter über einen Reedkontakt auszulesen:

    1. Firmware entsprechend kompilieren und auf den Sensor aufspielen (bei mir Wemos D1 Mini, ATOM-Software, Universal4 Branch von https://github.com/gemu2015/Sonoff-Tasmota)
    2. Modul über eigenes WLAN verbinden (http://192.168.4.1/)
    3. Heim-WLAN konfigieren (SSD/Password), so dass sich das Modul bei Neustart mit dem Heim-WLAN verbindet. Beim Speichern passiert automatisch ein Neustart.
    4. Erneut mit dem Modul verbinden über entsprechende IP-Adresse im Heim-WLAN und Modul konfigurieren (Generic(18) bei Wemos D1 Mini)
    5. Reed-Kontakt anschließen: Der Reed-Kontakt ist über zwei Kabel angebunden. Einen davon schließt man an GND an. Den anderen an den GPIO-Pin GPIO4 (bei Wemos D1 Mini ist das "D2"). Weiterhin von diesem GPIO-Pin einen Widerstand 4,7KOhm nach +3,3V.
    6. Der Gaszähler sollte nun entsprechend hochzählen.
    7. Mit folgendem Befehl kann man in der Konsole den Zählerstand anpassen: sensor95 c2 ######. "######" entspricht dem Zählerstand ohne der letzten Stelle.

    Im Anhang ist eine fertig kompilierte Firmware: Sonoff-Tasmota 6.5.0.11/wemosd1-EN für alle, die Schwierigkeiten mit der Kompilierung haben.

    Wer das Löten der Stiftleisten bei dem Wemos umgehen möchte, greift auf ein NodeMCU zurück, welches die Stiftleisten schon vormontiert hat: https://www.makershop.de/plattformen/no…sp8266-dev-kit/ Dann kann man über Wago-Klemmen, alles einfach zusammenstecken.

    Die einzige Frage, die mir bleibt ist: lässt sich das Löschen des Zahlerstandes nach einer Stromunterbrechung unterbinden? Die eigentliche Konfiguration des Moduls bleibt ja auch bestehen.

  • Hi,

    ich habe einen ZPA ZE31, mittels hterm bekomme ich mit 300baud 7E1 und nach senden von 2F 3F 21 0D 0A alle Daten. Mit 9600 baud kommt nix mehr an. Zudem wird nach ein paar Minuten nauch über 300 baud nichts mehr gesendet, es muss erst wieder die start sequenz gesendet werden.

    Gibt es überhaupt die Möglichkeit den tasmota fork mit meinem Zähler zu betreiben?

    Mit tasmota kenn ich mich einigermaßen aus, habe auch schon den universal-5 fork geflasht (kommen natürlich keine Werte an, BPW40).

    Habt Ihr einen Tip?

    Danke..

  • Hallo,

    leider stehe ich gerade total auf dem Schlauch. Vielleicht hat hier jemand eine Idee und kann mich auf die richtige Fährte bringen.

    Ich versuche aktuell zwei Stromzähler mit einem ESP Wemos D1 mini auszulesen. Für die LED nutzen ich einen BPW 40. Der erste über den RX-Pin funktioniert immer. Allerdings schaffe ich es nicht einen zweiten, Software-Pin zum Laufen zu bewegen.

    Damit ich nicht immmer zum Zähler rennen muss, habe ich als Test nun eine Kabel von GND, dass ich per Hand an RX oder eben einen anderen Pin halten kann. In der Sonof-Konsole sehe ich dann auch Bits / Telegramme von der RX-Schnittstelle. Am SW-Pin erkennt er aber noch nicht mal das.

    Ich habe schon den Pin gewechselt. Selbst D4 mit der verdrahtenen LED vom ESP lässt zwar die LED aufleuchten, aber ich erhalte keine Telegramme im Log.

    Auch verschiedene Widerstände haben keine Wirkung gezeigt.

    Ich gehe daher davon aus, dass ich die angepasste TasmotaSerial nicht richtig nutze.

    Für die Software habe ich das ganze Repo von gemu2015 heruntergeladen. Dort sollte ja die angepasste Version dabei sein. Mit VS Code + PIO kann ich diesen Stand auch kompilieren.

    Interessanterweise steht beim kompilieren, dass er die Version 2.3.0 nutzt, nicht 2.3.1. Das steht allerdings auch in der library.json im Ordner TasmotaSerial-2.3.1.

    Ich freue mich über alle Tipps und Ideen, wo ich meinen Denkfehler habe.

    Beste Grüße

    Wiese

  • Hallo Wiese66,

    es gibt doch ein Beispiel mit zwei Stromzählern in der xsns_95_sml.ino:

    hast du damit schon mal getestet ?, natürlich dann mit deinem Zähler.

    Bezüglich des Treibers 2.3.0 oder 2.3.1 ist jetzt immer der 2.3.1 erforderlich.

    Dieser ist im Ordner "\lib"dann TasmotaSerial-2.3.1 muss auch in deinem Programm in dem entsprechendem Ordner vorhanden sein.

    Bei mir: mit Arduino IDE im Ordner: "libraries"

    Hier scheint auch was falsch zu sein:

    struct METER_DESC const meter_desc[METERS_USED]={
    [0]={4,'s',0,SML_BAUDRATE,"SML1"},
    [1]={3,'s',0,SML_BAUDRATE,"SML2"}
    };

    Da darf nur "SML" stehen, ohne Zahlen.

  • Hallo meierchen006,

    vielen Dank für deine schnelle Antwort und Hinweise!

    Bezüglich des Treibers 2.3.0 oder 2.3.1 ist jetzt immer der 2.3.1 erforderlich.

    Dieser ist im Ordner "\lib"dann TasmotaSerial-2.3.1 muss auch in deinem Programm in dem entsprechendem Ordner vorhanden sein.

    Bei mir: mit Arduino IDE im Ordner: "libraries"

    Das stimmt und ist bei mir auch so. Mein Hinweis war, dass in der libraries.json-Datei in diesem Ordner bei mir in der Datei ein Eintrag ""version": "2.3.0"," hinterlegt ist. Habe es aber gerade im gemu Repository noch einmal geprüft. Steht dort auch so.

    Das war einer meiner letzten Tests. Vorher war bei beiden "SML". Ich verstehe die Beschreibung hierzu aber so, dass es der Bezeichner in den MQTT-Nachrichten ist und daher auch theoretisch umbenannt werden darf.

    Zitat

    es gibt doch ein Beispiel mit zwei Stromzählern in der xsns_95_sml.ino:

    Das war die Grundlage für meine Einstellungen. Verschiedene Ports/Pins habe ich schon ausprobiert. Auch die Reihenfolge geändert (war in diesem Thread mal ein Hinweis). Die Zähler werden auf der Webseite auch beide aufgelistet.

    Was mich so wundert ist, dass ich im Log-Fenster keine Telegramme vom SW-Pin sehe, wenn ich ihn per Kabel direkt auf GND oder 3.3v ziehe/toggle.

    Grüße

    Wiese

  • Hallo Wiese66,

    nimm immer als ersten Zähler die echte serielle Schnittstelle. (mit Pullup ca 4,7k)

    wenn dann der Zähler in der Konsole Daten liefert mit sensor95 d1 , ok

    dann verbinde denselben Eingang mit dem 2. Zähler GPIO (noch keinen Pullup hier) und gehe auf sensor95 d2

    du solltest jetzt auch hier Daten sehen. (es nutz gar nichts den Pin and GND oder VCC zu legen, damit bekommst du keine Daten)

    erst wenn das für beide pins klappt, kannst du die weiteren Definitionen überprüfen.

    Gruß

    gemu2015

  • Hallo gemu2015,

    an der Stelle erst einmal vielen Dank für deine Arbeit und den tollen Support, den du u.a. hier leistest!

    Dein beschriebenes Vorgehen enstpricht ziemlich genau meinen Tests. Allerdings hatte ich keine Beschreibung über die sensor95 d[123] Befehle gefunden.

    Daher hatte ich mir auch nichts dabei gedacht, dass bei "sensor95 d2" immer ein harter Neustart des Wemos auftritt. D1 und D3 z.B. funktionieren und geben die Bits von RX in verschiedenen Formaten aus.

    Nach dem Neustart habe ich im Log:

    Code
    17:19:36 MQT: tele/sonoff/INFO1 = {"Module":"Generic","Version":"6.5.0.16(sonoff)","FallbackTopic":"cmnd/DVES_2FDF7B_fb/","GroupTopic":"sonoffs"}
    17:19:36 MQT: tele/sonoff/INFO2 = {"WebServerMode":"Admin","Hostname":"sonoff-8059","IPAddress":"192.168.x.x"}
    17:19:36 MQT: tele/sonoff/INFO3 = {"RestartReason":"Fatal exception:28 flag:2 (EXCEPTION) epc1:0x402103d6 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000"}

    Beste Grüße

    Wiese

  • Daher hatte ich mir auch nichts dabei gedacht, dass bei "sensor95 d2" immer ein harter Neustart des Wemos auftritt. D1 und D3 z.B. funktionieren und geben die Bits von RX in verschiedenen Formaten aus.

    Nach dem Neustart habe ich im Log:

    Code
    17:19:36 MQT: tele/sonoff/INFO1 = {"Module":"Generic","Version":"6.5.0.16(sonoff)","FallbackTopic":"cmnd/DVES_2FDF7B_fb/","GroupTopic":"sonoffs"}
    17:19:36 MQT: tele/sonoff/INFO2 = {"WebServerMode":"Admin","Hostname":"sonoff-8059","IPAddress":"192.168.x.x"}
    17:19:36 MQT: tele/sonoff/INFO3 = {"RestartReason":"Fatal exception:28 flag:2 (EXCEPTION) epc1:0x402103d6 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000"}

    Ok. Kommando zurück ;)

    Nach deinem Hinweis bin ich alles noch einmal durch. Habe ein "reset 5" auf dem ESP durchgeführt. Neu geflasht und nun scheint es keinen Absturz bei "d2" mehr zu geben. Mit Pullup kamen auch ein paar Bits durch das "Kabel toggeln" an.

    Werde gleich weiter testen.

    Nochmals vielen Dank!!

  • So Strom Zähler funzt soweit jetzt Gas und Wasser mit separatem Wemos.

    Hardware mit zwei Reed Kontakten via 10 kOhm soweit fertig und funktionieren.

    Test mit Magneten.

    Was ich momentan suche ist wo stelle ich ein im prog.

    Z. B mein Gaszähler. 1 imp = 0.1 m3. ??

  • Hallo Wolfi,

    const uint8_t meter[]=

    //----------------------------Wasserzähler--sensor95 c1------------------------------------

    "1,1-0:1.8.0*255(@10000," D_H2oIN ",cbm," DJ_COUNTER ",4|"

    10000 = Divisionsfaktor

    4 = Anzeige der Stellen hinter dem "," komma

  • So Gas und Wasser mit separatem Wemos realsiert. Reedkontakt an D0 und D6

    Funktionier bis zum Wepif super beide Werte werden angezeigt.

    In FHEM aber wird zwar das MQTT2 device angelegt aber die beiden Readings Wert für Wasser und Strom fehlen!

    Beim Stromzähler hat es doch auch funktioniert!

    Was mache ich falsch oder habe ich vergessen.

    Komme einfach nicht drauf.