NEWS
E3DC Hauskraftwerk via Tibber laden
-
Hallo in die Runde ich hoffe das Schript passt hier rein.
Das Script wurde mit Unterstüzung div Forenmitglieder optimiert großer Dank geht an @Paul53 @Homoran
Es kann genutzt werden von allen; die ein E3DC Hauskraftwerk ihr eigen nennen.
Mit diesem einfachen Script könnt Ihr euer Hauskraft werk in Abhänigkeit vom Tibberstrompreis aus dem Netz nachladen.welche IOBroker Plugins werden zusätzlich benötigt
E3DC-rscp
und ein Tibber Adapter (egal welcher es müssen nur die entsprechnden Werte genutzt werden.
Ziel für mich war, wenn Strom günstig ist und der Akku einen zu geringen Ladestand ausweist, diesen einfach bis zu einem gewissen % Satz nachzuladen ( Die lade Endadeverluste muss man natürlich einbeziehen.)
Ich habe mich extra gegen eine komplizierte Steuerung (wie z.b PV Wettervorhersage etc) entschieden.
Das Script besteht bei mir aus zwei Teilen.Erster Teil bezieht sich auf die reine Ladung des Akkus bei entsprechend günstigem Strompreis.
Der zweite Teil setzt beim E3DC die Entladesperrzeiten auf "true"
Hintergrund diser Steuerung in meinen Fall:
Wenn der Strom günstig ist, möchte ich natürlich auch mein Auto laden, das aber rein nur aus dem Netz und nicht aus dem Akku ! In meinen Fall mit einen Go E-Charger!code_text // Beschreibe diese Funktion … async function Ladeschaltung() { Modus = compareTime('00:00', '23:59', 'between') && laden && getState('tibber.0.priceInfo.current.total').val <= (getState('tibber.0.priceInfo.current.total').val <= 0.175) ? 4 : 0; if (Modus != getState('e3dc-rscp.0.EMS.SET_POWER_MODE').val) { setState('e3dc-rscp.0.EMS.SET_POWER_MODE' /* Lademodus (gesendet) */, Modus); setStateDelayed('e3dc-rscp.0.EMS.SET_POWER_VALUE' /* Eingestellte Ladeleistung (gesendet) */, 9000, 5000, false); } } // Beschreibe diese Funktion … async function Endladesperre() { Modus2 = getState('go-e.1.car').val == 2 ? true : false; if (Modus2 != getState('e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.00-Monday.IDLE_PERIOD_ACTIVE').val) { setStateDelayed('e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.00-Monday.IDLE_PERIOD_ACTIVE' /* Ruhezeit aktiv */, Modus2, 1000, false); setStateDelayed('e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.01-Tuesday.IDLE_PERIOD_ACTIVE' /* Ruhezeit aktiv */, Modus2, 2000, false); setStateDelayed('e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.02-Wednesday.IDLE_PERIOD_ACTIVE' /* Ruhezeit aktiv */, Modus2, 3000, false); setStateDelayed('e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.03-Thursday.IDLE_PERIOD_ACTIVE' /* Ruhezeit aktiv */, Modus2, 4000, false); setStateDelayed('e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.04-Friday.IDLE_PERIOD_ACTIVE' /* Ruhezeit aktiv */, Modus2, 5000, false); setStateDelayed('e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.05-Saturday.IDLE_PERIOD_ACTIVE' /* Ruhezeit aktiv */, Modus2, 6000, false); setStateDelayed('e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.06-Sunday.IDLE_PERIOD_ACTIVE' /* Ruhezeit aktiv */, Modus2, 7000, false); } } // Akku Kappa prüfen laden = getState('modbus.0.holdingRegisters.40083_Batterie_SOC').val < 90; on({ id: 'modbus.0.holdingRegisters.40083_Batterie_SOC' /* Batterie-SOC in Prozent */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") >= 90) { laden = false; } else if ((obj.state ? obj.state.val : "") < 50) { laden = true; } await Ladeschaltung(); }); on({ id: 'tibber.0.priceInfo.current.total' /* total */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; await Ladeschaltung(); }); // Entladesperrzeiten setzten on({ id: 'go-e.1.car' /* PWM Signalisierung (car) */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; await Endladesperre(); });
Viel Spass bei ausprobieren !!!
-
@dataeasy kann es leider nicht importieren, soll doch unter Blockly import werden, oder?
-
@dataeasy - würdest Du bitte die Blockys exportieren und hier einstellen? so lässt sich nichts testen. Gruß Peter
-
Hallo!
Konnte nun wegen einer Preiserhöhung meinen derzeitigen Stromtarif kündigen und ab 01.02.2024 dann zu Tibber wechseln. Da ich auch ein E3DC S10PRO mein eigen nennen darf, bin ich nun mal diesen Thread durchgegangen, finde nach Installation Tibber nun auch alle Datenpunkte (E3DC hatte ich schon) wie in Dienen Screenshots beschreiben bei mir in der Liste. Im ersten Schritt ist wohl wichtig, die Ladetechnik zu verstehen und diese kleine Funktion zum laufen zu bekommen... alle anderen Komfortfunktionen bauen drauf auf und kommen damit später.Jetzt habe ich da schon meine Probleme, ich kann SET_POWER_MODE und SET_POWER_VALUE schreiben (mit den Werten 4 und 9000), aber meine Anlage reagiert da nicht drauf! Muss ich im E3DC Connector noch Schreibrechte oder so einrichten? Woran kann das liegen?
Vielen Dank für den tollen Ansatz und die Hilfe.
-
@dpcfan sagte in E3DC Hauskraftwerk via Tibber laden:
Hallo!
Konnte nun wegen einer Preiserhöhung meinen derzeitigen Stromtarif kündigen und ab 01.02.2024 dann zu Tibber wechseln. Da ich auch ein E3DC S10PRO mein eigen nennen darf, bin ich nun mal diesen Thread durchgegangen, finde nach Installation Tibber nun auch alle Datenpunkte (E3DC hatte ich schon) wie in Dienen Screenshots beschreiben bei mir in der Liste. Im ersten Schritt ist wohl wichtig, die Ladetechnik zu verstehen und diese kleine Funktion zum laufen zu bekommen... alle anderen Komfortfunktionen bauen drauf auf und kommen damit später.Jetzt habe ich da schon meine Probleme, ich kann SET_POWER_MODE und SET_POWER_VALUE schreiben (mit den Werten 4 und 9000), aber meine Anlage reagiert da nicht drauf! Muss ich im E3DC Connector noch Schreibrechte oder so einrichten? Woran kann das liegen?
Vielen Dank für den tollen Ansatz und die Hilfe.
Hast du das Problem lösen können? Ich habe das gleiche Problem das er nichts annimmt?
-
@mazze Hallo, leider nicht... versuche grade auf allen Kanälen Hilfe zu bekommen. Habe auch ein Ticket bei E3DC aufgemacht.
-
@mazze Jetzt ja, siehe FB Eintrag! Beim Senden nicht BESTÄTIGT anklicken ... blöd von mir, aber ich komm drüber weg
-
@dataeasy @Mazze Warum nicht gleich nach den Sternen greifen?
Nun habe ich ja die Möglichkeit, den Speicher per Script zum Laden zu bewegen, nun will ich diese Funktion in ein Gesamtkonzept einbetten und den Winter mit der Niedrigstrom-Logik von fl_dutch (Youtube: How To: dynamische Strompreise von Tibber optimal nutzen) kombinieren! Hier kommt Node-Red zu Einsatz, ist aber kein Problem, da im Grunde sich da nur Datenpunkte treffen, Deine Logik wird vom fl_Dutch Node-Red Script genutzt.
Hat da schon jemand Erfahrung zu? Das Node-Red an sich lüft bei mir gut, nur die Node "ps-strategy-Lowest-Price" will am Ausgang "On" nicht (beim Erreichen der Billigphase) "true" ausgeben, selbst, wenn ich beide Ausgänge (On/Off) auf den Datenpunkt lege, müsste beim Erreichen der Phase treu geschrieben und beim verlassen der Phase false! Leider nicht, ich kann meine komplette Logik gerne mal zur Verfügung stellen, damit Ihr wisst, wovon ich rede...
Hier mal die Config der Node, evtl. liegt da schon der Hase im Pfeffer:
Das bekommt die Node als Input:
{"priceData":[{"value":0.1664,"start":"2023-12-23T00:00:00.000+01:00"},{"value":0.1663,"start":"2023-12-23T01:00:00.000+01:00"},{"value":0.1663,"start":"2023-12-23T02:00:00.000+01:00"},{"value":0.1663,"start":"2023-12-23T03:00:00.000+01:00"},{"value":0.1663,"start":"2023-12-23T04:00:00.000+01:00"},{"value":0.1663,"start":"2023-12-23T05:00:00.000+01:00"},{"value":0.1665,"start":"2023-12-23T06:00:00.000+01:00"},{"value":0.1752,"start":"2023-12-23T07:00:00.000+01:00"},{"value":0.1901,"start":"2023-12-23T08:00:00.000+01:00"},{"value":0.2164,"start":"2023-12-23T09:00:00.000+01:00"},{"value":0.2159,"start":"2023-12-23T10:00:00.000+01:00"},{"value":0.221,"start":"2023-12-23T11:00:00.000+01:00"},{"value":0.2227,"start":"2023-12-23T12:00:00.000+01:00"},{"value":0.2256,"start":"2023-12-23T13:00:00.000+01:00"},{"value":0.2286,"start":"2023-12-23T14:00:00.000+01:00"},{"value":0.2303,"start":"2023-12-23T15:00:00.000+01:00"},{"value":0.2354,"start":"2023-12-23T16:00:00.000+01:00"},{"value":0.2474,"start":"2023-12-23T17:00:00.000+01:00"},{"value":0.2454,"start":"2023-12-23T18:00:00.000+01:00"},{"value":0.2396,"start":"2023-12-23T19:00:00.000+01:00"},{"value":0.2302,"start":"2023-12-23T20:00:00.000+01:00"},{"value":0.2158,"start":"2023-12-23T21:00:00.000+01:00"},{"value":0.1905,"start":"2023-12-23T22:00:00.000+01:00"},{"value":0.1755,"start":"2023-12-23T23:00:00.000+01:00"}],"source":"Tibber"}
Und das ist Output:
{"schedule":[{"time":"2023-12-23T00:00:00.000+01:00","value":false,"countHours":24}],"hours":[{"start":"2023-12-23T00:00:00.000+01:00","price":0.1664,"onOff":false,"saving":null},{"start":"2023-12-23T01:00:00.000+01:00","price":0.1663,"onOff":false,"saving":null},{"start":"2023-12-23T02:00:00.000+01:00","price":0.1663,"onOff":false,"saving":null},{"start":"2023-12-23T03:00:00.000+01:00","price":0.1663,"onOff":false,"saving":null},{"start":"2023-12-23T04:00:00.000+01:00","price":0.1663,"onOff":false,"saving":null},{"start":"2023-12-23T05:00:00.000+01:00","price":0.1663,"onOff":false,"saving":null},{"start":"2023-12-23T06:00:00.000+01:00","price":0.1665,"onOff":false,"saving":null},{"start":"2023-12-23T07:00:00.000+01:00","price":0.1752,"onOff":false,"saving":null},{"start":"2023-12-23T08:00:00.000+01:00","price":0.1901,"onOff":false,"saving":null},{"start":"2023-12-23T09:00:00.000+01:00","price":0.2164,"onOff":false,"saving":null},{"start":"2023-12-23T10:00:00.000+01:00","price":0.2159,"onOff":false,"saving":null},{"start":"2023-12-23T11:00:00.000+01:00","price":0.221,"onOff":false,"saving":null},{"start":"2023-12-23T12:00:00.000+01:00","price":0.2227,"onOff":false,"saving":null},{"start":"2023-12-23T13:00:00.000+01:00","price":0.2256,"onOff":false,"saving":null},{"start":"2023-12-23T14:00:00.000+01:00","price":0.2286,"onOff":false,"saving":null},{"start":"2023-12-23T15:00:00.000+01:00","price":0.2303,"onOff":false,"saving":null},{"start":"2023-12-23T16:00:00.000+01:00","price":0.2354,"onOff":false,"saving":null},{"start":"2023-12-23T17:00:00.000+01:00","price":0.2474,"onOff":false,"saving":null},{"start":"2023-12-23T18:00:00.000+01:00","price":0.2454,"onOff":false,"saving":null},{"start":"2023-12-23T19:00:00.000+01:00","price":0.2396,"onOff":false,"saving":null},{"start":"2023-12-23T20:00:00.000+01:00","price":0.2302,"onOff":false,"saving":null},{"start":"2023-12-23T21:00:00.000+01:00","price":0.2158,"onOff":false,"saving":null},{"start":"2023-12-23T22:00:00.000+01:00","price":0.1905,"onOff":false,"saving":null},{"start":"2023-12-23T23:00:00.000+01:00","price":0.1755,"onOff":false,"saving":null}],"source":"Tibber","config":{"fromTime":"00","toTime":"00","hoursOn":1,"maxPrice":0.3,"doNotSplit":false,"sendCurrentValueWhenRescheduling":true,"outputIfNoSchedule":false,"outputOutsidePeriod":false,"outputValueForOn":true,"outputValueForOff":false,"outputValueForOntype":"bool","outputValueForOfftype":"bool","override":"auto","contextStorage":"memory","hasChanged":false},"time":"2023-12-23T07:43:39.523+00:00","version":"4.1.5","strategyNodeId":"5aec03a7d05d5184","current":false}
Wenn diese Logik also mal fertig ist, dann will ich mit der preiswerten Phase den Speicher laden und die (bei Tibber normal) 8-10Uhr teure Phase dann mit dem Speicher überbrücken, so kommt man auf einen niedrigeren Durchschnittspreis pro Tag im Winter.
Oder was meint Ihr?
Schöne Feiertage und einen guten Rutsch ...
-
Ich habe es mal als JavaScript hinzugefügt und meine Tibberdatenpunkte durch die von TibberLink getascht. Allerdings bekomme ich den Fehler, dass der Name "Modus" und "Modus2" nicht bekannt sind.
Als Blockly geht es auch nicht. @dataeasy kannst du eventuell einfach dein Blockly nachreichen? Danke!
-
@dpcfan was meinst du damit?
Jetzt ja, siehe FB Eintrag! Beim Senden nicht BESTÄTIGT anklicken ... blöd von mir, aber ich komm drüber weg 🙂
-
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="0Y=so_Zpfh)R*xO_xNNF">laden</variable> <variable id="sna]-E(|pedUs57eb$2`">Modus</variable> <variable id=":HUM}NcSr6pr)*_tZ%K~">Modus2</variable> </variables> <block type="comment" id="wYGKOV@m;DSPr+gVMqP?" x="-1737" y="13"> <field name="COMMENT">Akku Kappa prüfen </field> </block> <block type="on" id="KFi=aS{@Kx{roq-j!Xe7" disabled="true" x="-1037" y="38"> <field name="OID">modbus.0.holdingRegisters.40083_Batterie_SOC</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="9N6u3).GRGvc)1gm;X|!"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="QWTMu`{ISH)Q+@B6L/%v"> <field name="OP">GTE</field> <value name="A"> <block type="on_source" id="T;.A|P5(O7jN0G*;H~!m"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="]I19$BZjvJ!+)um^!_HI"> <field name="NUM">90</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="ssF!(q$ucIV!^0/gI.DE"> <field name="VAR" id="0Y=so_Zpfh)R*xO_xNNF">laden</field> <value name="VALUE"> <block type="logic_boolean" id="!-5fe:)bt2D^o55`~V6e"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="vM=KXc6DPa*}Pr$Te~L4"> <field name="OP">LT</field> <value name="A"> <block type="on_source" id="W{$9=T9Riae0N%gbqi:f"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="/sBQS6(EU]m?-Y-d0IOy"> <field name="NUM">60</field> </block> </value> </block> </value> <statement name="DO1"> <block type="variables_set" id="=Q8){LXrePz%dE.!$~N0"> <field name="VAR" id="0Y=so_Zpfh)R*xO_xNNF">laden</field> <value name="VALUE"> <block type="logic_boolean" id="[N(Y1gE!ZR0xnH[0xv6C"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="procedures_callnoreturn" id="Yhrcf/j6f8Y~(@|y8Io|"> <mutation name="Ladeschaltung"></mutation> </block> </next> </block> </statement> </block> <block type="variables_set" id="x9m5V3x?MUQf?=|sIA)O" x="-1701" y="103"> <field name="VAR" id="0Y=so_Zpfh)R*xO_xNNF">laden</field> <value name="VALUE"> <block type="logic_compare" id="!y@{Jc}M%Bx)@xDEF[e6"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="tLKe{e977sRsinM3RlD2"> <field name="ATTR">val</field> <field name="OID">modbus.0.holdingRegisters.40083_Batterie_SOC</field> </block> </value> <value name="B"> <block type="math_number" id="0G.cUP$cs(uN^d_e0)`e"> <field name="NUM">90</field> </block> </value> </block> </value> <next> <block type="on_ext" id="i[kzA$?k0Au)PSJj3NUX"> <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="W+V%)[~WW^AK@Ec{McC:"> <field name="oid">tibberlink.0.Homes.344a4436-7f96-4251-9a15-1dda22b8cbe3.CurrentPrice.total</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="[H;K_$kk#fvdMgmVK,H/"> <field name="oid">e3dc-rscp.0.EMS.BAT_SOC</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="UmNudO+,rEct.^!V?j5b"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="AKgs?gRA*]lIT5e*HvC+"> <field name="OP">GTE</field> <value name="A"> <block type="on_source" id="$?3+?crUY.`!=+a2kY!;"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="~$z+Ztl$p~8dlt{5`M5W"> <field name="NUM">90</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="sC?yyd#svq#4)f^QMN(d"> <field name="VAR" id="0Y=so_Zpfh)R*xO_xNNF">laden</field> <value name="VALUE"> <block type="logic_boolean" id="Lk_)ggA/}P[lL1Y+iyGT"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id="hoS~CwMU$B(3;8*@;w?C"> <field name="OP">LT</field> <value name="A"> <block type="on_source" id="6,~f[|=t71GEEl9]YdEU"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="Xz9JLpxA+K`5Vh:tlc$n"> <field name="NUM">60</field> </block> </value> </block> </value> <statement name="DO1"> <block type="variables_set" id="ocdHdKy}TTE*!BBxZ5Gl"> <field name="VAR" id="0Y=so_Zpfh)R*xO_xNNF">laden</field> <value name="VALUE"> <block type="logic_boolean" id="x-2MJ)({x}%|.E3G~8nt"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="procedures_callnoreturn" id="Wzv?*kolrctW9wZ!.uI@"> <mutation name="Ladeschaltung"></mutation> </block> </next> </block> </statement> <next> <block type="on" id=":2,QS4x0YvzuIG??Qk{6"> <field name="OID">tibberlink.0.Homes.344a4436-7f96-4251-9a15-1dda22b8cbe3.CurrentPrice.total</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="procedures_callnoreturn" id="kECB%]i[JX!ln^uC{3KS"> <mutation name="Ladeschaltung"></mutation> </block> </statement> </block> </next> </block> </next> </block> <block type="procedures_defnoreturn" id="5/;3|HSfY1DAjxt5?Boe" x="-1312" y="313"> <field name="NAME">Ladeschaltung</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="variables_set" id="}Fqs{clkugC%PJw|,#%x"> <field name="VAR" id="sna]-E(|pedUs57eb$2`">Modus</field> <value name="VALUE"> <block type="logic_ternary" id="[.r)hU4YsaqlemuDNLsW" inline="false"> <value name="IF"> <block type="logic_operation" id="H*{$FtGE0%O3m5jr4c21" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="time_compare" id="wZye_u#FX4S:_:^FGt5M"> <mutation xmlns="http://www.w3.org/1999/xhtml" end_time="true"></mutation> <field name="OPTION">between</field> <field name="START_TIME">00:00</field> <field name="END_TIME">23:59</field> </block> </value> <value name="B"> <block type="logic_operation" id="ER[=B#TFc_ndUaaaTNRt" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="variables_get" id="!*+rWx@,]$AW+i93=Mn*"> <field name="VAR" id="0Y=so_Zpfh)R*xO_xNNF">laden</field> </block> </value> <value name="B"> <block type="logic_compare" id="=8#@vo)?z[cBMw:{FplF"> <field name="OP">LTE</field> <value name="A"> <block type="get_value" id="E@n3z2oC/LJYxONikYzn"> <field name="ATTR">val</field> <field name="OID">tibberlink.0.Homes.344a4436-7f96-4251-9a15-1dda22b8cbe3.CurrentPrice.total</field> </block> </value> <value name="B"> <block type="math_arithmetic" id="GWdA~Yt7%EBIt:MB7mUx"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="XFc}i=E5`-sQo,q=EB3s"> <field name="NUM">1</field> </shadow> <block type="get_value" id="Mg4(^8mm2m1m-!KR:KNU"> <field name="ATTR">val</field> <field name="OID">mqtt.0.openWB.global.awattar.MaxPriceForCharging</field> </block> </value> <value name="B"> <shadow type="math_number" id="b|b]G0E|N?lfzh|zDNi0"> <field name="NUM">100</field> </shadow> </value> </block> </value> </block> </value> </block> </value> </block> </value> <value name="THEN"> <block type="math_number" id="o#}VxYa6c$I+LFI1+swW"> <field name="NUM">4</field> </block> </value> <value name="ELSE"> <block type="math_number" id="-Ex~STFr^1*sZg6W]l9t"> <field name="NUM">0</field> </block> </value> </block> </value> <next> <block type="controls_if" id=":;ok#KZ[]ZEu0T|P=kkc"> <value name="IF0"> <block type="logic_compare" id="Et5%B.C)v{VpjEE{Uu:m"> <field name="OP">NEQ</field> <value name="A"> <block type="variables_get" id="#_L2|M#CMg$RtVppuO;i"> <field name="VAR" id="sna]-E(|pedUs57eb$2`">Modus</field> </block> </value> <value name="B"> <block type="get_value" id="%_p_e*RYch*Ordw=@WAO"> <field name="ATTR">val</field> <field name="OID">e3dc-rscp.0.EMS.SET_POWER_MODE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="/N-q:7/s~*M1MC``1^c,"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">e3dc-rscp.0.EMS.SET_POWER_MODE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="88O=,bjBm3i_+(?W{@lF"> <field name="VAR" id="sna]-E(|pedUs57eb$2`">Modus</field> </block> </value> <next> <block type="control" id="#s@xa/|zj!h~d)F5W#i_"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">e3dc-rscp.0.EMS.SET_POWER_VALUE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">5</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="7SgL{z$d[1n.T^;9?W0X"> <field name="NUM">9000</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> <block type="logic_compare" id="wF64?Si9r?dwKy]_EDI," disabled="true" x="-412" y="338"> <field name="OP">LTE</field> <value name="A"> <block type="get_value" id="SeKBpiJu(74N$cpJcunB"> <field name="ATTR">val</field> <field name="OID">tibber.0.priceInfo.current.total</field> </block> </value> <value name="B"> <block type="math_number" id="G8B$puW6XG_@^WC4)xou"> <field name="NUM">0.175</field> </block> </value> </block> <block type="comment" id="Ti|wD85x|9vJ|jQkdkC." x="-1512" y="763"> <field name="COMMENT">Entladesperrzeiten setzten </field> <next> <block type="on" id="IIm+KjOL:(hXR[e|*WE{"> <field name="OID">go-e.1.car</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="procedures_callnoreturn" id="7h}sCENa/zpk*Nt~ZBVc"> <mutation name="Endladesperre"></mutation> </block> </statement> </block> </next> </block> <block type="procedures_defnoreturn" id="wZzT|Qsccu:rd|,.;1Z-" x="-1512" y="938"> <field name="NAME">Endladesperre</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="variables_set" id="5*C{VGE_Dxz}J=P657-P"> <field name="VAR" id=":HUM}NcSr6pr)*_tZ%K~">Modus2</field> <value name="VALUE"> <block type="logic_ternary" id="fq`!8q%cl%)d=Ixn1_Hl"> <value name="IF"> <block type="logic_operation" id="E]@LMsU2],iqOI4VcarV"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="sqp/G2tE45TP4w64%Hx,"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="s[Mrpp-{OnFlKb{`Qr7|"> <field name="ATTR">val</field> <field name="OID">go-e.1.car</field> </block> </value> <value name="B"> <block type="math_number" id=":3T$q[mhTuRd2gtv@Q=a"> <field name="NUM">2</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="0*6%m8W!.RY8k~PXGF@0"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="vcPnw^PDiIlR``5H4SHJ"> <field name="ATTR">val</field> <field name="OID">mqtt.0.openWB.global.ChargeMode</field> </block> </value> <value name="B"> <block type="math_number" id="J0dUc^1a%dpvJZn:~h|6"> <field name="NUM">0</field> </block> </value> </block> </value> </block> </value> <value name="THEN"> <block type="logic_boolean" id="?/u~qD1:Nk{[YN}VPcJZ"> <field name="BOOL">TRUE</field> </block> </value> <value name="ELSE"> <block type="logic_boolean" id=",x??(^xPFEaGr(CV)yt}"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <next> <block type="controls_if" id="VXEP_o7e$E$G%i4UeHf9"> <value name="IF0"> <block type="logic_compare" id="x}#J]4N8U:kxEu[z2C_1"> <field name="OP">NEQ</field> <value name="A"> <block type="variables_get" id="t@o(k7Y_cK5@;br)n1!f"> <field name="VAR" id=":HUM}NcSr6pr)*_tZ%K~">Modus2</field> </block> </value> <value name="B"> <block type="get_value" id="JeuFg+eo_?g(5fZ|?KDM"> <field name="ATTR">val</field> <field name="OID">e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.00-Monday.IDLE_PERIOD_ACTIVE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id=",v4{PWtN7j=IbT,{?9wu"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.00-Monday.IDLE_PERIOD_ACTIVE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">1</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="variables_get" id="C-UAIh|@3K@q4FbUsZY6"> <field name="VAR" id=":HUM}NcSr6pr)*_tZ%K~">Modus2</field> </block> </value> <next> <block type="control" id=";bo#Od1yavuvBA0M7MPB"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.01-Tuesday.IDLE_PERIOD_ACTIVE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="variables_get" id="fm2`{!(Wvx1^zTh}k1?}"> <field name="VAR" id=":HUM}NcSr6pr)*_tZ%K~">Modus2</field> </block> </value> <next> <block type="control" id=";KkLypI!01qn~g%gPOJu"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.02-Wednesday.IDLE_PERIOD_ACTIVE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">3</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="variables_get" id="+sPa([CU]vgKBmHNq+:-"> <field name="VAR" id=":HUM}NcSr6pr)*_tZ%K~">Modus2</field> </block> </value> <next> <block type="control" id="v8QU_)qgLDHjau}SpUMd"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.03-Thursday.IDLE_PERIOD_ACTIVE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">4</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="variables_get" id="#0OV]H%qAXHD.x*iMrdL"> <field name="VAR" id=":HUM}NcSr6pr)*_tZ%K~">Modus2</field> </block> </value> <next> <block type="control" id="9h}O1NWT4D]+,lWk!0sj"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.04-Friday.IDLE_PERIOD_ACTIVE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">5</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="variables_get" id="].%%C*600cCsr/FuC_S|"> <field name="VAR" id=":HUM}NcSr6pr)*_tZ%K~">Modus2</field> </block> </value> <next> <block type="control" id=".nyo-LMoZbB4G7bY|8QU"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.05-Saturday.IDLE_PERIOD_ACTIVE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">6</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="variables_get" id="u8X-iz3T{bt,0MHrap:X"> <field name="VAR" id=":HUM}NcSr6pr)*_tZ%K~">Modus2</field> </block> </value> <next> <block type="control" id="DB_AQFx-Ijot);%W#^@g"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">e3dc-rscp.0.EMS.IDLE_PERIODS_DISCHARGE.06-Sunday.IDLE_PERIOD_ACTIVE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">7</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="variables_get" id="*E+#K/MUZjz*lZWg%slf"> <field name="VAR" id=":HUM}NcSr6pr)*_tZ%K~">Modus2</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </xml>
-
@dataeasy Hallo. Ich würde es gerne testen.
Wenn ich deine Sachen im blockly inportiere ist da ein wenig alles durcheinander. Ebenfalls gibt es einen Block in der Farbe braun den ich so noch nicht gesehen habe. Hier sind auch Werte vom Modbus drin. Brauch ich den? Eigentlich ist ja E3RSCP für die Steuerung da.
Hat es schon jemand hinbekommen.Ziel ist für mich: Auto über EVCC laden wenn Strom günstig (Tibber), E3DC nachladen wenn Strom günstig (Tibber) und kein Laden aus der Batterie.
Danke
-
@dpcfan Hallo. Läuft es bei dir nun? Ich würde es gerne probieren, habe aber mit Nodered nichts am Hut.
Müsste ich dann installieren. Bekommt man das irgendwie dann importiert? -
@robbi12 mhhh was meinst du genau du musst das Script natürlich noch auf dein System anpassen (DatenPunkte etc) wenn du Evcc nutzt dann wäre das z.b der erste Punkt den du abändern musst .. ich Nutze z.b openWB)
hie rnoch mal das Script ohne die deaktivten Teilen die im letzten noch drin waren
<block xmlns="https://developers.google.com/blockly/xml" type="procedures_defnoreturn" id="5/;3|HSfY1DAjxt5?Boe" x="-1312" y="262.4"> <field name="NAME">Ladeschaltung</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="variables_set" id="}Fqs{clkugC%PJw|,#%x"> <field name="VAR" id="sna]-E(|pedUs57eb$2`">Modus</field> <value name="VALUE"> <block type="logic_ternary" id="[.r)hU4YsaqlemuDNLsW" inline="false"> <value name="IF"> <block type="logic_operation" id="H*{$FtGE0%O3m5jr4c21" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="time_compare" id="wZye_u#FX4S:_:^FGt5M"> <mutation xmlns="http://www.w3.org/1999/xhtml" end_time="true"></mutation> <field name="OPTION">between</field> <field name="START_TIME">00:00</field> <field name="END_TIME">23:59</field> </block> </value> <value name="B"> <block type="logic_operation" id="ER[=B#TFc_ndUaaaTNRt" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="variables_get" id="!*+rWx@,]$AW+i93=Mn*"> <field name="VAR" id="0Y=so_Zpfh)R*xO_xNNF">laden</field> </block> </value> <value name="B"> <block type="logic_compare" id="=8#@vo)?z[cBMw:{FplF"> <field name="OP">LTE</field> <value name="A"> <block type="get_value" id="E@n3z2oC/LJYxONikYzn"> <field name="ATTR">val</field> <field name="OID">tibberlink.0.Homes.344a4436-7f96-4251-9a15-1dda22b8cbe3.CurrentPrice.total</field> </block> </value> <value name="B"> <block type="math_arithmetic" id="GWdA~Yt7%EBIt:MB7mUx"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="XFc}i=E5`-sQo,q=EB3s"> <field name="NUM">1</field> </shadow> <block type="get_value" id="Mg4(^8mm2m1m-!KR:KNU"> <field name="ATTR">val</field> <field name="OID">mqtt.0.openWB.global.awattar.MaxPriceForCharging</field> </block> </value> <value name="B"> <shadow type="math_number" id="b|b]G0E|N?lfzh|zDNi0"> <field name="NUM">100</field> </shadow> </value> </block> </value> </block> </value> </block> </value> </block> </value> <value name="THEN"> <block type="math_number" id="o#}VxYa6c$I+LFI1+swW"> <field name="NUM">4</field> </block> </value> <value name="ELSE"> <block type="math_number" id="-Ex~STFr^1*sZg6W]l9t"> <field name="NUM">0</field> </block> </value> </block> </value> <next> <block type="controls_if" id=":;ok#KZ[]ZEu0T|P=kkc"> <value name="IF0"> <block type="logic_compare" id="Et5%B.C)v{VpjEE{Uu:m"> <field name="OP">NEQ</field> <value name="A"> <block type="variables_get" id="#_L2|M#CMg$RtVppuO;i"> <field name="VAR" id="sna]-E(|pedUs57eb$2`">Modus</field> </block> </value> <value name="B"> <block type="get_value" id="%_p_e*RYch*Ordw=@WAO"> <field name="ATTR">val</field> <field name="OID">e3dc-rscp.0.EMS.SET_POWER_MODE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="/N-q:7/s~*M1MC``1^c,"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">e3dc-rscp.0.EMS.SET_POWER_MODE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="88O=,bjBm3i_+(?W{@lF"> <field name="VAR" id="sna]-E(|pedUs57eb$2`">Modus</field> </block> </value> <next> <block type="control" id="#s@xa/|zj!h~d)F5W#i_"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">e3dc-rscp.0.EMS.SET_POWER_VALUE</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">5</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="7SgL{z$d[1n.T^;9?W0X"> <field name="NUM">9000</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </statement> </block>
-
@dataeasy Hallo zusammen,
Ich weiß nicht, ob es mittlerweile einen neueren Thread als diesen hier gibt. Aber wenn nicht hätte ich ein paar Fragen zum Skript.
Grüße
Ron -
@dataeasy
Hallo es ist schon ein paar Monate her das Du diesen Skript geschreiben hast.
Setzt Du in deiner Anlage diese Version ein oder gibt es Überarbeitungen oder Anpassungen?Aus dem Umfeld „E3DC-Controll“ habe ich folgende Info erhalten:
e3dc-rscp.0.EMS.SET_POWER_VALUE alle 4 sek. die Ladeleistung eintragen.
Diesen 4 sek Intervall finde ich nicht bei dir.
LG Ronni -
@ronniboy Hi ich nutze das Script noch genau so und den Trigger auf Powervalue setzte ich doch