NEWS
Ist mein Script richtig und effizient ?
-
Hallo zusammen,
ich bin mir irgendwie nicht sicher ob mein Script wirklich richtig ist und glaube das ich zu oft Prüfe bzw. dadurch das System unnötig belastet.
Eigentlich ist der Fall sehr einfach. Ich möchte von meiner PV Batterie den SoC prüfen und möchte ab gleich oder größer 55% das intelligente Batterie Management Anschalten und wenn sie unter = oder kleiner 54% ausschalten. Und es soll bei Start des Scripts der aktuelle zustand geprüft werden, da ich nicht jeden % Änderung diese Funktion aus und anschalte. Deswegen die Variable.
Hier der Blocky Code da für Bild das zuviel ist.
var var_batteryint_mode; var_batteryint_mode = false; on({id: 'plenticore.0.devices.local.battery.SmartBatteryControl', val: true}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; var_batteryint_mode = true; }); on({id: 'plenticore.0.devices.local.battery.SoC', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") >= 55 && var_batteryint_mode == false) { setStateDelayed('plenticore.0.devices.local.battery.SmartBatteryControl', true, false, parseInt(0, 10), false); var_batteryint_mode = true; console.log((['Intelligente Batteriesteuerung aktivert','\n','Aktueller SoC Wert','\n',(obj.state ? obj.state.val : ""),'\n',formatDate(new Date(), "TT.MM.JJJJ SS:mm")].join(''))); } else if ((obj.state ? obj.state.val : "") <= 54 && var_batteryint_mode == true) { setStateDelayed('plenticore.0.devices.local.battery.SmartBatteryControl', false, false, parseInt(0, 10), false); var_batteryint_mode = false; console.log((['Intelligente Batteriesteuerung deaktivert','\n','Aktueller SoC Wert','\n',(obj.state ? obj.state.val : ""),'\n',formatDate(new Date(), "TT.MM.JJJJ SS:mm")].join(''))); } });
-
@Bluppylein sagte:
gleich oder größer 55% das intelligente Batterie Management Anschalten und wenn sie unter = oder kleiner 54% ausschalten.
Vorschlag:
-
@paul53 Wenn ich das aber jetzt verstehe setzt du den wer immer bei jeden Change?
Genau das will ich etwas verhindern da ich angst habe durch das dauernde setzen gibt es irgendwann zuviel last. Der Wert wird alle 10 sec angefragt und wird teilweise innerhalb von 15 min je nach Stromlast geändert da der Akku nur 6,4 kwh hat und wenn herd läuft ist der in 2 std. leer
-
@Bluppylein sagte in Ist mein Script richtig und effizient ?:
setzt du den wer immer bei jeden Change?
Nur die variable
Den state nur wenn er nicht identisch ist
-
@Bluppylein sagte:
wird teilweise innerhalb von 15 min je nach Stromlast geändert
Da langweilt sich jede CPU.
@Bluppylein sagte in Ist mein Script richtig und effizient ?:
setzt du den wer immer bei jeden Change?
Das verhindert der Vergleich der Variablen control mit dem Wert des Datenpunktes.
-
Also ich habe das jetzt umgesetzt. Nun läuft es aber nicht er setzt die Harken nicht sauber in der Software. Oder habe ich Denkfehler drin? Weil ich setze Provokativ zb. nun bei 60% das Int. Steuern aus und sehe auch IO Broker hat den Wert auf False erkannt. Setze hier temporär sogar statt wurde geändert auf wurde aktualisiert. Dann müsste ja eigentlich sofort bei nächsten Lauf es wieder auf true gesetzt werden
var control, aktiv; on({id: 'plenticore.0.devices.local.battery.SoC', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") >= 55) { control = true; aktiv = 'aktiviert'; } else if ((obj.state ? obj.state.val : "") <= 54) { control = false; aktiv = 'deaktiviert'; } if ((obj.state ? obj.state.val : "") != getState("plenticore.0.devices.local.battery.SoC").val) { setState("plenticore.0.devices.local.battery.SmartBatteryControl"/*Smart battery control*/, control); console.log((['Intelligente Batteriesteuerung',aktiv,'\n','Aktueller SoC Wert:',(obj.state ? obj.state.val : ""),'\n',formatDate(new Date(), "TT.MM.JJJJ SS:mm")].join(''))); } });
-
Fehler gefunden ^^
Manchmal sieht man nicht mehr den Wald voller Bäume auch wenn das echt Basic ist aber ich fange ja erst mit Blockly an
var control, aktiv; on({id: 'plenticore.0.devices.local.battery.SoC', change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") >= 55) { control = true; aktiv = 'aktiviert'; } else if ((obj.state ? obj.state.val : "") <= 54) { control = false; aktiv = 'deaktiviert'; } if (control != getState("plenticore.0.devices.local.battery.SmartBatteryControl").val) { setState("plenticore.0.devices.local.battery.SmartBatteryControl"/*Smart battery control*/, control); console.log((['Intelligente Batteriesteuerung',aktiv,'\n','Aktueller SoC Wert:',(obj.state ? obj.state.val : ""),'\n',formatDate(new Date(), "TT.MM.JJJJ SS:mm")].join(''))); } }); control;