D0 Zähler SML auslesen mit Tasmota

  • muelle4u


    ich habe einen BTW40 E auf Masse, C mit 1k auf +3V3 (von einem Steckernetzteil mit 100uF nahe am ESP gepuffert). Den C habe ich an den Rx-Pin des ESP-01
    angehängt. Das Kabel zum Sensor/Zähler ist ca. 2m lang und ungeschirmt.


    Das funktioniert super, solange der ESP-01 außerhalb des Zählerkastens ist. Ich habe ihn an den ganzen Kabelstrang der oben aus dem Kasten kommt einfach mit einem Bindfaden drangehängt.

  • ich steh ein bisschen auf dem Schlauch... habe mir post #536 von meierchen006 nun zum 1000. mal durchgelesen. ;(

    ich frage noch mal... wo trage ich das script ein? in die Konsole? in sonoff_template.h? in user_config_override.h?:/

    Wo oder was ist der Scripteditor und was ist der decoder / descriptor?

    Sorry ich raffe es nicht.


    folgendes bekomme ich in der Konsole mit "sensor53 d1" angezeigt:


    19:00:23 : 77 07 01 00 01 08 00 ff => ist vermutlich der Zählerwert in kWh (Verbrauch)

    19:00:23 : 77 07 01 00 01 08 01 ff 01 01 62 1e 52 03 69 00 00 00 00 00 00 08 c5 01

    19:00:23 : 77 07 01 00 01 08 02 ff 01 01 62 1e 52 03 69 00 00 00 00 00 00 00 00 01

    19:00:24 : 77 07 01 00 02 08 00 ff => ist vermutlich der Zählerwert in kWh (Einspeisung)

    19:00:24 : 77 07 01 00 02 08 01 ff 01 01 62 1e 52 03 69 00 00 00 00 00 00 00 08 01

    19:00:24 : 77 07 01 00 02 08 02 ff 01 01 62 1e 52 03 69 00 00 00 00 00 00 00 00 01

    19:00:24 : 77 07 81 81 c7 82 05 ff => ist vermutlich die Seriennummer?!

  • Ich möchte einen kleinen Erfolg melden:

    ich hab nicht gemerkt das mit dem script aktivieren ein neues Menü in den Tasmotaeinstellungen frei schaltet :rolleyes:


    habs gefunden und ein script eingetragen.




    Jedoch ist mir folgendes aufgefallen. Die ersten 2 Wert (Verbrauch / Einspeisung) springen nun ständig zwischen falschen Daten und den korrekten Daten hin und her. Das war vorher ohne das Script nicht so. Hat das was mit dem Medianfilter zu tun?


    Leider sind alle anderen Werte stetig auf "null". Wie bekomme ich die gefüllt.

  • mac_switch

    Fang erst einmal klein an ohne die ganzen Variablen.




    und dann schaue dir mal diese Website und diese an.

    Wenn du ein Stückchen runterscrollst, dann siehst du die Nachrichten für deinen Zähler aufgedröselt. Am besten vergleichst du deinen ersten Wert der ja funktioniert (Verbrauch) mit dem von der Website. Soweit ich das überflogen habe, passt der überein. vielleicht ist es dir möglich auf diese Weise noch andere Werte rauszuholen.


    Ich sehe gerade, dass du auch eine Empfangsdiode an deinem Zähler haben müsstest. Ich weiß nicht ob man bei deinem Zähler die Ausgabe der Daten erst Triggern muss. Und ich weiß auch nicht ob und wie das in der Scripter Version geht ( gemu2015 ), oder ob du in die Config_override noch "#define SML_SEND_SEQ" adden musst und dementsprechend eine LED anbauen die deinem Zähler sagt das er Loslegen kann.

    Vermutlich findest du aber alle wichtigen Infos auf den verlinkten Seiten.

  • Habe mal die SML Dokumentation von Tasmota ins Deutsche übersetzt (mit DEEPL, ist sehr zu empfehlen)


    dann hier ein paar Erläuterungen zum Modbus


    Beispiel:


    >D


    >B

    =>sensor53 r


    >M 1

    +1,3,m,0,9600,MODBUS,1,1,01040000,01040002,01040004,01040006,01040008,0104000a,0104000c,0104000e,01040010

    nach der üblichen Zählerdefintion kommt hier der Pin für den TX Anschluss Pin (hier 1)

    danach die Anzahl von 100ms Einheiten zu der jedes Register ausgelesen wird, hier 1, also alle 100ms ein Register

    danach kommen alle MODBUS Register in HEX Kodierung

    01 = MODBUS Adresse

    04 = MODBUS Cmd hier Register auslesen,

    0000 = Register Adresse in Hex, hier also Register 0 auslesen.



    Jetzt kommen die üblichen Decoder Zeilen

    dort steht also die Antwort vom Zähler

    01 = Zähler Adresse

    04 = Zähler CMD

    ffffffff = float Zahl, die der Zähler zurück liefert, manche Zähler haben eine reverse Byte Order da gibt man FFffFFff an

    xxxx = Checksumme die intern berechnet wird

    @ Abschluss des Decoder Vergleich Strings

    i0: = Index des Registerblocks im Sendedescriptor, also hier das erste angeforderte Register.

    danach wie gehabt.


    1,010404ffffffffxxxx@i0:1,Voltage P1,V,Voltage_P1,2

    1,010404ffffffffxxxx@i1:1,Voltage P2,V,Voltage_P2,2

    1,010404ffffffffxxxx@i2:1,Voltage P3,V,Voltage_P3,2

    1,010404ffffffffxxxx@i3:1,Current P1,A,Current_P1,2

    1,010404ffffffffxxxx@i4:1,Current P2,A,Current_P2,2

    1,010404ffffffffxxxx@i5:1,Current P3,A,Current_P3,2

    1,010404ffffffffxxxx@i6:1,active Power P1,W,Power_P1,2

    1,010404ffffffffxxxx@i7:1,active Power P2,W,Power_P2,2

    1,010404ffffffffxxxx@i8:1,actibe Power P3,W,Power_P3,2

    #


    sollen mehrere Zähler am selben Bus ausgelesen werden, gibt man einfach alle Register des 2 Zähler ebenfalls an dann aber mit einer anderen Geräteadresse, also z.B. 2 (muss man im Menü des Zählers einstellen)

    +1,3,m,0,9600,MODBUS,1,1,01040000,01040002,01040004,01040006,01040008,0104000a,0104000c,0104000e,01040010,02040000, etc


    man kann aber auch 2 Zähler an 2 Bussen auslesen, dann braucht man halt 4 IO Pins

    und 2 Descriptor und Decodersätze


    +1,3,m,0,9600,MODBUS,1,1,01040000,01040002,01040004,01040006,01040008,0104000a,0104000c,0104000e,01040010

    +2,12,m,0,9600,MODBUS,14,1,01040000,01040002,01040004,01040006,01040008,0104000a,0104000c,0104000e,01040010


    etc.

  • Muellmann

    Danke fürs Einstellen ich habe es jetzt ohne den Kondensator. Stand jetzt geht es noch nicht ...siehe Bild im Anhang.


    Wenn ich die Firmware erstelle muss ich, wenn ich den Scriptor nicht verwende doch eigentlich nur

    #define USE_SML_M in der my_user_config.h einfügen.

    die Sprache Deutsch auswählen und den von mir verwendeten Zähler #define METER EHZH in der xsns_53_sml.ino definieren.

    Mit dieser einstellung sollte ich zumindest mal Werte auf der Weboberfläche angezeigt bekommen oder ist eine Konfig in der Weboberfläche notwendig ?



    "Später"(wenn dann mal iwas ankommt) soll das ganze dann in Domoticz auflaufen. gemu2015 was bedeutet Rudimentär ? Ist mit Rules eine auswertung in Domoticz möglich oder brauche ich dafür zwingend scripts? (Ich hoffe diese Frage macht Sinn ... )



    Weis jemand ob es eine art Serial Debug über die Konsole gibt? (ob überhautp etwas an kommt .. )


    Danke

    Grüße


    Julian

    P.S.: Falls sich jemand wundert warum eine Powerbank .. Mehrfamilien Haus und keine Chance eine Hutschienensteckdose einzubauen :(

  • Hallo zusammen



    Nach einem dreiviertel Jahr des Dauerbetriebs mit einen der ersten Versionen von gemu habe ich mich gestern mal durch die 33 Seiten dieses Threads gelesen und einen Wemos D1 mini mit der aktuellen Version geflasht. Hut ab , das Ein(Um)stellen per Scripteditor ist fantastisch! Vielen Dank!


    Nun habe ich eine kurze Frage zum Easysmeter Q3D:

    Mein 1. Zähler ist ein Q3B. Wenn ich das passende Script lade (was mit SML) dann werden die Werten angezeigt.

    Versuche ich meinen 2. Zähler, einen Q3D auszulesen , mit dem entsprechenden OBIS Script, wird alles mit "0" angezeigt.

    Ich habe schon öfters gelesen, dass der Q3D erst zur Ausgabe der Daten über die IR-Schnittstelle freigeschalten werden muss. Hat das schon einmal jemand machen müssen? (der Zähler ist bei ebay gekauft, also nicht vom Stromanbieter) Oder braucht es einen speziellen Script für den Q3D? (habe bisher die ;EHZ161 und ;EHZ161_1 probiert)


    Gruss Thomas

  • mac_switch

    Fang erst einmal klein an ohne die ganzen Variablen.


    und dann schaue dir mal diese Website und diese an.

    Sehr gut... das hat mir echt weiter geholfen. Musste aber den PIN für den Stromzähler anfragen. Vielen Dank.

    Bekomme nun folgende Werte: (mehr werden nicht übermittelt)



    Was mich jetzt noch beschäftigt ist, das die Werte häufig total aus der Reihe tanzen. Wenn ich das Script aber deaktiviere und über den ursprünglichen Weg aus dem Code die Werte anzeigen lasse, ist die Anzeige stabil. Hat das was mit dem Medianfilter zu tun was gemu2015 im Vorfeld beschrieben hat?


    Des weiteren wie bekomme ich die Werte an Domoticz übermittelt? das Rules für das Script deaktiviert wurde kann ich nicht mehr eine rule per TelePeriod use. nutzen.


    Wenn ich die zwei Sachen noch in den Griff bekomme bin ich fürs Wochenende Glücklich :)

  • Hallo NoitaercX & HoerMirAuf ,

    ihr als rule Profis könnt mir sicherlich helfen.



    Code
    1. HAR_Stromzähler/SENSOR = {"Time":"2019-09-15T10:44:48","SML":{"Total_in":2261.47,"Total_out":9.35,"Power_curr":-51,"Power_p1":87,"Power_p2":-178,"Power_p3":39,"Meter_number":"xxxxxxxxxxxxxxxxxxxx"}}

    Ich möchte alle Werte per rule an Domoticz übertragen und habe anscheinend einen Fehler in der Namensgebung oder Syntax.

    Code
    1. rule1 1
    2. rule on tele-SML#Total_in do publish domoticz/in {"idx":148,"svalue":"%value%"} endon
    3. rule on tele-SML#Total_out do publish domoticz/in {"idx":149,"svalue":"%value%"} endon
    4. rule on tele-SML#Power_curr do publish domoticz/in {"idx":150,"svalue":"%value%"} endon

    SML ist ja her Sensorname und z.B. Total_in der Wert welchen ich übertragen will... aber es klappt nicht.

    Rule ist aktiviert und script deaktiviert.


    Was mache ich falsch?

  • Was mache ich falsch?

    Hi, "rule" darf nur einmal innerhalb einer Regel vorkommen,

    sonst überschreibt deine letzte Zeile die vorherigen und nur die letzte wird aktiv,


    deshalb so:

    Code
    1. rule1
    2. on tele-SML#Total_in do publish domoticz/in {"idx":148,"svalue":"%value%"} endon
    3. on tele-SML#Total_out do publish domoticz/in {"idx":149,"svalue":"%value%"} endon
    4. on tele-SML#Power_curr do publish domoticz/in {"idx":150,"svalue":"%value%"} endon

    wobei eigentlich alles in einer Zeile steht und mit <Enter> in die Konsole eingegeben wird.

    Für bessere Übersichtlichkeit schreibe ich aber auch immer extra Zeilen untereinander.


    Der Rest sollte passen bzw. dann in der Konsole die Ausgaben kontrollieren,

    ob und wann die Rule aktiv wird.

  • Ok das war ein Schreibfehler von mir, ich hatte die Zeilen nur kopiert... es steht nicht in jeder Zeile Rule on...

    aber wenn ich es wie beschrieben mache, wird die Rule zwar eingetragen, aber nicht ausgeführt.

    Ich vermute ich hab ein Problem mit Sensornamen und dem zu übergebenden Wert (SML#Total_in).

    Aber genau so steht die Benennung im Status in der Konsole drin...

    Code
    1. HAR_Stromzähler/SENSOR = {"Time":"2019-09-15T10:44:48","SML":{"Total_in":2261.47,"Total_out":9.35,"Power_curr":-51,"Power_p1":87,"Power_p2":-178,"Power_p3":39,"Meter_number":"xxxxxxxxxxxxxxxxxxxx"}}
  • aber nicht ausgeführt.

    Dann wird die Rule anscheinend mit on tele-SML#... nicht aktiviert.


    Kommen die SML Daten mit jeder TelePeriode als "MQT: ..."

    und poste mal deine Ausgabe bei Eingabe von "Rule1" in der Konsole.


    Hab im Moment keine Möglichkeit zum Testen, aber soweit ich mich erinnere,

    hat das weiter vorne funktioniert,


    oder teste es mal mit Bedingungen für best. Werte z.B.

    D0 Zähler SML auslesen mit Tasmota

  • Beitrag von mac_switch ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • mac_switch


    warum quälst du dich mit den alten Sachen rum. Der Treiber wird in Zukunft nur noch die Descriptor Version unterstützen.

    Scripter kann alles was rules kann und noch wesentlich mehr und ist auch einfacher zu verstehen.

    noch dazu kannst du jede Menge Zusatzberechnungen machen, wie Tagesverbrauch etc. und die auch im WEBUI anzeigen oder an Domoticz posten.


    verwende meine neuste Version von Github. dort habe ich eine extra für einen User eingebaute Domoticz Unterstützung rausgenommen weil sie sich mit deiner Lösung nicht vertragen würde. (gilt auch für deine bisherige rules Version)



    Hab dir mal ein script gebaut damit du siehst wie das aussehen würde


    ; definiere Variablen

    >D

    p_in=0

    p_out=0

    p_curr=0


    ; lese die tele Variablen ein

    >T

    p_in=SML#Total_in

    p_out=SML#Total_out

    p_curr=SML#Power_curr



    >S

    ; sende zu Domoticz bei teleperiod

    if upsecs%tper==0

    then

    =>publish domoticz/in {"idx":148,"svalue":"%p_in%"}

    =>publish domoticz/in {"idx":149,"svalue":"%p_out%"}

    =>publish domoticz/in {"idx":150,"svalue":"%p_curr%"}

    endif


    ;hier dein SML descriptor

    >M 1

    ,,,,