let MINISERVER_IP = "---------";
let CHECK_INTERVAL = 20000;
let failCount = 0;
let threshold = 3;
let currentMode = "unknown";
function setShellyMode(mode) {
if (currentMode === mode) return;
// Bei Gen 3 Button/Taster-Konfiguration nutzen wir 'Input.SetConfig'
// mode ist hier entweder 'detached' oder 'momentary'
Shelly.call("Input.SetConfig", {
id: 0,
config: {
type: "button", // Sicherstellen, dass es als Taster erkannt wird
enable: true,
invert: false
}
});
// Der entscheidende Befehl für die Trennung/Kopplung beim Taster
Shelly.call("Switch.SetConfig", {
id: 0,
config: {
in_mode: mode
}
}, function(res, error_code, error_msg) {
if (error_code === 0) {
currentMode = mode;
print("Taster-Modus erfolgreich geändert auf:", mode);
} else {
print("Fehler beim Umstellen:", error_msg);
}
});
}
function checkLoxone() {
Shelly.call("HTTP.GET", { url: "http://" + MINISERVER_IP + "/dev/sps/ping", timeout: 3 },
function(res, error_code) {
if (error_code === 0) {
// Loxone erreichbar -> Taster vom Relais trennen
if (failCount >= threshold
currentMode !== "detached") {
setShellyMode("detached");
}
failCount = 0;
} else {
// Loxone offline -> Taster direkt mit Relais koppeln
failCount++;
print("Miniserver offline. Fail-Count:", failCount);
if (failCount >= threshold && currentMode !== "momentary") {
setShellyMode("momentary");
}
}
}
);
}
Timer.set(CHECK_INTERVAL, true, checkLoxone);
print("Taster-Fallback-Script gestartet...");
checkLoxone();