const moment = require("moment"); // Skript Einstellungen ************************************************************************************************************************************************* let dpList = '0_userdata.0.vis.Status.Thermostate.jsonList'; // Datenpunkt für IconList Widget (Typ: Zeichenkette (String)) let dpSortMode = '0_userdata.0.vis.Status.Thermostate.sortMode'; // Datenpunkt für Sortieren (Typ: Zeichenkette (String)) let dpFilterMode = '0_userdata.0.vis.Status.Thermostate.filterMode'; // Datenpunkt für Filter (Typ: Zeichenkette (String)) //let showTemp = getState('0_userdata.0.vis.Status.Thermostate.ShowTemperatur').val; //let showMode = getState('0_userdata.0.vis.Status.Thermostate.showMode').val; const checkInterval = 60; // Interval wie oft Status der Skripte aktualisiert werden soll (in Sekunden) let sprache = 'de'; // Sprache für formatierung letzte Änderung let formatierungLastChange = "ddd DD.MM - HH:mm"; // Formatierung letzte Änderung -> siehe momentjs library let farbeGeraetOnline = 'green'; // Status Bar Farbe wenn Geräte online ist let farbeGeraetOffline = 'FireBrick'; // Status Bar Farbe wenn Geräte offline ist let sortResetAfter = 120; // Sortierung nach X Sekunden auf sortReset zurücksetzen (0=deaktiviert) let sortReset = 'name' // Sortierung auf die zurückgesetzt werden soll let filterResetAfter = 120; // Filter nach X Sekunden zurücksetzen (0=deaktiviert) let ventilFarbe = 'grey'; // ist ventil > 1 red let thermostatAn = 0; let thermostateCount = 0; // Ein Array welches alle Geräte beinhaltet, unterteilt noch nach Etagen: let all_items = new Array (); var iconPfad = '/vis-icontwo/Devices/' let bshPfad = "bshb.0.roomClimateControl_hz_"; let dpThermostat = '0_userdata.0.vis.Batterien.Thermostate.' //EG let eg_schlafzimmer = [ bshPfad + '4.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859A159.BatteryLevel.faults', // [1] Batterie bshPfad + '4.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '4.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '4.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '4.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '4.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '4.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '4.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859A159.ValveTappet.position', // [9] Ventil Stellung 'EG', // [10] Etage 'Schlafzimmer', // [11] Raum 'Schlafzimmer', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; let eg_flur = [ bshPfad + '8.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859893D.BatteryLevel.faults', // [1] Batterie bshPfad + '8.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '8.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '8.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '8.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '8.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '8.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '8.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859893D.ValveTappet.position', // [9] Ventil Stellung 'EG', // [10] Etage 'Flur unten', // [11] Raum 'Flur unten', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; let eg_toilette = [ bshPfad + '1.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005A18586C70.BatteryLevel.faults', // [1] Batterie bshPfad + '1.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '1.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '1.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '1.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '1.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '1.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '1.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005A18586C70.ValveTappet.position', // [9] Ventil Stellung 'EG', // [10] Etage 'Toilette', // [11] Raum 'Toilette', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; let eg_kueche = [ bshPfad + '5.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859A271.BatteryLevel.faults', // [1] Batterie bshPfad + '5.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '5.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '5.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '5.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '5.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '5.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '5.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859A271.ValveTappet.position', // [9] Ventil Stellung 'EG', // [10] Etage 'Küche', // [11] Raum 'Küche', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; let eg_wohnzimmer = [ bshPfad + '6.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859A1AC.BatteryLevel.faults', // [1] Batterie bshPfad + '6.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '6.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '6.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '6.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '6.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '6.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '6.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859A1AC.ValveTappet.position', // [9] Ventil Stellung 'EG', // [10] Etage 'Wohnzimmer', // [11] Raum 'Wohnzimmer', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; all_items[0] = new Array( eg_schlafzimmer, eg_flur, eg_toilette, eg_kueche, eg_wohnzimmer ); //OG let og_kino_sitze = [ bshPfad + '7.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005BB85E4717.BatteryLevel.faults', // [1] Batterie bshPfad + '7.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '7.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '7.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '7.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '7.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '7.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '7.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005BB85E4717.ValveTappet.position', // [9] Ventil Stellung 'OG', // [10] Etage 'Kino Sitze', // [11] Raum 'Kino Sitze', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; let og_kino_leinwand = [ bshPfad + '14.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005BB85E4691.BatteryLevel.faults', // [1] Batterie bshPfad + '14.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '14.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '14.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '14.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '14.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '14.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '14.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005BB85E4691.ValveTappet.position', // [9] Ventil Stellung 'OG', // [10] Etage 'Kino Leinwand', // [11] Raum 'Kino Leinwand', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; let og_bad = [ bshPfad + '3.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859A145.BatteryLevel.faults', // [1] Batterie bshPfad + '3.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '3.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '3.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '3.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '3.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '3.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '3.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005A1859A145.ValveTappet.position', // [9] Ventil Stellung 'OG', // [10] Etage 'Badezimmer', // [11] Raum 'Badezimmer', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; let og_flur = [ bshPfad + '10.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005A18598CD3.BatteryLevel.faults', // [1] Batterie bshPfad + '10.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '10.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '10.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '10.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '10.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '10.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '10.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005A18598CD3.ValveTappet.position', // [9] Ventil Stellung 'OG', // [10] Etage 'Flur oben', // [11] Raum 'Flur oben', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; let og_buero = [ bshPfad + '2.RoomClimateControl.boostMode', // [0] boost 'bshb.0.hdm:HomeMaticIP:3014F711A000005A18586C94.BatteryLevel.faults', // [1] Batterie bshPfad + '2.RoomClimateControl.operationMode', // [2] Operations Mode MANUAL, AUTOMATIC, OFF, UNKNOWN bshPfad + '2.RoomClimateControl.roomControlMode', // [3] Control Mode OFF, HEATING bshPfad + '2.RoomClimateControl.setpointTemperature', // [4] Soll Temperatur bshPfad + '2.RoomClimateControl.setpointTemperatureForLevelComfort', // [5] Comfort Temperatur bshPfad + '2.RoomClimateControl.setpointTemperatureForLevelEco', // [6] Eco Temperatur bshPfad + '2.RoomClimateControl.summerMode', // [7] Sommer Modus bshPfad + '2.TemperatureLevel.temperature', // [8] Ist Temperatur 'bshb.0.hdm:HomeMaticIP:3014F711A000005A18586C94.ValveTappet.position', // [9] Ventil Stellung 'OG', // [10] Etage 'Büro', // [11] Raum 'Büro', // [12] Kurzname '/vis.0/Meine Icons/Sonstiges/bosch thermostat.png', // [13] VIS-Icon 'Thermostat' // [14] Verwendung ]; all_items[1] = new Array( og_kino_sitze, og_flur, og_kino_leinwand, og_bad, og_buero ); // ********************************************************************************************************************************************************************** // Fomate für moment Lib moment.locale(sprache); // auf Änderungen der Sortieung hören on({ id: dpSortMode, change: 'any' }, thermostatStatus); on({ id: dpSortMode, change: 'any' }, resetSort); // // auf Änderungen der Filter hören on({ id: dpFilterMode, change: 'any' }, thermostatStatus); on({ id: dpFilterMode, change: 'any' }, resetFilter); // Funktion adapterStatus alle x Sekunden ausführen //schedule('*/' + checkInterval + ' * * * * *', thermostatStatus); //Auf Änderung Thermostat on({id: 'bshb.0.roomClimateControl_hz_1.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); on({id: 'bshb.0.roomClimateControl_hz_2.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); on({id: 'bshb.0.roomClimateControl_hz_3.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); on({id: 'bshb.0.roomClimateControl_hz_4.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); on({id: 'bshb.0.roomClimateControl_hz_5.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); on({id: 'bshb.0.roomClimateControl_hz_5.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); on({id: 'bshb.0.roomClimateControl_hz_7.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); on({id: 'bshb.0.roomClimateControl_hz_8.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); on({id: 'bshb.0.roomClimateControl_hz_10.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); on({id: 'bshb.0.roomClimateControl_hz_14.RoomClimateControl.setpointTemperature'}, function (obj) {thermostatStatus();}); function istJsonDP() { if (!existsState('0_userdata.0.vis.Status.Thermostate.ThermostateAn')) { createState('0_userdata.0.vis.Status.Thermostate.ThermostateAn', {'name': 'Thermostat An', 'type':'number', 'read':true, 'write':true, 'role':'state', 'def': 0}); createState('0_userdata.0.vis.Status.Thermostate.ThermostateCount', {'name': 'Anzahl Thermostate', 'type':'number', 'read':true, 'write':true, 'role':'state', 'def': 0}); createState('0_userdata.0.vis.Status.Thermostate.ThermostatInfo', {'name': 'Info text', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': 0}); createState('0_userdata.0.vis.Status.Thermostate.jsonList', {'name': 'Json List', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': ''}); createState('0_userdata.0.vis.Status.Thermostate.sortMode', {'name': 'Sortierung', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': ''}); createState('0_userdata.0.vis.Status.Thermostate.filterMode', {'name': 'Filterung', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def': ''}); }; }; function thermostatStatus() { istJsonDP(); thermostatAn = 0; thermostateCount = 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 boost = false; if (element[0].length > 0) { boost = getState(element[0]).val; }; let batterie = "Fehler"; if (element[1].length > 0) { batterie = 'OK!'; }; let operationMode = ''; if (element[2].length > 0) { operationMode = getState(element[2]).val; }; let controlMode = "Fehler"; if (element[3].length > 0) { controlMode = getState(element[3]).val; }; let sollTemp = '0 °C'; if (element[4].length > 0) { sollTemp = getState(element[4]).val + " °C"; }; let comfortTemp = "Fehler"; if (element[5].length > 0) { comfortTemp = getState(element[5]).val + " °C"; }; let ecoTemp = "Fehler"; if (element[6].length > 0) { ecoTemp = getState(element[6]).val + " °C"; }; let sommer = false; if (element[7].length > 0) { sommer = getState(element[7]).val; }; let istTemp = "Fehler"; if (element[8].length > 0) { istTemp = getState(element[8]).val + " °C"; }; let ventil = ""; if (element[9].length > 0) { ventil = getState(element[9]).val + " %"; if (getState(element[9]).val > 0) { ventilFarbe = "red"; thermostatAn++; } else { ventilFarbe = "grey"; }; }; let dpName = element[11].replace(" ", "_"); setState('0_userdata.0.vis.Status.Thermostate.' + dpName, ventilFarbe, true); thermostateCount++; let image = element[13]; let listType = 'text'; let imageColor = 'black'; let statusBarColor = farbeGeraetOffline; let status = 2; if (onLine === true) { statusBarColor = farbeGeraetOnline; status = 1; }; statusBarColor = farbeGeraetOnline; let subText = `