75 lines
No EOL
1.9 KiB
JavaScript
75 lines
No EOL
1.9 KiB
JavaScript
// WiFi AP Fallback Script v1.1
|
|
// Fix: volledige AP-config meegeven bij SetConfig
|
|
|
|
let CONFIG = {
|
|
checkInterval: 60,
|
|
apDisableOnReconnect: true,
|
|
debugLog: true
|
|
};
|
|
|
|
let apActive = false;
|
|
let apConfig = null; // Bewaar originele AP-config
|
|
|
|
function log(msg) {
|
|
if (CONFIG.debugLog) print("[AP-Fallback] " + msg);
|
|
}
|
|
|
|
function setAP(enable) {
|
|
if (enable === apActive || apConfig === null) return;
|
|
|
|
log(enable ? "WiFi verloren - AP inschakelen..." : "WiFi hersteld - AP uitschakelen...");
|
|
|
|
// Volledige AP-config meesturen, alleen 'enable' aanpassen
|
|
let newApCfg = {
|
|
ssid: apConfig.ssid,
|
|
enable: enable
|
|
};
|
|
|
|
// Wachtwoord alleen meesturen als het ingesteld is
|
|
if (apConfig.is_open === false) {
|
|
newApCfg.pass = apConfig.pass || "";
|
|
}
|
|
|
|
Shelly.call("WiFi.SetConfig", { ap: newApCfg }, function (res, err) {
|
|
if (err !== 0) {
|
|
log("Fout bij instellen AP: " + JSON.stringify(err));
|
|
} else {
|
|
apActive = enable;
|
|
log("AP is nu " + (enable ? "AAN" : "UIT"));
|
|
}
|
|
});
|
|
}
|
|
|
|
function checkWiFi() {
|
|
Shelly.call("WiFi.GetStatus", {}, function (res, err) {
|
|
if (err !== 0) {
|
|
log("Kan WiFi-status niet ophalen");
|
|
return;
|
|
}
|
|
|
|
let connected = (res.sta_ip !== null && res.sta_ip !== "");
|
|
|
|
if (!connected) {
|
|
setAP(true);
|
|
} else if (connected && CONFIG.apDisableOnReconnect && apActive) {
|
|
setAP(false);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Eerst huidige AP-config ophalen als referentie
|
|
Shelly.call("WiFi.GetConfig", {}, function (res, err) {
|
|
if (err !== 0 || !res.ap) {
|
|
log("Kan AP-config niet ophalen - script stopt");
|
|
return;
|
|
}
|
|
|
|
apConfig = res.ap;
|
|
apActive = res.ap.enable;
|
|
log("Start - AP: " + (apActive ? "AAN" : "UIT") + ", SSID: " + apConfig.ssid);
|
|
|
|
// Pas starten na ophalen config
|
|
Timer.set(CONFIG.checkInterval * 1000, true, checkWiFi);
|
|
checkWiFi();
|
|
log("Controle elke " + CONFIG.checkInterval + "s");
|
|
}); |