Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. HM Aktor nach Astro einschalten und zu einer definierten Uhrzeit ausschalten

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    HM Aktor nach Astro einschalten und zu einer definierten Uhrzeit ausschalten

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

      Hallo zusammen,

      ich bin neu hier im Forum und auch in der Homematic und iobroker "Welt". "Blut" geleckt habe ich, mal sehen ob und wann eine Ernüchterung eintritt…

      Ich habe keine spezielle Sektion/Unterforum mit einer Scriptsammlung gefunden, will aber meinen aktuellen Stand meines Scriptes mit Euch teilen, vielleicht hilft es dem einen oder anderen.

      Das Script schaltet Homematic Aktoren in Abhängigkeit der Astro Funktion, also z.B. bei Abenddämmerung, und setzt den ON_TIME Wert des Aktors um den Aktor nach einer definierten Anzahl von Sekunden auszuschalten. Der ON_TIME Wert errechnet sich nach der Differenz der Angabe der Uhrzeit der gewünschten Ausschaltzeit und der Astro Auslösung (z.B. dusk), also z.B. heute Nacht um 01:00:00 Uhr.

      Ich habe das Script so "benutzerfreundlich" wie mir möglich geschrieben, so dass man einfach den Tag und die Uhrzeit der Ausschaltung angeben kann.

      Da ich ja neu in den beiden "Welten" bin, habe ich zur Zeit nur einen Aktor, so dass ich mir ein Array für die Aktoren gespart habe.

      /*
      Mit Hilfe dieses Scriptes wird in Abhängigkeit der Astrofunktion 
      Licht eingeschaltet und eine Ausschaltverzögerung (in Sekunden)
      mitgegeben.
      Sollte der Lichtschalter anschließend manuell geschaltet werden, so
      wird der ON_TIME Wert ignoriert. Hierdurch wird immer Morgens der
      Status des Lichts geprüft und ggf. ausgeschaltet
      
      Aktueller Scriptstand:
      - astro: dusk --> Licht einschalten und Ausschaltverzögerung setzen
      - Nachts um 01:00 Uhr wird das Licht automatisch ausgeschaltet (Ausschaltverzögerung)
      - astro: nightEnd --> ON_TIME Wert auf Default setzen und wenn Licht eingeschaltet dieses ausschalten
      */
      
      // -------------- Start: Hier werden die benutzerfefinierten Parameter angegeben --------------
      
      // Zu schaltende Aktoren in Variablen einlesen
      var idLichtTerrasseState = "hm-rpc.0.NEQXXXXXXX.1.STATE"/*Licht_Terrasse.STATE*/,
          idLichtTerrasseDauer = "hm-rpc.0.NEQXXXXXXX.1.ON_TIME"/*Licht_Terrasse.ON_TIME*/;
      
      // Uhrzeit der Ausschaltung angeben (Format HH:MM:SS)
      var strAusschaltzeit = "01:02:03";
      
      /* Tagesdifferenz der Ausschaltung angeben, indem der angebene Wert in Tagen auf das aktuelle
      Datum addiert wird. Bei Angabe einer 0 ist der Ausschalttag der gleiche Tag wie z.B. das Event astro :dusk.
      Bei Angabe einer 1 ist der Ausschalttag der nächste Tag wie z.B. das Event astro :dusk.
      */
      var intAusschaltzeitTage = 1;
      
      // -------------- Ende: Hier werden die benutzerfefinierten Parameter angegeben --------------
      
      // Funktion um Tage zu einem Datum zu addieren oder substrahieren
      function addDays(theDate, days) {
          return new Date(theDate.getTime() + days*24*60*60*1000);
      }
      
      // Arrays für spätere Verwendung erzeugen
      var arrAusschaltzeit = strAusschaltzeit.split(":");
      
      // Ausführen wenn Abenddämmerung
      schedule({astro: "dusk"}, function () {
      	// Benötigte Variablen definieren und zum Ereigniszeitpunkt, z.B. dusk setzen
      	// Heute bestimmen
      	var today = new Date(),
      		// Morgen bestimmen
      		tomorrow = addDays(new Date(), intAusschaltzeitTage),
      		// Ausschaltzeit für anschließende Verwendung zwischenspeichern
      		offtime = new Date(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate(), parseInt(arrAusschaltzeit[0]), parseInt(arrAusschaltzeit[1]), parseInt(arrAusschaltzeit[2])),
      		// ON_TIME Wert für Homematic Aktor in Sekunden berechnen
      		ontime = parseInt((offtime.getTime() - today.getTime()) / 1000);
      
      	// Licht Terrasse wenn eingeschaltet dann ausschalten, da ansonsten der ON_TIME Wert nicht aktiviert wird
          if (getState(idLichtTerrasseState).val) setState(idLichtTerrasseState,false);
      
          // ON_TIME auf errechneten Sekundenwert setzen
          setState(idLichtTerrasseDauer,ontime);
          log("Ausschaltverzögerung auf " + ontime + " Sekunden gesetzt");
      
          // Licht Terrasse einschalten
          setState(idLichtTerrasseState,true);
          log("Außenlicht eingeschaltet");
      });
      
      // Ausführen wenn Astro Morgendämmerung
      schedule({astro: "dawn"}, function () {
          // Licht Terrasse ON_TIME auf default setzen
          setState(idLichtTerrasseDauer,0);
          // Licht Terrasse einschalten wenn ausgeschaltet
          if (getState(idLichtTerrasseState).val) setState(idLichtTerrasseState,false);
          log("Außenlicht bei Morgendämmerung ausgeschaltet");
      });
      
      

      VG

      Michael

      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      645
      Online

      31.7k
      Users

      79.7k
      Topics

      1.3m
      Posts

      1
      1
      1309
      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