Aktuelle und gestrige Verbrauchswerte des Shelly 1PM mittels Script berechnen

  • Hallo Zusammen,

    Dank der tollen Scripte von Marc und 66er, ist es mir gelungen, die aktuelle Leistung und den gesamten Energieverbrauch in meine CCU zu integrieren.

    Nun möchte ich sehr gerne Euch allen meine kleinen Scripte zur Verfügung stellen, die zum einen den aktuellen Tagesverbrauch und zum anderen den Verbrauch von Gestern in eine Systemvariable schreiben.

    Ich messe mit meinem Shelly den Verbrauch meiner Lüftungsanlage im Haus, aus dem Grund heißen die Variablen bei mir …_Lueftungsanlage_....

    Zunächst müssen 3 Systemvariablen angelegt werden:

    Verbrauch_Lueftungsanlage_temp“ (in diese Variable wird jeden Tag um 00:01 der aktuelle Gesamtverbrauchswert des Shellys geschrieben, temp steht für temporär)

    Verbrauch_Lueftungsanlage_heute“ (Diese Variable zeigt den aktuellen Tagesverbrauchswert an)

    Verbrauch_Lueftungsanlage_gestern“ (Diese Variable zeigt den gestriegen Tagesverbrauchswert an)


    Als erstes erstellt ihr ein Programm, dass täglich zum Zeitpunkt 00:01 aufgerufen wird.

    1.PNG

    Das Script dafür sieht wie folgt aus:

    Code
    var a = dom.GetObject("Shelly_Verbrauch").Value();
      
    dom.GetObject("Verbrauch_Lueftung_temp").State(a);

    „Shelly_Verbrauch“ ist die Variable, die vom Shelly übergeben wird und bei mir alle 30s aktualisiert wird. Diese wird um 00:01 in die temporäre Größe "Verbrauch_Lueftung_temp" geschrieben.


    Anschließend wird ein neues Programm erstellt, welches den aktuellen Tagesverbrauch ermittelt. Dazu muss die Zeitsteuerung als Bedingung gewählt werden. Das ganze muss ganztägig laufen und als Serienmuster im Zeitintervall aufgerufen werden. Ich habe hier 5 Minuten gewählt, Da könnt ihr euch einen Wert aussuchen. Je nach Gusto, wie oft der Tageswert aktualisiert werden soll.


    2.PNG

    Das Script dafür sieht wie folgt aus:

    Code
    integer a = dom.GetObject("Shelly_Verbrauch").Value();
      
    integer b = dom.GetObject("Verbrauch_Lueftung_temp").Value();
    integer c = a-b;
    dom.GetObject("Verbrauch_Lueftung_heute").State(c.ToString(2));

    Hier wird eine Differenz aus dem aktuellen Wert der vom Shelly übergeben wird mit der Temporären Größe gebildet. Anschließend wird der Wert auf 2 Nachkommastellen gerundet und in die Variable "Verbrauch_Lueftung_heute" geschrieben.

    Abschließend muss noch ein Programm erstellt werden, dass einmal täglich am Tagesende (23:59 Uhr) den Tagesverbrauchswert in den Verbrauchswert von gestern schreibt.

    3.PNG

    Das Script dafür sieht wie folgt aus:

    Code
    var a = dom.GetObject("Verbrauch_Lueftung_heute").Value();
      
    dom.GetObject("Verbrauch_Lueftung_gestern").State(a.ToString(2));

    Anlag zum ersten Script wird hier des Tagesverbrauch in den Verbrauch für gestern geschrieben.

    Achtung bei Stromausfall oder Netztrennung wird der Gesamtverbrauch im Shelly auf 0 gesetzt. D.h. der Shelly wird in diesem Fall den aktuellen Tageswert falsch berechnen. In dem Fall müsste die Scripte einmal von Hand ausgeführt werden.

    Das gleiche gilt auch beim Erstellen dieser Scripte, da ja immer erst zum Tageswechsel die Systemvariablen mit sinnvollen Werten beschrieben werden.

    So ich hoffe, dass irgendjemand etwas mit diesen kleinen Scripten anfangen kann.

    Euch noch einen schönen 2. Advent.

    Grüße Henning

    • Offizieller Beitrag

    Servus Henning,

    coole Nummer. :thumbup:

    Danke für's Teilen. :)

    • Offizieller Beitrag

    gmt94 ,

    geiles Teil! :thumbup:


    Malsehen ob man das für den EM übertragen kann, mit Anpassungen natürlich?!

    • Offizieller Beitrag

    Bekommst du lediglich den Wert für Spannung und Stromstärke wird es deutlich schwieriger...

    Leider spuckt der Shelly kein Stromwert aus, obwohl der vorhanden sein muss! Denn Leistung wird ja aus Spannung und Strom ermittelt.

  • Dieses Thema enthält einen weiteren Beitrag, der nur für registrierte Benutzer sichtbar ist, bitte registrieren Sie sich oder melden Sie sich an um diesen lesen zu können.