Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Jalousiesteuerung (Zeitautomatik, Sonnen-, Aussperrschutz)

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Jalousiesteuerung (Zeitautomatik, Sonnen-, Aussperrschutz)

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      Beatz last edited by

      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 Reply Last reply Reply Quote 0
      • S
        simpixo last edited by

        Geilomat!!! Vielen dank für die Scripte 😄

        1 Reply Last reply Reply Quote 0
        • S
          Shiner last edited by

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

          1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators last edited by

            nein nur unsichtbar gemacht 😉

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

            Gruß

            Rainer

            1 Reply Last reply Reply Quote 0
            • S
              Shiner last edited by

              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 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              861
              Online

              31.7k
              Users

              79.9k
              Topics

              1.3m
              Posts

              4
              5
              6493
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo