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. Jalousiesteuerung (Zeitautomatik, Sonnen-, Aussperrschutz)

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Jalousiesteuerung (Zeitautomatik, Sonnen-, Aussperrschutz)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 4 Kommentatoren 6.7k Aufrufe 1 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.
  • B Offline
    B Offline
    Beatz
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen,

    ich beobachte iobroker bereits seit einiger Zeit, und habe vor ein paar Wochen beschlossen die Programmlogik soweit sinnvoll auf iobroker auszulagern. Die Möglichkeiten mit Javascript gefallen mir deutlich besser und sind auch flexibler. Als erstes habe ich die Jalousiesteuerung umgestellt und konnte auch schon anfängliche Fehler beseitigen. Den Großteil der Logik habe ich bereits in iobroker übertragen, aber noch nicht alle Funktionen, die einbezogen werden. Dies würde ich gern sukzessive nachholen. Ich möchte hier die von mir verwendeten Skripte als Anregung vorstellen.

    Funktionsumfang:

    • Zeitgesteuerte Schaltung
    Morgens Zeitgesteuert hoch in Abhängigkeit nach Wochenende, Urlaub, Feiertag
    
    Erdgeschoss und Obergeschoss werden getrennt geschaltet
    
    Abends wird in Abhängigkeit vom Sonnenstand heruntergefahren (8 Grad unterhalb des Horizonts)
    
    • Sonnenschutz

      In Abhängigkeit vom Einstrahlwinkel, Außentemperatur und Wetterbedingungen wird der Sonnenschutz aktiviert

    • Sonnenschutz beim Fernsehen

      Beim Fernsehen wird die blendende Jalousie heruntergefahren.

      Die Abfrage läuft über den Eingangsschalter meines Onkyo Recievers.

    • Aussperrschutz

      Bei geöffneter Tür wird die Jalousie nicht durch die Automatik heruntergefahren.

    Noch auf der CCU2 ausgeführt

    • Urlaub prüfen (Google Kalender)

    • Feiertagsberechnung (auch für variable Feiertage, siehe http://www.homematic-inside.de/tecbase/ … berechnung)

    • aktuelles Wetter abfragen (Aus HM-Forum übernommen, siehe http://homematic-forum.de/forum/viewtop … 31&t=17209)

    • Variablen zum deaktivieren der Automatik (Zeit und Sonnenschutz)

    Dazu habe ich mehrere Skripte angelegt. Jeweils eines für die Zeitsteuerung, die Sonnenautomatik, die Prüfung, ob der Fernseher läuft, das öffnen der Terassentür sowie die Sonnenstandsberechnung. Zusätzlich habe ich einige JavaScript-Funktionen als globales Skript ausgelagert.

    Meine Skripte

    Funktionen_global

    // -----------------------------------------------
    // Zeitfenster prüfen
    // -----------------------------------------------
    
    /* VERWENDUNG
    
        // Prüft, ob die aktuelle Uhrzeit zwischen 23:00 Uhr und 5:30 Uhr liegt.
        isTimeInRange('23:00:00', '05:30:00');
    
    */
    
    function currentDate() {
        var d = new Date();
        return new Date(d.getFullYear(), d.getMonth(), d.getDate());
    }
    //function offsetSetTimeZone(d) {
    //    var now = new Date();
    //    var adjusted = d.setMinutes(d.getMinutes() - now.getTimezoneOffset());
    //    return new Date(adjusted);
    //}
    function addTime(strTime) {
        var time = strTime.split(':');
        var d = currentDate();
        d.setHours(time[0]);
        d.setMinutes(time[1]);
        d.setSeconds(time[2]);
        return d;
    }
    //function isTimeInRange(strLower, strUpper) {
    //    var now = new Date();
    //    var lower = addTime(strLower);
    //    var upper = addTime(strUpper);
    //    if (lower > upper) {
    //        upper.setDate(upper.getDate() + 1);
    //    }
    //    lower = offsetSetTimeZone(lower);
    //    now = offsetSetTimeZone(now);
    //    upper = offsetSetTimeZone(upper);
    //    return (now >= lower && now <= upper) ? true : false;
    //}
    function isTimeInRange(strLower, strUpper) {
        var now = new Date();
        var lower = addTime(strLower);
        var upper = addTime(strUpper);
        var inRange = false;
        if (upper > lower) {
            // opens and closes in same day
            inRange = (now >= lower && now <= upper) ? true : false;
        } else {
            // closes in the following day
            inRange = (now >= upper && now <= lower) ? false : true;
        }
        return inRange;
    }
    
    // -----------------------------------------------
    // Wochenende prüfen
    // -----------------------------------------------
    
    /* VERWENDUNG
        isWeekend();
    */
    
    function isWeekend() {
        var d = new Date();
        var n = d.getDay();
        var weekend = false;
        weekend = (n === 0 || n == 6) ? true : false;
        return weekend;
    }
    

    Sonnenstandsberechnung (aus diesem Thread übernommen: http://forum.iobroker.org/viewtopic.php?f=21&t=975)

    /* System Sonnenstand
    
    Sonne Azimut und Elevation in Variablen schreiben
    
    erstellt: 06.07.2015 nach ioBroker Forum http://forum.iobroker.net/viewtopic.php?f=21&t=975&sid=6f0ba055de5f82eed6809424f49ca93b#p7635
    */
    var suncalc = require('suncalc'),
        result = getObject("system.adapter.javascript.0"),
        lat = result.native.latitude,
        long = result.native.longitude;
    
    createState('Sonnenstand.Elevation', 0, {unit: '°'});
    createState('Sonnenstand.Azimut', 0, {unit: '°'});
    
    function Sonnenstand_berechnen () {
        var now = new Date();
    
        //log("-----------------------------------------------");
        //log("latitude : " + result.native.latitude,'info');
        //log("longitude: " + result.native.longitude,'info');
    
        var sunpos = suncalc.getPosition(now, lat, long);
        //log("sunpos: " + JSON.stringify(sunpos),'info');
    
        var h = sunpos.altitude * 180 / Math.PI,
            a = sunpos.azimuth * 180 / Math.PI + 180;
    
        setState("javascript.0.Sonnenstand.Elevation",h.toFixed(1));
        setState("javascript.0.Sonnenstand.Azimut",a.toFixed());
    }
    
    schedule("*/1 * * * *", Sonnenstand_berechnen);
    Sonnenstand_berechnen(); // bei Scriptstart
    

    Fernsehen

    // -----------------------------------------------
    // Trigger
    // -----------------------------------------------
    
    // Receiver prüfen, ob auf Fernsehkanal geschaltet ist.
    on({
        id: "onkyo.0.input"/*Input selector*/
    }, function (obj) {
        checkTV();
    });
    on({
        id: "onkyo.0.system-power"/*system-power*/
    }, function (obj) {
        checkTV();
    });
    
    // -----------------------------------------------
    // Aktionen
    // -----------------------------------------------
    
    createState("Handlung.Fernsehen", false);
    
    // Prüft, ob der Receiver eingeschaltet und auf einem Fernseheingang (TV, DVD oder Game) steht
    // und setzt eine Variable
    function checkTV() {
        var sysPower = getState("onkyo.0.system-power"/*system-power*/).val;
        var input = getState("onkyo.0.input"/*Input selector*/).val;
        var fernsehen = false;
        if (sysPower === true) {
            if (input == "cd,tv,cd" || input == "video3,game,tv,game" || input == "dvd,bd,dvd") {
                fernsehen = true;
            }
        }
        setState("Handlung.Fernsehen", fernsehen);
    }
    

    Jalousie Steuerung (Zeit)

    // -----------------------------------------------
    // Trigger
    // -----------------------------------------------
    
    schedule({hour: 6, minute: 50}, function () {
        // werktags, kein Feiertag -> unten hoch
        if(!isWeekend() && getState("hm-rega.0.1569"/*Feiertag_heute*/).val === false) {
            log("Werktag, Kein Feiertag: Fahre Jalousie hoch");
            Jalousie_unten_hoch();
        }
    });
    schedule({hour: 10, minute: 0}, function () {
        // wochenende oder Feiertag -> unten hoch
        if(isWeekend() || getState("hm-rega.0.1569"/*Feiertag_heute*/).val === true) {
            log("Wochende bzw. Feiertag: Fahre Jalousie hoch");
            Jalousie_unten_hoch();
        }
    });
    schedule({hour: 11, minute: 0}, function () {
        // werktags, kein Urlaub, kein Feiertag, Melli Normalschicht -> oben hoch
        if (!isWeekend() && getState("hm-rega.0.4709"/*Urlaub*/).val === false && getState("hm-rega.0.1569"/*Feiertag_heute*/).val === false && getState("hm-rega.0.5737"/*Spätschicht Melli*/).val === false) {
            log("Werktag, kein Urlaub, kein Feiertag, Normalschicht: Fahre Jalousie hoch");
            Jalousie_oben_hoch();
        }
    });
    schedule({hour: 11, minute: 30}, function () {
        // Melli Spätschicht, werktags -> oben hoch
        if (!isWeekend() && getState("hm-rega.0.5737"/*Spätschicht Melli*/).val === true) {
            log("Werktag, Spätschicht: Fahre Jalousie hoch");
            Jalousie_oben_hoch();
        }
    });
    schedule({hour: 12, minute: 0}, function () {
        // wochenende -> oben hoch
        if (isWeekend()) {
            log("Wochenende: Fahre Jalousie hoch");
            Jalousie_oben_hoch();
        }
        // Feiertag, werktags -> oben hoch
        if (!isWeekend() && getState("hm-rega.0.1569"/*Feiertag_heute*/).val === true) {
            log("Werktag, Feiertag: Fahre Jalousie hoch");
            Jalousie_oben_hoch();
        }
        // Urlaub, werktags -> oben hoch
        if (!isWeekend() && getState("hm-rega.0.4709"/*Urlaub*/).val === true) {
            log("Werktag, Urlaub: Fahre Jalousie hoch");
            Jalousie_oben_hoch();
        }
    });
    
    // Bei Sonnenuntergang (8 Grad unterhalb des Horizont)
    on({
        id: "javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/,
        change: "ne",
        valLe: -8,
        oldValGt: -8,
        logic: "and"
    }, function (obj) {
        log("Sonnenstand unter 8°: Fahre Jalousien runter.");
        Jalousie_runter();
    });
    
    // -----------------------------------------------
    // Aktionen
    // -----------------------------------------------
    
    function Jalousie_oben_hoch() {
        // Abbruch bei deaktivierter Automatik
        if (getState("hm-rega.0.11329"/*Jalousie Automatik*/).val === false) { return; }
    
        log("Jalousie oben hoch");
    
        // Status setzen (Standard)
        lvJalBad = 100;
        lvJalArbeitKlein = 100;
        lvJalArbeitGross = 100;
        lvJalSchlafGaube = 100;
        lvJalSchlafWest = 100;
        lvJalKind = 100;
    
        // Status setzen (Ausnahmen)
        if (getState("javascript.0.Jalousie.Sonnenschutz"/*Jalousie.Sonnenschutz*/).val === true) {
            lvJalArbeitGross = 0;
            lvJalSchlafGaube = 0;
        }
    
        // Ausführen
        setState("hm-rpc.0.LEQ0277044.1.LEVEL"/*Rollladen Bad.LEVEL*/, lvJalBad);
        setState("hm-rpc.0.LEQ0276756.1.LEVEL"/*Rollladen Arbeitszimmer (kl. Fenster).LEVEL*/, lvJalArbeitKlein);
        setState("hm-rpc.0.LEQ0277191.1.LEVEL"/*Rollladen Arbeitszimmer (gr. Fenster).LEVEL*/, lvJalArbeitGross);
        setState("hm-rpc.0.LEQ0277042.1.LEVEL"/*Rollladen Schlafzimmer (Gaube).LEVEL*/, lvJalSchlafGaube);
        setState("hm-rpc.0.LEQ0276707.1.LEVEL"/*Rollladen Schlafzimmer (West).LEVEL*/, lvJalSchlafWest);
        setState("hm-rpc.0.LEQ0277215.1.LEVEL"/*Rollladen Kind.LEVEL*/, lvJalKind);
    }
    
    function Jalousie_unten_hoch() {
        // Abbruch bei deaktivierter Automatik
        if (getState("hm-rega.0.11329"/*Jalousie Automatik*/).val === false) { return; }
    
        log("Jalousie unten hoch");
    
        // Status setzen (Standard)
        lvJalWC = 100;
        lvJalHWR = 100;
        lvJalKueche = 100;
        lvJalWohn1 = 100;
        lvJalWohn2 = 100;
        lvJalWohn3 = 100;
        lvJalWohn4 = 100;
        lvJalWohn5 = 100;
    
        // Status setzen (Ausnahmen)
        if (getState("javascript.0.Jalousie.Sonnenschutz"/*Jalousie.Sonnenschutz*/).val === true) {
            lvJalWohn1 = 40;
            lvJalWohn2 = 40;
            if(getState("hm-rpc.0.KEQ0550732.1.STATE"/*Tür Wohnzimmer.STATE*/).val == 2) {
                lvJalWohn3 = 92;
            } else {
                lvJalWohn3 = 40;
            }
            lvJalWohn4 = 40;
        }
    
        // Ausführen
        setState("hm-rpc.0.LEQ0217489.1.LEVEL"/*Rollladen Gäste WC.LEVEL*/, lvJalWC);
        setState("hm-rpc.0.LEQ0217527.1.LEVEL"/*Rollladen HWR.LEVEL*/, lvJalHWR);
        setState("hm-rpc.0.LEQ0276733.1.LEVEL"/*Rollladen Küche.LEVEL*/, lvJalKueche);
        setState("hm-rpc.0.LEQ0217546.1.LEVEL"/*Rollladen Wohnzimmer 1.LEVEL*/, lvJalWohn1);
        setState("hm-rpc.0.LEQ0276721.1.LEVEL"/*Rollladen Wohnzimmer 2.LEVEL*/, lvJalWohn2);
        setState("hm-rpc.0.LEQ0276697.1.LEVEL"/*Rollladen Wohnzimmer 3.LEVEL*/, lvJalWohn3);
        setState("hm-rpc.0.LEQ0277051.1.LEVEL"/*Rollladen Wohnzimmer 4.LEVEL*/, lvJalWohn4);
        setState("hm-rpc.0.LEQ0276690.1.LEVEL"/*Rollladen Wohnzimmer 5.LEVEL*/, lvJalWohn5);
    }
    
    function Jalousie_runter() {
        // Abbruch bei deaktivierter Automatik
        if (getState("hm-rega.0.11329"/*Jalousie Automatik*/).val === false) { return; }
    
        log("Jalousie runter");
    
        // Status setzen (Standard)
        lvJalBad = 0;
        lvJalArbeitKlein = 0;
        lvJalArbeitGross = 0;
        lvJalSchlafGaube = 0;
        lvJalSchlafWest = 11;
        lvJalKind = 0;
        lvJalWC = 0;
        lvJalHWR = 0;
        lvJalKueche = 0;
        lvJalWohn1 = 40;
        lvJalWohn2 = 40;
        lvJalWohn3 = 40;
        lvJalWohn4 = 40;
        lvJalWohn5 = 0;
    
        // Status setzen (Ausnahmen)
        // Tür Wohnzimmer Sperre (0 = geschlossen, 1 = gekippt, 2 = offen)
        if(getState("hm-rpc.0.KEQ0550732.1.STATE"/*Tür Wohnzimmer.STATE*/).val == 2) {
            lvJalWohn3 = 100;
        }
    
        // Ausführen
        setState("hm-rpc.0.LEQ0277044.1.LEVEL"/*Rollladen Bad.LEVEL*/, lvJalBad);
        setState("hm-rpc.0.LEQ0276756.1.LEVEL"/*Rollladen Arbeitszimmer (kl. Fenster).LEVEL*/, lvJalArbeitKlein);
        setState("hm-rpc.0.LEQ0277191.1.LEVEL"/*Rollladen Arbeitszimmer (gr. Fenster).LEVEL*/, lvJalArbeitGross);
        setState("hm-rpc.0.LEQ0277042.1.LEVEL"/*Rollladen Schlafzimmer (Gaube).LEVEL*/, lvJalSchlafGaube);
        setState("hm-rpc.0.LEQ0276707.1.LEVEL"/*Rollladen Schlafzimmer (West).LEVEL*/, lvJalSchlafWest);
        setState("hm-rpc.0.LEQ0277215.1.LEVEL"/*Rollladen Kind.LEVEL*/, lvJalKind);
    
        setState("hm-rpc.0.LEQ0217489.1.LEVEL"/*Rollladen Gäste WC.LEVEL*/, lvJalWC);
        setState("hm-rpc.0.LEQ0217527.1.LEVEL"/*Rollladen HWR.LEVEL*/, lvJalHWR);
        setState("hm-rpc.0.LEQ0276733.1.LEVEL"/*Rollladen Küche.LEVEL*/, lvJalKueche);
        setState("hm-rpc.0.LEQ0217546.1.LEVEL"/*Rollladen Wohnzimmer 1.LEVEL*/, lvJalWohn1);
        setState("hm-rpc.0.LEQ0276721.1.LEVEL"/*Rollladen Wohnzimmer 2.LEVEL*/, lvJalWohn2);
        setState("hm-rpc.0.LEQ0276697.1.LEVEL"/*Rollladen Wohnzimmer 3.LEVEL*/, lvJalWohn3);
        setState("hm-rpc.0.LEQ0277051.1.LEVEL"/*Rollladen Wohnzimmer 4.LEVEL*/, lvJalWohn4);
        setState("hm-rpc.0.LEQ0276690.1.LEVEL"/*Rollladen Wohnzimmer 5.LEVEL*/, lvJalWohn5);
    }
    

    Jalousie Steuerung (Sonnenschutz)

    // -----------------------------------------------
    // Trigger
    // -----------------------------------------------
    
    // Sonnenschutz prüfen
    on({
        id: "javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/,
        change: "ne",
        logic: "and"
    }, function (obj) {
        Sonnenschutz_pruefen();
    });
    
    // Sonnenschutz wurde aktiviert
    on({
        id: "javascript.0.Jalousie.Sonnenschutz"/*Jalousie.Sonnenschutz*/,
        change: "ne",
        val: true,
        logic: "and"
    }, function (obj) {
        Sonnenschutz_ein();
    });
    
    // Sonnenschutz wurde deaktiviert
    on({
        id: "javascript.0.Jalousie.Sonnenschutz"/*Jalousie.Sonnenschutz*/,
        change: "ne",
        val: false,
        logic: "and"
    }, function (obj) {
        Sonnenschutz_aus();
    });
    
    // Sonnenschutz TV prüfen
    on({
        id: "javascript.0.Handlung.Fernsehen"/*Handlung.Fernsehen*/,
        change: "ne",
        logic: "and"
    }, function (obj) {
        SonnenschutzTV_pruefen();
    });
    on({
        id: "javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/,
        change: "ne",
        valGt: 0,
        logic: "and"
    }, function (obj) {
        SonnenschutzTV_pruefen();
    });
    
    // Sonnenschutz TV wurde aktiviert
    on({
        id: "javascript.0.Jalousie.SonnenschutzTV"/*Jalousie.SonnenschutzTV*/,
        change: "ne",
        val: true,
        logic: "and"
    }, function (obj) {
        SonnenschutzTV_ein();
    });
    
    // Sonnenschutz TV wurde deaktiviert
    on({
        id: "javascript.0.Jalousie.SonnenschutzTV"/*Jalousie.SonnenschutzTV*/,
        change: "ne",
        val: false,
        logic: "and"
    }, function (obj) {
        SonnenschutzTV_aus();
    });
    
    // -----------------------------------------------
    // Aktionen
    // -----------------------------------------------
    
    createState("Jalousie.Sonnenschutz", false);  // Bisher noch als Variable auf der CCU
    createState("Jalousie.SonnenschutzTV", false);
    
    function Sonnenschutz_pruefen() {
        var SunProtect = false;
        if (getState("javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/).val >= 20) {
            if (getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val >= 120 && getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val <= 272) {
                if (getState("hm-rega.0.6428"/*Wetter_Temperatur*/).val >= 25) {
                    if (getState("hm-rega.0.6427"/*Wetter_Bedingungen*/).val == "Heiter" || getState("hm-rega.0.6427"/*Wetter_Bedingungen*/).val == "Teils Wolkig") {
                        SunProtect = true;
                    }
                }
            }
        }
        if (getState("javascript.0.Jalousie.Sonnenschutz"/*Jalousie.Sonnenschutz*/).val != SunProtect) {
            // Nur bei Änderung setzen
            //setState("hm-rega.0.8091"/*Jalousie Sonnenschutz*/, SunProtect);
            setState("javascript.0.Jalousie.Sonnenschutz"/*Jalousie.Sonnenschutz*/, SunProtect);
            //log("Prüfe Sonnenschutz: " + SunProtect);
        }
    }
    
    function Sonnenschutz_ein() {
        // Abbruch bei deaktivierter Automatik
        if (getState("hm-rega.0.8090"/*Jalousie Sonnenautomatik*/).val === false) { return; }
    
        log("Aktiviere Sonnenschutz");
    
        // Status setzen (Standard)
        lvJalArbeitGross = 0;
        lvJalSchlafGaube = 0;
        lvJalWohn1 = 40;
        lvJalWohn2 = 40;
        lvJalWohn3 = 40;
        lvJalWohn4 = 40;
    
        // Status setzen (Ausnahmen)
        // Tür Wohnzimmer Sperre (0 = geschlossen, 1 = gekippt, 2 = offen)
        if(getState("hm-rpc.0.KEQ0550732.1.STATE"/*Tür Wohnzimmer.STATE*/).val == 2) {
            lvJalWohn3 = 92;
        }
    
        // Ausführen
        setState("hm-rpc.0.LEQ0277191.1.LEVEL"/*Rollladen Arbeitszimmer (gr. Fenster).LEVEL*/, lvJalArbeitGross);
        setState("hm-rpc.0.LEQ0277042.1.LEVEL"/*Rollladen Schlafzimmer (Gaube).LEVEL*/, lvJalSchlafGaube);
        setState("hm-rpc.0.LEQ0217546.1.LEVEL"/*Rollladen Wohnzimmer 1.LEVEL*/, lvJalWohn1);
        setState("hm-rpc.0.LEQ0276721.1.LEVEL"/*Rollladen Wohnzimmer 2.LEVEL*/, lvJalWohn2);
        setState("hm-rpc.0.LEQ0276697.1.LEVEL"/*Rollladen Wohnzimmer 3.LEVEL*/, lvJalWohn3);
        setState("hm-rpc.0.LEQ0277051.1.LEVEL"/*Rollladen Wohnzimmer 4.LEVEL*/, lvJalWohn4);
    }
    
    function Sonnenschutz_aus() {
        // Abbruch bei deaktivierter Automatik
        if (getState("hm-rega.0.8090"/*Jalousie Sonnenautomatik*/).val === false) { return; }
    
        log("Deaktiviere Sonnenschutz");
    
        // Status setzen (Standard)
        lvJalArbeitGross = 100;
        lvJalSchlafGaube = 100;
        lvJalWohn1 = 100;
        lvJalWohn2 = 100;
        lvJalWohn3 = 100;
        lvJalWohn4 = 100;
    
        // Status setzen (Ausnahmen)
        // Keine
    
        // Ausführen
        setState("hm-rpc.0.LEQ0277191.1.LEVEL"/*Rollladen Arbeitszimmer (gr. Fenster).LEVEL*/, lvJalArbeitGross);
        setState("hm-rpc.0.LEQ0277042.1.LEVEL"/*Rollladen Schlafzimmer (Gaube).LEVEL*/, lvJalSchlafGaube);
        setState("hm-rpc.0.LEQ0217546.1.LEVEL"/*Rollladen Wohnzimmer 1.LEVEL*/, lvJalWohn1);
        setState("hm-rpc.0.LEQ0276721.1.LEVEL"/*Rollladen Wohnzimmer 2.LEVEL*/, lvJalWohn2);
        setState("hm-rpc.0.LEQ0276697.1.LEVEL"/*Rollladen Wohnzimmer 3.LEVEL*/, lvJalWohn3);
        setState("hm-rpc.0.LEQ0277051.1.LEVEL"/*Rollladen Wohnzimmer 4.LEVEL*/, lvJalWohn4);
    }
    
    function SonnenschutzTV_pruefen() {
        // Abbruch bei deaktivierter Automatik
        if (getState("hm-rega.0.8090"/*Jalousie Sonnenautomatik*/).val === false) { return; }
    
        var TVSunProtect = false;
    
        if(getState("javascript.0.Handlung.Fernsehen"/*Handlung.Fernsehen*/).val === true) {
            // Prüfe, ob TV Sonnenschutz notwendig
            if (getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val >= 150 && getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val <= 240) {
                if (getState("hm-rega.0.6427"/*Wetter_Bedingungen*/).val == "Heiter" || getState("hm-rega.0.6427"/*Wetter_Bedingungen*/).val == "Teils Wolkig") {
                    TVSunProtect = true;
                }
            }
        }
        if (getState("javascript.0.Jalousie.SonnenschutzTV"/*Jalousie.SonnenschutzTV*/).val != TVSunProtect) {
            // Nur bei Änderung setzen
            setState("javascript.0.Jalousie.SonnenschutzTV"/*Jalousie.SonnenschutzTV*/, TVSunProtect);
            //log("Prüfe Sonnenschutz TV: " + TVSunProtect);
        }
    }
    
    function SonnenschutzTV_ein() {
        var lvJalWohn1_new;
        var lvJalWohn1_akt = getState("hm-rpc.0.LEQ0217546.1.LEVEL"/*Rollladen Wohnzimmer 1.LEVEL*/).val;
        //log("TV Sonnenschutz notwendig");
        // Programm TV Sonnenschutz
        if (lvJalWohn1_akt > 50) {
            lvJalWohn1_new = 50;
        }
        if (lvJalWohn1_new != lvJalWohn1_akt) {
            setState("hm-rpc.0.LEQ0217546.1.LEVEL"/*Rollladen Wohnzimmer 1.LEVEL*/, lvJalWohn1_new);
        }
    }
    
    function SonnenschutzTV_aus() {
        var lvJalWohn1_new;
        var lvJalWohn1_akt = getState("hm-rpc.0.LEQ0217546.1.LEVEL"/*Rollladen Wohnzimmer 1.LEVEL*/).val;
        // Programm TV Sonnenschutz deaktivieren
        //log("TV Sonnenschutz nicht notwendig");
        if (getState("javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/).val <= -8) {
            // Dunkel
            lvJalWohn1_new = 40;
        } else {
            // Hell
            lvJalWohn1_new = 100;
            if (getState("hm-rega.0.8091"/*Jalousie Sonnenschutz*/).val === true) { lvJalWohn1_new = 40; }
        }
        if (lvJalWohn1_new != lvJalWohn1_akt) {
            setState("hm-rpc.0.LEQ0217546.1.LEVEL"/*Rollladen Wohnzimmer 1.LEVEL*/, lvJalWohn1_new);
        }
    }
    

    Jalousie Steuerung (Tür Bewegung)

    // -----------------------------------------------
    // Trigger
    // -----------------------------------------------
    
    // Tür Wohnzimmer 3
    on({
        id: "hm-rpc.0.KEQ0550732.1.STATE"/*Tür Wohnzimmer.STATE*/,
        change: "ne",
        logic: "and"
    }, function (obj) {
        JalousieWohnzimmer3();
    });
    
    // -----------------------------------------------
    // Aktionen
    // -----------------------------------------------
    
    function JalousieWohnzimmer3() {
        // Status setzen (Standard)
        lvJalWohn3 = 100;
    
        // Status setzen (Ausnahmen)
        // Tür Wohnzimmer Sperre (0 = geschlossen, 1 = gekippt, 2 = offen)
        if(getState("hm-rpc.0.KEQ0550732.1.STATE"/*Tür Wohnzimmer.STATE*/).val == 2) {
            // Tür offen
            if (getState("javascript.0.Jalousie.Sonnenschutz"/*Jalousie.Sonnenschutz*/).val === true && getState("hm-rega.0.8090"/*Jalousie Sonnenautomatik*/).val === true) {
                lvJalWohn3 = 92;
            } else {
                lvJalWohn3 = 100;
            }
        } else if (getState("hm-rpc.0.KEQ0550732.1.STATE"/*Tür Wohnzimmer.STATE*/).val === 0) {
            // Tür geschlossen
            if (getState("javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/).val <= -8) {
                // Dunkel
                lvJalWohn3 = 40;
            } else {
                // Hell
                if (getState("javascript.0.Jalousie.Sonnenschutz"/*Jalousie.Sonnenschutz*/).val === true && getState("hm-rega.0.8090"/*Jalousie Sonnenautomatik*/).val === true) {
                    lvJalWohn3 = 40;
                } else {
                    lvJalWohn3 = 100;
                }
            }
        }
    
        // Ausführen
        if (getState("hm-rpc.0.LEQ0276697.1.LEVEL"/*Rollladen Wohnzimmer 3.LEVEL*/).val != lvJalWohn3) {setState("hm-rpc.0.LEQ0276697.1.LEVEL"/*Rollladen Wohnzimmer 3.LEVEL*/, lvJalWohn3);}
    }
    

    Urlaub Prüfen - Homematic Script

    Wird per Programm kurz nach Mitternacht aufgerufen.

    !! Google Script Abfrage
    var url="https://script.google.com/macros/s/AKfycbxWEV43l-kC9hoDiuELHIUSUnUAw_-qkiSuOuTjYvSEGK510fKe/exec";
    
    !! Melli
    var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl --trace-ascii /var/log/curl.trace -s -k -L " # url # "?cmd=urlaub\&calName=name1@gmail.com";
    dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
    dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
    var uMelli = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
    
    !! Andi
    var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl --trace-ascii /var/log/curl.trace -s -k -L " # url # "?cmd=urlaub\&calName=name2@gmail.com";
    dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
    dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
    var uAndi = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
    
    !! Spät arbeiten Melli
    var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl --trace-ascii /var/log/curl.trace -s -k -L " # url # "?cmd=workLate\&calName=name1@gmail.com";
    dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
    dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
    var uSMelli = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
    
    !! Variablen schreiben
    var sMelli = false;
    var sAndi = false;
    var s = false;
    var sSMelli = false;
    
    if ( uMelli == "1" )
    {
        sMelli = true;
    }
    if ( uAndi == "1" )
    {
        sAndi = true;
    }
    if (( uMelli == "1" ) || ( uAndi == "1" ))
    {
        s = true;
    }
    if ( uSMelli >= "11" )
    {
        sSMelli = true;
    }
    
    var oMelli = dom.GetObject("Urlaub Melli");
    oMelli.State(sMelli);
    var oAndi = dom.GetObject("Urlaub Andi");
    oAndi.State(sAndi);
    var o = dom.GetObject("Urlaub");
    o.State(s);
    var oSMelli = dom.GetObject("Spätschicht Melli");
    oSMelli.State(sSMelli);
    

    Urlaub prüfen - Google Script

    Diese Methode ist leider etwas "von hinten durch die Brust ins Auge", aber sie funktioniert. Vor allem auch problemlos für mehrere Kalender. Die Integration über den ical Adapter lief bisher nicht ganz sauber. Aus mir unerklärbaren Gründen gibt der Adapter immer wieder keine Daten zurück oder erkennt mehrtägige Events, z.B. Urlaub nicht korrekt.

    Da die Auswertung von Textbausteinen mit HM-Skript nicht so einfach ist, habe ich mich entschlossen, auf die fertigen Bausteine von Google Script zur Kalenderabfrage zu setzen. Dazu verwende ich folgendes Skript, das unter script.google.com angelegt und als Web-App veröffentlicht werden muss. Das Skript gibt jeweils eins oder null zurück, was vom HM-Skript deutlich besser ausgewertet werden kann.

    `// Script-as-app template.
    function doGet(request) {
      var answer = "1.0";
    
      if ( request.parameters.cmd == "urlaub" )
      {
        answer = getVacation(request.parameters.calName);
      }
      else if (request.parameters.cmd == "events" )
      {
        answer = getEventsToday();
      }
      else if (request.parameters.cmd == "workLate" )
      {
        answer = getWorkLate(request.parameters.calName);
      }
    
      return ContentService.createTextOutput(answer);
    }
    
    function getVacation(calendar)
    {
      var today = new Date();
      today.getTime();
    
      var cal = CalendarApp.getCalendarById(calendar);
      var events = cal.getEventsForDay(today);
    
      var result = "0";
    
      for (var i=0; i <events.length; i++)/{/if/(events[i].gettitle()="=" "urlaub")/result="1" ;/break;/}/return/(result);/function/getworklate(calendar)/var/today="new" date();/today.gettime();/cal="CalendarApp.getCalendarById(calendar);" events="cal.getEventsForDay(today);" for/(var/i="0;" i<events.length;/"arbeiten")/(events[i].getstarttime()/"cet",/"hh.mm")/geteventstoday()/(/result.length="">0)  {
          result = result+";";
        }
        result = result + events[0].getTitle().toLowerCase();
      }
    
      return (result);
    }</events.length;>`[/i][/i][/i][/i]
    
    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      simpixo
      schrieb am zuletzt editiert von
      #2

      Geilomat!!! Vielen dank für die Scripte :-D

      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        Shiner
        schrieb am zuletzt editiert von
        #3

        Was ist hier passiert? Hat jemand die Scripte gelöscht?

        1 Antwort Letzte Antwort
        0
        • HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von
          #4

          nein nur unsichtbar gemacht ;-)

          Wenn du die Threads zu den aktuellen Problemen nach dem Serverumzug verfolgt hättest….

          Gruß

          Rainer

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            Shiner
            schrieb am zuletzt editiert von
            #5

            Hatte ich nicht, ich hatte den Thread gebookmarked.

            Danke für den Hinweis, dann muss ich wohl Geduld haben und meinen Abend anders verbringen :-)

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


            Support us

            ioBroker
            Community Adapters
            Donate

            998

            Online

            32.4k

            Benutzer

            81.5k

            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