[Modul] iCal Calender in IP Symcon lesen und verarbeiten

ich schon wieder:(
habe jetzt die beta-version geladen…das klappt schonmal…

stöber jetzt noch die anderen 28 seiten durch…vll finde ich ja dort noch etwas zum einbinden im webfront.

Sollte hier jemand grad wissen wo genau das steht wäre ich natürlich dankbar für diese info :wink:

Du bist in der falschen (veralteten) Doku gelandet.

Hier ist die aktuelle.

Du findest sie auch in der Instanz:

Hi,

was meinst Du mit einbinden in Web-Front? Ich habe als externe Webseite eine schöne Kalenderansicht drin. Für diese Ansicht musste man 2 Dateien (calendar.html und feed.php) nach webfront/user/iCal/ kopieren und die eingebundene Seite auf /user/iCal/calendar.html zeigen lassen. Ich weiß aber nicht mehr wo ich diese Informationen gefunden habe.

Ralf

In der verlinkten Doku [emoji1]

Hi,
ich hatte es 2 Mal überflogen aber „Calendar-Control im Webfront angezeigt werden können ist hier beschrieben.“ immer überlesen:-)

Ralf

Mahlzeit erstmal,
danke für den tip mit der Falschen Doku.:banghead:

Jetzt habe ich mir die Neue Version installiert und weiter fleissig hier gelesen.

Ich habe jetzt 2 Scripte mal ausprobiert um mir damit eine Textbox, wie in Post #205 und #206 auf seite 21, zu „bauen“
Leider ohne erfolg.

Das andere script habe ich von hier #430
https://www.symcon.de/forum/threads/35728-Modul-iCal-Calender-in-IP-Symcon-lesen-und-verarbeiten?p=436203#post436203

Hier bekomme ich zumindest mal den Testtermin im Webfront Angezeigt. Wenn auch noch nicht so wie ich mir das Vorstelle (#205)
Dieses habe ich über eine String-Variable gemacht.

Der gleiche weg, über setvalue, klappt mit dem Code Post #206 aber nicht…hier wird kein Text in die Variable geschrieben…
Dabei finde ich diese art der Darstellung für mich eigentlich recht passend.

wenn das ganze auch mit dem code aus dem zweiten post auch so abzubilden wäre, solls mir auch recht sein.
hänge den code mal hier an

<?php
ICCR_UpdateCalendar(31231); // 14290 Instanz vom Terminkalender */
$calendar = ICCR_GetCachedCalendar(31231);
$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 Urlaub 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 = "Sven Du hast Heute zum Glück keine Termine";
//print PHP_EOL.PHP_EOL.PHP_EOL.$text;
SetValue(35204, $text); /* 27911 Instanz einer Stringvariablen die den Text für alle Termine der nächsten 3 Tage enthält z.B. für Alexa */
?>

Dieses wäre der andere Code, mit dem Leider nichts passiert ist

 <?php
//family calendar
$calDATA = json_decode(ICCR_GetCachedCalendar(31231),true);  //12345 = ID der  iCal Calendar Reader Instance
//var_dump ($calDATA);

foreach ($calDATA as $calSingleData)
{
    //Tage zurück/Voraus anzeigen ( 0 = Heute)
    $Vergangenheit=4;
    $Zukunft=2;

    if  ((substr($calSingleData['FromS'] ,0,10) >= date("Y-m-d",mktime(0, 0, 0, date("m")  , date("d")-$Vergangenheit, date("Y"))))  
         and  
         (substr($calSingleData['FromS'] ,0,10) <= date("Y-m-d",mktime(0, 0, 0, date("m")  , date("d")+$Zukunft, date("Y")))))
    {
        // echo  "UID:".$calSingleData['UID']."
";
        // echo  "Name:".$calSingleData['Name'] . "
";
        // echo  "Location:".$calSingleData['Location'] . "
";
        // echo  "Description:".$calSingleData['Description'] . "
";
        // echo  "From:".$calSingleData['From'] . "
";
        // echo  "To:".$calSingleData['To'] . "
";
        // echo  "FromS:".$calSingleData['FromS'] . "
";
        // echo  "ToS:".$calSingleData['ToS'] . "
";
        // echo  "allDay:".$calSingleData['allDay'] . "

";

        if ($calSingleData['allDay'] == true) 
        {
            echo "family - ".substr($calSingleData['FromS'] ,0,10)."  Ganztägig -> ".substr($calSingleData['ToS'] ,0,10)." ".$calSingleData['Name']."  ".$calSingleData['Location']."
";
        }else{
            echo "family - ".$calSingleData['FromS']." ".$calSingleData['ToS'] ." ".$calSingleData['Name']."  ".$calSingleData['Location']."
";
        }    
    }    
}  
SetValue(35204, $str='');

?> 

Hallo,

schau mal im Post #5:

[Modul] iCal Calender in IP Symcon lesen und verarbeiten

Grüße
Proxima

Edit: Der 2. Link in Post #5 funkrioniert nicht mehr. Daher: iCal-Calendar/docs/Examples at master · skyslasher/iCal-Calendar · GitHub

In der nächsten Version ist es dann deutlicher:

Wie Kalenderdaten aus einer oder mehreren iCalCalendarReader-Instanzen in einem Calendar-Control im Webfront angezeigt werden können ist im Dokument Kalender im Webfront anzeigen beschrieben.

So wie in dieser grafik hätte ich das gerne gehabt

und so ist es jetzt mit dem ersten script

iCal-test2.JPG

Hallo SvenDc,

habe eben erst deine PM gelesen :slight_smile:

Bitte stelle doch deine Fragen erstmal hier im Forum - es wird einem sehr gut und gern weitergeholfen:D

Bist Du denn bereits weitergekommen ?

Gruß
lueralba

Hi
halb so wild…

Leider bin ich bisher nicht wirklich weiter gekommen…
Das Script stammt glaube von dir, oder?

Ich bekomme es einfach nicht hin das die termine in die String-Variable geschrieben werden…Die termine werden aber geladen

edit:
Hier mal die meldung

Ich muss mich hier mal reinhängen, habe das Skript auch schon lange in gebrauch ( vielen Dank dafür ). Es funktioniert bei mir aber auch nicht mehr, ich weis nicht ab wann, habe Heute etwas ausprobiert und bemerkt das die String nicht mehr gefüllt wird. Ausgelesen werden die Termine vom Modul.

Hallo uwe
Welches Script nutzt du denn von den beiden?
Kannst du das mal posten damit ich das mit meinem mal vergleichen kann?
Schließlich hat es bei dir ja mal funktioniert

Hi,

ich habe die HTML mal auf die neue Version 5.5 des Fullcalendar Framework angepasst. Doku bekommt ihr hier und unten sind zwei Beispiele:

Monatsansicht

<!DOCTYPE html>
<html lang='en'>
  <head>
    <meta charset='utf-8' />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href='https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/main.css' rel='stylesheet' />
    <script src='https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/main.js'></script>
    <link href="https://bootswatch.com/4/darkly/bootstrap.css" rel="stylesheet">
    <link href='https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13.1/css/all.css' rel='stylesheet'>
    <script type="text/javascript" src='https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/locales-all.js'></script>
    <script>

      document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        var calendar = new FullCalendar.Calendar(calendarEl, {
                themeSystem: 'bootstrap',
                initialView: 'dayGridMonth',
                headerToolbar: {
                        left: 'prev,next',
                        center: 'title',
                        right: 'today'
                },
                locale:'de',
                weekNumbers: true,
                dayMaxEvents: true,
                eventSources: [
                        {   url: 'feed.php',
                            extraParams: {
                            InstanceID: 10100 // <- ändern!
                        },
                        color: 'yellow', // <- frei konfigurierbar
                        textColor: 'black', // <- frei konfigurierbar
                        },
                        {   url: 'feed.php',
                            extraParams: {
                            InstanceID: 19160 // <- ändern!
                        },
                        color: 'orange', // <- frei konfigurierbar
                        textColor: 'black', // <- frei konfigurierbar
                        },
                ],

        });
        calendar.render();
      });

    </script>
    <style>

        body {
                margin: 0;
                padding: 0;
                font-size: 12px;
        }

        #top,
        #calendar.fc-unthemed {
                font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
        }

        #top {
                background: #eee;
                border-bottom: 1px solid #ddd;
                padding: 0 10px;
                line-height: 35px;
                font-size: 12px;
                color: #000;
        }

        #top .selector {
                display: inline-block;
                margin-right: 10px;
        }

        #top select {
                font: inherit; /* mock what Boostrap does, don't compete  */
        }

        .left { float: left }
        .right { float: right }
        .clear { clear: both }

        #calendar {

                max-width: 700px;
                margin: 35px auto;
                padding: 0 10px;
        }

</style>
  </head>
  <body>
    <div id='calendar'></div>
  </body>
</html>

Und Listenansicht

<!DOCTYPE html>
<html lang='en'>
  <head>
    <meta charset='utf-8' />
        <meta name="viewport" content="width=device-width, initial-scale=0.8">
    <link href='https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/main.css' rel='stylesheet' />
    <script src='https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/main.js'></script>
    <link href="https://bootswatch.com/4/darkly/bootstrap.css" rel="stylesheet">
    <link href='https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13.1/css/all.css' rel='stylesheet'>
    <script type="text/javascript" src='https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/locales-all.js'></script>
    <script>

      document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        var calendar = new FullCalendar.Calendar(calendarEl, {
                themeSystem: 'bootstrap',
                initialView: 'listWeek',
                headerToolbar: {
                        left: '',
                        center:'',
                        right: ''
                },
                locale:'de',
                dayMaxEvents: true,
                eventSources: [
                        {   url: 'feed.php',
                            extraParams: {
                            InstanceID: 10100 // <- ändern!
                        },
                        color: 'yellow', // <- frei konfigurierbar
                        textColor: 'black', // <- frei konfigurierbar
                        },
                ],

        });
        calendar.render();
      });

    </script>
    <style>

        body {
                margin: 0;
                padding: 0;
        }

        #top,
        #calendar.fc-unthemed {
                font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
        }
        .table-active{
                background-color:#333;
        }
        :root{--fc-list-event-hover-bg-color:#333;}

        #top {
                background: #eee;
                border-bottom: 1px solid #ddd;
                padding: 0 0px;
                color: #000;
        }


        #calendar {
                margin: 0;
                padding: 0;
        }
</style>
  </head>
  <body>
    <div id='calendar'></div>
  </body>
</html>

liste.png

Die feed.php hat sich dabei nicht verändert.

MfG
kris

Ich nutze dieses Skript

<?php
//family calendar
$calDATA = json_decode(ICCR_GetCachedCalendar(31231),true);  //12345 = ID der  iCal Calendar Reader Instance
//var_dump ($calDATA);

foreach ($calDATA as $calSingleData)
{
    //Tage zurück/Voraus anzeigen ( 0 = Heute)
    $Vergangenheit=4;
    $Zukunft=2;

    if  ((substr($calSingleData['FromS'] ,0,10) >= date("Y-m-d",mktime(0, 0, 0, date("m")  , date("d")-$Vergangenheit, date("Y"))))  
         and  
         (substr($calSingleData['FromS'] ,0,10) <= date("Y-m-d",mktime(0, 0, 0, date("m")  , date("d")+$Zukunft, date("Y")))))
    {
        // echo  "UID:".$calSingleData['UID']."
";
        // echo  "Name:".$calSingleData['Name'] . "
";
        // echo  "Location:".$calSingleData['Location'] . "
";
        // echo  "Description:".$calSingleData['Description'] . "
";
        // echo  "From:".$calSingleData['From'] . "
";
        // echo  "To:".$calSingleData['To'] . "
";
        // echo  "FromS:".$calSingleData['FromS'] . "
";
        // echo  "ToS:".$calSingleData['ToS'] . "
";
        // echo  "allDay:".$calSingleData['allDay'] . "

";

        if ($calSingleData['allDay'] == true) 
        {
            echo "family - ".substr($calSingleData['FromS'] ,0,10)."  Ganztägig -> ".substr($calSingleData['ToS'] ,0,10)." ".$calSingleData['Name']."  ".$calSingleData['Location']."
";
        }else{
            echo "family - ".$calSingleData['FromS']." ".$calSingleData['ToS'] ." ".$calSingleData['Name']."  ".$calSingleData['Location']."
";
        }    
    }    
}  
SetValue(35204, $str='');

?>

Vielen Dank
auf den ersten Blick sieht es aus wie bei mir… Gut zu wissen… Demnach muss das Problem ja woanders liegen

Kannst du dir die Fehlermeldung erklären?

Edit:
Wie sieht bzw sah denn dein webfront dazu bisher aus?

Bei mir geht es seit Heute wieder, die Aktualisierung ist in der Nacht wieder korrekt erfolgt. Keine Ahnung woran das lag. Am Modul auf jeden Fall nicht, die Daten wurden ja korrekt eingelesen.

Moin,
also das ist ja das Script von mir, welches ich auf meine ID geändert und das SetValue hinzugefügt habe…
Stimmt das komplett mit deinem Überein?
Kannst du speziell deines mal Posten?

edit:
Im Modul habe ich die Aktualierungsrate jetzt mal auf 1min gesetzt…ohne erfolg…Es werden weiterhin keine daten in die Variable geschrieben
Anbei noch bilder von meiner Aktuellen Konfi

Hallo SvenDc,

ja, das Script (zumindest der obere Teil davon) hatte ich mir zum testen geschrieben.

Wenn Du keine echo-Ausgabe im Scripteditor erhältst, müsstest Du vllt. die $Vergangenheit- und/oder $Zukunft-Werte erhöhen ?

zu dem Fehler:
Was soll diese Zeile machen?

SetValue(35204, $text);

Wo wird die Variable $text im Script „beladen“?
Wie sieht deine Variable dazu aus?

Gruß
lueralba