Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Script zum Schalten von allen Geräten

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    729

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

[Vorlage] Script zum Schalten von allen Geräten

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
1 Beiträge 1 Kommentatoren 338 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • fischi87F Online
    fischi87F Online
    fischi87
    schrieb am zuletzt editiert von fischi87
    #1

    Hallo Gemeinde, durch die Vorlage von @Mic seinem Script zur Schaltung von Lichter per BW: https://www.forum.iobroker.net/topic/22034/vorlage-bewegungsmelder-xiaomi-aqara-geräte-lichter-steuern. Hab ich mir gedacht das müsste auch mit sämtlichen anderen Geräten laufen. Hab mir das script mal angeschaut und versucht das zu erweitern. Da ich Java-script lernen möchte und ich sowas schon lange umsetzen wollte war die Vorlage dafür perfekt, danke dafür!!!

    Ich habe es jetzt so, versuch zu erweitern das jedes Gerät als trigger verwendet werden kann. Eine Astro Funktion mit eingebaut, die Vorlage dafür kommt auch aus diesem Forum nur leider finde ich diesen Beitrag bzw die Quelle nicht mehr. Jedenfalls danke an die Ersteller dieses Skriptes

    Mit der Erweiterung sind Dimmer mit einbezogen dass das Licht abhängig von der Tageszeit einen bestimmten Helligkeit-wert bekommt.

    Ich bin kein Java-script typ jediglich totaler Anfänger also werden einigen Pros sicherlich Fehler auffallen aber bei mir läuft es bis jetzt ganz gut und ich hab Schon einige Geräte integriert.

    Über Feedback, Anregungen und Verbesserungsvorschläge bin ich sehr offen denn nur so kann man weiter lernen.

    Danke an alle Ersteller und deren Quelle bzw Codes.

    /*******************************************************************************
    * Inspiriert von Vorlage: https://forum.iobroker.net/topic/22034/vorlage-bewegungsmelder-xiaomi-aqara-geräte-lichter-steuern
    * Autor: ioBroker-Forum-Name: Mic / Github-Name: Mic-M
    * Source: https://github.com/Mic-M/iobroker.xiaomi-aquara-motion-control
    /*******************************************************************************
    
    /*******************************************************************************
     * Konfiguration
     ******************************************************************************/
     
    // Hier die einzelnen Geräte konfigurieren und beliebig Zeilen hinzufügen.
    //
    // [1] + [2] Zeiten: nur in den angegebenen Zeiten wird geschaltet. Falls immer geschaltet
    //                   werden soll, dann jeweils '0:00' und '23:59' eintragen.
    //
    // [3] Timmer wielange eingeschalten bleiben soll.
    //
    // [4] Lux: Ab wieviel Lux soll nicht mehr eingeshaltet werden? 9999, wird unabhängig von der Lux messung immer eingeschaltet.
    //
    // [5] Datenpunkt Trigger: Datenpunkt mit welchen Gerät getriggert werden soll.
    //
    // [6] Datenpunkt schaltendes Gerät: Datenpunkt welher Gerät geschaltet werden soll.
    //
    // [7] Dimmer State: Falls dimmer vorhanden hier ID eintragen wenn nicht ' ' ausrufezeichen leer lassen!!!
    //
    // [8] Tageszeit: Schalten der Geräte nach Tagezeit !!! Nur in verbindung mit Astro script:
    //                https://forum.iobroker.net/topic/2423/astro-tageszeit-abfragen-und-in-datenpunkt-eintragen
    //                Es funktioniert nur eine Zeit, compareTime oder Tageszeit!
    //
    // [9] Datenpunkt Lux: Datenpunkt für Lux messung.
    
    
    const DEVICE = [];
    //             [0] Name              [1] Zeit  [2] Zeit   [3] Nach wie vielen Minuten ohne   [4]Lux   [5] Datenpunkt Trigger                                          [6] Datenpunkt schaltendes Gerät etc.        [7] Dimmer State              [8] Tageszeit  [9] Datenpunkt Lux
    //                 (beliebig)            von         bis      änderung wieder aus? Falls 0,               
    //                                                            dann wird nicht ausgeschaltet.     
    DEVICE[0] = [   'Flur Mitte',         '00:00',  '23:59',    1,                                 50,     'mihome.0.devices.sensor_motion_aq2_158d000276d447.state',      'sonoff.0.Flur Mitte.POWER',                'sonoff.0.Flur Mitte.Dimmer',   false,        'mihome.0.devices.sensor_motion_aq2_158d000276d447.lux'];
    DEVICE[1] = [   'Haustürlicht',       '00:00',  '00:00',    20,                                9999,   'mihome.0.devices.magnet_158d00026a2b28.state',                 'sonoff.0.Haustürlicht.POWER',              ' ',                            true];
    DEVICE[2] = [   'Gartenlicht',        '00:00',  '00:00',    0,                                 9999,   'mihome.0.devices.magnet_158d0001c2e8d6.state',                 'sonoff.0.Garten-Spot.POWER',               ' ',                            true];
    DEVICE[3] = [   'Flur Unten',         '00:00',  '23:59',    1,                                 50,     'mihome.0.devices.sensor_motion_aq2_158d000276d3d1.state',      'sonoff.0.Flur unten hinten.POWER',         ' ',                            false,        'mihome.0.devices.sensor_motion_aq2_158d000276d3d1.lux'];
    DEVICE[4] = [   'Haustürlicht_Klingel','00:00', '00:00',    30,                                9999,   'hm-rpc.0.MEQ0485030.1.STATE',                                  'sonoff.0.Haustürlicht.POWER',              ' ',                            true];
    const BRIGHTNESS = [];
    //               [0] Nacht  [1] Morgendämmerung [2] Sonnenaufgang  [3] Morgen   [4] Vormittag  [5] Mittag [6] Nachmittag [7] Abend  [8] Sonnenuntergang [9] Abenddämmerung
    //Sind % Angaben
    BRIGHTNESS[0] = [   1,            20,                  50,               70,         100,         100,           100,        80,        80,                    60];
    //
    const DAYTIME = [];
    //              [0] Nacht  [1] Morgendämmerung [2] Sonnenaufgang  [3] Morgen   [4] Vormittag  [5] Mittag [6] Nachmittag    [7] Abend  [8] Sonnenuntergang [9] Abenddämmerung
    //
    DAYTIME[0] =    [true,      true,               true,              false,       false,         false,     false,            false,      true,               true];
    //
    // Logeinträge: Infos zeigen (wenn eingeschaltet oder ausgeschaltet wurde)
    const INFO = true;
    
    // Logeinträge: Zusätzliche Einträge anzeigen zur Fehlerbehebung. Auf "false" setzen, wenn alles funktioniert.
    const DEBUG = false;
    
    /*******************************************************************************
     * Ab hier nichts mehr ändern / Stop editing here!
     ******************************************************************************/
    
    main();
    function main() {
        for (let i = 0; i < DEVICE.length; i++) {
            let timer = null;
            on({id: DEVICE[i][5], change: 'any'}, function(obj) { 
                // Falls Timer läuft: auf null setzen.
                if (timer) {
                    clearTimeout(timer);
                    timer = null;
                }
                if(obj.state.val) {
                    if (DEBUG) log('[DEBUG] ' + DEVICE[i][0] + ': State hat sich geändert auf true');
                    //Prüfung auf Zeitangabe
                    if(DEVICE[i][1] > '00:00' || DEVICE[i][2] > '00:00' && DEVICE[i][8] === true) {if (DEBUG) log('[DEBUG] ' + 'Keine richtige CompareTime bzw Tageszeit anweisung!');}
                    //
                     else { 
                        //CompareTime
                        if(compareTime(DEVICE[i][1],DEVICE[i][2], 'between')) {
                            if (DEBUG) log('[DEBUG] ' + DEVICE[i][0] + ': Weiter mit CompareTime!');
                            //Prüfung auf LUX einstellung
                            let LuxIsGiven = true; // Default auf true, wird false gesetzt, falls nicht gegeben.
                            if(DEVICE[i][4] < 9999 ) {
                                if (DEBUG) log('[DEBUG] ' + DEVICE[i][0] + ': Prüfung auf Lux ist aktiviert.')
                                // Prüfung gemessene Lux kleiner Schwellwert, bis zu dem geschalten werden soll
                                let luxActual = getState(DEVICE[i][9]).val;
                                if (luxActual >= DEVICE[i][4]) {
                                    if (DEBUG) log('[DEBUG] ' + DEVICE[i][0] + ': Gemessene Lux = ' + luxActual + ', >= Schwelle von ' + DEVICE[i][4] + ', daher wird nicht geschaltet.')
                                    LuxIsGiven = false;
                                } else {
                                    if (DEBUG) log('[DEBUG] ' + DEVICE[i][0] + ': Gemessene Lux = ' + luxActual + ', < Schwelle von ' + DEVICE[i][4] + ', daher eingeschaltet.')
                                }
                            }
                            //Dimmer werde setzen
    
                            if(DEVICE[i][7] != ' ') {
                                let tageszeitActual = getState('javascript.0.Astro.Tageszeit.current'/*Tageszeit*/).val;
                                var dimmer;
                                if(tageszeitActual === "Nacht") dimmer = BRIGHTNESS[i][0];
                                if(tageszeitActual === "Morgendämmerung") dimmer = BRIGHTNESS[i][1];
                                if(tageszeitActual === "Sonnenaufgang") dimmer = BRIGHTNESS [i][2];
                                if(tageszeitActual === "Morgen") dimmer = BRIGHTNESS [i][3];
                                if(tageszeitActual === "Vormittag") dimmer = BRIGHTNESS [i][4];
                                if(tageszeitActual === "Mittag") dimmer = BRIGHTNESS [i][5];
                                if(tageszeitActual === "Nachmittag") dimmer = BRIGHTNESS [i][6];
                                if(tageszeitActual === "Abend") dimmer = BRIGHTNESS [i][7];
                                if(tageszeitActual === "Sonnenuntergang") dimmer = BRIGHTNESS [i][8];
                                if(tageszeitActual === "Abenddämmerung") dimmer = BRIGHTNESS [i][9];
                                if (DEBUG) log('[DEBUG]' + DEVICE[i][0] + ': Tageszeit = ' + tageszeitActual + ' entspricht ' + 'Dimmerwert: ' + dimmer );
                            }
                            // Wir schalten, wenn Gerät derzeit aus ist und Lux passt
                            let deviceStatus = getState(DEVICE[i][6]).val;
                            if ( (deviceStatus === false) && (LuxIsGiven === true) ){
                                setState(DEVICE[i][6], true); // Licht/Gerät wird geschaltet.
                                if(DEVICE[i][7] != ' ') {setState(DEVICE[i][7], dimmer)
                                if(INFO) log(DEVICE[i][0] + ' wurde eingeshaltet mit Helligkeit: ' + dimmer)}
                                else if(INFO) log(DEVICE[i][0] + ' wurde eingeschaltet ohne Dimmer!')
                            }
                        } else {
    
                            if(DEVICE[i][8], true) {
                                if (DEBUG) log('[DEBUG] ' + DEVICE[i][0] + ': Weiter mit Tageszeitangabe!');
                                let tageszeitActual = getState('javascript.0.Astro.Tageszeit.current'/*Tageszeit*/).val;
                                var daytime = false;
                                if(tageszeitActual === "Nacht" && DAYTIME[0][0] === true) daytime = true;
                                if(tageszeitActual === "Morgendämmerung" && DAYTIME[0][1] === true) daytime = true;
                                if(tageszeitActual === "Sonnenaufgang" && DAYTIME[0][2] === true) daytime = true;
                                if(tageszeitActual === "Morgen" && DAYTIME[0][3] === true) daytime = true;
                                if(tageszeitActual === "Vormittag" && DAYTIME[0][4] === true) daytime = true;
                                if(tageszeitActual === "Mittag" && DAYTIME[i][5] === true) daytime = true;
                                if(tageszeitActual === "Nachmittag" && DAYTIME[0][6] === true) daytime = true;
                                if(tageszeitActual === "Abend" && DAYTIME[0][7] === true) daytime = true;
                                if(tageszeitActual === "Sonnenuntergang" && DAYTIME[0][8] === true) daytime = true;
                                if(tageszeitActual === "Abenddämmerung" && DAYTIME[0][9] === true) daytime = true;
                            } 
                            let deviceStatus = getState(DEVICE[i][6]).val;
                            if ( (deviceStatus === false) && (daytime === true)) {
                                setState(DEVICE[i][6], true); // Licht/Gerät wird geschaltet.
                                if(INFO) log(DEVICE[i][0] + ' wurde eingeschaltet per Tageszeit.');
                            } else if(INFO) log(DEVICE[i][0] + ' keine gesetzte Tageszeit im Moment.');
                        }
                      } 
                    }    
                    else {
                        if (DEBUG) log('[DEBUG] ' + DEVICE[i][0] + ': State geändert auf false');
                        // Ausschalten. Aber nur falls gewünscht (falls 0, dann soll nicht per diesem Script ausgeschaltet werden).
                        if (DEVICE[i][3] > 0 ) {
                            // wenn erstmals keine Bewegung wird Timer gestartet
                            timer = setTimeout(function() {
                                timer = null;
                                setState(DEVICE[i][6], false); // Licht/Gerät aus nach Ablauf Timer
                                if(INFO) log(DEVICE[i][0] + ': kein Trigger mehr, daher ausgeschaltet.');
                            }, DEVICE[i][3] * 1000); // Timer setzen auf X Minuten
                        }
                    }
            });
        }
    }
    

    Grüße Axel

    1 Antwort Letzte Antwort
    2
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    677

    Online

    32.6k

    Benutzer

    82.0k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    logo
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Home
    • Aktuell
    • Tags
    • Ungelesen 0
    • Kategorien
    • Unreplied
    • Beliebt
    • GitHub
    • Docu
    • Hilfe