Beiträge von Binzi

    Servus Binzi,

    vielen Dank für das Tasmotaskript. Ich habe es getestet aber leider funktioniert es irgendwie nicht bei mir. Ich habe auch Siemens TD 3511. Könntest du hierbei helfen? Ich bin noch Anfänger in diesem Bereich.

    Danke und Gruss

    Ed

    Hallo Eddy,

    Hast du überhaupt schon mal irgendeine Rückmeldung vom Zähler im Tasmota erhalten?

    Falls nicht, kann das natürlich viele Gründe haben.

    Hier ist der Link zum einfachen Standard Skript:

    Smart Meter Interface - Tasmota

    Falls das auch nicht läuft, wäre es hilfreich wenn du genauer beschreibst, was du schon alles getan hast.

    Wenn du auf dem Tasmota auf die Console gehst, kannst du mit folgendem Befehl alles auf der Console ausgeben, was der Tasmota vom Zähler empfängt:

    sensor53 d1

    (Mit sensor53 d0 kannst du es dann wieder deaktivieren :) )

    Falls der Tasmota gar nichts empfängt, kann es sein, dass er auch einfach falsch sitzt.

    Während mit dem Skript aus meinem letzten Post zwar meistens alle 5 Sekunden ein aktueller Wert kam, habe ich gelegentlich nur alle 10 bis 30 Sekunden einen neuen Wert erhalten.

    Inzwischen habe ich den (bzw. zumindest einen :) ) Fehler gefunden und eine verbesserte Version erstellt:

    Das Problem war wie folgt:

    • Im alten Skript ist alle 5 Sekunden die gleiche Schleife abgelaufen
    • Nach 2,2 Sekunden wurde der Zähler aufgefordert, das Datenset F009 zu senden
    • Dann hat es eine Zeit t gedauert, bis der Zähler den Datensatz gesendet hat
    • Das Senden des Datensatzes hat mit 19200 baud dann 0.4s gedauert

    In Summe hat der ganze Vorgang teilweise etwas über 5 Sekunden gedauert und die Schleifen haben sich überschnitten. Bei so einer Überschneidung kam es wohl gelegentlich vor, dass Datensätze nicht ganz gesendet wurden oder nicht richtig gelesen werden konnten. Hier ein Beispiel, wie das auf der Konsole bei einem Dump aussah:

    Code
    19:11:16.089 : 81.7.26(-4.5*Deg)
    19:11:30.812 : 91.7(9.3ibsc>SR@<%oQg/.n+w^sV	LvRa\ uZ>n&Q}UsgbTF.F(00000000)
    19:11:30.837 : 0.0.0(020150833)

    Im Beispiel war das Senden des Datensatzes noch nicht zu Ende und der Zähler hat bereits mit dem Senden des nächsten Datensatzes begonnen.

    Das spannende dabei ist, dass der Gesamtvorgang pro Schleife mit 19200 baud länger dauert als mit 9600 baud. Die Ausgabe des Datensatzes selbst dauert bei19200 baud mit 0.4s nur halb so lange wie bei 9600 baud mit 0.8s. Dafür dauert es mit 19200 baud kurioserweise länger, bis der Zähler nach der Aufforderung beginnt den Datensatz zu schicken.

    Ich habe nun 3 Veränderungen am Skript vorgenommen:

    1. Ich habe die Lesegeschwindigkeit auf 9600 baud umgestellt, was in Summe schneller als mit 19200 baud ist
    2. Ich sende die Aufforderung zum Senden des Datensatzes jetzt schon nach 1,8s und nicht erst nach 2,2s
    3. Ich wiederhole die Schleife nicht alle 5s, sondern alle 8s

    Die 8s habe ich gewählt, da der Gesamtvorgang in meinen Tests bisher nie länger als 8s gedauert hat und ich die Werte in meiner Überschusslade-Lösung mit evcc nur alle 10s abrufe.

    Beim Debuggen ist mir auch noch aufgefallen, dass man die Register mit sml in Tasmota auch wie folgt auslesen kann:

    Code
    res = sml[1.7.0]
    print Rein %res%
    res = sml[2.7.0]
    print Raus %res%

    Hat zwar nur zwei statt drei Nachkomastellen, wäre für meine Zwecke aber an und für sich ausreichend.

    Falls meine aktuelle Skriptversion im Praxistest dann doch noch Probleme macht, werde ich mal versuchen, gezielt die beiden Register 1.7.0 und 2.7.0 auszulesen. Aktuell kenne ich die genaue Syntax dafür aber noch nicht. Im Elster Zähler geht das wohl mit <SOH>R5<STX>1.7.0()<ETX><BCC>

    Ich hoffe, das Skript hilft auch anderen Nutzern, die bisher das Problem hatten, dass der Siemens TD 3511 nur alle 5 Minuten die Werte aktualisiert hat (da im Standard der komplette Datensatz mit 300 baud gesendet wird)

    Juhu. Es klappt tatsächlich!

    Wenn man wie im letzten Post beschrieben in den Programmiermodus wechselt und dann explizit den verkürzten Datensatz F009 anfordert, sendet mein Siemens TD 3511 endlich nicht mehr die komplette Liste aller verfügbaren Werte, sondern nur noch den verkürzten Datensatz, der die aktuellen Werte 1.7.0 und 2.7.0 enthält.

    Damit erhalte ich jetzt ziemlich zuverlässig deutlich unter 10s einen aktuellen Wert.

    Hier ist das Skript, mit dem es bei mir funktioniert:

    Das Skript kann man jetzt sicher noch weiter verbessern. Ideen dazu:

    • Ich habe den Befehl jetzt oben einmal in die F-Sektion mit aufgenommen und "zur Sicherheit" noch mal unten in der >M Sektion. Vermutlich funktioniert es aufgrund des Eintrags in der F-Sektion und es wäre unten gar nicht notwendig
    • Statt des Datensatzes F009 könnte ich jetzt eigentlich auch gezielt nur die Register 1.7.0 und 2.7.0 anfragen.
    • Ich weiß auch nicht genau, für was die 10 in der ersten Zeile der >M Sektion steht.

    Vielen Dank noch mal an karoCB für die Tipps, die mich in die richtige Richtung gebracht haben :)

    Inzwischen habe ich noch herausgefunden, dass der Siemens TD 3511 bei einigen österreichischen Netzbetreibern jede Sekunde einen verkürzten, verschlüsselten Datensatz mit 10 Werten sendet, der dann noch entschlüsselt werden muss.

    Mein deutscher Siemens TD 3511 sendet im Normalzustand alle erhältlichen Werte unverschlüsselt. Das sind über 100.

    Wenn ich es richtig verstehe, muss ich bei den von mir eingestellten 19200 baud mit dem Befehl "ACK 061 CR LF" in den Programmiermodus wechseln:

    res=sml(1 1 "063036310D0A")

    Im Programmiermodus kann ich dann mit folgendem Befehl den Datensatz F009 anfordern:

    Code
    Befehl:    SOH    R2        STX   F009           (data)    ETX BCC   CR   LF
    HEX:       01     52 32     02    46 30 30 39              03  1E    0D  0A

    BCC habe ich dabei als XOR wie folgt berechnet:

    Code
    R	52	01010010
    2	32	00110010
    STX	02	00000010
    F	46	01000110
    0	30	00110000
    0	30	00110000
    9	39	00111001
    ETX	03	00000011
    
    BCC	1E	00011110

    Wenn ich keinen Fehler habe, sollte das dann in Tasmota wie folgt aussehen:

    res=sml(1 1 "0152320246303039031E0D0A")

    Kann gerade nicht auf meinen Tasmota zugreifen, werde es asap testen.

    Der Zähler ist vom Netzbetreiber. Allerdings bin ich mir nicht ganz sicher, mit welcher Begründung ich den Zähler austauschen lassen könnte. Seine eigentliche Funktion erfüllt er ja und ich kann ihn auch über IR auslesen, nur leider nicht in der Frequenz, in der ich es für meine Überschusslade-Lösung bräuchte. Ich kann ja trotzdem mal nachfragen.

    Parallel dazu versuche ich mich mal daran, den Befehl in HEX zu übersetzen. Bis auf BCC sollte das ja eigentlich recht einfach sein, (Ich habe auch gelesen, dass BCC teilweise optional ist).

    In HEX scheint SOH = 01, STX = 02 und ETX = 03

    Jetzt muss ich noch rausfinden, was die Dezimal-Adresse des Geräts ist, ob F009 schon HEX ist und wie man BCC für diese eine feste Byte-Folge berechnet.

    Falls jemand schneller ist als ich, gerne hier posten :)

    karoCB erneut Danke für die schnelle Antwort.

    Die rote Zeile kommt in meinem Skript gar nicht mehr vor. Ich hatte sie bereits entfernt. Ich verstehe die Zeile auch so, dass sie aus dem Datensatz einfach nur die ID des Zählers fischt und diese dann in das JSON schreibt. Ich habe es noch einmal mit und ohne die Zeile getestet: In beiden Fällen sendet der Zähler den vollen Datensatz in voller Länge.

    Mein Zähler ist nicht durch eine PIN geschützt. Ich kann sie daher weder eingeben noch entziehen. Mein Zähler sendet einfach immer den vollen Datensatz. Außer dem Befehl aus der Anleitung kenne ich keine Möglichkeit, auf den verkürzten Datensatz umzustellen.

    Das grüne ist im vollen Datensatz enthalten und wird damit auch übertragen. Das Skript funktioniert ja auch. Ich bekomme durchgehend Werte für die beiden grünen Zeilen. Leider aktualisieren sich diese Werte nicht in einem festen Zeitintervall, sondern stark schwankend zwischen 10s und ca 90s.

    Die Tasmota Meter Page habe ich mehrfach durchgelesen, finde aber nicht heraus, wie bzw. an welcher Stelle ich den Befehl zum Verkürzen des Datensatzes an den Zähler schicken kann. Ich vermute, dass ich den Befehl "SOH R2 STX F009 (data) ETX BCC" noch nicht ganz richtig habe. Ich verstehe z.B. noch nicht, für was das (data) steht, oder ob man das weglassen kann. BCC muss vermutlich auch noch durch irgendwelche Prüfziffern ersetzt werden. Dann muss das ganze vermutlich von ASCII nach HEX übersetzt und an den Zähler gesendet werden. Entweder über res=sml(1 1 "HEX-Befehl") oder über +1,3,o,0,300,STROM,1,600,HEX-Befehl" oder ganz anders :)

    Daran scheitere ich gerade.

    karoCB danke für den Hinweis. Genau das versuche ich gerade umzusetzen, scheitere aber daran.

    Wie genau kann ich die Zählernummer in der >M Section weglassen?

    • Die Zahl am Anfang nach dem >M steht meines Wissens ja für die Anzahl Zähler. Die 1 dort sollte eigentlich stimmen. Ich habe sie mal weg gelassen, das scheint nichts zu ändern.
    • Dann kommt der Zähler nochmal am Anfang der Zeile vor: +1,3,o,0,300,STROM,1,600,2F3F210D0A. Funktioniert aber auch nicht, wenn ich es hier weg lasse
    • Auch hier kommt am Anfang nochmal der Zähler vor, damit Tasmota weiß, von welchem Zähler es die Werte nehmen soll 1,1.8.1(@1,Total Consumed,KWh,Total_in,3. Wenn ich das weg lasse, kommt nur noch einer der Werte und der ist dann falsch

    In allen Konstellationen habe ich mit sensor53 d1 geschaut, was der Sensor empfängt und jedes mal kommen zyklisch die über 100 Werte, die er in Summe zur Verfügung hat.

    Ich habe in der Anleitung gelesen, dass der Siemens TD 3511 im Normalmodus immer aller Datensätze schickt. Man kann ihn aber auffordern, dass er nur verschiedene verkürzte Datensätze schickt. Für mich Ideal wäre Datensatz F009, der nur etwa 10 Werte hat, bei denen meine beiden enthalten sind.

    Der Befehl dazu lautet:

    SOH R2 STX F009 (data) ETX BCC

    Ich habe es bisher nur noch nicht geschafft, diesen Befehl erfolgreich per Tasmota Skript an den Zähler zu senden.

    karoCB Danke für die Antwort.

    Ich möchte den Tasmota für meine Solar-Überschusslade-Lösung nutzen. Dazu benötige ich mindestens alle 10 Sekunden den aktuellen Verbrauchs/Einspeisewert. Mit 300 baud erhalte ich den Wert allerdings nur ca. alle 5 Minuten. Das ist für meinen Anwendungsfall leider unbrauchbar.

    Mit 19200 baud erhalte ich teilweise alle 10 Sekunden einen neuen Wert, manchmal dauert es aber eben auch deutlich länger.

    Ich suche nun nach einer Möglichkeit, zuverlässig mindestens alle 10 Sekunden einen aktuellen Wert zu erhalten.

    Wenn ich mir mit sensor 53 d1 anschaue, was alles ausgelesen wird, kommt periodisch eine unglaublich lange Liste an Werten, die ich alle nicht benötige.

    Wenn es nun eine Möglichkeit gäbe, nur die wirklich benötigten Werte (oder das Set F009, das deutlich kürzer ist und meine beiden Werte enthält) abzufragen, würden mir die 300 baud evtl genügen bzw. sollte es mit 19200 baud locker klappen.

    ICh weiß nur leider nicht, wie man das tut bzw. ob das überhaupt geht. (Laut Anleitung scheint es im Normalmodus eigentlich zu gehen)

    Nach 98 Seiten in diesem Thread ist es mir erfolgreich gelungen, meinen Siemens TD 3511 mit meinem Hichi/Tasmota mit 19200 baud auszulesen. (Deutscher Netzbetreiber, nicht in Österreich, wo der Zähler ja weiter verbreitet zu sein scheint).

    Vielen Dank an alle, die sich an diesem Thread beteiligt haben!

    Mein Skript ist aktuell wie folgt:

    In der Regel aktualisiert der Tasmota die beiden von mir benötigten Werte alle 10 Sekunden. Leider tut er das nicht zuverlässig. Oft dauert es 20, 30 oder mehr Sekunden. Teilweise bis zu 90 Sekunden.

    Hat jemand eine Idee, woran das liegen könnte bzw. wie man das Skript verbessern könnte?

    Ich selbst verfolge gerade zwei Ansätze, für die meine Tasmota-Kenntnisse leider nicht ausreichen. Kann mir jemand Tipps dazu geben?

    Ansatz 1: Baudrate auf 115200 erhöhren.

    Laut Datenblatt kann der Siemens TD 3511 auch 115200 baud, die man mit "063039300D0A" (9 statt 6 in der Mitte) anfordern können sollte. Wenn ich das Skript entsprechend anpasse und überall die 19200 durch 115200 ersetze, liefert der Tasmota leider gar keine Werte mehr. Meine Hoffnung wäre, mit einer schnelleren Baudrate schneller/häufiger/zuverlässiger Werte zu erhalten...

    Ansatz 2: Auf verkürzten Datensatz umstellen.

    Laut Datenblatt kann der Siemens TD 3511 auch verkürzte Datensätze liefern, statt immer alle möglichen Werte. Mit F009 sollte man z.B. einen Datensatz abrufen können, der nur die aktuellen Verbrauchswerte (darunter 1.7.0 und 2.7.0) liefert. Meine Hoffnung wäre, dass ich dadurch auch schneller/häufiger/zuverlässiger Werte erhalten könnte.

    Leider scheitere ich daran, den Befehl erfolgreich im Tasmota Skript abzusetzen. Laut Anleitung sollte das mit folgender Anforderung gehen:

    SOH R2 STX F009 (data) ETX BCC

    Kann mir jemand helfen, wie ich die Anforderung per Tasmota Skript an den Zähler senden kann? Details dazu findet man unter Punkt 5.2.9.3. in der Anleitung: https://wiki.volkszaehler.org/_media/hardwar…d-351x_bhbk.pdf