Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Schalten 2 Stunden nach Sonnenuntergang

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    7
    1
    292

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    9
    1
    271

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    915

Schalten 2 Stunden nach Sonnenuntergang

Scheduled Pinned Locked Moved Skripten / Logik
20 Posts 9 Posters 5.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Offline
    F Offline
    Fitti
    wrote on last edited by
    #2

    Hi,

    es gibt ja die Astrofunktion im Skript:

    schedule({astro: "sunrise"}, function () {
        log("Sunrise!");
    });
    
    schedule({astro: "sunset", shift: 10}, function () {
        log("10 minutes after sunset!");
    });
    

    Und auch die normale Cronverwaltung - also Zeitsteuerung:

    schedule("0 23 * * *", function () {
        log("Will be triggered at 23.00h");
    });
    

    In den Zeilen mit der Anweisung log kannst Du dann Deine Lampe schalten:

    z. B. mit

    setState('hm-rpc.0.LEQxxxxx.1.STATE', 'true'); 
    

    Den Wert des Aktors holst Du die im Skriptmodul mittels ID einfügen.

    Reicht Dir das? Wenn nicht, einfach fragen.

    Viele Grüße,

    Fitti
    4588_zonenreinigung.png

    "Es wird die Zeit kommen, da ihr euch entscheiden müsst zwischen dem, was richtig ist, und dem, was bequem ist."
    Plural von Status ist auch Status!

    1 Reply Last reply
    0
    • N Offline
      N Offline
      nobse
      wrote on last edited by
      #3

      Danke

      super das man mit der astro function auch rechnen kann.

      Nun bleibt nur Samstag, Sonntag und Feiertag.

      Samstag und Sonntag kann man bestimmt aus dem aktuellen Datum ermitteln (in PHP kein Problem)

      aber wie geht es mit Feiertagen

      Norbert

      Gruß Norbert

      CCU2 • Raspberry für Wetterstation • CMS http://www.exv2.de • HP ProLiant MicroServer Gen8 12GB RAM, 2x3TB, Windows Essentials Server 2016 mit ioBroker

      1 Reply Last reply
      0
      • HomoranH Do not disturb
        HomoranH Do not disturb
        Homoran
        Global Moderator Administrators
        wrote on last edited by
        #4

        Es gibt welche, die sind immer am gleichen Tag, für die anderen gibt es die https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel :mrgreen:

        Gruß

        Rainer

        kein Support per PN! - Fragen im Forum stellen -
        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

        1 Reply Last reply
        0
        • N Offline
          N Offline
          nobse
          wrote on last edited by
          #5

          Hallo Rainer

          > Es gibt welche, die sind immer am gleichen Tag, für die anderen gibt es die Gauß'sche Osterformel :mrgreen:

          ja da gebe ich dir recht. Dafür habe ich auch fertige Scripte in PHP. Die könnte ich auch benutzen und per Cronjob laufen lassen und dann die Werte in die CCU schreiben lassen und hätte sie dann in iobroker.

          Ich suche aber eine Lösung die unter ioBroker läuft und auch für alle anderen genutzt werden kann.

          Norbert

          Gruß Norbert

          CCU2 • Raspberry für Wetterstation • CMS http://www.exv2.de • HP ProLiant MicroServer Gen8 12GB RAM, 2x3TB, Windows Essentials Server 2016 mit ioBroker

          1 Reply Last reply
          0
          • paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #6

            @nobse:

            Samstag und Sonntag kann man bestimmt aus dem aktuellen Datum ermitteln `
            Dazu gibt es die Funktion http://wiki.selfhtml.org/wiki/JavaScript/Objekte/Date/getDay.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Reply Last reply
            0
            • paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #7

              In HM Script berechne ich die variablen Feiertage mit folgender Formel:

              var jetzt = new Date();
              var Jahr = jetzt.getFullYear();
              
              // Schaltjahr
              var sj = 0;
              var i = Jahr % 4;
              if (i == 0) { sj = 1;}
              
              // Die modifizierte Gauss-Formel nach Lichtenberg, gültig bis 2048
              var A = ((19 * (Jahr % 19)) + 24) % 30;
              var B = 120 + A;
              var C = (B + ((5 * Jahr) / 4)) % 7;
              var E = B - C;
              
              // Ostersonntag: Tag im Jahr
              var ostern = E - 33 + sj;
              
              

              Die weiteren variablen Feiertage haben eine feste Differenz zu Ostersonntag:

              • Rosenmontag: -48

              • Christi Himmelfahrt: +39

              • Pfingstmontag: +50

              • Fronleichnam: +60

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Reply Last reply
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                wrote on last edited by
                #8

                Wir brauchen iobroker.holidays adapter. 8-)

                1 Reply Last reply
                0
                • V Offline
                  V Offline
                  versteckt
                  wrote on last edited by
                  #9

                  Ich verwende google Calendar mit Feiertagen und hab das in occ inkludiert. Bzw. sollte das ja auch mit dem cal Adapter funktionieren.

                  Gesendet von meinem iPhone mit Tapatalk

                  Raspi 1, Raspi 2, iobroker, Mac Mini: alles mit aktueller ioBroker Version

                  homegear für Homematic und MAX!

                  occ, zWave, rpi, hmm und homekit Entwickler

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    stephan61
                    wrote on last edited by
                    #10

                    Hallo Norbert

                    schaumal bei http://forum.iobroker.net/viewtopic.php … a64960fcei

                    scripte von Beatz

                    das ist so etwas beschrieben habe teile davon für meine Heizungsteuerung verwendet

                    Gruß Stephan

                    1 Reply Last reply
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by
                      #11

                      @Bluefox:

                      Wir brauchen iobroker.holidays adapter. `
                      Ist ein Adapter tatsächlich erforderlich ? Ein Script für die Feiertage und der ioBroker.occ-Adapter für Urlaub u.Ä. löst das Problem auch:

                      // Script ermittelt, ob heute oder morgen ein Feiertag ist
                      var sj;                 // Schaltjahr
                      var ostern;             // Ostersonntag: Tag im Jahr
                      
                      // Regional nicht relevante Feiertage auskommentieren oder löschen !!
                      function feiertag(day) {
                      	switch(day) {
                         case 1:  			  // Neujahr
                      	case 6:			 	// Heilige 3 Könige (BW, BY, ST)
                      	case 121 + sj:		// Maifeiertag
                      	case 227 + sj:		// Maria Himmelfahrt (BY (nicht überall), SL)
                      	case 276 + sj:		// Tag der dt. Einheit
                      	case 304 + sj:		// Reformationstag (BB, MV, SA, ST,TH)
                      	case 305 + sj:  	// Allerheiligen (BW, BY, NW, RP, SL)
                      	case 358 + sj:  	// Heiligabend
                      	case 359 + sj:		// 1\. Weihnachtstag
                      	case 360 + sj:		// 2\. Weihnachtstag
                      	case 365 + sj:		// Silvester
                      	case ostern - 48:	// Rosenmontag
                      	case ostern - 2:	// Karfreitag
                      	case ostern + 1:	// Ostermontag
                      	case ostern + 39:	// Christi Himmelfahrt
                      	case ostern + 50:	// Pfingstmontag
                      	case ostern + 60:	// Fronleichnam (BW, BY, HE, NW, RP, SL (SA, TH nicht überall))
                              return true;
                         default:
                              return false;
                         } 
                      }
                      
                      // auf Feiertag testen
                      function checkHolidays() {
                      	var jetzt = new Date();
                      	var Jahr = jetzt.getFullYear();
                      
                      	sj = 0;
                      	var i = Jahr % 4;
                      	if (i === 0) sj = 1;
                      
                      // Die modifizierte Gauss-Formel nach Lichtenberg, gültig bis 2048
                          var A = 120 + (19 * (Jahr % 19) + 24) % 30;
                          var B = (A + parseInt(5 * Jahr / 4)) % 7;
                          ostern = A - B - 33 + sj;
                      
                      // Tag des Jahres
                      	var heutestart = new Date(jetzt.setHours(0,0,0,0));
                      	var neujahr = new Date(Jahr,0,1);
                      	var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1;
                      	var tag = Math.ceil(difftage);
                      
                      	setState("Feiertag.heute", feiertag(tag));
                      	tag = tag + 1;
                      	if (tag > 365 + sj) tag = 1;
                      	setState("Feiertag.morgen", feiertag(tag));
                      }
                      
                      schedule("0 0 * * *", checkHolidays);  //täglich um 0 Uhr 
                      checkHolidays();                       // Scriptstart
                      
                      

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      1 Reply Last reply
                      0
                      • B Offline
                        B Offline
                        Beatz
                        wrote on last edited by
                        #12

                        Klasse Script. Das habe ich bisher noch auf der CCU laufen.

                        @Homoran: Das wäre etwas für die Sammlung auf iobroker.net.

                        1 Reply Last reply
                        0
                        • HomoranH Do not disturb
                          HomoranH Do not disturb
                          Homoran
                          Global Moderator Administrators
                          wrote on last edited by
                          #13

                          @Beatz:

                          Das wäre etwas für die Sammlung auf iobroker.net. `
                          Hab ich mir eben auch gedacht, aber….

                          ...dann habe ich mir die Seite angesehen und gedacht, die müsste komplett überarbeitet werden.

                          Ihr habt da inzwischen so viele tolle scripte geschrieben. Da hab ich mittlerweile den Überblick verloren. :(

                          Muss mal sehen, ob ich da die neuen noch wiederfinde

                          Gruß

                          Rainer

                          kein Support per PN! - Fragen im Forum stellen -
                          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                          Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                          1 Reply Last reply
                          0
                          • paul53P Offline
                            paul53P Offline
                            paul53
                            wrote on last edited by
                            #14

                            @Homoran:

                            Muss mal sehen, ob ich da die neuen noch wiederfinde `
                            Ein paar Vorschläge:

                            http://forum.iobroker.org/viewtopic.php?f=21&t=1337

                            http://forum.iobroker.org/viewtopic.php?f=21&t=914&p=9153#p9153

                            http://forum.iobroker.org/viewtopic.php?f=21&t=1290

                            http://forum.iobroker.org/viewtopic.php?f=21&t=1154#p10285

                            http://forum.iobroker.org/viewtopic.php?f=21&t=1012#p7994

                            http://forum.iobroker.org/viewtopic.php?f=21&t=1012#p8916

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Reply Last reply
                            0
                            • HomoranH Do not disturb
                              HomoranH Do not disturb
                              Homoran
                              Global Moderator Administrators
                              wrote on last edited by
                              #15

                              Danke!

                              Dann hab ich ja heute wieder was zu tun[GRINNING FACE WITH SMILING EYES]

                              Gesendet von meinem LIFETAB_S785X mit Tapatalk

                              kein Support per PN! - Fragen im Forum stellen -
                              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                              Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                              1 Reply Last reply
                              0
                              • HomoranH Do not disturb
                                HomoranH Do not disturb
                                Homoran
                                Global Moderator Administrators
                                wrote on last edited by
                                #16

                                Hallo Paul,

                                bin gerade bei deinem Punkt:
                                @paul53:

                                copyDatapoint(Quellname,Zielname) `
                                angekommen. Der Link geht auf den zweiten Post (?) Dort steht, dass dies eine Erweiterung des ersten ist.

                                Muss das Skript dann so aussehen?

                                // Datenpunkte mit Voreinstellungen erzeugen (createState)
                                
                                function createCheckbox(name) {
                                    createState(name, false, {read: true, 
                                                              write: true, 
                                                              desc: "Beschreibung", 
                                                              type: "boolean", 
                                                              def: false
                                    });
                                }
                                
                                function createSwitch(name) {
                                    createState(name, false, {read: true, 
                                                              write: true, 
                                                              desc: "Beschreibung", 
                                                              type: "boolean", 
                                                              def: false, 
                                                              states: "false:Aus; true:Ein"
                                    });
                                }
                                
                                function createMultistate(name) {
                                    createState(name, 0, {read: true, 
                                                          write: true, 
                                                          desc: "Beschreibung", 
                                                          type: "number", 
                                                          min: 0, 
                                                          max: 2, 
                                                          def: 0, 
                                                          states: "0:Wert0; 1:Wert1; 2:Wert2"
                                    });
                                }
                                
                                function createLevel(name) {
                                    createState(name, 0, {read: true,
                                                          write: true, 
                                                          desc: "Beschreibung", 
                                                          type: "number", 
                                                          min: -30, 
                                                          max: 70, 
                                                          def: 0,
                                                          unit: "°C"
                                    });
                                }
                                
                                function createString(name) {
                                    createState(name, "", {read: true, 
                                                           write: true, 
                                                           desc: "Beschreibung", 
                                                           type: "string", 
                                                           def: ""
                                    });
                                }
                                function copyDatapoint(src, dst) {
                                    var sid = getIdByName(src);
                                    var sdp = getObject(sid).common;
                                    createState(dst, sdp.def, { read: sdp.read,
                                                                write: sdp.write,
                                                                desc: sdp.desc,
                                                                type: sdp.type,
                                                                min: sdp.min,
                                                                max: sdp.max,
                                                                def: sdp.def,
                                                                unit: sdp.unit,
                                                                states: sdp.states
                                    });
                                }
                                

                                Gruß

                                Rainer

                                kein Support per PN! - Fragen im Forum stellen -
                                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                1 Reply Last reply
                                0
                                • paul53P Offline
                                  paul53P Offline
                                  paul53
                                  wrote on last edited by
                                  #17

                                  @Homoran:

                                  Der Link geht auf den zweiten Post (?) Dort steht, dass dies eine Erweiterung des ersten ist. `
                                  Der erste Teil war eine Zwischenlösung bevor Bluefox die Erstellung von Objekten im Reiter "Objekte" implementiert hatte (ab ioBroker.admin 0.5.9). Die copyDatapoint-Funktion ist weiterhin nützlich zur Verfielfältigung von vorhandenen Datenpunkten für weitere Räume, da sämtliche Attribute (außer Name und ID) kopiert werden.

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  1 Reply Last reply
                                  0
                                  • HomoranH Do not disturb
                                    HomoranH Do not disturb
                                    Homoran
                                    Global Moderator Administrators
                                    wrote on last edited by
                                    #18

                                    @Homoran:

                                    Muss mal sehen, ob ich da die neuen noch wiederfinde `

                                    Danke für die Unterstützung.

                                    Da sind einige neue Skripte eingepflegt:

                                    http://www.iobroker.net/?page_id=57&lang=de#scripting

                                    Gruß

                                    Rainer

                                    kein Support per PN! - Fragen im Forum stellen -
                                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                    1 Reply Last reply
                                    0
                                    • P Offline
                                      P Offline
                                      pix
                                      wrote on last edited by
                                      #19

                                      Hallo,
                                      @paul53:

                                      @Bluefox:

                                      Wir brauchen iobroker.holidays adapter. `
                                      Ist ein Adapter tatsächlich erforderlich ? Ein Script für die Feiertage und der ioBroker.occ-Adapter für Urlaub u.Ä. löst das Problem auch:

                                      // Script ermittelt, ob heute oder morgen ein Feiertag ist
                                      var sj;                 // Schaltjahr
                                      var ostern;             // Ostersonntag: Tag im Jahr
                                      
                                      // Regional nicht relevante Feiertage auskommentieren oder löschen !!
                                      function feiertag(day) {
                                      	switch(day) {
                                         case 1:  			  // Neujahr
                                      	case 6:			 	// Heilige 3 Könige (BW, BY, ST)
                                      	case 121 + sj:		// Maifeiertag
                                      	case 227 + sj:		// Maria Himmelfahrt (BY (nicht überall), SL)
                                      	case 276 + sj:		// Tag der dt. Einheit
                                      	case 304 + sj:		// Reformationstag (BB, MV, SA, ST,TH)
                                      	case 305 + sj:  	// Allerheiligen (BW, BY, NW, RP, SL)
                                      	case 358 + sj:  	// Heiligabend
                                      	case 359 + sj:		// 1\. Weihnachtstag
                                      	case 360 + sj:		// 2\. Weihnachtstag
                                      	case 365 + sj:		// Silvester
                                      	case ostern - 48:	// Rosenmontag
                                      	case ostern - 2:	// Karfreitag
                                      	case ostern + 1:	// Ostermontag
                                      	case ostern + 39:	// Christi Himmelfahrt
                                      	case ostern + 50:	// Pfingstmontag
                                      	case ostern + 60:	// Fronleichnam (BW, BY, HE, NW, RP, SL (SA, TH nicht überall))
                                              return true;
                                         default:
                                              return false;
                                         } 
                                      }
                                      
                                      // auf Feiertag testen
                                      function checkHolidays() {
                                      	var jetzt = new Date();
                                      	var Jahr = jetzt.getFullYear();
                                      
                                      	sj = 0;
                                      	var i = Jahr % 4;
                                      	if (i === 0) sj = 1;
                                      
                                      // Die modifizierte Gauss-Formel nach Lichtenberg, gültig bis 2048
                                          var A = 120 + (19 * (Jahr % 19) + 24) % 30;
                                          var B = (A + parseInt(5 * Jahr / 4)) % 7;
                                          ostern = A - B - 33 + sj;
                                      
                                      // Tag des Jahres
                                      	var heutestart = new Date(jetzt.setHours(0,0,0,0));
                                      	var neujahr = new Date(Jahr,0,1);
                                      	var difftage = (heutestart - neujahr) / (24*60*60*1000) + 1;
                                      	var tag = Math.ceil(difftage);
                                      
                                      	setState("Feiertag.heute", feiertag(tag));
                                      	tag = tag + 1;
                                      	if (tag > 365 + sj) tag = 1;
                                      	setState("Feiertag.morgen", feiertag(tag));
                                      }
                                      
                                      schedule("0 0 * * *", checkHolidays);  //täglich um 0 Uhr 
                                      checkHolidays();                       // Scriptstart
                                      
                                      ```` `  
                                      

                                      ich habe das Skript mal an meine Bedürfnisse angepasst. Mir fehlten noch einige Feiertage (die immer auf einen Sonntag fallen; Ostern, Pfingsten), ich habe noch "übermorgen" eingebaut und schließlich die Funktionen, die den nächsten Feiertag errechnen. Dazu musste ich die eigentlich sehr praktische Switch-Funktion aus paul53's Skript in eine Funktion mit If-Abfragen umwandeln. Wenn der abgefragte Tag des Jahres einem hinterlegten Tag entspricht, dann wird der Name des Feiertages zurückgegeben, sonst bleibt der Name leer. Die Boolean-Variable (Feiertag ja/nein) reagiert dann darauf, ob ein Name zurückgegeben wurde (egal welcher Name, wenn er mindestens zwei Zeichen lang ist). Und solange (while) die boolean-Variable keinen Feiertag meldet, zählt weiter unten die While-Schleife die Tage hoch. Wenn dann ein Feiertag entdeckt wird (boolean = true), dann wird der Tag des Jahres an eine neue Funktion tagdesjahresZudatum übergeben. Die rechnet diesen Tag dann abhängig vom Schaltjahr wieder in ein Datum für die Ausgabe zurück.

                                      Ich hatte zuvor zur Berechnung der Feiertage ein http://hobbyquaker.blogspot.de/2014/03/deutsche-feiertage-im-json-format.html im Einsatz. Allerdings setzt das eine gewisse Pflege voraus (JSON Quelldatei). Das wollte ich mir in Zukunft ersparen.

                                      Dieses Skript legt die Objekte mit CreateState an. Ausserdem ist eine kleine Testfunktion eingebaut: In die Variable X kann ein ganze Zahl eingetragen werden. Ist sie 0, läuft das Skript korrekt mit dem heutigen Datum. Ist sie größer, lässt sich ein Tag in der Zukunft als Starttag festlegen (heute 26. April, wenn X = 7, dann nimmt das Skript an, heute wär 3. Mai).

                                      Vielleicht kann das noch jemand brauchen oder weiter optimieren.

                                      ! ````
                                      /* Feiertagsskript von paul53
                                      http://forum.iobroker.net/viewtopic.php?f=21&t=1341&p=11205#p11205
                                      pflegeleichte Berechnung der Feiertage bis zum Jahr 2048
                                      erstellt: 23.04.2016 nach Vorlagen von paul53
                                      26.04.2016 nächster Feiertag wird ausgerechnet und bezeichnet
                                      */
                                      ! createState("Kalender.Feiertag.heute.boolean", false, {
                                      name: 'Feiertag heute?',
                                      desc: 'Ist heute ein Feiertag?',
                                      type: 'boolean'
                                      });
                                      createState("Kalender.Feiertag.heute.Name", '', {
                                      name: 'Feiertag heute - Name',
                                      desc: 'Wie heißt der Feiertag heute?',
                                      type: 'string'
                                      });
                                      createState("Kalender.Feiertag.morgen.boolean", false, {
                                      name: 'Feiertag morgen?',
                                      desc: 'Ist morgen ein Feiertag?',
                                      type: 'boolean'
                                      });
                                      createState("Kalender.Feiertag.morgen.Name", '', {
                                      name: 'Feiertag morgen - Name',
                                      desc: 'Wie heißt der Feiertag morgen?',
                                      type: 'string'
                                      });
                                      createState("Kalender.Feiertag.uebermorgen.boolean", false, {
                                      name: 'Feiertag übermorgen?',
                                      desc: 'Ist übermorgen ein Feiertag?',
                                      type: 'boolean'
                                      });
                                      createState("Kalender.Feiertag.uebermorgen.Name", '', {
                                      name: 'Feiertag übermorgen - Name',
                                      desc: 'Wie heißt der Feiertag uebermorgen?',
                                      type: 'string'
                                      });
                                      createState("Kalender.Feiertag.naechster.Datum", '', {
                                      name: 'Nächster Feiertag - Datum',
                                      desc: 'Wann ist der nächste Feiertag?',
                                      type: 'string'
                                      });
                                      createState("Kalender.Feiertag.naechster.Name", '', {
                                      name: 'Nächster Feiertag - Name',
                                      desc: 'Wie heisst der nächste Feiertag?',
                                      type: 'string'
                                      });
                                      ! var idheute = "Kalender.Feiertag.heute.boolean",
                                      idmorgen = "Kalender.Feiertag.morgen.boolean",
                                      iduebermorgen = "Kalender.Feiertag.uebermorgen.boolean",
                                      idheuteName = "Kalender.Feiertag.heute.Name",
                                      idmorgenName = "Kalender.Feiertag.morgen.Name",
                                      iduebermorgenName = "Kalender.Feiertag.uebermorgen.Name",
                                      idnaechsterDatum = "Kalender.Feiertag.naechster.Datum",
                                      idnaechsterName = "Kalender.Feiertag.naechster.Name";
                                      ! // Script ermittelt, ob heute oder morgen ein Feiertag ist
                                      var sj; // Schaltjahr
                                      var ostern; // Ostersonntag: Tag im Jahr
                                      ! // Regional nicht relevante Feiertage auskommentieren oder löschen !!
                                      function feiertag(day) {
                                      var Name = '';
                                      if (day == 1) Name = 'Neujahr';
                                      else if (day == 6) Name = 'Heilige Drei Könige (BW,BY,ST)';
                                      else if (sj + 121 == day) Name = 'Maifeiertag';
                                      else if (day == sj + 227) Name = 'Maria Himmelfahrt (BY (nicht überall), SL)';
                                      else if (day == sj + 276) Name = 'Tag der dt. Einheit';
                                      else if (day == sj + 304) Name = 'Reformationstag (BB, MV, SA, ST,TH)';
                                      else if (day == sj + 305) Name = 'Allerheiligen (BW, BY, NW, RP, SL)';
                                      else if (day == sj + 358) Name = 'Heiligabend';
                                      else if (day == sj + 359) Name = '1. Weihnachtstag';
                                      else if (day == sj + 360) Name = '2. Weihnachtstag';
                                      else if (day == sj + 365) Name = 'Silvester';

                                      else if (day == ostern - 48) Name = 'Rosenmontag';
                                      else if (day == ostern -  2) Name = 'Karfreitag';
                                      else if (day == ostern)      Name = 'Ostersonntag';
                                      else if (day == ostern +  1) Name = 'Ostermontag';
                                      else if (day == ostern + 39) Name = 'Christi Himmelfahrt';
                                      else if (day == ostern + 49) Name = 'Pfingstsonntag';
                                      else if (day == ostern + 50) Name = 'Pfingstmontag';
                                      else if (day == ostern + 60) Name = 'Fronleichnam (BW, BY, HE, NW, RP, SL (SA, TH nicht überall))';
                                      else Name = '';
                                      return (Name);
                                      

                                      }

                                      ! function tagdesjahresZudatum (day) {
                                      var day_ms = (day - sj) * 24 * 60 * 60 * 1000; // Tag des Jahres in Millisekunden seit Neujahr Mitternacht
                                      var jetzt = new Date();
                                      var Jahr = jetzt.getFullYear();
                                      var neujahr = new Date(Jahr,0,1,0,0,0,0); // Dies Jahr Neujahr Mitternacht
                                      var neujahr_ms = neujahr.getTime();

                                      var datum = new Date();
                                      datum.setTime(neujahr_ms + day_ms);                                         // Addition Neujahr in ms plus Tag des Jahres in ms = gesuchtes Datum in ms
                                      return(datum);    
                                      

                                      }

                                      ! // auf Feiertag testen
                                      function checkHolidays() {
                                      var jetzt = new Date();
                                      var Jahr = jetzt.getFullYear();
                                      sj = (Jahr % 4 === 0) ? 1 : 0;
                                      ! // Die modifizierte Gauss-Formel nach Lichtenberg, gültig bis 2048
                                      var A = 120 + (19 * (Jahr % 19) + 24) % 30;
                                      var B = (A + parseInt(5 * Jahr / 4)) % 7;
                                      ostern = A - B - 33 + sj;
                                      ! // Tag des Jahres
                                      var heutestart = new Date(jetzt.setHours(0,0,0,0));
                                      var neujahr = new Date(Jahr,0,1);
                                      var difftage = (heutestart - neujahr) / (246060*1000) + 1;
                                      var tag = Math.ceil(difftage);
                                      ! // heute
                                      var x = 0; // Variable zur Annahme, es wäre ein anderer Tag im Jahr [heute = 0]
                                      tag = tag + x;
                                      //log(tag);
                                      var istFeiertag;
                                      setState(idheuteName, feiertag(tag));
                                      istFeiertag = (feiertag(tag).length < 2) ? false : true;
                                      setState(idheute, istFeiertag);

                                      // morgen
                                      tag = tag + 1;
                                      if (tag > 365 + sj) tag = 1;
                                      setState(idmorgenName, feiertag(tag));
                                      istFeiertag = (feiertag(tag).length < 2) ? false : true;
                                      setState(idmorgen, istFeiertag);

                                      // übermorgen
                                      tag = tag + 1;
                                      if (tag > 365 + sj) tag = 1;
                                      setState(iduebermorgenName, feiertag(tag));
                                      istFeiertag = (feiertag(tag).length < 2) ? false : true;
                                      setState(iduebermorgen, istFeiertag);

                                      // nächster Feiertag
                                      while (feiertag(tag).length < 2) {
                                      tag = tag + 1;
                                      istFeiertag = (feiertag(tag).length < 2) ? false : true;
                                      if (istFeiertag) {
                                      var datum_tdj = tagdesjahresZudatum(tag);
                                      setState(idnaechsterName, feiertag(tag));
                                      setState(idnaechsterDatum, formatDate(datum_tdj));
                                      log('Nächster Feiertag: ' + feiertag(tag) + ' am ' + formatDate(datum_tdj));
                                      }
                                      }
                                      }

                                      ! schedule("0 0 * * *", checkHolidays); //täglich um 0 Uhr
                                      checkHolidays(); // Scriptstart
                                      ! ````

                                      Ausgabe: 261_bildschirmfoto_2016-04-26_um_13.44.22.jpg

                                      Viele Grüße,

                                      Pix

                                      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                                      1 Reply Last reply
                                      0
                                      • P Offline
                                        P Offline
                                        pix
                                        wrote on last edited by
                                        #20

                                        @Bluefox:

                                        Wir brauchen iobroker.holidays adapter. 8-) `
                                        Is da :lol: :lol:

                                        http://forum.iobroker.net/viewtopic.php … 754#p24642

                                        ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                                        1 Reply Last reply
                                        0

                                        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                        With your input, this post could be even better 💗

                                        Register Login
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        598

                                        Online

                                        32.8k

                                        Users

                                        82.8k

                                        Topics

                                        1.3m

                                        Posts
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Home
                                        • Recent
                                        • Tags
                                        • Unread 0
                                        • Categories
                                        • Unreplied
                                        • Popular
                                        • GitHub
                                        • Docu
                                        • Hilfe