Dynamic EV Wallbox Charging Based on Solar Forecast and Tibber Energy Prices
This Node-RED flow automatically manages EV wallbox charging based on the current Tibber electricity price, solar power forecasts, and the charging status of the car (Zoe).
Main Features: Dynamic Price-Based Charging: Calculates the best 3-hour charging window based on the lowest upcoming Tibber energy prices, adjusted for expected solar power generation.
Solar Savings Optimization: Integrates local solar forecast data and dynamically adjusts the Tibber price curve by subtracting the solar self-consumption benefit.
Home Assistant Integration: Uses entities like binary_sensor.keba_p30_plug, sensor.solar_forecast, and input_button.keba_wallbox_boost_automatisch to monitor and control charging sessions.
Alexa Notifications: Sends spoken announcements via Alexa when the car starts or stops charging below 15 ct/kWh.
Phase Switching: Switches between 1-phase and 3-phase modes via Home Assistant, depending on the charging state and price conditions.
10-Hour Manual Boost Lockout: Prevents repeated manual Boost activations within a 10-hour window.
Tibber Price Caching: Stores the received Tibber price data globally for reuse in multiple flow segments.
[{"id":"983cb7e1e02679b8","type":"debug","z":"68d4b9db6faaaa2c","name":"Wallbox debug","active":false,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":490,"y":680,"wires":[]},{"id":"d7face0fa35bafa7","type":"function","z":"68d4b9db6faaaa2c","name":"Convert true/false to 1/0","func":"msg.payload.hours.forEach(wallbox => wallbox.onOff = wallbox.onOff ? \"1\" : \"0\")\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":920,"wires":[["c8de895ec9c89204"]]},{"id":"c8de895ec9c89204","type":"ha-sensor","z":"68d4b9db6faaaa2c","name":"Preis Planung Wallbox","entityConfig":"92ccd19ae582beae","version":0,"state":"payload","stateType":"str","attributes":[{"property":"Schedule","value":"payload.schedule","valueType":"msg"},{"property":"Hours","value":"payload.hours","valueType":"msg"},{"property":"Control","value":"payload.hours[0].onOff","valueType":"str"},{"property":"Current","value":"payload.current","valueType":"str"}],"inputOverride":"allow","outputProperties":[],"x":830,"y":980,"wires":[["0fb48dc610ac2edf"]]},{"id":"0fb48dc610ac2edf","type":"debug","z":"68d4b9db6faaaa2c","name":"powersaver_planning_wallbox","active":false,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1080,"y":980,"wires":[]},{"id":"bf652773623eaa80","type":"ps-strategy-lowest-price","z":"68d4b9db6faaaa2c","name":"Lowest Price Wallbox","fromTime":"00","toTime":"00","hoursOn":"3","maxPrice":"","doNotSplit":true,"sendCurrentValueWhenRescheduling":true,"outputValueForOn":"90","outputValueForOff":"5","outputValueForOntype":"num","outputValueForOfftype":"num","outputIfNoSchedule":"false","outputOutsidePeriod":"false","contextStorage":"memory","x":200,"y":740,"wires":[["983cb7e1e02679b8","e96b5d49c60a597c"],["983cb7e1e02679b8","4eacfc3524cc7ccd"],["27cc03c8cdabfd50","d008c4d3fe39bc54"]]},{"id":"915a7f6a4e2f07d7","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Zoe dran","server":"xxx","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"binary_sensor.keba_p30_plug","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":740,"y":740,"wires":[["4b3aebbb0a92489f"],[]]},{"id":"21ef7718e8080318","type":"api-call-service","z":"68d4b9db6faaaa2c","name":"Zoe läd unter 15 Cent with Alexa","server":"xxx","version":7,"debugenabled":false,"action":"notify.alexa_media_echo_dot","floorId":[],"areaId":[],"deviceId":[],"entityId":[],"labelId":[],"data":"{ \"message\": \"Alexa hier, unser Zoe läd unter 15 Cent!\", \"data\": { \"type\": \"announce\" }, \"target\": \"{{entity}}\" }","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"notify","service":"alexa_media_echo_dot","x":2070,"y":740,"wires":[[]]},{"id":"79dfc4e2cca21ccc","type":"inject","z":"68d4b9db6faaaa2c","name":"Test An","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":970,"y":700,"wires":[["f514475de50b7f08"]]},{"id":"580648a29c681fe6","type":"api-call-service","z":"68d4b9db6faaaa2c","name":"Martins Echo Dot Volume 5","server":"xxx","version":7,"debugenabled":false,"action":"media_player.volume_set","floorId":[],"areaId":[],"deviceId":[],"entityId":["media_player.echo_dot"],"labelId":[],"data":"{\"volume_level\":\"0.5\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"media_player","service":"volume_set","x":1800,"y":740,"wires":[["21ef7718e8080318"]]},{"id":"4b3aebbb0a92489f","type":"delay","z":"68d4b9db6faaaa2c","name":"alle 10 Stunden","pauseType":"rate","timeout":"1","timeoutUnits":"hours","rate":"1","nbRateUnits":"10","rateUnits":"hour","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":false,"outputs":1,"x":920,"y":740,"wires":[["f514475de50b7f08"]]},{"id":"b05d089b5ad144dd","type":"api-call-service","z":"68d4b9db6faaaa2c","name":"Zoe läd nicht mehr unter 15 Cent with Alexa","server":"xxx","version":7,"debugenabled":false,"action":"notify.alexa_media_echo_dot","floorId":[],"areaId":[],"deviceId":[],"entityId":[],"labelId":[],"data":"{ \"message\": \"Alexa hier, unser Zoe läd nicht mehr unter 15 Cent!\", \"data\": { \"type\": \"announce\" }, \"target\": \"{{entity}}\" }","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"notify","service":"alexa_media_echo_dot","x":2310,"y":920,"wires":[[]]},{"id":"0061ef1a0e35477a","type":"api-call-service","z":"68d4b9db6faaaa2c","name":"Martins Echo Dot Volume 5","server":"xxx","version":7,"debugenabled":false,"action":"media_player.volume_set","floorId":[],"areaId":[],"deviceId":[],"entityId":["media_player.echo_dot"],"labelId":[],"data":"{\"volume_level\":\"0.5\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"media_player","service":"volume_set","x":2000,"y":920,"wires":[["b05d089b5ad144dd"]]},{"id":"d453c18ae5463d4c","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Zoe dran","server":"xxx","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"binary_sensor.keba_p30_plug","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":740,"y":800,"wires":[["a080169669565b29"],[]]},{"id":"a080169669565b29","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Zoe läd bereits","server":"xxx","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"binary_sensor.keba_p30_charging_state","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":920,"y":800,"wires":[["1c04b5d335a8dbcb"],[]]},{"id":"18f4400a2fdf452e","type":"inject","z":"68d4b9db6faaaa2c","name":"Test Aus","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":600,"y":860,"wires":[["d453c18ae5463d4c"]]},{"id":"f514475de50b7f08","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Läd weniger 20 kW","server":"xxx","version":3,"outputs":2,"halt_if":"20","halt_if_type":"num","halt_if_compare":"lt","entity_id":"sensor.keba_p30_charging_power","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1130,"y":740,"wires":[["b81260c96501da7b"],[]]},{"id":"27cc03c8cdabfd50","type":"debug","z":"68d4b9db6faaaa2c","name":"Wallbox Schedule","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":290,"y":920,"wires":[]},{"id":"e96b5d49c60a597c","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Kleiner 25kW Solar","server":"xxx","version":3,"outputs":2,"halt_if":"25","halt_if_type":"num","halt_if_compare":"lt","entity_id":"sensor.solar_forecast","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"solar_forecast","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":500,"y":740,"wires":[["915a7f6a4e2f07d7"],[]]},{"id":"4eacfc3524cc7ccd","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Kleiner 25kW Solar","server":"xxx","version":3,"outputs":2,"halt_if":"25","halt_if_type":"num","halt_if_compare":"lt","entity_id":"sensor.solar_forecast","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"solar_forecast","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":500,"y":800,"wires":[["d453c18ae5463d4c"],[]]},{"id":"d008c4d3fe39bc54","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Kleiner 25kW Solar","server":"xxx","version":3,"outputs":2,"halt_if":"25","halt_if_type":"num","halt_if_compare":"lt","entity_id":"sensor.solar_forecast","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"solar_forecast","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":290,"y":980,"wires":[["d7face0fa35bafa7"],["fcc68d23d6dad91a"]]},{"id":"fcc68d23d6dad91a","type":"function","z":"68d4b9db6faaaa2c","name":"Convert true/false to 0","func":"msg.payload.hours.forEach(akku => {\n akku.onOff = \"0\"; // Setzt onOff zu \"0\", unabhängig vom ursprünglichen Wert\n});\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":980,"wires":[["c8de895ec9c89204"]]},{"id":"b81260c96501da7b","type":"api-call-service","z":"68d4b9db6faaaa2c","name":"Wallbox 22kW Boost","server":"xxx","version":7,"debugenabled":true,"action":"input_button.press","floorId":[],"areaId":[],"deviceId":[],"entityId":["input_button.keba_wallbox_boost_automatisch"],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"input_button","service":"press","x":1340,"y":740,"wires":[["a4ccc0548c729ab4"]]},{"id":"1c04b5d335a8dbcb","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Boost manuell","server":"xxx","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_button.keba_wallbox_boost_manuell","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1120,"y":800,"wires":[["9b557fc4bf82080e"]]},{"id":"9b557fc4bf82080e","type":"function","z":"68d4b9db6faaaa2c","name":"Kein manueller Boost für 10 Stunden","func":"let lastPressed;\n\nif (msg.payload) {\n lastPressed = new Date(msg.payload).getTime();\n} else if (msg.data && msg.data.state) {\n lastPressed = new Date(msg.data.state).getTime();\n} else {\n lastPressed = NaN;\n}\n\nconst now = new Date().getTime();\nconst thirtySecondsInMillis = 10 * 60 * 60 * 1000;\n\nnode.warn(`Last Pressed: ${lastPressed}, Now: ${now}, Difference: ${now - lastPressed}, Thirty Seconds in Millis: ${thirtySecondsInMillis}`);\n\nif (!isNaN(lastPressed) && now - lastPressed > thirtySecondsInMillis) {\n return [{ ...msg, now: now, lastPressed: lastPressed }, null]; // Weiterleiten\n} else {\n return [null, { ...msg, now: now, lastPressed: lastPressed }]; // Nicht weiterleiten\n}\n","outputs":2,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1390,"y":800,"wires":[["7b67654a052b8234"],["e1efbde680b5794b","c8f4655ecdd5b76b","e57f9949491a180d"]]},{"id":"7b67654a052b8234","type":"debug","z":"68d4b9db6faaaa2c","name":"Boost nicht aktiv innerhalb 10 Stunden","active":true,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1820,"y":800,"wires":[]},{"id":"e1efbde680b5794b","type":"debug","z":"68d4b9db6faaaa2c","name":"Boost aktiv innerhalb 10 Stunden","active":true,"tosidebar":true,"console":true,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":1800,"y":860,"wires":[]},{"id":"e57f9949491a180d","type":"api-call-service","z":"68d4b9db6faaaa2c","name":"3 Phasen Switch off","server":"xxx","version":7,"debugenabled":false,"action":"switch.turn_off","floorId":[],"areaId":[],"deviceId":[],"entityId":["switch.keba_wallbox_phasen_switch_2"],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"switch","service":"turn_off","x":1750,"y":960,"wires":[[]]},{"id":"14134a83e3f3a9d9","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Läd über 20 kW","server":"xxx","version":3,"outputs":2,"halt_if":"20","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.keba_p30_charging_power","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1560,"y":740,"wires":[["580648a29c681fe6"],[]]},{"id":"c8f4655ecdd5b76b","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Zoe läd nicht mehr","server":"xxx","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is_not","entity_id":"binary_sensor.keba_p30_charging_state","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1750,"y":920,"wires":[["0061ef1a0e35477a"],[]]},{"id":"a4ccc0548c729ab4","type":"delay","z":"68d4b9db6faaaa2c","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1520,"y":680,"wires":[["14134a83e3f3a9d9"]]},{"id":"1769c2c965e570c4","type":"comment","z":"68d4b9db6faaaa2c","name":"Wallbox Laden nach Strompreis","info":"","x":950,"y":360,"wires":[]},{"id":"96d98a7a460f9de4","type":"server-state-changed","z":"68d4b9db6faaaa2c","name":"Wallbox Ladezeit Ende","server":"xxx","version":6,"outputs":1,"exposeAsEntityConfig":"","entities":{"entity":["input_datetime.wallbox_ladezeit_ende"],"substring":[],"regex":[]},"outputInitially":false,"stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":920,"y":560,"wires":[["b2f03d8860eebc7e"]]},{"id":"0d6023c5d14247a2","type":"api-current-state","z":"68d4b9db6faaaa2c","name":"Wallbox Ladezeit Ende","server":"xxx","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_datetime.wallbox_ladezeit_ende","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"for":"","forType":"num","x":920,"y":500,"wires":[["b2f03d8860eebc7e"]]},{"id":"b2f03d8860eebc7e","type":"change","z":"68d4b9db6faaaa2c","name":"toTime extrahieren","rules":[{"t":"set","p":"toTime","pt":"msg","to":"$substring(payload,0,2)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1140,"y":460,"wires":[["c17c5b80c9517494"]]},{"id":"c17c5b80c9517494","type":"function","z":"68d4b9db6faaaa2c","name":"Strompreise - Solarersparnis mit Verbraucher Wallbox und LadezeitEnde","func":"// Holt die Daten aus den globalen Variablen\nvar solarDataMsg = global.get(\"SolarForecast\");\nvar priceDataMsg = global.get(\"TibberPriceReceiver\");\n\n// Holt die aktuelle Stunde und die toTime aus der Nachricht\nvar currentHour = new Date().getHours(); // Aktuelle Stunde\nvar toTime = parseInt(msg.toTime); // Konvertiert die toTime zu einer Zahl\n\n// Setzt fromTime auf die aktuelle Stunde, falls toTime nicht 0 ist\nvar fromTime = toTime !== 0 ? String(currentHour).padStart(2, '0') : \"00\";\n\n// Formatierung des SolarForecast\nlet solarForecast = Object.entries(solarDataMsg.result).map(([time, power]) => ({ time: new Date(time), power }));\n\n// Formatierung der Preisdaten\nlet prices = priceDataMsg.map(({ value, start }) => ({ price: value, time: new Date(start) }));\n\nlet totalConsumption = 22; // in kWh\nlet duration = 10; // in Stunden\n\n// Berechnung des durchschnittlichen Verbrauchs pro Stunde\nlet averageConsumptionPerHour = totalConsumption / duration;\n\n// Berechnung der Solarersparnis für jede Stunde und Reduzierung des Strompreises\nlet adjustedPrices = prices.map(({ price, time }) => {\n let solarData = solarForecast.find(({ time: solarTime }) => solarTime.getHours() === time.getHours());\n let power = solarData ? solarData.power : 0;\n let savings = Math.min(power, averageConsumptionPerHour * 1000) / 1000 * price; // Ersparnis durch Solarstrom\n let adjustedSavings = savings / totalConsumption; // Anpassung der Ersparnisse an den Gesamtverbrauch\n let adjustedPrice = price - adjustedSavings; // Reduzierung des Strompreises um die angepassten Ersparnisse\n return { value: parseFloat(adjustedPrice.toFixed(4)), start: time.toISOString() };\n});\n\n// Konfigurationsdaten ergänzen\nmsg.payload = {\n priceData: adjustedPrices,\n source: \"Tibber\",\n config: {\n contextStorage: \"default\",\n fromTime: fromTime, // Dynamischer Wert basierend auf der aktuellen Stunde\n toTime: toTime !== 0 ? String(toTime).padStart(2, '0') : \"00\", // Dynamischer Wert aus msg.toTime\n }\n};\n\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1360,"y":540,"wires":[["875ebb7d88cef8f0","bf652773623eaa80"]]},{"id":"875ebb7d88cef8f0","type":"debug","z":"68d4b9db6faaaa2c","name":"Konfiguration Debug","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload.config","statusType":"msg","x":1500,"y":480,"wires":[]},{"id":"ea0bda808c15014c","type":"inject","z":"68d4b9db6faaaa2c","name":"Trigger","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":710,"y":500,"wires":[["0d6023c5d14247a2"]]},{"id":"bf1dd7cd86c4dfeb","type":"server-state-changed","z":"68d4b9db6faaaa2c","name":"Auto läd","server":"xxx","version":6,"outputs":2,"exposeAsEntityConfig":"","entities":{"entity":["sensor.goe_287672_car_value","sensor.goe_287668_car_value"],"substring":[],"regex":[]},"outputInitially":false,"stateType":"str","ifState":"Laden","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":880,"y":440,"wires":[["0d6023c5d14247a2"],[]]},{"id":"0accebe42090a960","type":"function","z":"68d4b9db6faaaa2c","name":"TibberPriceReceiver save global","func":"// Eingehender Payload mit dem Array\nvar newArrayTibberPrice = msg.payload && msg.payload.priceData ? msg.payload.priceData : [];\n\n// Überprüfen, ob newArrayTibberPrice vorhanden ist\nif (newArrayTibberPrice.length > 0) {\n // Überschreiben Sie die globale Variable mit dem neuen Array\n global.set(\"TibberPriceReceiver\", newArrayTibberPrice);\n };\n\n// Senden Sie den gespeicherten Array für den nächsten Node weiter (optional)\nmsg.payload = {\n priceData: global.get(\"TibberPriceReceiver\"),\n source: \"Tibber\"\n}\nreturn msg;\n\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":560,"wires":[["0d6023c5d14247a2"]]},{"id":"a66a63fe6d3c5e28","type":"inject","z":"68d4b9db6faaaa2c","name":"TibberPlanung 30Min Update","props":[],"repeat":"1800","crontab":"","once":false,"onceDelay":"1","topic":"","x":230,"y":560,"wires":[["0accebe42090a960"]]},{"id":"66cc566082541d6c","type":"debug","z":"68d4b9db6faaaa2c","name":"Price Receiver original","active":false,"tosidebar":true,"console":true,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":550,"y":380,"wires":[]},{"id":"cdefd97deb8babd8","type":"ps-receive-price","z":"68d4b9db6faaaa2c","name":"Price Receiver","x":190,"y":360,"wires":[["66cc566082541d6c","0accebe42090a960","0d6023c5d14247a2"]]},{"id":"07c09c1976769ad5","type":"template","z":"68d4b9db6faaaa2c","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n viewer {\n homes {\n currentSubscription {\n priceInfo {\n today {\n total\n startsAt\n }\n tomorrow {\n total\n startsAt\n }\n }\n }\n }\n }\n}","output":"str","x":370,"y":300,"wires":[["ecaba9d20fa6b253"]]},{"id":"ecaba9d20fa6b253","type":"tibber-query","z":"68d4b9db6faaaa2c","name":"Get Tibber prices","active":true,"apiEndpointRef":"543f5eaab1fbe55d","x":560,"y":300,"wires":[["cdefd97deb8babd8","ca3da7d57f53c5b6"]]},{"id":"ca3da7d57f53c5b6","type":"debug","z":"68d4b9db6faaaa2c","name":"Get Tibber prices","active":false,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":810,"y":300,"wires":[]},{"id":"8461517b21e2402a","type":"inject","z":"68d4b9db6faaaa2c","name":"TibberTagesPreise 13:30 Uhr ","props":[{"p":"payload"}],"repeat":"","crontab":"30 13 * * *","once":true,"onceDelay":"200","topic":"","payload":"","payloadType":"date","x":240,"y":200,"wires":[["07c09c1976769ad5"]]},{"id":"92ccd19ae582beae","type":"ha-entity-config","server":"xxx","deviceConfig":"20bfa931a146d53f","name":"Preis Planung Wallbox","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"powersaver_planning_wallbox"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"xxx","type":"server","name":"Home Assistant ","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":": ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"default","statusTimeFormat":"h:m","enableGlobalContextStore":false},{"id":"543f5eaab1fbe55d","type":"tibber-api-endpoint","queryUrl":"https://api.tibber.com/v1-beta/gql","feedConnectionTimeout":"30","feedTimeout":"60","queryRequestTimeout":"30","name":"Demo"},{"id":"20bfa931a146d53f","type":"ha-device-config","name":"powersaver_planning_wallbox","hwVersion":"","manufacturer":"Node-RED","model":"","swVersion":""}]