@david-g said in Test Adapter lovelace v1.2.x:
Hey Leute,
heute nerve ich zum letzten mal mit meiner Adapter-Tabelle.
War immer noch nicht wirklich zufrieden und habe nochmal einiges angepasst.
- Schedule Adapter sind jetzt rot, wenn nicht gestartet. Orange wenn gestartet und grün wenn grade aktiv
- Schedule Adapter bekommen bei den Infos angezeigt zu welchen Zeiten sie ausgeführt werden
- Die Infos kommen nicht mehr aus der json und werden direkt aus den entsprechenden Datenpunkten gelesen
- Für die beiden Ansichten ohne Details gibt es jetzt eine Option (im Skript oben aktivierbar) um sich die Details nach unten auszuklappen.
adapter_skript.txt
Und nochmal die 4 Bilder für die bunten Balken:
![spacer_grey.png](/assets/uploads/files/1654008477461-spacer_grey.png)
1 = Detailansicht
![groß.png](/assets/uploads/files/1654007666894-gro%C3%9F.png)
2 = Große Tabellenansicht ohne Details
![mittel ohne details.png](/assets/uploads/files/1654007672691-mittel-ohne-details.png)
2 = Große Tabellenansicht mit Details
![mittel mit details.png](/assets/uploads/files/1654007677617-mittel-mit-details.png)
3 = Kompakte Tabellenansicht ohne Details
![klein ohne details.png](/assets/uploads/files/1654007685580-klein-ohne-details.png)
3 = Kompakte Tabellenansicht mit Details (mein Favorit)
![klein mit details.png](/assets/uploads/files/1654007689917-klein-mit-details.png)
Ich war mal so frei und habe dein Script in JS übersetzt und habe es ein wenig angepasst. So komme ich durch Base64 Code ohne die PNG Files aus.
Abgesehen davon habe ich noch eine Listenansicht eingebaut.
Kurze Infos. Bei mir wird der HTML Code in das Objekt "javascript.0.Lovelace.Adapter_Status" geschrieben, dass ich direkt am Anfang erzeuge und am Ende des Codes beschreibe. Wenn man ein anderes Objekt haben möchte, so muss man diese anpassen.
createState('javascript.0.Lovelace.Adapter_Status', { name: 'Adapter Status - HTML', type: 'string', read: true, write: true});
var id, dp_memHeapUsed, dp_cpu, liste_instanzen, Liste_adapter, tabelle, durchgang, ansichtsmodus, Instanzanzahl, dropdown, Adapteranzahl, Infos_Adapteranzahl, alive_groesse, i, shedule, adapter, updates, adapter_mit_instanz, adapter_bild, adapter_mode, shedule_enabled, status_oder_shedule, bild_url, alive, cpu, mem, tabelle_mit_details;
async function alive_vorhanden(id) {
if(existsState(id)) return getState(id).val;
}
async function mem_vorhanden(dp_memHeapUsed) {
if(existsState(dp_memHeapUsed)) return getState(dp_memHeapUsed).val;
}
async function cpu_vorhanden(dp_cpu) {
if(existsState(dp_cpu)) return getState(dp_cpu).val;
}
async function get_icon(id) {
if(existsObject(id)) return getObject(id).common.icon;
}
async function get_shedule(id) {
if(existsObject(id)) return getObject(id).common.schedule;
}
async function get_shedule_enabled(id) {
if(existsObject(id)) return getObject(id).common.enabled;
}
async function get_adapter_mode(id) {
if(existsObject(id)) return getObject(id).common.mode;
}
function listsGetSortCompare(type, direction) {
var compareFuncs = {
"NUMERIC": function(a, b) { return Number(a) - Number(b); },
"TEXT": function(a, b) { return a.toString() > b.toString() ? 1 : -1; },
"IGNORE_CASE": function(a, b) { return a.toString().toLowerCase() > b.toString().toLowerCase() ? 1 : -1; },
};
var compare = compareFuncs[type];
return function(a, b) { return compare(a, b) * direction; }
}
async function tabelle_generieren() {
tabelle = '';
durchgang = 0;
liste_instanzen = liste_instanzen.slice().sort(listsGetSortCompare("TEXT", 1));
Instanzanzahl = liste_instanzen.length;
Adapteranzahl = Liste_adapter.length;
if (ansichtsmodus == 1 || ansichtsmodus == 2) {
alive_groesse = 'width="300px" height="3"';
} else if (ansichtsmodus == 3) {
alive_groesse = 'width="10" height="10"';
}
for (var i_index in liste_instanzen) {
i = liste_instanzen[i_index];
shedule = '';
durchgang = (typeof durchgang == 'number' ? durchgang : 0) + 1;
adapter = i.slice(15, i.length - 8);
adapter_mit_instanz = i.slice(15, i.length - 6);
adapter_bild = await get_icon(i.slice(0, i.length - 6));
adapter_mode = await get_adapter_mode(i.slice(0, i.length - 6));
shedule_enabled = await get_shedule_enabled(i.slice(0, i.length - 6));
status_oder_shedule = 'Status:';
if (ansichtsmodus == 1 || ansichtsmodus == 2) {
bild_url = ['<img src="/adapter/',adapter,'/',adapter_bild,'" width="35" align="middle">'].join('');
} else if (ansichtsmodus == 3 || ansichtsmodus == 4) {
bild_url = ['<img src="/adapter/',adapter,'/',adapter_bild,'" width="15" align="left">'].join('');
}
if (adapter_mode == 'daemon') {
if (await alive_vorhanden(i)) {
if (ansichtsmodus == 4) {
alive = ['<font size="3" color="#00FF00">●</font>'].join('');
} else {
alive = ['<img ',alive_groesse,' src="data:image/jpeg;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg==" />'].join('');
}
} else {
if (ansichtsmodus == 4) {
alive = ['<font size="3" color="#FF0000">●</font>'].join('');
} else {
alive = ['<img ',alive_groesse,' src="data:image/jpeg;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==" />'].join('');
}
}
} else if (adapter_mode == 'schedule') {
if (shedule_enabled == true) {
if (await alive_vorhanden(i)) {
if (ansichtsmodus == 4) {
alive = ['<font size="3" color="#00FF00">●</font>'].join('');
} else {
alive = ['<img ',alive_groesse,' src="data:image/jpeg;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg==" />'].join('');
}
} else {
if (ansichtsmodus == 4) {
alive = ['<font size="3" color="#FF9900">●</font>'].join('');
} else {
alive = ['<img ',alive_groesse,' src="data:image/jpeg;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8P5PhPwAG0AKZxLYn9AAAAABJRU5ErkJggg==" />'].join('');
}
}
shedule = await get_shedule(i.slice(0, i.length - 6));
status_oder_shedule = shedule;
} else {
if (ansichtsmodus == 4) {
alive = ['<font size="3" color="#FF00000">●</font>'].join('');
} else {
alive = ['<img ',alive_groesse,' src="data:image/jpeg;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==" />'].join('');
}
}
} else {
if (ansichtsmodus == 4) {
alive = ['<font size="3" color="#9B9B9B">●</font>'].join('');
} else {
alive = ['<img ',alive_groesse,' src="data:image/jpeg;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mOc/R8AAjsBnOiGSSgAAAAASUVORK5CYII=" />'].join('');
}
}
if (await cpu_vorhanden(i)) {
cpu = String(getState((['system.adapter.',adapter_mit_instanz,'.cpu'].join(''))).val) + ' %';
} else {
cpu = 'N/A';
}
if (await mem_vorhanden(i)) {
mem = String(getState((['system.adapter.',adapter_mit_instanz,'.memHeapUsed'].join(''))).val) + ' MB';
} else {
mem = 'N/A';
}
if (dropdown) {
tabelle_mit_details = ['<table width=90%><tr><td width="45%"><b><font size="1px"><I>CPU:</td><td align=right><b><font size="1px"><I>',cpu,'</td></tr><tr><td><b><font size="1px"><I>MEM:</td><td align=right><font size="1px"><b><I>',mem,' </td></tr><tr><td><b><font size="1px"><I>',adapter_mode == 'schedule' ? '</td></tr><tr><td><b><font size="1px"><I>Zeitplan:</td><td align=right><font size="1px"><b><I>' + String(shedule) : null,'</td></tr></table>','','','',''].join('');
}
if (ansichtsmodus == 1) {
tabelle = [tabelle,'<td valign="bottom" width="33%"><center>',bild_url,'<br><b>',adapter_mit_instanz,['<table width=90%><tr><td width="45%"><b><font size="1px"><I>CPU:</td><td align=right><b><font size="1px"><I>',cpu,'</td></tr><tr><td><b><font size="1px"><I>MEM:</td><td align=right><font size="1px"><b><I>',mem,' </td></tr><tr><td><b><font size="1px"><I>',status_oder_shedule,'</td><td align=right><b><font size="1px">',alive,'</td></tr></table>','',''].join(''),'<p></td>',durchgang % 3 == 0 && (ansichtsmodus == 1 || ansichtsmodus == 2) ? '</tr><tr>' : '','','',''].join('');
} else if (ansichtsmodus == 2) {
tabelle = [tabelle,'<td valign="bottom" width="33%"><center>',bild_url,'<br>',dropdown ? '<details><summary>' : null,adapter_mit_instanz,dropdown ? '</summary>' : null,dropdown ? tabelle_mit_details : null,dropdown ? '</details>' : null,alive,'<p></td>',durchgang % 3 == 0 ? '</tr><tr>' : '',''].join('');
} else if (ansichtsmodus == 3) {
tabelle = [tabelle,'<td valign=middle width="33%">',dropdown ? '<details><summary>' : null,alive,' ',bild_url,' ',adapter.slice(0, dropdown ? 9 : 11),dropdown ? '</summary>' : null,dropdown ? tabelle_mit_details : null,dropdown ? '</details>' : null,'<p></td>',durchgang % 3 == 0 ? '</tr><tr>' : ''].join('');
} else if (ansichtsmodus == 4) {
tabelle = [tabelle,'<td>',bild_url,' ',adapter_mit_instanz,'</td><td align="center">',alive,'</td><td>',cpu,'</td><td>',mem,'</td><tr>'].join('');
}
}
await wait(1000);
if (Infos_Adapteranzahl) {
updates = ['Installierte Adapter: ',Adapteranzahl,'<br>Verfügbare Adapterupdates: ',getState("admin.0.info.updatesNumber").val,'<br>','Installierte Instanzen: ',Instanzanzahl,''].join('');
}
if (ansichtsmodus == 4) {
setState("javascript.0.Lovelace.Adapter_Status", ([updates,'<table width="100%"><tr><th align=left>Adapter</th><th align=center>Status</th><th align=left>CPU</th><th align=left>MEM</th><tr><td colspan="4"><hr></td></tr><tr>',tabelle,'</table>'].join('')), true);
} else {
setState("javascript.0.Lovelace.Adapter_Status", ([updates,'<table width="100%"><tr>',tabelle,'</table>'].join('')), true);
}
}
// 1 = Detailansicht
// 2 = Große Tabellenansicht
// 3 = Kompakte Tabellenansicht
// 4 = Listenansicht
ansichtsmodus = 4;
// Nur bei 2 und 3
dropdown = true;
Infos_Adapteranzahl = false;
liste_instanzen = '';
Liste_adapter = '';
liste_instanzen = Array.prototype.slice.apply($("system.adapter.*.alive"));
Liste_adapter = Array.prototype.slice.apply($("system.adapter.*.0.alive"));
on({id: [].concat(liste_instanzen), change: "ne"}, async function (obj) {
await tabelle_generieren();
});
on({id: [].concat(['admin.0.info.updatesNumber']), change: "ne"}, async function (obj) {
await tabelle_generieren();
});
schedule("*/5 * * * *", async function () {
await tabelle_generieren();
});
Listenansicht (4):
![Screenshot 2022-07-07 145705.png](/assets/uploads/files/1657198637054-screenshot-2022-07-07-145705.png)