[Modul] iCal Calender in IP Symcon lesen und verarbeiten

Hallo Ralf,

Dank deines Scriptes kann ich jetzt auch meine Termine im WebFront anzeigen lassen.
Allerdings finde ich die Formatierung etwas unglücklich für meine Verwendung:

Ich hätte gerne, dass Heute/Morgen/Übermorgen unterstrichen sind und das bei einem Termin, der nicht zur vollen Stunde beginnt (siehe Beispiel Termin um 18:30 Uhr) noch ein Leerzeichen zwischen der Minute und dem eigentlichen „Termintext“ komm und die „30 Minuten“ direkt nach 18 Uhr kommen.
Also statt jetzt: 18 Uhr 30TestFreitag
soll kommen: 18:30 Uhr Test Freitag
Da ich mir die Termine nicht mit Alexa vorlesen lasse, kann ich die dortige Aussage bei 00 ignorieren :wink:
Ausgabe erfolgt über das TextBox-Profil, da beim HTMLBox-Profil die Termine hintereinanderweg geschrieben werden:

Leider kenne ich mich mit PHP gar nicht aus, sodass ich überhaupt keine Ahnung habe wo ich ansetzen muss.
Wäre über Hilfe dankbar!

Hallo sunny,

ich habe grade etwas Stress, aber schau dir das mal an:

Ich habe aber 3 verschiedene String Variablen für Heute/Morgen/Übermorgen daraus gemacht.
Und eine führende 0 dazu gemacht wenn dir Uhrzeit kleiner als 10 ist, sowie dein gewünschtes Leerzeichen.
Formatieren mit Fett und Unterstrichen geht glaube ich nur mit HTML.
Mach ich dann die nächsten Tage

<?php

//***********************************************************************************************************************
// Einstellungen

$KalenderId = 26174;
$UrlaubId = 41798;

$TerminId_Heute = 49468;
$TerminId_Morgen = 48381;
$TerminId_Uebermorgen = 27701;


//************************************************************************************************************************
// Code

ICCR_UpdateCalendar($KalenderId); 
$calendar = ICCR_GetCachedCalendar($KalenderId);
$calendar_array = json_decode($calendar, true);

SetValue($UrlaubId, false); /* Bool Variable die IPS sagt ob ich Urlaub habe wird gesetzt wenn ein Termin Urlaub heißt */

//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;

$text1 = "";
$text2 = "";
$text3 = "";


// Heute
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 = " ";
        // wenn Stunde <10 (2stellig) dann Leerzeichen dazu
        if ($stunde <= 9)
        {
            $zeit = "0".$stunde." Uhr ".$minute." ";
        }
        else
        {
            $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){
                // $text1 .= "Heute   ".PHP_EOL;
                $heute_flag = false;
            }
            $text1 .= $entry["Name"]."    ".PHP_EOL;
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"])){
            if ($heute_flag){
                // $text1 .= "Heute   ".PHP_EOL;
                $heute_flag = false;
            }
            //$text1 .= "um ".$zeit;
            $text1 .= $zeit;

            $text1 .= $entry["Name"]."    ".PHP_EOL;
        }
        if (strpos($entry["Name"], "Urlaub") >= 0) SetValue($UrlaubId, true);
    }
    else if (($entry["From"] <= $heute) && ($entry["To"] >= $morgen)){
        if ($heute_flag){
            // $text1 .= "Heute   ".PHP_EOL;
            $heute_flag = false;
        }
        $text1 .= $entry["Name"]."    ".PHP_EOL;
    }
    if ($entry["From"] > $ende){
        break;
    }
}

// Morgen
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 = " ";
        // wenn Stunde <10 (2stellig) dann Leerzeichen dazu
        if ($stunde <= 9)
        {
            $zeit = "0".$stunde." Uhr ".$minute." ";
        }
        else
        {
            $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){
                // $text2 .= "Morgen   ".PHP_EOL;
                $morgen_flag = false;
            }
            $text2 .= $entry["Name"]."    ".PHP_EOL;
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"])){
            if ($morgen_flag){
                // $text2 .= "Morgen   ".PHP_EOL;
                $morgen_flag = false;
            }
            // $text2 .= "um ".$zeit;
            $text2 .= $zeit;

            $text2 .= $entry["Name"]."    ".PHP_EOL;
        }
    }
    else if (($entry["From"] <= $morgen) && ($entry["To"] >= $uebermorgen)){
        if ($morgen_flag){
            // $text2 .= "Morgen   ".PHP_EOL;
            $morgen_flag = false;
        }
        $text2 .= $entry["Name"]."    ".PHP_EOL;
    }
    if ($entry["From"] > $ende){
        break;
    }
}

// Übermorgen
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 = " ";
        // wenn Stunde <10 (2stellig) dann Leerzeichen dazu
        if ($stunde <= 9)
        {
            $zeit = "0".$stunde." Uhr ".$minute." ";
        }
        else
        {
            $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){
                // $text3 .= "Übermorgen   ".PHP_EOL;
                $uebermorgen_flag = false;
            }
            $text3 .= $entry["Name"]."    ".PHP_EOL;
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"])){
            if ($uebermorgen_flag){
                // $text3 .= "Übermorgen   ".PHP_EOL;
                $uebermorgen_flag = false;
            }
            $text3 .= "um ".$zeit;
            $text3 .= $entry["Name"]."    ".PHP_EOL;
        }
    }
    else if (($entry["From"] <= $uebermorgen) && ($entry["To"] >= $ende)){
        if ($uebermorgen_flag){
            // $text3 .= "Übermorgen   ".PHP_EOL;
            $uebermorgen_flag = false;
        }
        $text3 .= $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;

echo $text1;

SetValue($TerminId_Heute, $text1); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_Morgen, $text2); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_Uebermorgen, $text3); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */


Du musst noch das echo in der 4 letzten Zeile wegkommentieren mit // davorstellen. Sowie die 3 Variablen anlegen.

perfekt - das konnte ich umsetzen :smiley:

Was mich jetzt noch stört ist, dass 15 Uhr 00 steht anstatt 15:00 Uhr (oder 15.00 Uhr)
welche Einträge muss ich dafür ändern?

Grüße
Simon

Hi,
in jeder Schleife steht am Anfang:

        if ($minute < 10) $minute = "";
        $zeit = $stunde." Uhr ".$minute;

das mal ändern in:

        $zeit = $stunde.':'.$minute." Uhr ";

bzw. im cbeham Script statt:

$zeit = $stunde." Uhr ".$minute." ";

ändern in:

$zeit = $stunde.":".$minute." Uhr ";

Wenn Du Termine hast bin Minuten < 9 musst Du so vorgehen wie es bei den Stunden gemacht wurde.

Ralf

Wenn ich das im Script richtig sehe, dann wird $minute = date(i) genutzt und das führt zu „Minuten *(00-59)“, sollte also immer zweistellig sein.

und nochmals vielen Dank! Es hat geklappt und die Termine werden nun sauber in der Textbox ausgegeben:

Hi,

stimmt ist lange her bei mir. Ich scheine mir dabei was gedacht zu haben:-)

Wenn man statt date(‚G‘) date(‚H‘) benutzt kann man auch auf den Vergleich Stunden <10 bzw. <=9 verzichten.

Ralf

Ich habe eine neue Beta (2.1 #70) hochgeladen, die nun auch die Übernahme von Kalenderdateien unterstützt.

Der Umweg über einen Webhook ist damit nun nicht mehr notwendig.

Burkhard

Moin, ich habe aktuell das Problem, dass ich die 4 Variablen aus meinem iCloud Kalender definiert habe und dieser auch nach dem Lesen in der Instanz auf „aktiv“ geschaltet wird.

Im Anschluss kann ich „Termine prüfen“ wählen und die korrepondierende Variable „Papiertonne“ wird auch An geschaltet wenn es entsprechend im Vorlauf ist.

Allerdings nur wenn ich das Manuell auslöse. Automatisch passiert hier nichts, was genau könnte hier das Problem sein? Ich würde ja erwarten dass die Variable 12 Std. (720min) vorher automatisch An geschaltet wird.

VG,

Jan

Der Kalender wird entsprechend des eingestellten Aktualisierungsintervalls gelesen und ausgewertet. Den Parameter findest du als Expertenparameter. Der Default ist 15.

Steht der vielleicht bei dir auf 0?

Hi @bumaas den Parameter habe ich gesehen und der steht in der Tat auf dem Standard 15min.
Es ist irgendwie eigenartig, da ich schon die Konfiguration mit einem bekannten abgeglichen habe, bei dem gehts ja auch. Dachte vlt sind irgendwelche Bugs oder Probleme in dem Umfeld bekannt :frowning:

Ok, dann sollte man im Debug alle 15 Minuten sehen, das etwas und was passiert.
Vielleicht magst du auch einmal die Beta ausprobieren?

Das ging nun flott, im Debug nochmal auf die Syntax der Kalender URL geschaut. Am Ende der URL hatte ich noch ein Leerzeichen drin. Hatte ich erstmal keinen Fokus drauf, da das Abrufen vom Kalender als auch das Prüfen der Termine manuell geklappt hat. Aber nun siehe da auch automatisch :slight_smile:
Bin übrigens auch in der Betaversion unterwegs.

Seltsam, dass es da Unterschiede gibt. Das schaue ich mir noch mal an.
Aber schön, dass es jetzt geht.

@HarmonyFan
Ich habe jetzt nun eine Frage, das Skript funktioniert übrigens echt wunderbar!
Könnte ich in diesem Skript auch den ORT eines Termins auslesen?

z.B.: Werkstatt Polo in Eferding

<?php

//***********************************************************************************************************************
// Einstellungen

$KalenderId = 26174;
$UrlaubId = 41798;

// für Webfront
$TerminId_Heute = 49468;
$TerminId_Morgen = 48381;
$TerminId_Uebermorgen = 27701;

//für Alexa
$TerminId_HeuteA = 51696;
$TerminId_MorgenA = 16021;
$TerminId_UebermorgenA = 35400;


//************************************************************************************************************************
// Code

ICCR_UpdateCalendar($KalenderId); 
$calendar = ICCR_GetCachedCalendar($KalenderId);
$calendar_array = json_decode($calendar, true);

SetValue($UrlaubId, false); /* Bool Variable die IPS sagt ob ich Urlaub habe wird gesetzt wenn ein Termin Urlaub heißt */

//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;

// für Webfront
$text1 = "";
$text2 = "";
$text3 = "";

// für Alexa ohne HTML Code
$text1a = "";
$text2a = "";
$text3a = "";

// **************************************************************************************************************************
// Heute
foreach ($calendar_array as $entry) 
{
    if ($entry["Status"] == 'CANCELLED') continue;
    if ($entry["allDay"] == false)
    {
        $stunde = date('H', $entry["From"]);
        $minute = date('i', $entry["From"]);
        $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('H', time()) < 13))
        {
            if ($heute_flag){
                $text1a .= "Eure Termine Heute: ".PHP_EOL;
                $heute_flag = false;
            }
            $text1 .= "<b>".$entry["Name"]."</b>".$entry["Ort"]."<br>";
        }
        //else if (($entry["allDay"] == false) && (time() < $entry["To"]))
        else if ($entry["allDay"] == false)
        {
            if ($heute_flag)
            {
                $text1a .= "Eure Termine Heute: ".PHP_EOL;
                $heute_flag = false;
            }
            $text1a .= "um ".$zeit;
            $text1 .= $zeit;
            $text1a .= $entry["Name"]." ".PHP_EOL;
            $text1 .= "<b>".$entry["Name"]."</b><br>";
        }
        if (strpos($entry["Name"], "Urlaub") >= 0) SetValue($UrlaubId, true);
    }
    else if (($entry["From"] <= $heute) && ($entry["To"] >= $morgen))
    {
        if ($heute_flag)
        {
            $text1a .= "Eure Termine Heute: ".PHP_EOL;
            $heute_flag = false;
        }
        $text1a .= $entry["Name"]." ".PHP_EOL;
        $text1 .= "<b>".$entry["Name"]."</b><br>";
    }
    if ($entry["From"] > $ende)
    {
        break;
    }
}


// *************************************************************************************************************************
// Morgen

foreach ($calendar_array as $entry) 
{

    if ($entry["Status"] == 'CANCELLED') continue;
    if ($entry["allDay"] == false)
    {
        $stunde = date('H', $entry["From"]);
        $minute = date('i', $entry["From"]);
        $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)
            {
                $text2a .= "Morgen ".PHP_EOL;
                $morgen_flag = false;
            }
            $text2a .= $entry["Name"]." ".PHP_EOL;
            $text2 .= "<b>".$entry["Name"]."</b><br>";
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"]))
        {
            if ($morgen_flag)
            {
                $text2a .= "Morgen ".PHP_EOL;
                $morgen_flag = false;
            }
            $text2a .= "um ".$zeit;
            $text2 .= $zeit;
            $text2a .= $entry["Name"]." ".PHP_EOL;
            $text2 .= "<b>".$entry["Name"]."</b><br>";
        }
    }
    else if (($entry["From"] <= $morgen) && ($entry["To"] >= $uebermorgen))
        {
        if ($morgen_flag){
            $text2a .= "Morgen ".PHP_EOL;
            $morgen_flag = false;
        }
       $text2a .= $entry["Name"]." ".PHP_EOL;
       $text2 .= "<b>".$entry["Name"]."</b><br>";
    }
    if ($entry["From"] > $ende)
    {
        break;
    }
  
}


// ********************************************************************************************************************************
// Übermorgen
foreach ($calendar_array as $entry) 
{
    if ($entry["Status"] == 'CANCELLED') continue;
    if ($entry["allDay"] == false)
    {
        $stunde = date('H', $entry["From"]);
        $minute = date('i', $entry["From"]);
        $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)
            {
                $text3a .= "Übermorgen ".PHP_EOL;
                $uebermorgen_flag = false;
            }
            $text3a .= $entry["Name"]." ".PHP_EOL;
            $text3 .= "<b>".$entry["Name"]."</b><br>";
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"]))
        {
            if ($uebermorgen_flag)
            {                            
                $text3a .= "Übermorgen ".PHP_EOL;
                $uebermorgen_flag = false;
            }
            $text3a .= "um ".$zeit;
            $text3 .= $zeit;
            $text3a .= $entry["Name"]." ".PHP_EOL;
            $text3 .= "<b>".$entry["Name"]."</b><br>";
        }
    }
    else if (($entry["From"] <= $uebermorgen) && ($entry["To"] >= $ende))
    {
        if ($uebermorgen_flag){
            $text3a .= "Übermorgen ".PHP_EOL;
            $uebermorgen_flag = false;
        }
        $text3a .= $entry["Name"]." ".PHP_EOL;
        $text3 .= "<b>".$entry["Name"]."</b><br>";
    }
    if ($entry["From"] > $ende)
    {
        break;
    }
}

if (strlen($text1) < 2) 
{
    $text1 = "<b>Heute gibt es zum Glück keine wichtigen Termine</b>";
    $text1a = "<b>Heute gibt es zum Glück keine wichtigen Termine</b>";
}
//print PHP_EOL.PHP_EOL.PHP_EOL.$text;

//echo $text1;

// für Webfront
SetValue($TerminId_Heute, $text1); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_Morgen, $text2); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_Uebermorgen, $text3); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
// für Alexa
SetValue($TerminId_HeuteA, $text1a); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_MorgenA, $text2a); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_UebermorgenA, $text3a); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */



Ich geb mir mal selber eine Antwort. Es ist ein mehrdimensionales Array mit den Einträgen:

[0] => UID
    [1] => Name
    [2] => Status
    [3] => Location
    [4] => Description
    [5] => From
    [6] => To
    [7] => FromS
    [8] => ToS
    [9] => allDay

ausgelesen mittels:

array_walk_recursive($calendar_array, function($val, $key) use (&$keys) {
        $keys[] = $key;
    });
    print_r($keys);

Hi,
richtig. Mit

$text .= $entry["Name"]."    ".$entry["Location"].PHP_EOL;

sollte dein Ort auch dabei sein.

Ralf

Guten Morgen,

meine Frau hätte noch gerne einen Änderungswunsch :smiley: also absolute Priorität :wink:

Aktuell ist die Ausgabe per Textbox wie folgt:

Wir haben heute keinen Termin, daher bleibt die Box leer.

Hier hätte sie nun gerne, dass quasi ein Text hinterlegt wird, dass heute keine Termine vorhanden sind.

Im Script habe ich folgenden Abschnitt gefunden:

Ich habe die Auskommentierung zurückgenommen und den Text auf meine Frau und mich angepasst.
Die Ausgabe per Echo passt, wie im Screenshot ersichtlich, allerdings erhalte ich in Line 197 noch einen Fehler, welchen ich nicht verstehe.
Was muss ich hier noch anpassen, damit wir bei „kein Termin vorhanden“ die Textzeile ausgegeben bekommen?

Grüße
Simon

Kommt auf dein restliches Skript an. Also welche Variante du jetzt verwendest.
Bei mir sieht so aus: (Ich poste jetzt mal das Ganze Skript - es gibt nun 3 Variablen für die Darstellung Webfront und 3 Variablen mit den Terminen für Alexa Durchsage - hier muss ja das ganze HTML Zeugs weg)

<?php

//***********************************************************************************************************************
// Einstellungen

$KalenderId = 26174;
$UrlaubId = 41798;

// für Webfront
$TerminId_Heute = 49468;
$TerminId_Morgen = 48381;
$TerminId_Uebermorgen = 27701;

//für Alexa
$TerminId_HeuteA = 51696;
$TerminId_MorgenA = 16021;
$TerminId_UebermorgenA = 35400;


//************************************************************************************************************************
// Code

ICCR_UpdateCalendar($KalenderId); 
$calendar = ICCR_GetCachedCalendar($KalenderId);
$calendar_array = json_decode($calendar, true);

// echo $anzahl = count($calendar_array);

/* array_walk_recursive($calendar_array, function($val, $key) use (&$keys) {
        $keys[] = $key;
    });
    print_r($keys);

exit();
*/

SetValue($UrlaubId, false); /* Bool Variable die IPS sagt ob ich Urlaub habe wird gesetzt wenn ein Termin Urlaub heißt */

//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;

// für Webfront
$text1 = "";
$text2 = "";
$text3 = "";

// für Alexa ohne HTML Code
$text1a = "";
$text2a = "";
$text3a = "";

// **************************************************************************************************************************
// Heute
foreach ($calendar_array as $entry) 
{
    if ($entry["Status"] == 'CANCELLED') continue;
    if ($entry["allDay"] == false)
    {
        $stunde = date('H', $entry["From"]);
        $minute = date('i', $entry["From"]);
        $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('H', time()) < 13))
        {
            if ($heute_flag){
                $text1a .= "Eure Termine Heute: ".PHP_EOL;
                $heute_flag = false;
            }
            $text1 .= "<b>".$entry["Name"]."</b> ".$entry["Location"]."<br>";
        }
        //else if (($entry["allDay"] == false) && (time() < $entry["To"]))
        else if ($entry["allDay"] == false)
        {
            if ($heute_flag)
            {
                $text1a .= "Eure Termine Heute: ".PHP_EOL;
                $heute_flag = false;
            }
            $text1a .= "um ".$zeit;
            $text1 .= $zeit;
            $text1a .= $entry["Name"]." ".PHP_EOL;
            $text1 .= "<b>".$entry["Name"]."</b> ".$entry["Location"]."<br>";
        }
        if (strpos($entry["Name"], "Urlaub") >= 0) SetValue($UrlaubId, true);
    }
    else if (($entry["From"] <= $heute) && ($entry["To"] >= $morgen))
    {
        if ($heute_flag)
        {
            $text1a .= "Eure Termine Heute: ".PHP_EOL;
            $heute_flag = false;
        }
        $text1a .= $entry["Name"]." ".PHP_EOL;
        $text1 .= "<b>".$entry["Name"]."</b> ".$entry["Location"]."<br>";
    }
    if ($entry["From"] > $ende)
    {
        break;
    }
}


// *************************************************************************************************************************
// Morgen

foreach ($calendar_array as $entry) 
{

    if ($entry["Status"] == 'CANCELLED') continue;
    if ($entry["allDay"] == false)
    {
        $stunde = date('H', $entry["From"]);
        $minute = date('i', $entry["From"]);
        $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)
            {
                $text2a .= "Morgen ".PHP_EOL;
                $morgen_flag = false;
            }
            $text2a .= $entry["Name"]." ".PHP_EOL;
            $text2 .= "<b>".$entry["Name"]."</b> ".$entry["Location"]."<br>";
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"]))
        {
            if ($morgen_flag)
            {
                $text2a .= "Morgen ".PHP_EOL;
                $morgen_flag = false;
            }
            $text2a .= "um ".$zeit;
            $text2 .= $zeit;
            $text2a .= $entry["Name"]." ".PHP_EOL;
            $text2 .= "<b>".$entry["Name"]."</b> ".$entry["Location"]."<br>";
        }
    }
    else if (($entry["From"] <= $morgen) && ($entry["To"] >= $uebermorgen))
        {
        if ($morgen_flag){
            $text2a .= "Morgen ".PHP_EOL;
            $morgen_flag = false;
        }
       $text2a .= $entry["Name"]." ".PHP_EOL;
       $text2 .= "<b>".$entry["Name"]."</b> ".$entry["Location"]."<br>";
    }
    if ($entry["From"] > $ende)
    {
        break;
    }
  
}


// ********************************************************************************************************************************
// Übermorgen
foreach ($calendar_array as $entry) 
{
    if ($entry["Status"] == 'CANCELLED') continue;
    if ($entry["allDay"] == false)
    {
        $stunde = date('H', $entry["From"]);
        $minute = date('i', $entry["From"]);
        $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)
            {
                $text3a .= "Übermorgen ".PHP_EOL;
                $uebermorgen_flag = false;
            }
            $text3a .= $entry["Name"]." ".PHP_EOL;
            $text3 .= "<b>".$entry["Name"]."</b> ".$entry["Location"]."<br>";
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"]))
        {
            if ($uebermorgen_flag)
            {                            
                $text3a .= "Übermorgen ".PHP_EOL;
                $uebermorgen_flag = false;
            }
            $text3a .= "um ".$zeit;
            $text3 .= $zeit;
            $text3a .= $entry["Name"]." ".PHP_EOL;
            $text3 .= "<b>".$entry["Name"]."</b> ".$entry["Location"]."<br>";
        }
    }
    else if (($entry["From"] <= $uebermorgen) && ($entry["To"] >= $ende))
    {
        if ($uebermorgen_flag){
            $text3a .= "Übermorgen ".PHP_EOL;
            $uebermorgen_flag = false;
        }
        $text3a .= $entry["Name"]." ".PHP_EOL;
        $text3 .= "<b>".$entry["Name"]."</b> ".$entry["Location"]."<br>";
    }
    if ($entry["From"] > $ende)
    {
        break;
    }
}

if (strlen($text1) < 2) 
{
    $text1 = "<b>Heute gibt es zum Glück keine wichtigen Termine</b>";
    $text1a = "Heute gibt es zum Glück keine wichtigen Termine";
}
//print PHP_EOL.PHP_EOL.PHP_EOL.$text;

//echo $text1;

// für Webfront
SetValue($TerminId_Heute, $text1); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_Morgen, $text2); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_Uebermorgen, $text3); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
// für Alexa
SetValue($TerminId_HeuteA, $text1a); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_MorgenA, $text2a); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_UebermorgenA, $text3a); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */



hier mal mein Script, ich hoffe das reinkopieren funktioniert ohne Probleme :wink:

<?php

//***********************************************************************************************************************
// Einstellungen

$KalenderId = 56245;
$UrlaubId = 51827;

$TerminId_Heute = 31341;
$TerminId_Morgen = 23948;
$TerminId_Uebermorgen = 51815;


//************************************************************************************************************************
// Code

ICCR_UpdateCalendar($KalenderId); 
$calendar = ICCR_GetCachedCalendar($KalenderId);
$calendar_array = json_decode($calendar, true);

SetValue($UrlaubId, false); /* Bool Variable die IPS sagt ob ich Urlaub habe wird gesetzt wenn ein Termin Urlaub heißt */

//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;

$text1 = "";
$text2 = "";
$text3 = "";


// Heute
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 = " ";
        // wenn Stunde <10 (2stellig) dann Leerzeichen dazu
        if ($stunde <= 9)
        {
            $zeit = "0".$stunde.":".$minute." Uhr ";
        }
        else
        {
            $zeit = $stunde.":".$minute." Uhr ";
        }
    }
    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){
                // $text1 .= "Heute   ".PHP_EOL;
                $heute_flag = false;
            }
            $text1 .= $entry["Name"]."    ".PHP_EOL;
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"])){
            if ($heute_flag){
                // $text1 .= "Heute   ".PHP_EOL;
                $heute_flag = false;
            }
            //$text1 .= "um ".$zeit;
            $text1 .= $zeit;

            $text1 .= $entry["Name"]."    ".PHP_EOL;
        }
        if (strpos($entry["Name"], "Urlaub") >= 0) SetValue($UrlaubId, true);
    }
    else if (($entry["From"] <= $heute) && ($entry["To"] >= $morgen)){
        if ($heute_flag){
            // $text1 .= "Heute   ".PHP_EOL;
            $heute_flag = false;
        }
        $text1 .= $entry["Name"]."    ".PHP_EOL;
    }
    if ($entry["From"] > $ende){
        break;
    }
}

// Morgen
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 = " ";
        // wenn Stunde <10 (2stellig) dann Leerzeichen dazu
        if ($stunde <= 9)
        {
            $zeit = "0".$stunde.":".$minute." Uhr ";
        }
        else
        {
            $zeit = $stunde.":".$minute." Uhr ";
        }
        
    }
    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){
                // $text2 .= "Morgen   ".PHP_EOL;
                $morgen_flag = false;
            }
            $text2 .= $entry["Name"]."    ".PHP_EOL;
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"])){
            if ($morgen_flag){
                // $text2 .= "Morgen   ".PHP_EOL;
                $morgen_flag = false;
            }
            // $text2 .= "um ".$zeit;
            $text2 .= $zeit;

            $text2 .= $entry["Name"]."    ".PHP_EOL;
        }
    }
    else if (($entry["From"] <= $morgen) && ($entry["To"] >= $uebermorgen)){
        if ($morgen_flag){
            // $text2 .= "Morgen   ".PHP_EOL;
            $morgen_flag = false;
        }
        $text2 .= $entry["Name"]."    ".PHP_EOL;
    }
    if ($entry["From"] > $ende){
        break;
    }
}

// Übermorgen
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 = " ";
        // wenn Stunde <10 (2stellig) dann Leerzeichen dazu
        if ($stunde <= 9)
        {
            $zeit = "0".$stunde.":".$minute." Uhr ";
        }
        else
        {
            $zeit = $stunde.":".$minute." Uhr ";
        }
    }
    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){
                // $text3 .= "Übermorgen   ".PHP_EOL;
                $uebermorgen_flag = false;
            }
            $text3 .= $entry["Name"]."    ".PHP_EOL;
        }
        else if (($entry["allDay"] == false) && (time() < $entry["To"])){
            if ($uebermorgen_flag){
                // $text3 .= "Übermorgen   ".PHP_EOL;
                $uebermorgen_flag = false;
            }
            $text3 .= "um ".$zeit;
            $text3 .= $entry["Name"]."    ".PHP_EOL;
        }
    }
    else if (($entry["From"] <= $uebermorgen) && ($entry["To"] >= $ende)){
        if ($uebermorgen_flag){
            // $text3 .= "Übermorgen   ".PHP_EOL;
            $uebermorgen_flag = false;
        }
        $text3 .= $entry["Name"]."    ".PHP_EOL;
    }
    if ($entry["From"] > $ende){
        break;
    }
}

if (strlen($text) < 2) $text = "Stefanie und Simon, Ihr habt Heute zum Glück keine Termine";
print PHP_EOL.PHP_EOL.PHP_EOL.$text;

//echo $text1;

SetValue($TerminId_Heute, $text1); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_Morgen, $text2); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
SetValue($TerminId_Uebermorgen, $text3); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */


?>

Ein Vergleich ergab, dass bei dir

if (strlen($text1) < 2) 
{
    $text1 = "<b>Heute gibt es zum Glück keine wichtigen Termine</b>";

hinterlegt ist und bei mir

if (strlen($text) < 2) $text = "Stefanie und Simon, Ihr habt Heute zum Glück keine Termine";

passe ich es bei mir auf

if (strlen($text1) < 2) $text1 = "Stefanie und Simon, Ihr habt Heute zum Glück keine Termine";

an erfolgt die Textausgabe.
Vielen Dank!