NEWS
Stromverbrauch protokollieren
-
@codierknecht
DP sind Datenpunkte? Was ist Blockly? Einen Adapter namens Blockly finde ich nicht, da wird mir eine Javascript Skriptausführung angeboten. Ist es das?mfg
Special_B
-
@special_b
Blockly generiert Dir JavaScript. Die meisten kommen damit besser zurecht, aber wenn Dir JS lieber ist, kannst Du natürlich auch gleich mit JS da rangehen.
Blockly ist kein Adapter, sondern wird mit JavaScript "mitgeliefert".
Und ja - ein "DP" ist ein Datenpunkt.
Ich habe davon 3, um damit alles zu protokollieren was ich so brauche.- Aktueller Zählerstand
- Laufender Tagesverbrauch
- Berechneter Tagesverbrauch. Der wird nachts geschrieben und historisiert.
-
Danke. Aber ich komme da nicht weiter.
Bei mir sieht es aktuell so aus:
Soweit ich bisher duchgestiegen bin, müssen die Elemente verbunden werden, oder? Bisher müsste das so funktionieren:
Wenn sich das Objekt 1_8_0__255 geändert hat, müsste die Variable NeuerZählerstand den neuesten Zählerstand bekommen.
Aber wie kann ich die Berechnung dann damit verbinden? Wie bekomme ich das Ergebnis in die Variable LetzterVerbrauch? Wie kann ich dann die Rücksetzung des alten Zählerstandes noch mit dran hängen?
mfg
Special_B
-
@special_b
1.) Du solltest die Variable nicht mit „Wert von“ besetzen, sondern mit dem Baustein „Wert“. Der verbirgt sich bei den Triggern und heißt zunächst „Objekt ID“.
2.) Dann folgt ein „Setze Letzter_Verbrauch auf Neuer_Zaehlerstand - Alter_Zaehlerstand“
3.) Wenn Duden Verbrauch historisieren willst, kannst Du ihn dann in einen eigenen DP schreiben.Leider alles ohne Bild. Bin bis Montag meilenweit weg von meinem ioB
Vielleicht kann ja jemand aushelfen -
Danke. So sieht es jetzt aus:
Wie bekomme ich dann noch den Zählerstand in den Wert?
Und was muss ich beim Datenpunkt noch mit reinschreiben dass ich den Verbrauch historieren kann?mfg
Special_B
-
@special_b sagte in Stromverbrauch protokollieren:
Wie bekomme ich dann noch den Zählerstand in den Wert?
aktualisiere Datenpunkt mit letzter Verbrauch
-
Irgendwie kann ich auch nicht testen, die Javascript Instanz lässt sich nicht aktivieren. Hm.
Ich habe kaum was laufen aber der RAM ist trotzdem ziemlich voll.
Da bin ich schwer am überlegen ob ich wirklich den Raspi wegtuen soll und lieber auf dem alten Mac Mini eine VM mit irgendeinem Linux aufsetzen sollte. Da hätte ich ein bisschen mehr RAM.
mfg
Special_B
-
@special_b wahrscheinlich hat sich die Instanz beendet, da ein Skript Amok läuft.
Das sollte dann auch im log stehen. -
-
-
@special_b
So, bin wieder am StartFangen wir mal bei Adam und Eva an:
Dein Zählerstand kommt schon als absoluter Wert? Du musst also keine Impulse zählen?Was willst Du denn alles historisieren?
Den Tagesverbrauch? Den Verbrauch in einer bestimmten Zeiteinheit? Die bezogene Leistung zwischen zwei Zählerständen? -
@codierknecht
Ja, der Zählerstand wird vom Smartmeter Adapter bereits als absoluter Wert mit 4 Kommastellen ausgelesen. Seit ich den funktionierenden Pin bekommen habe läuft das.Tagesauswertungen liefen bereits von Sourceanalytics, hab ich aber aktuell wieder rausgenommen.
Am liebsten wäre mir, wenn ich eine Tagesverlaufskurve erstellen könnte. Also alle 10 oder 15 Minuten eine Säule im Diagramm oder eben ein Punkt auf der Linie wieviel Strom bezogen wurde.
Dann kann man ja immer noch leicht aus den Werten den Tagesverbrauch protokollieren.
mfg
Special_B
-
@special_b sagte in Stromverbrauch protokollieren:
Also alle 10 oder 15 Minuten eine Säule im Diagramm oder eben ein Punkt auf der Linie wieviel Strom bezogen wurde.
so?
das ist einfach live der Wert vom Smartmeter alle 6 Sekunden (und vom Wechselrichter)
-
Also ich mache es so, dass ich zwischen zwei Impulsen die Zeit ermittle und mir damit die während der Impulse (durchschnittlich) bezogene Leistung errechne.
Den Tagesverbrauch logge ich auch noch, auch wenn das in SA schon drin ist. Was man hat, hat manDazu habe ich verschiedene Datenpunkte:
- Aktuelle Leistung
Wird mit der durchschnittlich zwischen 2 Impulsen bezogenen Leistung gefüttert - Aktueller Zählerstand
Benötige ich, da ich Impulse zähle. Fällt bei Dir weg - Laufender Verbrauch
Zählt am Tag den auflaufenden Verbrauch - Berechneter Tagesverbrauch
Wird nachts geschrieben und historisiert
Wenn Du bei Dir auf die Änderung des Zählerstandes triggerst, kannst Du über den Baustein
Wert
den aktuellen Stand und überVorheriger Wert
den vorherigen Wert ermitteln.
ÜberZeitstempel
undVorheriger Zeitstempel
kommt man (mit einfacher Substraktion) an die verstrichenen Sekunden. Daraus die Leistung zu errechnen ist dann simpel.
Die kann man dann historisieren und 'ne schöne Grafik bauen, um die bezogene Leistung im Tagesverlauf darzustellen. - Aktuelle Leistung
-
Alle 6 Sekunden brauche ich eigentlich nicht, mir würde alle 10 Minuten oder so reichen. Also am besten nach Zeitplan, um 0:00 Uhr das erste mal, um 23:50 das letzte mal. Dann könnte man um 0:00 Uhr auch den Tagesverbrauch speichern.
Was ich momentan nicht ganz so verstehe ist bei meiner Zeile: Setze NeuerZählerstand auf Wert: Wie kann ich da angeben dass hier der Wert der Objekt ID vom Verbrauchszähler genommen wird?
Und wie komme ich dann mit dem Datenpunkt weiter sodass dann der Wert historisiert werden kann?mfg
Special_B
-
@special_b sagte in Stromverbrauch protokollieren:
Was ich momentan nicht ganz so verstehe ist bei meiner Zeile: Setze NeuerZählerstand auf Wert: Wie kann ich da angeben dass hier der Wert der Objekt ID vom Verbrauchszähler genommen wird?
So wie das in Deinem Script aussieht, ist es relativ sinnbefreit.
Du hast doch schon den jeweils absoluten Zählerstand vorliegen. Also brauchst Du da ja nix an den DP ändern.
Was Du brauchst ist ein DP um den Verbrauch zu loggen.
Du musst Dir also unterhalb von0_userdata.0
einen numerischen DP anlegen, in den Du jeweils den ermittelten Verbrauch im Zeitraum schreibst.Schritt für Schritt - programming for runaways
- Die Variable
verbrauch
wird beim Start des Scriptes auf 0 gesetzt und in die Variablezaehlerstand
der aktuelle Stand Deines Zählers eingelesen. - Alle 10 Minuten wird vom jetzigen Zählerstand der zuletzt gemerkte Wert abgezogen.
Das ist der Verbrauch in den letzten 10 Minuten. - In der Variablen
zaehlerstand
wird jetzt der aktuelle Wert "gemerkt".
Der wird ja für den nächsten Durchlauf in 10 Minuten wieder benötigt. - In den DP für den Verbrauch wird jetzt der ermittelte Wert eingetragen.
Diesen DP musst Du historisieren!
Den Tagesverbrauch sollte Dir SourceAnalytics ja bereits sauber protokollieren.
Ich hoffe das war jetzt einigermaßen verständlich
- Die Variable
-
@special_b sagte in Stromverbrauch protokollieren:
Alle 6 Sekunden brauche ich eigentlich nicht,
das ist halt das Intervall in dem die Daten aus dem Smartmeter kommen.
Da braucht es dann keine weitere Logik, DPs usw.@special_b sagte in Stromverbrauch protokollieren:
mir würde alle 10 Minuten oder so reichen
Dann musst du Scripte bemühen.
So ganz habe ich noch nicht verstanden was du wirklich erreichen willst, wenn du
@special_b sagte in Stromverbrauch protokollieren:
meinen Stromverbrauch analysieren um einen PV Akku zu planen.
willst.
Wofür brauchst du dann die Lastverteilung?
zum einen ist die Tagesenergie interessant um die Kapazität zu planen, zum anderen die Spitzen um die maximale notwendige Entladeleistung zu kennen.
Weiterhin die Einspeisung pro Tag, weil das die höchstmögliche Lademenge wäre. -
Danke erstmal für euere Antworten.
Mir ist da vorhin noch was durch den Kopf gegangen. Wie bekomme ich den z.B. in History bzw. Flot die Daten? Werden da Grafiken erzeugt?
Wäre es nicht möglich, alle 10 Minuten den Verbrauch in eine CSV Datei zu schreiben und diese dann vom Mac auslesen zu lassen?
Mein IOBroker läuft mittlerweile auf einem Mac und dort könnte ich die Daten dann aus einer CSV Datei in Numbers importieren und dort weiter verarbeiten.Würde der CSV Export funktionieren?
mfg
Special_B
-
@special_b sagte in Stromverbrauch protokollieren:
Wäre es nicht möglich, alle 10 Minuten den Verbrauch in eine CSV Datei zu schreiben und diese dann vom Mac auslesen zu lassen?
Klingt wie "von hinten durch die Brust ins Auge".
Ich lade die in MariaDB geloggten Daten in Grafana und zeige die dort erzeugten Grafiken in der Vis an.
Geht natürlich auch mit Flot oder mit E-Charts. -
Ok, wenn ihr meint dass das mit einer CSV nichts ist, dann halt so.
Ich habe das Skript nachgebaut:
Bei der letzten Zeile habe ich eine Weile gebraucht. Laufender_Verbrauch habe ich ewig gesucht und das mit dem Datenpunkt "unterhalb 0_userdata.0 hab ich auch nicht verstanden was das sein soll. Aber irgendwann hab ich mir fast gedacht, dass das zusammenhängen muss. Dann hab ich 0_userdata gefunden und konnte da tatsächlich einen Datenpunkt anlegen. Zustandstyp Number ist richtig, oder?
Dann lasse ich das Skript mal laufen und beobachte diesen Datenpunkt.
Dann muss ich halt mal schauen wie ich daraus dann ein Diagramm erstellen kann.Danke euch schon mal.
Edit:
Ich bekomme Warnmeldungen im Log:
2023-01-05 18:10:00.008 - warn: javascript.0 (519) State "Object ID" not found 2023-01-05 18:10:00.010 - warn: javascript.0 (519) at setState (/usr/local/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1719:20) 2023-01-05 18:10:00.010 - warn: javascript.0 (519) at Object. (script.js.Stromzaehler_CSV:9:3) 2023-01-05 18:10:00.010 - warn: javascript.0 (519) at Job.job (/usr/local/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34) 2023-01-05 18:10:00.010 - warn: javascript.0 (519) at Job.invoke (/usr/local/iobroker/node_modules/node-schedule/lib/Job.js:171:15) 2023-01-05 18:10:00.010 - warn: javascript.0 (519) at /usr/local/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28 2023-01-05 18:10:00.010 - warn: javascript.0 (519) at Timeout._onTimeout (/usr/local/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7) 2023-01-05 18:10:00.011 - warn: javascript.0 (519) at listOnTimeout (node:internal/timers:564:17) 2023-01-05 18:10:00.011 - warn: javascript.0 (519) at processTimers (node:internal/timers:507:7)
Das ist doch wohl nicht normal, oder? Und das Skript muss ich noch ein bisschen umbenennen. Daran sollte es aber nicht liegen.
mfg
Special_B