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.
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."
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden