nachdem mehrfach nach der Steuerung meiner Überschuss-Ladung aus der PV-Anlage gefragt wurde, habe ich hier einmal die Systeme zusammengestellt und stelle die Scripte zur Verfügung. Es ist alles "quick and dirty", der Code ist sicherlich einfacher machbar und schöner realisierbar, aber es funktioniert so
Was ist technisch vorhanden?
- Eine Photovoltaikanlage mit 9,66kWp auf Ost, Süd und Westseite (SolarEdge Lösung, maximale Leistung etwa 7kWp)
- Eine Ladelösung fürs e-Auto basieren auf dem Phoenix Contact Ladecontroller EM-CP-PP-ETH
- eine virtuelle Maschine mit Debian Linux und ioBroker (http://www.iobroker.net)
Zu den Kosten: die PV-Anlage haben wir beim Hausbau schon installiert. Sie trägt sich nahezu selbst. Der Phoenix Controller hat irgendwas um die 200-250EUR gekostet. Der gesamte Software-Stack basiert auf kostenfrei erhältlicher Open Source Software.
Technisch funktioniert es wie folgt: eine Reihe von Scripten checkt in regelmäßigen Abständen, wie viel Strom gerade im Haus verbraucht wird, wieviel Strom durch die PV erzeugt wird und errechnet daraus den Überschuss. Das passiert etwa alle 30 Sekunden. Der überschüssige Strom wird, sobald mehr als 1000W übrig sind, der Ladelösung zur Verfügung gestellt. Um kurze Schwankungen (zB eine Wolke vor der PV oder ein kurzzeitig aktiver großer Verbraucher im Haus, die dafür sorgen könnten dass Strom aus dem Netz benötigt wird) abzufangen und nicht alle paar Sekunden die Ladeleistung an- und abzuschalten, zählt eine Reihe von Timern die Abstände zwischen den Messungen und zählt einen virtuellen Counter rauf bzw. runter, der die Ladeleistung zum Auto final freigibt.
Hier die Ladestromsteuerung in Abhängigkeit von der Überproduktion der PV Anlage:
Als erstes gibt es drei Modi: 0=Überschussladung durch PV, 1=20A Ladung egal woher der Strom kommt (auch ausm Netz), 2=Ladestation gesperrt:
Code: Alles auswählen
on({id: 'javascript.0.Ladestation.1.Modus', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
console.log('Lademodus Änderung!');
if (getState("javascript.0.Ladestation.1.Modus").val == 1) {
console.log('Modus 1 = Vollgas 20A');
setState("modbus.2.holdingRegisters.300_Ladestromstaerke"/*CP-Level Ladestromstaerke*/, 20);
setStateDelayed("modbus.2.coils.400_Ladefreigabe"/*CP-Coil*/, true, 1000, false);
} else if (getState("javascript.0.Ladestation.1.Modus").val == 2) {
console.log('Modus 2 = gesperrt');
setStateDelayed("modbus.2.coils.400_Ladefreigabe"/*CP-Coil*/, false, 1000, false);
}
});
Dies besorgt das folgende Script:
Code: Alles auswählen
var Ladestrom_verfuegbar, Aktueller_Ladestrom, Neuer_Ladestrom;
schedule("*/30 * * * * *", function () {
// Wenn der WR im Nachtmodus ist, machen wir hier gar nix.
if (getState("modbus.0.holdingRegisters.40108_OP-State").val != 2) {
if (getState("javascript.0.Ladestation.1.Modus").val == 0) {
// Wenn die Erzeugungslogik zu wenig Ertrag aufweist, sperren wir hier.
if (getState("javascript.0.SolarEdge.Minimalerzeugung_erreicht").val == true) {
// Minimalerzeugung ist erreicht, also los..
if (getState("modbus.2.coils.400_Ladefreigabe").val == false) {
setState("modbus.2.coils.400_Ladefreigabe"/*CP-Coil*/, true);
setStateDelayed("modbus.2.coils.400_Ladefreigabe"/*CP-Coil*/, true, 3000, false);
}
// Aktuellen Ladestrom in Variable schreiben
Ladestrom_verfuegbar = 0;
Ladestrom_verfuegbar = getState("modbus.2.inputRegisters.120_W_L1-N").val + (getState("javascript.0.Stromzaehler.Einspeisung_aktuell").val - getState("javascript.0.Stromzaehler.Netzbezug_aktuell").val);
Aktueller_Ladestrom = getState("javascript.0.Ladestation.1.Ladestrom_Ueberschussladen").val;
// Den neuen LS kennen wir noch nicht -> 0
Neuer_Ladestrom = 0;
if (Ladestrom_verfuegbar <= 1610) {
if (Ladestrom_verfuegbar >= 1000 && Ladestrom_verfuegbar <= 1610) {
// 6A ist Minimum, und da wir immer ein bisschen übrig haben wollen, gehen wir bis unter die Grenze von 7A hoch (1610W)
Neuer_Ladestrom = 6;
} else if (false) {
}
} else if (Ladestrom_verfuegbar >= 1611 && Ladestrom_verfuegbar <= 1840) {
Neuer_Ladestrom = 7;
} else if (Ladestrom_verfuegbar >= 1841 && Ladestrom_verfuegbar <= 2070) {
Neuer_Ladestrom = 8;
} else if (Ladestrom_verfuegbar >= 2071 && Ladestrom_verfuegbar <= 2300) {
Neuer_Ladestrom = 9;
} else if (Ladestrom_verfuegbar >= 2301 && Ladestrom_verfuegbar <= 2530) {
Neuer_Ladestrom = 10;
} else if (Ladestrom_verfuegbar >= 2531 && Ladestrom_verfuegbar <= 2760) {
Neuer_Ladestrom = 11;
} else if (Ladestrom_verfuegbar >= 2761 && Ladestrom_verfuegbar <= 2990) {
Neuer_Ladestrom = 12;
} else if (Ladestrom_verfuegbar >= 2991 && Ladestrom_verfuegbar <= 3220) {
Neuer_Ladestrom = 13;
} else if (Ladestrom_verfuegbar >= 3221 && Ladestrom_verfuegbar <= 3450) {
Neuer_Ladestrom = 14;
} else if (Ladestrom_verfuegbar >= 3451 && Ladestrom_verfuegbar <= 3680) {
Neuer_Ladestrom = 15;
} else if (Ladestrom_verfuegbar >= 3681 && Ladestrom_verfuegbar <= 3910) {
Neuer_Ladestrom = 16;
} else if (Ladestrom_verfuegbar >= 3911 && Ladestrom_verfuegbar <= 4140) {
Neuer_Ladestrom = 17;
} else if (Ladestrom_verfuegbar >= 4141 && Ladestrom_verfuegbar <= 4370) {
Neuer_Ladestrom = 18;
} else if (Ladestrom_verfuegbar >= 4371 && Ladestrom_verfuegbar <= 4600) {
Neuer_Ladestrom = 19;
} else if (Ladestrom_verfuegbar >= 4601) {
Neuer_Ladestrom = 20;
}
// Jetzt wissen wir den neuen Ladestrom! Alt=neu?
if (Aktueller_Ladestrom != Neuer_Ladestrom) {
// Oh, was Neues! Gleich an PV_Ladestrom geben!
console.log((['Ladestrom verändert, wird von ',Aktueller_Ladestrom,' verändert auf ',Neuer_Ladestrom].join('')));
setState("javascript.0.Ladestation.1.Ladestrom_Ueberschussladen"/*Ladestrom_Ueberschussladen*/, Neuer_Ladestrom, true);
setState("modbus.2.holdingRegisters.300_Ladestromstaerke"/*CP-Level Ladestromstaerke*/, Neuer_Ladestrom);
} else {
// Nix Neues, nix zu tun
console.log((['Ladestrom gleichgeblieben, bleibt bei ',Aktueller_Ladestrom,' (neu wäre ',Neuer_Ladestrom,' gewesen)'].join('')));
setState("modbus.2.holdingRegisters.300_Ladestromstaerke"/*CP-Level Ladestromstaerke*/, Neuer_Ladestrom);
}
} else {
// Minimalerzeugung nicht erreicht, also wird nicht nach PV-Überschuss geladen!
if (getState("modbus.2.coils.400_Ladefreigabe").val == true) {
setState("modbus.2.coils.400_Ladefreigabe"/*CP-Coil*/, false);
setStateDelayed("modbus.2.coils.400_Ladefreigabe"/*CP-Coil*/, false, 3000, false);
}
}
} else {
// Wir sind nicht im AUTO Modus des Ladereglers, nix zu tun
}
} else {
// Wechselrichter schläft, nix zu tun.
}
});
Code: Alles auswählen
var Mindesteinspeisung, timeout, timeout2, timeout3, timeout4, timeout5, timeout6, timeout7, timeout8, timeout9, timeout10, timeout11;
on({id: 'javascript.0.SolarEdge.Minimalerzeugung_Counter', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("modbus.0.holdingRegisters.40108_OP-State").val != 2) {
if (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val >= 8) {
setState("javascript.0.SolarEdge.Minimalerzeugung_erreicht"/*Minimalerzeugung_erreicht*/, true, true);
setState("javascript.0.SolarEdge.Minimalerzeugung_erreicht"/*Minimalerzeugung_erreicht*/, true);
}
if (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val < 3) {
setState("javascript.0.SolarEdge.Minimalerzeugung_erreicht"/*Minimalerzeugung_erreicht*/, false, true);
setState("javascript.0.SolarEdge.Minimalerzeugung_erreicht"/*Minimalerzeugung_erreicht*/, false);
}
}
});
schedule("*/3 * * * *", function () {
// Wir machen nur weiter, wenn der WR aktiv ist (OP=2)
Mindesteinspeisung = 1000;
if (getState("modbus.0.holdingRegisters.40108_OP-State").val != 2) {
console.log('CRON /3 ist durch, WR Ungleich 2: es geht los');
timeout = setTimeout(function () {
console.log((['Stufe 1. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout2 = setTimeout(function () {
console.log((['Stufe 2. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout3 = setTimeout(function () {
console.log((['Stufe 3. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout4 = setTimeout(function () {
console.log((['Stufe 4. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout5 = setTimeout(function () {
console.log((['Stufe 5. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout6 = setTimeout(function () {
console.log((['Stufe 6. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout7 = setTimeout(function () {
console.log((['Stufe 7. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout8 = setTimeout(function () {
console.log((['Stufe 8. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout9 = setTimeout(function () {
console.log((['Stufe 9. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout10 = setTimeout(function () {
console.log((['Stufe 10. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
timeout11 = setTimeout(function () {
console.log((['Stufe 11. ','Energiewert: ',getState("javascript.0.Energie").val,'; Verbrauch_ohAuto: ',getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'; Mindesteinspeis: ',getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val,'Counter: ',getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val].join('')));
if (getState("javascript.0.Energie").val - getState("javascript.0.Stromzaehler.Verbrauch_ohneAuto").val >= Mindesteinspeisung) {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val + 1));
} else {
setState("javascript.0.SolarEdge.Minimalerzeugung_Counter"/*Minimalerzeugung_Counter*/, (getState("javascript.0.SolarEdge.Minimalerzeugung_Counter").val - 1));
}
}, 15000);
}, 15000);
}, 15000);
}, 15000);
}, 15000);
}, 15000);
}, 15000);
}, 15000);
}, 15000);
}, 15000);
}, 15000);
}
});
Code: Alles auswählen
var timeout, timeout2;
on({id: 'smartmeter.0.1-0:1_8_0_255.value', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
// Der Bezugszähler 1.8.0 hat sich verändert -> BEZUG
timeout = setTimeout(function () {
setState("javascript.0.Stromzaehler.Netzbezug_aktuell"/*Netzbezug_aktuell*/, getState("smartmeter.0.1-0:15_7_0_255.value").val, true);
setState("javascript.0.Stromzaehler.Einspeisung_aktuell"/*Einspeisung_aktuell*/, 0, true);
setState("javascript.0.Stromzaehler.Verbrauch"/*Verbrauch*/, (getState("smartmeter.0.1-0:15_7_0_255.value").val + getState("javascript.0.Energie").val), true);
setState("javascript.0.Stromzaehler.Verbrauch_ohneAuto"/*Verbrauch_ohneAuto*/, ((getState("smartmeter.0.1-0:15_7_0_255.value").val + getState("javascript.0.Energie").val) - getState("modbus.2.inputRegisters.120_W_L1-N").val), true);
}, 200);
});
on({id: 'smartmeter.0.1-0:2_8_0_255.value', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
// Der Lieferzähler 2.8.0 hat sich verändert -> EINSPEISUNG
timeout2 = setTimeout(function () {
setState("javascript.0.Stromzaehler.Einspeisung_aktuell"/*Einspeisung_aktuell*/, getState("smartmeter.0.1-0:15_7_0_255.value").val, true);
setState("javascript.0.Stromzaehler.Netzbezug_aktuell"/*Netzbezug_aktuell*/, 0, true);
setState("javascript.0.Stromzaehler.Verbrauch"/*Verbrauch*/, (getState("javascript.0.Energie").val - getState("smartmeter.0.1-0:15_7_0_255.value").val), true);
setState("javascript.0.Stromzaehler.Verbrauch_ohneAuto"/*Verbrauch_ohneAuto*/, ((getState("javascript.0.Energie").val - getState("smartmeter.0.1-0:15_7_0_255.value").val) - getState("modbus.2.inputRegisters.120_W_L1-N").val), true);
}, 200);
});
Code: Alles auswählen
on({id: new RegExp('modbus\\.2\\.inputRegisters\\.100_CP-Status' + "|" + 'modbus\\.2\\.inputRegisters\\.120_W_L1-N'), change: "ne"}, function (obj) {
if (getState("modbus.2.inputRegisters.100_CP-Status").val == 65) {
// 65 = A = kein Auto angeschlossen
setState("javascript.0.Ladestation.1.Status_Text"/*Status_Text*/, 'kein Auto verbunden', true);
} else if (getState("modbus.2.inputRegisters.100_CP-Status").val == 66) {
// 66 = B = Auto angeschlossen, nicht bereit
setState("javascript.0.Ladestation.1.Status_Text"/*Status_Text*/, 'Auto verbunden,Lade-Ende', true);
} else if (getState("modbus.2.inputRegisters.100_CP-Status").val == 67 && getState("modbus.2.inputRegisters.120_W_L1-N").val <= 10) {
// 66 = C = Auto angeschlossen, ladebereit (aber <10W Abnahme)
setState("javascript.0.Ladestation.1.Status_Text"/*Status_Text*/, 'Auto verbunden,Vorbereitung..', true);
} else if (getState("modbus.2.inputRegisters.100_CP-Status").val == 67 && getState("modbus.2.inputRegisters.120_W_L1-N").val > 10) {
// 67 = D = Auto angeschlossen, lädt (Abnahme >10W)
setState("javascript.0.Ladestation.1.Status_Text"/*Status_Text*/, 'Auto verbunden, lädt', true);
} else if (getState("modbus.2.inputRegisters.100_CP-Status").val == 69) {
// 69 = E = Auto angeschlossen, Kurzschluss/kein Strom
setState("javascript.0.Ladestation.1.Status_Text"/*Status_Text*/, 'Kurzschluss oder kein Strom', true);
} else if (getState("modbus.2.inputRegisters.100_CP-Status").val == 70) {
// 70 = F = Auto angeschlossen, Systemfehler
setState("javascript.0.Ladestation.1.Status_Text"/*Status_Text*/, 'Systemfehler', true);
}
});
Code: Alles auswählen
schedule("0,30 19-21 * * 0-5", function () {
if (getState("hm-rega.0.7462").val == true && getState("javascript.0.CarNet.eGolf.BatteryPercentage").val <= 25) {
sendTo("telegram", "send", {
text: (['Achtung! Es ist jetzt ',formatDate(new Date(), "hh:mm"),' Uhr und der Akku des eGolf ist nicht voll! Letzter Stand: ',getState("javascript.0.CarNet.eGolf.BatteryPercentage").val,'% bzw. ',getState("javascript.0.CarNet.eGolf.ElectricRange").val,'km um ',formatDate(getDateObject(getState("javascript.0.CarNet.eGolf.ElectricRange").lc), "hh:mm")].join(''))
});
console.log("telegram: " + (['Achtung! Es ist jetzt ',formatDate(new Date(), "hh:mm"),' Uhr und der Akku des eGolf ist nicht voll! Letzter Stand: ',getState("javascript.0.CarNet.eGolf.BatteryPercentage").val,'% bzw. ',getState("javascript.0.CarNet.eGolf.ElectricRange").val,'km um ',formatDate(getDateObject(getState("javascript.0.CarNet.eGolf.ElectricRange").lc), "hh:mm")].join('')));
}
});
Ich wünsche viel Spass mit den Scripten (die natürlich jeder an seine Umgebung anpassen muss). Hoffe ich habe nix vergessen. Bei Fragen, gern melden.
VG
Christian