Script oberösterreich td3511 für 2 Zähler

Hallo,

ich bin überrascht über Ihre Nachricht und muss mich gleich bei Ihnen entschuldigen.

Das Problem liegt NICHT am verkauften Produkt, sondern daran, dass offenbar sehr viele von den Siemens TD-3511 Smart Metern unterschiedlich konfiguriert sind und die meisten Skripte im Internet für deutsche
Netzbetreiber gedacht sind.
Und, wie der Gedanke vom vereinten Europa es vorsieht, kocht die Netz OÖ AG (ein Netzbetreiber in Oberösterreich) ein eigenes Süppchen.

Der Schlüssel zum Erfolg war, dass der TD-3511 bei der Netz OÖ AG offenbar standardmäßig auf 9600 Baud voreingestellt ist (nicht auf 300 Baud - wie die meisten Skript es vorsehen) und eine Zeile in den Skripten von „sensor53 r“ auf „sensor53 d0“ geändert werden muss.

Ich bin kein IT-Mensch und kann das auch nicht näher erklären (habe mir das im Internet „zusammen-gegoogelt“.

Mein Skript lautet nun wie folgt:

>D
;*****
;Only for Siemens TD-3511
;*****
;Activate the script and reboot!
res=0  
scnt=0  
>B  
=>sensor53 d0
>F
;count 100ms   
scnt+=1  
switch scnt  
case 6  
;set sml driver to 9600 baud and send /?! as HEX to trigger the Meter   
res=sml(1 0 9600)  
res=sml(1 1 "2F3F210D0A")  
;1800ms later > Send ACK and ask for switching to 9600 baud  
case 18  
res=sml(1 1 "063035300D0A")  
;2000ms later > Switching sml driver to 9600 baud    
case 20  
res=sml(1 0 9600)   
;Restart sequence after 50x100ms    
case 40 
; 6000ms later > restart sequence    
scnt=0  
ends   
>M 1
+1,3,o,0,9600,,1  
1,0.0.0(@1,Zaehlernummer,,Meter_number,0  
1,0.9.1(@#),Zeitpunkt,Uhr,hhmmss,0
1,1.8.0(@1,HT+NT Zaehlerstand,KWh,Total_in,3  
1,1.7.0(@1,Bezug,kW,Pp,3  
1,2.7.0(@1,Einspeisung,kW,Pm,3
1,3.7.0(@1,Blindleistung_Q+,kvar,Q+,3
1,4.7.0(@1,Blindleistung_Q-,kvar,Q-,3
1,32.7(@1,Spannung_L1,V,V_L1,2
1,52.7(@1,Spannung_L2,V,V_L2,2
1,72.7(@1,Spannung_L3,V,V_L3,2  
1,31.7(@1,Strom_L1,A,I_L1,2  
1,51.7(@1,Strom_L2,A,I_L2,2  
1,71.7(@1,Strom_L3,A,I_L3,2
1,91.7(@1,Strom_N,A,I_N,2 
1,14.7(@1,Frequenz,Hz,HZ,2
1,2.8.0(@1,Einspeisestand,KWh,Total_inEz,3
#

Mir ist klar, dass hier am Anfang die 9600 Baud 2x aktiviert werden (habe versucht, die paar Zeilen zu löschen aber dann ging wieder nichts mehr).
Auch ist mir nicht klar, weshalb das Skript manchmal mit „sensor53 r“ funktioniert hat - jedoch selten und nicht lange.

Das o.g. Skript läuft jetzt seit ca. 30 Stunden stabil und liefert ca. alle 20 sek. alle Werte (nicht alle gleichzeitig, aber das liegt wohl an der Technik
des Zählers (die Energieversorger und Netzbetreiber hängen ja nicht nur in Österreich in den 80er-Jahren fest).

Wie gesagt: gilt für Netz OÖ AG und da weiß ich natürlich auch nicht, ob das für alle Siemens TD-3511 gilt (Stromsparen oder gar Eigenverbrauch
optimieren) soll ja nicht ZU EINFACH gemacht werden, sonst leiden die Aktionäre :wink:

Das o.g. Skript stammt zu 99% aus dem Internet (ich habe nur ein paar Parameter verändert) und ich kann deshalb nicht sagen, ob Sie es weitergeben
dürfen - von meiner Seite bestehen jedenfalls keine Einwände!!! - vielleicht hilft’s ja dem Ein oder Anderen.

Hallo Andy

schöne Grüße aus dem etwas speziellen Oberösterreich und unserem Netzbetreiber Netz OÖ :wink:

Ich habe es mit deinem Script oben versucht, aber bekomme immer wie die Kollegen auch keine Werte; das Script wird mir angezeigt aber ohne Werte.

Was mir aufgefallen ist, das in dem Script jetzt der AES-Schlüssel wieder fehlt ?! :thinking:

Ich hätte den jetzt mal wie folgt ergänzt aber leider noch ohne Erfolg.

Mein Script derzeit:

>D
;*****
;Only for Siemens TD-3511
;*****
;Activate the script and reboot!
res=0  
scnt=0  
>B  
=>sensor53 d0
>F
;count 100ms   
scnt+=1  
switch scnt  
case 6  
;set sml driver to 9600 baud and send /?! as HEX to trigger the Meter   
res=sml(1 0 9600)  
res=sml(1 1 "2F3F210D0A")  
;1800ms later > Send ACK and ask for switching to 9600 baud  
case 18  
res=sml(1 1 "063035300D0A")  
;2000ms later > Switching sml driver to 9600 baud    
case 20  
res=sml(1 0 9600)   
;Restart sequence after 50x100ms    
case 40 
; 6000ms later > restart sequence    
scnt=0  
ends   
>M 1
+1,3,o,0,9600,,1  
;Add 16 digit AES Key here
1,=so5,REPLACE-WITH-AES-KEY

1,0.0.0(@1,Zaehlernummer,,Meter_number,0  
1,0.9.1(@#),Zeitpunkt,Uhr,hhmmss,0
1,1.8.0(@1,HT+NT Zaehlerstand,KWh,Total_in,3  
1,1.7.0(@1,Bezug,kW,Pp,3  
1,2.7.0(@1,Einspeisung,kW,Pm,3
1,3.7.0(@1,Blindleistung_Q+,kvar,Q+,3
1,4.7.0(@1,Blindleistung_Q-,kvar,Q-,3
1,32.7(@1,Spannung_L1,V,V_L1,2
1,52.7(@1,Spannung_L2,V,V_L2,2
1,72.7(@1,Spannung_L3,V,V_L3,2  
1,31.7(@1,Strom_L1,A,I_L1,2  
1,51.7(@1,Strom_L2,A,I_L2,2  
1,71.7(@1,Strom_L3,A,I_L3,2
1,91.7(@1,Strom_N,A,I_N,2 
1,14.7(@1,Frequenz,Hz,HZ,2
1,2.8.0(@1,Einspeisestand,KWh,Total_inEz,3
#

Hoffe es gibt von dir oder einem Kollegen aus dem schönen Oberösterreich noch Input, wie ich es zum Laufen bekomme.

Schöne Grüße nach Stuttgart
Gerald :waving_hand:

Servus,

ich hab’s geschafft es zum Laufen zu bringen.

Hier die selbstkompilierte Tasmota-Firmware für den im Stromleser verbauten ESP32C3 mit Berry Script und AES Encryption: Firmware

Ich musste jedoch den Treiber von der weiter oben erwähnten Lösung auf GitHub etwas abändern, da es bei mir nicht out of the box funtioniert hat, hier die aktualisierte Version:
td3511_mbus.be

Hoffe es klappt auch bei euch!

Grüße aus dem Innviertl :wink:

1 „Gefällt mir“

Servus Robert

Hast du einen Tipp für mich was ich falsch mache, ich bringe deine Firmware nicht drauf, er schriebt immer Datei zu groß :thinking:

Gruß Gerald

Mach mal irgendein OTA Update (Links gibt’s auf der Tasmota Seite). Das wird fehlschlagen und dann bist du im Safeboot Modus. Danach sollte es gehen.

Ne leider ist laut der Meldung ein Speicherplatz Problem :frowning:

Hallo
Hättest du schon einen Erfolg,der Speicher ist bei mir Partition app0 2880kb, Partition safeboot 832kb, Partition FS 320kb
Mfg

Hallo Aerobert,

danke für die arbeit die du geleistet hast.

Ich habe versucht das ganze auch zum laufen zu bekommen aber leider ohne Erfolg.
Update auf die von die kompilierte Firmware hat ohne Probleme funktioniert.
Ich habe auch die td3511_mbus.be hinzugefügt und MQTT verbunden.

Leider werden mit keine Daten in Home Assistant oder am Lesekopf selbst angezeigt.

Hast du noch eine Anleitung wie man weiter vorgehen muss damit man die Daten bekommt.

Besten Dank
Andreas

Hallo zusammen,

ich lese hier mal gespannt mit, hab gestern meinen Stromleser bekommen und bekomme keinerlei Daten ( TD3511 in OÖ ).
Danke schon mal
lg
Fredi

Servus
Ich habe aufgegeben und das Ding Dank Bestellung über Amazon Retour geschickt, war für mich als wirklich technikaffinen Menschen unmöglich zu konfigurieren - leider :frowning:

Servus Leute,

sorry, dass ich mich erst jetzt melde.
@yongular Kannst du mal schreiben, was er in der Berry Scripting Console schreibt, nachdem du „Restart Berry VM“ drückst?

@GeMuAUT Leider bin ich auch nicht mehr wirklich im Microcontroller-Game unterwegs. Ich hab’s auch nur mit viel Trial-And-Error zum Laufen gebracht. Deswegen sind die Schritte zum Erfolg auch nicht mehr ganz nachvollziehbar.

Vielleicht klappt es, wenn man erst eine Standard-Firmware flasht:
tasmota32c3.bin
Und danach flasht man die von mir kompilierte… aber ehrlich gesagt rate ich hier auch nur rum…

LG

Hallo Aerobert,

die Berry Script Console schreibt folgenden Fehler.

BRY: failed to load '/td3511_mbus.be' (syntax_error - /td3511_mbus.be:69: strict: redefinition of builtin 'print')
TD3511MBUS: Driver loaded
BRY: failed to run compiled code (type_error - 'nil' value is not callable)
TD3511MBUS initialized

Der Fehler bezieht sich auf die Zeile das Problem ist aber der ganze Block wo er von 300 auf 9600 Baud wechseln soll:

print(self.ser.read())

In der Konsole kommt folgender Log:

00:00:00.251 CMD: Fall back to serial port, no SOF packet detected on USB port
00:00:00.251 HDW: ESP32-C3 v0.4 
00:00:00.267 UFS: FlashFS mounted with 292 kB free
00:00:00.275 CFG: Loaded from File, Count 23
00:00:00.282 QPC: Count 1
00:00:00.317 BRY: Berry initialized, RAM used 3973 bytes
00:00:00.328 Project tasmota - Tasmota Version 15.0.1(release-tasmota32)-3_1_3(2025-06-14T10:34:59)
00:00:00.415 BRY: failed to load '/td3511_mbus.be' (syntax_error - /td3511_mbus.be:69: strict: redefinition of builtin 'print')
00:00:00.426 TD3511MBUS: Driver loaded
00:00:00.457 BRY: failed to run compiled code (type_error - 'nil' value is not callable)
00:00:00.458 TD3511MBUS initialized
00:00:00.458 BRY: Successfully loaded 'autoexec.be'
00:00:01.325 WIF: Connecting to AP1 Command_IoT Channel 6 BSSId F6:92:BF:AC:9C:B5 in mode HT40 as tasmota-235844-6212...
00:00:05.483 WIF: Connected
00:00:05.738 HTP: Web server active on tasmota-235844-6212 with IP address 192.168.1.31
21:24:20.714 QPC: Reset
21:24:20.763 MQT: Attempting connection...
21:24:20.847 MQT: Connected
21:24:20.850 MQT: tele/tasmota_235844/LWT = Online (retained)
21:24:20.852 MQT: cmnd/tasmota_235844/POWER = 
21:24:20.856 MQT: tele/tasmota_235844/INFO1 = {"Info1":{"Module":"ESP32C3","Version":"15.0.1(release-tasmota32)","FallbackTopic":"cmnd/DVES_235844_fb/","GroupTopic":"cmnd/tasmotas/"}}
21:24:20.869 MQT: tele/tasmota_235844/INFO2 = {"Info2":{"WebServerMode":"Admin","Hostname":"tasmota-235844-6212","IPAddress":"192.168.1.31","IP6Global":"","IP6Local":"fe80::b281:84ff:fe23:5844%st1"}}
21:24:20.893 MQT: tele/tasmota_235844/INFO3 = {"Info3":{"RestartReason":"Software reset CPU","BootCount":10}}
21:24:22.059 MQT: stat/tasmota_235844/STATUS1 = {"StatusPRM":{"Baudrate":115200,"SerialConfig":"8N1","GroupTopic":"tasmotas","OtaUrl":"http://ota.tasmota.com/tasmota32/release/tasmota32c3.bin","RestartReason":"Software reset CPU","Uptime":"0T00:00:09","StartupUTC":"2025-08-08T20:24:13","Sleep":50,"CfgHolder":4617,"BootCount":9,"BCResetTime":"2025-08-08T21:03:03","SaveCount":23}}
21:24:22.108 MQT: stat/tasmota_235844/STATUS2 = {"StatusFWR":{"Version":"15.0.1(release-tasmota32)","BuildDateTime":"2025-06-14T10:34:59","Core":"3_1_3","SDK":"5.3.3.250501","CpuFrequency":160,"Hardware":"ESP32-C3 v0.4","CR":"437/699"}}
21:24:22.159 MQT: stat/tasmota_235844/STATUS = {"Status":{"Module":1,"DeviceName":"Tasmota","FriendlyName":["Tasmota"],"Topic":"tasmota_235844","ButtonTopic":"0","Power":"0","PowerLock":"0","PowerOnState":3,"LedState":1,"LedMask":"FFFF","SaveData":1,"SaveState":1,"SwitchTopic":"0","SwitchMode":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ButtonRetain":0,"SwitchRetain":0,"SensorRetain":0,"PowerRetain":0,"InfoRetain":0,"StateRetain":0,"StatusRetain":0}}
21:24:22.212 MQT: stat/tasmota_235844/STATUS11 = {"StatusSTS":{"Time":"2025-08-08T21:24:22","Uptime":"0T00:00:09","UptimeSec":9,"Heap":178,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":28,"MqttCount":1,"Berry":{"HeapUsed":5,"Objects":54},"Wifi":{"AP":1,"SSId":"Command_IoT","BSSId":"F6:92:BF:AC:9C:B5","Channel":6,"Mode":"HT40","RSSI":28,"Signal":-86,"LinkCount":1,"Downtime":"0T00:00:06"}}}
21:24:25.719 MQT: tele/tasmota_235844/STATE = {"Time":"2025-08-08T21:24:25","Uptime":"0T00:00:12","UptimeSec":12,"Heap":184,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":70,"MqttCount":1,"Berry":{"HeapUsed":5,"Objects":54},"Wifi":{"AP":1,"SSId":"Command_IoT","BSSId":"F6:92:BF:AC:9C:B5","Channel":6,"Mode":"HT40","RSSI":36,"Signal":-82,"LinkCount":1,"Downtime":"0T00:00:06"}}

RX Pin ist 3 und TX ist 4 ist das richtig?

Lg
Andreas

Guten Morgen,

Es funktioniert endlich.
Eine genaue Anleitung folgt heute oder in einer Woche.

Soviel vorweg, RX = 3 und TX = 1.

Ich habe jetzt die Anleitung fertig. Ich hoffe das hilft auch Anwender die nicht so tief in dem Thema sind.

Danke nochmal für eure hilfe.

Cool, dass du es zum Laufen gebracht hast :wink:

Auf die geändert Pins habe ich leider total vergessen, sorry :open_mouth:

Gute Anleitung auf alle Fälle!

Interessant, dass es bei dir auch sofort mit Baud 9600 funktioniert (wie im GitHub Original Code). Ich musste die Zeilen, die du in deiner Anleitung auskommentiert hast, extra einfügen, weil vorher gar nix ging. Es gibt scheinbar wirklich verschiedene Versionen vom TD3511…

Vielleicht sind die Kommentare mit // am Ende der paar Zeilen das Problem, dass du einen Fehler bekommen hast. Die hab nur in meinem Backup eingefügt, nicht aber auf dem ESP selbst. :man_facepalming:
Sollte natürlich # und nicht // sein…