[Modul] iCal Calender in IP Symcon lesen und verarbeiten

Vielen Dank für den Kalender.

Es liegt an den wiederkehrenden Terminen, deren von/bis Zeiten falsch berechnet werden:

 [FromS] => 2023-04-12T02:00:00+02:00
 [ToS] => 2023-04-13T02:00:00+02:00

richtig wäre:

 [FromS] => 2023-04-12T00:00:00+02:00
 [ToS] => 2023-04-13T00:00:00+02:00

Das muss ich mir noch genauer ansehen.

Ich habe eine neue Beta abgestellt. Mit der sollten die Zeiten nun korrekt berechnet werden.

Klasse, ich teste es über die nächsten zwei Wochen :slight_smile:

@bumaas

kurze Info der letzten 2 Wochen:
Alle Termine waren wieder richtig :slight_smile:

Danke Dir.
lueralba

1 „Gefällt mir“

Welches Modul setzt du genau ein?

Hier geht es um das iCal-Calendar Modul aus dem Module Store.

Hi,

Du nutzt jslive kalender modul. Hier geht es aber um das ical modul, daher solltest du dort schreiben.

Davon mal ab ist dein hintergrund weiss. Drück auf das x für transparent.

Viele Grüsse

Danke euch, @bumaas und @kris. Natürlich handelt es sich um das JSLive Modul… War mir echt nicht mehr bewusst. Ich habe meinen Post in diesem Thread gelöscht.

Leider hilft es auch nicht, wenn ich die Farbe entferne. Ich diskutiere das im anderen JSLive Thread weiter.

@bumaas

Ich (wir) verwenden iCal Calendar Modul schon seit geraumer Zeit in unserem Verein (makerspace-wi.de) um die Mitglieder zu erinnern unsere Mülltonnen hoch an die Strasse zu stellen.
Das ganze funktioniert bisher eigentlich recht gut (IP-Symcon 6.3, Raspberry Pi (armhf), 29.11.2022, 07e763adc3e2) jedoch passiert es hin und wieder mal, dass die entsprechenden Anzeigen nicht auf unseren Displays angezeigt werden.
Schaut man dann nach, stellt man fest, dass es - wie auch immer - Probleme mit dem Abholen der Daten vom unseren Entsorger gab und das iCal Calendar Modul nicht die entsprechenden Variablen (Boolean) gesetzt hat.
Wenn ich dann das Modul manuell deaktiviere und danach wieder aktiviere funktioniert es wieder bis zum nächsten Problem.
Nun meine Frage: Kann man irgendwie abfragen, ob das Modul hängt, um dann automatisiert zu deaktivieren und danach wieder zu aktivieren?

Ich vermute, bei euch ist die Stable Version im Einsatz. Magst du mal die Beta Version ausprobieren? Dort sollte das Thema eigentlich nicht mehr auftreten.

Ja klar die Stable Version - immer schön auf Nummer sicher :blush:
Kannst Du mir bitte kurz einen Tipp geben, wie ich auf die Beta Version wechsele?

Wenn Du im Store das Modul aufrufst, gibt es im Modul unten glaub „Optionen“, dort kannst auf Beta gehen.
Cheers Seppm

Ah ja - sofort gefunden - vielen Dank!
Werde berichten ob es was brachte.

Wollte nur mitteilen, das das iCal Modul einwandfrei auch mit Office 365 zusammenarbeitet.

Ich habe mir in meinem Postfach einen weiteren Kalendar eingerichtet und dann z.B. in OWA (Outlook Web App) einfach in den Einstellungen > Kalendar > Geteilte Kalendar > Einen Kalendar veröffentlichen > Einen Kalendar auswählen > Eine Berechtigung auswählen > die ICS Url kopieren und in dem Modul einfügen - Zugangsdaten werden nicht benötigt (somit bitte darauf achten, das diese nicht weitergegeben werden.

Siehe Bild.

1 „Gefällt mir“

Hallo, die letzten Tage funktionierte der Import einwandfrei - doch jetzt nicht mehr, ich bekomme folgenden Fehler:

Fatal error: Uncaught Exception: DateTimeZone::__construct(): Unknown or bad timezone (Customized Time Zone) in C:\ProgramData\Symcon\modules.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php:108
Stack trace:
#0 C:\ProgramData\Symcon\modules.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php(108): DateTimeZone->__construct(‚Customized Time…‘)
#1 C:\ProgramData\Symcon\modules.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(530): Kigkonsult\Icalcreator\Util\DateTimeZoneFactory::assertDateTimeZone(‚Customized Time…‘)
#2 C:\ProgramData\Symcon\modules.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(501): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->processDatePropsTZIDattribute(‚DTSTART‘, ‚20220702T150000‘, Array)
#3 C:\ProgramData\Symcon\modules.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\RegulateTimezoneFactory.php(316): Kigkonsult\Icalcreator\Util\RegulateTimezoneFactory->proc in C:\ProgramData\Symcon\modules.store\de.bumaas.ical\libs\iCalcreator-master\src\Util\DateTimeZoneFactory.php on line 111

Wie kann ich den lösen?

Danke für eure Hilfe.

Da scheint sich an der Zeitzonendefinition auf dem Server etwas geändert zu haben (Customized Time Zone).

Damit kommt das Modul bzw. die verwendete Bibliothek nicht zurecht. Hast du eine Idee, wie du das rückgängig machen kannst?

Hi, danke für deine Antwort - ich hatte nichts geändert, aber nun geht es auf einmal wieder.

Danke dir.

Das ist gut. Ich hätte da wohl auch nur wenig ändern können😄

Hallo Zusammen,

Ich hatte das gleiche Problem, warum auch immer, legt die Standard Android APP die Termine falsch an.
Nutze ich die Outlook APP ist alles gut.

Vielleicht hilft es mal.

Grüße
Daniel

Hatte das gleiche Problem mit IOS Kalendereinträgen.
In der „RegulateTimezoneFactory.php“ habe ich in Zeile 155 die ‚Customized Time Zone‘ ergänzt.
Seit dem läuft alles super.

Gruß
Jürgen

@bumaas , kannst Du das vielleicht noch ergänzen? Danke

Hi,
in meinem 3 Jahre alten Script habe ich heute noch einen Fehler gefunden weil die Zeit heute umgestellt wurde und ich Morgen einen Termin habe. Bei ganztägigen Terminen lege ich die Startzeit 2 Stunden vor und die Endzeit 2 Stunden zurück damit der Termin auch bei Zeitumstellung im Tag liegt.

Hier mal meine aktuelle Version:

<?php
//error_reporting(E_ERROR | E_PARSE | E_NOTICE);
ICCR_UpdateCalendar(14290);
$calendar = ICCR_GetCachedCalendar(14290);
$calendar_array = json_decode($calendar, true);
$heute = mktime(0, 0, 0, date("m")  , date("d") + 0, date("Y"));
$heute_flag = true;
$morgen = $heute + 86400;
$morgen_flag = true;
$uebermorgen = $morgen + 86400;
$uebermorgen_flag = true;
$ende = $uebermorgen + 86400;
$text = "";
SetValue(10677, false);
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"]));
        $entry["From"] += 7200;
        $entry["To"] -= 7200;
    }
    if (($entry["From"] >= $heute) && ($entry["To"] < $morgen)){
        $pos = strpos($entry["Name"], "Geburtstag", 0);
        if ($pos === false) {        
            if (($entry["allDay"]) && (date('G') < 13)){
                if ($heute_flag){
                    $text .= "Heute   ".PHP_EOL;
                    $heute_flag = false;
                }
                if ((strstr($entry["Location"], '27299', false) === false) && (strlen($entry["Location"]) > 5)){
                    $text .= $entry["Name"] . " in " . $entry["Location"]."    ".PHP_EOL;
                }
                else{
                    $text .= $entry["Name"] ."    ".PHP_EOL;
                }
                if (strpos($entry["Name"], "Urlaub") !== false) SetValue(10677, true);
            }
            else if (time() < ($entry["From"] + 1800)){
                if ($heute_flag){
                    $text .= "Heute   ".PHP_EOL;
                    $heute_flag = false;
                }
                $text .= "um ".$zeit;
                if ((strstr($entry["Location"], '27299', false) === false) && (strlen($entry["Location"]) > 5)){
                    $text .= $entry["Name"] . " in " . $entry["Location"]."    ".PHP_EOL;
                }
                else{
                    $text .= $entry["Name"] ."    ".PHP_EOL;
                }
            }
        }
    }
    else if (($entry["From"] <= $heute) && ($entry["To"] >= $morgen)){
        if ($heute_flag){
            $text .= "Heute   ".PHP_EOL;
            $heute_flag = false;
        }
        if ((strstr($entry["Location"], '27299', false) === false) && (strlen($entry["Location"]) > 5)){
            $text .= $entry["Name"] . " in " . $entry["Location"]."    ".PHP_EOL;
        }
        else{
            $text .= $entry["Name"] ."    ".PHP_EOL;
        }
        if (strpos($entry["Name"], "Urlaub") !== false) SetValue(10677, true);
    }
    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"]));
        $entry["From"] += 7200;
        $entry["To"] -= 7200;
    }
    if (($entry["From"] >= $morgen) && ($entry["To"] < $uebermorgen)){
        $pos = strpos($entry["Name"], "Geburtstag", 0);
        if ($pos === false) {        
            if ($entry["allDay"]){
                if ($morgen_flag){
                    $text .= "Morgen   ".PHP_EOL;
                    $morgen_flag = false;
                }
                if ((strstr($entry["Location"], '27299', false) === false) && (strlen($entry["Location"]) > 5)){
                    $text .= $entry["Name"] . " in " . $entry["Location"]."    ".PHP_EOL;
                }
                else{
                    $text .= $entry["Name"] ."    ".PHP_EOL;
                }
            }
            else if (time() < $entry["To"]){
                if ($morgen_flag){
                    $text .= "Morgen   ".PHP_EOL;
                    $morgen_flag = false;
                }
                $text .= "um ".$zeit;
                if ((strstr($entry["Location"], '27299', false) === false) && (strlen($entry["Location"]) > 5)){
                    $text .= $entry["Name"] . " in " . $entry["Location"]."    ".PHP_EOL;
                }
                else{
                    $text .= $entry["Name"] ."    ".PHP_EOL;
                }
            }
        }
    }
    else if (($entry["From"] <= $morgen) && ($entry["To"] >= $uebermorgen)){
        if ($morgen_flag){
            $text .= "Morgen   ".PHP_EOL;
            $morgen_flag = false;
        }
        if ((strstr($entry["Location"], '27299', false) === false) && (strlen($entry["Location"]) > 5)){
            $text .= $entry["Name"] . " in " . $entry["Location"]."    ".PHP_EOL;
        }
        else{
            $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"] += 7200;
        $entry["To"] -= 7200;
        $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)){
        $pos = strpos($entry["Name"], "Geburtstag", 0);
        if ($pos === false) {        
            if ($entry["allDay"]){
                if ($uebermorgen_flag){
                    $text .= "Übermorgen   ".PHP_EOL;
                    $uebermorgen_flag = false;
                }
                if ((strstr($entry["Location"], '27299', false) === false) && (strlen($entry["Location"]) > 5)){
                    $text .= $entry["Name"] . " in " . $entry["Location"]."    ".PHP_EOL;
                }
                else{
                    $text .= $entry["Name"] ."    ".PHP_EOL;
                }
            }
            else if (time() < $entry["To"]){
                if ($uebermorgen_flag){
                    $text .= "Übermorgen   ".PHP_EOL;
                    $uebermorgen_flag = false;
                }
                $text .= "um ".$zeit;
                if ((strstr($entry["Location"], '27299', false) === false) && (strlen($entry["Location"]) > 5)){
                    $text .= $entry["Name"] . " in " . $entry["Location"]."    ".PHP_EOL;
                }
                else{
                    $text .= $entry["Name"] ."    ".PHP_EOL;
                }
            }
        }
    }
    else if (($entry["From"] <= $uebermorgen) && ($entry["To"] >= $ende)){
        if ($uebermorgen_flag){
            $text .= "Übermorgen   ".PHP_EOL;
            $uebermorgen_flag = false;
        }
        if ((strstr($entry["Location"], '27299', false) === false) && (strlen($entry["Location"]) > 5)){
            $text .= $entry["Name"] . " in " . $entry["Location"]."    ".PHP_EOL;
        }
        else{
            $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.$text;
$html_text = '';
$html_text = str_replace(PHP_EOL, '<br>', $text);
$html_text = str_replace('Heute', '<strong>Heute</strong>', $html_text);
$html_text = str_replace('Morgen', '<strong>Morgen</strong>', $html_text);
$html_text = str_replace('Übermorgen', '<strong>Übermorgen</strong>', $html_text);
$text = str_replace('Morgen', '<break time="1s"/>' . 'Morgen', $text);
$text = str_replace('Übermorgen', '<break time="1s"/>' . 'Übermorgen', $text);
SetValue(27911, $text);
//SetValue(13874, '<p style="font-size: 1em;background-color:black;color:white;line-height:1.5em">'.$html_text.'</p>');
SetValue(13874, '<p style="font-size: 0.5em;color:white;line-height:1em">'.$html_text.'</p>');

?>

Falls ihr ein ähnliches oder abgewandeltes Script schon benutzt sucht nach ganztägigen Terminen und fügt bei den Zeiten ein

        $entry["From"] += 7200;
        $entry["To"] -= 7200;

hinzu-

Ralf

1 „Gefällt mir“