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 !!!