D0 Zähler SML auslesen mit Tasmota

  • Damit wollte ich auf diesen Commit verweisen:

    https://github.com/arendst/Tasmota/pull/9196

    Dort steht auch erklärt, dass die Variablen zum aktuellen Zeitpunkt, bei einem Update auf die aktuelle Version, noch nicht gefüllt sind. Außer man flasht komplett neu oder setzt die Einstellungen über reset 1 komplett zurück. Zumindest verstehe ich das so.

  • @sunburstc

    hab jetzt alles neu kompiliert und geflasht jetzt sieht schon mal nicht schlecht aus


    muss ich jetz ein Tag warten bis die Werte drin erscheinen oder muss ich noch was anpassen im Script?

    Da ist noch ein Schreibfehler im Script:

    upsec muss upsecs heißen. korrigiere das bitte.

    Und beschäftige dich damit, wie das Script aufgebaut ist. Ich kann dir nicht sagen, ob das so funktioniert. Habe es nicht getestet sondern frei Hand hier herein geschrieben. Deshalb ist mir jetzt gerade auch der Fehler mit upsecs aufgefallen. Es ist nicht kompliziert und ich habe es auch mit Kommentaren versehen gehabt. Du solltest mithilfe der Links die dabei standen alles nötige an wissen bekommen um verstehen zu können was dort passiert.

    Niemand ist hier böse wenn Fragen auftauchen. Aber ein wenig Eigeninitative muss schon gezeigt werden.

  • einigermassen verstehe ich ja wie der Script aufgebaut ist..nur mit paar Sachen bin ich mir noch nicht sicher. Mit was für comand kann ich die Variablen überprüfen in der Konsole ob die mir Daten gefühlt werden , oder gibt es eine andere Möglichkeit ?

    du hast noch über hochladen mit dem Script Editor geschrieben gibt es irgentwo infos wie ich den benutze ?

  • Hallo djuscha


    in #1287 hat sunburstc dir den Link zum Script Editor gesendet dort liegt auch eine PDF zur Erklärung des Script Editor's allerdings in Englisch.


    Ich habe die für mich mal mit dem Google übersetzter ins Deutsche übersetzt:


  • einigermassen verstehe ich ja wie der Script aufgebaut ist..nur mit paar Sachen bin ich mir noch nicht sicher. Mit was für comand kann ich die Variablen überprüfen in der Konsole ob die mir Daten gefühlt werden , oder gibt es eine andere Möglichkeit ?

    du hast noch über hochladen mit dem Script Editor geschrieben gibt es irgentwo infos wie ich den benutze ?

    mit:


    Code
    =>print %VARIABLENNAME%


    kannst du überprüfen was in der Variable drin steht.

    Beispiel:


    Code
    >D
    v1=20
    >S
    =>print %v1%
  • so jetzt klappt es ,doof ist es natührlich das ich zwei Tage marten muss bis die Werte für Verbrauch Tag und Vortag aktuell sind. mit Minat und Jahr ist es ja auch so. Muss noch mal probieren mit den Kosten Anzeige probieren das Tagespreis und soweiter angezeigt wird

    hab noch zusätzlich J Bereich eingefügt damit Tagesverbrach über MQTT an Openhab gesendet wird.


    @sunburstcPaar Fragen zu dem Script hab ich aber noch die {} und then endif dasselbe ? Weil im Musterbeispiel in der Wiki then endif verwendet wird.

    das verstehe ich auch noch nicht so ganz

    Code
    ; Array zum Speichern aktueller Werte
    m:v=0 4

    könnte ich auch so schreiben?

    Code
    v[1]=0
    v[2]=0
    v[3]=0
    v[4]=0
  • djuscha

    Das klingt doch super!

    Wenn du natürlich die Werte der Vortage/Vorjahre/Vormonate hast, kannst du die entsprechende Variable aus der Console heraus mit folgender Zeile füllen:


    Code
    script>svm=123456;svt=54321;svj=123456;svars;

    Die Werte musst du natürlich entsprechend ändern.

    Siehe auch: Quelle



    meierchen006 hat vor einem guten 3/4 Jahr mal sein Script als PDF gepostet. Mit Erklärungen. Ich weiß aktuell nicht, wieviel davon noch auf die aktuelle Version von Tasmota zutrifft, aber sicherlich kann das Interessant sein, sich mal anzusehen. Er hat dort ziemlich viel Kostenberechnung betrieben. In meiner Linksammlung findest du den Beitrag von ihm. SML HowTo

    Allerdings kannst du das natürlich auch alles in openhab machen wenn du die Werte eh überträgst.


    Das definiert ein Array mit dem variablen Namen "v" und 4 Feldern.

    Stelle es dir vor wie Schrank mit 4 Türen. Hinter jeder Tür kannst du eine Nummer ablegen.

    Damit Tasmota weiß hinter welcher Tür du etwas legen möchtest, musst du den Index (Türnummer) angeben. x=INDEX

    v[x]=123456

    Also speichert ein:

    v[1]=100

    den Wert 100 hinter der Tür Nummer 1. usw.

    Array gibt es in so gut wie jeder Programmiersprache. Bei einigen ist auch eine verschachtelung möglich. Also das z.B. hinter einer Tür mehrere Weitere Türen sind etc. Bei Interesse einfach mal googln.

    Code
    m:v=0 4

    Du könntest natürlich auch ganz normal deine Variablen auf diesem Wege definieren:


    Code
    v[1]=0
    v[2]=0
    v[3]=0
    v[4]=0


    Kostet aber mehr Namespace als die Array Variante.

    Wenn es also kein Array sein soll, dann doch lieber so definieren:

    Code
    v1=0
    v2=0
    v3=0

    Du stößt irgendwann an die Grenzen der definierbaren Variablen. Das äußert sich meistens durch den Fehler script -2 in der console.

    Es gibt die Möglichkeit mehr Variablen zu erzeugen. Das muss dann schon beim kompilieren passieren.

    Schau (hier im Forum) also mal nach MAXVARS und MAXSVARS. Das lässt sich dann auch in der user_config_override hinzufügen.

    Allerdings ist der Speicher für die Namen der Variablen begrenzt.

    Deshalb immer möglichst kurze Var namen verwenden oder Arrays. Allerdings verbrauchen Arrays Scriptspeicherplatz.

    Achte bitte darauf, dass du p: Variablen so selten wie Möglichst beschreibst. Also im Script nicht sekündlich oder sowas.

    Das würde deinen Flashspeicher unnötig abnutzen. Sie sollten also nur dazu dienen um Werte langfristig zu speichern.


    Generell ist bei den IFs beides möglich. Allerdings gibt es aktuell einen Fehler bei verknüpften Bedingungen, wenn mit "and" oder "or" eine neue Zeile verwendet wird. Dabei muss dann zwischen geschweifter Klammer und Bedingung ein Leerzeichen sein.


    if foo==bar

    and bah==fui {

    ;Drei mal schwarzer Kater

    }


    Daher ist die beste Variante zur Zeit wohl die mit dem "if" "then" "endif"


    Alternativ scheint auch das hier zu funktionieren also beide Bedingungen in einer Zeile. Egal ob mit oder Leerzeichen zwischen Bedingung und geschweifter Klammer:

    Code
    if ((ti[1]==hours) and (ti[2]==mi)){
    =>print Hurra Timer1!
    }
  • Hi alle


    Hier mal ein Beispiel für eine GoogleChart Grafik bei einem Zähler (nur Solar Einspeisung)

    Wochengrafik, Tagesgrafik, Tabelle für letzte Woche, sendet jede Woche eine Ertragstabelle per email.

    Die Grafiken zeigen die Werte bei Maus Over an.


    Nun das HowTo


    in user config_override.h

    für alle

    #undef USE_RULES

    #define USE_SCRIPT

    #define USE_SML_M

    #define USE_SML_SCRIPT_CMD

    #define USE_SCRIPT_GLOBVARS

    #define USE_GOOGLE_CHARTS

    #define LARGE_ARRAYS

    #define USE_SENDMAIL

    #define USE_SCRIPT_WEB_DISPLAY

    #define USE_SCRIPT_JSON_EXPORT

    ; der mail account, natürlich angepasst

    #define EMAIL_USER "user"

    #define EMAIL_PASSWORD "passwd"

    #define EMAIL_FROM "<mr.x@gmail.com>"

    #define EMAIL_SERVER "smtp.gmail.com"

    #define EMAIL_PORT 465



    Für 1MB Devices zusätzlich:

    #define USE_EEPROM

    #define EEP_SCRIPT_SIZE 4096


    Für 4MB Devices: zusätzlich

    #define USE_SCRIPT_FATFS -1

    #define FAT_SCRIPT_SIZE 4096

    #define SDCARD_DIR

    zusätzlich hier in platform_override ein anderes Linkerfile nehmen

    board_build.ldscript = eagle.flash.4m2m.ld


    Besonderheit bei 1M devices wird das Script nach jedem over the air update gelöscht weil

    Tasmota den EEPROM Speicher als Zwischenpuffer verwendet.

    Man muss nach einem Softwareupdate also das script neu installieren.



    solar_script.pdf

    solor_einspeisung_script.txt






  • Hallo gemu2015


    mit diesen Einstellungen:


    >D

    SB=4096


    in user config_override.h

    ;Für 1MB Devices zusätzlich:

    #define USE_EEPROM

    #define EEP_SCRIPT_SIZE 4096


    bekomme ich sogar bei meinen Gosund Steckdosen eine Scriptgröße von 4096 Zeichen. :thumbup:


    Dabei muss ich/wir auch dieses beachten:

    Zitat

    Besonderheit bei 1M devices wird das Script nach jedem over the air update gelöscht weil

    Tasmota den EEPROM Speicher als Zwischenpuffer verwendet.

    Man muss nach einem Softwareupdate also das script neu installieren.

    meierchen006

  • Cool, verstehe ich das richtig. In Tasmota ist was integriert wo man seine GMAIL-Daten eintragen kann und dann bekommt man im WebIf so ein Graf mit angezeigt?

  • Die gmail Daten haben nichts mit den Charts zu tun.


    Das und viel mehr ist in der Script Erweiterung von Tasmota machbar. Da man das immer selbst kompilieren muss ist das nicht so verbreitet.


    Du kannst damit erheblich mehr erreichen als mit rules.


    Die WEB GUI kannst du selbst gestalten mit Buttons, Schiebereglern etc


    Du kannst beliebige HTML Seiten bauen auch im Vollformat mit Bildern, Links etc. also ein richtiger Webserver.


    Du hast ein File System in dem du Dateien speichern kannst und die dann hoch und runterladen.


    Du kannst emails versenden auch mit Anhang, alle möglichen Google Charts anzeigen.


    Audio Dateien abspielen, mit der Webcam Bewegungs Erkennung, Gesichtserkennung etc. machen


    und natürlich umfangreiche Datenverarbeitung machen


    Bin gerade dabei meine RASPies zu ersetzen mit einem ESP32 der mit allen anderen Tasmotas ohne MQTT kommuniziert.


    Ist für kleinere Systeme ganz problemlos möglich.


    Ich programmiere gerade eine TTGO ESP32 Watch als Server

    da hat man ein schönes kleines Display und Audioausgabe in einem Armbanduhren Gehäuse

    16MB Flash und noch extra 4MB Ram

    für 23 euro inklusive Versand.


    werde das Armband abmachen und die Uhr in ein Wandgehäuse einbauen.