NEWS
Erste Schritte beim Scripten - Einsteigerfrage
-
@doppellhelix sagte: Script wie ein SPS Programm arbeitet und das Script in einer Schleife stetig durchlaufen wird.
Nein, Javascript wird nicht in einer Schleife durchlaufen, sondern arbeitet Ereignis gesteuert. Ereignisse sind u.a. DP-Trigger, Zeitpläne, Timer.
Das Skript etwas übersichtlicher und mit weniger setState():
const idMaxPower = 'modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/; const idForecast = 'pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/; const idBatt = 'modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/; const idTelegram = 'telegram.0.communicate.response'; const idReduced = '0_userdata.0.reducedCharging'/*reducedCharging*/; var reducedCharging = getState(idReduced).val; log('reduced charging is ' + reducedCharging); schedule({astro: "sunrise"}, function () { let msgText = "Akkustand bei Sonnenaufgang: " + getState(idBatt).val + " %\n"; const forecast = getState(idForecast).val; let maxPower = 10600; reducedCharging = forecast > 20000; if (reducedCharging) { maxPower = 100; msgText += forecast + ' Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr'; } else { msgText += forecast + ' Wh Ertrag erwartet. Lade Akku sofort'; } log(msgText); setState(idMaxPower, maxPower); setState(idTelegram, msgText); setState(idReduced, reducedCharging, true); }); schedule('0 11 * * *', function () { if (reducedCharging) { setState(idTelegram, "Starte laden des Akkus mit 2 kW"); log("Set max_charge_power to 2kW"); setState(idMaxPower, 2000); } });@paul53
Hallo Paul,dein Vorschlag mit den CONST-Variablen der DP-Definition ist wirklich in vielen Skripten eine super Möglichkeit, um die Übersichtlichkeit zu gewährleisten! Bei Änderungen in Datenpunktnamen braucht man nur am Anfang des Skripts zu schauen.
:blush: Fuzzy
-
Guten Morgen,
durch einen kleinen Hardwarefehler, musste ich mit iobroker auf neue Hardware umziehen.
Dieses Script hier, habe ich einfach per Copy+Paste rüber kopiert.
Die 0_userdata.0.reducedCharging habe ich angelegt.Dennoch läuft das Script nicht richtig:
var reducedCharging = getState('0_userdata.0.reducedCharging'/*reducedCharging*/).val; console.info('reduced charging is '+reducedCharging); schedule({astro: "sunrise"}, function () { var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%"; var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val; if (forecast > 20000) { setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10); setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 10W bis 11 Uhr"); reducedCharging = true; } else { setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600); setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung"); reducedCharging = false; } setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging); log(msgText); setState('telegram.0.communicate.response', msgText); }); schedule({hour: 11, minute: 0}, function () { if (reducedCharging) { setState('telegram.0.communicate.response', "Starte laden des Akkus mit 1 kW"); log("Set max_charge_power to 1kW"); setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 1000); } });Bei Sonnenaufgang wird alles gecheckt.
Heute morgen ist der erwartete Ertrag (pvforecast.0.sumary.energy.today bei 20083
Dennoch sagt das Script:"Akkustand bei Sonnenaufgang: 66,3%"
"20083 Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung."Auch die reduced Charging wurde nicht gesetzt.
Ich habe auch @paul53 "optimiertes" Script 1zu1 eingefügt uns ausprobiert.
Auch dieses macht den gleichen "Fehler"Könnt Ihr bitte noch einmal nachschauen, was hier gerade falsch läuft?
Vielen Dank.
-
Guten Morgen,
durch einen kleinen Hardwarefehler, musste ich mit iobroker auf neue Hardware umziehen.
Dieses Script hier, habe ich einfach per Copy+Paste rüber kopiert.
Die 0_userdata.0.reducedCharging habe ich angelegt.Dennoch läuft das Script nicht richtig:
var reducedCharging = getState('0_userdata.0.reducedCharging'/*reducedCharging*/).val; console.info('reduced charging is '+reducedCharging); schedule({astro: "sunrise"}, function () { var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%"; var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val; if (forecast > 20000) { setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10); setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 10W bis 11 Uhr"); reducedCharging = true; } else { setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600); setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung"); reducedCharging = false; } setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging); log(msgText); setState('telegram.0.communicate.response', msgText); }); schedule({hour: 11, minute: 0}, function () { if (reducedCharging) { setState('telegram.0.communicate.response', "Starte laden des Akkus mit 1 kW"); log("Set max_charge_power to 1kW"); setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 1000); } });Bei Sonnenaufgang wird alles gecheckt.
Heute morgen ist der erwartete Ertrag (pvforecast.0.sumary.energy.today bei 20083
Dennoch sagt das Script:"Akkustand bei Sonnenaufgang: 66,3%"
"20083 Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung."Auch die reduced Charging wurde nicht gesetzt.
Ich habe auch @paul53 "optimiertes" Script 1zu1 eingefügt uns ausprobiert.
Auch dieses macht den gleichen "Fehler"Könnt Ihr bitte noch einmal nachschauen, was hier gerade falsch läuft?
Vielen Dank.
Nach langer Sucherei habe ich es gefunden.
Ich hatte im Adapter pv.forecast nicht den Haken gesetzt bei: "Werte in W statt kW.":face_palm: