Dank der Hilfe von Pix (dafür nochmal tausend Dank) läuft es jetzt auch mit Müllkalender.
// Test mit Variable;
// Besser ist es, gleich den Bewegungsmelder hier abzufragen.
var idSayVar = 'javascript.0.Sayit.Trigger';
// Definition
var idSayIt = "sayit.0.tts.text";
var lautstaerke = 100;
// Quellen
var idWetter = "hm-rega.0.23460";
var idTemperatursensor = "hm-rega.0.23642";
var idGeburtstage = "javascript.0.Kalenderereignisse.heute";
var idMuell = "javascript.0.Muellereignisse.heute";
function ermitteleAnsagedatum () {
//Wochentag ermitteln
var d = new Date ();
var w = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
var wochentag = w[d.getDay()];
//Tagesdatum ermitteln
var tag = d.getDate();
//Monat ermitteln
var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
var monat = month[d.getMonth()];
//Jahr ermitteln
var jahr = d.getFullYear();
//Stunde ermitteln
var stunde = d.getHours();
//Minute ermitteln
var minute = d.getMinutes();
return { // zurückgeben
'Jahr' : jahr,
'Monat' : monat,
'Tag' : tag,
'Wochentag' : wochentag,
'Stunde' : stunde,
'Minute' : minute
};
}
function ermitteleWetter () { // Wetterbedingungen
var wetterdaten = getState(idWetter).val;
log('Wetter: ' + wetterdaten);
return(wetterdaten);
}
function ermitteleAnsageTemperatur () {
// Die Außentemperatur ist xx. Das Wetter heute ist xx
// Einfache Temperaturansage mit SayIt.
// Variante 1 mittels splitten der Temperatur, damit die Ansage nicht
// "Es sind 18 Punkt 2 Grad " sagt.
var temperatursensor = getState(idTemperatursensor).val;
var temp_string = temperatursensor.toString();
log('Temp ' + temp_string);
var temp_array = [];
temp_array = temp_string.split(".");
// Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist.
// Es wird dann nur "18" gelesen.
if (!temp_array[1]) {
temp_array[1] = "0";
log("Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.");
}
return{
'Ganzzahl' : temp_array[0],
'Nachkommazahl' : temp_array[1]
};
}
function ermitteleGeburtstage () {
var geburtstage = getState(idGeburtstage).val;
log(geburtstage);
return (geburtstage);
}
function ermitteleMuell () {
var muell = getState(idMuell).val;
log(muell);
return (muell);
}
// ###################################
// Trigger für Ansage
// ###################################
on(idSayVar, function (data) {
var ansagetext = "Guten Morgen, heute ist " + ermitteleAnsagedatum().Wochentag + " der " + ermitteleAnsagedatum().Tag + "te " + ermitteleAnsagedatum().Monat + ' ' + ermitteleAnsagedatum().Jahr
+ ". Es ist" + ermitteleAnsagedatum().Stunde + " Uhr und " + ermitteleAnsagedatum().Minute + " Minuten."
+ " Die Aussentemperatur beträgt " + ermitteleAnsageTemperatur().Ganzzahl + "," + ermitteleAnsageTemperatur().Nachkommazahl + " Grad."
+ " Wetter Bedingungen," + ermitteleWetter() +" .";
// ####################################################
// Wenn Geburtstag dann mit ansagen
// ####################################################
var geburtstage2 = getState(idGeburtstage).val;
if (geburtstage2.length > 2) { // wenn der Inhalt des Objektes "idGeburtstage" weniger als 2 Zeichen lang ist (also praktisch leer), dann ...
ansagetext = ansagetext + "Nicht vergessen, " + ermitteleGeburtstage() +" .";
}
// ####################################################
// Wenn Müll dann mit ansagen
// ####################################################
var muell2 = getState(idMuell).val;
if (muell2.length > 2) { // wenn der Inhalt des Objektes "idMuell" weniger als 2 Zeichen lang ist (also praktisch leer), dann ...
ansagetext = ansagetext + "Achtung, heute ist Abholung " + ermitteleMuell() +" .";
}
log('Trigger: ' + data.state.val);
if (data.state.val === true) {
setState(idSayIt, lautstaerke + ";" + ansagetext); // hier also ("40;Guten Morgen ...")
}
});
/* Kalenderevent auswerten ----> nur Geburtstage
sucht im iCal Adapter nach events (heute)
auf Anfrage von Skorpil im Forum erstellt.
http://forum.iobroker.de/viewtopic.php?f=21&t=2347&p=20627&sid=524f9dda2f313d3cbb183941df61fc38#p20627
27.02.2016 erstellt von Pix
02.03.2016 Anpassung und Aufbereitung für Sprachausgabe
21.07.2016 Umbau auf Müll Kalender
*/
//Datum als String ermitteln;
function ermitteleDatum() {
var d= new Date();
//Tagesdatum ermitteln
var day = new Array("00","01","02","03","04","05","06","07","06","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");
var t = day[d.getDate().toString()];
//Monat ermitteln
var month = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
var m = month[d.getMonth().toString()];
//Jahr ermitteln
var j = d.getFullYear().toString();
var datum= t+"."+m+"."+j+" ";
//log("datum: " + datum);
return (datum);
}
createState('Kalenderereignisse.heute', '', {
name: 'Events von heute',
type: 'string'
});
var idListe = 'Kalenderereignisse.heute';
function pruefeKalender() {
var inhalt = getState('ical.2.data.table').val;
var heute = ermitteleDatum();
try{
var ereignisse = JSON.stringify(inhalt, null, 2); // Ausgabe als String
log(ereignisse);
var ereignisheute = '', // Liste (kommasepariert)
ereignisheute_zeilen = ''; // Liste (mit Zeilenumbruch, zB für Anzeige in VIS)
for(var i = 0; i <inhalt.length; i++) { // alle Events durchgehen
if ( (inhalt[i].date.indexOf(heute) != -1) || (inhalt[i].date.indexOf('Heute') != -1) ) { // Strings Datum oder relatives Datum (nicht nicht) gefunden
var ereignis = inhalt[i].event;
ereignis = ereignis.replace(',',''); // Komma im Namen ersetzen
var komma = (i>0) ? ', ' : '';
ereignisheute = ereignisheute + komma + ereignis;
}
}
// Aufbereitung für die Ansage (falls vorhanden, wird letztes Komma durch und ersetzt)
var lastkomma = ereignisheute.lastIndexOf(','); // letztes Komma in der Reihe
if (lastkomma != -1) {
var vorn = ereignisheute.slice(0,lastkomma-1);
var hinten = ereignisheute.slice(lastkomma+1, ereignisheute.length);
ereignisheute = vorn + ' und' + hinten;
}
// Ende Aufbereitung für die Ansage
setState(idListe, ereignisheute);
log('Geburtstage: ' + ereignisheute);
} catch (fehler_try) {
log('Fehler beim Kalenderevent einlesen ' + fehler_try);
}
}
// neuer Teil für Müllkalender
createState('Muellereignisse.heute', '', {
name: 'Müll-Events von heute',
type: 'string'
});
var idListe2 = "Muellereignisse.heute";
function pruefeKalender2() {
var inhalt2 = getState('ical.1.data.table').val;
var heute2 = ermitteleDatum();
try{
var ereignisse2 = JSON.stringify(inhalt2, null, 2); // Ausgabe als String
log(ereignisse2);
var ereignisheute2 = '', // Liste (kommasepariert)
ereignisheute2_zeilen = ''; // Liste (mit Zeilenumbruch, zB für Anzeige in VIS)
for(var i = 0; i <inhalt2.length; i++) { // alle Events durchgehen
if ( (inhalt2[i].date.indexOf(heute2) != -1) || (inhalt2[i].date.indexOf('Heute') != -1) ) { // Strings Datum oder relatives Datum (nicht nicht) gefunden
var ereignis2 = inhalt2[i].event;
ereignis2 = ereignis2.replace(',',''); // Komma im Namen ersetzen
var komma = (i>0) ? ', ' : '';
ereignisheute2 = ereignisheute2 + komma + ereignis2;
}
}
// Aufbereitung für die Ansage (falls vorhanden, wird letztes Komma durch und ersetzt)
var lastkomma = ereignisheute2.lastIndexOf(','); // letztes Komma in der Reihe
if (lastkomma != -1) {
var vorn = ereignisheute2.slice(0,lastkomma-1);
var hinten = ereignisheute2.slice(lastkomma+1, ereignisheute2.length);
ereignisheute2 = vorn + ' und' + hinten;
}
// Ende Aufbereitung für die Ansage
setState(idListe2, ereignisheute2);
log('Müll: ' + ereignisheute2);
} catch (fehler_try) {
log('Fehler beim Müll-Kalenderevent einlesen ' + fehler_try);
}
}
// bei Aktualisierung des Kalenders
on ({id:'ical.2.events.Geburtstag', change: 'any'}, function(data) {
pruefeKalender();
});
on ({id:/\ical.1.events.$/, change: 'any'}, function(data) { // jedes Objekt im ical.1
pruefeKalender2();
});
//bei Skriptstart
schedule("5 0 * * *", function () {
log("===>Wird einmal am Tag ausgelöst");
pruefeKalender();
pruefeKalender2();
});
Johnny