Feiertagsberechnung - Skript

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

Moderator: Co-Administratoren

Benutzeravatar
Newi
Beiträge: 5
Registriert: 04.04.2018, 18:24
Wohnort: Rheinland

Re: Feiertagsberechnung - Skript

Beitrag von Newi » 04.04.2018, 18:49

[quote="Petrus"]Hallo,

die Antworten ergeben sich tatsächlich aus dem 1. Post.

@Petrus,

wie auch viele der anderen User hier vom meiner Seite Danke für das tolle Script.
Als Neuling in der HM Welt stoße ich aber auf ein kleines Problem....

Habe entsprechend des 1.Post alles umgesetzt, SVs anlegen lassen, Feiertagsliste generiert und in das Script übertragen.
Lasse ich das Komplett-Script in der Testumgebung laufen, werden die Variablen neu berechnet und alles ist gut.

Jedoch im Programmmodus, morgens um 01:00h wird nichts ausgeführt.... :shock:

Lasse ich im WebUI Script Editor die Fehlerprüfung durchlaufen, kommt folgende Fehlermeldung, obwohl gleiches Script in der Testumgebung durchläuft.

Code: Alles auswählen

Error 1 at row 82 col 15 near ^) {
	! SV: Namensliste (Werteliste)
	foreach(s_wert1, sv_Name.Split(",")) {
		sv
Parse following code failed:
! Feiertagsberechnung - Complete-V3.01 von Petrus (03-2018)
.........

Hat jemand eine Idee woran das liegen könnte ?


Gruß
Newi
Gruß
Newi

________________________________________________________________________

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 » 04.04.2018, 20:15

Hallo Newi,
Newi hat geschrieben:Lasse ich das Komplett-Script in der Testumgebung laufen, werden die Variablen neu berechnet und alles ist gut.

Jedoch im Programmmodus, morgens um 01:00h wird nichts ausgeführt.... :shock:
Das ist in der Tat merkwürdig.

Vorschlag: Poste mal bitte hier eine exakte Kopie deines Scriptes, dass morgens um 01:00 Uhr laufen sollte und in der Testumgebung den Fehler rauswirft. Nur so kann ich es analysieren.

Alles andere wäre Glaskugelleserei, denn wenn's in der Testumgebung läuft, sollte es auch autom. im Programm laufen.

Gruß
Petrus

Benutzeravatar
Newi
Beiträge: 5
Registriert: 04.04.2018, 18:24
Wohnort: Rheinland

Re: Feiertagsberechnung - Skript

Beitrag von Newi » 04.04.2018, 20:49

Hallo Petrus,

hier der Script.....

Code: Alles auswählen

! Feiertagsberechnung - Complete-V3.01 von Petrus (03-2018)

!   Changelog:
! - Daten der Feiertage werden "nur 1x" im Jahr berechnet
!   Ausnahme: Sobald ueber die SV neue, eigene Daten hinzugefuegt werden,
!             erfolgt beim naechsten Scriptaufruf eine erneute Berechnung
! - Die berechneten Daten werden chronologisch sortiert und in den SVs abgelegt
!   => Daten koennen damit z.B. in anderen Programmen ausgewertet werden
! - Berechnungen komplett ueberarbeitet => Gueltigkeit bis zum Jahr 2199
! - Auswertungen erfolgen mit Jahrestagen statt mit Datumsangaben => kompakteres Programm
! - V3.01: Falsches Format bei der Ermittlung der aktuellen Tageszahl korrigiert

! ==============================================================================
! Systemvariable Nr.1 und Nr.2 vom Typ: Logikwert
! Name-Nr.1/2 (Default): Feiertag-Heute / Feiertag-Morgen
! Werte: true/false = Ja/Nein
! ==============================================================================
	string sv_Bool = "Feiertag-Heute,Feiertag-Morgen";
!
! ==============================================================================
! Systemvariable Nr.3 und Nr. 4 vom Typ: Zeichenkette
! Name-Nr.3 (Default): "Feiertag-Daten"  Bedeutung: SV fuer die berechneten Jahrestage der Feiertage
! Name-Nr.4 (Default): "Feiertag-Eigene" bedeutung: SV fuer eigene Feiertagsdaten
!
! Moegliche Werte fuer SV-Nr.4:
! Datum (XX.XX. oder X.X.) oder mit Differenzangabe zum Ostersonntag (OS), 1.Advent (AD) oder Muttertag (MT)
! Beispiele: "OS-48=Rosenmontag;MT+0=Muttertag;AD-11=Buß- und Bettag"
! Trennzeichen zwischen den einzelnen Daten ist das Semikolon.
! ==============================================================================
	string sv_Daten = "Feiertag-Daten,Feiertag-Eigene";

! ==============================================================================
! Systemvariable Nr.5 und Nr.6 vom Typ: Werteliste
! Name-Nr.5/6 (Default): Feiertag-Heute-Name / Feiertag-Morgen-Name
! Werte: Namen der Feiertage chronologisch zu den in SV-Nr.3 gespeicherten Daten
! ==============================================================================
	string sv_Name = "Feiertag-Heute-Name,Feiertag-Morgen-Name";

! ============================================================================
! Scriptvariable Nr. 1
! Bedeutung: Die Feiertagsliste mit Datum und Name
! Werte: Datum (XX.XX. oder X.X.) oder mit Differenzangabe zum Ostersonntag (OS), 1.Advent (AD) oder Muttertag (MT)
! Trennzeichen zwischen den einzelnen Daten ist das Semikolon.
! ============================================================================
	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
";

! ============================================================================
! Scriptvariable Nr. 2
! Bedeutung (b_debug): Zum testen des Scripts in der Testumgebung der WebUI
!                      kann die DEBUG-Funktion aktiviert werden. Daten werden
!                      dann neu berechnet und gespeichert. Ausgaben erfolgen
!                      ausschliesslich in der WebUI.
!                      SV's Nr.1 und 2 werden nicht veraendert!
! Default : false
! Werte   : true (Funktion ein) ; false (Funktion aus)

! Scriptvariable Nr. 3
! Bedeutung (s_today): Ist die DEBUG-Funktion aktiviert, dann wird ausschliesslich
!                      das angegebene Datum "s_today" als Referenzdatum fuer die
!                      Ermittlung eines Feiertages verwendet.
! Wert  : beliebiges Datum
! Format: JJJJ-MM-TT

! Scriptvariable Nr. 4
! Bedeutung (b_CheckSVs): Falls aktiviert, werden die benoetigten Systemvariablen
!                         ggf. automatisch in der CCU angelegt und, sofern bereits
!                         vorhanden, auf den korrekten Typ hin ueberprueft.
! Werte   : true (Funktion ein) ; false (Funktion aus)
! Default : false
! Hinweis : Es ist in der Regel ausreichend, wenn diese Funktion nur bei der
!           1. Anwendung aktiviert und danach wieder deaktiviert wird.
! ============================================================================
	boolean b_debug = false;
	string  s_today = "2018-04-01";
	boolean b_CheckSVs = true;

! ****************************************************
! Ab hier Script CODE - Don't change behind this line
! ****************************************************

! *** Systemvariablen pruefen?
object svObjects=dom.GetObject(ID_SYSTEM_VARIABLES);
object svObj; string s_wert1; integer i_wert2=0;
if (b_CheckSVs) {
	! SV: Namensliste (Werteliste)
	foreach(s_wert1, sv_Name.Split(",")) {
		svObj = svObjects.Get(s_wert1);
		if (svObj) {
				if (svObj.ValueType() != ivtInteger) { WriteLine(s_wert1 # " : ValueSubTyp wrong!"); quit; }
				else { if (b_debug) { WriteLine(s_wert1 # " : ValueTyp OK!"); } }
		} else {
				svObj = dom.CreateObject(OT_VARDP);
				svObjects.Add(svObj.ID());
				svObj.Name(s_wert1);
				svObj.ValueType(ivtInteger);
				svObj.ValueSubType(istEnum);
				svObj.DPInfo("Feiertagname");
				svObj.ValueList("-");
				svObj.State(0);
				dom.RTUpdate(false);
				if (b_debug) { WriteLine(s_wert1 # " : Systemvariable created!"); }
		}
	}
	! SV: Feiertag (Logikwert)
	foreach(s_wert1, sv_Bool.Split(",")) {
			svObj = svObjects.Get(s_wert1);
			if (svObj) {
					if (svObj.ValueSubType() != istBool) { WriteLine(s_wert1 # " : ValueSubTyp wrong!"); quit; }
					else { if (b_debug) { WriteLine(s_wert1 # " : ValueTyp OK!"); } }
			} else {
					svObj = dom.CreateObject(OT_VARDP);
					svObjects.Add(svObj.ID());
					svObj.Name(s_wert1);
					svObj.ValueType(ivtBinary);
					svObj.ValueSubType(istBool);
					svObj.ValueName0("Nein");
					svObj.ValueName1("Ja");
					svObj.State(false);
					svObj.DPInfo("Ist ein Feiertag?");
					svObj.ValueUnit("");
					dom.RTUpdate(false);
					if (b_debug) { WriteLine(s_wert1 # " : Systemvariable created!"); }
			}
	}
	! SV: Datenliste (Zeichenkette)
	foreach(s_wert1, sv_Daten.Split(",")) {
		svObj = svObjects.Get(s_wert1);
		if (svObj) {
			if (svObj.ValueType() != ivtString) { WriteLine(s_wert1 # " : ValueTyp wrong!"); quit; }
			else { if (b_debug) { WriteLine(s_wert1 # " : ValueTyp OK!"); } }
		} else {
			svObj = dom.CreateObject(OT_VARDP);
			svObjects.Add(svObj.ID());
			svObj.Name(s_wert1);
			svObj.ValueType(ivtString);
			svObj.ValueSubType(istChar8859);
			if(i_wert2){svObj.DPInfo("Eigene Feier- und Ereignistage");}else{svObj.DPInfo("Berechnete Jahrestage der Feier- und Ereignistage"); i_wert2=1;}
			svObj.ValueUnit("");
			svObj.State("");
			svObj.Internal(false);
			svObj.Visible(true);
			dom.RTUpdate(false);
			if (b_debug) { WriteLine(s_wert1 # " : Systemvariable created!"); }
		}
	}
}

! *** Das Jahr
if (b_debug) { integer i_jahr=s_today.StrValueByIndex("-",0).ToInteger(); } else { integer i_jahr=system.Date("%Y").ToInteger(); }

! *** Schaltjahr (SJ) : (ja/nein)=(1/0)
integer SJ=((!i_jahr%400)||((i_jahr%100)&&(!i_jahr%4))).ToInteger();

! *** Jahreszahl heute (s_today)
!     Nur bei DEBUG berechnen. Statt: s_today=system.Date(s_today#" 06:00:00").ToTime().Format("%j").ToString(0);
if (b_debug){ integer i_wert1=s_today.StrValueByIndex("-",1).ToInteger();
							s_today=((s_today.StrValueByIndex("-",2).ToInteger()+((489*i_wert1)/16)-30)-((7+i_wert1)/10)*(2-SJ)).ToString();
						} else {s_today=system.Date("%j").ToInteger().ToString();}
integer i_wert1=s_today.ToInteger();

! *** Jahreszahl morgen (s_tomorrow)
string s_tomorrow="1"; if(i_wert1<(365+SJ)){ s_tomorrow=(i_wert1+1).ToString(); }

! *** SV-Objekte definieren
string s_Obj=sv_Daten.StrValueByIndex(",", 0); string s_Obj2=sv_Daten.StrValueByIndex(",", 1);
svObj=svObjects.Get(s_Obj); object svObj2=svObjects.Get(s_Obj2);

! *** Wenn nicht DEBUG, dann aktuelle Daten aus SV holen.
boolean b_wert1=false; string s_fDaten="";
if (!b_debug) {
	if (svObj){
		! Wenn Daten bereits im aktuellen Jahr berechnet wurden => keine erneute Berechnung erforderlich => nur Daten aus SV holen.
		if (svObj.Value().StrValueByIndex(";", 0).StrValueByIndex("#", 0).ToInteger()==i_jahr){
			s_fDaten=svObj.Value();
			! Wenn neue, eigene Daten in SV stehen (neuer Zeitstempel) => dann doch Berechnung erneut durchfuehren.
			if (svObj2) {if (svObj2.Timestamp().ToInteger() > s_fDaten.StrValueByIndex(";", 0).StrValueByIndex("#", 1).ToInteger()){b_wert1=true;}}
		} else { b_wert1=true; }
		! Script beenden, wenn SV nicht existiert.
	} else { WriteLine(s_Obj # " : Object not found!"); quit; }
}

! *** Berechnungen
string s_wert2;
if ((b_wert1) || (b_debug)) {
	! Osterkennziffer (i_wert3) fuer Berechnungen ermitteln
	integer i_wert3=(204-(i_jahr%19)*11)%30; i_wert3=120+i_wert3-(i_wert3/27); i_wert1=(i_wert3+((i_jahr*5)/4)-(i_jahr/2100))%7; i_wert3=i_wert3-i_wert1;

	! Ostersonntag   :Tag   :Monat              :Jahrestag (OS+0)
	i_wert1=1+(i_wert3%31); i_wert2=i_wert3/31; integer OS=i_wert1+59+((i_wert2==4).ToInteger()*31)+SJ; ! Jahrestag (OS+0)
	if (b_debug) {WriteLine("\nOstersonntag ist am "#i_wert1.ToString()#"."#i_wert2.ToString()#". und der "#OS.ToString()#". Tag im Jahr "#i_jahr.ToString());}

	! Muttertag      :Tag im Mai                :Jahrestag (MT+0)
	i_wert1=8+(i_wert3%7)-(7*(118/i_wert3)); integer MT=i_wert1+120+SJ;
	if (b_debug) {WriteLine("Muttertag ist am "#i_wert1.ToString()#".5. und der "#MT.ToString()#". Tag im Jahr "#i_jahr.ToString());}

	! 1.Advent       :Tag            :Monat                   :Jahrestag (AD+0)
	i_wert1=1+((26+(i_wert3%7))%30); i_wert2=12-(i_wert1/27); integer AD=i_wert1+304+((i_wert2==12).ToInteger()*30)+SJ;
	if (b_debug) {WriteLine("1. Advent ist am "#i_wert1.ToString()#"."#i_wert2.ToString()#". und der "#AD.ToString()#". Tag im Jahr "#i_jahr.ToString());}

	! **Ggf. eigene Feier-/Festtage aus SV ergaenzen
	if (svObj2){
		if (svObj2.Value()){ s_Feiertage=s_Feiertage#";"#svObj2.Value(); }
		s_fDaten=i_jahr.ToString() # "#" # svObj2.Timestamp().ToInteger().ToString();
	} else { string s_fDaten=i_jahr.ToString() # "#0"; }

	! Daten einlesen, Jahrestage berechnen und merken
	string s_fNamen="-";
	foreach(s_wert2,s_Feiertage.Split(";")){
		! Zeitwert aus Feiertagseintrag holen
		s_wert1=s_wert2.StrValueByIndex("=",0);
		! Pruefen ob Angabe ein beweglicher Feiertag zu OS,MT,AD ist
		i_wert1=((s_wert1.Substr(0,2)=="OS").ToInteger()*OS)+((s_wert1.Substr(0,2)=="MT").ToInteger()*MT)+((s_wert1.Substr(0,2)=="AD").ToInteger()*AD);
		! Wenn beweglicher Feiertag => Differenz zum Referenztag (OS,MT,AD) addieren
		if (i_wert1) { s_fDaten=s_fDaten # ";" # (i_wert1+s_wert1.Substr(2,s_wert1.Length()-2).ToInteger()).ToString();
		} else { ! ...andernfalls normale Datumsangabe: Tages- und Monatswert formatieren...
			i_wert1=s_wert1.StrValueByIndex(".",0).ToInteger(); i_wert2=s_wert1.StrValueByIndex(".",1).ToInteger();
			s_wert1=((i_wert1+((489*i_wert2)/16)-30)-((7+i_wert2)/10)*(2-SJ)).ToString(); ! ...Jahrestag berechnen
			s_fDaten=s_fDaten # ";" # s_wert1; ! ...und zur Datenliste hinzufuegen
		}
		s_fNamen=s_fNamen # ";" # s_wert2.StrValueByIndex("=",1); ! zugehoerigen Namen zur Namenliste hinzufuegen
	}

	! *** Daten und Namen chronologisch sortieren ***
	i_wert3=0; i_wert1=2; foreach(s_wert1,s_fDaten.Split(";")){i_wert3=i_wert3+1;}
	while(i_wert1<i_wert3){ i_wert2 = i_wert1;
		if((i_wert2>1) && (s_fDaten.StrValueByIndex(";",i_wert2-1).ToInteger()>s_fDaten.StrValueByIndex(";",i_wert2).ToInteger())){
			AD=i_wert2; i_wert2=i_wert2-1;
			while((i_wert2>1) && (s_fDaten.StrValueByIndex(";",i_wert2-1).ToInteger()>s_fDaten.StrValueByIndex(";",AD).ToInteger())){i_wert2=i_wert2-1;}
			MT=0; s_wert1=""; s_wert2="";
			while(MT<i_wert3){
				if (MT==i_wert2) {s_wert1=s_wert1#s_fDaten.StrValueByIndex(";",AD)#";"; s_wert2=s_wert2#s_fNamen.StrValueByIndex(";",AD)#";";}
				if (MT!=AD) {s_wert1=s_wert1#s_fDaten.StrValueByIndex(";",MT)#";"; s_wert2=s_wert2#s_fNamen.StrValueByIndex(";",MT)#";";}
				MT=MT+1;
			}
			s_fDaten=s_wert1.Substr(0,s_wert1.Length()-1); s_fNamen=s_wert2.Substr(0,s_wert2.Length()-1);
		}
		i_wert1=i_wert1+1;
	}

	! *** Daten in die SV schreiben ***
	if (svObj){ s_fDaten=s_fDaten#";"; svObj.State(s_fDaten); } else { WriteLine(s_Obj # " : Object not found!"); quit; } ! Script beenden, wenn SV nicht existiert.

	! *** Namen in die SV schreiben ***
	foreach(s_wert1, sv_Name.Split(",")) {
		svObj = svObjects.Get(s_wert1);
		if (svObj) { svObj.ValueList(s_fNamen); svObj.State(0); } else { WriteLine(s_wert1 # " : Object not found!"); quit; } ! Script beenden, wenn SV nicht existiert.
	}
	! *** Bei DEBUG ermittelte Daten ausgeben ***
	if (b_debug) { WriteLine("\nErmittelte Daten: "); i_wert1=1; while(i_wert1<i_wert3){WriteLine(s_fDaten.StrValueByIndex(";",i_wert1)#" : "#s_fNamen.StrValueByIndex(";",i_wert1)); i_wert1=i_wert1+1;}}
}

! *** Auf Feiertag heute und morgen pruefen ***
i_wert2=0;
while(i_wert2<2){
	if (i_wert2==0){s_wert1=s_today; s_wert2="\nHeute ("#s_wert1;} else {s_wert1=s_tomorrow; s_wert2="Morgen ("#s_wert1;}
	s_Obj=sv_Name.StrValueByIndex(",",i_wert2); s_Obj2=sv_Bool.StrValueByIndex(",",i_wert2);
	svObj=svObjects.Get(s_Obj); if (!svObj) { WriteLine(s_Obj # " : Object not found!"); quit; } ! Script beenden, wenn SV nicht existiert.
	svObj2=svObjects.Get(s_Obj2); if (!svObj2) { WriteLine(s_Obj2 # " : Object not found!"); quit; } ! Script beenden, wenn SV nicht existiert.
	i_wert1=s_fDaten.Find(";"#s_wert1#";"); ! Jahrestag in den Daten suchen
	if (i_wert1>=0){ ! Wenn Wert gefunden => Feiertag...
		i_wert1=1; while(s_wert1!=s_fDaten.StrValueByIndex(";",i_wert1)) { i_wert1=i_wert1+1; } ! ...dann Position (Index) ermitteln...
		if (!b_debug) { svObj.State(i_wert1); svObj2.State(1); } else { WriteLine(s_wert2#") ist ein Feiertag : " # web.webGetValueFromList(svObj.ValueList(),i_wert1)); } ! ...und Ergebnis in SVs setzen oder bei DEBUG ausgeben.
	} else { ! ...andernfalls kein Wert gefunden => kein Feiertag
		if (!b_debug) { svObj.State(0); svObj2.State(0); } else { WriteLine(s_wert2#") ist kein Feiertag!"); }
	}
	i_wert2=i_wert2+1; ! weiterer Durchlauf fuer morgen
}

Danke für's Drüberschauen...

Gruß
Newi
Gruß
Newi

________________________________________________________________________

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 » 04.04.2018, 21:17

...also bei mir läuft's ohne Fehler. Auch in der WebUI gibt's bei der Fehlerüberprüfung keinen Fehler.

Einzig am Ende deiner Feiertagsliste, hinter "...OS+60=Fronleichnam" hast du ein Leerzeichen, das du löschen solltest.

Tja, das hilft dir jetzt nicht unbedingt, aber adhoc entdecke ich keinen Fehler.

Gruß
Petrus

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

Re: Feiertagsberechnung - Skript

Beitrag von Slice » 04.04.2018, 21:54

Hallo,

wenn ich das so lese, kommt da bei mir die Frage auf welche FW und welche Rega läuft (Legacy usw.)??
Das Skript funktioniert auf jedenfall unter 2.31.25 unter Community sowie auch Standard, meine ich habe bei getestet.

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

Benutzeravatar
Newi
Beiträge: 5
Registriert: 04.04.2018, 18:24
Wohnort: Rheinland

Re: Feiertagsberechnung - Skript

Beitrag von Newi » 04.04.2018, 22:32

Re: Feiertagsberechnung - Skript

Beitrag von Petrus » 04.04.2018, 21:17

...also bei mir läuft's ohne Fehler. Auch in der WebUI gibt's bei der Fehlerüberprüfung keinen Fehler.
Hallo Petrus,

erst nochmal vielen Dank für deine schnellen Bemühungen.

Also klar, das Leerzeichen brachte keine Änderung, aber dann hat sich der alte Spruch wieder mal bestätigt... => Reboot tut gut ! :D
Also nach drei Reboots der CCU2 in Folge lief es nach dem dritten Mal sowohl ohne Fehler in der Fehlerprüfung als auch Im Programmablauf... 8)

Habe dann einen zusätzlichen Feiertag mit OS+3=Test eingefügt der auch in Feiertag-Heute geschrieben wurde.
Nach dem Löschen des zusätzlichen Feiertag und nochmaligem Durchlauf bleibt der Wert für heute aber stehen.... Normal ?
Fehlerdurchlauf ist OK ohne Fehler.

Falls du zu dem Phänomen noch eine Idee hast, gerne...


@ Slice,
FW ist 2.27.7
Wo finde ich Info zu REGA und Legacy ?

Danke und Gruß
Newi
Gruß
Newi

________________________________________________________________________

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 » 04.04.2018, 22:49

Hi,
Newie hat geschrieben:Falls du zu dem Phänomen noch eine Idee hast, gerne...
Klar habe ich, da es kein Phänomen ist :wink:
Newie hat geschrieben:Habe dann einen zusätzlichen Feiertag mit OS+3=Test eingefügt...
Diesen hast du sicher direkt im Script in die Feiertagsliste eingefügt, oder? Diese Liste wird nur einmal im Jahr abgearbeitet, da sich diese Liste ja i.d.R. auch nicht mehr ändert und die zugehörigen Daten dann auch nur jährlich berechnet werden müssen.

Eigene Daten gehören in die Systemvariable "Feiertag-Eigene". Diese wird bei jedem Scriptaufruf auf Änderungen geprüft.

Damit du deinen Eintrag aber wieder los wirst - oder falls du die Liste dann doch mal im Script änderst -, führe doch einfach einen Testdurchlauf mit "b_debug = true" aus. Damit erzwingst du eine erneute Berechnung und die Liste mit den Daten wird neu erstellt.

Gruß
Petrus

Benutzeravatar
Newi
Beiträge: 5
Registriert: 04.04.2018, 18:24
Wohnort: Rheinland

Re: Feiertagsberechnung - Skript

Beitrag von Newi » 05.04.2018, 11:55

Hi Petrus,

ja du hast recht, hatte einfach mal manuell die Feiertagsliste erweitert, woraus natürlich ein zusätzlicher Wert 94 in die Variable geschrieben wurde. :!:
Also heute Nacht lief das Programm/Script auch ohne murren durch und hat entsprechend die SV's aktualisiert.

Jetzt noch fix mit "debug" drübergebügelt und alles ist gut.

Daaaanke nochmals.
Gruß
Newi
Gruß
Newi

________________________________________________________________________

ChrisB78
Beiträge: 12
Registriert: 19.12.2016, 17:44

Re: Feiertagsberechnung - Skript

Beitrag von ChrisB78 » 10.05.2018, 10:54

Hlalo Petrus,

habe leider erst jetzt mit bekommen, das du mir deine Hilfe anbietest, schade eigentlich ,das man keine E-Mail bekommt wenn man eine neue Nachricht hat.
Egal.
Wie schon gesagt würde ich mich auch für den Skript interessieren aber da ich bis jetzt noch nie mit solchen Skripts gearbeitet habe bräuchte ich da doch eher eine genau Anleitung wie und wo man den Skript einbauen sollte.

Danke im Voraus.
Gruß Chris

ChrisB78
Beiträge: 12
Registriert: 19.12.2016, 17:44

Re: Feiertagsberechnung - Skript

Beitrag von ChrisB78 » 10.05.2018, 16:35

So jetzt bin ich es nochmal, bevor ich es zu kompliziert mache, frage ich jetzt einfach mal direkt.
also ich würde gern die Version: Compact-Version in die CCU2 einfügen.
Meine Fragen:
1. brauch ich für die Compact-Version auch die Feiertagsliste?
2. wie genau muss ich den Skript Compact-Version einbauen.
3. wenn ich die Feiertagsliste auch einbauen muss, wie mach ich das genau.

Wäre super wenn mir einer dabei helfen könnte, im programmieren bin ich leider eine Niete.

Gruß
Chris

Antworten

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