D0 Zähler SML auslesen mit Tasmota

  • Hallo,


    man geht das hier schnell weiter. Ich hänge noch auf Version 4 (da noch nicht mal die letzte Version) fest.


    Muss unbedingt auf die aktuelle Version umbauen, obwohl die letzte 4er Version läuft problemlos bei mir, allerdings noch nicht auf Scripter.

    Dort möchte ich aber hin.

  • Moin Moin!


    Ok ok!

    Ich dachte nur, da nun komplett auf Script umgestellt werden soll, kann man sich ja den ganzen Rummel ersparen. Außer du möchtest "abwärtskompatibel" bleiben. Allerdings hörte es sich nach einem harten CUT an und einem kompletten Umstieg auf Script. Bei einem Fehler im Script könnte statt des Fallbacks eines default Zählers einfach eine Warnmeldung auf der Hauptseite stehen.

    Daher würde es u.U. Sinn ergeben sich die paar Byte zu sparen, den Treiber nur noch über #define use_sml_m zu starten und den rest via Script in der GUI zu machen. Noch genialer wäre natürlich so eine Art Dropdown Menü wie es das auch schon unter Einstellungen/Geräte gibt. Um dort dann direkt automatisch das passende Script für seinen Zähler wählen zu können bzw. einfügen zu können oder eben eine eigene Vorlage zu bauen. Also ist nur eine Idee. Ansonsten würde ich vorschlagen, das man sich wirklich mal mit dem Wiki beschäftigt um dort die entsprechenden Scripte für die passenden Zähler zu publizieren. (Art Datenbank / FAQ Howto)


    Ich hatte tatsächlich den counter auf publish gestellt. Das war dann wohl der Fehler.


    Bis heute mittag hatte ich tatsächlich nur 1L zuviel auf dem Wemos. Ich bin mal gespannt und werde es weiter beobachten.


    Viele Grüße und besten Dank!

  • ja da läuft auch gerade eine ähnliche Diskussion in Tasmota chats. Es gibt inzwischen so viele Geräte das sie die Übersicht verlieren.

    dort wird ja bisher versucht alle templates in der software unterzubringen. dann kommen aber noch zig Sonderwünsche die bisher mit Setoptions erledigt werden müssen.


    eigentlich bräuchte man nur einen default setup, den dann jeder aus einem repo ersetzen und editieren kann. das würde jede Menge Platz im Kode sparen.


    am idealsten natürlich über ein komfortables Webinterface das aber auch einiges an Kode verbrauchen würde.


    ich denke mal für diesen Treiber sollte es reichen die Scripts aus einem Fundus per copy and paste einzusetzen und bei Bedarf anzupassen.


    was man natürlich bräuchte wäre ein Tutorial wie die Scripte zu interpretieren und zu modifizieren sind.


    und einen Ort, Datei in der jeder eventuell Definitionen von Zählern addieren kann, damit man irgendwann nicht mehr selbst frickeln muss sondern für jeden Zähler eine Vorlage hat.



    die alte Lösung über #define lasse ich noch einige Zeit drin, da einige Leute daran gewöhnt sind und andere unbedingt noch rules verwenden wollen.


    ausserdem gibt es einige Spezialitäten die noch nicht per Script einstellbar sind wie z.B. das Senden von Anforderungs Strings (manche Zähler brauchen regelmäßig eine bestimmte Sequenz um überhaupt Daten zu senden)

  • Das kann ich mir gut vorstellen. Wie schon bereits erwähnt bin ich gewillt da Support zu leisten. Allerdings nützt das im Moment nichts, wenn sich noch so viel ändert und alles im Umbruch steckt.

  • URBANsUNITED


    wenn ich das richtig verstanden habe, hast du ausser iobroker noch einen 2. MQTT server auf dem die Daten eigentlich landen sollen.

    warum schickst du nicht die Tasmota Daten direkt dorthin ? (indem du diesen Server statt iobroker in Tasmota definierst)

    Das hätte ich gerne so gemacht.

    Da gibt es nur ein Problem.

    Mein Setup sollte sein:

    Raspbian Buster

    InfluxDB

    Chronograf

    Telegraf

    Grafana


    MQTT sollte vom Telegraf abgeholt und in die InfluxDB geschrieben werden.

    Das würde auch per MQTT Consumer Plugin funktionieren, wenn man nicht noch einige andere MQTT Werte schreiben möchte.

    Die Werte waren nicht kompatible untereinander und zusammenbiegen ging nicht. Man kann nur ein Data_Format hinterlegen.

    Aus meiner Sicht habe ich alles probiert, den Sonntag geopfert und dann doch nicht hinbekommen.

    Also, abgebrochen und den ioBroker nur mit den Plugins Sonoff (😊) MQTT und InfluxDB installiert. Und BAMS läuft wie geschmiert! Sogar komfortabler, ich wollte nur den Raspberry Pi nicht unnötig auslasten, da der ioBroker schon einige Ressourcen verbraucht.


    Jetzt geht’s mit Grafana weiter.

    Hat da jemand vielleicht schöne Vorlagen zur Kosten/Verbrauchsberechnung pro Tag für Strom Wasser und Gas?


    Cheers


    URBANsUNITED

  • Hallo URBANsUNITED ,


    kann dir zwar bei deinem Problem mit MQTT nicht helfen, aber anstatt ioBroker hättest auch einfach Nodered nehmen können.

    Ist nicht so aufgeblasen wie ioBroker.

    Dann hättest du wie ich auch, dass MQTT Telegramm vom Sonoff per Json zerlegen können und so zusammenbasteln, wie du es brauchst.

  • Bzgl. Grafana kann ich dir auch nicht weiter helfen. Bin da auch erst gerade mit angefangen und noch nicht wirklich glücklich mit. Hab bisher alles in MySQL geloggt statt influxdb.


    Aber vielleicht ist der iobroker Adapter „statistics“ was für dich.

  • gemu2015 Übrigens bekomme ich beim iobroker sonoff Adapter folgende Fehlermeldung, wenn ich die aktuelle Leistung direkt publishe.

    iobroker Log:

    Code
    1. 2019-08-20 15:40:22.394  - warn: sonoff.0 Cannot parse data "SENSOR": _{"Time":"2019-08-20T14:40:22"{"Time":"2019-08-20T14:40:22","Strom":{ "Power_curr":326}}_ - SyntaxError: Unexpected token { in JSON at position 29


    Wemos Konsole:

    Code
    1. 14:42:20 MQT: tele/ESP-SWG/SENSOR = {"Time":"2019-08-20T14:42:20"{"Time":"2019-08-20T14:42:20","Strom":{ "Power_curr":239}}
    2. 14:42:22 MQT: tele/ESP-SWG/SENSOR = {"Time":"2019-08-20T14:42:22"{"Time":"2019-08-20T14:42:22","Strom":{ "Power_curr":240}}



    Grüße!

  • Komponenten:

    VENTUS W174 (13, Euro)

    Wemos d1 mini

    NE555 als monostabile Kippstufe.

    Also vom Ventus Niederschlagsmesser nutze ich nur den eingebauten Reedkontakt über ein dünnes Kabel via leer Rohr vom Garten in den Keller.

    Wemos und Kippstufe in einem kleinem Gehäuse mit USB Stromversorgung im Keller.

    Die monostabile Kippstufe nur weil der Impuls vom Messer zu kurz ist und den IRQ Mode habe ich nicht hinbekommen. (Noch nicht)

    https://www.elektronik-kompendium.de/sites/slt/0310121.htm

    Der Regen von gestern hat gezeigt das es funktioniert. Werte stimmen schon sehr Gut (Vergleichs Messung)


    [0]={5,'c',1,10,"Regen"}}; // GPIO5 regen counter d1


    "1,1-0:1.8.0*255(@2.222," D_Regen ",mm," DJ_COUNTER ",1";


         

  • Alles klar! Funktioniert. Allerdings bekomme ich immer noch den gleichen Fehler beim publishen. via kommastelle +16. Vor ca. 15 min von Github geladen und draufgespielt.


    Benötigst du mehr Infos?

  • gemu2015

    Scheint immer noch nicht korrekt zu sein:


    Cannot parse data "SENSOR": _{"Time":"2019-08-22T21:15:46","Epoch":1566501346"Strom":{"Total_in":21113.8497}}_ - SyntaxError: Unexpected string in JSON at position 48


    Kommt über iobroker und deinem Sonoff Modul im Log

    Source von 20:52h


    Und mein Wemos D1 mini resettet sich immer noch. Hab 3 Geräte dran (Strom (Obis), Wasser, Gas, bei als Counter)

  • Hallo @all,


    gemu2015 hat ein Riesenprojekt für uns entwickelt um unsere Smartmeter, Gas- und Wasserzähler elektronisch auszulesen.


    Was die ganze Zeit gefehlt hatte (eine kleine Doku) , habe ich mal zusammengetragen.

    Sie ist auch gar nicht vollständig, da ja wahrscheinlich jeder auch noch individuelle Probleme hat/hatte.


    Doch die wichtigsten Parameter sind wahrscheinlich aufgezählt um zu starten.


    Noch wichtig:

    ES WIRD IMMER NUR DIE LETZTE VERSION VON gemu2015 UNTERSTÜTZT.



    Hilfe zu gemu2015 Tasmota Zähler mit esp 8266


    Beitrag: #536, #537 und #538

    ===> Trifft im Moment auf die aktuelle Version "Universal 7" zu, kann sich auch in Zukunft verändern !!


    Durch die Einführung des Script Editors war es möglich die Zählerdefintion in den Scripteditor zu verlagern.


    Damit braucht man nur noch eine einzige Softwareversion und kann die Zählerdefintion beliebig im Scripteditor nachladen


    !! im "M" Descriptor darf man keine Kommentare eintragen,

    vor allem nicht am Ende der Zeile !!



    Beispielscript für den WGS_COMBO descriptor:


    Original Erklärung
    ;WGS_COMBO Kommentar beginnt mit ";"
    >D
    v1=0
    v2=0
    v3=0
    v4=0
    v5=0
    v6=0
    min=0
    >D
    Variable V1
    Variable V2
    Variable V3
    Variable V4
    Variable V5
    Variable V6
    Variable "Minuten seit Mitternacht"
    >T
    v1=GAS#Total_In
    v2=SML#Total_In
    v3=H20#Total_In
    v4=SML#Power_curr
    v5=SML#Curr_summ v6=SML#Volt_avg
    >T
    json variablennamen
    json variablennamen
    json variablennamen
    json variablennamen
    json variablennamen
    json variablennamen
    >B
    ->sensor95 r
    tper=10
    >B wird beim Booten ausgeführt
    sensor 95
    teleperiod 10 "alle 10 Sekunden"
    >S
    min=int(time/5)
    if chg[min]>0
    and v2>0
    then
    dp3
    =>Websend [184.106.153.149:80]/update?
    key=xxxxxxxxxxxxx
    &field1=%v1%
    &field2=%v2%
    &field3=%v3%
    &field4=%v4%
    &field5=%v5%
    &field6=%v6%
    endif
    > S wird jede Sekunde ausgeführt
    alle 5 Minuten
    Wenn Timer >0
    und Variable V2 >0
    dann
    drei Dezimalstellen => Websend
    hier zu Thingspeak
    Thingspek
    Key = xxxxxxxxxx
    &field1 = Variable V1
    &field2 = Variable V2
    usw.


    endif
    >M 3
    +1,5,c,0,10,H20
    +2,4,c,0,50,GAS
    +3,3,s,0,9600,SML
    > M3
    Counter c1 hier Wasserzähler
    Counter c2 hier Gaszähler
    SML Stromzähler hier Hager EHZ363W5
    1,=h==================
    1,1-0:1.8.0*255(@1000,Zählerstand,m³,Count,3
    2,=h==================
    2,1-0:1.8.0*255(@100,Zählerstand,m³,Count,2
    3,=h==================
    3,77070100010800ff@1000,Verbrauch,KWh,Total_in,3
    3,=h==================
    3,77070100100700ff@1,Aktueller Verbrauch,W,Power_curr,2
    3,=h -------------------------------
    3,77070100240700ff@1,Verbrauch P1,W,Power_p1,2
    3,77070100380700ff@1,Verbrauch P2,W,Power_p2,2
    3,770701004c0700ff@1,Verbrauch P3,W,Power_p3,2
    3,=h==================
    3,=m 10+11+12 @1,Ströme L1+L2+L3,A,Curr_summ,2
    3,=h -------------------------------
    3,770701001f0700ff@1,Strom L1,A,Curr_p1,2
    3,77070100330700ff@1,Strom L2,A,Curr_p2,2
    3,77070100470700ff@1,Strom L3,A,Curr_p3,2
    3,=h==================
    3,=m 13+14+15/#3 @100,Spannung L1+L2+L3/3,V,Volt_avg,2
    3,=h -------------------------------
    3,77070100200700ff@1,Spannung L1,V,Volt_p1,2
    3,77070100340700ff@1,Spannung L2,V,Volt_p2,2
    3,77070100480700ff@1,Spannung L3,V,Volt_p3,2
    3,=h==================
    3,77070100000009ff@#,Service ID,,Meter_id,0
    3,=h==================
    #
    Leerzeile mit ========
    Wasser Zähler
    Leerzeile mit ========
    Gas Zähler
    Leerzeile mit ========
    SML Strom Zähler
    Leerzeile mit ========
    Aktueller Verbrauch in W
    Leerzeile mit ----------------
    Aktuelle Leistung L1
    Aktuelle Leistung L2
    Aktuelle Leistung L3
    Leerzeile mit ========
    Summe der Ströme L1 + L2 + L3
    Leerzeile mit ----------------
    StromL1
    StromL2
    StromL3
    Leerzeile mit ========
    Mittelwert der Spannungen L1 + L2 + L3 / 3
    Leerzeile mit ----------------
    Spannung L1
    Spannung L2
    Spannung L3
    Leerzeile mit ========
    Zähler Nummer oder Service ID
    Leerzeile mit ========
    #


    Sie sieht es dann bei mir aus


  • ########### wichtige Anpassung #############

    ### ########## WGS_COMBO ###############

    ############## bei Scripter ################


    my_user_config.h anpassen:
    #define USE_CONFIG_OVERRIDE ---> aktivieren
    dazu -> "//" entfernen
    #define MY_LANGUAGE de-DE ---> aktivieren
    dazu -> "//" entfernen
    ----------------------------------------------------------------------
    bei
    // -- Serial sensors ------------------------------
    #define USE_SML_M ---> eintragen
    ----------------------------------------------------------------------
    user_config_override erstellen
    aus Vorlage : user_config_override_sample.h
    ######################################################
    Scripter benutzen:
    um scripter zu verwenden
    in >> user_config_override.h << einstellen
    #undef USE_RULES
    #define USE_SCRIPT
    ######################################################
    ----------------------------------------------------------------------
    sonoff_template.h ändern
    um "Namen des Zählers zu ändern in WGS_Combo"
    der Name "sonoff Basic" kommt nur einmal im Quellcode vor
    ----------------------------------------------------------------------
    dazu suchen in
    =>sonoff_template.h
    nach Sonoff Basic
    const mytmplt kModules[MAXMODULE] PROGMEM = {
    { "Sonoff Basic",
    dort kannst du ihn ändern in WGS_COMBO
    ----------------------------------------------------------------------
    Bei bedarf DEBUG_CNT_LED1 oder DEBUG_CNT_LED2 einschalten
    #define DEBUG_CNT_LED1 12 // GPIO12 (D6) H20-LED blau
    #define DEBUG_CNT_LED2 14 // GPIO14 (D5) GAS-LED gelb
    ----------------------------------------------------------------------
    //================================================
    // diesen Zähler auswählen
    #define METER WGS_COMBO
    //=================================================
    ##################################################
  • ########## wichtige Einstellungen ###########

    ############# WGS_COMBO ##############

    ############### bei Rules ###############


    ----------------------------------------------------------------------
    my_user_config.h anpassen:
    #define USE_CONFIG_OVERRIDE ---> aktivieren
    dazu -> "//" entfernen
    #define MY_LANGUAGE de-DE ---> aktivieren
    dazu -> "//" entfernen
    ----------------------------------------------------------------------
    bei
    // -- Serial sensors ------------------------------
    #define USE_SML_M ---> eintragen
    ----------------------------------------------------------------------
    user_config_override erstellen
    aus Vorlage : user_config_override_sample.h
    ----------------------------------------------------------------------
    sonoff_template.h ändern
    um "Namen des Zählers zu ändern in WGS_Combo"
    der Name "sonoff Basic" kommt nur einmal im Quellcode vor
    ----------------------------------------------------------------------
    dazu suchen in
    =>sonoff_template.h
    nach Sonoff Basic
    const mytmplt kModules[MAXMODULE] PROGMEM = {
    { "Sonoff Basic",
    dort kannst du ihn ändern in WGS_COMBO
    ----------------------------------------------------------------------
    ######################################################
    Rules benutzen:
    um rules zu verwenden gar nichts tun
    #################################################
    rule1 zum Variablen festlegen, dazu in der Konsole eingeben
    rule1 on tele-Gas#Count do var1 %value% endon on tele-SML#Total_in do var2 %value% endon on tele-H20#Count do var3 %value% endon on tele-SML#Power_curr do var4 %value% endon on tele-SML#Curr_summ do var5 %value% endon on tele-SML#Volt_avg do var6 %value% endon
    ----------------------------------------------------------------------
    rule2 zum senden an Thingspeak, dazu in der Konsole eingeben
    rule2 on Time#Minute|5 do Websend [184.106.153.149:80]/update?key=xxxxxxxxxxxxxxx&field1=%var1%&field2=%var2%&field3=%var3%&field4=%var4%&field5=%var5%&field6=%var6% endon
    xxxxxxxxx = Thingspeak write Key
    ----------------------------------------------------------------------
    rule einschalten Rule1 1
    rule ausschalten Rule1 0
    rule löschen Rule1 "
    ----------------------------------------------------------------------
    sonoff.h ändern
    um 6 Variablen zu haben
    #define MAX_RULE_VARS 5
    // Max number of rule variables (10 bytes / variable)
    auf
    #define MAX_RULE_VARS 6
    // Max number of rule variables (10 bytes / variable)
    ----------------------------------------------------------------------
    teleperiod einstellen
    teleperiod 10 = 10 Sekunden
    ----------------------------------------------------------------------
    Variablen für (Rule1)
    var1 tele-Gas#Total_in Gaszähler
    var2 tele-SML#Total_in Stromzähler
    var3 tele-H20#Total_in Wasserzähler
    var4 tele-SML#Power_curr Aktuelle Leistung
    var5 tele-SML#Curr_summ Summe Ströme L1+L2+L3
    var6 tele-SML#Volt_avg Mittelwert Spannungen (L1+L2+L3)/3
    ----------------------------------------------------------------------
    Bei bedarf DEBUG_CNT_LED1 oder DEBUG_CNT_LED2 einschalten
    #define DEBUG_CNT_LED1 12 // GPIO12 (D6) H20-LED blau
    #define DEBUG_CNT_LED2 14 // GPIO14 (D5) GAS-LED gelb
    ----------------------------------------------------------------------
    //=================================================
    // diesen Zähler auswählen
    #define METER WGS_COMBO
    //=================================================