- Home
- Deutsch
- Praktische Anwendungen (Showcase)
- Energymanagement PV/Solar: Nulleinspeisung
Energymanagement PV/Solar: Nulleinspeisung
-
Hallo Forum,
ich bin neu hier (was der erste sicher schon gemerkt hat).
Motivation für IOBroker war meine PV Anlage (Balkonkraftwerk).Ich wollte mit den mir gegebenen Möglichkeiten eine Nulleispeisung realisieren und diese Visualiseren.
Folgendes hab ich am Start:- PV Anlage (Bosswerk BW-MI 600 Wechselrichter (WR))
- Fritz Dect Steckdosen
- IOBroker läuft mit Visualisierung und paar Adaptern
- Überschuss-Abnehmer (u.a. mehrere Elektro-Boiler, im Sommer Pool)
Was will ich nur ungerne dazu kaufen:
- Smart / EnergyMeter
- Hersteller-Boxen, die alle ein bisschen was können aber ned alles
Was möchte ich realisieren:
- Visualisierung der Stromerträge (aktuelle Leistung und Summe, Grafische Anzeige)
- Ein/Aus Schalten verschiedener Verbraucher
- Strategie: Nulleinspeisung
Bislang bin ich so weit gekommen:
- Anzapfen der Fritz-Steckdose(n) und optisch stümperhafte Visualisierung (aktuell, gesamt, GRafik)
- Authorisierungs-Error bei der internen Website des Wechselrichters
Update 10.12.:
Im VGL zur Fritz Steckdose ist mir das Auslesen aus dem WR/Portal zu umständlich und am Ende des Tages auch zu ungenau da teilweise bis zu 30 Minuten kein Update. Thema erstmal vertagt und Konzentration auf Überschusssteuerung:
- Überschuss-Anschalt-Kanditaten: 6x Heizstab zwischen 1,5 und 3kW
- Über-Nacht-Ausschalt-Kandidaten: 2v3 Phasen komplett (astronomisch oder Bettgeh-gesteuert), Umbau Beleuchtung etc auf dritte Phase
- Evtl Umbau PV komplett auf Fassade (minumum fürn Winter), ggf ohne WR nur auf DC (die Heizstäbe sollten mit DC auch zurecht kommen)
-
@jheide said in Energymanagement PV/Solar: Nulleinspeisung:
Authorisierungs-Error bei der internen Website des Wechselrichters
Das kannst du ggf. mittels den Chrome, oder Edge Untersuchungstools im Reiter Netzwerk und unter dem Header herausfinden. Beim Login schauen was er da so im form überträgt und das vor dem parsen über Javascript abrufen (quasi vorher einloggen)
-
@jheide sagte in Energymanagement PV/Solar: Nulleinspeisung:
Balkonkraftwerk
@jheide sagte in Energymanagement PV/Solar: Nulleinspeisung:
mit den mir gegebenen Möglichkeiten eine Nulleispeisung realisieren
grundsätzlich sollte ein Balkonkraftwerk so dimensioniert sein, dass es gar nicht einspeisen könnte.
Ansonsten könnte es Probleme bei der Anmeldung beim Netzbetreiber geben was den Umfang der Auflagen angeht.@jheide sagte in Energymanagement PV/Solar: Nulleinspeisung:
Fritz Dect Steckdosen
können die auch "negativen" Strom messen?
-
@homoran said in Energymanagement PV/Solar: Nulleinspeisung:
grundsätzlich sollte ein Balkonkraftwerk so dimensioniert sein, dass es gar nicht einspeisen könnte.
Ansonsten könnte es Probleme bei der Anmeldung beim Netzbetreiber geben was den Umfang der Auflagen angeht.Das ist nicht richtig. Es gibt mittlerweile (je nach VNB) vereinfachte Anmeldeformulare für solche Steckerfertige Solaranlagen bis 600W. Ganz realistisch: Wie viel Watt wird da zu Spitzenzeiten in das Netz eingespeist? Wenn er eine Grundlast von 200-300W hat, dann bleiben maximal 300-400W (theoretisch) über maximal 3 Stunden, die er dem VNB schenkt (wird nicht vergütet). Das geht im Netz unter, weil das ja nicht jeder macht und genau deswegen soll man das auch melden (nicht genehmigen lassen). Zudem möchte der TO genau das vermeiden und seine Eigennutzung erhöhen (kann man auch Nulleinspeisung nennen), also zurück zum Thema
@homoran said in Energymanagement PV/Solar: Nulleinspeisung:
@jheide sagte in Energymanagement PV/Solar: Nulleinspeisung:
Fritz Dect Steckdosen
können die auch "negativen" Strom messen?
Ja. Nicht nur die, z.B. Shellys auch.
-
bzgl dem auslesen des WRs habe ich im Moment keine Ahnung wie ich da weiter kommen soll, bin da noch zu grün hinter den Ohren. Den Punkt Webseite untersuchen hatte ich bereits erkundet, ohne grossen Erfolg.
ABER:
ich habe ne alternative gefunden, die mir eigentlich noch besser gefallen würde. Der WR kann die Daten an 2 Senken senden, also ned nur nach China sondern auch wo anders hin (also in meinem Fall an den IOBroker). Da wäre eben die Frage, wie ich so ne Senke bauen kann.- "Etwas" müsste auf nem bestimmten Port "hören" und das was ankommt verarbeiten können (hab hier als BSP die 222 und Port 8888 mal eingetragen um zu mindest die FW entsprechend am IOBroker einstellen zu können)
-
Die meisten messenden Steckdosen geben die Leistungswerte aus, allerdings ohne Vorzeichen. Denen ist es egal, ob die Leistung rein oder raus geht. Die Phasenbeziehung wird nicht so genau ausgewertet und vom Poynting Vektor wisen die nicht. Gilt auch für Shelly
Die teure AVM Dect 210 schaltet zweipolig ab, was von Vorteil sein kann. Es gibt Wechselrichter, die bei einpoligem Abschalten unter Last den FI auslösen. Mit einer zweipoligen Abschaltung sollte das besser sein.Für Nulleinspeisung entscheidend ist der Stromzähler des EVU. Bekommst Du dessen Werte?
Falls Smartmeter in der Ausprägung "moderne Messeinrichtung", dann diesen einlesen mit dem Smartmeter Adapter.
Je nach verbautem Zähler können die negative Werte vorzeichenrichtig übertragen oder auch nicht. Es ist sehr hilfreich, wenn die es können.Dann dockst Du an diesen Datenpunkt an und an den Datenpunkt der messenden Dose, die die Solarleistung mißt
Wenn Du den Stromzähler schon einige Zeit beobachtest, dann kennst Du Deinen Mininmalvrbrauch.
Solange Dein Solarmudul weniger als Dein Minimalverbrauch generiert, machst Du gar nichts und deaktivierst das Energiemanagement.
Sobald Dein Modul mehr produziert, dann kannst Du einen Regler implementieren, der dafür sorgt, daß der Stromzähler nie negative Werte bringt. Je nachdem wie schnell und feinfühlig Du Deine Verbraucher steuern kannst, peilst Du einen Wert von vieleicht 30W an. -
@klassisch said in Energymanagement PV/Solar: Nulleinspeisung:
Die meisten messenden Steckdosen geben die Leistungswerte aus, allerdings ohne Vorzeichen. Denen ist es egal, ob die Leistung rein oder raus geht. Die Phasenbeziehung wird nicht so genau ausgewertet und vom Poynting Vektor wisen die nicht. Gilt auch für Shelly
Die teure AVM Dect 210 schaltet zweipolig ab, was von Vorteil sein kann. Es gibt Wechselrichter, die bei einpoligem Abschalten unter Last den FI auslösen. Mit einer zweipoligen Abschaltung sollte das besser sein.Für Nulleinspeisung entscheidend ist der Stromzähler des EVU. Bekommst Du dessen Werte?
Falls Smartmeter in der Ausprägung "moderne Messeinrichtung", dann diesen einlesen mit dem Smartmeter Adapter.
Je nach verbautem Zähler können die negative Werte vorzeichenrichtig übertragen oder auch nicht. Es ist sehr hilfreich, wenn die es können.Dann dockst Du an diesen Datenpunkt an und an den Datenpunkt der messenden Dose, die die Solarleistung mißt
Wenn Du den Stromzähler schon einige Zeit beobachtest, dann kennst Du Deinen Mininmalvrbrauch.
Solange Dein Solarmudul weniger als Dein Minimalverbrauch generiert, machst Du gar nichts und deaktivierst das Energiemanagement.
Sobald Dein Modul mehr produziert, dann kannst Du einen Regler implementieren, der dafür sorgt, daß der Stromzähler nie negative Werte bringt. Je nachdem wie schnell und feinfühlig Du Deine Verbraucher steuern kannst, peilst Du einen Wert von vieleicht 30W an.--> Danke für die Ausführungen, ich möchte mir aber vorerst den SMART METER / ENERGY METER sparen und ich habe noch einen analogen Zähler (gibts ja tolles bastelprojekt von haus-automation, aber i bin mir ned sicher, ob des nicht nur den VERBRAUCH kann und nicht die LEISTUNG.) Und des will ich mir vorerst auch nich "sparen"
--> Wintermodus: Nulleinspeisung klappt von alleine, da hast du recht
--> Sommermodus: ich kenne meinen durchschnittlichen Hausverbrauch, der schwankt aber aufgrund Herd, Geschirrspüler und Wama/Trockner gewaltig auf die konkrete Stunde bezogen
--> Schmalspurregelung: nehme minimum wert für Hausverbrauch, und experimntiere dann mit Verbrauchern. Und setze zu den typischen Spitzenzeiten die Regelung aus.Ich aktualisiere mal noch den ersten Thread um den Zähler.
-
@jheide sagte in Energymanagement PV/Solar: Nulleinspeisung:
ich kenne meinen durchschnittlichen Hausverbrauch, der schwankt aber aufgrund Herd
der wird mehrphasig angeschlossen sein, dein Balkonkraftwerk nur einphasig.
Auch die anderen Geräte können an anderen Phasen hängen.Ist für den Zähler irrelevant, da dieser über alle Phasen saldierend misst.
@jheide sagte in Energymanagement PV/Solar: Nulleinspeisung:
bin mir ned sicher, ob des nicht nur den VERBRAUCH kann und nicht die LEISTUNG
Wo ist da für dich der Unterschied?
@jheide sagte in Energymanagement PV/Solar: Nulleinspeisung:
habe noch einen analogen Zähler
die zeigen natürlich keine Einspeisung an. Zumindest heute noch laufende Ferraris-Zähler sollten eine Rücklaufsperre haben
-
@jheide said in Energymanagement PV/Solar: Nulleinspeisung:
"Etwas" müsste auf nem bestimmten Port "hören" und das was ankommt verarbeiten können
Schau dir mal folgendes Projekt an: https://github.com/XtheOne/Inverter-Data-Logger
Du musst ne Lösung für die Solarman Daten finden. Wenn das Auslesen mit o.g. funktioniert, könnte man (du) das mit etwas programmieren so anpassen, dass es die Daten in iobroker Datenpunkte schreibt. Dort gibt es ja schon ein Plugin für domoticz...
Eine weitere Alternative wäre, jemand schreibt einen Adapter für die Solarman Plattform und man ruft da die Werte ab, aber das hat dementsprechend Verzögerung und wäre nicht für eine Nulleinspeisung geeignet.Ich weiß nicht ob es vielleicht einfacher wäre die Werte aus der Website zu Parsen...
-
@h07d0q Der Inverter ist nicht sein Problem. Das erledigt die messende Steckdose. Ein Inverter könnte das vielleicht etwas genauer, oder könnte das pro Panel. Aber die Info, die er von den Modulen braucht hat er: Was liefern die Module
Um aber Nulleinspeisung "garatieren" zu können, wird der Zählerwert gebraucht. Mein früherer Ferraris war aus 1971 und hatte keine Rücklaufsperre lauf Aufdruck. Hat man damals nicht gebraucht. Die Solarzellen aus dieser Zeit waren leftover der Raumfahrt und haben die Energie zu ihrer Produktion nie mehr eingespielt. Also keine Gefahr der Einspeisung ins Stromnetz.
Letztes Jahr wurde der wegen End of Life getauscht gegen eine moderne Meßeinrichtung, die saldierend mißt (wie wohl die alle neueren Zähler), eine elektronische Rücklaufsperre hat (Symbol) und vorzeichenrichtig mit dem smartmeter Adapter kommuniziert.
Es gibt verschiedene Möglichkeiten, die Leistung eines Ferraris-Zählers zu ermitteln. Typischerweise mit Lichtschranken. Habe ich aber nie gemacht, da Gefummel und ich hielt die Messung (fälschlicherweise) für uninteressant - wie ich jetzt mit Smartmeter-Adapter weiß.Man kann aber auch im Winter mal 600W produzieren. Wenn dann der Hausverbrauch kleiner ist, speist man ein.
Wenn man die Einspeisung verhindern will, braucht man die Momentanleistung des Stromzählers.
Andere Lösungen sind mehr oder weniger Raterei, die auch nach hinten losgehen kann - also in mehr Verbrauch münden kann.
Wenn man beispielsweise einen Ruheverbrauch zwischen 180W und 250W hat und von der Sonne mal 500W kommen, speist man ein. Es könnte aber auch Heizung und Kühlschrank laufen und dann läge man bei 600W Verbrauch und man würde nicht einspeisen.
Ohne Wissen über den aktuellen Verbrauch oder die Gesamtsumme (= Wurzelzähler) wird das schwierig.
Man könnte versuchen, einige typische Verbraucher wie Heizung, Kühlschrank, Waschmaschine etc. mitzubilanzieren. Macht viel Arbeit und bleibt löchrig. -
@klassisch sagte in Energymanagement PV/Solar: Nulleinspeisung:
Mein früherer Ferraris war aus 1971
dann hast du aber 1988 schon den neuen bekommen?
Die Eichgültigkeitsdauer ist 16 Jahre für Elektrizitätszähler mit Induktionswerk (mit Läuferscheibe)
https://de.wikipedia.org/wiki/EichgültigkeitsdauerNur bei
Bei bestandener Stichprobenprüfung verlängert sich die Eichgültigkeit um jeweils die halbe Eichgültigkeitsdauer
ich staune immer wieder wie unterschiedlich so etwas gehandhabt wird
-
@klassisch said in Energymanagement PV/Solar: Nulleinspeisung:
@h07d0q Der Inverter ist nicht sein Problem. Das erledigt die messende Steckdose. Ein Inverter könnte das vielleicht etwas genauer, oder könnte das pro Panel. Aber die Info, die er von den Modulen braucht hat er: Was liefern die Module
--> Inverter und Steckdose sollte beide unabhängig voneinander funktionieren.
--> Eigentlich will ich genau den Bosswerk Inverter direkt anzapfen können, da der die besten Werte im Moment hat was Modulgröße und MPPT Spannungsbereich hat.
--> Soll am Ende auch auf andere Hasuhalte übertragbar sein ggf sogar übers Internet dann auf meinen IOBroker (so für Familienmitglieder mit ohne Handwerklichem Geschick) -
@jheide ich würde die Sache erstmal anmelden. Denn dann kann es sein, dass dein Stromzähler getauscht wird vom Netzbetreiber, ohne dass du etwas zahlen musst. Und vermutlich wirst du den neuen digitalen Zähler dann auch auslesen können.
-
@klassisch said in Energymanagement PV/Solar: Nulleinspeisung:
Der Inverter ist nicht sein Problem
Doch, steht ja ganz unten:
@jheide said in Energymanagement PV/Solar: Nulleinspeisung:
Woran scheitere ich aktuell:
Die Website des WR benötigt einen Login, danach wäre es vermutlich "nur" noch ein parsen der HTML SeiteAlles andere was ihr hier schreibt ist sowas von Offtopic...
@jheide Ich habe dir zwei Wege vorgeschlagen. Schau sie dir an. Kann dir ggf. bei der Webseite des WR helfen, nur über den Chat ist das schwierig. Vielleicht in Discord?
-
@h07d0q sagte in Energymanagement PV/Solar: Nulleinspeisung:
Alles andere was ihr hier schreibt ist sowas von Offtopic...
Sorry, dann habe ich den Titel
"Energymanagement PV/Solar: Nulleinspeisung "
und
Ein/Aus Schalten verschiedener Verbraucher
Strategie: Nulleinspeisungbzw. deren Bedeutung nicht richtig eingeordnet.
-
@h07d0q sagte in Energymanagement PV/Solar: Nulleinspeisung:
Alles andere was ihr hier schreibt ist sowas von Offtopic...
inwiefern?
Hier geht es darum ein Balkonkraftwerk mit allen notwendigen regulatorischen und technischen Möglichkeiten zu beleuchten, um anschließend eine Nulleinspeisung regeln zu können
-
Gut, um noch was zum Thema beizutragen, habe ich hier zwei von mir geschriebene Blocklys für euch.
- Blockly:
Die notwendigen Datenpunkte vorher anlegen
- MomentanwertErtrag (PV Momentanleistung)
- MomentanwertNetz (Smartmeter Momentanleistung über SML ausgelesen und einfach in den DP kopiert; Smartmeter zeigt Negativwerte bei Überschuss)
- MomentanwertGesamtverbrauch (Netz + PV)
- MomentanwertÜberschuss (negativer MomentanwertNetz)
- MomentanwertEigenverbrauch (bei Überschuss gleich Gesamtverbrauch; wenn MomentanwertNetz positiv nur Momentanwert PV)
- Berechnung der kWh für jeden einzelnen Momentanwert
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="izkgJG]@WDEEpP!/*8~;">ioMomentanwertPV</variable> <variable id="PkHJv!pTWh5?3nxx]llx">idPower</variable> <variable id="k:x2GxV0yr_4bxE=fy6F">idEnergy</variable> <variable id="?UBsG=y}eGCj9#{/%}JJ">ioMomentanwertNetz</variable> <variable id="Q3-:px;|?IAa-}L]9kty">ooMomentanwertNetz</variable> <variable id="p0wl^WGra1tD0aEf5Q}5">ooEnergieNetz</variable> <variable id="3S6*S2zc7FI;a4U%b.1I">ooMomentanwertGesamtverbrauch</variable> <variable id="llyT,cpBv81et;*xDA?A">ooEnergieGesamtleistung</variable> <variable id="UfA3$=x:6j@Q7/--/`2h">ooMomentanwertErtrag</variable> <variable id=";VhS{UF5HVCr`X)~]K{T">ooEnergieErtrag</variable> <variable id="at6C8ry#oR/wh(q!{hHK">ooMomentanwertEigenverbrauch</variable> <variable id="Vi122v6s//L#`,LZNN^r">ooEnergieEigenverbrauch</variable> <variable id="$bKg1i(J6[[[jf_Pt0!G">ooMomentanwertÜberschuss</variable> <variable id="%z^.9%1Yn=mJlhg{CU[i">ooEnergieÜberschuss</variable> </variables> <block type="variables_set" id="m;Hw?hl(18qe(/zD/.uR" x="62" y="40"> <field name="VAR" id="izkgJG]@WDEEpP!/*8~;">ioMomentanwertPV</field> <value name="VALUE"> <block type="field_oid" id=".Sq$76PP~MM!pC[#/Y)D"> <field name="oid">shelly.0.SHSW-25#68C63AF9DB86#1.Relay0.Power</field> </block> </value> <next> <block type="variables_set" id="DC!nK%Ay!*[`G*Hb_JQb"> <field name="VAR" id="?UBsG=y}eGCj9#{/%}JJ">ioMomentanwertNetz</field> <value name="VALUE"> <block type="field_oid" id="s/3QJ,dTSc@U5Llqr}XX"> <field name="oid">smartmeter.0.1-0:16_7_0__255.value</field> </block> </value> <next> <block type="variables_set" id="$GvaqSv31]X$Vi8(n?uW"> <field name="VAR" id="Q3-:px;|?IAa-}L]9kty">ooMomentanwertNetz</field> <value name="VALUE"> <block type="field_oid" id="H!~DRB..T%_QJJ?#oQ{l"> <field name="oid">0_userdata.0.PV.MomentanwertNetz</field> </block> </value> <next> <block type="variables_set" id="zBdH}Lge{Jz[$D5(g5|B"> <field name="VAR" id="p0wl^WGra1tD0aEf5Q}5">ooEnergieNetz</field> <value name="VALUE"> <block type="field_oid" id="(WLOP*|_f7tV{_+eWw(8"> <field name="oid">0_userdata.0.PV.EnergieNetz</field> </block> </value> <next> <block type="variables_set" id="D8f=Ch/Kx/_e^gW/SplZ"> <field name="VAR" id="3S6*S2zc7FI;a4U%b.1I">ooMomentanwertGesamtverbrauch</field> <value name="VALUE"> <block type="field_oid" id="3C8qMwOP,|uAp/W.qVC;"> <field name="oid">0_userdata.0.PV.MomentanwertGesamtleistung</field> </block> </value> <next> <block type="variables_set" id="{(]Z1_[0^VsI|U}7F-2z"> <field name="VAR" id="llyT,cpBv81et;*xDA?A">ooEnergieGesamtleistung</field> <value name="VALUE"> <block type="field_oid" id="`Y%RF{{~U5DuY}wHt^E6"> <field name="oid">0_userdata.0.PV.EnergieGesamtleistung</field> </block> </value> <next> <block type="variables_set" id="WA8}$f/;NE(n(3-zB})*"> <field name="VAR" id="UfA3$=x:6j@Q7/--/`2h">ooMomentanwertErtrag</field> <value name="VALUE"> <block type="field_oid" id="Lsulr)ug!LB0!5WQ#Xi0"> <field name="oid">0_userdata.0.PV.MomentanwertErtrag</field> </block> </value> <next> <block type="variables_set" id="?LAZWj{XKdBeOk+K]=.#"> <field name="VAR" id=";VhS{UF5HVCr`X)~]K{T">ooEnergieErtrag</field> <value name="VALUE"> <block type="field_oid" id="2*?cX2~2nOCO3usyRcE`"> <field name="oid">0_userdata.0.PV.EnergieErtrag</field> </block> </value> <next> <block type="variables_set" id="VOh$l88,|TgM-Br8N5*y"> <field name="VAR" id="at6C8ry#oR/wh(q!{hHK">ooMomentanwertEigenverbrauch</field> <value name="VALUE"> <block type="field_oid" id="w7KVM)8m)~?vF~(_dEuU"> <field name="oid">0_userdata.0.PV.MomentanwertEigenverbrauch</field> </block> </value> <next> <block type="variables_set" id="%VgeoDvmJ?eE-HRhLZbK"> <field name="VAR" id="Vi122v6s//L#`,LZNN^r">ooEnergieEigenverbrauch</field> <value name="VALUE"> <block type="field_oid" id="F[%w!.$DhIdgis?hyA/="> <field name="oid">0_userdata.0.PV.EnergieErtrag</field> </block> </value> <next> <block type="variables_set" id="gQlVBQO-|lwMcb#e9u[U"> <field name="VAR" id="$bKg1i(J6[[[jf_Pt0!G">ooMomentanwertÜberschuss</field> <value name="VALUE"> <block type="field_oid" id="+y9t+S?9x3D/W`8L6)N^"> <field name="oid">0_userdata.0.PV.MomentanwertÜberschuss</field> </block> </value> <next> <block type="variables_set" id="y)%+KqjQFn7ID+lkF!;F"> <field name="VAR" id="%z^.9%1Yn=mJlhg{CU[i">ooEnergieÜberschuss</field> <value name="VALUE"> <block type="field_oid" id="{@Xm$uF.SL=csDC|NF(E"> <field name="oid">0_userdata.0.PV.EnergieÜberschuss</field> </block> </value> <next> <block type="on_ext" id="Q89%4z()rdZS1X5b+A^)"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="G=8?`s#~Ut?pH;x9NFA|"> <field name="oid">default</field> </shadow> <block type="variables_get" id="Px}MnKP,3KD{~kID|D0q"> <field name="VAR" id="izkgJG]@WDEEpP!/*8~;">ioMomentanwertPV</field> </block> </value> <value name="OID1"> <block type="variables_get" id="MgAp4kGq[H+N*X)RpJM4"> <field name="VAR" id="?UBsG=y}eGCj9#{/%}JJ">ioMomentanwertNetz</field> </block> </value> <statement name="STATEMENT"> <block type="control_ex" id="!yQ4;aibkvpg`CBxqQzR"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="/,v9}nx;CioIGpSNgRni"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="U$MPI`3]vhVFSx10[3U{"> <field name="VAR" id="UfA3$=x:6j@Q7/--/`2h">ooMomentanwertErtrag</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="-D=jWf*EYIH.l)3)JOXQ"> <field name="BOOL">TRUE</field> </shadow> <block type="math_rndfixed" id="(9hU/@P/_r4`whj8UiJ("> <field name="n">1</field> <value name="x"> <shadow type="math_number"> <field name="NUM">3.1234</field> </shadow> <block type="get_value_var" id="ns:ynA5c?/~$X,5!^;wh"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="Li4qOR%0o{uXPbWy:H1/"> <field name="VAR" id="izkgJG]@WDEEpP!/*8~;">ioMomentanwertPV</field> </block> </value> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="v,DOCWi{X5`H}CL1T:`3"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="i~(Nj]MQDIY^T_;dqWzl"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="S{ZzU0e}-Hn;ci4e2AP["> <field name="VAR" id="Q3-:px;|?IAa-}L]9kty">ooMomentanwertNetz</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="math_rndfixed" id="D+D@,SSOM@#O}n*G{g]N"> <field name="n">1</field> <value name="x"> <shadow type="math_number"> <field name="NUM">3.1234</field> </shadow> <block type="get_value_var" id="kIgLHah,fJZ}bsG9W|G9"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="z%nKg}Sqvla43gk+TP[q"> <field name="VAR" id="?UBsG=y}eGCj9#{/%}JJ">ioMomentanwertNetz</field> </block> </value> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="-`OZ2KCKW0g/Fw+H^(=R"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="OWp[|C;Ik;T@^y6Q=Vwk"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="3T{9[k+^1_E[Y5R?#Zc="> <field name="VAR" id="3S6*S2zc7FI;a4U%b.1I">ooMomentanwertGesamtverbrauch</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="math_rndfixed" id="V7dk-f..mDlz2+ctinz}"> <field name="n">1</field> <value name="x"> <shadow type="math_number"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="RQgl2EpgehH(tj]$G!hE"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value_var" id="q}.zZ[Tti*AM`4H4q~TF"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="go-GXpzlVDKA2wrf2BOy"> <field name="VAR" id="?UBsG=y}eGCj9#{/%}JJ">ioMomentanwertNetz</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value_var" id="LJnzkZ]z.{{8ILF5Gn5F"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="~8]pWQx8or~)]fOWiIU_"> <field name="VAR" id="izkgJG]@WDEEpP!/*8~;">ioMomentanwertPV</field> </block> </value> </block> </value> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="bep0(E^LcSQjZ=%oiUo{"> <field name="NUM">0</field> </shadow> </value> <next> <block type="controls_if" id="D`!QwbW8F9imZ8RQOf_;"> <mutation else="1"></mutation> <value name="IF0"> <block type="math_number_property" id="Uasn0252g-cnO0`!@lIj"> <mutation divisor_input="false"></mutation> <field name="PROPERTY">NEGATIVE</field> <value name="NUMBER_TO_CHECK"> <shadow type="math_number" id="x/t$m$d~^];:r4t}I7Ed"> <field name="NUM">0</field> </shadow> <block type="get_value_var" id="ANLj5!{994Ci)hom88.J"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="|MY/.~39D.Cmp9UY3x^i"> <field name="VAR" id="?UBsG=y}eGCj9#{/%}JJ">ioMomentanwertNetz</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="2w^7kbr!a[8QKFzJYD^#"> <field name="COMMENT">Überschuss</field> <next> <block type="control_ex" id=".kIU*93Fp^Kst]u(-)uB"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id=":#,/i}!f.kJZ`dOxsIRA"> <field name="VAR" id="$bKg1i(J6[[[jf_Pt0!G">ooMomentanwertÜberschuss</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="bbN.]ZvNIa.~([%ezG]f"> <field name="BOOL">TRUE</field> </shadow> <block type="math_rndfixed" id="fel784_F!CWA]vohTPJq"> <field name="n">1</field> <value name="x"> <shadow type="math_number" id="*8}]PUg_,p(%Xg4H^R~k"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="f%mD)rl4YnE4r{}e6iIL"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="=yas,#u16i{Agyuo2W]R"> <field name="NUM">1</field> </shadow> <block type="get_value_var" id="Gnbd4RIK-3QGdh$}c}RZ"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="*H]1G16xXC(:rLTdG)(}"> <field name="VAR" id="?UBsG=y}eGCj9#{/%}JJ">ioMomentanwertNetz</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="ecc^M9|X$]S`f6vCpERb"> <field name="NUM">-1</field> </shadow> </value> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="(sLcC0e}o~#tAT}.)v{b"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="#jEWHj8OYUM*~Z8^X0pz"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="||9MAx5iNX]`n/q}$w%v"> <field name="VAR" id="at6C8ry#oR/wh(q!{hHK">ooMomentanwertEigenverbrauch</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="math_rndfixed" id="Gou3meWE5o6J)=Qx^vDY"> <field name="n">1</field> <value name="x"> <shadow type="math_number"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="raqa:GJg8q)|?B%Qk_@u"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="get_value_var" id="t$dt,hI0E^33_ijk.rO7"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="h6UYt4sPO+@3v(=py6*9"> <field name="VAR" id="izkgJG]@WDEEpP!/*8~;">ioMomentanwertPV</field> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id="@`{=eYz*f@COoX_#*{D!"> <field name="NUM">1</field> </shadow> <block type="get_value_var" id="AGeeCoGSTt-|{s?U,;,("> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="xlO43#PZ-(-/Z^iiou1S"> <field name="VAR" id="?UBsG=y}eGCj9#{/%}JJ">ioMomentanwertNetz</field> </block> </value> </block> </value> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="~L}wlG$}`NutF(1T(+mO"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="comment" id="~Tl6}SiA[B?/Ge[Aj4qq"> <field name="COMMENT">kein Überschuss</field> <next> <block type="control_ex" id="$Y09Eao=FiDW[li/1SS."> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id=")5*ui8M7uJ.$up)HYc3%"> <field name="VAR" id="$bKg1i(J6[[[jf_Pt0!G">ooMomentanwertÜberschuss</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="gL)cfGa^S!hf+!4jQk_q"> <field name="BOOL">TRUE</field> </shadow> <block type="math_number" id="+[VAmghxH8cfn:GTB8OT"> <field name="NUM">0</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="XrZrD6JbC.B9k}eMA!hN"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="~%%1IlP6yy@1%X(r*[GD"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="/)e[0Z-xOx.}5wG-jxl#"> <field name="VAR" id="at6C8ry#oR/wh(q!{hHK">ooMomentanwertEigenverbrauch</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="math_rndfixed" id="H7sIENM!lQ-t6.(vs;,O"> <field name="n">1</field> <value name="x"> <shadow type="math_number" id="pg(gf-9:B8Ei$h?XGSv."> <field name="NUM">3.1234</field> </shadow> <block type="get_value_var" id="rb}@?LLu^pn_ohK}Fb`$"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="LP/b]@dl@+XNn@HA:K46"> <field name="VAR" id="izkgJG]@WDEEpP!/*8~;">ioMomentanwertPV</field> </block> </value> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="`m`2MG7`;6SHfuWZ]5gQ"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="procedures_callcustomnoreturn" id="4NPS7?bggL$oA0y|8/UM"> <mutation name="kWh berechnen"> <arg name="idPower"></arg> <arg name="idEnergy"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="!~hSC9J3Uf6#0{Ar#%|v"> <field name="VAR" id="UfA3$=x:6j@Q7/--/`2h">ooMomentanwertErtrag</field> </block> </value> <value name="ARG1"> <block type="variables_get" id="oE|bP5,^{5*:2Bifm=ye"> <field name="VAR" id=";VhS{UF5HVCr`X)~]K{T">ooEnergieErtrag</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="JkjewDAT~3^{cj*I[0#J"> <mutation name="kWh berechnen"> <arg name="idPower"></arg> <arg name="idEnergy"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="60/Dc(/nzA^tLjM=+_a}"> <field name="VAR" id="?UBsG=y}eGCj9#{/%}JJ">ioMomentanwertNetz</field> </block> </value> <value name="ARG1"> <block type="variables_get" id="5o{hbOnwC!#l4j9D1i,$"> <field name="VAR" id="p0wl^WGra1tD0aEf5Q}5">ooEnergieNetz</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="O3-v19Kw0LHCe}Di*:ep"> <mutation name="kWh berechnen"> <arg name="idPower"></arg> <arg name="idEnergy"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="$Ol%U_BAmg`Z1n_R)Pvh"> <field name="VAR" id="3S6*S2zc7FI;a4U%b.1I">ooMomentanwertGesamtverbrauch</field> </block> </value> <value name="ARG1"> <block type="variables_get" id="1fp6*[7d81{[pJju;ef;"> <field name="VAR" id="llyT,cpBv81et;*xDA?A">ooEnergieGesamtleistung</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="1Xf#HNN!9g7Qn?+bmI*="> <mutation name="kWh berechnen"> <arg name="idPower"></arg> <arg name="idEnergy"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="$5S~6Yw^L6jP,CaZ[)v="> <field name="VAR" id="$bKg1i(J6[[[jf_Pt0!G">ooMomentanwertÜberschuss</field> </block> </value> <value name="ARG1"> <block type="variables_get" id="!I#n1|KSvgut?=hBBZGd"> <field name="VAR" id="%z^.9%1Yn=mJlhg{CU[i">ooEnergieÜberschuss</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="o^81W3F{e7Qz?Zy^;,20"> <mutation name="kWh berechnen"> <arg name="idPower"></arg> <arg name="idEnergy"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="x6*g04YU;NLgH_11jLYt"> <field name="VAR" id="at6C8ry#oR/wh(q!{hHK">ooMomentanwertEigenverbrauch</field> </block> </value> <value name="ARG1"> <block type="variables_get" id="{t5msqp_#r:}2)3;ZgUn"> <field name="VAR" id="Vi122v6s//L#`,LZNN^r">ooEnergieEigenverbrauch</field> </block> </value> <next> <block type="schedule" id="I00bCdg5aDfH0YCZY^.Z"> <field name="SCHEDULE">{"time":{"exactTime":true,"start":"00:00"},"period":{"days":1}}</field> <statement name="STATEMENT"> <block type="control_ex" id="Lk@v2y7:xWk}b/66hoEe"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="x{kTqkUr=Grc5]FYI1tC"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="b-$ltTD9au58#yRtY1#6"> <field name="VAR" id="llyT,cpBv81et;*xDA?A">ooEnergieGesamtleistung</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="(2zAoc0-2(#YDikxsHs7"> <field name="BOOL">TRUE</field> </shadow> <block type="math_number" id="oY}_%=ngkMIm/~kB29cu"> <field name="NUM">0</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="A]wbzrB3e)4S#OIs+~BQ"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="(WDur9^Ph%U4tPv[Ie_w"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="3LsdOigJ@qvLI3xBjp:="> <field name="VAR" id=";VhS{UF5HVCr`X)~]K{T">ooEnergieErtrag</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="math_number" id="[yLBAczpsQ,rl3c^H!P0"> <field name="NUM">0</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="zRfEwJ?LeIsxG37!ts=i"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="j:w6xv%_~=%c@an7m3Bw"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="O=bf4/P=|~z^J(-wi2q("> <field name="VAR" id="p0wl^WGra1tD0aEf5Q}5">ooEnergieNetz</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="math_number" id="N^o~`lX[cH%Tzr+05(Yy"> <field name="NUM">0</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="J5[PRk-5-(~76laKZsG."> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="]?1@zcPlBvl;W4xjX|FG"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="0g9+mQNVrYfCsHfkI.HZ"> <field name="VAR" id="%z^.9%1Yn=mJlhg{CU[i">ooEnergieÜberschuss</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="math_number" id="l%v`]{cSaKZpVR[Dd.Qn"> <field name="NUM">0</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="s:UY#M~?Lt1(n-`dIU`C"> <field name="NUM">0</field> </shadow> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="procedures_defcustomnoreturn" id="p|(xFb6nb}3ab{(ZuXW6" x="587" y="1913"> <mutation statements="false"> <arg name="idPower" varid="PkHJv!pTWh5?3nxx]llx"></arg> <arg name="idEnergy" varid="k:x2GxV0yr_4bxE=fy6F"></arg> </mutation> <field name="NAME">kWh berechnen</field> <field name="SCRIPT">Ly9odHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8xNzMwOS9nZWwlQzMlQjZzdC1rd2gtYmVyZWNobmVuLXVuZC1mb3J0bGF1ZmVuZC1zcGVpY2hlcm4vMzg/bGFuZz1kZQ0KDQovL2NvbnN0IGlkUG93ZXIgPSAnamF2YXNjcmlwdC4wLnh4eC5wb3dlcic7ICAvLyBjdXJfcG93ZXINCi8vY29uc3QgaWRFbmVyZ3kgPSAneHh4LmtXaCc7ICAvLyBrV2gNCiANCmNvbnN0IGluaXRpYWxLd2ggPSAwLjA7IC8vIGtXaCBhdCBiZWdpbg0KdmFyIGVuZXJneSA9IDA7DQogDQovLyBFbmVyZ2llLURhdGVucHVua3QgZXJ6ZXVnZW4NCmNyZWF0ZVN0YXRlKGlkRW5lcmd5LCBpbml0aWFsS3doLCB7IHR5cGU6ICdudW1iZXInLCB1bml0OiAna1doJyB9LA0KICAgICgpID0+IGVuZXJneSA9IDEwMDAgKiBnZXRTdGF0ZShpZEVuZXJneSkudmFsDQopOyAvLyBBbmZhbmdzd2VydCBhbnBhc3NlbiAhDQogDQpvbih7IGlkOiBpZFBvd2VyIH0sIGZ1bmN0aW9uIChkcCkgew0KICAgIGVuZXJneSA9IDEwMDAgKiBnZXRTdGF0ZShpZEVuZXJneSkudmFsOyAvL2V2dGwuIHZvcmhhbmRlbmVuIFdlcnQgbGVzZW4NCiAgICBlbmVyZ3kgPSBlbmVyZ3kgKyBkcC5vbGRTdGF0ZS52YWwgKiAoZHAuc3RhdGUudHMgLSBkcC5vbGRTdGF0ZS50cykgLyAzNjAwMDAwOyAvLyBXaA0KICAgIHNldFN0YXRlKGlkRW5lcmd5LCBNYXRoLnJvdW5kKGVuZXJneSkgLyAxMDAwLCB0cnVlKTsgLy8ga1doIG1pdCAzIE5hY2hrb21tYXN0ZWxsZW4NCn0pOw0K</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> </xml>
Eventuell habe ich an der ein oder anderen Stelle einen Denkfehler... die wechselnden Vorzeichen machen es nicht gerade leichter... Die Berechnung der kWh habe ich bisher nicht auf Plausibilität geprüft und der Link der (angepassten) Quelle steckt im Skript. Der Sourceanalytics Adapter ist für mich irgendwie overkill
- Blockly:
-
- Blockly
Benachrichtigung per Telegram wenn Mindest-Überschuss länger als 10 Minuten überschritten ist. Danach wird die Nachricht immer wieder aktulalisiert (bearbeitet). Wird der Mindest-Überschuss länger als 3 Minuten unterschritten, wird die Nachricht gelöscht. Danach geht das Ganze wieder von vorne los. (weiß gerade nicht wie sich das mit dem Timer "nächste Warnung" verhält - das ist ein gewachsenes Skript)
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="+uo*h9CiBC;Z6Tu6|]{-">url</variable> <variable id="t735B|g/I)mmA`_=bQf=">Token</variable> <variable id="OY|-nxmyPkjf5lu#3k4b">MessageID_old</variable> <variable id="[cm_4R;3)cv_BI@^],fP">ÜberschussMin</variable> <variable id="V+u7Uf#;)B4bY+w!q#b:">aktiv</variable> <variable id="Oz_`bUcn~F`@Yx~KX@t6">nächsteAktualisierung</variable> <variable type="timeout" id="minimum-zeit unterschritten">minimum-zeit unterschritten</variable> <variable type="timeout" id="nächste Warnung">nächste Warnung</variable> <variable type="timeout" id="Benachrichtigung">Benachrichtigung</variable> <variable id="UNwn*kL_@D)gcE`$^mO+">ChatID_old</variable> <variable type="timeout" id="timeout">timeout</variable> </variables> <block type="comment" id="`]K4h=n0i;nQJm.g0OXj" x="2213" y="38"> <field name="COMMENT">PV Überschuss</field> <next> <block type="variables_set" id="SPfX1fy;_JV}@tLLLZ}n"> <field name="VAR" id="t735B|g/I)mmA`_=bQf=">Token</field> <value name="VALUE"> <block type="get_value" id="tia~F+^mE`V^WFLpJ]Wt"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Telegram.Token</field> </block> </value> <next> <block type="variables_set" id="pd`+}c6k}RdpIR%g4ty6"> <field name="VAR" id="OY|-nxmyPkjf5lu#3k4b">MessageID_old</field> <value name="VALUE"> <block type="text" id="E~g|;]jTA[oq#Yz0mR@#"> <field name="TEXT"></field> </block> </value> <next> <block type="variables_set" id="#dy/OwG@e1Gn|=N4qwps"> <field name="VAR" id="[cm_4R;3)cv_BI@^],fP">ÜberschussMin</field> <value name="VALUE"> <block type="math_number" id="rcwze5X=CEl8nT|9w[Ne"> <field name="NUM">50</field> </block> </value> <next> <block type="variables_set" id="-I.7v}2OO!agGHfnCF`~"> <field name="VAR" id="V+u7Uf#;)B4bY+w!q#b:">aktiv</field> <value name="VALUE"> <block type="logic_boolean" id="o;=Ft3,44yukRdj~G?b~"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id="`r-=kwrDStf)Yy!^{#fE"> <field name="VAR" id="Oz_`bUcn~F`@Yx~KX@t6">nächsteAktualisierung</field> <value name="VALUE"> <block type="math_number" id="S~aBFESzn3NFyq3;x:bU"> <field name="NUM">0</field> </block> </value> <next> <block type="on_ext" id="YzNQ9Xi|,Zh/V1/8{s89"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="gZimHH#8!L?jYTs)zsi-"> <field name="oid">0_userdata.0.PV.MomentanwertÜberschuss</field> </shadow> </value> <statement name="STATEMENT"> <block type="debug" id="W^E5Um3?2:yK=pF}ZY%q"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="9G|vv.L5YkXn]G0o{+KQ"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="(38u(qHq6[?}kkNJ(~hG"> <mutation items="4"></mutation> <value name="ADD0"> <block type="text" id="zjj{O6r2}[qfrl*owp?f"> <field name="TEXT">Benachrichtigung aktiv: </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="p83c%6d!NT{3`]i;Ypgs"> <field name="VAR" id="V+u7Uf#;)B4bY+w!q#b:">aktiv</field> </block> </value> <value name="ADD2"> <block type="text" id="{GnY!ecGz^3{-n/K9zEk"> <field name="TEXT">; Momentanwert: </field> </block> </value> <value name="ADD3"> <block type="on_source" id="i@W)6eFLrwbMFxXr$~9~"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <next> <block type="controls_if" id=")zjaK4dsMbvEb:e%CzF!"> <mutation elseif="3"></mutation> <value name="IF0"> <block type="logic_operation" id="KjHv~A/949Fv:YQM6fto"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="*p#pWZD_V`eowQoyO$5N"> <field name="OP">GTE</field> <value name="A"> <block type="on_source" id="52^;sStuV4blN{:3!ml-"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="variables_get" id="I%YvNA^e.H6Urv6l2sXM"> <field name="VAR" id="[cm_4R;3)cv_BI@^],fP">ÜberschussMin</field> </block> </value> </block> </value> <value name="B"> <block type="logic_negate" id="YmR9cAnBuNT%mC.WwRun"> <value name="BOOL"> <block type="variables_get" id="XOd+~acw+EeaEGIOYUu@"> <field name="VAR" id="V+u7Uf#;)B4bY+w!q#b:">aktiv</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="j[nFIS)6A2Ie`TyY4myH"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text" id="|2.iafrWY#ZzJ-#oh+)P"> <field name="TEXT">Überschuss</field> </block> </value> <next> <block type="timeouts_cleartimeout" id="zHdYa8zYHU~jnx-x:@nL"> <field name="NAME">minimum-zeit unterschritten</field> <next> <block type="variables_set" id="s|CSMlA/W.o,E@L/@zhq"> <field name="VAR" id="V+u7Uf#;)B4bY+w!q#b:">aktiv</field> <value name="VALUE"> <block type="logic_boolean" id="2)1qcLKEf@M/QBcoPkiu"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="timeouts_settimeout" id="AR[H#0h]{dssZgyT@ViB"> <field name="NAME">nächste Warnung</field> <field name="DELAY">15</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="variables_set" id="vct%etLLl,G!ZQ_FFs.8"> <field name="VAR" id="V+u7Uf#;)B4bY+w!q#b:">aktiv</field> <value name="VALUE"> <block type="logic_boolean" id="UZO9K8,v-^,m{dD@-25h"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="debug" id="TYsUK*8NYmtmO8udIJC@"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text" id="!yWMD;u#|U{A@o)nZ%ak"> <field name="TEXT">nächste Warnung kann kommen</field> </block> </value> </block> </next> </block> </statement> <next> <block type="timeouts_settimeout" id="8DSXrbtsM9;o;LKq@ID`"> <field name="NAME">Benachrichtigung</field> <field name="DELAY">10</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="debug" id="fF$MIEs@DZN}.Dr6mWdh"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text" id="/oiwNq69oO:w!N0y`#qc"> <field name="TEXT">Benachrichtigung (zeitverzögerte)</field> </block> </value> <next> <block type="controls_if" id="JfVueB1$i?*Mabtv,G@_"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="{+rdLns6hK,J{y0Hh!zY"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id=",KkV#(C]EI)^S[M/brw*"> <field name="VAR" id="OY|-nxmyPkjf5lu#3k4b">MessageID_old</field> </block> </value> <value name="B"> <block type="text" id="R7o6ajypmdhH%`oj$QLu"> <field name="TEXT"></field> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id=".KG5zXOq`2aPXSTwix;y"> <field name="INSTANCE"></field> <field name="LOG">debug</field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text"> <field name="TEXT">Vorsicht WW ist bei °C</field> </shadow> <block type="text_join" id="1q)#|2D9M^YSeYDva!dQ"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="0/gGP~oxeP_4ak9Yr58m"> <field name="TEXT">PV-Überschuss: </field> </block> </value> <value name="ADD1"> <block type="on_source" id=":t9Tpf{x1kw/jRAmqV-E"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <next> <block type="variables_set" id="~8O9B)6:$SP1Y3rc/_:x"> <field name="VAR" id="Oz_`bUcn~F`@Yx~KX@t6">nächsteAktualisierung</field> <value name="VALUE"> <block type="math_arithmetic" id="e5lCBAdl:tw8`e;uW:g?"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="on_source" id="wMzhn@fOF3!^lb]Yk]TJ"> <field name="ATTR">state.ts</field> </block> </value> <value name="B"> <shadow type="math_number"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="Nj7vD/D!*rI*@p;UdVC3"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="Q[F=:q;AWWkE?dsSO6Di"> <field name="NUM">1000</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="6nW20c4^%:Jysw0A-$i*"> <field name="NUM">30</field> </shadow> </value> </block> </value> </block> </value> <next> <block type="comment" id="H90jwd1O]T9w*vM7.|#J"> <field name="COMMENT">MessageID für später merken</field> <next> <block type="timeouts_settimeout" id="#!b{mjY%}JF3r6T;Rj[6"> <field name="NAME">timeout</field> <field name="DELAY">1</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="variables_set" id="^CZ{$5}1M-^(5]:d=[ei"> <field name="VAR" id="OY|-nxmyPkjf5lu#3k4b">MessageID_old</field> <value name="VALUE"> <block type="get_value_var" id="$b1ImQg_SiDH`#A6L9T7"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text" id="_%2i%0gQYmWIOJ_z0QBz"> <field name="TEXT"></field> </shadow> <block type="field_oid" id="%6Y`/R^ix0}6G:HgNZXZ"> <field name="oid">telegram.0.communicate.botSendMessageId</field> </block> </value> </block> </value> <next> <block type="variables_set" id="Im!5B9gQ@Z7Rpjj#)w@w"> <field name="VAR" id="UNwn*kL_@D)gcE`$^mO+">ChatID_old</field> <value name="VALUE"> <block type="get_value_var" id=";@@xRpp=^$5icRd*2Q#R"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text"> <field name="TEXT"></field> </shadow> <block type="field_oid" id="Gfwkp!J7JMiJNI`):.la"> <field name="oid">telegram.0.communicate.botSendChatId</field> </block> </value> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="debug" id="7)y`=f09@b4cArc:^3h9"> <field name="Severity">error</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text" id="ZPD$1|_|R%_-CF_9k)/j"> <field name="TEXT">MessageID_old ist nicht leer!!!!</field> </block> </value> </block> </statement> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="sH*,MP%A(B1UdZuvv~GR"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id=")gD@SJYz;4TZ+zY(wc7s"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="ML7uK_3QYuR//_8x%c+X"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="CXI9kLd(/7*Jf4habbl^"> <field name="OP">GTE</field> <value name="A"> <block type="on_source" id="szvmyZHtlNo)c(mUy0Q-"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="variables_get" id=")I2GZ7TTSr=rQlIIbsHI"> <field name="VAR" id="[cm_4R;3)cv_BI@^],fP">ÜberschussMin</field> </block> </value> </block> </value> <value name="B"> <block type="variables_get" id="B[Wk#t79my0{$_v;]`kp"> <field name="VAR" id="V+u7Uf#;)B4bY+w!q#b:">aktiv</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="Xmb~|,r3UO*/0K,DrdQ="> <field name="OP">NEQ</field> <value name="A"> <block type="variables_get" id="YIaz.X?RG;gF!:z$A+~v"> <field name="VAR" id="OY|-nxmyPkjf5lu#3k4b">MessageID_old</field> </block> </value> <value name="B"> <block type="text" id="60?SN$jwQb-_j4GU^~3~"> <field name="TEXT"></field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="h5$qN;rEDymEXg/Ls!AH"> <field name="OP">LTE</field> <value name="A"> <block type="variables_get" id="Y(APA7CD%a1U#Y$a?qS9"> <field name="VAR" id="Oz_`bUcn~F`@Yx~KX@t6">nächsteAktualisierung</field> </block> </value> <value name="B"> <block type="on_source" id="Z*zw,ryx7CD/@|@v.]K~"> <field name="ATTR">state.ts</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="debug" id="9YyYL@FO8*,)-_:KO-J%"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="I]RG6k~V-xqO9g/?r#m]"> <field name="TEXT">test</field> </shadow> <block type="text" id="k9L6%$Nz4ok[OZ89_K*j"> <field name="TEXT">sonst falls message wurde gesendet, Wert aktualisieren.</field> </block> </value> <next> <block type="timeouts_cleartimeout" id="7OE5C[:4MEAgbF..pGmn"> <field name="NAME">minimum-zeit unterschritten</field> <next> <block type="variables_set" id="XwF:)6dY84JyN}BRG?P("> <field name="VAR" id="Oz_`bUcn~F`@Yx~KX@t6">nächsteAktualisierung</field> <value name="VALUE"> <block type="math_arithmetic" id="l|e*4uj5SCH{{ylFgh:s"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="Eq5@Y9VzUr}dSZ+yv~t%"> <field name="NUM">1</field> </shadow> <block type="on_source" id="2*koF3/2pv*-]o,I8D1O"> <field name="ATTR">state.ts</field> </block> </value> <value name="B"> <shadow type="math_number" id="0+N:yZJUl+WEudT3yav)"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="3h4NIV%7pcFiOV^Zqzgs"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="qo)=$$d1NiH%5lN($VSC"> <field name="NUM">1000</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="?*Cx!gU:]T)2,sKq2+t,"> <field name="NUM">15</field> </shadow> </value> </block> </value> </block> </value> <next> <block type="request" id="yh6{#(a!a*zzX.S0O}Jl"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG">debug</field> <value name="URL"> <shadow type="text"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="d`hP9NFCs/O)sRN(5iWy"> <mutation items="8"></mutation> <value name="ADD0"> <block type="text" id="HayC](:j7qa~vXX*Cz*="> <field name="TEXT">https://api.telegram.org/bot</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="5v`R4$$SCz*zHBVTrHR%"> <field name="VAR" id="t735B|g/I)mmA`_=bQf=">Token</field> </block> </value> <value name="ADD2"> <block type="text" id="Ddi{D+zm-4^US]NQkKak"> <field name="TEXT">/editMessageText?chat_id=</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="Cyp+gOM35bp]pi{tonN."> <field name="VAR" id="UNwn*kL_@D)gcE`$^mO+">ChatID_old</field> </block> </value> <value name="ADD4"> <block type="text" id="*-G3B3hFN5w8Em(X]1xf"> <field name="TEXT">&message_id=</field> </block> </value> <value name="ADD5"> <block type="variables_get" id="nj%U(!7{t;K@~NXE,qx/"> <field name="VAR" id="OY|-nxmyPkjf5lu#3k4b">MessageID_old</field> </block> </value> <value name="ADD6"> <block type="text" id="(jvJ80p1|hCYv|r2:sCc"> <field name="TEXT">&text=</field> </block> </value> <value name="ADD7"> <block type="procedures_callcustomreturn" id="P+G[F^$b3kYUu0}6/-4)"> <mutation name="URIencode"> <arg name="url"></arg> </mutation> <value name="ARG0"> <block type="text_join" id="SM8(MQ)c1|w?xjqH;qaO"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="K;e6@]em4{IS6]6+3x/H"> <field name="TEXT">PV-Überschuss: </field> </block> </value> <value name="ADD1"> <block type="on_source" id="ZBo!@07Wskxg)TZmKnK:"> <field name="ATTR">state.val</field> </block> </value> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="IF2"> <block type="logic_operation" id="WO4o%(5EKI4M8KD5M;zl"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id=";=AMP;.Z+9R2$uE=U_{l"> <field name="OP">LT</field> <value name="A"> <block type="on_source" id="Pe)^F$6jv^Uj/=7!,c5%"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="variables_get" id="pn!_b|pHR@9;PEYw#7r["> <field name="VAR" id="[cm_4R;3)cv_BI@^],fP">ÜberschussMin</field> </block> </value> </block> </value> <value name="B"> <block type="variables_get" id="QN{q/2SF|xNy2va!m@?n"> <field name="VAR" id="V+u7Uf#;)B4bY+w!q#b:">aktiv</field> </block> </value> </block> </value> <statement name="DO2"> <block type="timeouts_settimeout" id="pb9p#UNX+Ic$qTJP#C|d"> <field name="NAME">minimum-zeit unterschritten</field> <field name="DELAY">3</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="debug" id="J+en5BYLuXJ:QOji^q:i"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text" id="YZ]8$|Hp^iSG*K$M$?L+"> <field name="TEXT">sonst falls kleiner ÜberschussMin und aktiv</field> </block> </value> <next> <block type="debug" id="l7T~Ynz*guM.E;96*B%~"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text" id="a[d!Q.6r9kK+Z!7jS;7-"> <field name="TEXT">Momentanwert wurde mehr als 3min unterschritten, aktiv=falsch, Benachrichtigung und Warnung Timer stoppen</field> </block> </value> <next> <block type="timeouts_cleartimeout" id="4MZ6w%:YKzCaTKqnH9r4"> <field name="NAME">nächste Warnung</field> <next> <block type="timeouts_cleartimeout" id="mOfFb{Po,d1Py^t@mb;@"> <field name="NAME">Benachrichtigung</field> <next> <block type="variables_set" id="zLg9?*u1BBL}^j%a%l?m"> <field name="VAR" id="V+u7Uf#;)B4bY+w!q#b:">aktiv</field> <value name="VALUE"> <block type="logic_boolean" id="Q7#0l)u#tqnj:MLsR^Qk"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="comment" id=")5}dXz#65x)x]o)Q6ct@"> <field name="COMMENT">alte Benachrichtigung löschen</field> <next> <block type="controls_if" id="Io{{EN%TbcMivXNk$VRQ"> <value name="IF0"> <block type="logic_compare" id="^d6+W!})07~kxl_*1?R%"> <field name="OP">NEQ</field> <value name="A"> <block type="variables_get" id="`x|vFuKKk,8r?-@!n}A3"> <field name="VAR" id="OY|-nxmyPkjf5lu#3k4b">MessageID_old</field> </block> </value> <value name="B"> <block type="text" id="1H{xq^3NCjNFP,rdf,sJ"> <field name="TEXT"></field> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="Q?74^SGE%*g:+MHK7egq"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text" id="yp_jIZhMV$X5ic{vt/Z+"> <field name="TEXT">alte Benachrichtigung für neue löschen</field> </block> </value> <next> <block type="request" id="-,[nMtcIh^e8A*n?/PyY"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG">debug</field> <value name="URL"> <shadow type="text"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="CGIN9IYmQkmT)MN.TwvK"> <mutation items="6"></mutation> <value name="ADD0"> <block type="text" id="2%7=ugy#}^2xmN+A/@Sx"> <field name="TEXT">https://api.telegram.org/bot</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="yMD$it.T]Nf5R+^s/!#t"> <field name="VAR" id="t735B|g/I)mmA`_=bQf=">Token</field> </block> </value> <value name="ADD2"> <block type="text" id="x^lrLQ{Zkm(Oy}il(%#/"> <field name="TEXT">/deleteMessage?chat_id=</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="[Dj.{K^j/_TA!QpA];Zl"> <field name="VAR" id="UNwn*kL_@D)gcE`$^mO+">ChatID_old</field> </block> </value> <value name="ADD4"> <block type="text" id="R!%rFAYt7l6lI-:365#0"> <field name="TEXT">&message_id=</field> </block> </value> <value name="ADD5"> <block type="variables_get" id="%!(/hS`v6m|mm0U8D$[W"> <field name="VAR" id="OY|-nxmyPkjf5lu#3k4b">MessageID_old</field> </block> </value> </block> </value> <next> <block type="variables_set" id="BjZmQFa%y=ix~9V{M|rE"> <field name="VAR" id="OY|-nxmyPkjf5lu#3k4b">MessageID_old</field> <value name="VALUE"> <block type="text" id="?C83XxOuf5fv0iP0hNmq"> <field name="TEXT"></field> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> <value name="IF3"> <block type="logic_compare" id="0^24VPv!_^,UGJ|hYDr("> <field name="OP">GTE</field> <value name="A"> <block type="on_source" id="~nC%oAT$ETg$NjK;HW8."> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="variables_get" id="sCVR[7~XMq7d[FzfITk6"> <field name="VAR" id="[cm_4R;3)cv_BI@^],fP">ÜberschussMin</field> </block> </value> </block> </value> <statement name="DO3"> <block type="timeouts_cleartimeout" id="[g*JMoCpS(gxV2qmpHj6"> <field name="NAME">minimum-zeit unterschritten</field> </block> </statement> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="procedures_defcustomreturn" id="Av)?|}5mmDBPYHIw~:L;" x="3263" y="1738"> <mutation statements="false"> <arg name="url" varid="+uo*h9CiBC;Z6Tu6|]{-"></arg> </mutation> <field name="NAME">URIencode</field> <field name="SCRIPT">dXJsPWVuY29kZVVSSUNvbXBvbmVudCh1cmwpOw0KcmV0dXJuIHVybDs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> </xml>
Um deinen Wunsch einer Nulleinspeisung kannst du dich an das zweite Skript anlehnen und nach einer Überschreitung deines kleinsten Verbrauchers bzw. auch nach unterschiedlichen Kombinationen der Verbraucher die eben zuschalten.
Am besten wäre z.B. deine Poolpumpe mit einem Frequenzumrichter oder deine Poolheizung mit einem Dimmer auszustatten und darüber dessen Leistung linear zum Überschuss zu regeln. Aber ob das irgendwie wirtschaftlich ist und die Kosten irgendwann mal wieder reinholt, mag ich bezweifeln.
In Zukunft würde ich auch wie du im ersten Schritt einzelne Verbraucher zu- und abschalten, da bin ich aber noch nicht so weit. Handhabe es daher so, dass ich die Spül- Waschmaschine und ggf. Trockner dann einschalte wenn ich die Benachrichtigung bekomme.
Da man den meisten Überschuss im Sommer hat, bietet es sich an diesen in die Pooltechnik zu schieben, oder eben z.B. in Kühl und Gefrierschrank. Mein Gefrierschrank hat einen Inverter-Kompressor, welcher die Leistung nach Bedarf regelt. Ob es dafür eine Lösung gäbe die Leistung hochzuschrauben wenn es Überschuss gibt? - Blockly
-
Hallo Leute,
vielen Dank für eure Anregungen, ich muss mich jetzt erstmal einarbeiten.
Nch ne ggf blöde Frage:Ich schreibe in ne mariaDB per sql Adapter täglich den Gesamtertrag und kann dies auch als Diagramm anzeigen in der VIS.
Ich blicke aber grade überhaupt nicht, wie ich mir den Tagesertag rausrechnen könnte.Ich dachte eig an folgendes in Blockly:
- 2 Variablen mit Wert aus SQL von heute und gestern füllen und Differenz bilden.
Kann mir da ggf jemand einen Schubser geben?
-
@jheide zu Blockly kann ich leider nichts sagen. Ich mache es so wie Du beschrieben hast in JS und ich arbeite auch noch mit history.
- Jeden tag um 23:59 (oder so) wird der Speicherwert von gestern vom aktuellen Wert von heute ("jetzt") subtrahiert.
- Das bildet den heutigen Tagensverbrauch und
- wird in den entsprechenden Datenpunkt gespeichert.
- Dann wird der aktuelle Wert in den Zwischenspeicher für gestern eingespeichert
Mittlerweile gibt es aber Adapter, die genau sowas machen
- Statistik Adapter https://github.com/iobroker-community-adapters/ioBroker.statistics
- Sourceanalytics Adapter https://github.com/DrozmotiX/ioBroker.sourceanalytix