//21.102021 14:30 /* ----------------------- Variablen ------------------------------------------------- dpList Datenpunkt für IconList Widget (Typ: Zeichenkette (String)) dpSortMode Datenpunkt für Sortieren (Typ: Zeichenkette (String)) dpFilterMode Datenpunkt für Filter (Typ: Zeichenkette (String)) sprache Sprache für formatierung letzte Änderung formatierungLastChange Formatierung letzte Änderung -> siehe momentjs library farbeGeraetOnline Status Bar Farbe wenn Geräte online ist farbeGeraetOffline Status Bar Farbe wenn Geräte offline ist sortResetAfter Sortierung nach X Sekunden auf sortReset zurücksetzen (0=deaktiviert) sortReset Sortierung auf die zurückgesetzt werden soll filterResetAfter Filter nach X Sekunden zurücksetzen (0=deaktiviert) all_items Ein Array welches alle Geräte beinhaltet, unterteilt noch nach Etagen lichtGesamt Anzahl aller Lampen lichtAn Anzahl der Eingeschalteten Lampen bshPfad 1 Teil des Datenpunktes ------------------------- Arry Struktur ---------------------------------------------- 0 rest des Datenpunktes 1 Etage 2 Raum 3 Angezeigte Überschrift 4 Sensortyp --------------------------------------------------------------------------------------------*/ const moment = require("moment"); // Skript Einstellungen ************************************************************************************************************************************************* let dpList = '0_userdata.0.vis.Status.Licht.jsonList'; let dpSortMode = '0_userdata.0.vis.Status.Licht.sortMode'; let dpFilterMode = '0_userdata.0.vis.Status.Licht.filterMode'; let sprache = 'de'; let formatierungLastChange = "ddd DD.MM - HH:mm"; let farbeGeraetOnline = 'green'; let farbeGeraetOffline = 'FireBrick'; let sortResetAfter = 120; let sortReset = 'name' let filterResetAfter = 120; let all_items = new Array (); let lichtGesamt = 0; let lichtAn = 0; let bshPfad = "bshb.0.hdm:HomeMaticIP:"; //KG let kg_licht_keller = [ bshPfad + '3014F711A000191BB85AFD8C.PowerSwitch.switchState', 'KG', 'Keller', 'Keller', 'Bosch Lichtschalter' ]; all_items[0] = new Array( kg_licht_keller ); //EG let eg_licht_toilette = [ bshPfad + '3014F711A000191BB85AFCE6.PowerSwitch.switchState', 'EG', 'Toilette', 'Toilette', 'Bosch Lichtschalter' ]; let eg_licht_flur = [ bshPfad + '3014F711A0001918785A0B84.PowerSwitch.switchState', 'EG', 'Flur unten', 'Flur unten', 'Bosch Lichtschalter' ]; let eg_nachtlicht_flur = [ 'govee.0.DD:C5:A4:C1:38:43:44:86.powerState', 'EG', 'Flur unten', 'Flur unten LED-Strip Nachtlicht', 'Govee RGB-Strip' ]; let eg_licht_schlafzimmer = [ bshPfad + '3014F711A000191BB85AFE2B.PowerSwitch.switchState', 'EG', 'Schlafzimmer', 'Schlafzimmer', 'Bosch Lichtschalter' ]; let eg_licht_brigitte_min = [ 'ham.0.Brigitte-Min.Switch.On', 'EG', 'Schlafzimmer', 'Brigitte Min', 'Shelly 1 Licht' ]; let eg_licht_brigitte_max = [ 'ham.0.Brigitte-Max.Switch.On', 'EG', 'Schlafzimmer', 'Brigitte Max', 'Shelly 1 Licht' ]; let eg_licht_walter_min = [ 'ham.0.Walter-Min.Switch.On', 'EG', 'Schlafzimmer', 'Walter Min', 'Shelly 1 Licht' ]; let eg_licht_walter_max = [ 'ham.0.Walter-Max.Switch.On', 'EG', 'Schlafzimmer', 'Walter Max', 'Shelly 1 Licht' ]; let eg_licht_kueche_min = [ 'ham.0.Kueche-Min.Switch.On', 'EG', 'Küche', 'Decke Min', 'Shelly 1 Licht' ]; let eg_licht_kueche_max = [ 'ham.0.Kueche-Max.Switch.On', 'EG', 'Küche', 'Decke Max', 'Shelly 1 Licht' ]; let eg_licht_sitze = [ 'ham.0.Sitze.Lightbulb.On', 'EG', 'Wohnzimmer', 'LED-Strip Sitze', 'Govee RGB-Strip' ]; let eg_licht_Terrasse = [ 'ham.0.Terrasse.Lightbulb.On', 'EG', 'Wohnzimmer', 'LED-Strip Terrasse', 'Govee RGB-Strip' ]; let eg_licht_tv_backlight = [ 'ham.0.TV-Backlight.Lightbulb.On', 'EG', 'Wohnzimmer', 'LED-Strip TV-Backlight', 'Govee RGB-Strip' ]; all_items[1] = new Array( eg_licht_toilette, eg_licht_flur, eg_nachtlicht_flur, eg_licht_schlafzimmer, eg_licht_brigitte_min, eg_licht_brigitte_max, eg_licht_walter_min, eg_licht_walter_max, eg_licht_kueche_min, eg_licht_kueche_max, eg_licht_sitze, eg_licht_Terrasse, eg_licht_tv_backlight ); //OG let og_licht_flur = [ bshPfad + '3014F711A0001918785A0940.PowerSwitch.switchState', 'OG', 'Flur', 'Flur oben', 'Bosch Lichtschalter' ]; let og_licht_bad = [ bshPfad + '3014F711A000191BB85AFE01.PowerSwitch.switchState', 'OG', 'Badezimmer', 'Badezimmer', 'Bosch Lichtschalter' ]; let og_licht_buero_tuer = [ 'ham.0.Buero-Tuer.Switch.On', 'OG', 'Büro', 'Büro Tür', 'Shelly 1 Licht' ]; all_items[2] = new Array( og_licht_flur, og_licht_bad, og_licht_buero_tuer ); // ********************************************************************************************************************************************************************** // Fomate für moment Lib moment.locale(sprache); // auf Änderungen der Sortieung hören on({ id: dpSortMode, change: 'any' }, lichtStatus); on({ id: dpSortMode, change: 'any' }, resetSort); // auf Änderungen der Filter hören on({ id: dpFilterMode, change: 'any' }, lichtStatus); on({ id: dpFilterMode, change: 'any' }, resetFilter); // auf Änderung SwitchState hören on('bshb.0.hdm:HomeMaticIP:3014F711A0001918785A0940.PowerSwitch.switchState', lichtStatus); on('bshb.0.hdm:HomeMaticIP:3014F711A0001918785A0B84.PowerSwitch.switchState', lichtStatus); on('bshb.0.hdm:HomeMaticIP:3014F711A000191BB85AFCE6.PowerSwitch.switchState', lichtStatus); on('bshb.0.hdm:HomeMaticIP:3014F711A000191BB85AFD8C.PowerSwitch.switchState', lichtStatus); on('bshb.0.hdm:HomeMaticIP:3014F711A000191BB85AFE01.PowerSwitch.switchState', lichtStatus); on('bshb.0.hdm:HomeMaticIP:3014F711A000191BB85AFE2B.PowerSwitch.switchState', lichtStatus); on('ham.0.Buero-Tuer.Switch.On', lichtStatus); on('ham.0.Brigitte-Max.Switch.On', lichtStatus); on('ham.0.Brigitte-Min.Switch.On', lichtStatus); on('ham.0.Kueche-Max.Switch.On', lichtStatus); on('ham.0.Kueche-Min.Switch.On', lichtStatus); on('ham.0.Walter-Max.Switch.On', lichtStatus); on('ham.0.Walter-Min.Switch.On', lichtStatus); on('ham.0.Walter-Min.Switch.On', lichtStatus); on('ham.0.Sitze.Lightbulb.On', lichtStatus); on('ham.0.TV-Backlight.Lightbulb.On', lichtStatus); on('ham.0.Terrasse.Switch.On', lichtStatus); on('govee.0.DD:C5:A4:C1:38:43:44:86.powerState', lichtStatus); function istJsonDP() { if (!existsState('0_userdata.0.vis.Status.Licht.jsonList')) { createState('0_userdata.0.vis.Status.Licht.jsonList', {'name': 'Json List', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': ''}); createState('0_userdata.0.vis.Status.Licht.sortMode', {'name': 'Sortierung', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': ''}); createState('0_userdata.0.vis.Status.Licht.filterMode', {'name': 'Filterung', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': ''}); }; }; function lichtStatus() { istJsonDP(); lichtAn = 0; lichtGesamt = 0; try { let deviceList = []; for (var i = 0; i <= all_items.length - 1; i++) { var etageArray = all_items[i]; etageArray.forEach(function(element) { let buttonLink = ''; let onLine = true; let image; let AnAus = getState(element[0]).val; let listType = 'text'; let imageColor = 'red'; let etage = element[1]; let raum = element[2]; let sensor = element[4]; let statusBarColor = farbeGeraetOffline; let status = 2; if (onLine === true) { statusBarColor = farbeGeraetOnline; status = 1; }; statusBarColor = farbeGeraetOnline; lichtGesamt ++; if ((AnAus == 'ON') || (AnAus == 'on') || (AnAus == true)) { image = '/icons-icons8/others/color/Light On.png'; lichtAn ++; } else if ((AnAus == 'OFF') || (AnAus == 'off') || (AnAus == false)) { image = '/icons-icons8/others/color/Light Off.png'; }; let subText = `
Type:
${sensor}
Etage:
${etage}
Raum:
${raum}
` deviceList.push({ text: element[3], subText: subText, statusBarColor: statusBarColor, image: image, imageColor: imageColor, listType: listType, buttonLink: buttonLink, showValueLabel: false, name: element[3], status: status, etage: etage, raum: raum, sensor: sensor, }); }) } let sortMode = myHelper().getStateValueIfExist(dpSortMode, 'name'); if (sortMode === 'name') { deviceList.sort(function (a, b) { return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1; }); } else if (sortMode === 'etage') { deviceList.sort(function (a, b) { return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1; }); } else if (sortMode === 'raum') { deviceList.sort(function (a, b) { return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1; }); } else if (sortMode === 'sensor') { deviceList.sort(function (a, b) { return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1; }); } else { // default: nach name sortieren sortMode = 'name' deviceList.sort(function (a, b) { return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1; }); } let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null); if (filterMode && filterMode !== null && filterMode !== '') { if (filterMode === 'aus') { deviceList = deviceList.filter(function (item) { return item.status === 2; }); } else if (filterMode === 'an') { deviceList = deviceList.filter(function (item) { return item.status === 1; }); } } let result = JSON.stringify(deviceList); if (getState(dpList) !== result) { setState(dpList, result, true); } } catch (err) { console.error(`[GeraeteStatus] error: ${err.message}, stack: ${err.stack}`); }; setState('0_userdata.0.vis.Status.Licht.LichtAn', lichtAn); setState('0_userdata.0.vis.Status.Licht.LichtCount', lichtGesamt); let text = ''; if (lichtAn == 0) { text = 'Kein Licht von '; } else if(lichtAn == 1) { text = '1 Licht von '; } else if(lichtAn > 1) { text = lichtAn + ' Lichter von '; }; setState("0_userdata.0.vis.Status.Licht.LichtInfo", text + lichtGesamt + ' eingeschaltet.'); } function resetSort() { let sortMode = myHelper().getStateValueIfExist(dpSortMode, null); if (sortResetAfter > 0) { setTimeout(function () { if (sortMode !== null && sortMode === myHelper().getStateValueIfExist(dpSortMode, null)) { setState(dpSortMode, sortReset); } }, sortResetAfter * 1000); } } function resetFilter() { let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null); if (filterResetAfter > 0) { setTimeout(function () { if (filterMode !== null && filterMode === myHelper().getStateValueIfExist(dpFilterMode, null)) { setState(dpFilterMode, ''); } }, filterResetAfter * 1000); } } lichtStatus(); function myHelper() { return { getStateValueIfExist: function (id, nullValue = undefined, prepand = '', append = '') { if (existsState(id)) { return prepand + getState(id).val + append; } else { return nullValue; } }, getCommonPropertyIfExist: function (object, prop, nullValue = undefined, prepand = '', append = '') { if (myHelper().checkCommonPropertyExist(object, prop)) { return prepand + object.common[prop] + append; } else { return nullValue; } }, checkCommonPropertyExist: function (object, prop) { if (object && object.common && object.common[prop]) { return true; } else { return false; } } } }