NEWS
Skripte für PV und Verbrauch
-
Hallo zusammen,
ich stehe gerade auf dem Schlauch. Als Vorbereitung meiner kommenden großen PV Anlage und Batterie, möchte ich meinen derzeitigen Stromverbrauch in der Nacht erfassen. Hierzu soll, x Minuten nachdem das letzte Mal durch die PV Module etwas produziert wurde, der Stromverbrauch addiert werden, bis die Module am nächsten Tag wieder etwas produzieren.
Bisher habe ich nur einfache Blockly Sachen gebaut und stehe deswegen auf dem Schlauch. Hat hier jemand einen Tipp/Hinweis oder sogar schon ein Script?VG
srkonus -
@srkonus warum stehst du auf dem schaluch.. hast doch geschrieben was du willst..
jetzt musst du es nur nach und nach umsetzen...fang mal an und zeig wie weit du bist..
-
@srkonus
Falls du bei Blockly bleiben möchtest:
So könntest du dir einen passenden Timeout bauen. (ggf. mit wurde geändert statt wurde aktualisiert)
Solange das entsprechende Objekt geändert wird, stoppt er die Ausführung der darunter liegenden Blöcke immer wieder.
-> Das Objekt könnte hierbei z.B. der DP deiner "PV-Erzeugung" sein.Sollte nun für eine bestimmte Zeit (in meinem Fall 100Sek.) nichts passieren, werden die darunterliegenden Blöcke ausgeführt, da die Ausführung nicht mehr gestoppt wird.
Dort kannst du ja dann entsprechend mit einer Schleife deinen Stromverbrauch addieren lassen und den Wert in einen Datenpunkt schreiben.
Hoffe das ist so einigermaßen verständlich und hilft etwas beim anfangen.
-
@michic00 Vielen Dank für Deinen Ansatz. Habe jetzt das hier gebastelt:
Wo müsste ich den "Nachtverbrauch" wieder auf 0 setzen, oder lieber den Wert mittels Sourceanalytics dokumentieren?
Ob das ganze funktioniert weiß ich noch nicht, jetzt gerade wird nichts mehr produziert und deswegen läuft das ganze wahrscheinlich nicht an.VG
srkonus -
@srkonus
Trigger in Trigger geht nicht.
Warum fragst Du da noch einen zweiten DP ab?
Dein DP "Power" liefert doch schon alles, oder? -
@codierknecht Danke für den Hinweis, wusste ich nicht. Habe es rausgenommen, jetzt mal abwarten was passiert.
-
@srkonus
Du könntest nach Ablauf des Timeout den aktuellen Zählerstand in einen Hilfsdatenpunkt schreiben.
Sobald morgens die PV wieder produziert, ermittelst Du über den dann vorliegenden Zählerstand und den gemerkten Wert den Nachtverbrauch und schreibst den in einen weiteren DP.
Diesen kannst Du über einen der History-Adapter loggen. -
@codierknecht Vom Sinn her klar, aber das bekomme ich nicht in Blockly realisiert - bekomme es im Kopf nicht hin das ich meinen ersten Zwischenwert nicht überschreibe.
-
Hier ein Vorschlag. Ungetestet, weil ja auch mein BKW gerade nix produziert.
Benötigt 3 Datenpunkte:0_userdata.0.test.zaehlerstand 0_userdata.0.test.tagverbrauch 0_userdata.0.test.nachtverbrauch
Edit:
Das Ding fliegt aber mit ziemlicher Sicherheit recht bald aus der Kurve.
Nämlich dann, wenn mal so richtiges Mistwetter ist und das BKW auch tagsüber auf 0 geht.
Um wirklich Tag und Nacht zu berücksichtigen und nicht zufällige Wetterereignisse, könnte man aufjavascript.0.variables.isDayTime
triggern. -
@codierknecht Ach, das wäre mir sogar egal, es soll nur addiert werden, was "verbraucht" wird wenn keine PV Produktion vorhanden ist.
Danke für deinen Vorschlag, aber diesen bekomme ich gerade im Kopf überhaupt nicht nachvollzogen -
@srkonus sagte in Skripte für PV und Verbrauch:
aber diesen bekomme ich gerade im Kopf überhaupt nicht nachvollzogen
Wo haperts denn?
Ich habe das mal auf den tatsächlichen Tag-/Nachverbrauch umgebaut, um von Wetterereignissen unabhängig zu sein.
Der Trigger ist
isDayTime
. Der ändert sich genau 2x am Tag, nämlich morgens auftrue
und abends auffalse
.
Ich merke mir den aktuelle Zählerstand des Stromzählers und berechne mit diesem und dem zuletzt gemerkten Stand den zwischenzeitlichen Verbrauch.
Wenn man tatsächlich nur Tag/Nacht unterscheiden will, ist das Ganze noch etwas einfacher.
Wenn der Wert auftrue
wechselt, wurde es gerade Tag. Dann ist der ermittelte Verbrauch der Nachtverbrauch.
Wechselt der Wert hingegen auffalse
, wird es Nacht und wir haben den Tagverbrauch.
Am Ende schreiben wir noch den jetzigen Zählerstand weg, damit wir den für den nächsten Wechsel zwischen Tag und Nacht zur Verfügung haben.
Den Timeout kann man sich dann auch schenken, da der Trigger ja nur genau 2x am Tag feuert.
-
@codierknecht Vielen Dank für die Erläuterung. Habe jetzt folgendes Blockly:
Mal abwarten, ob es wie gewünscht arbeitet. Ich nutze den Timeout da ich erfahren möchte, wie viel Strom verbraucht (ja ja, er wird ja nicht verbraucht) wird wenn keine PV Anlage arbeitet.
VG
srkonus -
@srkonus
Ich sehe dort mehrfach "Wert vom Objekt ID 'Zaehlerstand'".
Sind das unterschiedliche DP's?
Wenn nicht, erhältst Du als Ergebnis immer 0 (Zaehlerstand - Zaehlerstand).Arbeite mit Variablen.
Hier mal ein Vorschlag mit 2 Optionen.
Entweder erhältst Du nur den Verbrauch im letzten Zeitraum ohne PV, oder Du addierst im DP "Nachtverbrauch" alles was ohne PV so verbraucht wird.
Du darfst dabei selbstverständlich nur eine der beiden Optionen verwenden.Dazu benötigst Du auch noch einen der bekannten History-Adapter (SQL, Influx, History). Sonst musst Du das ja ständig im Blick haben
-
@codierknecht Wo kommt die Variable "Wert" her und welchen Wert hat es? Sehe nicht, das die Variable vorher gesetzt wird.
-
@srkonus
Das ist keine Variable, sondern ein Baustein aus dem Bereich "Trigger".
Nach dem Hinzufügen kannst Du von "Objekt ID" auf "Wert" ändern.
Das kannst Du in jedem Objekt-Trigger so verwenden, da es unsinnig wäre hier nochmal mit "Wert von" zu arbeiten. Das kann nämlich nicht nur zu unerwünschten Ergebnissen führen (Asynchron), sondern ist auch nicht sonderlich performant. Der Trigger kennt ja bereits sein zugehöriges Objekt. -
@codierknecht Bin ehrlich, hab ich nicht verstanden. Habe dein Script Beispiel jetzt mal nachgebaut, werde es morgen beobachten - jetzt ist es draußen zu dunkel
-
@srkonus
Ich häng Dir hier mal das Script an.Der gezeigte Block hängt nicht ohne Grund im Bereich "Trigger", da er direkt mit dem darüber liegenden Trigger-Block zu verwenden ist.
Wenn ein Trigger feuert, sind so ziemlich alle Eigenschaften des zugehörigen Objektes bekannt.
Es macht also nicht wirklich Sinn, z.B. die Objekt-ID, den Namen oder eben den Wert des feuernden Objektes nochmal über "Wert von" zu lesen.