Styr Dimmer 2 med eksternt tryk (Danish)

Styr Dimmer 2 med eksternt tryk (Danish)

Trådløs lysdæmpning mellem Shelly Plus I4 og Shelly Dimmer 2 / Pro Dimmer

Her beskrives, hvordan man kan få inputtet fra en Shelly Plus/Pro enhed til at styre en Shelly Dimmer 2.
I dette eksempel bruger vi en Shelly Plus I4 hvorpå der er tilsluttet en 1-polet afbryder med fjeder til at styre en Shelly Dimmer 2.
Der tages også udgangspunkt i at der arbejdes fra enhedens webinterface.

Når scriptet er sat op får du følgende funktionalitet:

  • Kort tryk: tænd/sluk
  • Dobbelt kort tryk: 100 % lysstyrke
  • Langt tryk: lysstyrke op/ned

Trin 1: Tilgå enhedens webinterface

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
/**
 * @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 conencted button.
 * short_press = on/off toggle, double_press = on with 100% brightness, long_press cylce between dimming and brightening.
 */

// Array of dimmers to be controlled
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 
];
// CONFIG END 

let dimstate = [
    false,
    false,
    false,
    false,
];

let up = [
    false,
    false,
    false,
    false,
];



// add an evenHandler for button type input and various push events
Shelly.addEventHandler(
    function (event) {
        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;
        }
    },
);

Til Pro-dimmeren er der to scripts. Et til at styre Kanal 1 og et andet til at styre Kanal 2
Nu kopieres hele det nedenstående kode ind i det nye script.
(Tryk på Copy oppe i højre hjørne af scriptet)

Script for controlling Pro Dimmer 1PM Ch.1 (Requires Firmware 1.4+)
/**
 * @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 conencted button.
 * short_press = on/off toggle, double_press = on with 100% brightness, long_press cylce between dimming and brightening.
 */
 
// Array of dimmers to be controlled
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 
];
// CONFIG END 
 
let dimstate = [
    false,
    false,
    false,
    false,
];
 
let up = [
    false,
    false,
    false,
    false,
];
 
 
 
// add an evenHandler for button type input and various push events
Shelly.addEventHandler(
    function (event) {
        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] + '/rpc/Light.DimStop?id=0'
                    },
                        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] + '/rpc/light.set?id=0&on=true&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] + '/rpc/Light.DimDown?id=0&fade_rate=4'
                    },
                        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] + '/rpc/Light.DimUp?id=0&fade_rate=4'
                    },
                        function (rs, ec, em) { },
                        null
                    );
                }
 
                else {
                    return true;
                }
            }
        } else {
            return true;
        }
    },
);
Script for controlling Pro Dimmer 1PM/2PM Ch. 2 (Requires Firmware 1.4+)
/**
 * @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 conencted button.
 * short_press = on/off toggle, double_press = on with 100% brightness, long_press cylce between dimming and brightening.
 */
 
// Array of dimmers to be controlled
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 
];
// CONFIG END 
 
let dimstate = [
    false,
    false,
    false,
    false,
];
 
let up = [
    false,
    false,
    false,
    false,
];
 
 
 
// add an evenHandler for button type input and various push events
Shelly.addEventHandler(
    function (event) {
        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] + '/rpc/Light.DimStop?id=1'
                    },
                        function (response, error_code, error_message, ud) { },
                        null
                    );
                }
 
                if (event.info.event === 'single_push') {
                    Shelly.call(
                        "http.get", {
                        url: 'http://' + dimmer[i] + '/light/1?turn=toggle'
                    },
                        function (rs, ec, em) { },
                        null
                    );
                } else if (event.info.event === 'double_push') {
                    Shelly.call(
                        "http.get", {
                        url: 'http://' + dimmer[i] + '/rpc/light.set?id=1&on=true&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] + '/rpc/Light.DimDown?id=1&fade_rate=4'
                    },
                        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] + '/rpc/Light.DimUp?id=1&fade_rate=4'
                    },
                        function (rs, ec, em) { },
                        null
                    );
                }
 
                else {
                    return true;
                }
            }
        } else {
            return true;
        }
    },
);

Trin 5a: Konfigurer script

Find og ændre IP-adresse

Når scriptet er indsat, naviger til linjer 12-15.

Der er fire linjer med IP-adresser. Hver linje/IP-adresse svarer til en indgang på Shelly I4.

Hvis du ønsker, at den første indgang (0) på I4 skal styre en Dimmer 2 med IP-adressen 192.168.1.34, skal du ændre IP’en i den første linje for at matche.

Hvis du også ønsker, at indgang 2 (1) skal betjene en anden Dimmer 2, fjern de dobbelte skråstreger // og opdater den linje med IP-adressen på den tilsvarende Dimmer 2. Gentag denne proces for de resterende indgange.

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: Konfigurer script (2 kanals Pro Dimmer)

Eksempel når du vil styre både Ch.1 og Ch.2 fra input 0 og 1 på samme enhed

Indtast en fiktiv IP-adresse på den første linje; ellers vil scriptet ikke genkende input fra input 1

Script til at kontrollere Ch.1
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 
Script til at kontrollere Ch.2
let dimmer = [
    '0.0.0.0', // dimmer controlled with button 0 
    '192.168.61.240', // dimmer controlled with button 1 
//    '192.168.61.242', // dimmer controlled with button 2 
//    '192.168.61.243', // dimmer controlled with button 3 

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