[Modul] iCal Calender in IP Symcon lesen und verarbeiten

@bumaas:

Beta:

Fehlermeldung ist weg.
Aber es werden auch keine Einträge mehr gefunden!

Wollte eben versuchen, das Problem auf ein nachvollziehbares Minimum zu reduzieren.
Nun tritt es nicht mehr auf :mad::smiley:
Stable und Beta, beide OK !

Da Du ja inzwischen gut im iCal Thema bist, habe ich Mal ein kleine Frage:
Ist es viel Aufwand, ein Array mit den einzelnen Terminen zu befüllen, so dass man sich eine Kalenderanzeige in einer Textbox bauen könnte.

Gruß
lueralba

Hast du dir schon ICCR_GetCachedCalendar() angesehen?

@bumaas;

Hast du dir schon ICCR_GetCachedCalendar() angesehen?

Nein, hatte ich noch nicht!
Schneller Test: Das müsste mir weiterhelfen. Danke Dir.

Gruß
lueralba

Die bestehende Möglichkeit der Visualisierung reicht dir nicht aus oder ist dir zu viel?

@bumaas:

Die bestehende Möglichkeit der Visualisierung reicht dir nicht aus oder ist dir zu viel?

Letzteres :wink:

Ich brauche nur eine wirklich kleine Anzeige (Textbox) in der die nächsten 5-8 Termine zu sehen sind.
2019-07-09 18_40_42-Infos (2).png
Ganz simpel !

Gruß
lueralba

@bumaas:

Ich brauche nur eine wirklich kleine Anzeige (Textbox) in der die nächsten 5-8 Termine zu sehen sind.

Es wird langsam wie ich es gerne möchte :slight_smile:


Ich habe nebenbei folgendes beobachtet:
Der Arrayeintrag [‚Description‘] wird NICHT befüllt !

Meine Gegenprüfung dazu: Die [‚Location‘] wird zeitgleich sauber befüllt/geändert.
Kannst Du das mal gegenkontrollieren.
Ist aber Prio 67 :smiley:
Danke Dir.

Für Mitleser die es auch ganz „simpel“ möchten:

//family calendar
$calDATA = json_decode(ICCR_GetCachedCalendar(12345),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']."
";
        }    
    }    
}

Master 2.00 build 24.
LG lueralba

@bumaas:

Wollte eben versuchen, das Problem auf ein nachvollziehbares Minimum zu reduzieren.
Nun tritt es nicht mehr auf
Stable und Beta, beide OK !

Mein iCalendar Reader schmeißt jetzt (endlich) wieder folgenden Fehler bei jedem Einlesen:

12.07.2019 00:04:22 | 49363 | ERROR | TimerPool | iCal Calendar Reader (UpdateCalendar): <br />
<b>Warning</b>: Invalid argument supplied for foreach() in <b>/var/lib/symcon/modules/.store/de.bumaas.ical/iCalCalendarReader/iCalImporter.php</b> on line <b>351</b><br />
<br />
<b>Warning</b>: Invalid argument supplied for foreach() in <b>/var/lib/symcon/modules/.store/de.bumaas.ical/iCalCalendarReader/iCalImporter.php</b> on line <b>351</b><br />
<br />
<b>Warning</b>: Invalid argument supplied for foreach() in <b>/var/lib/symcon/modules/.store/de.bumaas.ical/iCalCalendarReader/iCalImporter.php</b> on line <b>351</b><br />

und weitere 22 Stk. …

<br />

Hab mal geschaut, zeile 351 -> „BYDAY“ …

Habe davon diese Zeilen (herausgezogen) in meiner ICS Datei
[

27: RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
34: RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
1796: RRULE:FREQ=WEEKLY;COUNT=38;BYDAY=MO
2980: RRULE:FREQ=WEEKLY;COUNT=12;BYDAY=MO
3453: RRULE:FREQ=WEEKLY;COUNT=3;BYDAY=MO
3524: RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20180526T092959Z;BYDAY=SA
4318: RRULE:FREQ=WEEKLY;COUNT=1;BYDAY=WE
4557: RRULE:FREQ=WEEKLY;COUNT=2;BYDAY=SA
4574: RRULE:FREQ=WEEKLY;COUNT=6;BYDAY=TU
4847: RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20171125T094459Z;BYDAY=SA
4879: RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20171021T084459Z;BYDAY=SA
4894: RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20171114T155959Z;BYDAY=TU
6856: RRULE:FREQ=WEEKLY;UNTIL=20170413;BYDAY=TH
7642: RRULE:FREQ=WEEKLY;UNTIL=20170414;BYDAY=FR
7658: RRULE:FREQ=WEEKLY;UNTIL=20170412;BYDAY=WE
7675: RRULE:FREQ=WEEKLY;UNTIL=20170411;BYDAY=TU
7692: RRULE:FREQ=WEEKLY;UNTIL=20170410;BYDAY=MO
8540: RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20170208;BYDAY=SU,MO,TU,WE,TH,FR,SA
8612: RRULE:FREQ=WEEKLY;COUNT=11;BYDAY=SA
8756: RRULE:FREQ=WEEKLY;COUNT=1;BYDAY=WE

LG
lueralba

Welche Version nutzt du? Sollte eigentlich mit 2.00 build 26 behoben sein.

Gruß

Burkhard

Moment bitte !

Ist in der aktuellen Version nun behoben.

Das sieht gut aus :slight_smile:

Beta build 28

P.S.:
Dabei habe ich wieder einen Termin im Kalender (wie folgt):

Der wird nicht gefunden …

Wenn ich den Kalender lade, taucht er nicht in der kleinen Testanzeige auf.
Habe schon auf 30000min Vorlauf eingestellt.

Habe nur ich so komische Einträge ? :smiley:

Gruß
lueralba

taucht er mit Fehlermeldung im Logfile auf? Es gibt noch Termine (mit ungewöhnlichen Zeitzonen), die nicht verarbeiten werden können.

Die Hardcopies bringen nicht soviel:D

Besser wäre das Event im iCal Format.

Ich hoffe der Ausschnitt reicht :slight_smile:

BEGIN:VEVENT
DTSTART;TZID=Europe/Berlin:20190112T200500
DTEND;TZID=Europe/Berlin:20190112T202000
RRULE:FREQ=DAILY;UNTIL=20190301T190500Z;INTERVAL=48
DTSTAMP:20190712T184415Z
UID:8E72171F-5556-4007-B067-31EE1F08873C
CREATED:20190111T134004Z
DESCRIPTION:
LAST-MODIFIED:20190418T111003Z
LOCATION:
SEQUENCE:3
STATUS:CONFIRMED
SUMMARY:Hundefutter
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Berlin:20190415T200500
DTEND;TZID=Europe/Berlin:20190415T202000
RRULE:FREQ=DAILY;INTERVAL=48
DTSTAMP:20190712T184415Z
UID:A0CD48A6-26B0-4BD2-AA32-E3F0712671E3
CREATED:20190418T111003Z
DESCRIPTION:
LAST-MODIFIED:20190418T111003Z
LOCATION:
SEQUENCE:3
STATUS:CONFIRMED
SUMMARY:Hundefutter
TRANSP:OPAQUE
END:VEVENT

Im Logfile nix mit dem Terminnamen entdeckt.

Danke DIr
lueralba

Hallo,

kann bitte mal jemand helfen, ich bekomme die ECHO Ausgabe nicht in eine Variable geschrieben.
Bei mir schreibt es immer nur einen Termin rein.

Kann mir jemand den richtigen Befehl nennen das alle geschrieben werden?

Guten Morgen Horst,

Bei mir schreibt es immer nur einen Termin rein.
… das alle geschrieben werden?

Du schreibst, dass du einen NUR Termin in einer Variable siehst.
Also hast du dir eine Variable angelegt und verwendest anstelle ECHO … jetzt SETVALUE(… ?

Einfach wäre es für mich, DIr zu helfen, wenn Du mir nicht „meinen Codeschnipsel“ hier zeigst sondern was DU daraus gemacht hast.

Dann müsste ich jetzt nicht raten::rolleyes:

Grundsätzlich arbeitet der Befehl ICCR_GetCachedCalendar(12345) mit den abgefragten Kalenderdaten der Instanz (also auch mit den Terminlichen Vorgaben Nachlauf/Vorlauf). Mehr Daten hat der Befehl dann nicht zur Verfügung.
Das sollte man hierbei wissen.

Meine Variablen

//Tage zurück/Voraus anzeigen ( 0 = Heute)
$Vergangenheit=4;
$Zukunft=2;

schränken diese Daten nur noch weiter ein, da ich z.B. einen Kalender mit Nachlauf/Vorlauf 30/60 Tage holen und mir dann nur solche kleinen Zeiteinheiten anzeigen lasse.

Gruß
lueralba

'tschuldigung, da hast Du natürlich recht.

Ich habe nur diesen Teil geändert:

       {
            SetValueString(26387,"Horst - ".substr($calSingleData['FromS'] ,0,10)."  Ganztägig -> ".substr($calSingleData['ToS'] ,0,10)." ".$calSingleData['Name']."  ".$calSingleData['Location']."
");
        }else{
            SetValueString(26387,"Horst - ".$calSingleData['FromS']." ".$calSingleData['ToS'] ." ".$calSingleData['Name']."  ".$calSingleData['Location']."
");
        } 

aber in der Variablen steht leider immer nur ein Termin.

Was ich gerade gesehen haben er zeigt immer nur den letzten Eintrag an.

Ich hab das folgendermaßen abgeändert um alle Termine zu bekommen:

       if ($calSingleData['allDay'] == true) 
        {
          
            $str .= "".substr($calSingleData['FromS'] ,0,10)." ".$calSingleData['Name']."  ".$calSingleData['Location']."
";
        }else{
      
             $str .= "".$calSingleData['FromS']." ".$calSingleData['Name']."  ".$calSingleData['Location']."
";
        }    
    }    
} 
SetValue(42261,$str);

Hab da auch aus dem String noch „ToS“ rausgenommen, also lieber den String vom Original nehmen :wink:

Danke, werde es versuchen.

Gesendet von meinem SM-T835 mit Tapatalk

Danke,

hat gepasst, allerdings hat der Punkt hinter $str bei mir einen Fehler verursacht.

Uuupss, nur der Zeilenumbruch wird ignoriert :mad:

Bei mir finde ich bei deinem Beispiel:

13.07.2019 10:32:05 | 59072 | ERROR   | iCal Calendar Reader | Error 'The INTERVAL rule part must be a positive integer (> 0)' in CalRRule 'Hundefutter': Array
(
    [FREQ] => DAILY
    [UNTIL] => DateTime Object
        (
            [date] => 2019-03-01 20:05:00.000000
            [timezone_type] => 3
            [timezone] => Europe/Berlin
        )

    [INTERVAL] => 4 8
    [DTSTART] => DateTime Object
        (
            [date] => 2019-01-12 20:05:00.000000
            [timezone_type] => 3
            [timezone] => Europe/Berlin
        )

)

Das Interval ist meiner Meinung nach falsch: ‚4 8‘ statt ‚48‘