+ Antworten
Ergebnis 1 bis 2 von 2
  1. #1
    Registriert seit
    Sep 2019
    Beiträge
    177

    Standard Kalenderübersicht, Terminübersicht als Tabelle (ohne Meldevariable)

    Hallo,

    ich bastle gerade an einem WebFront als Übersicht für den Tag.
    Wetterdaten, welche Musik/Radio läuft gerade im Haus, sind bestimmt Fenster geöffnet,...

    Hätte da auch gerne einen Kalender als Übersicht.
    Soweit ich das ical Modul verstehe muss ich Termine vorher als Meldevariable eintragen.
    Wenn ich aber vorab nicht weiß wie ein Termin benannt wird geht dies nicht.

    z.B. meine Frau trägt in meinen Google-Kalender einen Termin ein "17:00 Kind zum Sport bringen" (rein fiktiv).
    Da ich vorher den Termin und Wortlaut nicht kannte wird er nicht über das Modul gezogen (soweit ich es verstehe)

    Gibt es eine Option aus einem oder mehreren Kalendern die nächsten 3-5-10 Termine (wie auch immer) anzuzeigen?

  2. #2
    Registriert seit
    Apr 2019
    Ort
    Etelsen bei Bremen
    Beiträge
    681

    Hi,
    ich habe es selbst programmiert. Ich wollte die Termine von Heute + nächsten 2 Tage haben. Script ist nicht so aufwendig. Ich führe es einmal Nachts aus und dann immer wenn ich aktuellen Text haben will.

    Script sieht so aus:
    Code:
    <?php
    ICCR_UpdateCalendar(14290); // Instanz von meinem Kallender
    $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 = 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); // Variable die IPS sagt ob ich Urlaub habe
    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 = "";
        }
        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 = "";
        }
        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); // Stringvariable die den Text enthält
    ?>
    Diesen Text gibt dann auch Alexa ab und zu aus.

    Vielleicht eine Idee für dich.

    Wenn Du eine hübsche Ansicht fürs Web-Front brauchst kannst Du es einbinden wie in der Doku empfohlen und Du hast die typische Kalender-Ansicht.

    Ralf
    Geändert von HarmonyFan (24.05.20 um 18:32 Uhr)
    IPS 5.4 Unlimited / Docker / Synology DS415+

Ähnliche Themen

  1. Tabelle mit Schaltzeiten erstellen
    Von caesar im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 18.01.18, 18:29
  2. HTML Tabelle auswerten
    Von BommelPommel im Forum Skripte, PHP, SQL
    Antworten: 7
    Letzter Beitrag: 23.07.17, 14:44
  3. Button (Image) Feld ohne Bild als Schaltfläche ?
    Von UH368 im Forum IPSStudio & IPSView
    Antworten: 1
    Letzter Beitrag: 07.06.17, 10:33
  4. PHP auch ohne IPS als Scriptsprache verwenden ?
    Von bbernhard im Forum Off Topic
    Antworten: 2
    Letzter Beitrag: 12.03.17, 10:28
  5. Antworten: 5
    Letzter Beitrag: 07.06.12, 09:02