Shelly til Shelly Standalone uden Wi-fi (men med Wi-fi)
- Home
- Shelly til Shelly Standalone uden Wi-fi (men med Wi-fi)
Introduktion:
Selvom du befinder dig i et område uden Wi-Fi-dækning, er det faktisk muligt at få to eller flere Shelly-enheder til at integrere med hinanden baseret på Actions (webhooks) og range extender funktionen.
I dette eksempel vil vi bruge to Shelly Plus 1PM-enheder.
Den ene med range extender aktiveret kalder vi Master.
Den anden kalder vi Slave.
Note:
Da vi bruger enhederne uden internetforbindelse, er det ikke muligt at bruge Schedule funktionen.
*Update* Script Version (Kun på engelsk for nu)
If you just want a simple follow function where one or more relays (up to four) automatically mirror the state of a master relay.
this can now be done easily with a script.
Note:
This script only mirrors the ON/OFF status from one relay to others.
If you need two-way synchronization (where both relays follow each other),
you still need to follow the original guide below.
Access Point Switch Sync script:
- Detects all devices connected to the Shelly’s access point.
- Sends the current switch state (on/off) to each connected client.
- Automatically keeps all connected devices synchronized.
- Supports up to 4 clients per access point
Tested with FW 1.7.1
Setup steps
- Enable Range extender mode on your Shelly device
(Settings → Wi-Fi → Access Point → Enable) - Upload the script under
(Settings → Scripts → Add new script → Paste code → Save & Enable)
Note: make sure to toggle “Run on startup” - Connect other Shellys to this AP (they will act as clients).
See how to add Script guide here.
Notes
- Works for Switch components only (not Light).
- Max 4 connected devices recommended.
- Works only with channel ID:0 (can be adjustet in script settings)
Script der skal på "Master"
/*
Automatically detects all devices connected to the access point
and synchronizes the switch state with them.
!!Script can handle max 4 connected devices!!
*/
try {
// CONFIG
let SWITCH_ID = 0; // which relay we follow
let TARGET_ENDPOINT = "/rpc/Switch.Set?id=0&on="; // webhook path
function sendToClients(state) {
print("Fetching AP clients...");
Shelly.call("Wifi.ListAPClients", {}, function(result, err) {
if (err) {
print("Error getting AP clients:", JSON.stringify(err));
return;
}
let clients = result.ap_clients;
if (!clients || clients.length === 0) {
print("No clients connected to AP");
return;
}
print("Found", clients.length, "clients");
for (let i = 0; i < clients.length; i++) {
let ip = clients[i].ip;
if (!ip) continue;
let url = "http://" + ip + TARGET_ENDPOINT + (state ? "true" : "false");
print("-> Sending command to", ip, ":", url);
Shelly.call("HTTP.GET", { url: url }, function(res, err) {
if (err) {
print("Error sending to", ip, ":", JSON.stringify(err));
} else {
print("Response from", ip, ":", JSON.stringify(res));
}
});
}
});
}
// Event listener
Shelly.addEventHandler(function(event) {
if (event.component === "switch:" + SWITCH_ID &&
event.info && event.info.event === "toggle") {
let newState = event.info.state; // true = on, false = off
print("Switch", SWITCH_ID, "toggled. New state:", newState);
sendToClients(newState);
}
});
print("Follow script started. Waiting for toggle events...");
} catch (e) {
print("Error in follow script:", e.message || e);
} Hvis man også vil have mulighed for at styre lys fra “Slaver”
Skal dette script lægges på de enheder der er slaver
Script der skal på "Slaver"
/*************************************************
* Relay mirror sender
*
* Watches local relay state and sends it to
* another Shelly device via HTTP GET RPC call.
*************************************************/
let CONFIG = {
local_switch_id: 0, // Relæ på denne enhed
target_ip: "192.168.33.1",
target_switch_id: 0, // Relæ på modtager-enheden
debug: true
};
let lastSentState = null;
// ---------- Helpers ----------
function log() {
if (!CONFIG.debug) return;
print.apply(null, arguments);
}
function buildUrl(state) {
return "http://" + CONFIG.target_ip +
"/rpc/Switch.Set?id=" + CONFIG.target_switch_id +
"&on=" + (state ? "true" : "false");
}
function sendRelayState(state) {
let url = buildUrl(state);
log("[SEND] Relay state:", state ? "ON" : "OFF");
log("[URL] ", url);
Shelly.call("HTTP.GET", { url: url }, function (res, err_code, err_msg) {
if (err_code !== 0) {
print("[ERROR] HTTP.GET failed:", err_code, err_msg);
return;
}
log("[OK] State sent successfully");
});
}
function handleState(state) {
if (lastSentState === state) {
log("[SKIP] Same state as last sent:", state ? "ON" : "OFF");
return;
}
lastSentState = state;
sendRelayState(state);
}
function readAndSendCurrentState() {
Shelly.call("Switch.GetStatus", { id: CONFIG.local_switch_id }, function (res, err_code, err_msg) {
if (err_code !== 0) {
print("[ERROR] Switch.GetStatus failed:", err_code, err_msg);
return;
}
if (typeof res.output === "boolean") {
log("[INIT] Current relay state:", res.output ? "ON" : "OFF");
handleState(res.output);
} else {
print("[ERROR] Could not read relay output state");
}
});
}
// ---------- Event handler ----------
Shelly.addStatusHandler(function (e) {
if (!e || !e.component) return;
if (e.component === "switch:" + CONFIG.local_switch_id) {
if (e.delta && typeof e.delta.output === "boolean") {
log("[EVENT] Relay changed to:", e.delta.output ? "ON" : "OFF");
handleState(e.delta.output);
}
}
});
// ---------- Startup ----------
print("[INIT] Relay mirror sender started");
readAndSendCurrentState();
The originale guide fra webinterface starter her:
Trin 1: Opdater Firmwaren
Det er altid en god idé at opdatere firmwaren til den nyeste version.
For at gøre dette skal enhederne være tilsluttet et Wi-Fi-netværk med internetadgang.
Udfør dette trin for alle enheder.
1.
Log ind på enhedens access point og gå til den web interface ved at skrive 192.168.33.1 i en browser.
![]()
Trin 2: Opsæt Master. AP password og aktiver Range Extender
Trin 3: Opsæt Slave. AP password og opret forbindelse til Master
Trin 4: Se enheder der er forbundet til Range Extenderen
Forklaring
Som du kan se, så er der to forbundne enheder, men vi har kun forbundet en enhed?
Når man slår range extender funktionen til på en enhed, så viser den sig selv som forbundet.
Kig efter MAC adressen for at finde den der er din slave.
Du kan så kopiere Slavens interne ip adresse og sætte den ind i et nyt browser vindue for at tilgå dens web interface.
Ud fra denne information, ved vi nu , hvilke ip adresser vi ska bruge til Actions/webhook kommandoerne.
Master = 192.168.33.1
Slave = 192.168.33.3
Trin 5: Eksempel på at tænde flere Shelly'er sammen med actions
Der er mange måde du kan vælge at styre lyset på.
I det følgende eksempel, vil jeg vise, hvor simpelt det er er tænde flere shelly’er sammen ved hjælp af actions.
På denne måde vil den ene altid være tændt/slukket baseret på den anden enhed og omvendt.
Note: Dette eksempel kræver, man bruger afbryderen som kiptænding, så, hvis du har en alm. afbryder, så skal der en fjeder i.
1. Både Master og Slave skal sættes til Button-momentary input mode
2. Opret actions på Master enhed
Gå til Actions -> New Action – Select Output – Create action.
Opret to actions.
When it’s ON then Turn Slave ON
When it’s OFF then Turn Slave OFF
Click here for at se alle HTTP kommandoer
Tænd Slave, når output på Master er Tændt
- Giv den et navn
- Execute when: Vælg “Switch toggled on”
- Then do: klik på “+ Add URL” og tilføj http kommandoen for at tænde slave enheden.
http://192.168.33.3/relay/0?turn=on
Sluk Slave, når output på Master er slukket
- Giv den et navn.
- Execute when: Vælg “Switch toggled off”
- Then do: klik på “+ Add URL” og tilføj http kommandoen for at slukke slave enheden.
http://192.168.33.3/relay/0?turn=off
3. Opret action på Slave enhed
Gå til Actions -> New Action – Select Output – Create action.
Opret to actions.
When it’s ON then Turn Master ON
When it’s OFF then Turn Master OFF
Click here for at se alle HTTP kommandoer
Tænd Slave, når output på Master er Tændt
- Giv den et navn.
- Execute when: Vælg “Switch toggled on”
- Then do: Klik på “+ Add URL” og tilføj http kommandoen for at tænde Master enheden.
http://192.168.33.1/relay/0?turn=on
Turn Master OFF, when output of Slave is OFF
- Give it a Name.
- Execute when: Vælg “Switch toggled off”
- Then do: Klik på “+ Add URL” og tilføj http kommandoen for at tænde Master enheden.
http://192.168.33.1/relay/0?turn=off
Trin 6: Du er Færdig
Meget nemt!















