NEWS
Schalten 2 Stunden nach Sonnenuntergang
-
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
-
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
-
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
-
Klasse Script. Das habe ich bisher noch auf der CCU laufen.
@Homoran: Das wäre etwas für die Sammlung auf iobroker.net.
-
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
-
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
-
Danke!
Dann hab ich ja heute wieder was zu tun[GRINNING FACE WITH SMILING EYES]
Gesendet von meinem LIFETAB_S785X mit Tapatalk
-
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
-
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. -
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
-
Hallo,
@paul53: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:
Viele Grüße,
Pix
-
Wir brauchen iobroker.holidays adapter. 8-) `
Is da :lol: :lol: