@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);
});