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

Sørg for din Shelly Plus I4 er opdateret til nyeste firmware.

  • Tryk på tandhjulet
  • Tryk på firmware
  • Opdatere til nyeste firmware

Trin 3: Sæt input mode til "button"

  • Tryk på hjem-ikonet
  • Vælg den indgang du vil bruge
  • Tryk på See more ved Input mode
  • Vælg Button  under input mode
  • Vælg Momentary Switch

Trin 4: Indsæt og klargør script

Slå Websocket debug til

For at vi kan se status i loggen, skal vi først slå Websocket debug til (dette er ikke nødvendigt).

  • Tryk på tandhjulet.
  • Vælg Debug.
  • Sæt hak i “Enable Websocket Debug”
  • Tryk “Save Settings”

Indsæt script

  • Tryk på script ikonet (<>)
  • Tryk på “Create new script”
  • Giv dit script et navn

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)

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)

Script til at styre Dimmer Gen3, Pro Dimmer 1PM/2PM (kræver firmware 1.4 eller nyere)
/**
 * 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.

Trin 6: Afslutning

Gem script

  • Her efter trykkes på “Save” og “Start” i toppen
  • Tryk igen på script ikonet
  • Ud for script navnet  skal knappen til højre være aktiv, for at scriptet automatisk skal starte efter strøm afbrydelse