Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. HTML Tabelle für ical Adapter (mehrere Instanzen)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    HTML Tabelle für ical Adapter (mehrere Instanzen)

    This topic has been deleted. Only users with topic management privileges can see it.
    • liv-in-sky
      liv-in-sky @sigi234 last edited by

      @sigi234 ja - wäre auch mein nächster vorschlag gewesen - könnte man dann farblich besser anpassen

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

        @liv-in-sky Funktioniert perfekt. Kann man auch eine Spalte (Zeit) ausblenden?

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

          @bergjet ne - leider nicht - das tabellen template braucht immer eine feste spaltenanzahl - bedeutet: weniger spalten - anderes script

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

            @liv-in-sky sagte in HTML Tabelle für ical Adapter (mehrere Instanzen):

            ne - leider nicht

            Auch nicht schlimm, danke jedenfalls.

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

              hat jmd lust diese script zu testen bevor es in den ersten post kommt

              änderungen:

              @bergjet - man kann sich nur die anfangszeit anzeigen lassen, dadurch wird spalte kleiner (nurAnfangsZeit)

              man kann sich das ganze nach ical instanz anzeigen lassen

              • die farben dafür werden jetzt aus dem instance setting genommen - dort kann man die farbe für jeden kalender einstellen, damit wird besser sichtbar, was für ein kalender es ist, wenn man nach instanzen sortiert - ohne sortierung nach instanz, wird die farbe des ersten kalenders genommen
              • man kann/muss für die sortierung nach instance namen in eine variable für jede instance eintragen (dpTSJsonCalName)

              test scipt:

               //@liv-in-sky 2020  8.1.2021 15:00
              
              
              //HIER WIRD PFAD UND FILENAME DEFINIERT
              const path = "/htmlexample.html";                   //FIlenamen definieren
              const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
              let   braucheEinFile=false;                          // bei true wird ein file geschrieben
              let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
              let   braucheMaterialDesignWidget=false;             // bei true wird ein json in einen dp geschrieben - MUSS ANGELEGT WERDEN !!!
              let   braucheMaterialDesignWidgetTable=false;        // bei true wird ein json in einen dp geschrieben - MUSS ANGELEGT WERDEN !!!
              let dpVIS="0_userdata.0.Tabellen.iCALTermine";         //WICHTIG wenn "braucheEinVISWidget" auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
              let dpTSJson=["ical.0.data.table","ical.1.data.table"];                        //mehrere Instanzen zusammenfügen
              let dpTSJsonCalName=["LIV-IN-SKY","My second Ical Instance"];                        //mehrere Instanzen zusammenfügen
              let dpMaterialWidget="0_userdata.0.Tabellen.IcalMaterialWidget";            // WICHTIG wenn braucheMaterialDesignWidget auf true MATERIALDESIGN List Widget - datenpunkt anlegen : zeichenkette  
              let dpMaterialWidgetTable="0_userdata.0.Tabellen.IcalMaterialWidgetTable";  // WICHTIG wenn braucheMaterialDesignWidgetTable auf true MATERIALDESIGN Table Widget - datenpunkt anlegen: zeichenkette  
               
              let wievielTage=7
              //im MD List Widget
               let farbeNurEinTag="yellow"                               //statusBarColor im MD List Widget wenn nur noch ein tag
               let farbeStandardBar="#d5d3b4"                            ////statusBarColor im MD List Widget wenn normal
              //im HTML Widget
               let bildergröße=24
               let farbeEinTagHTML="#CB9529"                             // Farbe der zeile in html tabelle wenn unter einem tag:
               let styleEinTagHTML="span"                                  // style der zeile wenn unter einem tag:  möglich b fett; i kursiv; span normal
              
               let sortedByInstanz=false;
               let nurAnfangsZeit=true;
               let ganzTaegigAusdruck="⇄";                             // "ganztägig" oder "den ganzen Tag" oder «
               let bisVariable="⟼"
              
              
               let mySchedule3="  15,45 * * * * ";                       //jede stunde um 15 minuten und 45 minuten
              
              //---------------------------------------
              
              //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 4
              var htmlFeld1='EVENT';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
              var htmlFeld2='ZEIT';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
              var htmlFeld3='DATUM';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
              var htmlFeld4='WTAG';        var Feld4lAlign="center";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
              var htmlFeld5='TAGE';        var Feld5lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
              //-----------------------------------
              
              
              //ÜBERSCHRIFT ÜBER TABELLE
              let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
              let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
              const htmlFeldUeber='Ical';              // Überschrift und Signature
              const htmlFarbUber="black";                         // Farbe der Überschrift
              const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
              const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
              //MEHRERE TABELLEN NEBENEINANDER
              let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
              const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
              const htmlFarbZweiteTabelle="black";                // Farbe der Überschrift bei jeder 2.ten Tabelle
              const htmlFarbTableColorUber="black";               // Überschrift in der tabelle - der einzelnen Spalten BDBDBD
              //ÜBERSCHRIFT SPALTEN
              const UeberSchriftHöhe=25;                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
              const LinieUnterUeberschrift="2";                   // Linie nur unter Spaltenüberschrift - 
              const farbetrennungsLinie="white";
              const farbeLinieUnterUeberschrift="black";
              const groesseUeberschrift=16;
              const UeberschriftStyle="normal"                     // möglich "bold"
              //GANZE TABELLE
              let abstandZelle="2";
              let farbeUngeradeZeilen="#333333"//"#1C1C1C";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
              let farbeGeradeZeilen="black"//"black";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
              let weite="auto";                                     //Weite der Tabelle
              let zentriert=true;                                   //ganze tabelle zentriert
              const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
              const htmlSchriftart=""     //"Jura-DemiBold"   //"RobotoCondensed-Bold"   //"Helvetica";
              const htmlSchriftgroesse="16px";
              //FELDER UND RAHMEN
              let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
              const htmlFarbFelderschrift="#D8D8D8";                  // SchriftFarbe der Felder
              const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
              const htmlFarbTableColorGradient1="orange";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
              const htmlFarbTableColorGradient2="green";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
              const htmlFarbTableBorderColor="transparent";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
              let htmlRahmenLinien="cols";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
              const htmlSpalte1Weite="250px";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
              
              // HIER NICHTS  ÄNDERN
              
              let borderHelpBottum;
              let borderHelpRight;
              let htmlcenterHelp;
              let htmlcenterHelp2;
              
              if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
              if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
              if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
              if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
              zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
              zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
              
              
              const htmlZentriert='<center>'
              const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                 "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                 " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                 " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                 " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                 "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                                 " </style></head><body> <div>";
              //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
              const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                    "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
              const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
              const htmlTabUeber3="</tr>";
              
              
              //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
              
              var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td>";
              var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+
                                 "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                 "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld5+"&ensp;</td>";
                                     //------------------------------------------------------
              
              
              
              var htmlOut="";
              var mix;
              var counter;
              var val1; var val2; var val0; var val3; var val4;
              var htmlTabUeber="";
              //var wochentag = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag' ]
              var myJsonWidget=[]; 
              var myJsonWidget2=[];
              var json1; var json2; var json3; var json4; var json44; var json5;
              let oldID="";
              function writeHTML(){
              
              
              
              htmlOut="";
              
              counter=-1;
              htmlTabUeber="";
              switch (mehrfachTabelle) { 
                 case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                 case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                 case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2+htmlTabUeber2+htmlTabUeber3; break;
                 case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
              }; 
              if (!UeberschriftSpalten) {htmlTabUeber=""}  
              
              //--------------------------------------------------------------------------------------------------------------------------------------------------
              //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
              //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2,val3,val4!!!------------------------------------------------------------
              //--------------------------------------------------------------------------------------------------------------------------------------------------
              var myData=[]
              for (let i=0;i<dpTSJson.length;i++) {
                 let myDpInput=(getState(dpTSJson[i]).val);
                   for  (let b=0;b<myDpInput.length;b++) { myDpInput[b].myIDID=dpTSJsonCalName[i];}
                
                 myData=myData.concat(myDpInput)          //myData=myData.concat(getState(dpTSJson[i]).val)
              }
              //log(myData[0])
              
              if (!sortedByInstanz){
              myData.sort(function(a, b){
                                             return new Date(a._date).getTime() - new Date(b._date).getTime();      // return parseInt(new Date(b.date).getTime()) - parseInt(a.date);
                                            });}
              if (false){
              myData.sort(function (alpha, beta) {
                           if (alpha.event.toUpperCase() > beta.event.toUpperCase())
                              return 1;
                           if (beta.event.toUpperCase() > alpha.event.toUpperCase())
                              return -11;
                           return 0;
                          });      
              }                         
              
              
                 
              
              
              //myData=getState(dpTSJson).val;
              //log(JSON.stringify(myData))
              for (var index in myData ) {             // hier eigene schleife definieren
              
              if(oldID!=myData[index].myIDID && sortedByInstanz) {
              
                  counter++;
                  val0="<font color=\""+myData[index]._calColor +"\"><b>"+myData[index].myIDID;
                  val1="";
                  val2="";
                  val3="";
                  val4="";
                  oldID= myData[index].myIDID
                  tabelleBind();
                  
              } //else {
              
              
                   if(Math.ceil(Math.floor( ((new Date(myData[index]._date).getTime() - new Date().getTime())/60/60/24) )/1000 )-1 <=wievielTage){
                      counter++
                     val0=myData[index].event
                     let val2help=myData[index].date
                   //  log(val2help+"  ---  "+myData[index].event)
              
              
                     nurAnfangsZeit ? val1=val2help.replace(/.+? (\d\d\:\d\d)-\d\d\:\d\d/,"$1") : val1=val2help.replace(/.+? (.+)/,"$1") //ZEIT
                  //   log(val1.includes(".")+ " val1= "+val1)
                    
                     val1.includes(".") && nurAnfangsZeit ? val1=ganzTaegigAusdruck : val1=val1             //&& !nurAnfangsZeit
                     !val2help.includes(":") && !nurAnfangsZeit ? val1=ganzTaegigAusdruck : val1=val1  
                     val2=val2help.replace(/(.+?) .+/,"$1") //DATUM
                     
                      let val3help=false; // zuständig für Farbe heute
              
              //////////// IST GERADE AM LAUFEN - anderes Format        
                      if (val2=="&#8594;" ) {val1=val2help.replace(/.+? .+? (.+)/, bisVariable+"$1");val2=formatDate(getDateObject(myData[index]._date), "DD.MM.YYYY")}
                      
              /////////// HEUTE       
                     // log(formatDate(getDateObject(myData[index]._date), "DD.MM") +"   "+ formatDate(getDateObject((new Date().getTime())), "DD.MM"))
                      if (formatDate(getDateObject(myData[index]._date), "DD.MM") == formatDate(getDateObject((new Date().getTime())), "DD.MM") ) {
                             val3help=true;        //FARBE HEUTE       
                             
                             val4=0;               // TAGE HEUTE  
              ////////// AB MORGEN               
                      } else{
                            let val44help=Math.floor( ((new Date(myData[index]._date).getTime() - new Date().getTime())/60/60/24) )/1000
                           // log(val44help.toString())
              
                            val4=Math.ceil(Math.floor( ((new Date(myData[index]._date).getTime() - new Date().getTime())/60/60/24) )/1000 )-1
                          //  log((Number(formatDate(getDateObject(myData[index]._date), "hh"))*60) + Number(formatDate(getDateObject(myData[index]._date), "mm")).toString() +"--------"+(Number(formatDate(getDateObject((new Date().getTime())), "hh"))*60) + Number(formatDate(getDateObject((new Date().getTime())), "mm")).toString())
                            if (   (Number(formatDate(getDateObject(myData[index]._date), "hh"))*60) + Number(formatDate(getDateObject(myData[index]._date), "mm"))  <  (Number(formatDate(getDateObject((new Date().getTime())), "hh"))*60) + Number(formatDate(getDateObject((new Date().getTime())), "mm")) ) 
                                   {val4=Math.ceil(Math.floor( ((new Date(myData[index]._date).getTime() - new Date().getTime())/60/60/24) )/1000 )}
                            }
              
                      val3=formatDate(getDateObject(myData[index]._date), "W")
                   
              
                      if (braucheMaterialDesignWidget || braucheMaterialDesignWidgetTable) {
                          json2=val1; json3=val2; json4=val3;json44=val4;json5=farbeStandardBar;
                          makeJsonWidget(json1,json2,json3,json4,json44,json5);}
              
                      if(val3help && sortedByInstanz){
                          val3="<font color=\""+myData[index]._calColor +"\"><"+styleEinTagHTML+">"+val3;
                          val4="<font color=\""+myData[index]._calColor +"\"><"+styleEinTagHTML+">"+val4;
                          val1="<font color=\""+myData[index]._calColor +"\"><"+styleEinTagHTML+">"+val1;
                          val2="<font color=\""+myData[index]._calColor +"\"><"+styleEinTagHTML+">"+val2;
                          val0="<font color=\""+myData[index]._calColor +"\"><"+styleEinTagHTML+">"+val0} 
                      if (val3help && !sortedByInstanz){
                               val3="<font color=\""+myData[0]._calColor +"\"><"+styleEinTagHTML+">"+val3;
                               val4="<font color=\""+myData[0]._calColor  +"\"><"+styleEinTagHTML+">"+val4;
                               val1="<font color=\""+myData[0]._calColor  +"\"><"+styleEinTagHTML+">"+val1;
                               val2="<font color=\""+myData[0]._calColor  +"\"><"+styleEinTagHTML+">"+val2;
                               val0="<font color=\""+myData[0]._calColor  +"\"><"+styleEinTagHTML+">"+val0
                           } 
                     oldID= myData[index].myIDID
                 
                   tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  
                 }
                 ; //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
              }
              //-------------------------------------------------------------------------------------------------------------------------------------------------
              //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
              //-------------------------------------------------------------------------------------------------------------------------------------------------
              
                    tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                   
              } // function ende
              
              //MAIN:
               
              schedule(mySchedule3,  function () {
               writeHTML();
               if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
              }); 
               writeHTML();
              
                 				 function tabelleBind(){
                   //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                 
                     switch (mehrfachTabelle) {  
                       case 1:  if(counter%2==0) {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>"; break; } else
                                                {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>"; break; } 
                     
                      case 2: if(counter%4==0){
                                 if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld5lAlign+">"+val4+"</td>"; } 
                                            else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>";} break;
                             }else{
                                            if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</td>"; } 
                                            else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val4+"</td></tr>";} break;}
                                                 
                      case 3:  if(counter%2==0)   {
                               if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td  align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</td>"; } 
                                            else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\" color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">"+val4+"</td>";} 
                                                             else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>";}
                                                       } break;} else{
                               if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</td>"; } 
                                            else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">"+val4+"</td>";} 
                                                             else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>";}
                                                       } break; }
              
                      case 4:  if(counter%8==0)   {
                               if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val4+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val3+"</td>"; } 
                                                else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">"+val4+"</td>";} 
                                                             else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val4+"</td></tr>";} 
                                                                               else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</td>";}}
                                                       } break;} else{
                               if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val3+"</td>"; } 
                                                else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">"+val4+"</td>";} 
                                                             else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val4+"</td></tr>";} 
                                                                               else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</td>";}}
                                                       } break; }
              
                   } //switch ende
              
              
              
              }
              
              function tabelleFinish() {
              
                    // tabelle fertigstellen
              switch (mehrfachTabelle) {  
                     case 1:    break;
              
                     case 2:    
                                if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                              
                                break;
              
                     case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                               if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                               if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                             
                                break;
                     case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                               if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                               if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                               if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                               break; }
                   
                                  var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                     var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                      
                      if (!htmlSignature) htmlUnter="";
                        //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                         var htmlOutVIS="";
                       //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                          if (htmlUberschrift) 
                              { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
              
                            } else {
                             zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
              
                               }
              
              // log("bin raus aus tabelleBind");
                         if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
              
               var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
               
               if (!htmlSignature) htmlUnter="";
              var htmlEnd="</table>"+htmlUnter+"</div></body>";
               //mit oder ohne überschrift - zentriert oder links
              htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
               //log(htmlOut);
               
              if (braucheMaterialDesignWidget) {
                   
                     setState(dpMaterialWidget,JSON.stringify(myJsonWidget2)); 
                     myJsonWidget2=[];
              }
              if (braucheMaterialDesignWidgetTable) {
                
                setState(dpMaterialWidgetTable,JSON.stringify(myJsonWidget)); 
                   myJsonWidget=[];
              }
              }
              
              
              
              
              function makeJsonWidget(vax1,vax2,vax3,vax4,vax44,vax5) {
              //log(vax3+vax6+htmlFeld1)
                 if ( braucheMaterialDesignWidgetTable) {
                myJsonWidget.push({
                    Event : vax1,
                    Zeit : vax2,
                    W_tag : vax4,
                    Datum : vax3,
                    Tage : vax44       
                }
              
                );}
              
              //	log(myJsonWidget)
              if (braucheMaterialDesignWidget) {
              let mysubText = `<div style="display: flex; flex-direction: row; line-height: 1.3; padding-left: 1px; padding-right: 8px; align-items: center;">
                              <div style="flex: 1;">${vax4}</div>
                              <div style="color: black; font-size: 18px; font-family: RobotoCondensed-LightItalic; text-align: right;">${vax3}</div>
                              </div>`
                     if(vax3<=1)   vax5=farbeNurEinTag               
                
                   myJsonWidget2.push({
                             text: vax2,
                             subText: mysubText,
                             statusBarColor: vax5,
                             image: vax1,
                             imageColor: "",
                             listType: "text",
                             showValueLabel: false,
                             name: vax2,
                             status: vax3,
                             Wert : vax3,
                             Hersteller : vax4
                         });
              }
               }
              
              
              
              
              

              Image 4.png

              nicht vergessen, die datenpunkte im neuen script anzugleichen und das alte script zu stoppen

              Stephan Schleich bergjet 2 Replies Last reply Reply Quote 0
              • Stephan Schleich
                Stephan Schleich @liv-in-sky last edited by

                @liv-in-sky Bei mir läufts 👍

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

                  @Stephan-Schleich danke für's feedback

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

                    Das aus 0 -> heute wird ist noch nicht mit drin oder?

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

                      @liv-in-sky sagte in HTML Tabelle für ical Adapter (mehrere Instanzen):

                      man kann sich nur die anfangszeit anzeigen lassen, dadurch wird spalte kleiner (nurAnfangsZeit)

                      Eine gute Idee, da bleibt die Tabelle kleiner. Läuft perfekt. Danke.

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

                        @Stephan-Schleich sagte in HTML Tabelle für ical Adapter (mehrere Instanzen):

                        Das aus 0 -> heute wird ist noch nicht mit drin oder?

                        wußte garnicht, dass dies gewünscht war - ist jetzt mit drin - kann man selbst wählen, was da stehen soll

                        var= ersetze0MitWert="heute"

                        sigi234 bergjet 2 Replies Last reply Reply Quote 0
                        • sigi234
                          sigi234 Forum Testing Most Active @liv-in-sky last edited by

                          @liv-in-sky

                          Was ist die Zeile 2 ?

                          let dpTSJson=["ical.0.data.table","ical.1.data.table","ical.2.data.table"];                        //mehrere Instanzen zusammenfügen
                          let dpTSJsonCalName=["LIV-IN-SKY","My second Ical Instance"];                        //mehrere Instanzen zusammenfügen
                          
                          liv-in-sky 1 Reply Last reply Reply Quote 0
                          • liv-in-sky
                            liv-in-sky @sigi234 last edited by

                            @sigi234

                            ich kann den kalender nicht aus den daten herausbekommen, daher wird hier der name selbst für den kalender bzw. instance gegeben

                            anzahl der instanzen muss anzahl der namen sein.

                            in der tabelle siehst du diese namen, wenn du nach instanz sortierst als erste zeile

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

                              @liv-in-sky sagte in HTML Tabelle für ical Adapter (mehrere Instanzen):

                              ist jetzt mit drin

                              Gibt es ein neues Script, oder muss ich die Variable suchen im Script?

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

                                @bergjet

                                im ersten post ist ein neues script - da ist es mit drin

                                variable: let ersetze0MitWert="heute"

                                bergjet Stephan Schleich 2 Replies Last reply Reply Quote 1
                                • bergjet
                                  bergjet @liv-in-sky last edited by

                                  @liv-in-sky Danke. Weshalb ist bei mir die Spaltenbezeichnung nicht in einer Reihe?
                                  Bildschirmfoto 2021-01-08 um 19.37.19.png

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

                                    @bergjet

                                    passiert normalerweise, wenn nicht genug platz ist - zieh das widget mal in die breite

                                    was ist mit der mülltonne - soll das so sein

                                    du weißt aber, dass es eine eigene tabelle für den abfall gibt

                                    https://forum.iobroker.net/topic/35399/html-tabelle-für-trashschedule-adapter

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

                                      @liv-in-sky sagte in HTML Tabelle für ical Adapter (mehrere Instanzen):

                                      zieh das widget mal in die breite

                                      Das wars.

                                      was ist mit der mülltonne - soll das so sein

                                      Die Mülltonne erscheint wenn heute Müll abgeholt wird, bei Geburtstagen heute, eine Torte usw.

                                      du weißt aber, dass es eine eigene tabelle für den abfall gibt

                                      Ja, hatte das Widget in Verwendung. Aber nun habe ich ein kleineres Anzeige Gerät und da ist die Anzeige zu groß.
                                      Man kann die zwar kleiner machen, aber wenn die Tonnen kleiner werden, ist der Text so klein, dass man ihn nicht mehr lesen kann.

                                      liv-in-sky 2 Replies Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @bergjet last edited by

                                        @bergjet

                                        kommt da eigentlich noch was unter dem letzten termin ? die erste spalte ist extrem breit. entweder ist da noch ein wert mit langen namen oder du hast im setting etwas eingestellt

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

                                          @bergjet

                                          nee - ich hab da was eingestellt

                                          ändere mal : const htmlSpalte1Weite="250px"; in :const htmlSpalte1Weite="auto";

                                          ca zeile 82

                                          oder du kannst ja mal mit "150px" testen

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

                                            @liv-in-sky sagte in HTML Tabelle für ical Adapter (mehrere Instanzen):

                                            ändere mal : const htmlSpalte1Weite="250px"; in :const htmlSpalte1Weite="auto";

                                            Damit geht es.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            949
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            16
                                            245
                                            25197
                                            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