towiat ich habe auch Dein Skript getestet. Allerdings passiert bei dem Skript leider garnichts bei mir. Also noch nicht einmal ein Fehler oder so.
Ich habe jetzt heute nochmal am PC alles getestet. Sowohl die Ursprungsversion wie auch die Version von eiche funktionieren. Die von eiche natürlich korrekter, weil sie die Abfrage abwartet. Dadurch dauert es natürlich länger. Ist aber nicht schlimm. Das Skript macht wenn es läuft alles richtig. Danke schon einmal dafür.
Jetzt gibt es nur ein kleines Problem: Wenn das Skript gestartet wird oder der Shelly Autostart verwendet, kommt es zu dem Problem dass das Skript den Out1 kurz ein und dann wieder aus schaltet, wenn natürlich Switch 0 und 1 an sind.
Ich erkläre es mal kurz: Stromausfall => Es gibt Shellies die an bleiben (so auch der Entfernte. Der Shelly der programmiert wird, geht aus. Die PV-Anlage schaltet nach kurzer Zeit den Notstrom ein. Der Shelly der das Skript hat geht an und liest den entfernten Shelly aus der im mitteilt, das gerade Notstrom läuft. Somit darf er nicht einschalten, da der Shelly dafür sorgt, dass alle Starkstromverbraucher ausgeschaltet bleiben und zwar so lange bis der Netzbetrieb wieder läuft.
Hier nochmal das Skript, welches jetzt aber auch die Netzspannung im print immer auf Eingeschaltet lässt.
const shelly2_ip = "192.168.120.161";
let switch_status = [false, false]; // Datenfeld mit Indexen 0 und 1
// Funktion, um den Status des Schalters abzurufen
function getSwitchStatus(id, callback) {
Shelly.call("HTTP.GET",{url: "http://" + shelly2_ip + "/rpc/Switch.GetStatus?id=" + id,},
function(result, errc, errm, id) { // errc, errm müssen eingefügt werden, damit die id importiert wird, s.u.
try {
let response = JSON.parse(result.body);
callback(id, response);
} catch (e) {
print("Fehler beim Parsen der Antwort:", e.message);
callback(id, null);
}
}, id // muss als user defined parameter übergeben werden
);
}
// Funktion zum Aktualisieren des Schalterstatus
function updateSwitchStatus(id) {
getSwitchStatus(id, function(id, status) {
if (status !== null) {
switch_status[id] = status.output;
print("Netzspannung" + (id+1) + ":", switch_status ? "Eingeschaltet" : "Ausgeschaltet");
} else {
print("Fehler beim Abrufen des Schalterstatus Netzspannung" + (id+1) + ".");
}
});
}
// Funktion zur Steuerung des Relais
function setRelayState(state) {
Shelly.call("Switch.Set", { id: 0, on: state}, function(result, error_code, error_message) {
if (error_code !== 0) {
print("Fehler beim Schalten des Relais Starkstrom:", error_message);
} else {
print("Starkstrom:", state ? "Eingeschaltet" : "Ausgeschaltet");
}
});
}
// Funktion zur regelmäßigen Überprüfung der Intervallsteuerung
function startControl() {
// Setze eine Funktion zur regelmäßigen Überprüfung alle 10 Sekunden
Timer.set(10000, true, function() {
updateSwitchStatus(0); // Frage Switch 0 vom Pro2 ab
updateSwitchStatus(1); // Frage Switch 1 vom Pro2 ab
print("Das Netz wurde", switch_status[0] ? "auf Akkubetrieb" : "auf Netzbetrieb", "umgeschaltet");
setRelayState(!(switch_status[0] && switch_status[1])); // Aktualisiere die gewünschten Relaiszustände
});
}
// Starte Schleife
startControl();
Alles anzeigen