Iskra MT176 korrekt mit Tasmota auslesen

  • Hallo liebes Forum,

    aktuell versuche ich mit einem ESP8266 und einem IR-Lesekopf über Tasmota die daten einzulesen.

    Ensperrt habe ich den Zähler auch schon und der Pin ist auch aus, leider bekomme ich nach wie vor nur den Zählerstand.

    Die anderen Werte werden mir leider nicht einzeln ausgelesen. Hier das Script das ich unter Tasmota verwende:

    Und so sieht meine Ausgabe aus:

    Die fehlenden Daten habe ich mal entfernt^^

    Mir ist schon aufgefallen das ich wenn ich den Abfrageintervall verkürze auch die anderen Werte bekomme. Leider werden Sie mir alle in E_Out ausgegeben.

    Übertragen werden die Daten per MQTT an meinen BananaPi der diese in eine InfluxDB speichert. Das läuft soweit auch alles reibungslos.

    Hat hier jemand eine Idee wie ich alle Werte meines Zählers auch auslesen und Speichern kann?

    MfG

  • Zur hilfreichsten Antwort springen
  • Es funktionioert ja, nur fehlen mir werte. Laut suche funktioniert ohnehin nur das vom MT175, nur irgendwie bei mir nicht ganz.

    Die Baudwerte ect sind ja identisch laut hersteller.

    //EDIT

    Immerhin bekomme ich den Verbrauch mit Kommastelle^^

    Einmal editiert, zuletzt von FrageBaerchen (6. September 2022 um 17:08)

  • Jetzt hatte ich kurz den Zählerstand und den aktuellen verbrauch in Watt. nu is es wieder futsch. Ich glaub ich muss den lesekopf besser Positionieren.

    17:31:22.640 MQT: stat/tasmota_C0AA1C/RESULT = {"Time":"2022-09-06T17:31:22","SML":{"CMD":"dump: 1"}}

    17:31:22.640 MQT: stat/tasmota_C0AA1C/RESULT = {"Time":"2022-09-06T17:31:22","SML":{"CMD":"dump: 1"}}

    17:31:57.994 fe fe fe 1e e0 e0 60 d8 3e 3f f3 80 f3 80 fb fe 1e ff e0 e0 d8 78 ff fe ec 3c fb ff 0f 86 fc 86 8e fb f3 e0 ff 08 fe ff f3

    17:32:01.231 : 77 fe 9f e7 df 80 ff d8 3e fe de 16 f3 80 fb fe 78 e0 ec 3c fb ff 0f 86 fc 86 8e 78 80 f3 8f fb f3 e0 ff 98 be ff 78 80

    17:32:25.001 : 77 fe fe fe fe 1e e0 e0 60 d8 f3 3e ff f3 80 f3 80 fb fe 60 e0 e0 d8 78 f3 ef ec 3c fb ff 0f 86 fc 86 8e fb f3 e0 ff 98

    17:32:33.009 : 77 80 ff d8 d1 7f 3e d8 80 fb fe 78 e0 ec 3c fb ff 0f 86 fc 86 8e 78 80 f3 8f fb f3 e0 ff 98 ce 78 80 f0 bb e0 e0 e0 e0

    17:32:39.053 : 77 3e f3 80 fb fe 78 e0 ec 3c fb ff 0f 22 fc 86 8e 78 80 f3 8f fb f3 e0 ff 98 ce 78 80 f0 bb e0 e0 e0 e0 e0 60 78 7f 3f

    Das dürfte alles sein.

    //edit

    Jetzt hab ich ein anderes Problem, er ballert mir teilweise Werte um die Ohren die nicht stimmen.

    Ich kann keine Einspeisung haben da keine PV ect da ist. Dann hab ich plötzlich einen Zählerstand der utopisch ist und weit von meinem entfernt ist und der aktuelle verbrauch in Watt ist auch falsch.

    Einmal editiert, zuletzt von FrageBaerchen (6. September 2022 um 17:53)

  • Alternativ kannst du auch mal das

    Optionen-Flag: ändern.

    - 0 - Zähler ohne Pullup

    - 1 - Zähler mit Pullup

    - 16 - Medianfilter für diesen Zähler aktivieren. Kann bei sporadischen Aussetzern, Lesefehlern helfen (nicht verfügbar für Zähler).

    Meter#,GPIO# Input,TYPE,FLAG,Baudrate,JSONNAME,GPIO# Output,TX Period,Character string

    +1,3,s,0,300,MT176,1,4,2F3F210D0A

  • Ok, das sieht mir aus als ob die Baudrate zu hoch eingestellt ist

    Versuche es mal mit 300

    Der MT176 hat eine Rollanzeige, diese springt alle 10 sekunden eine Position weiter. Aktuell -> Letzte 7 Tage -> Letzte 30 Tage -> Die letzten 365 Tage

    Ich denke das ist des Rätsels Lösung, Denn alle 40 Sekunden kommt die Korrekte Anzeige.

    Jemand eine Idee wie sich das einstellen lässt das er nur die Werte aus der ersten Anzeige verwendet?

    //Edit

    Habe schon die 0,1,14,16 Probiert alles das selbe.

    Einmal editiert, zuletzt von FrageBaerchen (6. September 2022 um 19:05)

  • Also bei mir ist es so, dass alle x-Sekunden die Werte genullt werden. Danach kommt eine neue Schleife, die dann die Werte anzeigt. Und das Spiel beginnt von Vorne. Das nervt mich auch tierisch.

    Ich dachte, man könnte das Problem lösen, aber die Leute, die davon Ahnung haben, sind wahrscheinlich genervt von uns Neulingen. 8o

  • Zählerstand im Billionenbereich

    "77070100010800ff@1000" gibt das Datenpaket an, welches ausgelesen werden soll

    "@1000" der Skalierungsfaktor, ist eine andere Form der Formatierung, die das Komma in beide Richtungen verschiebt. (Hinweis: Das # Zeichen, dieser Parameter, kann nur ein String pro Zähler dekodieren!)

    • Hilfreichste Antwort

    Möchte nochmal nachfragen ob schon jemand ne Lösung für den MT176 hat. Derzeit kann ich die fehlwerte lediglich im NodeRed filtern. Allerdings muss ich den Zählerstandsfilter regelmäßig per Hand nachjustieren, da hier 2 werte nah aneinander liegen und die restlichen sowieso murx sind.

    //Edit

    Ich hab das nun anders und mit Umweg gelöst.

    Im ersten Filter lasse ich alle Werte die unter meinem aktuellem Zählerstand und weit darüber liegen Filtern. Im zweiten Filter lasse ich alle Werte die nah an meinem Zählerstand liegen entfernen. Wichtig ist das beim 2 Filter der standardmäßig gesetzte Haken entfernt wird.

    Auch beim aktuellem Verbrauch entfernt der Filter unrealistische werte.

    Das ist aktuell die einzige Lösung die ich für den MT176 finden konnte!

    //Edit

    Ich verwende den ESP8266(NodeMcu Lolin V3) von AzDelivery zusammen mit dem Linienfolger der ebenfalls dort erhältlich ist.

    Aktuell ist der Linienfolger quer über der Schnittstelle befestigt, so kommen auch keine falschen werte mehr!

    2 Mal editiert, zuletzt von FrageBaerchen (27. September 2022 um 09:55)

  • Moin zusammen, ich habe seit Mittwoch jetzt auch einen MT176 (vor PV war es ein MT175).

    Bis auf die Leistungen der einzelnen Phasen (L1, L2, L3) und die Server-ID bekomme ich alle Werte korrekt angezeigt, ich benutze dafür einen "Hichi" Wifi Lesekopf.

    Zum loggen nutze ich Homeassistant mit MQTT und Influxdb.

    Und das ist das Script für den Tasmota-Lesekopf (1:1 das Script für den MT175):

    (da steht zwar MT175u, das muss ich leider so stehen lassen, sonst muss ich alle Entitäten und Automationen in Homeassistant abändern)

    Und so sieht das dann aktuell aus:

    Voraussetzung dafür ist:

    - PIN für den Zähler mit der Taschenlampe "eintippen" ;) (bei den örtlichen Stadtwerken anfordern)

    - Erweiterter Datensatz auf "Info-Schnittstelle" aktivieren (standardmäßig ist diese deaktiviert)

    - PIN-Schutz deaktivieren (standardmäßig aktiviert)

    Die Anleitung für den Zähler gibt es hier: Iskraemeco MT176


    Viel Spaß beim "eintippen" mit der Taschenlampe

    P.S.: wenn jemand die korrekten Abfrageadressen für die Phasenleistungen haben sollte, ich würde mich freuen.

  • void72 Danke für dein Script, welches bei mir funktioniert, dass ich aber auch gern mit dir/euch noch an 1-2 Stellen detailliert besprechen würde.

    Aber erstmal zu deiner Frage:
    "P.S.: wenn jemand die korrekten Abfrageadressen für die Phasenleistungen haben sollte, ich würde mich freuen."

    Ich habe mir den Lese-Kopf-Datenstrom einmal per dump ausgegeben (siehe Screenshot) und sehe keine Angaben für einzelne Phasen.

    • neben dem Initialen Byte "77" folgen 2 Zeilen die stets gleich sind und beim Abgriff stets "0.00" liefern.
    • Gleiches gilt für die Abschlusszeile vor dem nächsten "77"
    • Gelb = liefert E_in
    • Grün = liefert E_out
    • Magenta = liefert P momentan
    • Rot = ergibt jeweils den gelben oder Grünen Wert


    Somit seiht mein MT176-Script so aus:

    Code
    >D
    >B
    ->sensor53 r
    >M 1
    +1,3,s,16,9600,MT176,1
    1,77070100010800ff@1000,E_in,kWh,E_in,3
    1,77070100020800ff@1000,E_out,kWh,E_out,3
    1,77070100100700ff@1,P,W,P,18
    1,7707010060320101@#,Server_ID,,Server_ID,0
    #

    Ich gehe also davon aus, dass die L1 - L3 Daten gar nicht übertragen werden.


    EDIT:

    So langsam glaube ich, dass mein Fazit falsch war und ich so bisschen das Brett vorm Kopf hatte. Der Hex-Dump beruht ganz offenbar auf meinem Script und wenn ich dort nicht passende Adressen für L1 bis L3 verwende, kommt auch keine Rückgabe im Dump an.
    Nach ein bisschen Recherche komme ich zu dem Eindruck, dass die Smartmeter sehr viele Infos übertragen und man muss nur rausbekommen wie man diese abfragen kann.
    Mir liegen auch einige Links vor, die ich erst noch untersuchen muss, um ggf. doch mehr Daten ziehen/lesen zu können.

    Stay tuned oder lest selbst schonmal mit
    siehe Links am Ende von https://github.com/joba-1/ElectricityMeter

  • Nun bin ich auf ein Dokument für den Iska MT-176 gestoßen, der die fehlenden Puzzle-Teile hätte liefern können.

    https://www.bonn-netz.de/fileadmin/dokumente/Zaehler/MT176_Technische_Beschreibung_MS2020_MT176_V1.10_GER.pdf

    Ab Kapitel 8 wird es interessant für uns.
    "Ein Basiszähler bietet mindestens die folgenden Eigenschaften für den Zugriff per Datenschnittstelle an."

    und so findet man unter lfd. #9 die Angabe
    "01 00 60 32 01 01 [FBZ_0084] Hersteller-Kennung (siehe FLAG-Association)" 
    was unserer Scriptzeile entspricht (die 7707 stets vorangestellt):

    Code
    1,7707010060320101@#,Server_ID,,Server_ID,0

    oder auch unter lfd. #24

    "01 00 02 08 00 FF [FBZ_0099] Zählerstand zur Wirkarbeit in Richtung -A"

    was unserer Scriptzeile entspricht:

    Code
    1,77070100020800ff@1000,E_out,kWh,E_out,3

    usw.


    Allerdings scheine ich es noch nicht komplett verstanden zu haben, denn wenn ich mir z.B.

    die lfd. #25

    "01 00 20 07 00 FF [FBZ_0100] Spannungsmesswert zu L1"

    mit der Scriptzeile

    Code
    1,77070100200700FF@1,V_L1,V,V_l1,18

    ausgeben lassen möchte, erhalte ich 0 als Angabe.

    Vielleicht werdet ihr ja schlau draus.


    EDIT

    Diesen Link wollte ich euch natürlich auch nicht vorenthalten, denn dort geht's gut in die Tiefe:

    Stromzähler mit einem ESP8266 / ESP32 mit Tasmota auslesen und darstellen
    Werte an eure Smart Home Steuerzentrale senden z.B. Home Assistant, ioBroker, openHAB, FHEM Werte können direkt auf dem ESP8266 grafisch dargestellt werden…
    ottelo.jimdofree.com

    2 Mal editiert, zuletzt von EifelDriver (5. Juli 2024 um 07:58)

  • Diese Seite kannte ich noch nicht. Das Ergebnis (sml_dump.jpg) deckt sich mit meiner Annahme, dass ich außer Zählerstand und momentaner Wattzahl keine Infos auslesen kann. Mehr brauche ich aber im Moment auch nicht.

    Interessant wären vielleicht noch die historischen Daten, die der Zähler selbst gespeichert hat.

    Somit läuft aktuell meine Home Assistant Test-Umgebung die die Tasmota Daten speichert und in der ich mir Charts für 1, 4, 12, 24 Std. gebaut habe. Dabei ist auffällig, dass mir unzählige Verbrauchsspitzen angezeigt werden, die so nicht korrekt sein können. (momentan_verlauf.jpg)
    Ich halte dies für einen Übertragungsfehler. Meine Baudrate steht bei 9600, aber welche Baud-Rate benutzt ihr bei eurem Tasmota?

    Alternativ könnte auch die MQTT-Verbindung die Ursache sein. In der Tasmota-Console sehe ich diese Ausreißer nicht.

    EDIT
    Nun habe ich eine aktuelle Spitze untersucht:
    Heute um 08:21:44 soll der Momentanverbrauch bei 9377 Watt gelegen haben.

    Im HA-Chart ist dies auch zu sehen: siehe beide Screenshots "falscher_wert"

    Allerdings hatte ich parallel die Tasmota-Console offen, wo ich eine korrekte Datenangabe sehe
    08:21:40.176 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:40","MT176":{"P":268.00}}
    08:21:41.173 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:41","MT176":{"P":268.00}}
    08:21:42.180 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:42","MT176":{"P":266.00}}
    08:21:43.216 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:43","MT176":{"P":268.00}}
    08:21:44.225 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:44","MT176":{"P":268.00}}
    08:21:45.193 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:45","MT176":{"P":266.00}}
    08:21:46.198 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:46","MT176":{"P":268.00}}
    08:21:47.198 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:47","MT176":{"P":275.00}}
    08:21:48.203 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:48","MT176":{"P":268.00}}
    08:21:49.203 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:49","MT176":{"P":268.00}}
    08:21:50.208 MQT: tele/tasmota_F65120/SENSOR = {"Time":"2024-07-07T08:21:50","MT176":{"P":268.00}}

    Für mich heißt dies, dass die MQTT-Datenvisualiiserung sich hier verschluckt und falsche Graphen zeichnet.
    Ist dieses Problem bekannt und kann man nachschauen was MQTT zu diesem Zeitpunkt für einen Wert in seiner Datenbank stehen hat?

    EDIT #2

    Habe gesucht und die Info gefunden, dass die Sachen in einer SQLite gespeichert werden. Also das passende Addon installiert und schon kann man in die Datenbank schauen. Die Werte in "statistics" führten mich schnell zur metadata_id=3 was meinem Messwert entspricht.
    Überrascht war ich von der Tatsache, dass es einen min- UND max-Wert gibt, obwohl mein Tasmota ja nur 1 Wert liefert.

    Ich habe also erwartet, dass min und max stets die gleichen Werte hat. Aber es gibt Ausreißer. siehe sqlite_1.jpg
    SELECT created_ts, min, max
    FROM "statistics" 
    WHERE metadata_id=3 AND min != max

    Leider bekomme ich den Wert "created_ts" noch nicht in einen lesbaren DateTime-String umgewandelt, aber ganz offenkundig weicht der max-Wert oft erheblich ab. Wenn das Dashboard also statt dem min-Wert den fehlerhaften max-Wert anzeigt, wäre die Ursache für die falschen Graphen gefunden.

    Die Frage ist nun: bringe ich dem Chart bei nur die min-Werte zu zeichnen oder suche ich weiter nach der Ursache für die max-Wert-Abweichungen?