D0 Zähler SML auslesen mit Tasmota

  • Hi,

    ich nutze folgendes Script

    Das Auslesen funktioniert wunderbar. Der Zähler schickt ca. alle 4,6 Sekunden die aktuelle Leistung.

    Nun möchte ich diesen Wert gerne alle 2 Sekunden (bzw immer wenn er geändert wurde) per MQTT versenden. Wie mache ich das?

    Als Workaround polle ich http://192.168.x.x/cm?cmnd=Status%208 alle 2 Sekunden und wandle das Ergebnis via Nodered in ein MQTT Telegram. Aber es muss doch auch möglich sein, dass Tasmota das per MQTT raussendet, was der Zähler per IR ausgibt, oder?

    Einmal editiert, zuletzt von mode (4. Mai 2022 um 09:26)

  • Hi mode,

    ich bin auch noch recht neu im Thema hab aber herrausgefunden, dass das kürzteste Intervall für den Versand der MQTT Telegramme in Tasmota 10 Sekunden beträgt. Ich behaupte aber, dass das reichen sollte.

    Gruß

    Julian

  • Nein ich möchte überhaupt kein Intervall. Wenn der Zähler (er gibt das Interval vor) sendet, dann soll diese Information unmittelbar per MQTT weitergegeben werden.

    Da Regelungen für Nulleinspeisung dahinterhängen sind durch verschiedene Intervalle sich ändernde Verzögerungen das beste Rezept für Aufschwingen.

    Ist dies überhaupt nicht möglich?

    Als Workaround das Sendeintervall auf 0,1 Sekunden setzen aber nur dann senden, wenn sich die Payload geändert hat?

  • Hallo Zusammen,

    seit ein paar Wochen versuche ich meine Stromzähler mit zwei TTL Leseköpfen auszulesen. Soweit hab ich auch alles hinbekommen. Was mir allerdings nicht gelingt ist es, beide TTL Leseköpfe über einen Wemos D1 Mini laufen zu lassen.

    Lesekopf 1 habe ich an RX/TX angeschlossen. Dieser funktioniert einwandfrei. Den anderen Lesekopf 2 hab ich schon an alle anderen möglichen GPIO's angeschlossen mit immer dem selben Ergebnis: Die Daten kommen rein, jedoch ist nach willkürlicher Zeit (0,5-5h) Schluss damit.

    - es werden keine Daten mehr in der Tasmota Oberfläche angezeigt

    - es laufen keine Daten per "Sensor53 D2" mehr in die Konsole ein

    - der Stromzähler schaltet wild die Einstellungen durch, weil die IR-Diode permanent leuchtet

    Ich muss den Wemos für ein paar Minuten vom Strom nehmen und dann trotzdem manchmal nochmal neustarten, damit der Kopf wieder funktioniert. Ich kann mir nicht erklären, warum es grundsätzlich funktioniert, jedoch nach gewisser Zeit dann nicht mehr.

    Ich hab das ganze auch schon auf einem zweiten Wemos getestet. Testweise hatte ich auch zwei Wemos eingesetzt und beide Köpfe jeweils über die RX/TX Pins angeschlossen gahabt. Das hat mehrere Tage störungsfrei funktioniert.

    Ziel ist es, beide Stromzähler + Gaszähler über ein Board laufen zu lassen.

    Ich wäre sehr dankbar, wenn mich hier jemand in die richtige Richtung "schubsen" könnte.

    Vielen Dank schonmal

    Einmal editiert, zuletzt von rockju (7. Mai 2022 um 20:33)

  • Nein ich möchte überhaupt kein Intervall. Wenn der Zähler (er gibt das Interval vor) sendet, dann soll diese Information unmittelbar per MQTT weitergegeben werden.

    Da Regelungen für Nulleinspeisung dahinterhängen sind durch verschiedene Intervalle sich ändernde Verzögerungen das beste Rezept für Aufschwingen.

    Ist dies überhaupt nicht möglich?

    Als Workaround das Sendeintervall auf 0,1 Sekunden setzen aber nur dann senden, wenn sich die Payload geändert hat?

    Versuch mal die precision, also den jeweils letzten Wert, um 16 zu erhöhen:

    <precision>number of decimal places. Add 16 to transmit the data immediately. Otherwise it is transmitted on TelePeriod only.
  • Versuch mal die precision, also den jeweils letzten Wert, um 16 zu erhöhen:

    <precision> number of decimal places. Add 16 to transmit the data immediately. Otherwise it is transmitted on TelePeriod only.

    Ich hab die Zeile mit Current Consumption jetzt auf

    Code
    1,77070100100700ff@1,Current consumption,W,Power_curr,16  

    geändert. Das hat schon mal viel verbessert. Der Zähler sendet alle 4 Sekunden, es geht aber nur alle 10 Sekunden ein MQTT Telegram raus. Somit verpasse ich weiterhin mehr als 50% der Wertänderungen.

    Kennt jemand die STelle, an der man die 10s MQTT Pause rauspatchen kann?

  • Versuch mal die precision, also den jeweils letzten Wert, um 16 zu erhöhen:

    <precision>number of decimal places. Add 16 to transmit the data immediately. Otherwise it is transmitted on TelePeriod only.

    Ich bekomme nun alle 10 Sekunden folgende MQTT Messages

    Code
    stat/tasmota_A310F6/STATUS8 {"StatusSNS":{"Time":"2022-05-15T13:41:19","SML  ":{"Total_in":17372.0950,"Total_out":12141.2249,"Power_curr":-8589,"Meter_number":"xxx"}}}

    Ich hätte aber nur Power_curr erwartet, da ich ja auch nur für diesen Wert die 16 gesetzt habe.

  • Hallo zusammen,

    ich hab jetzt auch angefangen, mich mit der Materie zu beschäftigen. Der Zähler hier ist ein DD3 2R06 DTA - ODZ1, der per Info-DSS kommuniziert. Die Handykamera fängt auch brav Blitze ein.

    Ich habe jetzt, bevor ich mir einen der bekannte IR Leseköpfe zulege, überlegt, ob das nicht auch mit einem IR Blaster funktionieren könnte. Ein paar URC-150.app von Pearl, die neben diversen Sendedioden auch eine Empfangsdiode haben, habe ich hier liegen. Dort habe ich Tasmota 11.1.0 IR mit den SML Erweiterungen geflasht. Nimmt man die YTF IR Bridge als Vorlage (GPIO5 ist hierbei IRrecv), so erhält man auch regelmäßig Rohdateninput:

    Code
    15:33:58.263 RSL: RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":4,"Hash":"0x901C1F3A","Repeat":0,"RawData":"+115-19945+100-33270+455-12040+245","RawDataInfo":[7,7,0]}}
    15:33:59.214 RSL: RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":3,"Hash":"0x49B0F625","Repeat":0,"RawData":"+200-35705+110-35245+100","RawDataInfo":[5,5,0]}}
    15:34:00.268 RSL: RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":3,"Hash":"0xFEAC02E5","Repeat":0,"RawData":"+115-34080+225-12210+120","RawDataInfo":[5,5,0]}}
    15:34:04.219 RSL: RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":3,"Hash":"0x4AB0F7B6","Repeat":0,"RawData":"+250-31790+115-13215+120","RawDataInfo":[5,5,0]}}
    15:34:06.222 RSL: RESULT = {"IrReceived":{"Protocol":"UNKNOWN","Bits":3,"Hash":"0x4AB0F7B6","Repeat":0,"RawData":"+225-38500+140-27390+145","RawDataInfo":[5,5,0]}}

    Danach habe ich die Vorlage auf "Generic" geändert und GPIO5 auf "None" gesetzt, damit das SML Skript direkt daruf zugreifen kann. Das Skript von Franzformator angepasst auf GPIO5, mit dem es bei ihm bei einem ähnlichen Zähler funktionierte, habe ich eingefügt:


    Ein sensor53 d1 bringt allerdings nur Folgendes:

    Code
    15:43:38.994 CMD: sensor53 d1
    15:43:38.998 RSL: RESULT = {"Time":"2022-05-29T15:43:38","SML":{"CMD":"dump: 1"}}


    Bei Tasmota steht ja, dass GPIO3 in Hardware benötigt wird und man für den Zähler src/TasmotaSerial.cpp patchen muss. Ist das bei der aktuellen Version noch nötig? Die entsprechenden Zeilen habe ich in der 11er Version nicht gefunden. GPIO3 wäre ja dann für diesen Blaster ein KO-Kriterium, wenn ich das richtig verstehe, oder?

    Hat jemand eine Idee, ob ich grundsätzlich etwas falsch mache oder ob der Ansatz mit dem Blaster pe se eine Sackgasse ist? Ich würde die Hardware gerne sinnvoll weiter verwenden, bevor sie in der Ecke landet

  • Hallo,

    gibt es es noch jemanden mit einem ISKRA MT175 Zähler, welcher vom Typ D1A51 ist?

    Kann mir jemand bestätigen, dass man damit nur folgende Werte auslesen kann?

    • verbrauchte Energie
    • Momentanleistung (Minuswert bei Einspeisung)
    • Zähler-ID

    Die Angaben bei Volkszähler beziehen sich auf die Version D2A51. Da kann man dann z.B. auch die eingespeiste Energie abrufen. Hatte erst gedacht, dass ich da einen Fehler im Aufbau hatte (zu wenige SML-Meldungen), bis ich den Zählertyp genauer angesehen habe.

    O.g. Frage nur mal zur Bestätigung.

  • Hallo,

    Ich hab ein Problem, eventuell hat jemand einen Rat für mich.

    Ich hab Tasmota 12.0.2 auf einem ESP32 C3 mini geflasht. und einen Lesekopf angeschlossen

    laut Datenblatt ist Gpio 20 RX und 21 TX

    Testskript:

    >D

    >B

    =>sensor53 r

    >M 1

    +1,20,o,0,9600,Test,21,10,2F3F210D0A

    1,1-0:1.8.0*255(@1,Gesamtverbrauch,KWh,total,4

    1,1-0:1.8.0*96(@1,Verbrauch 1 Tag,KWh,total_1d,4

    1,1-0:1.8.0*97(@1,Verbrauch 7 Tage,KWh,total_7d,4

    1,1-0:1.8.0*98(@1,Verbrauch 30 Tage,KWh,total_30d,4

    1,1-0:1.8.0*99(@1,Verbrauch 365 Tage,KWh,total_365d,4

    1,1-0:16.7.0*255(@1,Verbrauch aktuell,W,current,20

    #

    normalerweise sollte die Sende LED jetzt einmal pro Sekunde blinken. Mit einem ESP8266 klappt das.

    Mit dem ESP32 c3 leider noch nicht. TX scheint nicht zu senden.

    Wenn ich im Skript

    >S

    print Hallo

    zufüge, dann blinkt die Sende LED einmal pro Sekunde das Hallo raus.

    Das macht der ESP8266 meine ich nicht

    Mit einem kleine Arduino Sketch:

    digitalWrite(21, HIGH)

    delay(2000); // wait for a second

    digitalWrite(21, LOW);

    delay(2000);

    oder auch durch Serial.print("Hallo");

    bekomme ich die auch zum blinken.


    Nur mit Dem Tasmota Skript bekomme ich es noch nicht hin.

    Muss ich eventuell beim kompilieren etwas anders machen?

    Ich habe tasmota32c3 auskommentiert und ansonsten nur die SML Sachen ind die user_config_override.h: eingefügt.

    Beim ESP8266 funktioniert es so.

    Wäre schön wenn jemand eine Idee hätte was ich falsch mache

    lg

    Hichi

  • gemu2015

    Super das war es.

    Ich hab es noch nicht am Zähler getestet, aber der Spiegeltest funktioniert jetzt. Dann sollte der Rest auch funktionieren.

    Ich hab noch ein Problem mit den C3.

    Flashen klappt problemlos

    Im seriellen Monitor kommt dann das:

    00:00:00.001 HDW: ESP32-C3

    00:00:00.009 UFS: FlashFS mounted with 304 kB free

    00:00:00.024 CFG: Loaded from File, Count 8

    00:00:00.029 QPC: Count 1

    00:00:00.081 BRY: Berry initialized, RAM used=4203 bytes

    00:00:00.093 Project tasmota - Tasmota Version 12.0.2(tasmota)-2_0_3(2022-07-01T08:38:07)

    00:00:00.093 UFILESYSTEM OK!

    00:00:00.212 WIF: WifiManager active for 3 minutes

    00:00:00.947 HTP: Web server active on tasmota-66C4B4-1204 with IP address 192.168.4.1

    00:00:06.713 QPC: Reset

    Das Problem ist ich kann mich mit dem WIndows Laptop nicht mit dem AP verbinden.

    Es kommt meistens "Keine verbindung mit diesem Netzwerk möglich" als Meldung im Windows.

    Manchmal scheint er sich kurz zu verbinden, aber bevor das Webinterface geöffnet wird, ist die Verbindung wieder weg.

    Wenn ich micht mit dem Android Handy mit dem AP verbinde funktioniert es. Dann kann ich meine Wifi Daten eintragen, er verbindet sich mit meinem Netzwerk und dann kann ich ihn auch unter Windows erreichen.

    Die Frage ist warum der AP so Probleme macht. Ich habe testweise den C3 direkt mit 3,3V aus einen Labornetzteil und zusätzlichen Kondensatoren versorgt. Ich würde sagen es liegt nicht an der Spannungsversorgung, aber woran dann? :/

    lg

    Hichi

  • Ich hatte grade mal als Test das Beispiel aus der Arduino IDE

    Esp32c3>>Wifi>>WifiAccesspoint

    aufgespielt.

    Mit diesem AP kann ich mich problemlos mit allen Geräten verbinden,

    Jetzt ist die Frage was macht Tasmota an dem AP anders als das einfache Beispiel aus der IDE?

    Vlt hat ja jemand eine Idee oder kennt das Problem schon

    lg

    Hichi

  • Hallo zusammen,

    Ich habe einen wohl exotischen Zähler der Marke Baylan.

    Leider bekomme ich keine Daten ausgelesen. Das einzige was Tasmota mir anzeigt ist folgendes:

    19:20:35.689 : /BYL5<1>BYL-CRH-BT11-R

    Hier das Script:

    Hier mal die Anleitung und das Datenblatt meines Zähler:

    Anleitung Baylan BT.11

    Datenblatt Baylan BT.11

    Ich hoffe mir kann jemand beim Script helfen.

    LG

    Markus

    Einmal editiert, zuletzt von Mawionline (1. Juli 2022 um 23:35)

  • Hi zusammen,

    ich würde gerne per Tasmota einen MBus-Wärmemengenzähler (Engelmann SensoStar A bzw. Kalo kaloUltramax MK bzw. Allmess) auslesen. Im Mikrocontroller-Forum scheinen schon einmal zwei Leute auf Linux-Basis kleine C-Programme geschrieben zu haben, die die Werte dort abfragen:

    Wärmezähler über optische M-Bus-Schnittstelle auslesen - Mikrocontroller.net

    und

    Wärmezähler über optische M-Bus-Schnittstelle auslesen - Mikrocontroller.net

    Soviel ich den Code verstehe, wird dort eine kurze Aufwachsequenz (init(); 2400 oder 300(?) baud; "0x55") gesendet um den Batterie-betriebenen Zähler aufzuwecken. Anschließend wird (im Falle von mbus-test.c) mit der Option "3" bzw. req_ud2() mit "{ 0x10, 0x5B, address, 0x00, 0x16 }" abgefragt. Anschließend werden die Inhalte mit mbus_parse_telegram() ausgelesen und etwas in dieser Güteklasse wird ausgegeben:

    Könntet ihr mir vielleicht sagen, ob es in den Tasmota-Skripten grundsätzlich möglich wäre, die Aufwachsequenz (+ Pause) in 8N1 auszuführen und anschließend den eigentlichen Request in 8E1 abzusetzen?

    Weiterhin, um die Inhalte von mbus_parse_unit() bzw. mbus_parse_data_field() sinnvoll in ein Tasmota-Skript zu übersetzen: habt ihr irgendwelche Tipps zur besten Vorgehensweise? Ich muss zugeben, dass ich den Parser nicht vollständig verstanden habe.

    Vg und Danke,

    TS

  • Hallo zusammen,

    Ich habe den Zähler Holley DTZ541-BDBA und konnte ihn auch unter Tasmota mit dem Script auslesen:

    Code
    >D
    >B
    ->sensor53 r
    >M 1
    +1,3,s,16,9600,SML
    1,77070100010800ff@1000,Consumption (Total),kWh,total_kwh,4
    1,77070100100700ff@1,Consumption (Current),W,curr_w,0

    Allerdings wird Consumption (Current) immer positiv angezeigt (Ich habe eine PV Anlage und auch bei größerer Einspeisung, als der aktuelle Verbrauch wird der Wert positiv dargestellt.) Die Überproduktion würde ich gerne mit einem minus Wert auslesen und per MQTT übertragen.

    Der Zähler kodiert die Richtung wohl innerhalb von 77070100010800ff -> hatte ich hier entdeckt https://forum.fhem.de/index.php?topic=51948.1308
    - und wurde im fhem OBIS V2 Modul umgesetzt. Ich hoffe Ihr könnt mir da etwas auf die Sprünge helfen

    Vielen Dank im Vorraus

  • Hi,

    vielen Dank, habe folgendes ausprobiert und musste jetzt erstmal auf die Sonne warten :-): Aktuelle tasmota version 12.0.2 mit folgender Konfiguration gebaut und angepasstem Code aufgespielt:

    Elster / Honeywell AS2020 (SML)~

    Code
    >D
    >B
    ->sensor53 r
    >M 1
    +1,3,s,0,9600,,1
    1,77070100600100ff@#,Server-ID,,Wert,0
    1,77070100010800ff@1000,Total Consumed,kWh,total_consumed_kwh,1
    1,77070100020800ff@1000,Total Delivered,kWh,total_delivered_kwh,1
    1,77070100100700ff@0.1,Current Consumption,W,current_consumption,0
    #

    Leider bleibt die Current Consumption auch mit der Konfiguration immer positiv. Hast Du noch eine weitere Idee?

  • du kannst noch statt AS2020 ED300L versuchen.

    das sind die beiden Zähler die diesen merkwürdigen Modus verwenden die bisher berücksichtigt sind.

    dabei nutzen sie aber unterschiedliche Bits.

    eventuell ist dein Zähler noch mal anders.

    welches bit in welchem OBIS Kode ändert sich bei Einspeisung ?

    Ich kann das dann nachprüfen und eventuell einbauen