<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Script: Alexa Listen pflegen und Anzeigen]]></title><description><![CDATA[<p dir="auto">dies ist ein script zur anzeige der alexa (echo) einkaufs- und todo-liste in der vis und iqontrol. es können einträge angelegt und gelöscht werden - die tabellen kann verschiedene einstellungen haben (schriftfarbe, hinterrundfarbe, überschrift, nebeneinander-tabellen-anzeige, ...)</p>
<p dir="auto">vielen dank an <a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a> für die integration in den alexa2 adapter</p>
<p dir="auto">dieses script entsand aus einem tabellenerzeugungs-script, welches hier als grundlage dient: <a href="https://forum.iobroker.net/topic/28021/html-table-f%C3%BCr-vis-oder-iqontrol-js-und-blockly">https://forum.iobroker.net/topic/28021/html-table-für-vis-oder-iqontrol-js-und-blockly</a></p>
<p dir="auto"><img src="/assets/uploads/files/1577696266628-test5.1.gif" alt="test5.1.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Beispiele für Tabellengestaltung </button><section style="display:none" class="spoiler-content"><br />
<img src="/assets/uploads/files/1577696807104-image-2.png" alt="Image 2.png" class=" img-fluid img-markdown" /> <img src="/assets/uploads/files/1577696806776-image-1.png" alt="Image 1.png" class=" img-fluid img-markdown" /><br />
</section></section><p></p>
<ul>
<li>es muss auch das schedule eingestellt werden - wann  werden die daten gelesen - standard jede minute</li>
<li>anschliessend werden die tabellen-einstellungen definiert</li>
<li>zum <span style="color:#ff0000">löschen</span> wurde das <span style="color:#ff0000">standard list widget</span> und zum <span style="color:#18a328">anlegen</span> das <span style="color:#18a328">standard input widget</span> gewählt - diese müssen mit den datenpunkten von euch "gefüttert" werden</li>
<li>die tabelle wird über ein standard html widget über binding eingebunden</li>
</ul>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">hier das widget zum import - es müssen alle datenpunkte angeglichen werden</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code>[{"tpl":"tplJquiInput","data":{"oid":"controll-own.0.AAATEST.Neues_ObjektTestHTMLAnlegen","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","label":"Input","digits":"0","size":"10","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"asString":true},"style":{"left":"262px","top":"18px","z-index":"200","width":"273px","height":"24px"},"widgetSet":"jqui"},{"tpl":"tplJquiSelectList","data":{"oid":"controll-own.0.AAATEST.TestHTMLAuswahlDelete","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","values":"{controll-own.0.AAATEST.TestHTMLAuswahlDeleteAuswahl}","texts":"{controll-own.0.AAATEST.TestHTMLAuswahlDeleteWert}","height":"234","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"open":false,"no_style":false},"style":{"left":"300px","top":"50px","width":"253px","height":"20px","text-align":"center","z-index":"200","font-size":"12px","color":"#5ff1ee"},"widgetSet":"jqui"},{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"{controll-own.0.AAATEST.TestHTML}"},"style":{"left":"18px","top":"34px","color":"","font-family":"SEGMENT","font-size":"large","width":"624px","height":"539px"},"widgetSet":"basic"}]
</code></pre>
<p dir="auto"></p></section></section><p></p>
<p dir="auto">was kann man alles einstellen:</p>
<ul>
<li>tabelle zentrieren</li>
<li>schriftart, schriftgröße</li>
<li>größe der zellen beispiele: <a href="https://forum.iobroker.net/post/348791">https://forum.iobroker.net/post/348791</a></li>
<li>tabelle aufteilen - nebeneinander - 1,2,3 oder4</li>
<li>farben: hintergrund allgemein, hintergrund tabelle (verlauf), felderfarbe, ...</li>
<li>gitterlinien - alle, nur spalten, nur zeilen, keine</li>
<li>eine gesamtüberschrift</li>
<li>tabellenwert-überschrift</li>
<li>schedule - wie oft wird geprüft</li>
<li>ob man eine datei möchte  - z.b. für iqontrol</li>
<li>überschriften der spalten in der tabelle ein- und abschalten</li>
</ul>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Einkaufsliste</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code> //@liv-in-sky 2022  14.2.-16:09
 
 const dpPrefix = "javascript."+ instance +".";
createState("Alexa_Listen.ALEXALists.Einkauf.Anlegen"             , "",{ name: 'Anlegen_VIS',  type: 'string', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.Einkauf.ALEXAEinkauf"           , { name: 'ALEXAEinkauf_VIS',  type: 'string', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.Einkauf.AuswahlDeleteWerte"   , { name: 'AuswahlDeleteWert_VIS',  type: 'string', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.Einkauf.AuswahlDeleteTexte"  , { name: 'AuswahlDeleteTexte_VIS',  type: 'string', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.Einkauf.Anzahl"  , { name: 'Einkauf_Anzahl_VIS',  type: 'number', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.Einkauf.DeleteALL"  , { name: 'Einkauf_DeleteALL',  type: 'boolean', role: 'switch', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.Einkauf.Refresh"  , { name: 'Refresh',  type: 'boolean', role: 'switch', read:  true,  write: true,});
//createState("Alexa_Listen.ALEXALists.Einkauf.AuswahlDelete"       , { name: 'AuswahlDelete_VIS',  type: 'number', read:  true,  write: true,});

createState("Alexa_Listen.ALEXALists.Einkauf.AuswahlDelete", {
name: 'AuswahlDelete',
 role: "state",
 type: "number",
 states: "0:choose ...;1:eeee;2:test1;3:test;",
 min: 0,
 max: 50,
 def: 0,
 read: true,
 write: true});




//HIER WIRD PFAD UND FILENAME DEFINIERT
const path = "/htmltelegram.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 - für iqontrol
let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben 
let   braucheTelegram=true;
let dpVIS=dpPrefix+"Alexa_Listen.ALEXALists.Einkauf.ALEXAEinkauf";                      // dp  für VIS-HTML-Basic-Widget // Datentyp: String
let dPDELETE=dpPrefix+"Alexa_Listen.ALEXALists.Einkauf.AuswahlDelete";                  // Datentyp: Werteliste
let dPDELETEWert=dpPrefix+"Alexa_Listen.ALEXALists.Einkauf.AuswahlDeleteWerte";         // Datentyp: String
let dPDELETEAuswahl=dpPrefix+"Alexa_Listen.ALEXALists.Einkauf.AuswahlDeleteTexte";      // Datentyp: String
let dpANLEGEN=dpPrefix+"Alexa_Listen.ALEXALists.Einkauf.Anlegen";                       // Datentyp: String
let dpAnzahl=dpPrefix+"Alexa_Listen.ALEXALists.Einkauf.Anzahl";                         // Datentyp: Number
let dpDelAll=dpPrefix+"Alexa_Listen.ALEXALists.Einkauf.DeleteALL";                      // Datentyp: Boolean
let dpRefresh=dpPrefix+"Alexa_Listen.ALEXALists.Einkauf.Refresh";                      // Datentyp: Boolean
let mySchedule=" */30 * * * * * ";                       
let sortList=1;                                                                         // SORTIERUNG 1=nach datum; 2 nach Einkauf's
let mitErstelldatum=false;
var symbolLink="⚪";                                                                    //  👎  💀 ❌  ⚪  ⚫ ⭕  🔴 🔵
let farbeSchalterON="blue";
//---------------------------------------

//HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
var htmlFeld1='Einkauf';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left or center
var htmlFeld2='Del';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
var htmlFeld3='Erstellt vor';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
//-----------------------------------


//hier werden die styles für die tabelle definiert
//ÜBERSCHRIFT ÜBER TABELLE
let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
const htmlFeldUeber='ALEXA Einkaufsliste';              // Überschrift und Signature
const htmlFarbUber="white";                         // 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 farbetrennungsLinie="white";
const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
//ÜBERSCHRIFT SPALTEN
const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
const farbeLinieUnterUeberschrift="white";
const groesseUeberschrift=16;
const UeberschriftStyle="normal"                     // möglich "bold"
//GANZE TABELLE
let abstandZelle="3";
let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
let farbeGeradeZeilen="#2E2E2E";                        //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="Helvetica";
const htmlSchriftgroesse="14px";
//FELDER UND RAHMEN
let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
const htmlFarbFelderschrift="lightblue";                  // SchriftFarbe der Felder
const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
const htmlSpalte1Weite="auto";                   //  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='&lt;center&gt;'
const htmlStart=    "&lt;!DOCTYPE html&gt;&lt;html lang=\"de\"&gt;&lt;head&gt;&lt;title&gt;Vorlage&lt;/title&gt;&lt;meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"&gt;"+
                   "&lt;style&gt; * {  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+"}"+
                   " &lt;/style&gt;&lt;/head&gt;&lt;body&gt; &lt;div&gt;";
//const htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\"&gt;"+htmlFeldUeber+"&lt;/p&gt;";                    
const htmlTabStyle= "&lt;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+");\"&gt;";
const htmlTabUeber1="&lt;tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \"&gt;";
const htmlTabUeber3="&lt;/tr&gt;";
/*
table td:first-child {}  //1
table td:nth-child(2) {} //2
table td:nth-child(3) {} //3
table td:last-child {}   //4
*/

const buttonScript =  '&lt;script&gt; function setOnDblClickCustomShop( myvalue ) {	var Self = this; var objID = myvalue;	vis.setValue(myvalue,true);  var2 = \"' + dpPrefix + 'Alexa_Listen.ALEXALists.Einkauf.Refresh\"; vis.setValue(var2,true);  console.log("www")  } &lt;/script&gt;'

// const buttonScript =  '&lt;script&gt; function setOnDblClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	Self.servConn.getStates(objID, (error, states) =&gt; {  console.log(states);  Self.servConn.setState(objID, true);  }); var2 = \"javascript.0.Alexa_Listen.ALEXALists.Einkauf.Refresh\"; Self.servConn.setState(var2, true); console.log("www")} &lt;/script&gt;'

//NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3

   	var htmlTabUeber2="&lt;td width="+htmlSpalte1Weite+" align="+Feld1lAlign+"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+" align="+Feld2lAlign+"&gt;&amp;ensp;"+htmlFeld2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+"&gt;&amp;ensp;"+htmlFeld3+"&amp;ensp;&lt;/td&gt;";
var htmlTabUeber2_1="&lt;td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld2+
                   "&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld3+"&amp;ensp;&lt;/td&gt;";
//------------------------------------------------------


var htmlTabUeber="";
var htmlOut="";
var mix;
var counter;
var warte;
var myIDArr=[];
let myDeleterArr;
var myRememberList="";
var myTelegram=false;
var telegramString="telegram.0";
//HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
var val1; var val2; var val0; var val3; var valSort; 

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_1+htmlTabUeber2+htmlTabUeber3; break;
   case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
};   
if (!UeberschriftSpalten) {htmlTabUeber=""}

var valID; var myListWerte=""; var myListAuswahl="";
//--------------------------------------------------------------------------------------------------------------------------------------------------
//---------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 !!!---------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------
var myArr=[]; var myList=""; var myListArr=[]; myIDArr=[]; myDeleterArr=[];

 let myhelerArr=getState("alexa2.0.Lists.SHOPPING_LIST.json").val;
 myDeleterArr.push("alexa2.0.Lists.SHOPPING_LIST.json")

myListArr.push('0'+":"+'choose ...'+";");
            myListWerte=myListWerte+"choose ..."+";";
           myListAuswahl=myListAuswahl+(0+";");
           myIDArr.push("dummy");
$('alexa2.0.Lists.SHOPPING_LIST.items.*.value').each(function(id, i) {           // hier eigene schleife definierenalexa2.0.Lists.SHOPPING_LIST.items.0f43141e-029c-4860-bcd0-828702b0dc86.value
        
        let ida=id.split('.')
       // log(myhelerArr)
       // log(myhelerArr.includes(ida[5]))
         if(myhelerArr.includes(ida[5])) {
         
          if(!getState(id.replace("value","completed")).val) {
           val0=getState(id).val;
           val1=getState(id.replace("value","completed")).val; 
           val2=valSort=getState(id.replace("value","updatedDateTime")).val; 
           valID=getState(id.replace("value","id")).val; 
           myIDArr.push(valID);
           var yy= (Math.round((new Date()).getTime() / 1000))-Math.round(val2/1000);
           val2=formatDate(getDateObject(val2), "TT.MM(SS:mm)")
           val3=(Math.floor( ((yy)/60/60/24) )+"d "+ Math.floor(((yy)/60/60) % 24) +"h "+ Math.floor( ((yy)/60) % 60 )+"m")
        //   if (val1==false) {val1="❌"} else{val1="✅"}
            let valButton=id.replace("value","#delete")
            myDeleterArr.push(id.replace("value","#delete"))
           //log(valButton)
           val1="&lt;button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustomShop\(\'"+valButton+"\')\"&gt;"+symbolLink + "&lt;/button&gt; &lt;font color=\""+farbeSchalterON+"\"&gt;";
           myArr.push([val0,val1,val2,val3,valSort]);
           val0=val0.replace(/,/g,'-');  
           myListArr.push((i+1)+":"+val0+";");
           myListWerte=myListWerte+val0+";";
           myListAuswahl=myListAuswahl+(i+1)+";";
          }} else{ //log('alexa2.0.Lists.SHOPPING_LIST.items.'+ida[5]);
                   deleteObject('alexa2.0.Lists.SHOPPING_LIST.items.'+ida[5], true);
          }
});
     //  log(myIDArr.toString())

        //log (myListArr.toString());
       for (var x=0;x&lt;myListArr.length;x++){
         myList=myList.concat(myListArr[x]);
        // log(myListArr[x]);
         //log(myList);

       }
      // log("-----------myList : "+myList)
       if(myList!=myRememberList){
           myTelegram=true; //log("ist true")
           setStateDelayed(dPDELETEWert, myListAuswahl,500);        
           setStateDelayed(dPDELETEAuswahl,  myListWerte,500);
         var timeout = setTimeout(function () {
           // var obj = getObject(dPDELETE);
            // log("11---"+myList);
           // obj.common.states=myList;
            myRememberList=myList;
            //log("22---"+myList);
           extendObject(dPDELETE, {common: {states: myList}});   
         }, 400);
       }
 //SORT

   if (sortList==1) {
                 myArr.sort(function (alpha, beta) {
              if (alpha[4] &gt; beta[4])
                 return -1;
              if (beta[4] &gt; alpha[4])
                 return 1;
              return 0;
             });
                    } else
       {          myArr.sort(function (alpha, beta) {
              if (alpha[0].toUpperCase() &gt; beta[0].toUpperCase())
                 return 1;
              if (beta[0].toUpperCase() &gt; alpha[0].toUpperCase())
                 return -1;
              return 0;
             });

                    }

                    telegramString="";
  for (var x=0 ; x&lt;myArr.length ; x++) {
      counter++;
     //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 2 Felder definiert, braucht man hier 2 Werte
       val0=myArr[x][0];
       val1=myArr[x][1];
       var val2help=myArr[x][2]
       var val3help=myArr[x][3];
       if (mitErstelldatum) {val2=val3help+" am "+val2help;} else {val2=val3help}
      
         
       if (backgroundAll) {
          telegramString=telegramString+ myArr[x][0] + " - "+myArr[x][2] + '\n';   // "-"+ myArr[x][1]  +
         
       }  
        tabelleBind(); 
  }
//-------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------------

      tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
     
} // function ende

//MAIN:
 
schedule(mySchedule,  function () { 
  var timeout = setTimeout(function () {
  if(!getState(dpDelAll).val) writeHTML();
    if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
    }, 500);

}); 
 var timeout = setTimeout(function () {
writeHTML(); 
 }, 2000);                                  //     &lt;tdalign

 function tabelleBind(){
   //  counter=counter+mehrfachTabelle;
       switch (mehrfachTabelle) { 

         case 1: if(counter%2==0)         {  htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;}else    
                                          {  htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;}
         case 2: if(counter%4==0){
                    if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\" align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } 
                               else {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;
                      }else{
                                if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } 
                               else {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;}
                                    
         case 3:if(counter%2==0)   {
                    if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } //Teil1 c=0
                               else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        "; \"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} //Teil 2 c=1
                                                else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} //Teil 3 c=3
                                          } break;}else{
                    if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } 
                               else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} 
                                                else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";}
                                          } break;}                                          


         case 4:  // counter=counter+8;
                   if(counter%8==0)   {
                   if(counter%4==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } // teil1
                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} //teil 2
                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} //teil 4
                                                                  else    {htmlOut  = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";}} //teil 3
                                          } break;}else{
                   if(counter%4==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } //teil 1
                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} // teil 2
                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} // teil 4
                                                                  else    {htmlOut  = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";}} //teil 3
                                          } break;}                                    
        } //switch ende

}

function tabelleFinish() {

switch (mehrfachTabelle) {  
       case 1:    break;

       case 2:    
                  if(counter%2==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, '&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;');
                
                  break;

       case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%3==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");        
                 if(counter%3==0)      htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
               
                  break;
       case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%4==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%4==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");    
                 if(counter%4==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");      
                 break; }
     
         var htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\"&gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/p&gt;"; 
       var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;";
        
        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+"&lt;/table&gt;" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;";
            if (htmlUberschrift) 
                { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter+ buttonScript : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter+ buttonScript ;

              } else {
               zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter+ buttonScript :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter+ buttonScript;

                 }
                 

  // log("bin raus aus tabelleBind");
           if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );

 var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;"

 if (!htmlSignature) htmlUnter="";
  var htmlEnd="&lt;/table&gt;"+htmlUnter+"&lt;/div&gt;&lt;/body&gt;";
 //mit oder ohne überschrift - zentriert oder links
htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
 //log(htmlOut);
 setState(dpANLEGEN,"");
 setState(dpAnzahl,(counter+1));
 setState(dPDELETE,0);

 
 if(myTelegram &amp;&amp; braucheTelegram){ 
     //log("sende");
     myTelegram=false;
     
    sendTo('telegram.0', {
        
   text: (telegramString),
   type: 'text'
   });

telegramString="";

}
} // function ende

setTimeout(function () {
on({id: dPDELETE, ack: false, change: "ne"}, function (obj) { 
  
   let a=getState(dPDELETE).val;
   if (a!=0){
   let toDelete=myIDArr[getState(dPDELETE).val];
   var stateHelp="alexa2.0.Lists.SHOPPING_LIST.items."+toDelete+".#delete"
   setState(stateHelp,true);
   var timeout = setTimeout(function () {
   writeHTML(); }, 4000);
 

   }
  // log("1+bin im on !!!+++!"+a+stateHelp)
   });

   on({id: dpANLEGEN, ack: false, change: "ne"}, function (obj) { 
      // log(getState(dpANLEGEN).val+"----aa");
       if(getState(dpANLEGEN).val!="") {
    setState("alexa2.0.Lists.SHOPPING_LIST.#New",getState(dpANLEGEN).val)
       var timeout = setTimeout(function () {
   writeHTML(); }, 2000);
       } 
       
   });

       on({id: dpRefresh, ack: false, change: "any"}, function (obj) { 
       //log(getState(dpANLEGEN).val+"----refresh");
       var timeout2 = setTimeout(function () {
   writeHTML(); }, 4000);
      // }
   
   });  

      on({id: myDeleterArr, ack: false, change: "any"}, function (obj) { 
       //log(getState(dpANLEGEN).val+"----refresh");
       var timeout2 = setTimeout(function () {
   writeHTML(); }, 4000);
  
      // }
   
   });

   
     on({id: dpDelAll, ack: false,val: true}, function (obj) { 
 let i;
 for (i=0;i&lt;myIDArr.length;i++) {//log("hier : "+myIDArr[i]);
   if (myIDArr[i]!="dummy") {
   let toDelete=myIDArr[i];
      setTimeout( function timer(){
      var stateHelp="alexa2.0.Lists.SHOPPING_LIST.items."+toDelete+".#delete"
   log("Statehelp: "+stateHelp)
   setState(stateHelp,true);
   }, i*2500 );

  
   }
   }
   log(i.toString())
   var timeout = setTimeout(function () {
        setState(dpDelAll,false);
        writeHTML(); }, (1+myIDArr.length)*1500);
  
  // log(stateHelp)

 });

}, 5000);




</code></pre>
<p dir="auto"></p></section></section><p></p>
<hr />
<hr />
<hr />
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">ToDo-Liste</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code> //@liv-in-sky 2022  14.2.-16:09

 const dpPrefix = "javascript."+ instance +".";
createState("Alexa_Listen.ALEXALists.ToDo.Anlegen"             , "",{ name: 'Anlegen_VIS',  type: 'string', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.ToDo.ALEXAToDo"           , { name: 'ALEXAToDo_VIS',  type: 'string', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.ToDo.AuswahlDeleteWerte"   , { name: 'AuswahlDeleteWert_VIS',  type: 'string', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.ToDo.AuswahlDeleteTexte"  , { name: 'AuswahlDeleteTexte_VIS',  type: 'string', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.ToDo.Anzahl"  , { name: 'ToDo_Anzahl_VIS',  type: 'number', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.ToDo.DeleteALL"  , { name: 'ToDo_DeleteALL',  type: 'boolean', role: 'switch', read:  true,  write: true,});
createState("Alexa_Listen.ALEXALists.ToDo.Refresh"  , { name: 'Refresh',  type: 'boolean', role: 'switch', read:  true,  write: true,});
//createState("Alexa_Listen.ALEXALists.ToDo.AuswahlDelete"       , { name: 'AuswahlDelete_VIS',  type: 'number', read:  true,  write: true,});

createState("Alexa_Listen.ALEXALists.ToDo.AuswahlDelete", {
name: 'AuswahlDelete',
 role: "state",
 type: "number",
 states: "0:choose ...;1:eeee;2:test1;3:test;",
 min: 0,
 max: 50,
 def: 0,
 read: true,
 write: true});




//HIER WIRD PFAD UND FILENAME DEFINIERT
const path = "/htmltelegram.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 - für iqontrol
let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben 
let   braucheTelegram=false;
let dpVIS=dpPrefix+"Alexa_Listen.ALEXALists.ToDo.ALEXAToDo";                      // dp  für VIS-HTML-Basic-Widget // Datentyp: String
let dPDELETE=dpPrefix+"Alexa_Listen.ALEXALists.ToDo.AuswahlDelete";                  // Datentyp: Werteliste
let dPDELETEWert=dpPrefix+"Alexa_Listen.ALEXALists.ToDo.AuswahlDeleteWerte";         // Datentyp: String
let dPDELETEAuswahl=dpPrefix+"Alexa_Listen.ALEXALists.ToDo.AuswahlDeleteTexte";      // Datentyp: String
let dpANLEGEN=dpPrefix+"Alexa_Listen.ALEXALists.ToDo.Anlegen";                       // Datentyp: String
let dpAnzahl=dpPrefix+"Alexa_Listen.ALEXALists.ToDo.Anzahl";                         // Datentyp: Number
let dpDelAll=dpPrefix+"Alexa_Listen.ALEXALists.ToDo.DeleteALL";                      // Datentyp: Boolean
let dpRefresh=dpPrefix+"Alexa_Listen.ALEXALists.ToDo.Refresh";                      // Datentyp: Boolean
let mySchedule=" * * * * * ";                       
let sortList=1;                                                                         // SORTIERUNG 1=nach datum; 2 nach ToDo's
let mitErstelldatum=false;
var symbolLink="⚪";                                                                    //  👎  💀 ❌  ⚪  ⚫ ⭕  🔴 🔵
let farbeSchalterON="blue";
//---------------------------------------

//HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
var htmlFeld1='ToDo';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left or center
var htmlFeld2='Del';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
var htmlFeld3='Erstellt vor';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
//-----------------------------------


//hier werden die styles für die tabelle definiert
//ÜBERSCHRIFT ÜBER TABELLE
let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
const htmlFeldUeber='ALEXA ToDosliste';              // Überschrift und Signature
const htmlFarbUber="white";                         // 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 farbetrennungsLinie="white";
const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
//ÜBERSCHRIFT SPALTEN
const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
const farbeLinieUnterUeberschrift="white";
const groesseUeberschrift=16;
const UeberschriftStyle="normal"                     // möglich "bold"
//GANZE TABELLE
let abstandZelle="3";
let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
let farbeGeradeZeilen="#2E2E2E";                        //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="Helvetica";
const htmlSchriftgroesse="14px";
//FELDER UND RAHMEN
let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
const htmlFarbFelderschrift="lightblue";                  // SchriftFarbe der Felder
const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
const htmlSpalte1Weite="auto";                   //  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='&lt;center&gt;'
const htmlStart=    "&lt;!DOCTYPE html&gt;&lt;html lang=\"de\"&gt;&lt;head&gt;&lt;title&gt;Vorlage&lt;/title&gt;&lt;meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"&gt;"+
                   "&lt;style&gt; * {  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+"}"+
                   " &lt;/style&gt;&lt;/head&gt;&lt;body&gt; &lt;div&gt;";
//const htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\"&gt;"+htmlFeldUeber+"&lt;/p&gt;";                    
const htmlTabStyle= "&lt;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+");\"&gt;";
const htmlTabUeber1="&lt;tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \"&gt;";
const htmlTabUeber3="&lt;/tr&gt;";
/*
table td:first-child {}  //1
table td:nth-child(2) {} //2
table td:nth-child(3) {} //3
table td:last-child {}   //4
*/

const buttonScript =  '&lt;script&gt; function setOnDblClickCustomToDo( myvalue ) {	var Self = this; var objID = myvalue;	vis.setValue(myvalue,true);  var2 = \"' + dpPrefix + 'Alexa_Listen.ALEXALists.ToDo.Refresh\"; vis.setValue(var2,true);  console.log("www")  } &lt;/script&gt;'

// const buttonScript =  '&lt;script&gt; function setOnDblClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	Self.servConn.getStates(objID, (error, states) =&gt; {  console.log(states);  Self.servConn.setState(objID, true);  }); var2 = \"javascript.0.Alexa_Listen.ALEXALists.ToDo.Refresh\"; Self.servConn.setState(var2, true); console.log("www")} &lt;/script&gt;'

//NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3

   	var htmlTabUeber2="&lt;td width="+htmlSpalte1Weite+" align="+Feld1lAlign+"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+" align="+Feld2lAlign+"&gt;&amp;ensp;"+htmlFeld2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+"&gt;&amp;ensp;"+htmlFeld3+"&amp;ensp;&lt;/td&gt;";
var htmlTabUeber2_1="&lt;td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld2+
                   "&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld3+"&amp;ensp;&lt;/td&gt;";
//------------------------------------------------------


var htmlTabUeber="";
var htmlOut="";
var mix;
var counter;
var warte;
var myIDArr=[];
let myDeleterArr;
var myRememberList="";
var myTelegram=false;
var telegramString="";
//HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
var val1; var val2; var val0; var val3; var valSort; 

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_1+htmlTabUeber2+htmlTabUeber3; break;
   case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
};   
if (!UeberschriftSpalten) {htmlTabUeber=""}

var valID; var myListWerte=""; var myListAuswahl="";
//--------------------------------------------------------------------------------------------------------------------------------------------------
//---------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 !!!---------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------
var myArr=[]; var myList=""; var myListArr=[]; myIDArr=[]; myDeleterArr=[];

let myhelerArr=getState("alexa2.0.Lists.TO_DO.json").val;
  myDeleterArr.push("alexa2.0.Lists.TO_DO.json")
myListArr.push('0'+":"+'choose ...'+";");
            myListWerte=myListWerte+"choose ..."+";";
           myListAuswahl=myListAuswahl+(0+";");
           myIDArr.push("dummy");


$('alexa2.0.Lists.TO_DO.items.*.value').each(function(id, i) {           // hier eigene schleife definierenalexa2.0.Lists.SHOPPING_LIST.items.0f43141e-029c-4860-bcd0-828702b0dc86.value

       let ida=id.split('.')
       // log(myhelerArr)
       // log(myhelerArr.includes(ida[5]))
         if(myhelerArr.includes(ida[5])) {
         
          if(!getState(id.replace("value","completed")).val) {    
           val0=getState(id).val;
           val1=getState(id.replace("value","completed")).val; 
           val2=valSort=getState(id.replace("value","updatedDateTime")).val; 
           valID=getState(id.replace("value","id")).val; 
           myIDArr.push(valID);
           var yy= (Math.round((new Date()).getTime() / 1000))-Math.round(val2/1000);
           val2=formatDate(getDateObject(val2), "TT.MM(SS:mm)")
           val3=(Math.floor( ((yy)/60/60/24) )+"d "+ Math.floor(((yy)/60/60) % 24) +"h "+ Math.floor( ((yy)/60) % 60 )+"m")
        //   if (val1==false) {val1="?"} else{val1="?"}
            let valButton=id.replace("value","#delete")
           //log(valButton)
           val1="&lt;button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustomToDo\(\'"+valButton+"\')\"&gt;"+symbolLink + "&lt;/button&gt; &lt;font color=\""+farbeSchalterON+"\"&gt;";
           myArr.push([val0,val1,val2,val3,valSort]);
           val0=val0.replace(/,/g,'-');  
           myListArr.push((i+1)+":"+val0+";");
           myListWerte=myListWerte+val0+";";
           myListAuswahl=myListAuswahl+(i+1)+";";
       }} else{ //log('alexa2.0.Lists.SHOPPING_LIST.items.'+ida[5]);
                   deleteObject('alexa2.0.Lists.TO_DO.items.'+ida[5], true);
          }
});
       //log(myIDArr.toString())

        //log (myListArr.toString());
       for (var x=0;x&lt;myListArr.length;x++){
         myList=myList.concat(myListArr[x]);
        // log(myListArr[x]);
         //log(myList);

       }
      // log("-----------myList : "+myList)
       if(myList!=myRememberList){
           myTelegram=true; //log("ist true")
           setStateDelayed(dPDELETEWert, myListAuswahl,500);        
           setStateDelayed(dPDELETEAuswahl,  myListWerte,500);
         var timeout = setTimeout(function () {
         //  var obj = getObject(dPDELETE);
            // log("11---"+myList);
           // obj.common.states=myList;
            myRememberList=myList;
            //log("22---"+myList);
          extendObject(dPDELETE, {common: {states: myList}});  
         }, 400);
       }
 //SORT

   if (sortList==1) {
                 myArr.sort(function (alpha, beta) {
              if (alpha[4] &gt; beta[4])
                 return -1;
              if (beta[4] &gt; alpha[4])
                 return 1;
              return 0;
             });
                    } else
       {          myArr.sort(function (alpha, beta) {
              if (alpha[0].toUpperCase() &gt; beta[0].toUpperCase())
                 return 1;
              if (beta[0].toUpperCase() &gt; alpha[0].toUpperCase())
                 return -1;
              return 0;
             });

                    }

                    telegramString="";
  for (var x=0 ; x&lt;myArr.length ; x++) {
      counter++;
     //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 2 Felder definiert, braucht man hier 2 Werte
       val0=myArr[x][0];
       val1=myArr[x][1];
       var val2help=myArr[x][2]
       var val3help=myArr[x][3];
       if (mitErstelldatum) {val2=val3help+" am "+val2help;} else {val2=val3help}
      
         
       if (backgroundAll) {
          telegramString=telegramString+ myArr[x][0] + " - "+myArr[x][2] + '\n';   // "-"+ myArr[x][1]  +
         
       }  
        tabelleBind(); 
  }
//-------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------------

      tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
     
} // function ende

//MAIN:
 
schedule(mySchedule,  function () { 
  var timeout = setTimeout(function () {
  if(!getState(dpDelAll).val) writeHTML();
    if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
    }, 500);

}); 
 var timeout = setTimeout(function () {
writeHTML(); 
 }, 2000);                                  //     &lt;tdalign

 function tabelleBind(){
   //  counter=counter+mehrfachTabelle;
       switch (mehrfachTabelle) { 

         case 1: if(counter%2==0)         {  htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;}else    
                                          {  htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;}
         case 2: if(counter%4==0){
                    if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\" align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } 
                               else {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;
                      }else{
                                if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } 
                               else {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;}
                                    
         case 3:if(counter%2==0)   {
                    if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } //Teil1 c=0
                               else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        "; \"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} //Teil 2 c=1
                                                else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} //Teil 3 c=3
                                          } break;}else{
                    if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } 
                               else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} 
                                                else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";}
                                          } break;}                                          


         case 4:  // counter=counter+8;
                   if(counter%8==0)   {
                   if(counter%4==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } // teil1
                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} //teil 2
                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} //teil 4
                                                                  else    {htmlOut  = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";}} //teil 3
                                          } break;}else{
                   if(counter%4==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } //teil 1
                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} // teil 2
                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} // teil 4
                                                                  else    {htmlOut  = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";}} //teil 3
                                          } break;}                                    
        } //switch ende

}

function tabelleFinish() {

switch (mehrfachTabelle) {  
       case 1:    break;

       case 2:    
                  if(counter%2==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, '&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;');
                
                  break;

       case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%3==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");        
                 if(counter%3==0)      htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
               
                  break;
       case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%4==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%4==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");    
                 if(counter%4==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");      
                 break; }
     
         var htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\"&gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/p&gt;"; 
       var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;";
        
        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+"&lt;/table&gt;" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;";
            if (htmlUberschrift) 
                { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter+ buttonScript : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter+ buttonScript ;

              } else {
               zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter+ buttonScript :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter+ buttonScript;

                 }
                 

  // log("bin raus aus tabelleBind");
           if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );

 var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;"

 if (!htmlSignature) htmlUnter="";
  var htmlEnd="&lt;/table&gt;"+htmlUnter+"&lt;/div&gt;&lt;/body&gt;";
 //mit oder ohne überschrift - zentriert oder links
htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
 //log(htmlOut);
 setState(dpANLEGEN,"");
 setState(dpAnzahl,(counter+1));
 setState(dPDELETE,0);

 
 if(myTelegram &amp;&amp; braucheTelegram){ 
     //log("sende");
     myTelegram=false;
     
    sendTo('telegram.0', {
        
   text: (telegramString),
   type: 'text'
   });

telegramString="";

}
} // function ende


setTimeout(function () {
    
on({id: dPDELETE, ack: false, change: "ne"}, function (obj) { 

   let a=getState(dPDELETE).val;
   if (a!=0){
   let toDelete=myIDArr[getState(dPDELETE).val];
   var stateHelp="alexa2.0.Lists.TO_DO.items."+toDelete+".#delete"
   setState(stateHelp,true);
   var timeout = setTimeout(function () {
   writeHTML(); }, 4000);
   }
  // log("1+bin im on !!!+++!"+a+stateHelp)
   });

   on({id: dpANLEGEN, ack: false, change: "ne"}, function (obj) { 
       //log(getState(dpANLEGEN).val+"----aa");
       if(getState(dpANLEGEN).val!="") {
    setState("alexa2.0.Lists.TO_DO.#New",getState(dpANLEGEN).val)
       var timeout = setTimeout(function () {
   writeHTML(); }, 2000);
       } 
       
   });

       on({id: dpRefresh, ack: false, change: "any"}, function (obj) { 
       //log(getState(dpANLEGEN).val+"----refresh");
       var timeout2 = setTimeout(function () {
   writeHTML(); }, 4000);
      // }
   
   });

 on({id: myDeleterArr, ack: false, change: "any"}, function (obj) { 
       //log(getState(dpANLEGEN).val+"----refresh");
       var timeout2 = setTimeout(function () {
   writeHTML(); }, 4000);
  
      // }
   
   });

   
     on({id: dpDelAll, ack: false,val: true}, function (obj) { 
       let i;
 for (i=0;i&lt;myIDArr.length;i++) {//log("hier : "+myIDArr[i]);
   if (myIDArr[i]!="dummy") {
   let toDelete=myIDArr[i];
          setTimeout( function timer(){
   var stateHelp="alexa2.0.Lists.TO_DO.items."+toDelete+".#delete"
  // log("Statehelp: "+stateHelp)
   setState(stateHelp,true);
     }, i*1500);
   }
   }
   var timeout = setTimeout(function () {
        setState(dpDelAll,false);
        writeHTML(); }, (1+myIDArr.length)*1500);
  
  // log(stateHelp)

 });

}, 5000);





</code></pre>
<p dir="auto"></p></section></section><p></p>
<hr />
<hr />
<hr />
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Liste mit ALLEN Alexa Lists</button><section style="display:none" class="spoiler-content"><p></p>
<p dir="auto"><a href="https://forum.iobroker.net/post/469286">https://forum.iobroker.net/post/469286</a></p>
<p dir="auto"></p></section></section><p></p>
<p dir="auto"><img src="/assets/uploads/files/1596377930877-smart57.gif" alt="smart57.gif" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/topic/28254/script-alexa-listen-pflegen-und-anzeigen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 21:54:53 GMT</lastBuildDate><atom:link href="https://forum.iobroker.net/topic/28254.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Dec 2019 09:59:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Sun, 08 Jan 2023 13:50:23 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/xasch" aria-label="Profile: xasch">@<bdi>xasch</bdi></a></p>
<p dir="auto">welches script nutzt du ?</p>
]]></description><link>https://forum.iobroker.net/post/924620</link><guid isPermaLink="true">https://forum.iobroker.net/post/924620</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 08 Jan 2023 13:50:23 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Sat, 07 Jan 2023 19:21:01 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/bananajoe" aria-label="Profile: bananajoe">@<bdi>bananajoe</bdi></a> Guten Abend, ich bin noch neu in der Iorbroker Welt und teste mich langsam ran und versuch anhand von Anleitungen, Foren oder ähnlichen meine Erfahrungen zu sammeln.<br />
Soweit habe ich Alexa auch schon in meinem IoBroker zum Laufen bekommen und WLED Lampen kann ich damit bereits steuern dort war natürlich suche auf mehr!<br />
Dort kam die Idee mit der Einkaufsliste / ToDo-Liste das Anzeigen ist gar kein Problem aber beim Löschen der Einträge wird häufig der letzte Eintrag, auch wenn ich den mittleren Eintrag löschen möchte, gelöscht.</p>
<p dir="auto">vielleicht kann mir jemand bei meinem Problem helfen und mir ein Gedanken Anstoß geben, wo ich den Fehler finden könnte.<br />
Ich möchte kein expliziertes vorsagen haben dabei lernt man einfach am wenigstens =)</p>
<p dir="auto">Grüße der Grünschnabel namens Xasch</p>
]]></description><link>https://forum.iobroker.net/post/924263</link><guid isPermaLink="true">https://forum.iobroker.net/post/924263</guid><dc:creator><![CDATA[Xasch]]></dc:creator><pubDate>Sat, 07 Jan 2023 19:21:01 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Sun, 16 Oct 2022 12:39:56 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> nicht dafür, ich habe zu danken für Dein tolles Script!</p>
]]></description><link>https://forum.iobroker.net/post/874340</link><guid isPermaLink="true">https://forum.iobroker.net/post/874340</guid><dc:creator><![CDATA[bubleman]]></dc:creator><pubDate>Sun, 16 Oct 2022 12:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Sun, 16 Oct 2022 12:33:49 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/bubleman" aria-label="Profile: bubleman">@<bdi>bubleman</bdi></a> werd ich bei zeit - danke dir</p>
]]></description><link>https://forum.iobroker.net/post/874334</link><guid isPermaLink="true">https://forum.iobroker.net/post/874334</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 16 Oct 2022 12:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Sun, 16 Oct 2022 12:32:33 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> ich kann Dir nur sagen das es bei mir so mit der ToDo und Einkaufsliste wunderbar funktioniert, egal ob ich in der App einen Eintrag mache, Alexa was sage oder in vis ... ohne Adapter neustart ... Probiere es einfach mal aus :-)</p>
]]></description><link>https://forum.iobroker.net/post/874333</link><guid isPermaLink="true">https://forum.iobroker.net/post/874333</guid><dc:creator><![CDATA[bubleman]]></dc:creator><pubDate>Sun, 16 Oct 2022 12:32:33 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Sun, 16 Oct 2022 12:25:56 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/bubleman" aria-label="Profile: bubleman">@<bdi>bubleman</bdi></a></p>
<p dir="auto">verstehe ich nicht ganz - das problem ist doch, dass die info nicht von amazon kommt und daher keine dp angelegt werden - ich denke, dass auch das   json  nicht  upgedatet wird</p>
<p dir="auto">man müßte den alexa2 adapter immer wieder neu starten - dann werden die neuen listeneinträge geschrieben</p>
]]></description><link>https://forum.iobroker.net/post/874330</link><guid isPermaLink="true">https://forum.iobroker.net/post/874330</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 16 Oct 2022 12:25:56 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Sun, 16 Oct 2022 12:21:06 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> ich habe das bei mir so gelöst, dass immer wenn alexa2.0.Lists.TO_DO.json eine Aktualisierung bekommt das Script für eine Sekunde gestoppt wird und dann neu gestartet, damit habe ich die vis-tabelle immer sofort aktuell.</p>
]]></description><link>https://forum.iobroker.net/post/874327</link><guid isPermaLink="true">https://forum.iobroker.net/post/874327</guid><dc:creator><![CDATA[bubleman]]></dc:creator><pubDate>Sun, 16 Oct 2022 12:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Tue, 27 Sep 2022 08:37:30 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a><br />
dacht ich mir schon :-(</p>
<p dir="auto">neuer test - item in der app eingegeben</p>
<p dir="auto">WS-MQTT: Command PUSH_LIST_ITEM_CHANGE kommt zu unterschiedlichen zeiten - zwischen 1 und 3 minuten - da die meldung von amazon kommt, wirst du tatsächlich nix machen können - den nachdem die meldung da ist, werden die dp sofort aktualisiert</p>
<p dir="auto">was auch manchmal vorkommt: ich gebe ein item ein - nach 5 minuten warten ist immer noch nix angekommen - dann gebe ich ein neues item ein und dann dauert es 1-3 minuten, bis beide da sind - kann aber sein, dass es nur länger warten hätte müssen</p>
<p dir="auto">danke, dass du nochmal nachgesehen hast</p>
<p dir="auto">so macht mein script wenig sinn - man kann zwar von unterwegs mal schnell in die app was eingeben - und es kommt halt irgendwann in der "vis-tabelle"  an -  eine richtige listenverwaltung geht eher nicht - da sind die zeiten zu lang</p>
]]></description><link>https://forum.iobroker.net/post/864208</link><guid isPermaLink="true">https://forum.iobroker.net/post/864208</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Tue, 27 Sep 2022 08:37:30 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Tue, 27 Sep 2022 08:07:01 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> Also sieht für mich alles ok aus ... Am Ende kannste es selbst beser testen. Debug log an machen und mrk dir die Zeit wenn du es in der App gemacht hast und dann schau wann im Log eine Zeile mit "WS-MQTT: Command PUSH_LIST_ITEM_CHANGE" reinkommt.</p>
<p dir="auto">Aber für mich sieht alles ok aus ... mehr kann ich nicht tun</p>
]]></description><link>https://forum.iobroker.net/post/864174</link><guid isPermaLink="true">https://forum.iobroker.net/post/864174</guid><dc:creator><![CDATA[apollon77]]></dc:creator><pubDate>Tue, 27 Sep 2022 08:07:01 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Tue, 27 Sep 2022 07:56:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a></p>
<p dir="auto">es wurde beides direkt hintereinander eingegeben (vielleicht 2-3- sek) - salz war in der app</p>
<p dir="auto">zuerst "Apollon Test 2" (über dp) und gleich anschliessend "salz"</p>
<p dir="auto">hilft das</p>
]]></description><link>https://forum.iobroker.net/post/864169</link><guid isPermaLink="true">https://forum.iobroker.net/post/864169</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Tue, 27 Sep 2022 07:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Tue, 27 Sep 2022 07:49:45 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> Also im Log sehe ich:</p>
<ul>
<li>2022-09-27 09:35:51.507 - debug: alexa2.0 (79207) Alexa-Remote WS-MQTT: Command PUSH_LIST_ITEM_CHANGE:</li>
<li>2022-09-27 09:35:52.101 - debug: alexa2.0 (79207) State changed alexa2.0.Lists.SHOPPING_LIST.items.80dcbc61-8743-42f7-a632-318841934f40.value: {"val":"Apollon Test 2","ack":true,"ts":1664264152097,"q":0,"from":"system.adapter.alexa2.0","user":"system.user.admin","lc":1664264152097}</li>
</ul>
<p dir="auto">Also laut log ists weniger als 1s nach der Info in den States ...</p>
<p dir="auto">Jetzt ist die Frage wann Du zeitlich das ganze in der App eingetragen hast :-)</p>
<p dir="auto">Bei dem zweiten was geadded wurde (Salz) das gleiche. Adapter reagiert direkt auf die Push-Info von Amazon. Kommt die ggf "verzögert"?</p>
]]></description><link>https://forum.iobroker.net/post/864157</link><guid isPermaLink="true">https://forum.iobroker.net/post/864157</guid><dc:creator><![CDATA[apollon77]]></dc:creator><pubDate>Tue, 27 Sep 2022 07:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Tue, 27 Sep 2022 07:37:56 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a></p>
<p dir="auto">habe dir ein mail mit dem debug gesendet</p>
]]></description><link>https://forum.iobroker.net/post/864151</link><guid isPermaLink="true">https://forum.iobroker.net/post/864151</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Tue, 27 Sep 2022 07:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Tue, 27 Sep 2022 07:28:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> Muss man Debug ansehen ... wenns aber aktualisiert wird dann passiert ja wenigstens was, also muss ein Event kommen, die Listen werden an sich nicht gepollt</p>
]]></description><link>https://forum.iobroker.net/post/864146</link><guid isPermaLink="true">https://forum.iobroker.net/post/864146</guid><dc:creator><![CDATA[apollon77]]></dc:creator><pubDate>Tue, 27 Sep 2022 07:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Tue, 27 Sep 2022 06:53:01 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a></p>
<p dir="auto">habe nochmal getestet - jetzt sieht es so aus, dass es ungefähr 1-3 minuten dauert, bis die dp geschrieben werden - egal ob ich eine eingabe über die app oder über die dp (script) mache</p>
<p dir="auto">im debug erscheint beim item anlegen über die app nichts</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a> sagte in <a href="/post/863954">Script: Alexa Listen pflegen und Anzeigen</a>:</p>
<blockquote>
<p dir="auto">Kann höchstens sein das Alexa keine Infos mehr pusht bei Änderungen</p>
</blockquote>
<p dir="auto">evtl hast du damit richtig vermutet</p>
]]></description><link>https://forum.iobroker.net/post/864139</link><guid isPermaLink="true">https://forum.iobroker.net/post/864139</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Tue, 27 Sep 2022 06:53:01 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Tue, 27 Sep 2022 04:30:18 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> hehe. Klassischer „vorführeffekt“ ;-)</p>
]]></description><link>https://forum.iobroker.net/post/864113</link><guid isPermaLink="true">https://forum.iobroker.net/post/864113</guid><dc:creator><![CDATA[apollon77]]></dc:creator><pubDate>Tue, 27 Sep 2022 04:30:18 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Tue, 27 Sep 2022 04:13:48 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a></p>
<p dir="auto">seltsam ???</p>
<p dir="auto">heute morgen getestet - jetzt funktioniert es - werd aber heute abend nochmals testen</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/tylerdurden-0" aria-label="Profile: TylerDurden-0">@<bdi>TylerDurden-0</bdi></a></p>
<p dir="auto">hast du eigentlich die neuste version des adapters installiert ?</p>
<p dir="auto">bei mir sieht es richtig aus - bei beiden script  versionen</p>
<p dir="auto"><img src="/assets/uploads/files/1664251961303-test-alexa-list.gif" alt="test-alexa-list.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="/assets/uploads/files/1664251969619-test-alexa-list2.gif" alt="test-alexa-list2.gif" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/post/864111</link><guid isPermaLink="true">https://forum.iobroker.net/post/864111</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Tue, 27 Sep 2022 04:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Mon, 26 Sep 2022 19:03:47 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a> leider nein - ich kann dir nicht sagen, bei welchen update oder überhaupt ab welchen zeitpunkt das ganze nicht mehr funktioniert</p>
]]></description><link>https://forum.iobroker.net/post/863961</link><guid isPermaLink="true">https://forum.iobroker.net/post/863961</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Mon, 26 Sep 2022 19:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Mon, 26 Sep 2022 18:57:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> interessant. Am Ende hab ich bei allen anderen Änderungen an den Listen nichts geändert. Kann höchstens sein das Alexa keine Infos mehr pusht bei Änderungen. Gabs nen Zeitpunkt wo die Probleme angefangen haben? Aber log sollte das zeigen.</p>
]]></description><link>https://forum.iobroker.net/post/863954</link><guid isPermaLink="true">https://forum.iobroker.net/post/863954</guid><dc:creator><![CDATA[apollon77]]></dc:creator><pubDate>Mon, 26 Sep 2022 18:57:12 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Mon, 26 Sep 2022 18:16:43 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a></p>
<p dir="auto">mach ich bei gelegenheit - den selben fehler hatten wir übrigens schonmal :-(</p>
]]></description><link>https://forum.iobroker.net/post/863931</link><guid isPermaLink="true">https://forum.iobroker.net/post/863931</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Mon, 26 Sep 2022 18:16:43 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Mon, 26 Sep 2022 18:14:16 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> GitHub issue und debug log bitte wie immer ;-)) aber ja. Wurde noch nicht berichtet.</p>
]]></description><link>https://forum.iobroker.net/post/863929</link><guid isPermaLink="true">https://forum.iobroker.net/post/863929</guid><dc:creator><![CDATA[apollon77]]></dc:creator><pubDate>Mon, 26 Sep 2022 18:14:16 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Mon, 26 Sep 2022 17:50:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a></p>
<p dir="auto">das neue listeneinträge, die entweder durch den dp in der instnz erzeugt worden sind oder in deralexa  app, nicht als datenpunkte unter der instanz erscheinen - also nicht synchronisiert werden</p>
<p dir="auto">erst wenn die instanz neugestartet wird, kommen die listen datenpunkte</p>
]]></description><link>https://forum.iobroker.net/post/863896</link><guid isPermaLink="true">https://forum.iobroker.net/post/863896</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Mon, 26 Sep 2022 17:50:17 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Mon, 26 Sep 2022 17:37:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> ?? Worüber? Was ist das Problem?</p>
]]></description><link>https://forum.iobroker.net/post/863888</link><guid isPermaLink="true">https://forum.iobroker.net/post/863888</guid><dc:creator><![CDATA[apollon77]]></dc:creator><pubDate>Mon, 26 Sep 2022 17:37:46 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Mon, 26 Sep 2022 16:39:34 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/tylerdurden-0" aria-label="Profile: tylerdurden-0">@<bdi>tylerdurden-0</bdi></a></p>
<p dir="auto">habe gerade festgestellt, dass ich das selbe problem habe - die listen werden nicht upgedatet von der instanz (die dp werden nicht erstellt, obwohl sie in der app angezeigt werden ) - ich glaube, dass hat niemand bei der weiterentwicklung des adapters gecheckt</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/apollon77" aria-label="Profile: apollon77">@<bdi>apollon77</bdi></a></p>
<p dir="auto">weißt du was darüber ?</p>
]]></description><link>https://forum.iobroker.net/post/863817</link><guid isPermaLink="true">https://forum.iobroker.net/post/863817</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Mon, 26 Sep 2022 16:39:34 GMT</pubDate></item><item><title><![CDATA[Reply to Script: Alexa Listen pflegen und Anzeigen on Mon, 26 Sep 2022 08:18:38 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> Erstmal Danke für Deine Arbeit.<br />
Ich habe das Problem das sich die Einkaufsliste nicht mit meiner Alexaliste synct. Anlegen geht aus dem Script heraus wenn ich in der Alexa app etwas lösche oder anlege wird mir nichts angezeigt.<br />
Wenn ich den ALEXA2 Adapter refreshe bzw. neu starte wird alles übernommen</p>
]]></description><link>https://forum.iobroker.net/post/863493</link><guid isPermaLink="true">https://forum.iobroker.net/post/863493</guid><dc:creator><![CDATA[TylerDurden 0]]></dc:creator><pubDate>Mon, 26 Sep 2022 08:18:38 GMT</pubDate></item></channel></rss>