[Modul] iCal Calender in IP Symcon lesen und verarbeiten

Ich sehe gerade, das Thema hatten wir hier schon mal.

Kannst du mal versuchen, deine Memory Einstellung in der php.ini zu erhöhen?

memory_limit=64M

IPS Neustart nicht vergessen :slight_smile:

Die maximale Memorygröße kannst du über

<?php

echo phpinfo();

in der Zeile „memory limit“ kontrollieren.

Hallo Burkhard,

nachdem ich das Limit erhöht habe bzw. die „Cache-Größe“ (Tage) verringert habe ich alles :loveips:

Vielen Dank für das Modul!

Ein kleiner Wunsch: wenn man noch die [Description] in eine Variable bekommt, könnten die „Bastler“ unter uns viele schöne Dinge damit anstellen…

MST

Schön, dass es jetzt klappt.

Hast du die Funktion ICCR_GetNotifierPresenceReason schon gefunden? Die liefert unter anderem auch die Description.

Wie sieht dein Anwendnungsfall aus?

… so etwa?:

$content = ICCR_GetNotifierPresenceReason (37723, "NOTIFIER3");
$json = json_decode($content);
//echo  $json->Description;
echo  $json->Location;

Ja :slight_smile:

Damit könnte man z.B. auf dem Display eines Besprechungsraum eine Info schreiben oder Werte in IP-Symcon übergenen usw…

MST

Genau. Dann hast du ja alles, was du brauchst :slight_smile:

Hallo,

leider bekomme ich seit 1 Woche die Meldung das mein Benutzername und Password falsch seien.
Ich benutze eine Synology Diskstation. Es muss was mit einem Update zu tun haben… Der Kalender hat einwandfrei funktioniert bis ich ein Update ausgeführt habe. Seither zeigt es mir an das ich einen falschen Benutzer und Password eingegeben habe. Öffne ich die URL im Chrome kann ich mein Benutzer und Password eingeben und es wird der Kalender heruntergeladen. :confused:
Leider habe ich keine Idee mehr wieso sich das Module nicht mehr anmelden kann.
Bitte um Hilfe.
Danke

Was hast du denn aktualisiert und was steht genau in den Debugausgaben? Eventuell musst du die Überprüfung des SSL Zertifikats ausstellen.

Hallo Ralf,

könntest du hier ein Beispiel posten ?
Ich möchte Alexa Sprachausgabe dafür nutzen, um zu einer im Termin hinterlegten Erinnerungszeit per Sprachausgabe erinnert zu werden.

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

Super, vielen Dank.
Dann kann ich mich mal austoben… :slight_smile:

Hallo bumaas,

kann es sein, dass es nicht möglich ist, mehr als zehn Meldevariablen bzw. mehr als „IDENT11“ anlegen kann ?

Ich kann zwar weitere Meldevariablen im Modul anlegen, aber diese erscheinen nicht im IPS Baum !
Auch unter den „Statusvariablen“ (im Modul) erscheinen Statusvariablen >= IDENT12 nicht !

In der Anleitung habe ich keine Einschränkungen diesbezüglich gefunden.

Bug ?

LG
lueralba

Auf welcher Symcon Version bist du?

Edit: Ziehe die Frage zurück:). Deine Signatur besagt: 5.5

Bei mir (auch 5.5) kann ich gar keine weiteren Meldevariablen anlegen. Sie werden laut Debug wohl sofort wieder gelöscht :eek:

Edit 2:

Da hatte sich ein Fehler eingeschlichen. Ich habe eine neue Beta Version im Store abgelegt.

Hallo zusammen,

ich habe mir das Modul auch installiert und es funktioniert soweit so gut.
Gibt es einen Trick, wie ich mir zb. schon am Montag anzeigen könnte, welche Tonne diese Woche und an welchem Tag abgeholt wird?
Ich kann zwar den Vorlauf für die Variable einstellen, diese schaltet auch schon man Montag um, ich sehe aber kein Datum, wann der Termin genau ist.

Gruß

Dark99

Hi,
ich glaube das geht nur mit einem Script wie z.B. aus #430. Damit lasse ich mir die Termine von Heute und den folgenden beiden Tagen vorlesen und dann auch u.a. „Übermorgen Papiertonne“.

Ralf

Hallo bumaas,

danke für den Fix :slight_smile:

Habe eben noch festgestellt, dass wenn ich eine Meldevariable lösche,
diese zwar im Modul gelöscht wird, die Variable selber aber weiterhin im IPS Baum existiert.

LG
lueralba

Hallo Dark99 ,

ich habe für jede Müllsorte eine Meldevariable für die Anzeige (am Abholtag = true) und jeweils eine eine Meldevariable für die Ansage (entsprechende Minuten davor = true -> als Trigger für ein Ansagescript).

Es müssen eben nur genau die Minuten für die Anzeige-/ Ansage-Variablen berechnet sein :wink:

Gruß
lueralba

Hallo,

die Logeinträge erscheinen mit Update auf 5.5.

29.10.2020 20:26:15 | 53524 | ERROR   | TimerPool            | iCal Benutzername (UpdateCalendar): <br />
<b>Deprecated</b>:  Array and string offset access syntax with curly braces is deprecated in <b>/var/lib/symcon/modules/.store/de.bumaas.ical/libs/iCalcreator-master/src/Util/StringFactory.php</b> on line <b>88</b><br />
<br />
<b>Deprecated</b>:  Array and string offset access syntax with curly braces is deprecated in <b>/var/lib/symcon/modules/.store/de.bumaas.ical/libs/iCalcreator-master/src/Util/DateIntervalFactory.php</b> on line <b>133</b><br />
<br />
<b>Notice</b>:  Trying to access array offset on value of type null in <b>/var/lib/symcon/modules/.store/de.bumaas.ical/libs/iCalcreator-master/src/Util/DateTimeFactory.php</b> on line <b>98</b><br />
<br />
<b>Notice</b>:  Trying to access array offset on value of type null in <b>/var/lib/symcon/modules/.store/de.bumaas.ical/libs/iCalcreator-master/src/Util/DateTimeFactory.php</b> on line <b>98</b><br />
<br />
<b>Notice</b>:  Trying to access array offset on value of type null in <b>/var/lib/symcon/modules/.store/de.bumaas.ical/libs/iCalcreator-master/src/Util/DateTimeFactory.php</b> on line <b>98</b><br />

Die notwendige Anpassung an PHP 7.4 ist in der Beta des Moduls bereits vollzogen.

Ich habe die Version nun auch als Stable eingereicht.

Hi,
ich meine das es was mit einer PHP-Bibliothek zu tun die mit der neueren Version nicht zurecht kommt. In der Beta ist seit einigen Wochen eine Anpassung drin.

Ralf

Hallo Bumaas, der Kalender funktioniert soweit tadellos und die Variablen sind auch angelegt. Es geht darum das ich den Tag vor der Abholung dir Erinnerung bekomme, so sind die Zeiten auch eingestellt. Ich habe dein PHP Protokoll ausprobiert und bin kläglich daran gescheitert evtl kannst du mir nochmal helfen.

Gruß Alex