D0 Zähler SML auslesen mit Tasmota

  • Hallo sunburstc

    Habe aber den Fehler gefunden, es geht mit beiden mit der selben ausgabe wie unten bei =>sensor53 d1 und =>sensor53 d2 habe aber zum Testen nur einen im script jetzt laufen.

    Bei Sensor 2 waren RX und TX vertauscht spannungen waren ok.

    Habs hin bekommen Danke noch mal, Alle Zähler werte sind super und da.

    Fals mal einer abraucht.

    Zähler Type: ITRON ACE3000 Typ 260

    mit Lese und Schreibkopf von wiki.volkszaehler.org

    6 Mal editiert, zuletzt von wuckel (15. Februar 2021 um 01:15)

  • Hi,

    ich habe von einem Bekannten einen Elster AS 1440 Stromzähler bekommen. Dieser hat unter der Abdeckung einen RS485 Anschluss. Diesen habe ich mit einem RS485 Adapter (! muss Auto FlowControl haben !) an ein Wemos D1 (RX/TX) angeschlossen. Beide Seiten des RS485 wurden mit einem 100 Ohm Widerstand abgeschlossen.

    Und dann gings los... also erstmal ging gar nichts. Nach langem spielen mit den Werten und recherchieren bin ich auf dieses Ergebnis gekommen, was bei mir sauber funktioniert.

    Vielleicht brauchts mal einer.. (man beachte die kuriose serielle Geschwindigkeit - mit 9600 geht nix)

    Einmal editiert, zuletzt von df8sem (15. Februar 2021 um 12:39)

  • Ich habe den Beispiel CODE von Tasmota für Smart meter verwendet. Mein Stromzähler möchte gerne angesprochen werden bevor er daten rausrückt.

    Wenn ich diesen in Tasmota als script eintrage erhalte ich auf der console folgende Fehlermeldungen:

    15:26:51.224 var not found: sml(1 0 300)

    15:26:51.225 var not found: sml(1 1 "2F3F210D0A")

    15:26:52.426 var not found: sml(1 1 "063035300D0A")

    15:26:52.627 var not found: sml(1 0 4800)

    15:26:56.223 var not found: sml(1 0 300)

    15:26:56.224 var not found: sml(1 1 "2F3F210D0A")

    15:26:57.385 var not found: sml(1 1 "063035300D0A")

    15:26:57.592 var not found: sml(1 0 4800)

    15:27:01.198 var not found: sml(1 0 300)

    15:27:01.200 var not found: sml(1 1 "2F3F210D0A")

    15:27:02.401 var not found: sml(1 1 "063035300D0A")

    Aber wenn ich das Script betrachte ist die Variable ja gesetzt als "res=0"

    Bin da jetzt ein bisschen überfragt...

    Kann jemand helfen?

  • raffnix Kein Problem.

    Es handelt sich hierbei um einen etwas komplizierteren Vorgang. Der Zähler, den du verwendest, wechselt zwischen den verschiedenen Baudraten.

    Beim Kompilieren musst du also folgendes #define, ähnlich wie #define USE_SML_M noch hinzufügen:

    #define USE_SML_SCRIPT_CMD

    evtl. auch

    #define USE_SCRIPT_SUB_COMMAND

  • ich habe jetzt beide defines reingenommen und die Konsole gibt keine Fehler mehr. Danke!!

    Leider kommen noch keine Daten an. Ich habe mit dem Handy die Dioden gecheckt und eine blinkt. Das sollte gut sein, da sie mit dem Zähler sprechen will. Den Lesekopf auch mal um 180 grad am Zähler gedreht. Leider ohne Erfolg

    Ich habe den Landis E350 als Zähler. Laut Volkszaehler sollte man mit dem kommunizieren können. Der von mir genutzte code ist für einen "Landis ZMR120AR"


    Mein code sieht wie folgt aus:

    Ich habe die Start baudrate auf 300 gesetzt und die restliche auf 4800bd

    Irgendwie finde ich nirgends wo ich das 7E1 setzen könnte

    Ich habe auch probiert in der "M" Sektion das ganze an die codes vom E350 anzupassen. Leider ohne Erfolg :(

    2 Mal editiert, zuletzt von raffnix (15. Februar 2021 um 18:44)

  • raffnix

    Also man sollte erst einmal klein Anfangen. z.B. hiermit:

    Laut Beschreibung handelt es sich um einen OBIS Zähler. Dein Code war aber für SML. Abgesehen davon war TX und RX miteinander vertauscht.

    uU. musst du deine Kabel also auch tauschen.

    Ebenfalls ist der Beschreibung zu entnehmen, dass der Zähler auch 9600 Baud kann. Müsste man ausprobieren.

    Der Hex-Code aus der >F Sektion:

    Code
    res=sml(1 1 "063035300D0A")

    Ist jedenfalls für ein ACK mit er bitte um die Geschwindigkeit 9600 BAUD

    Wenn du 4800Baud nutzen möchtest müsste es:

    Code
    063034300D0A

    sein.

    Zu Erklärung: In der Beschreibung steht, dass der Zähler aufgefordert werden muss mit einem String:

    ASCII:

    /?!

    In Hex ist das:

    0x2F 0x3F 0x21

    LF(HEX):

    0x0D

    CR(HEX):

    0x0A

    Zusammen ohne 0x:

    2F3F210D0A

    Der Zähler antwortet mit seiner Typenbezeichnung und erwartet ein <ACK>0Z0<LF><CR>

    ACK ist ein Steuerzeichen für "Verstanden" in Hex: 0x06

    es folgt die erste 0 in Hex: 0x30

    Z ist die Geschwindigkeit auf die sich geeinigt wird (siehe Tabelle in der Beschreibung).

    Für 9600 Baud ist es eine (Dec) 5 in Hex: 0x35

    Darauf folgt die zweite 0 in Hex: 0x30

    Abschließend LF und CR: 0x0D 0x0A

    Zusammen ohne "0x"davor also: 063035300D0A

    Im Internet gibt es reichlich ASCII zu HEX Konverter. Die Steuerzeichen (ACK,LF,CR) muss man allerdings selbstständig einfügen.

    Je nachdem welche Geschwindigkeit gewählt wird, muss auch dementsprechend im Code die >M Sektion und auch die >F Sektion angepasst werden.

    Danach script aktivieren, speichern und in einem weiteren Browser Tab die webconsole von tasmota aufrufen. Dort dann eingeben:

    sensor53 d1

    Dadurch wird die Ausgabe des Zählers direkt in die Console weitergegeben und nicht im Hauptmenü verarbeitet. Das ist ganz sinnvoll, denn so kann man sehen ob und wenn ja was da zurück kommt.

  • Danke für deine Hilfe sunburstc

    ich muss zugeben ich dachte ich könnte den code direkt übernehmen, war wohl doch etwas zu viel des guten :D

    Ich habe den code wie folgt angepasst:

    Im Grunde ist alles identisch bis auf das ich alles auf 4800bd geändert habe.

    Nachdem der neue code eingespielt worden ist hörte auch die "LED" auf zu blinken. Ich habe das ganze jetzt umgelötet. Jetzt blinkt sie wieder.

    Die Ausgabe in der Konsole war nicht so ergiebig beim ersten versuch. Dann habe ich den Lese/schreibkopf um 180grad gedreht und es kamen daten:D

    Ich habe auch nochmal ein Bild angehängt. Wieso wird "Strom" nicht ausgefüllt?

  • Das sieht nach vielen Lesefehlern aus raffnix . In deinem Sensordump kann ich nicht erkennen, dass der Zähler Stromwerte überträgt.

    Schau mal ob die Positionierung gut ist. ansonsten evtl. mal die widerstände ändern.

    Würde auch noch mal ausprobieren wie es mit 9600baud aussieht. Angeblich kann er das ja.

  • sunburstc

    Ich habe den sensor nochmal genau ausgerichtet. -> Leider keine änderung

    Ich habe die BD mal auf 9600 gestellt. liefert daten aber leider wieder wie vorher unbrauchbar.

    Zum Sensor selbst muss ich sagen, habe ich ein "fertiges Produkt von HIER (Volkszähler - Hichi) gekauft.

    Ich kriege zwar ein paar Kleinigkeiten gelötet, aber dann hört es auch auf mit meinen Kenntnissen.

    IR-Schreib-Lesekopf, TTL-Interface - STROMLAUFPLAN

    wenn du mir sagen könntest welchen widerstand ich kaufen soll zum testen, wäre ich dir sehr dankbar.

  • raffnix bevor du etwas lötest probiere das doch noch mal mit der Softwareserial aus. Wobei ich nicht weiß ob diese ganze Baudraten Anpassung auch für die SoftSerial funktioniert. gemu2015 ?

    Probiere mal:

    >M 1

    +1,3,o,0,4800,LGE350,1

    Statt 16 eine 0.

    Falls das nichts ändert:

    Bevor du auf andere GPIOs wechselst, könntest du probieren, keine Baudraten-Anpassung vorzunehmen sondern nur mit ACK bestätigen. Dann müsste der Zähler bei 300 Baud bleiben. Dementsprechend die entsprechenden Zeilen und die >M Sektion auf 300 ändern.

    Also zu: 063030300D0A ändern.

    Schau mal, wie dann die Daten aussehen.

    Falls die Softwareserial auch eine Baudraten-Anpassung unterstützt, könntest du GPIO12 und 14 nutzen.

    In der >M Sektion musst du dann dementsprechend die GPIOs für RX und TX anpassen. Aktuell steht dort 3 und 1.

  • sunburstc

    Ich habe das mal probiert wie von dir vorgeschlagen. Leider kein Unterschied.

    Ich verstehe was du meinst mit keiner baudraten Anpassung, allerdings weiss ich nicbt wie ich es richtig umsetzen habe.

    EDIT:

    Wenn das Script oben stimmt, hat es leider auch nichts gebracht. Zumindest läuft jetzt auf der konsole alles sehr langsam rein.

    Mit dem GPIO´s und dem Software Serial, bin ich noch nicht ganz durchgestiegen. Könntest du das nochmal erklären?


    EDIT2:

    Eine Sache ist mir noch aufgefallen. Ich habe meinen lese/schreibkopf an 3,3V gelötet. Sollte der Vielleicht an 5V?

    4 Mal editiert, zuletzt von raffnix (15. Februar 2021 um 23:33)

  • raffnix

    Ja sieht soweit gut aus. Es kamen ja anscheinend auch Daten an.

    Du kannst das ja bzgl. der Softserial mal ausprobieren. Umstecken auf GPIO12 und 14.

    +1,12,o,0,300,LGE350,14

    3 > 12 und 1 > 14 stecken.

    Bzgl. 5V : Ich weiß nicht was die Leute vom Volkszähler vorschlagen. Generell kannst du es probieren. Allerdings sind "offiziell" die gpios vom ESP8266 nicht 5V fest.

    Ich weiß, dass es trotzdem geht, habe es schon probiert.. Aber übernehme keine Garantie falls du dir den ESP zerschießt.

  • sunburstc

    habe es mal um gelötet. Keine Daten. Die Konsole bleibt leer.

    Ich habe auch mal das Kabel gekürzt. Es war ca 90cm auf 40cm. Irgendwie habe ich das Gefühl, dass die Daten "besser" geworden sind.

    Bsp:

    Alt: 20:00:23.311 ��?.F(00)

    Neu: 10:36:53.770 ��F.F(00)

    Alt: 20:00:18.713 ��?6�0(0401)

    Neu: 10:36:38.844 �C.5.0(0401)

    auch sind die "Häufigkeiten" von Daten größer:

    Ich gehe mal davon aus das es etwas damit zu tun hat das ich das Kabel gekürzt habe. Macht es vielleicht nicht doch Sinn einen Widerstand zusätzlich einzubauen?

  • Der Grund weshalb ich wollte, dass du auf die anderen GPIOs wechselst war, dass diese keinen Pullup haben. RX und TX haben einen internen Pullup.

    zusammen mit dem dem Lesekopf kann es da dann zu Problemen kommen. Ich sehe allerdings gerade im Stromlaufplan, dass dort Schmitttrigger verbaut sind. dementsprechend sollte der Pullup von RX egal sein.

    Nur um das kurz zu klären. Du hast VCC von deinem Lesekopf mit 3,3V vom Wemos verbunden, GND mit GND und RX / TX mit den jeweiligen Anschlüssen am Wemos? Also GPIO3 und 1.

    Ist es möglich, dass du den Fototransistor im Lesekopf irgendwie näher ran bekommst oder besser ausrichten kannst zu deinem Zähler?

    Falls du Widerstände da hast, kannst du es natürlich noch einmal mit 5V probieren, dazu müsstest du dann an RX und TX jeweils einen Spannungsteiler mit widerständen bauen. https://ohmslawcalculator.com/voltage-divider-calculator

    Also 200Ohm + 100 Ohm.

    RX bzw TX greifst du dann zwischen 200 und 100 ohm ab. Gibt im Internet Beschreibungen dafür.

    Noch mal zum Verständnis. Du hast es via Softwareserial angeschlossen also an gpio14 und 12, da kam nichts, dann hast du das Kabel gekürzt es aber weiterhin an 14 und 12 angeschlossen gelassen und dann kam etwas?

    Normalerweise sind deine Kabellängen völlig im Rahmen, solange du keine haardünnen Drähtchen nimmst.

    Manche hier nutzen mehrere Meter via Netzwerkkabel.

    Ich denke eher, dass die leichte Verbesserung durch eine andere Positionierung des Lesekopfes kommt.

    Wie sieht es mit Fremdlichteinfall aus? raffnix

  • sunburstc

    VCC an 3,3V

    GND an GND

    RX an RX (GPIO3)

    TX an TX (GPIO1)

    Ich hatte sie vorher gekreutzt und habe sie dann gestern auf deinen Rat um gelötet. Seitdem kommen immerhin Daten an.

    Ich habe die Platine aus dem Gehäuse genommen und direkt auf den Zähler geklebt (siehe Bild). Jetzt ist die Ausrichtung 100% und näher geht es nicht.

    ich habe keine Widerstände da und müsste welche kaufen.

    Zitat


    Noch mal zum Verständnis. Du hast es via Softwareserial angeschlossen also an gpio14 und 12, da kam nichts, dann hast du das Kabel gekürzt es aber weiterhin an 14 und 12 angeschlossen gelassen und dann kam etwas?

    Kabel von 1 und 3 abgelötet und gekürzt

    Gekürztes Kabel an 14 und 12 verbunden kein signal

    Gekürztes Kabel wieder mit 1 und 3 verbunden "scheinbar besseres signal"

    Fremdlichteinfall kann ich komplett ausschliessen, da im dunklen Keller.


    Kannst du einen Lese/Schreibkopf empfehlen den ich nochmal testen könnte? Oder scheint es doch eher ein "software" Problem zu sein.

  • raffnix

    Gucke hier nicht mehr täglich rein. Wie @sunburst schon sagte muss es ein Signalproblem sein. Es liegt nicht an 7E1 das wird automatisch eingestellt bei OBIS. Du hast ja auch schon partiell Daten bekommen.

    Da du einen Wemos verwendest ist es nicht so gut hier RX und TX zu nehmen weil dort das UART zum PC angeschlossen ist und das Signal stört. Kenne nicht den Schaltplan deines Lesekopfes, aber sunburstc hat ja schon vorgeschlagen es mit anderen Pins zu versuchen.

    Falls du den Schaltplan hast, poste ihn mal. Die allermeisten hier verwenden nur einen einfachen Fototransistor mit Pullup als Empfänger.