NEWS
Script Ladesteuerung PV Wallbox
-
Hallo zusammen,
habe ein Skript gefunden für die Ladesteuerung vom E-Auto (Überschussladen). Alles läuft im Iobroker über Modbus. Modbus 0 ist die Ladesteuerung (Phonix Contact EV Charge Control) und der Stromzähler ist über Modbus 1 angeschlossen. Werte von Ihm bekomme ich rein (Überschuss) und der Controller für das Auto ist auch da inkl. richtiger Werte. Allerdings habe ich zwei Probleme:- Im Register 300 (diskreter Ausgang) versuche ich immer den Wert des Überschusses in Ampere zu übermitteln. Es wird auch der richtige Wert übermittelt (z.B. 6), er springt aber immer wieder auf 5 zurück (unter 6 keine Ladung). Keine Ahnung warum. Über Webif des Controllers klappt es ohne Probleme.
- Die Auswertung des Datenpunktes vom Stromzähler klappt nicht obwohl dort der richtige Wert ist und übertragen wird. Scheinbar immer=0.
Hier das angepasst Skript für JavaSkript noch dazu:
schedule("*/30 * * * * *", function () {
if (getState("modbus.0.coils.400Ladefreigabe").val == false) {
setState("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, true);
setStateDelayed("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, true, 3000, false);
}
// Aktuellen Ladestrom in Variable schreiben
Ladestrom_verfuegbar = 0;
Ladestrom_verfuegbar = getState("modbus.1.inputRegisters.52_Ladestrom").val;
Aktueller_Ladestrom = getState("modbus.0.inputRegisters.100_Strom").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("modbus.0.holdingRegisters.300_Ladestromstaerke", Neuer_Ladestrom);
} else {
// Nix Neues, nix zu tun
console.log((['Ladestrom gleichgeblieben, bleibt bei ',Aktueller_Ladestrom,' (neu wäre ',Neuer_Ladestrom,' gewesen)'].join('')));
}
} else {
// Minimalerzeugung nicht erreicht, also wird nicht nach PV-Überschuss geladen!
if (getState("modbus.0.coils.400_Ladefreigabe").val == true) {
setState("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, false);
setStateDelayed("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, false, 3000, false);
}
}
} else {
// Wir sind nicht im AUTO Modus des Ladereglers, nix zu tun
}
} else {
// Wechselrichter schläft, nix zu tun.
}
});
Eventuell kann hier mir jemand helfen. Sitze da ratlos davor und finde den Fehler nicht.
Danke
-
@nightdoom sagte in Script Ladesteuerung PV Wallbox:
schedule("*/30 * * * * *", function () {
if (getState("modbus.0.coils.400Ladefreigabe").val == false) {du hast den _ vergessen zwischen 400 und Ladefreigabe
modbus.0.coils.400_Ladefreigabe
EDIT :
https://www.goingelectric.de/forum/viewtopic.php?f=105&t=33502
-
@glasfaser
Habe das nun geändert. War das der einzige Fehler? Bei Goingelectric (da ist das angepasste her) habe ich nach was einfachem geschaut aber nix gefunden. Das genannte scheint ja noch komplizierter zu sein.schedule("*/30 * * * * *", function () { if (getState("modbus.0.coils.400_Ladefreigabe").val == false) { setState("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, true); setStateDelayed("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, true, 3000, false); } // Aktuellen Ladestrom in Variable schreiben Ladestrom_verfuegbar = 0; Ladestrom_verfuegbar = getState("modbus.1.inputRegisters.52_Ladestrom").val; Aktueller_Ladestrom = getState("modbus.0.inputRegisters.100_Strom").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("modbus.0.holdingRegisters.300_Ladestromstaerke", Neuer_Ladestrom); } else { // Nix Neues, nix zu tun console.log((['Ladestrom gleichgeblieben, bleibt bei ',Aktueller_Ladestrom,' (neu wäre ',Neuer_Ladestrom,' gewesen)'].join(''))); } } else { // Minimalerzeugung nicht erreicht, also wird nicht nach PV-Überschuss geladen! if (getState("modbus.0.coils.400_Ladefreigabe").val == true) { setState("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, false); setStateDelayed("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, false, 3000, false); } } } else { // Wir sind nicht im AUTO Modus des Ladereglers, nix zu tun } } else { // Wechselrichter schläft, nix zu tun. } });