Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [Frage] [Offen] Ical Color pro Termin

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Frage] [Offen] Ical Color pro Termin

    This topic has been deleted. Only users with topic management privileges can see it.
    • daes10
      daes10 @Homoran last edited by

      @homoran Irgendwie wird ja jedem Termin eine Farbe zugeordnet und in der iCal Datei abgegeben. Nur so kann ein anderers System, die Daten und Color Werte erkennen und auslesen oder nicht?

      Nur wie wird dies vom Adapter ausgewertet, welcher Termin welche Farbe hat.

      Dies würde mich interessieren. Dann würde ich einfach alle Termine so formatieren, dass der Adapter die Farben des jeweiligen Termins erkennt.

      Homoran 1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 last edited by

        @Feuersturm Hatte netterweise getestet (und arbeitet gerade ander doku) ... der kann das bestimmt schneller beantworten 🙂

        1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @daes10 last edited by

          @daes10 sagte in Ical Color pro Termin:

          Nur wie wird dies vom Adapter ausgewertet, welcher Termin welche Farbe hat.

          meines Wissens gar nicht!

          daes10 1 Reply Last reply Reply Quote 0
          • daes10
            daes10 @Homoran last edited by

            @homoran Doch eben, seit neuestem schon. Siehe Issue #263 auf Github Link

            Das war auch eine lang ersehnte Erneuerung von mir.

            Homoran 1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @daes10 last edited by Homoran

              @daes10 sagte in Ical Color pro Termin:

              seit neuestem schon

              dann muss ich mir das mal ansehen.
              aber im stable ist das noch nicht, oder?

              ist das überhaupt schon verfügbar?
              Ein issue ist nicht unbedingt schon ein commit.

              muss ich mir morgen am PC ansehen

              daes10 apollon77 2 Replies Last reply Reply Quote 0
              • daes10
                daes10 @Homoran last edited by daes10

                @homoran Habe es zumindest gedacht. Habe heute auf Version 1.12.1 (im stable) geupdatet und es stand was von Color pro Termin drin. Testen konnte ich noch nichts. Jedoch würde ich mich zum Testen anbieten.

                Jedoch muss es drin sein denn ich habe im Adapter folgende "neue" Option erhalten:

                "Ereignisfarbe als Box verwenden, falls verfügbar" in den HTML Einstellungen beim Adapter.
                dab1c9dc-1d0f-4231-83c7-96a51cbcaa1c-grafik.png

                Ausserdem sind bei mir nun die Kästchen vor dem Termin auch drin.

                3aa982b8-1ea8-4593-941d-db69d4422b2b-grafik.png

                Daher muss es fast im Stable drin sein 😉

                Feuersturm 1 Reply Last reply Reply Quote 0
                • apollon77
                  apollon77 @Homoran last edited by

                  @homoran sagte in [Frage] [Offen] Ical Color pro Termin:

                  aber im stable ist das noch nicht, oder?

                  Ne ical glaube noch nicht stable

                  1 Reply Last reply Reply Quote 0
                  • Feuersturm
                    Feuersturm @daes10 last edited by Feuersturm

                    @daes10 Nach meinem Verständnis kommt mit der neuen Option nur vor dem eigentlichen Termin ein Kasten welche die Farbe des Kalenders wiedergibt. Hierbei wird die Kalenderfarbe übernommen, welche hier gesetzt ist:
                    2813e36b-d4bc-4f4c-a549-e6039301343f-grafik.png
                    8a40ae37-0119-45df-ba63-3bdd48cbd295-grafik.png

                    Das eine Color Information aus einem einzelnen Termin (geht das überhaupt?) vom ical Adapter ausgewertet wird und der Text vom Termin farbig angemalt wird, ist hiermit nicht realisiert.

                    1 Reply Last reply Reply Quote 1
                    • bahnuhr
                      bahnuhr Forum Testing Most Active last edited by

                      @daes10
                      Mit einem kleinen Script kann man so etwas realisieren.
                      Schau es dir an:

                      // Script stammt von uhula und sputnik
                      // Das Script greift auf die ical.0.html zu und ändert den Text.
                      // Gespeichert wird das geänderte Script in "javascript.0.Sonstige.ical.html"
                      // Geändert und erweitert in 12/2017 von bahnuhr
                      
                      
                      var idCal = "ical.0";
                      var idCalTrigger   = idCal + ".data.trigger";
                      var idCalTable     = idCal + ".data.table";
                      var idCalHTML      = idCal + ".data.html";
                      var idCalHTMLtable = 'javascript.0.Sonstige.Ical.html';
                      var logging = false;
                      
                      var anz_ganztags = false;   // wenn true wird bei Ganztags-Terminen als time auch "ganzer Tag" angezeigt; wenn false erfolgt gar keine Anzeige
                      var anz_time = true;        // wenn true werden die Uhrzeiten angezeigt; wenn false erfolgt gar keine Anzeige
                      var balken = false;         // wenn true wird Balken links angezeigt; wenn false dann erfolgt keine Anzeige
                      var abstand_zwischen_Tagen = false; // wenn true wird ein Abstand zwischen den Terminen gesetzt, wenn diese nicht am gleichen Tag stattfinden
                      
                      function iCalToHTMLTable() {
                          var html     = "<table style='font-size:0.9em;'><tbody>";
                          var calTable = getState(idCalTable).val;
                          var inst     = getObject("system.adapter."+idCal);
                          var instopt  = inst.native;
                          var calendar = {};
                      
                          for (var i = 0; i < calTable.length; i++) { 
                              if (logging) log (calTable[i]);
                              var entry = calTable[i];
                              var _date = new Date(entry._date);
                              var _time = "";
                      
                      
                              // "_time und date" Variable festlegen
                              if (logging) log (entry);
                              if (entry.date.indexOf("&#8594") >= 0) {    // Pfeil ist enthalten
                                  if (entry.date.indexOf(":") >= 0) {         // Uhrzeit ist enthalten
                                      _time = "bis " + (entry.date).substring(entry.date.length-5,entry.date.length);
                                      entry.date = Datum_holen("tm");
                                  } else {
                                      _time= "ganzer Tag";
                                      entry.date = Datum_holen("tm");
                                  }
                              } else {                                    // Pfeil ist nicht enthalten
                                  if (entry.date.indexOf(":") >= 0) {         // Uhrzeit ist enthalten
                                      _time = (entry.date).substring(entry.date.length-11,entry.date.length);
                                  } else {
                                      _time= "ganzer Tag";
                                  }
                                  entry.date = getFormattedDate(_date);
                              }
                      
                      
                              if ( entry._calName != calendar.name ) {
                                  calendar = {};
                                  for (var c = 0; c < instopt.calendars.length; c++ ) {
                                      if (entry._calName == instopt.calendars[c].name ) {
                                          calendar = instopt.calendars[c];
                                          break;
                                      }
                                  }
                              }
                      
                              var _color = "color:"+calendar.color;
                              if (entry._class.includes("ical_today")) _color = "color:red;";
                              else if (entry._class.includes("ical_tomorrow")) _color = "color:orange";
                              else if (entry._class.includes("ical_dayafter")) _color = "color:yellow";
                      
                              var _bgcolor = "";
                              if(calendar.name == "Müll") {
                                  if(entry.event == "Bio Tonne") {
                                      _bgcolor = "#a0e878";
                                      _color="color:#a0e878";
                                  }
                                  else if(entry.event == "Restmüll Tonne") {
                                      _bgcolor = "#ce6f6f"; 
                                      _color="color:#ce6f6f";
                                  }
                                  else if(entry.event == "Blaue Tonne") {
                                      _bgcolor = "#508fdc";
                                      _color="color:#508fdc";
                                  }
                                  else if(entry.event == "Gelbe Tonne") {
                                      _bgcolor = "#eee06d";
                                      _color="color:#eee06d";
                                  }
                              }
                              else _bgcolor = calendar.color;
                              
                              if (balken === false) _bgcolor = "";
                              
                              if (_bgcolor !== "") html+="<tr style='background:transparent; background-image: linear-gradient("+_bgcolor+","+_bgcolor+"); background-size: 6px 90%; background-repeat: no-repeat;'>";
                              else html+="<tr>";
                      
                      if (i>0 && (abstand_zwischen_Tagen == true)){
                                  if (calTable[i].date != calTable[i-1].date){
                                      html+="<tr><td></td></tr>";
                                      html+="<tr><td></td></tr>";
                                      html+="<tr><td></td></tr>";
                                      html+="<tr><td></td></tr>";    
                                  }
                              }
                      
                                  var abstand = "15px;";
                                  if (balken === false) abstand = "3px;";
                                  html+="<td style='font-size:1.1em; padding-left:"+abstand+_color+"'>"+entry.date+"</td>";
                      
                              if ((_time === "ganzer Tag" && anz_ganztags === false) || anz_time === false) {
                                  html+="<td style='font-size:1.1em; padding-left:5px;"+_color+"'>"+entry.event+"</td>";                      // nur event anzeigen
                              } else {
                                  html+="<td style='font-size:1.1em; padding-left:5px;"+_color+"'>"+_time + "  " + entry.event+"</td>";       // time + event wird angezeigt
                              }
                              html+="</tr>";
                          }
                      
                          html+="</body></table>";    
                          setState(idCalHTMLtable, html);    
                      }
                      
                      function getFormattedDate(date) {
                          var month = (1 + date.getMonth()).toString();
                          month = month.length > 1 ? month : '0' + month;
                          var day = date.getDate().toString();
                          day = day.length > 1 ? day : '0' + day;
                          return day + '.' + month + '.';
                      }
                      
                      on({id: idCalTable, change: "ne"}, function (obj) {
                          iCalToHTMLTable();
                      });
                      
                      iCalToHTMLTable();
                      
                      
                      // als CSS einfügen ------------------------------------------------------------------
                      /*
                      .icalWarn { font-weight:normal; }
                      .icalWarn2  { color:red; }
                      .icalPreWarn { font-weight:normal; }
                      .icalPreWarn2  { color:orange; }
                      .icalPrePreWarn { font-weight:normal; }
                      .icalPrePreWarn2  { color:yellow; }
                      .icalNormal { font-weight:normal; }
                      
                      .icalNormal.iCal-Müll {
                          font-weight:normal;
                          color:#f87149;
                      }
                      .icalNormal.iCal-Märkte {
                          font-weight:normal;
                          color:#bc7dd8;
                      }
                      */
                      
                      
                      daes10 1 Reply Last reply Reply Quote 0
                      • daes10
                        daes10 @bahnuhr last edited by

                        @bahnuhr Vielen Dank! Werde mir das Skript, sobald ich Zeit finde anschauen und Testen.

                        Habe vor die ICal selbst zu kreiiren in Nodered, um so den absolut coolen Timetree Kalender über seine API mit dem ioBroker und somit mit dem ICal Adapter zu verknüpfen. (Da dieser Kalender ja leider keine externen Anbindungen oder Ical Dateien ausgibt, muss ich alles selber schreiben. 😉 )

                        In diesem Kalender können verschiedene Kalender übereinander angezeigt werden + jedem Termin eine Labelfarbe zugewiesen werden. Daher die Frage: "Farbe pro Termin".

                        Falls ich genug javascript Wissen mit diesem Projekt gesammelt habe und das Projekt in NodeRed funktioniert, werde ich vielleicht mal mich versuchen, meinen ersten Adapter zu schreiben und um die Timetree Applikation in den ioBroker aufzunehmen.

                        Müsste dann einfach mal schauen, wie ich dies mit den Farben hinbekomme und man das dann evtl. in den Ical Adapter miteinbaut.

                        Aber alles zu seiner Zeit 😊

                        Hoffe eines Tages auch stolzer Developer vom ioBroker zu werden! #iobrokerforever 😬 😂

                        1 Reply Last reply Reply Quote 1
                        • liv-in-sky
                          liv-in-sky @daes10 last edited by

                          @daes10

                          ich sehe keinen color eintrag für einzelterime - calColor ist die kalenderfarbe

                          Image 1.png

                          daes10 1 Reply Last reply Reply Quote 0
                          • daes10
                            daes10 @liv-in-sky last edited by

                            @liv-in-sky Ja ich weiss. Muss es wohl mit Labels oder Kategorien lösen.

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            296
                            Online

                            31.7k
                            Users

                            79.8k
                            Topics

                            1.3m
                            Posts

                            6
                            14
                            562
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo