NEWS
Jalousiesteuerung (Zeitautomatik, Sonnen-, Aussperrschutz)
-
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]
-
Geilomat!!! Vielen dank für die Scripte
-
Was ist hier passiert? Hat jemand die Scripte gelöscht?
-
nein nur unsichtbar gemacht
Wenn du die Threads zu den aktuellen Problemen nach dem Serverumzug verfolgt hättest….
Gruß
Rainer
-
Hatte ich nicht, ich hatte den Thread gebookmarked.
Danke für den Hinweis, dann muss ich wohl Geduld haben und meinen Abend anders verbringen