NEWS
In iCal einen Termin mit dem Text "Ferien" oder "Frei" suchen und Variable schalten
-
Hallo zusammen
Ich habe mein Kalender mit dem ical-Adapter erfolgreich eingebaut.
Nun möchte ich in diesem Kalender die heutigen Termine mit Ferien und Frei auslesen und eine Systemvariable schalten (Heute ein Termin mit Ferien = true, heute ein Termin mit Frei = true, heute kein Termin mit Ferien = false, heute kein Termin mit Frei = false).Die Servicevariable hat die Nummer 25018.Konnte mir hier bitte jemand unter die Arme greifen?
Habe das folgende Script gefunden welches so alle 30 Minuten ablaufen sollte...
! ``` `/* Kalenderevent in der Zukunft suchen sucht im iCal Adapter nach events, die noch kommen http://forum.iobroker.net/viewtopic.php?f=21&t=3761&sid=4319378b32a0ce096bbbbfc0ebd859ce#p34975 ! 20.09.2016 erstellt von pix 02.02.2017 geändert von bahnuhr */ ! // Variablen var suchstring = 'Ferien'; // Suchbegriff var stichtag = 0; // 0=heute; 1=morgen; 2=übermorgen; 3=in 3 Tagen var idTabelle = 'ical.0.data.table'; // Instanz eintragen var logging = false; // debug Log ein/ausschalten var tage = ['Heute','Morgen','Übermorgen','In 3 Tagen']; // dafür relative Datumsangabe in iCal-Adapter einschalten und ggf. übersetzen ! function datum(x) { var jetzt = new Date(); if (logging) log('Jetztzeit: ' + jetzt); var zeit = new Date (jetzt.getFullYear(), jetzt.getMonth(), jetzt.getDate() + x); // z.B. in drei Tagen um Mitternacht if (logging) log('Zielzeit: ' + zeit); var jahr = zeit.getFullYear(); var monat = (zeit.getMonth()+1 < 10) ? '0' + (zeit.getMonth()+1) : zeit.getMonth()+1; var tag = (zeit.getDate() < 10) ? '0' + zeit.getDate() : zeit.getDate(); return (tag + '.' + monat + '.' + jahr); } ! function pruefeKalender() { var Auto_M = getState('javascript.0.Status.System.Auto_Müllabfuhr').val; var kalender = getState(idTabelle).val; var tag = datum(parseInt(stichtag,10)); var termin = []; if (logging) log(tag); try{ var ereignisse = JSON.stringify(kalender, null, 2); // Ausgabe als String if (logging) log(ereignisse); for(var i = 0; i <kalender.length; i++)/{/alle/events/durchgehen/if/(/(kalender[i].date.indexof(tag)/!="-1)" ||/(kalender[i].date.indexof(tage[stichtag])/)/string/datum/oder/relatives/(nicht/nicht)/gefunden,/also/gefunden/var/term="kalender[i].event;" (term.indexof(suchstring)/termin.push(kalender[i].event);/log/('treffer:/'/+/termin);/}/termin.sort();/(termin.length="==" 0)/setstate('javascript.0.status.sonstige.müll_morgen',/'kein/eintrag');="">= 1 && (Auto_M === true || Auto_M === 1)) { setState('javascript.0.Status.Sonstige.Müll_morgen', termin.join(', ')); } } catch (fehler_try) { log('Fehler beim Kalenderevents einlesen ' + fehler_try, 'error'); } } ! // bei Aktualisierung on ({id: idTabelle, change: 'any'}, function(data) { pruefeKalender(); }); ! on({id: "javascript.0.Status.System.Auto_Müllabfuhr", change: "ne"}, function() { // Automatik geändert auf aus -> Folge: Anzeige verschwindet var Auto_M = getState('javascript.0.Status.System.Auto_Müllabfuhr').val; if (Auto_M === false || Auto_M === 0) { setState('javascript.0.Status.Sonstige.Müll_morgen', 'kein Eintrag'); } }); ! // um 16:00 Uhr schedule("0 16 * * *", pruefeKalender); ! schedule("0 20 * * *", function () { var Auto_M = getState('javascript.0.Status.System.Auto_Müllabfuhr').val; var Muell = getState('javascript.0.Status.Sonstige.Müll_morgen').val;
-
ich hab hier ein müllscript - dazu gibt es auch irgndwo einen thread
das läuft bei mir sehr stabil - am anfang des scripts kann man definieren, was man haben will - ist vom user pix
-
OK, Danke.
Versuche ich mal... -
scheint eh ein clon von deinem script zu sein - bei meinem ist das schedule momentan auf : alle 8 stunden überprüfen eingestellt - zum test kannst du ja mal alle paar minuten einstellen (*/2 * * * *)
-
Das kannst du auch direkt als Event im ical nutzen. Mache ich auch.
-
@tempestas
hab das script und den adapter vor über einem jahr eingebunden und seit dem nichts mehr geändert - super tipp - danke - wusste gar nicht, dass es diese events gibt -
Hallo
Habe das mit den Events versucht. Da ich zwei Kalender (Kalender und Abfallkalender) eingebunden habe und auf diesen auch Events suche, geht es irgend wie nicht.Suche auf Outlook "Frei" und "Ferien", wird dieses ab und zu gefunden und auf true gestellt.
Suche ich auf Abfall "Hauskehricht / Kleinsperrgut brennbar", wird dieses ab und zu auf true gestellt aber dafür das erste wieder auf false.Es werden auch nicht alle Events im Vis angezeigt, einmal die aus dem Outlook-Kalender und einmal die aus Abfall-Kalender.
ical-Kalender
18739120-5063-4a13-87be-f93f6fbcac8c-image.pngEreignisse
a8b0fc6a-f56e-4a1f-83a9-88e0dc47f91f-image.pngHier der Debug-Log:
ical-Log.txtHat mir jemand bitte einen Tipp.
-
Ich mache das auch ganz simpel über die Events:
on({id: "ical.0.events.0.now.ferien", val: true}, function() { setState("hm-rega.0.7475", false); sendTo("pushover.0", { message: 'beginnen und Schule ist aus', // mandatory - your text message title: 'Ferien', // optional - your message's title, otherwise your app's name is used priority: -1, }); }); on({id: "ical.0.events.0.now.ferien", val: false}, function() { setState("hm-rega.0.7475", true); sendTo("pushover.0", { message: 'enden und Schule geht weiter', // mandatory - your text message title: 'Ferien', // optional - your message's title, otherwise your app's name is used priority: -1, }); });
Funktioniert absolut zuverlässig. "hm-rega.0.7475" ist dabei die Variable "Schulzeit".
Grüße
Brati