//21102021 15:00 /* ----------------------- 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 iconPfad 1 Teil des Iconpfades geraeteOn Anzahl eingeschalteter Geräte geraeteCount Gesamtanzahl Geräte ------------------------- Arry Struktur ---------------------------------------------- 0 aktueller Verbrauch 1 gesamt Verbrauch im laufenden Jahr 2 Auto off 3 Sensor in Betrieb 4 Operation Mode Manuel, Schedule 5 Etage 6 Raum 7 Kurzname 8 Icon 9 Verwendung --------------------------------------------------------------------------------------------*/ const moment = require("moment"); // Skript Einstellungen ************************************************************************************************************************************************* let dpList = '0_userdata.0.vis.Status.Steckdosen.jsonList'; let dpSortMode = '0_userdata.0.vis.Status.Thermostate.sortMode'; let dpFilterMode = '0_userdata.0.vis.Status.Thermostate.filterMode'; let sprache = 'de'; let formatierungLastChange = "ddd DD.MM - HH:mm"; let farbeGeraetOnline = 'green'; let farbeGeraetOffline = 'FireBrick'; let sortResetAfter = 120; let sortReset = 'name' let all_items = new Array (); var iconPfad = '/vis-icontwo/Devices/' let bshPfad = "bshb.0.hdm:HomeMaticIP:"; let geraeteOn = 0; let geraeteCount = 0; //KG let kg_keller_waschmaschine = [ bshPfad + '3014F711A000049BB85D3E06.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:HomeMaticIP:3014F711A000049BB85D3E06__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', bshPfad + '3014F711A000049BB85D3E06.PowerSwitch.automaticPowerOffTime', bshPfad + '3014F711A000049BB85D3E06.PowerSwitch.switchState', bshPfad + '3014F711A000049BB85D3E06.PowerSwitchProgram.operationMode', 'KG', 'Waschküche', 'Waschmaschine', '/icons-mfd-png/scene_washing_machine.png', 'Bosch Zwischenstecker' ]; let kg_keller_trockner = [ bshPfad + '3014F711A000049BB85D3E3D.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:HomeMaticIP:3014F711A000049BB85D3E3D__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', bshPfad + '3014F711A000049BB85D3E3D.PowerSwitch.automaticPowerOffTime', bshPfad + '3014F711A000049BB85D3E3D.PowerSwitch.switchState', bshPfad + '3014F711A000049BB85D3E3D.PowerSwitchProgram.operationMode', 'KG', 'Waschküche', 'Trockner', '/icons-mfd-png/scene_clothes_dryer.png', 'Bosch Zwischenstecker' ]; let kg_keller_kuehltruhe = [ bshPfad + '3014F711A000049BB85D416A.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:HomeMaticIP:3014F711A000049BB85D416A__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', bshPfad + '3014F711A000049BB85D416A.PowerSwitch.automaticPowerOffTime', bshPfad + '3014F711A000049BB85D416A.PowerSwitch.switchState', bshPfad + '3014F711A000049BB85D416A.PowerSwitchProgram.operationMode', 'KG', 'Waschküche', 'Kühltruhe', '/icons-mfd-png/scene_freezer.png', 'Bosch Zwischenstecker' ]; let kg_kueche_heizung = [ 'bshb.0.hdm:ZigBee:847127fffe7f009d.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:ZigBee:847127fffe7f009d__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', 'bshb.0.hdm:ZigBee:847127fffe7f009d.PowerSwitch.automaticPowerOffTime', 'bshb.0.hdm:ZigBee:847127fffe7f009d.PowerSwitch.switchState', 'bshb.0.hdm:ZigBee:847127fffe7f009d.PowerSwitchProgram.operationMode', 'EG', 'Keller', 'Heizung', '/icons-mfd-png/sani_cogeneration.png', 'Bosch Zwischenstecker' ]; all_items[0] = new Array( kg_keller_waschmaschine, kg_keller_trockner, kg_keller_kuehltruhe, kg_kueche_heizung ); //EG let Eg_kueche_geschirrspueler = [ bshPfad + '3014F711A000049BB85D3F47.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:HomeMaticIP:3014F711A000049BB85D3F47__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', bshPfad + '3014F711A000049BB85D3F47.PowerSwitch.automaticPowerOffTime', bshPfad + '3014F711A000049BB85D3F47.PowerSwitch.switchState', bshPfad + '3014F711A000049BB85D3F47.PowerSwitchProgram.operationMode', 'EG', 'Küche', 'Geschirrspüler', '/icons-mfd-png/scene_dishwasher.png', 'Bosch Zwischenstecker' ]; let Eg_kueche_kaffeemaschine = [ bshPfad + '3014F711A000049BB85FE614.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:HomeMaticIP:3014F711A000049BB85FE614__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', bshPfad + '3014F711A000049BB85FE614.PowerSwitch.automaticPowerOffTime', bshPfad + '3014F711A000049BB85FE614.PowerSwitch.switchState', bshPfad + '3014F711A000049BB85FE614.PowerSwitchProgram.operationMode', 'EG', 'Küche', 'Kaffeemaschine', '/icons-mfd-png/scene_coffee_maker_automatic.png', 'Bosch Zwischenstecker' ]; let Eg_led_flur_unten = [ 'bshb.0.hdm:ZigBee:847127fffe7f1a8b.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:ZigBee:847127fffe7f1a8b__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', 'bshb.0.hdm:ZigBee:847127fffe7f1a8b.PowerSwitch.automaticPowerOffTime', 'bshb.0.hdm:ZigBee:847127fffe7f1a8b.PowerSwitch.switchState', 'bshb.0.hdm:ZigBee:847127fffe7f1a8b.PowerSwitchProgram.operationMode', 'EG', 'Flur unten', 'Nachtlicht', '/icons-mfd-png/light_led_stripe_rgb.png', 'Bosch Zwischenstecker' ]; let Eg_tv_center = [ 'mqtt.0.shellies.Power-Media-Center.relay.0.power', 'sourceanalytix.0.ham__0__Shelly-1PM-8CAAB54348A2__Power-Meter__Consumption.currentYear.consumed.05_currentYear', 'bshb.0.hdm:ZigBee:847127fffe7f1a8b.PowerSwitch.automaticPowerOffTime', 'mqtt.0.shellies.Power-Media-Center.relay.0', 'bshb.0.hdm:ZigBee:847127fffe7f1a8b.PowerSwitchProgram.operationMode', 'EG', 'Wohnzimmer', 'TV-Center', '/icons-mfd-png/it_television.png', 'Shelly 1PM Steckdose' ]; all_items[1] = new Array( Eg_kueche_geschirrspueler, Eg_kueche_kaffeemaschine, Eg_led_flur_unten, Eg_tv_center ); //OG let og_buero_brigitte_pc = [ bshPfad + '3014F711A000049BB85D3DFF.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:HomeMaticIP:3014F711A000049BB85D3DFF__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', bshPfad + '3014F711A000049BB85D3DFF.PowerSwitch.automaticPowerOffTime', bshPfad + '3014F711A000049BB85D3DFF.PowerSwitch.switchState', bshPfad + '3014F711A000049BB85D3DFF.PowerSwitchProgram.operationMode', 'OG', 'Büro', 'Brigitte PC', '/icons-mfd-png/it_pc.png', 'Bosch Zwischenstecker' ]; let og_buero_walter_pc = [ 'bshb.0.hdm:ZigBee:847127fffe1a3a48.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:ZigBee:847127fffe1a3a48__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', 'bshb.0.hdm:ZigBee:847127fffe1a3a48.PowerSwitch.automaticPowerOffTime', 'bshb.0.hdm:ZigBee:847127fffe1a3a48.PowerSwitch.switchState', 'bshb.0.hdm:ZigBee:847127fffe1a3a48.PowerSwitchProgram.operationMode', 'OG', 'Büro', 'Walter PC', '/icons-mfd-png/it_pc.png', 'Bosch Zwischenstecker' ]; let og_technik_denon = [ bshPfad + '3014F711A000049BB85D3E4C.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:HomeMaticIP:3014F711A000049BB85D3E4C__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', bshPfad + '3014F711A000049BB85D3E4C.PowerSwitch.automaticPowerOffTime', bshPfad + '3014F711A000049BB85D3E4C.PowerSwitch.switchState', bshPfad + '3014F711A000049BB85D3E4C.PowerSwitchProgram.operationMode', 'OG', 'Technik', 'Denon', '/icons-mfd-png/it_av_receiver.png', 'Bosch Zwischenstecker' ]; let og_technik_wand_1 = [ 'mqtt.0.shellies.Power-Technik.relay.0.power', 'sourceanalytix.0.ham__0__Shelly-2__5-84CCA8B0B1FC-#0__Power-Meter__Consumption.currentYear.consumed.05_currentYear', bshPfad + '3014F711A000049BB85D3E4C.PowerSwitch.automaticPowerOffTime', 'mqtt.0.shellies.Power-Technik.relay.0', bshPfad + '3014F711A000049BB85D3E4C.PowerSwitchProgram.operationMode', 'OG', 'Technik', 'Technik Wand oben', '/icons-mfd-png/message_socket.png', 'Shelly 2.5 Power' ]; let og_technik_wand_2 = [ 'mqtt.0.shellies.Power-Technik.relay.1.power', 'sourceanalytix.0.ham__0__Shelly-2__5-84CCA8B0B1FC-#1__Power-Meter__Consumption.currentYear.consumed.05_currentYear', bshPfad + '3014F711A000049BB85D3E4C.PowerSwitch.automaticPowerOffTime', 'mqtt.0.shellies.Power-Technik.relay.1', bshPfad + '3014F711A000049BB85D3E4C.PowerSwitchProgram.operationMode', 'OG', 'Technik', 'Technik Wand unten', '/icons-mfd-png/message_socket.png', 'Shelly 2.5 Power' ]; all_items[2] = new Array( og_buero_brigitte_pc, og_buero_walter_pc, og_technik_denon, og_technik_wand_1, og_technik_wand_2 ); let od_gartenlaube = [ 'bshb.0.hdm:ZigBee:847127fffe2e5341.PowerMeter.powerConsumption', 'sourceanalytix.0.bshb__0__hdm:ZigBee:847127fffe2e5341__PowerMeter__powerConsumption.currentYear.consumed.05_currentYear', 'bshb.0.hdm:ZigBee:847127fffe2e5341.PowerSwitch.automaticPowerOffTime', 'bshb.0.hdm:ZigBee:847127fffe2e5341.PowerSwitch.switchState', 'bshb.0.hdm:ZigBee:847127fffe2e5341.PowerSwitchProgram.operationMode', 'OD', 'Garten', 'Gartenlaube', '/icons-mfd-png/control_outside_on_off.png', 'Bosch Zwischenstecker' ]; all_items[3] = new Array( od_gartenlaube ); // ********************************************************************************************************************************************************************** // Fomate für moment Lib moment.locale(sprache); // auf Änderungen der Sortieung hören on({ id: dpSortMode, change: 'any' }, steckdoseStatus); on({ id: dpSortMode, change: 'any' }, resetSort); // // auf Änderungen der Filter hören on({ id: dpFilterMode, change: 'any' }, steckdoseStatus); // auf Änderung SwitchState und Power hören //Kaffeemaschine on('bshb.0.hdm:HomeMaticIP:3014F711A000049BB85FE614.PowerSwitch.switchState', steckdoseStatus); //Brigitte PC on('bshb.0.hdm:HomeMaticIP:3014F711A000049BB85D3DFF.PowerSwitch.switchState', steckdoseStatus); //Waschmaschine on('bshb.0.hdm:HomeMaticIP:3014F711A000049BB85D3E06.PowerSwitch.switchState', steckdoseStatus); //Trockner on('bshb.0.hdm:HomeMaticIP:3014F711A000049BB85D3E3D.PowerSwitch.switchState', steckdoseStatus); //Geschirrspüler on('bshb.0.hdm:HomeMaticIP:3014F711A000049BB85D3F47.PowerSwitch.switchState', steckdoseStatus); //Kühltruhe on('bshb.0.hdm:HomeMaticIP:3014F711A000049BB85D416A.PowerSwitch.switchState', steckdoseStatus); //Walter PC on('bshb.0.hdm:ZigBee:847127fffe1a3a48.PowerSwitch.switchState', steckdoseStatus); //Gartenlaube on('bshb.0.hdm:ZigBee:847127fffe2e5341.PowerSwitch.switchState', steckdoseStatus); //Heizung on('bshb.0.hdm:ZigBee:847127fffe7f009d.PowerSwitch.switchState', steckdoseStatus); //Toaster on('bshb.0.hdm:ZigBee:847127fffe7f1a8b.PowerSwitch.switchState', steckdoseStatus); //Denon on('bshb.0.hdm:HomeMaticIP:3014F711A000049BB85D3E4C.PowerSwitch.switchState', steckdoseStatus); //TV-Center on('mqtt.0.shellies.Power-Media-Center.relay.0', steckdoseStatus); //Technik 0 on('mqtt.0.shellies.Power-Technik.relay.0', steckdoseStatus); //Technik 1 on('mqtt.0.shellies.Power-Technik.relay.1', steckdoseStatus); function istJsonDP() { if (!existsState('0_userdata.0.vis.Status.Steckdosen.jsonList')) { createState('0_userdata.0.vis.Status.Steckdosen.jsonList', {'name': 'Json List', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': ''}); createState('0_userdata.0.vis.Status.Steckdosen.sortMode', {'name': 'Sortierung', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': ''}); createState('0_userdata.0.vis.Status.Steckdosen.filterMode', {'name': 'Filterung', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': ''}); }; }; function steckdoseStatus() { istJsonDP(); geraeteOn = 0; geraeteCount = 0; try { let deviceList = []; for (var i = 0; i <= all_items.length - 1; i++) { var etageArray = all_items[i]; etageArray.forEach(function(element) { geraeteCount ++; let buttonLink = ''; let onLine = true; let power = getState(element[0]).val.toString(); if (power > 1) { geraeteOn ++; }; let energy = getState(element[1]).val.toString() + ' kW'; let autoOff = getState(element[2]).val.toString() + ' Sek.'; let schalter = getState(element[3]).val; let opMode = getState(element[4]).val; let powerFarbe = 'grey'; if (getState(element[0]).val > 1) { powerFarbe = "red"; }; let image = element[8]; let listType = 'text'; let imageColor = 'black'; let statusBarColor = farbeGeraetOffline; let status = 2; if (onLine === true) { statusBarColor = farbeGeraetOnline; status = 1; }; statusBarColor = farbeGeraetOnline; let subText = `
Type:
${element[9]}
Etage:
${element[5]}
Raum:
${element[6]}
akt. Verbrauch:
${power + ' W'}
Jahres Verbrauch:
${energy}
Eingeschaltet:
${schalter}
Auto Aus:
${autoOff}
Op. Mode:
${opMode}
` deviceList.push({ text: element[7], subText: subText, statusBarColor: statusBarColor, image: image, imageColor: imageColor, listType: listType, buttonLink: buttonLink, showValueLabel: false, name: element[7], status: status, etage: element[5], raum: element[6], }); }) } 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 { // 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 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.Steckdosen.GeraeteAn', geraeteOn); setState('0_userdata.0.vis.Status.Steckdosen.GeraeteCount', geraeteCount); let text = ''; if (geraeteOn == 0) { text = 'Keine Geräte von '; } else if(geraeteOn == 1) { text = '1 Gerät von '; } else if(geraeteOn > 1) { text = geraeteOn + ' Geräte von '; }; setState("0_userdata.0.vis.Status.Steckdosen.GeraeteInfo", text + geraeteCount + ' 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); } } // Beim Staren des Skriptes Geraete Status abrufen steckdoseStatus(); 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; } } } }