@liv-in-sky
Hi Super Projekt das hat mich auf die Idee gebracht habe es einwenig anders gemacht als du.
vielleicht kann ja wer teile aus meinem Script brauchen.

var forceCreation   = false; //Solange diese Varialble auf "true" steht, werden die Datenpunkte zwangsweise erstellt, also auch wenn sie schon existieren.
var pfad = 'Eigene_Datenpunkte.Aexa_List_Neu.'; //Ordner für daten punkte
var datenpunkte = {
   'ToDo_List':        {"init": "", "common": {type: 'string',  name: 'ToDo List',     role: "text"}},
   'Shopping_List':        {"init": "", "common": {type: 'string',  name: 'Einkaufsliste',     role: "text"}},
 
   };
// -----------------------------------------------------------------------------------------------------------------------------------------
// Erzeuge Datenpunkte
// -----------------------------------------------------------------------------------------------------------------------------------------
function createDp() 
{
	var name;
	var init;
	var common;
 
	for (var dp in datenpunkte) 
	{
		name = pfad + dp;
        
		init = datenpunkte[dp].init;
		common = datenpunkte[dp].common;
		createState(name, init , forceCreation, common);
	}
}
 
// -----------------------------------------------
// Initialisierung
// -----------------------------------------------
createDp();
// -----------------------------------------------
// Eigene functionen
// -----------------------------------------------
function convertJSON2HTML(json,db) {
    const tmpList = {
    row : 
    `<div class="mdui-listitem" style="width:100%; display:flex;">
      <div class="mdui-title mdui-center" style="flex:0 0 10%;">
        <i style="font-size:1.5em;">{counter}</i>
      </div>
        <div style="flex:0 0 15%; display:flex; flex-wrap:wrap; justify-content:center; align-items:center; ">
        <div class="mdui-button mdui-color1 mdui-center" style="height: 45px; width: 45px;">
          <button onclick="vis.setValue('alexa2.0.Lists.{db}.items.{id}.completed', {completed});"><i class="material-icons" style="font-size:3em;">{icon}</i></button> 
        </div>
      </div>   
      <div style="flex:1 1 auto; display:flex; flex-wrap:wrap;">
        <div class="mdui-label" style=" flex:1 1 15em; display:flex; flex-wrap:wrap; align-content:flex-start; padding-right:0.5em;">
          <div class="mdui-value" style="font-size:1.5em; flex:1 0 15em;">{start}{value}{stop}</div>
          <div class="mdui-center-v" style="font-size:0.8em; flex:1 0 15em; ">Erstellt: <span class="mdui-value">{createdDateTime}</span> </div>
          <div class="mdui-center-v" style="font-size:0.8em; flex:1 0 15em; ">Geändert: <span class="mdui-value">{updatedDateTime}</span> </div>
        </div> 
      </div> 
      <div style="flex:0 0 15%; display:flex; flex-wrap:wrap; justify-content:center; align-items:center; ">
        <div class="mdui-button-outlined mdui-red mdui-red-ol mdui-center" style="height: 45px; width: 45px;">
          <button onclick="vis.setValue('alexa2.0.Lists.{db}.items.{id}.#delete', true);"><i class="material-icons" style="font-size:2em;">delete_forever</i></button> 
        </div>
      </div> 
    </div>`}
        let htmlList ="";
        let entry, tr ; 
        json = json.replace('[','');
        json = json.replace(']','');
        json = json.replace(/},{/g,'};{');
        if (json.length == 0){setState('javascript.0.'+pfad+Object.keys(datenpunkte)[db], "");return;};
        json = json.split(";");
        for (var i = 0; i < json.length; i++) { 
                        try {entry = JSON.parse(json[i]);
             } catch (e) {
           console.error('Cannot parse: ' + json);
           return
             }
            
            switch (entry.shoppingListItem) {
                case false  : entry.db = 'TO_DO';  break;
                default     : entry.db = 'SHOPPING_LIST';  break;
            }
            switch (entry.completed) {
                case false  : entry.icon = 'check_box_outline_blank';entry.start = '';entry.stop = ''; entry.completed = true;  break;
                default     : entry.icon = 'check_box';entry.start = '<s>';entry.stop = '</s>'; entry.completed = false;  break;
                
            }
            entry.counter = i ;
            entry.createdDateTime = formatDate(entry.createdDateTime, "TT.MM.YYYY SS:mm:ss");
            entry.updatedDateTime = formatDate(entry.updatedDateTime, "TT.MM.YYYY SS:mm:ss"); 
            tr = tmpList.row;    
            for (let [key, value] of Object.entries(entry)) tr = tr.replace(new RegExp('{'+key+'}','g'),value);
            htmlList+=tr;
        }
       
    
	setState('javascript.0.'+pfad+Object.keys(datenpunkte)[db], htmlList);
		
    }
// -----------------------------------------------
// Überwachende Datenpunkte
// -----------------------------------------------
on({id: 'alexa2.0.Lists.TO_DO.json'/*List as json*/, change: 'ne'}, function (obj) {
    convertJSON2HTML(obj.state.val,0);    
}); 
on({id: 'alexa2.0.Lists.SHOPPING_LIST.json'/*List as json*/, change: 'ne'}, function (obj) {
    convertJSON2HTML(obj.state.val,1);    
});
        
