Moin SimonS,
klar. Ich habe 2 Routinen einmal Geburtstage meiner Kontakte und Termine für die nächsten 3 Tage.
Für Geburtstage benutze ich:
<?php
ICCR_UpdateCalendar(35220); /* 35220 Instanz vom Geburtstagskalender */
$calendar = ICCR_GetCachedCalendar(35220);
$calendar_array = json_decode($calendar, true);
$heute = mktime(0, 0, 0, date("m") , date("d"), date("Y"));
$morgen = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$uebermorgen = mktime(0, 0, 0, date("m") , date("d")+2, date("Y"));
$ende = $uebermorgen + 86400;
$diesesjahr = date("Y");
$text = "";
foreach ($calendar_array as $entry) {
// var_dump($entry);
$pos1 = strpos($entry["Name"], "(");
$pos2 = strpos($entry["Name"], ")");
$name = substr($entry["Name"], 5, $pos1 - 5);
$geburtsjahr = substr($entry["Name"], $pos1 + 1, 4);
$jahre = $diesesjahr - $geburtsjahr;
if (($entry["From"] >= $heute) && ($entry["From"] < $morgen)){
$text .= "Heute ";
}
else if (($entry["From"] >= $morgen) && ($entry["From"] < $uebermorgen)){
$text .= "Morgen ";
}
else if (($entry["From"] >= $uebermorgen) && ($entry["From"] < $ende)){
$text .= "Übermorgen ";
}
else if ($entry["From"] > $ende){
break;
}
if (strlen($text) > 0){
$text .= "wird ".$name." ".$jahre." Jahre alt".PHP_EOL;
}
}
SetValue(35479, $text); /* 35479 Instanz einer Stringvariablen die den Text für alle Geburtstage der nächsten 3 Tage enthält z.B. für Alexa */
?>
Für Termine benutze ich:
<?php
ICCR_UpdateCalendar(14290); /* 14290 Instanz vom Terminkalender */
$calendar = ICCR_GetCachedCalendar(14290);
$calendar_array = json_decode($calendar, true);
//var_dump($calendar_array).PHP_EOL.PHP_EOL;
$heute = mktime(0, 0, 0, date("m") , date("d") + 0, date("Y"));
$heute_flag = true;
$morgen = mktime(0, 0, 0, date("m") , date("d") + 1, date("Y"));
$morgen_flag = true;
$uebermorgen = mktime(0, 0, 0, date("m") , date("d") + 2, date("Y"));
$uebermorgen_flag = true;
$ende = $uebermorgen + 86400;
$text = "";
SetValue(10677, false); /* Bool Variable die IPS sagt ob ich Urlaub habe wird gesetzt wenn ein Termin Urlab heißt */
foreach ($calendar_array as $entry) {
if ($entry["Status"] == 'CANCELLED') continue;
if ($entry["allDay"] == false){
$stunde = date('G', $entry["From"]);
$minute = date('i', $entry["From"]);
if ($minute < 10) $minute = "";
$zeit = $stunde." Uhr ".$minute;
}
else{
$entry["From"] = mktime(0, 0, 0, date("m", $entry["From"]) , date("d", $entry["From"]), date("Y", $entry["From"]));
$entry["To"] = mktime(0, 0, 0, date("m", $entry["To"]) , date("d", $entry["To"]), date("Y", $entry["To"]));
}
if (($entry["From"] >= $heute) && ($entry["To"] <= $morgen)){
if (($entry["allDay"]) && (date('G', time()) < 13)){
if ($heute_flag){
$text .= "Heute ".PHP_EOL;
$heute_flag = false;
}
$text .= $entry["Name"]." ".PHP_EOL;
}
else if (($entry["allDay"] == false) && (time() < $entry["To"])){
if ($heute_flag){
$text .= "Heute ".PHP_EOL;
$heute_flag = false;
}
$text .= "um ".$zeit;
$text .= $entry["Name"]." ".PHP_EOL;
}
if (strpos($entry["Name"], "Urlaub") >= 0) SetValue(10677, true);
}
else if (($entry["From"] <= $heute) && ($entry["To"] >= $morgen)){
if ($heute_flag){
$text .= "Heute ".PHP_EOL;
$heute_flag = false;
}
$text .= $entry["Name"]." ".PHP_EOL;
}
if ($entry["From"] > $ende){
break;
}
}
foreach ($calendar_array as $entry) {
if ($entry["Status"] == 'CANCELLED') continue;
if ($entry["allDay"] == false){
$stunde = date('G', $entry["From"]);
$minute = date('i', $entry["From"]);
if ($minute < 10) $minute = "";
$zeit = $stunde." Uhr ".$minute;
}
else{
$entry["From"] = mktime(0, 0, 0, date("m", $entry["From"]) , date("d", $entry["From"]), date("Y", $entry["From"]));
$entry["To"] = mktime(0, 0, 0, date("m", $entry["To"]) , date("d", $entry["To"]), date("Y", $entry["To"]));
}
if (($entry["From"] >= $morgen) && ($entry["To"] <= $uebermorgen)){
if ($entry["allDay"]){
if ($morgen_flag){
$text .= "Morgen ".PHP_EOL;
$morgen_flag = false;
}
$text .= $entry["Name"]." ".PHP_EOL;
}
else if (($entry["allDay"] == false) && (time() < $entry["To"])){
if ($morgen_flag){
$text .= "Morgen ".PHP_EOL;
$morgen_flag = false;
}
$text .= "um ".$zeit;
$text .= $entry["Name"]." ".PHP_EOL;
}
}
else if (($entry["From"] <= $morgen) && ($entry["To"] >= $uebermorgen)){
if ($morgen_flag){
$text .= "Morgen ".PHP_EOL;
$morgen_flag = false;
}
$text .= $entry["Name"]." ".PHP_EOL;
}
if ($entry["From"] > $ende){
break;
}
}
foreach ($calendar_array as $entry) {
if ($entry["Status"] == 'CANCELLED') continue;
if ($entry["allDay"] == false){
$stunde = date('G', $entry["From"]);
$minute = date('i', $entry["From"]);
if ($minute < 10) $minute = "";
$zeit = $stunde." Uhr ".$minute;
}
else{
$entry["From"] = mktime(0, 0, 0, date("m", $entry["From"]) , date("d", $entry["From"]), date("Y", $entry["From"]));
$entry["To"] = mktime(0, 0, 0, date("m", $entry["To"]) , date("d", $entry["To"]), date("Y", $entry["To"]));
}
if (($entry["From"] >= $uebermorgen) && ($entry["To"] <= $ende)){
if ($entry["allDay"]){
if ($uebermorgen_flag){
$text .= "Übermorgen ".PHP_EOL;
$uebermorgen_flag = false;
}
$text .= $entry["Name"]." ".PHP_EOL;
}
else if (($entry["allDay"] == false) && (time() < $entry["To"])){
if ($uebermorgen_flag){
$text .= "Übermorgen ".PHP_EOL;
$uebermorgen_flag = false;
}
$text .= "um ".$zeit;
$text .= $entry["Name"]." ".PHP_EOL;
}
}
else if (($entry["From"] <= $uebermorgen) && ($entry["To"] >= $ende)){
if ($uebermorgen_flag){
$text .= "Übermorgen ".PHP_EOL;
$uebermorgen_flag = false;
}
$text .= $entry["Name"]." ".PHP_EOL;
}
if ($entry["From"] > $ende){
break;
}
}
//if (strlen($text) < 2) $text = "Ralf Du hast Heute zum Glück keine Termine";
//print PHP_EOL.PHP_EOL.PHP_EOL.$text;
SetValue(27911, $text); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
?>
Leider musste ich praktisch die selbe Routine für jeden Tag erneut benutzen da ich längere Termine (> 1 Tag) sonst nicht sauber trennen konnte. Bevor die Termine ausgegeben werden sollen, z.B wenn ich das Haus verlasse wird diese Routine aufgerufen falls es Änderungen gab.
Bei ganztägigen Terminen erinnere ich nur bis 12Uhr denn spätestens ab da hat man verschlafen:-) Bei Terminen mit Startzeit erinnere ich nur bis dahin.
Die Strings kann ich jetzt überall benutzen wie z.B. Enigma2-Anzeige oder Alexa-Ausgabe.
Viel Spaß Ralf