Styr Shelly Dimmer med eksternt tryk (Danish)
- Home
- Styr Shelly Dimmer med eksternt tryk (Danish)
Trådløs lysdæmpning af Shelly Dimmer 2, Gen3 og Pro fra Shelly-enhed med fast forsyning
Eksempel: Styring af Shelly Dimmer 2 via input på en Shelly Plus/Pro-enhed
Dette eksempel viser, hvordan du kan anvende inputtet fra en Shelly Plus/Pro-enhed til at styre en Shelly Dimmer 2. Metoden virker også til styring af Dimmer Gen3 og Pro Dimmer.
I eksemplet bruges en Shelly Plus i4, hvor en 1-polet fjederafbryder er tilsluttet for at styre lysdæmpningen af en Shelly Dimmer 2 trådløst. Bemærk at du kan bruge hvilken som helst Shelly-enhed med input, som fx. en Shelly 1 Mini eller lignende.
Konfigurationen foretages via enhedens webinterface.
Når scriptet er sat op, opnås følgende funktionalitet via afbryderen:
- Kort tryk: Tænder eller slukker lyset
- Dobbelt kort tryk: Indstiller lysstyrken til 100 %
- Langt tryk: Øger eller sænker lysstyrken gradvist
Trin 1: Tilgå webinterface på din input-enhed
Find enhedens IP-adresse i din router, via Shelly Smart Control Appen eller control.shelly.cloud
Tilgå enhedens webinterface ved at skrive dens IP-adresse i en browser.
Trin 2: Opdater firmware
Trin 3: Sæt input mode til "button"
Trin 4: Indsæt og klargør script
Slå Websocket debug til
Indsæt script
Nu kopieres hele det nedenstående kode ind i det nye script.
(Tryk på “Copy” oppe i højre hjørne af scriptet)
Script til at styre Dimmer 2 (Gen1)
/**
* @copyright shelly-tools contributors
* @license GNU Affero General Public License (https://www.gnu.org/licenses/agpl-3.0.de.html)
* @authors https://github.com/shelly-tools/shelly-script-examples/graphs/contributors
*
* This script is intended to remote control a Shelly Dimmer / Dimmer2 and emulates the locally connected button.
* short_press = on/off toggle, double_press = on with 100% brightness, long_press cycle between dimming and brightening.
*/
// Array of dimmers to be controlled
let dimmer = [
'192.168.2.201', // dimmer controlled with button 0
// '192.168.61.241', // dimmer controlled with button 1
// '192.168.61.242', // dimmer controlled with button 2
// '192.168.61.243', // dimmer controlled with button 3
];
// CONFIG END
let dimstate = [
false,
false,
false,
false,
];
let up = [
false,
false,
false,
false,
];
// Add an eventHandler for button type input and various push events
Shelly.addEventHandler(function (event) {
try {
if (typeof event.info.event !== 'undefined') {
let i = event.info.id;
if (typeof dimmer[i] !== 'undefined') {
if (dimstate[i] === true && event.info.event === 'btn_up') {
dimstate[i] = false;
print("release");
Shelly.call(
"http.get", {
url: 'http://' + dimmer[i] + '/light/0?dim=stop'
},
function (response, error_code, error_message, ud) { },
null
);
}
if (event.info.event === 'single_push') {
Shelly.call(
"http.get", {
url: 'http://' + dimmer[i] + '/light/0?turn=toggle'
},
function (rs, ec, em) { },
null
);
} else if (event.info.event === 'double_push') {
Shelly.call(
"http.get", {
url: 'http://' + dimmer[i] + '/light/0?turn=on&brightness=100'
},
function (rs, ec, em) { },
null
);
} else if (event.info.event === 'long_push' && up[i]) {
dimstate[i] = true;
up[i] = false;
print("cycle");
Shelly.call(
"http.get", {
url: 'http://' + dimmer[i] + '/light/0?dim=down&step=100'
},
function (rs, ec, em) { },
null
);
} else if (event.info.event === 'long_push' && up[i] === false) {
dimstate[i] = true;
up[i] = true;
print("cycle");
Shelly.call(
"http.get", {
url: 'http://' + dimmer[i] + '/light/0?dim=up&step=100'
},
function (rs, ec, em) { },
null
);
}
else {
return true;
}
}
} else {
return true;
}
} catch (e) {
print("Fejl i event handler: " + e.message);
}
}); Script til at styre Dimmer Gen3 og Pro Dimmer 1/2PM
I dette script skal man definere IP adresse for den lysdæmper der skal styres og hvilken kanal/udgang.
Nu kopieres hele nedenstående script.
(Tryk på “Copy” oppe i højre hjørne af scriptet)
/**
* Remote control of a Shelly Dimmer Gen3 Shelly Pro Dimmer 1PM/2PM
* short_press = on/off toggle, double_press = on at 100% brightness, long_press = dimming.
*/
// Add here which Device(ip adress) and channel you want to control
// Channel 0 = output 1, channle 1 = output 2.
// Set IP to 0.0.0.0 to disable
let devices = [
{ ip: '192.168.2.169', channel: 0 },
{ ip: '192.168.2.170', channel: 0 },
{ ip: '0.0.0.0', channel: 0 },
{ ip: '0.0.0.0', channel: 1 }
];
// State arrays
let dimstate = [ false, false, false, false ];
let up = [ false, false, false, false ];
// Handle button input events
Shelly.addEventHandler(function (event) {
try {
if (typeof event.info.event === 'undefined') {
return true;
}
let i = event.info.id; // input ID (0–3)
let ev = event.info.event; // event name
let dev = devices[i]; // device configuration for this input
// If there is no device configured or IP is '0.0.0.0', do nothing
if (!dev || !dev.ip || dev.ip === '0.0.0.0') {
print("Input " + i + ": No device configured or IP=0.0.0.0 → nothing done");
return true;
}
let ip = dev.ip;
let ch = dev.channel;
// Always log the received event
print("Input " + i + ": Received event '" + ev + "' → controlling IP " + ip + " channel " + ch);
// STOP dimming cycle on button release (btn_up)
if (dimstate[i] && ev === 'btn_up') {
dimstate[i] = false;
print("Input " + i + ": Stopping dim cycle (DimStop) on " + ip + " channel " + ch);
Shelly.call("http.get", {
url: 'http://' + ip + '/rpc/Light.DimStop?id=' + ch
}, null, null);
return true;
}
// SINGLE_PRESS: toggle on/off
if (ev === 'single_push') {
print("Input " + i + ": Sending toggle command to " + ip + " channel " + ch);
Shelly.call("http.get", {
url: 'http://' + ip + '/light/' + ch + '?turn=toggle'
}, null, null);
// DOUBLE_PRESS: turn on at 100% brightness
} else if (ev === 'double_push') {
print("Input " + i + ": Sending light.set (100% ON) to " + ip + " channel " + ch);
Shelly.call("http.get", {
url: 'http://' + ip + '/rpc/light.set?id=' + ch + '&on=true&brightness=100'
}, null, null);
// LONG_PRESS: start dimming cycle (down or up)
} else if (ev === 'long_push') {
dimstate[i] = true;
up[i] = !up[i]; // flip direction each time a long press happens
if (up[i]) {
print("Input " + i + ": Starting DimUp on " + ip + " channel " + ch);
Shelly.call("http.get", {
url: 'http://' + ip + '/rpc/Light.DimUp?id=' + ch + '&fade_rate=4'
}, null, null);
} else {
print("Input " + i + ": Starting DimDown on " + ip + " channel " + ch);
Shelly.call("http.get", {
url: 'http://' + ip + '/rpc/Light.DimDown?id=' + ch + '&fade_rate=4'
}, null, null);
}
} else {
// If it’s another event (e.g., btn_down), ignore here
print("Input " + i + ": Unhandled event '" + ev + "'");
return true;
}
} catch (e) {
print("Error in event handler: " + e.message);
}
}); Trin 5a: Tilpas script for Dimmer 2
Find og tilpas IP-adresse på din lysdæmper
Når scriptet er indsat, skal du navigere til linje 13–15. Her finder du fire linjer med IP-adresser – én for hver indgang på din Shelly Plus i4 (eller anden input-enhed, f.eks. Shelly 1 Mini).
Hver linje definerer, hvilken Shelly Dimmer 2 der skal styres af det pågældende input:
- Første linje: Angiver hvilken Dimmer 2 der styres af input 0 (indgang 1)
- Anden linje: Angiver hvilken Dimmer 2 der styres af input 1 (indgang 2)
- Tredje linje: Angiver hvilken Dimmer 2 der styres af input 2 (indgang 3)
- Fjerde linje: Angiver hvilken Dimmer 2 der styres af input 3 (indgang 4)
Eksempel:
Hvis input 0 på Shelly Plus i4 skal styre en Dimmer 2 med IP-adressen 192.168.1.34, skal denne IP indsættes på første linje.
Hvis det i stedet er input 3, skal IP-adressen indsættes på fjerde linje.
Ønsker du, at flere indgange skal styre forskellige Dimmer-enheder, fjerner du de dobbelte skråstreger (//) foran den relevante linje og indsætter IP-adressen på den pågældende Dimmer 2. Gentag processen for de øvrige indgange efter behov.
Før
let dimmer = [
'192.168.61.240', // dimmer controlled with button 0
// '192.168.61.241', // dimmer controlled with button 1
// '192.168.61.242', // dimmer controlled with button 2
// '192.168.61.243', // dimmer controlled with button 3 Efter
let dimmer = [
'192.168.1.34', // dimmer controlled with button 0
'192.168.1.57', // dimmer controlled with button 1
// '192.168.61.242', // dimmer controlled with button 2
// '192.168.61.243', // dimmer controlled with button 3 Trin 5b: Tilpas script for Dimmer Gen3 og Pro Dimmer
Når scriptet er indsat på din input-enhed, skal du navigere til linje 10–13.
Her finder du fire linjer med IP-adresser – én for hver indgang på din Shelly Plus i4 eller anden input-enhed (f.eks. Shelly 1 Mini).
Hver linje definerer, hvilken Shelly Dimmer der skal styres af det tilhørende input:
- Linje 1: Input 0 (indgang 1)
- Linje 2: Input 1 (indgang 2)
- Linje 3: Input 2 (indgang 3)
- Linje 4: Input 3 (indgang 4)
Ved hver linje angives også en parameter kaldet “channel”, som definerer hvilken udgang på lysdæmperen der skal styres:
- For Shelly Dimmer Gen3 og Shelly Pro Dimmer 1PM anvendes altid channel 0
- For Shelly Pro Dimmer 2PM skal du vælge enten:
-
- channel 0 for udgang 1
- channel 1 for udgang 2
Eksempel:
Hvis du ønsker, at input 0 på din Shelly i4 skal styre en Shelly Dimmer Gen3 med IP-adressen 192.168.1.34, skal du angive denne IP på første linje og sætte channel: 0.
Hvis det i stedet er input 3, er det fjerde linje der skal opdateres.
Ønsker du, at flere indgange skal styre forskellige lysdæmpere, skal du tilpasse IP-adresserne og kanalværdierne individuelt for hver linje. Gentag processen for de ønskede inputs.











