NEWS
ICal-Termine für morgen auswerten
-
Ich habe den öffentlichen Entsorgungskalender unseres Entsorgers im iCal-Adapter eingebunden, funktioniert auch prima. Nun möchte ich jedoch bereits am Tag vor der Entsorgung eine Variable in der CCU je Entsorgungstyp (Restmüll, Papier, Gelber Sack) auf true setzen, um darüber eine Ansage auf meinem MP3-Modul zu steuern, die an die rechtzeitige Bereitstellung des Mülls zur Entsorgung erinnert.
Mit manuell in der CCU eingepflegten Terminen funktioniert die rechtzeitige Erinnerung prima. Da der Entsorger jedoch endlich einen öffentlichen iCal bereitstellt möchte ich natürlich die manuelle Terminpflege einsparen.
Habt Ihr evtl. einen Lösungsansatz für mich?
Danke!
-
Anbei Script von pix.
und dann angepasst auf mich
! ```
`/* 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 = 'Tonne'; // Suchbegriff
var stichtag = 1; // 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;if (Muell !== "kein Eintrag" && (Auto_M === true || Auto_M === 1)) { vText = "Müllabfuhr:\nMorgen muss die **" + Muell + "** rausgestellt weren."; sendTo('telegram', { text: vText, parse_mode: 'HTML' }); }
});
! //bei Skriptstart
pruefeKalender();</kalender.length;>`
! mfg[/i][/i][/i][/i] -
Vielen Dank! Sehe ich mir am Wochenende mal an und gebe ein Feedback.
Gesendet von meinem GT-I9505 mit Tapatalk
-
Vielen Dank für den Hinweis auf das Script. Funktioniert prima!
Gesendet von meinem GT-I9505 mit Tapatalk
-
Hallo, da ich vom Scripting keine Ahnung habe, könnte einer von euch so nett sein und dieses Script ändern für mich?
Bei mir soll es im Kalender ical.4 nach dem Wort "Urlaub" suchen am Tag "heute".
Da ich Schichtarbeiter bin, wäre das für die Heizung und Rolladensteuerung cool, da die Variable erst prüft ob ich frei habe.
Vielen Dank schon mal.
-
Bei mir soll es im Kalender ical.4 nach dem Wort "Urlaub" suchen am Tag "heute" `
Das sollte durch Anpassungen im ersten Block gehen:// Variablen var suchstring = 'Urlaub'; // Suchbegriff var stichtag = 0; // 0=heute; 1=morgen; 2=übermorgen; 3=in 3 Tagen var idTabelle = 'ical.4.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
Gruß
Pix
-
@pix:Bei mir soll es im Kalender ical.4 nach dem Wort "Urlaub" suchen am Tag "heute" `
Das sollte durch Anpassungen im ersten Block gehen:// Variablen var suchstring = 'Urlaub'; // Suchbegriff var stichtag = 0; // 0=heute; 1=morgen; 2=übermorgen; 3=in 3 Tagen var idTabelle = 'ical.4.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
Gruß
Pix `
und wie ändert er damit die Variable in der CCU ?
Ich habe eine Variable die Schaltet zwischen Schicht und Urlaub.
Die Variable heisst "Schicht"
Danke dir.
-
du musst aus den HM adaptern die passende Variable raussuchen (sowas wie "hm-rega.12345") und dann deren Status anpassen via Skript. Wäre zumindest mein erster Gedanke
-
Hallo zusammen,
kann mir mal bitte jemand helfen, ich suche mir einen Wolf für "relative Datumsangabe in iCal-Adapter einschalten"
Vielen Dank schon mal
-
Hallo,
ich glaube, damit ist das gemeint:````
heute, morgen, übermorgen, ...Gruß Pix