D0 Zähler SML auslesen mit Tasmota

  • Hi,

    poste doch mal dein ganzes Script.

    Ich habe das Problem noch nicht verstanden.

    durch die @100 bekommst du bei jedem Impuls den Wert 0,01.

    Ist die 18 am Ende so gewollt? 18 Nachkommastellen erscheint mir ein wenig übertrieben ;)

  • Hi,

    in deinem Beispiel läuft das über Counter, ich habe ja derzeit die Auswertung via Script.

    Weiß nicht genau wie du darauf kommst aber ich benutzte (etwas angepaßt ) das Skript von Spencer.

    Das berechnet aus den Reed Kontakt Impulsen den aktuellen Zählerstand sowie Verbrauch heute und gestern.


    Spencer's Skript :

    Einmal editiert, zuletzt von pausentee (21. Januar 2023 um 18:06)

  • Ist die 18 am Ende so gewollt? 18 Nachkommastellen erscheint mir ein wenig übertrieben ;)

    wäre es ja aber es sind nur 2, bei 19 3

    18 : precision -> Anzahl Dezimalstellen (+16 für sofortige Übertragung hier: 2+16=18)

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Alexa, Sonos, Pilot APP zur Steuerung, Domoticz und TasmoAdmin auf Raspberry mit Docker

  • Weiß nicht genau wie du darauf kommst aber ich benutzte (etwas angepaßt ) das Skript von Spencer.

    Das berechnet aus den Reed Kontakt Impulsen den aktuellen Zählerstand sowie Verbrauch heute und gestern.

    Code
    ich werde das scripzt morgen mal einspielen

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Alexa, Sonos, Pilot APP zur Steuerung, Domoticz und TasmoAdmin auf Raspberry mit Docker

  • Hallo.

    Ich gab heute auch mal meinen ultraheat t550 versucht mit Tasmota auszulesen.

    Egal wie mein Script aussieht, bekomm ich im dump nur die standard Anzeige.

    Habt ihr ne Ahnung wie das Script aussehen muss? Ich will nur dan aktuellen Verbrauch anzeigen.

    21:40:53.900 : 6.26*01(00612.30*m3)6.8*01(0024.351*MWh)

    21:40:54.087 : F(0)9.20(67248537)6.35(60*m)

    21:40:54.400 : 6.6(0009.8*kW)6.6*01(0009.8*kW)6.33(000.252*m3ph)9.4(087.8*C&078.4*C)

    21:40:54.759 : 6.31(0030828*h)6.32(0000000*h)9.22(R)9.6(000&67248537&0&000&67248537&0)

    21:40:55.090 : 9.7(20000)6.32*01(0000000*h)6.36(05-31&00:00)6.33*01(000.252*m3ph)

    21:40:55.276 : 6.8.1()6.8.2()6.8.3()6.8.4()6.8.5()

    21:40:55.435 : 6.8.1*01()6.8.2*01()6.8.3*01()

    21:40:55.552 : 6.8.4*01()6.8.5*01()

    21:40:55.679 : 9.4*01(087.8*C&078.4*C)

    21:40:55.883 : 6.36.1(2021-01-18)6.36.1*01(2021-01-18)

    21:40:56.088 : 6.36.2(2020-03-08)6.36.2*01(2020-03-08)

    21:40:56.287 : 6.36.3(2020-01-02)6.36.3*01(2020-01-02)

    21:40:56.505 : 6.36.4(2020-11-04)6.36.4*01(2020-11-04)

    21:40:56.812 : 6.36.5()6.36*02(01&00:00)9.36(2023-01-21&21:54:22)9.24(0.6*m3ph)

    21:40:56.941 : 9.17(0)9.18()9.19()9.25()

    21:40:57.264 : 9.1(0&1&0&0000&CECV&CECV&1&5.20&5.20&F&101008&1>1>04&08&0&00&:5)

    21:40:57.408 : 9.2(&&)9.29()9.31(0027701*h)

    21:40:57.759 : 9.0.1(00000000)9.0.2(00000000)9.34.1(000.00000*m3)9.34.2(000.00000*m3)

    21:40:57.959 : 8.26.1(00000000*m3)8.26.2(00000000*m3)

    21:40:58.185 : 8.26.1*01(00000000*m3)8.26.2*01(00000000*m3)

    21:40:58.314 : 6.26.1()6.26.4()6.26.5()

    21:40:58.554 : 6.26.1*01()6.26.4*01()6.26.5*01()0.0(67248537)

  • Ich habe dein Script und deine (spencer) bin genommen, keine Änderung ich müsste wohl das Ergebnis mit 0,01 mutiplizieren.

    Werde jetzt mal die Counter Methode probieren.

    EDIT:

    Counter Methode ist um einiges genauer. die Abweichung sind minimal, werde mal weiter ausprobieren.

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Alexa, Sonos, Pilot APP zur Steuerung, Domoticz und TasmoAdmin auf Raspberry mit Docker

    Einmal editiert, zuletzt von mafrei (23. Januar 2023 um 11:26)

  • 18 : precision -> Anzahl Dezimalstellen (+16 für sofortige Übertragung hier: 2+16=18)

    Die 16 kannte ich, hab mir aber bisher noch keine Gedanken darüber gemacht, wie das sofortige Übertragen in Kombination mit der Anzahl der Dezimalstellen geht.

    Wieder was gelernt. :)

  • Zur Info:

    Bei meinem Ferrariszählerscript #1857 ist noch ein Gedankenfehler in Bezug auf die Darstellung in Home Assistant drin.

    Z.Zt. wird die vergangene ermittelte Leistung übertragen in HA aber als derzeit anstehende ausgewertet.

    Bin mir noch nicht sicher wie ich das löse.

    Im Prinzip müsste ich beim aktuell ermittelten Wert den Timestamp des Impulses davor übertragen.

    Hab aber noch keine Ahnung wie ich das mache.

  • Hallo.

    Ich gab heute auch mal meinen ultraheat t550 versucht mit Tasmota auszulesen.

    Egal wie mein Script aussieht, bekomm ich im dump nur die standard Anzeige.

    Habt ihr ne Ahnung wie das Script aussehen muss? Ich will nur dan aktuellen Verbrauch anzeigen.

    Du kannst einfach in https://tasmota-sml-parser.dicp.net/ deinen Dump reinkopieren um zu sehen was dein Zähler liefert.

    Dump zuvor einschalten mit

    sensor53 d1

    daten kopieren

    sensor53 d0

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Alexa, Sonos, Pilot APP zur Steuerung, Domoticz und TasmoAdmin auf Raspberry mit Docker

  • Wenn ich unter senser53 c1 nichts eingebe habe ich in der Anzeige 0,000 beim Gaszähler

    die mittler Stelle wird bei dem Impuls richtig hochgezählt also 0,010 ; 0,020 usw.

    Gebe ich nun den aktuelle Zähler stand mit sensor53 c1 1795986 ein erschein in der Anzeige 17959,860.

    Dies wäre auch korrekt. Nun wird aber die mittlere Nachkommstelle nicht mehr hochgezählt.

    Kann mit einer Helfen ?

    Tasmota 12.2.0

    script:

    >D

    p:m1=0

    s1=0

    p:g1=0

    h1=0

    hkw1=0

    gkw1=0

    skw1=0

    hgp=0

    ggp=0

    hr=0

    mi=0

    zu=0.9617

    br=11.233

    gp=10.65

    farbe1="#008000"

    farbe2="#f00000"

    farbe3="#00fdfd"

    >B

    ->sensor53 r

    tper=10

    >S

    h1=s1-m1

    hkw1=h1*br*zu

    hgp=(hkw1*gp)/100

    gkw1=g1*br*zu

    ggp=(gkw1*gp)/100

    skw1=s1*br*zu

    hr=hours

    if chg[hr]>0

    and hr==0

    then

    m1=s1

    g1=h1

    svars

    endif

    if upsecs%tper==0{

    ;=>Publish keller/%topic%/main/td_m3 %2h1%

    ;=>Publish keller/%topic%/main/td_kwh %2hkw1%

    ;=>Publish keller/%topic%/main/yd_m3 %2g1%

    ;=>Publish keller/%topic%/main/yd_kwh %2gkw1%

    ;=>Publish keller/%topic%/main/value %2s1%

    ;=>Publish keller/%topic%/main/json {"value": "%2s1%", "today_m3": "%2h1%", "today_kwh": "%2hkw1%", "yesterday_m3": "%2g1%", "yesterday_kwh": "%2gkw1%"}

    ;Senden an Homematic Variable xxxxxxxx

    ;=>websend [ip-adresse_ccu:8181] /cuxd.exe?Status=dom.GetObject('xxxxxxxx').State(%2s1%)

    }

    >T

    s1=GAS1#Stand_Haus1

    >W

    ============

    Zustandszahl: {m} %zu%

    Brennwert: {m} %br% kWh/m³

    Gaspreis: {m} %gp% Cent/kWh

    ============

    Verbrauch:

    ---------------------

    Heute: {m} %2h1% m³ | %2hkw1% kWh

    Kosten: {m} %2hgp% €

    ---------------------

    Gestern: {m} %2g1% m³ | %2gkw1% kWh

    Kosten: {m} %2ggp% €

    >M 1

    +1,14,c,1,-25,GAS1

    1,1-0:1.8.0*255(@100,Zählerstand,m³,Stand_Haus1,19

    #

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Alexa, Sonos, Pilot APP zur Steuerung, Domoticz und TasmoAdmin auf Raspberry mit Docker

  • Hallo mafrei,

    Bei mir sieht es so aus:

    Mein Gaszähler hat drei Stellen hinter dem ","

    In der letzten Stelle ist der Magnet der die Impulse gibt, also kann maximal bis zwei Stellen hinter dem "," gezählt werden.

    Du hast bei dir die "19" stehen also drei Stellen hinter dem "," funktioniert mMn nicht.

    Dann darfst du auch nur deinen Zählerstand bis zwei Stellen hinter dem "," also 18 eingeben.

    Beachte auch die untere rote Zeile.

    Für dein Zählerstand 17959,860 also nur 1795986 mehr nicht!

  • In der letzten Stelle ist der Magnet der die Impulse gibt, also kann maximal bis zwei Stellen hinter dem "," gezählt werden.

    ich habe das mal beobachtet, mein Zählwerk hat auch drei stellen (Nachkomma).

    An der letzen Stelle ist auf der 6 ein Metallplättchen zu sehen. Der Impuls kommt aber wenn die mittlere Stelle die 6 zeigt.

    ich nehme an ich muss die Impluse mit 10 multiplizieren weis aber nicht wie ?

    EDIT:

    Ich habe das mal übernommen, mal sehen was passiert:

    >M 1

    +1,14,c,0,-25,GAS

    1,1-0:1.8.0*255(@100,Zählerstand,m³,Total_In,2

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Alexa, Sonos, Pilot APP zur Steuerung, Domoticz und TasmoAdmin auf Raspberry mit Docker

    2 Mal editiert, zuletzt von mafrei (26. Januar 2023 um 19:10)

  • Bei mir: 1 Imp. = 0,01 qm

    Bei mir: 1Imp, = 0,1m³

    Das heißt die zweite Stelle ist der Impulsgeber, wenn der Magnet am Reedkontakt vorbeikommt.

    EDIT:

    ich habe mal auf einstellig umgestellt und warte mal nun ab.

    >M 1

    +1,14,c,0,-25,GAS

    1,1-0:1.8.0*255(@100,Zählerstand,m³,Total_In,1

    ich hätte gerne den Wert in einer Variablen, wenn das möglich ist.

    Bilder

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Alexa, Sonos, Pilot APP zur Steuerung, Domoticz und TasmoAdmin auf Raspberry mit Docker

    2 Mal editiert, zuletzt von mafrei (27. Januar 2023 um 11:15)

  • Landis Gyr Ultraheat T550

    Hallo.

    Ich habe mir jetzt einen zweiten IR HICHI Lesekopf gekauft und teste mit ihm wieder meine Abfrage über Tasmota. Das Ergebnis ist gleich geblieben, d.h. in der Tasmota Console bekomme ich immer und immer wieder diesen Text:

    11:23:50.382 RSL: STATE = {"Time":"2023-01-27T11:23:50","Uptime":"0T00:35:09","UptimeSec":2109,"Heap":20,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"POWER":"ON","Wifi":{"AP":1,"SSId":"HerpersdorfCable1GB","BSSId":"38:10:D5:49:F7:5F","Channel":11,"Mode":"11n","RSSI":100,"Signal":-30,"LinkCount":1,"Downtime":"0T00:00:03"}}

    11:23:50.390 RSL: SENSOR = {"Time":"2023-01-27T11:23:50","LGUH50":{"waermemenge":0}}

    11:28:50.382 RSL: STATE = {"Time":"2023-01-27T11:28:50","Uptime":"0T00:40:09","UptimeSec":2409,"Heap":20,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":30,"MqttCount":0,"POWER":"ON","Wifi":{"AP":1,"SSId":"HerpersdorfCable1GB","BSSId":"38:10:D5:49:F7:5F","Channel":11,"Mode":"11n","RSSI":100,"Signal":-33,"LinkCount":1,"Downtime":"0T00:00:03"}}

    11:28:50.389 RSL: SENSOR = {"Time":"2023-01-27T11:28:50","LGUH50":{"waermemenge":0}}

    11:31:34.255 : i

    11:31:34.457 : 6.26*01(00612.30*m3)6.8*01(0024.351*MWh)

    11:31:34.609 : F(0)9.20(67248537)6.35(60*m)

    11:31:34.958 : 6.6(0009.8*kW)6.6*01(0009.8*kW)6.33(000.252*m3ph)9.4(087.8*C&078.4*C)

    11:31:35.317 : 6.31(0030962*h)6.32(0000000*h)9.22(R)9.6(000&67248537&0&000&67248537&0)

    11:31:35.647 : 9.7(20000)6.32*01(0000000*h)6.36(05-31&00:00)6.33*01(000.252*m3ph)

    11:31:35.870 : 6.8.1()6.8.2()6.8.3()6.8.4()6.8.5()

    11:31:36.007 : 6.8.1*01()6.8.2*01()6.8.3*01()

    11:31:36.108 : 6.8.4*01()6.8.5*01()

    11:31:36.235 : 9.4*01(087.8*C&078.4*C)

    11:31:36.440 : 6.36.1(2021-01-18)6.36.1*01(2021-01-18)

    11:31:36.646 : 6.36.2(2020-03-08)6.36.2*01(2020-03-08)

    11:31:36.843 : 6.36.3(2020-01-02)6.36.3*01(2020-01-02)

    11:31:37.048 : 6.36.4(2020-11-04)6.36.4*01(2020-11-04)

    11:31:37.369 : 6.36.5()6.36*02(01&00:00)9.36(2023-01-27&11:45:06)9.24(0.6*m3ph)

    11:31:37.499 : 9.17(0)9.18()9.19()9.25()

    11:31:37.821 : 9.1(0&1&0&0000&CECV&CECV&1&5.20&5.20&F&101008&1>1>04&08&0&00&:5)

    11:31:37.965 : 9.2(&&)9.29()9.31(0027835*h)

    11:31:38.357 : 9.0.1(00000000)9.0.2(00000000)9.34.1(000.00000*m3)9.34.2(000.00000*m3)

    11:31:38.525 : 8.26.1(00000000*m3)8.26.2(00000000*m3)

    11:31:38.792 : 8.26.1*01(00000000*m3)8.26.2*01(00000000*m3)

    11:31:38.870 : 6.26.1()6.26.4()6.26.5()

    11:31:39.112 : 6.26.1*01()6.26.4*01()6.26.5*01()0.0(67248537)

    11:31:39.129 : !

    Wenn ich den IR Lesekopf abziehe, kommt nichts. D.h. der Lesekopf bekommt wirklich diesen Sums angezeigt.

    Warum liefert mein Skript kein brauchbares Ergebnis? - Hast das von euch wirklich jemand geschafft? - Muss der Ultraheat irgendwie freigeschlten werden?

    Mein Script (andere Scripten liefern das gleiche Ergebnis)

    >D

    scnt=0

    res=0

    >B

    =>sensor53 r

    >F

    ;100ms iterations

    scnt+=1

    switch scnt

    case 10

    ;300 baudrate

    res=sml(1 0 300)

    res=sml(1 1 "00000000000000000000000")

    res=sml(1 1 "0000000000000000000000")

    res=sml(1 1 "2F3F210D0A")

    ;\?!CRLF

    ;case 7

    res=sml(1 0 2400)

    case 6000

    scnt=0

    ends

    >M 1

    +1,3,o,16,2400,LGUH50,1

    1,6.8(@1,Zählerstand,kWh,waermemenge,0

    #

  • Bei mir: 1 Imp. = 0,01 qm

    Das heißt (die dritte Stelle ist der Impulsgeber) es wird 0,01 hochgezählt wenn der Magnet am Reedkontakt vorbeikommt.

    Dein Hinweis über die Nachkomma Stellen scheint das Problem zu lösen. Mit der Einstellung

    >M 1

    +1,14,c,0,-25,GAS

    1,1-0:1.8.0*255(@10,Zählerstand,m³,Total_In,1

    sieht es bis jetz gut aus.

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Alexa, Sonos, Pilot APP zur Steuerung, Domoticz und TasmoAdmin auf Raspberry mit Docker

    Einmal editiert, zuletzt von mafrei (29. Januar 2023 um 09:49)

  • Hi,

    hast Du deinen Ultraheat T550 zum laufen bekommen?

    Könntest du mir evtl. dein laufendes script zukommen lassen?

    Gruss

  • Hi,

    hast Du deinen Ultraheat T550 zum laufen bekommen?

    Könntest du mir evtl. dein laufendes script zukommen lassen?

    Gruss

    Mit dem Script von oben hab ich es jetzt auch geschafft:

    Zwei Tips:

    - Der Zähler muss mit USB Anschluss nach oben positioniert werden.

    - Geduld. Da gibt es zwei Zeitschleifen. Ein zum Auslesen des Sensors (einmal pro Stunde) und einen für das Senden per MQTT.

  • gibt es wo eine Scriptsammlung die man auf seine bedürfnisse anpassen kann?

    hier mal meins mit fehlern!

    Gas tagesverbrauch bekomme ich einfach nicht hin.

    Spoiler anzeigen

    >D

    s1="Tagesverbrauch: {m}<b><span style="

    v2=0

    v3=0

    hr=0

    md=0

    yr=0

    ;Strom

    p:sm=0

    sd=0

    p:sma=0

    smn=0

    p:sya=0

    syn=0

    sspr=0.35

    yspr=0

    ysgp=172.92

    y€=0

    ;Gas

    p:gm=0

    p:gv=0

    gt=0

    gd=0

    sgf=0.9507

    sgz=11.279

    sgk=0


    >T

    v2=SML#DJ_TPWRIN

    v3=GAS#Total_In

    >B

    ->sensor53 r

    >S

    ;Tagesverbrauch_Strom und GAS

    hr=hours

    if chg[hr]>0

    and hr==0

    and v2>0 {

    sm=v2

    gv=gt

    gm=v3

    svars

    }

    if upsecs%tper==0 {

    sd=v2-sm

    gd=v3*sgf*sgz-gm

    gt=sgk-gd

    }


    ;Monatsverbrauch

    md=day

    if chg[md]>0

    and md==1

    and v2>0

    then

    sma=v2

    svars

    endif

    if upsecs%tper==0{

    smn=v2-sma

    }

    ;Jahresverbrauch

    yr=year

    if chg[yr]>0

    and hr==0

    and md==1

    and v2>0

    then

    sya=v2

    svars

    endif

    if upsecs%tper==0{

    syn=v2-sya

    ;Kosten

    yspr=syn*sspr+ysgp

    ;Gas in KWh

    sgk=v3*sgf*sgz

    }

    >J

    ,"Verbrauch Tag":"%sd%"

    ,"Verbrauch_Monat":"%smn%"

    ,"Verbrauch_Jahr":"%syn%"

    ,"Zählerstand_0:00Uhr":"%3sm%"

    ,"Zählerstand_Monatsanfang":"%3sma%"

    ,"Zählerstand_Jahrenanfang":"%3sya%"

    ,"Kosten_dieses_Jahr":"%2yspr%"

    ,"Gas_in_KWh":"%2sgk%"

    ,"Gas_Zählerstand_0:00Uhr":"%2gd%"

    ,"Gas_tagesverbrauch":"%2gt%"

    >W

    ==============

    Strom:

    Tagesverbrauch: {m} %3sd% KWh

    Monatsverbrauch: {m} %3smn% KWh

    Jahresverbrauch: {m} %3syn% KWh

    ==============

    Gas:

    Tagesverbrauch: {m} %2gt% KWh

    ==============

    Strom Preis/kWh: {m} %4sspr% €

    Strom Grundpreis: {m} %2ysgp% €

    Gas Faktor: {m} %4sgf%

    Gas Zustandszahl {m} %3sgz%

    --------------

    Strom kosten lfd. Jahr:{m} %2yspr% €

    ==============

    Strom Zählerstände:

    aktuell: {m} %3v2% KWh

    0:00 Uhr: {m} %3sm% KWh

    Monatsanfang: {m} %3sma% KWh

    Jahresanfang: {m} %3sya% KWh

    ==============

    Gas Zählerstand:

    Aktuell in KWh: {m} %2sgk% KWh

    0:00 Uhr: {m} %2gd% KWh

    >M 2

    +1,3,s,16,9600,SML

    +2,4,c,1,50,GAS

    1,77070100010800ff@1000,Verbrauch,KWh,DJ_TPWRIN,4

    1,77070100100700ff@1,Akt. Verbrauch,W,DJ_TPWRCURR,0

    //1,77070100240700ff@1,Verbrauch L1,W,DJ_TPWRCURR1,0

    //1,77070100380700ff@1,Verbrauch L2,W,DJ_TPWRCURR2,0

    //1,770701004C0700ff@1,Verbrauch L3,W,DJ_TPWRCURR3,0

    //1,77070100000009ff@#,Service ID,,Meter_id,0

    2,1-0:1.8.0*255(@100,Zählerstand,m³,Total_In,2

    #