Feiertagsberechnung - Skript

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Petrus
Beiträge: 134
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Petrus » 10.02.2022, 14:45

Hallo 1stXerox,

ein Fehler ist das nicht, da an dieser Stelle die SV per Default - wie beschrieben - nur auf den Typ Zeichenkette geprüft wird.
ABER: Da laut Beschreibung/Anleitung ja beide Typen wahlweise möglich sind, müsste an dieser Stelle im Code idealerweise auch auf den Typ Werteliste geprüft werden. Selbst wenn ggf. per Default eine SV vom Typ Zeichenkette angelegt wird.

Da es sich hier um ein "Spezial-Skript" handelt, habe das entsprechend ergänzt und deine Anregung (Reise) mit aufgenommen.

.
Urlaubstage_V4.08_complete_spezial.txt
(18.32 KiB) 299-mal heruntergeladen
.
.
Urlaubstage_V4.08_compact_spezial.txt
(4.62 KiB) 164-mal heruntergeladen
.

Gruß
Petrus
Zuletzt geändert von Petrus am 25.04.2022, 15:24, insgesamt 1-mal geändert.

ReiterMichael
Beiträge: 2
Registriert: 15.12.2021, 19:36
System: CCU und Access Point

Re: Feiertagsberechnung - Skript

Beitrag von ReiterMichael » 28.02.2022, 17:14

Hallo in die Runde,

ich bin erst seit Anfang Dezember 2021 mit Homematic unterwegs, aber mit Hilfe dieses Forums und vieler toller Videos und Seminare bin ich schnell voran gekommen. Ich nutze die CCU3.

Heute habe ichs Feiertagsscript von Petrus installiert. Die Systemvariablen wurden angelegt, die Daten richtig berechnet und für heute wird auch der 'Rosenmontag' in der Systemvariable richtig hinterlegt.

Aber beim dem Script 'Feiertage_3.2_compact' kommt bei der Prüfung immer wieder diese Fehlermeldung:

Code: Alles auswählen

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>404 - Not Found</title>
 </head>
 <body>
  <h1>404 - Not Found</h1>
 </body>
</html>

Script schon neu runtergeladen, CCU neu gestartet, hilft alles nichts. Hat jemand eine Idee? Danke im voraus.

Gruß Michael


14.03.2022
Nach mehrmaligem Neustart der CCU läuft alles.

Gruß
Michael Reiter
Zuletzt geändert von ReiterMichael am 13.03.2022, 11:11, insgesamt 2-mal geändert.
Gruß von
Michael Reiter

ReiterMichael
Beiträge: 2
Registriert: 15.12.2021, 19:36
System: CCU und Access Point

Re: Feiertagsberechnung - Skript

Beitrag von ReiterMichael » 01.03.2022, 19:42

Hallo Alchy,

Danke für die Anpassung. Nächstes Mal achte ich drauf und befasse mich damit.

Gruß
Michael
Gruß von
Michael Reiter

Slice
Beiträge: 1203
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 141 Mal
Danksagung erhalten: 85 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Slice » 17.04.2022, 19:35

Hallo,

ich setze auch das Feiertagsscript v3.1 ein und wundere mich warum heute nicht als Ostersonntag ausgegeben wird.
Ostermontag für morgen wird richtig angezeit. Das Script läuft einmal Nachts bei mir.

Bei der v3.1 vermisse ich im Code:

Code: Alles auswählen

string s_Feiertage = "01.01.=Neujahr;03.10.=Tag der deutschen Einheit;OS-2=Karfreitag;OS+1=Ostermontag;OS+50=Pfingstmontag;OS+39=Christi Himmelfahrt;25.12.=1. Weihnachtsfeiertag;26.12.=2. Weihnachtsfeiertag;01.05.=Erster Mai;01.11.=Allerheiligen;OS+60=Fronleichnam";
OS+0=Ostersonntag

Und in der Feiertagsliste v2.41 werde ich nicht schlau draus ob in BW der Ostersonntag richtig berechnet wird.
Evtl liegt hier noch ein Fehler vor.

Hat den jemand Ostersonntag in BW heute?

Sonnige Ostern noch,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.75.7 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------

Petrus
Beiträge: 134
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Petrus » 18.04.2022, 19:30

Hallo Slice,

in der Feiertagsliste werden nur die gesetzlichen Feiertage berücksichtigt. Da der Ostersonntag ein kirchlicher Feiertag ist - mit Ausnahme in Brandenburg, wo dieser auch ein gesetzlicher Feiertag ist - wird im Ergebnis der Ostersonntag nicht berücksichtigt. Daher kein Fehler im Skript.

Du kannst den Ostersonntag - wie von dir bereits erwähnt - in der Systemvariablen im Skript einfach mittels OS+0=Ostersonntag ergänzen.

Viele Grüße
Petrus

Slice
Beiträge: 1203
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 141 Mal
Danksagung erhalten: 85 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Slice » 19.04.2022, 15:50

Hallo Petrus,

das habe ich mir fast gedacht und gestern Abend mal versucht umzusetzen.
Als ich das Complete Script im Debug Modus mit gesetzten Datum habe laufen lassen, wurden die Feiertage richtig angezeigt.
Eine Änderung zurück zum Compact Script mit den Feiertagen hat mir gestern Abend dann immer Christi Himmelfaht angezeigt.
Eine Erklärung habe ich dafür nicht und habe dann gestern Abend aufgegeben.
Heute sind die Feiertage ja wieder ordnungsgemäß verschwunden.
Ich warte jetzt einfach mal auf den 01. Mai als nächsten Feiertag und hoffe das das Script wieder normal läuft.

Danke und Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.75.7 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------

Petrus
Beiträge: 134
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Petrus » 20.04.2022, 18:16

Hallo Slice,

wenn eigene Feiertage hinzugefügt oder allgemein die Feiertagsliste geändert wird, muss im Skript die Variable b_calc für einen Durchlauf auf true gesetzt werden. Dadurch werden die Feiertagsdaten neu berechnet und die hinzugefügten Feiertage entsprechend berücksichtigt.

Denn die Berechnung der Feiertagsdaten erfolgt nur 1x zu Beginn eines Jahres, da sich diese i. d. R. in dessen Verlauf ja auch nicht ändern. Außer man legt selbst Hand an.

Siehe dazu den Hinweis in Zeile 112 des Complete-Skriptes.

Das mit Christi Himmelfahrt kann ich auch nicht nachvollziehen!

Viele Grüße
Petrus

Slice
Beiträge: 1203
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 141 Mal
Danksagung erhalten: 85 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Slice » 21.04.2022, 13:31

Hallo Petrus,

ja, das habe ich genau nach der Anleitung auf Seite 1 durchgeführt gehabt. Zumal die Ersteinrichtung Deines Scriptes schon eine Weile her war.
Da ist man dankbar das es eine gute Anleitung dazu gibt! :D
Wie gesagt, jetzt warte ich mal den 01. Mai ab und werde hier nochmal berichten.

Danke und Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.75.7 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------

Xel66
Beiträge: 14169
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 587 Mal
Danksagung erhalten: 1501 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Xel66 » 21.04.2022, 21:28

Ich weiß ja nicht, was die Hausautomation mit dem Feiertagsnamen anfangen kann, aber ich betreibe immer noch eine der Vorversionen (2.2.1r2), die einfach nur feststellt, ob am aktuellen oder am Folgetag ein Feiertag ist. Und diese "Berechnung" hat mich nach meinen Beobachtungen noch nicht ein einziges Mal in die Irre geleitet. Das Script läuft jede Nacht um 1:00 Uhr. Einzig den einzelnen Reformationstag im Lutherjahr habe ich mal manuell nachgerüstet. Ansonsten tut es einfach, was es soll. Vielleicht haben solche Basic-Versionen durchaus ihren Sinn.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Petrus
Beiträge: 134
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Petrus » 26.04.2022, 12:06

Hallo Xel66,

da kann ich dir ein Beispiel einer Bekannten nennen. Diese dekoriert zur Weihnachtszeit eines ihrer Fenster und möchte dafür die Zeitsteuerung für die Beleuchtung vom 1. Advent bis Neujahr aktivieren. Damit das Programm nicht stets manuell neu konfiguriert und reaktiviert werden muss, wird dafür der Feiertagsname ausgewertet. Über Sinn und Unsinn lässt sich diskutieren. Zudem gibt es dafür auch andere Lösungen.
Xel66 hat geschrieben:
21.04.2022, 21:28
...Vielleicht haben solche Basic-Versionen durchaus ihren Sinn.
Aus früheren Meldungen weiß ich ja, das du ein Freund der Ur-Version bist. Im wesentlichen bin ich da ganz bei dir, da bei mir seit kurzem eine optimierte Variante der Basic-Version läuft. Wollte ursprünglich nur wissen, ob's bei gleicher Zuverlässigkeit auch kompakter geht.

Code: Alles auswählen

! Feiertagsberechnung V4.0 - nur Daten ohne Feiertagsnamen von Petrus (04-2022)

! Liste erzeugt mit Skript "Feiertagsliste V3.0"
string s_Feiertage = "01.01.;03.10.;OS-2;OS+1;OS+50;OS+39;25.12.;26.12.;01.05.;01.11.;OS+60;OS-48;MT+0;24.12.;31.12.;AD+0;AD+7;AD+14;AD+21";
string sv_Bool = "Feiertag-Heute,Feiertag-Morgen"; ! Namen der erforderliche Systemvariablen vom Typ Logikwert

! ##########################################################
! Ab hie Scriptcode - Don't change anything behind this line
! ##########################################################

boolean b_today=false; boolean b_tomorrow=false;
integer i_jahr  = currenttime.Year();           ! Das aktuelle Jahr
string  s_today = currenttime.Format("%d.%m."); ! Das heutige Datum
integer i_today = currenttime.Yearday();        ! Die heutige Jahreszahl
string  s_tomorrow = (currenttime.ToInteger()+86400).ToTime().Format("%d.%m."); ! Datum von morgen

integer SJ=(1/(1+i_jahr%4))-(1/(1+i_jahr%100))+(1/(1+i_jahr%400));        ! Schaltjahr ermitteln
integer i_tomorrow=i_today+1; if (i_tomorrow>(365+SJ)){ i_tomorrow=1; }   ! Jahreszahl von morgen
integer x=(((i_jahr%19)*19)+24)%30; integer y=(120+x)-(x/27); x=((y+((i_jahr*5)/4))-(i_jahr/2100))%7; integer z=y-x; ! Osterkennzahl (z)
x=1+(z%31); y=z/31; integer OS=((x+((489*y)/16))-(((7+y)/10)*(2-SJ)))-30; ! Ostersonntag (OS+0) mit der Osterkennzahl berechnen
x=1+(26+z%7)%30; y=12-(x/27); integer AD=((x+((489*y)/16))-(((7+y)/10)*(2-SJ)))-30; ! 1. Advent (AD+0) mit der Osterkennzahl berechnen
x=(8+z%7)-((118/z)*7); y=5; integer MT=((x+((489*y)/16))-(((7+y)/10)*(2-SJ)))-30;   ! Muttertag (MT+0) mit der Osterkennzahl berechnen (Monat Mai)

string s_item;
foreach(s_item, s_Feiertage.Split(";")) { ! Auf Feiertag/e prüfen
  x=(s_item.Contains("OS").ToInteger()*OS)+(s_item.Contains("MT").ToInteger()*MT)+(s_item.Contains("AD").ToInteger()*AD);
  if (x>0) { ! Eintrag ist ein bewegliches Datum
    y=x+(s_item.Substr(2,s_item.Length()-2)).ToInteger(); ! Differenz zum Referenztag (OS,MT,AD) addieren
    if (y==i_today) { b_today=true; } else { if (y==i_tomorrow) { b_tomorrow=true; }}
  } else {  ! Eintrag ist ein Datum
    if (s_item==s_today) { b_today=true; } else { if (s_item==s_tomorrow) { b_tomorrow=true; }}
  }
}

object svObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sv_Bool.StrValueByIndex(",", 0)); if (svObj){ svObj.State(b_today); }
svObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sv_Bool.StrValueByIndex(",", 1)); if (svObj){ svObj.State(b_tomorrow); }
Funktioniert und kompakter - denke ich - geht es nicht. Zumindest nicht, solange man in Homematic-Script keine Funktionen definieren kann. Ich konnte mit den angewendeten Formeln die Feiertagsdaten bis zum Jahr 2100 verifizieren. Sollte reichen :lol:

Zur Anwendung. Einfach die Feiertagsdaten ohne Namen mit dem Skript "Feiertagsliste V3.0" aus dem 1. Post generieren lassen und einfügen.

Gruß
Petrus

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“