diff --git a/ioBroker/NsPanelTs.ts b/ioBroker/NsPanelTs.ts index 22890ca3..b8c66cf4 100644 --- a/ioBroker/NsPanelTs.ts +++ b/ioBroker/NsPanelTs.ts @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------- -TypeScript v3.5.0.1 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Britzelpuf +TypeScript v3.5.0.2 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Britzelpuf - abgestimmt auf TFT 43 / v3.5.0 / BerryDriver 4 / Tasmota 12.2.0 @joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker diff --git a/ioBroker/NsPanelTs_without_Examples.ts b/ioBroker/NsPanelTs_without_Examples.ts index 365896d7..7174ac0e 100644 --- a/ioBroker/NsPanelTs_without_Examples.ts +++ b/ioBroker/NsPanelTs_without_Examples.ts @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------- -TypeScript v3.5.0.1 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Britzelpuf +TypeScript v3.5.0.2 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Britzelpuf - abgestimmt auf TFT 43 / v3.5.0 / BerryDriver 4 / Tasmota 12.2.0 @joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker @@ -46,7 +46,7 @@ ReleaseNotes: - 13.09.2022 - v3.3.1.3 Hinzufügen von SpotifyPremium, Sonos und Chromecast (Google home) zur cardMedia-Logik - 15.09.2022 - V3.4.0 - BugFix Dimmode - 15.09.2022 - V3.4.0 - Colormode für Screensaver + AutoColor WeatherForecast - - 16.09.2022 - v3.4.0.1 Visualisierung der Relay Zustände (MRIcons) im Screensaver + Bugfix Screensaver MRIcon2 + - 16.09.2022 - v3.4.0.1 Visualisierung der Relay Zustände (MRIcons) im Screensaver + Bugfix Screensaver MRIcon2 - 17.09.2022 - v3.4.0.2 Bugfix for screensaver icons with scaled colors - 17.09.2022 - v3.4.0.3 Bugfix bNext / bPrev by joBr99 - 18.09.2022 - v3.4.0.4 Add On/Off Colors in config.mrIcon1ScreensaverEntity and config.mrIcon2ScreensaverEntity @@ -60,71 +60,72 @@ ReleaseNotes: - 08.10.2022 - v3.5.0 Add Tilt-Slider and TILT_Fucntions (Open/Stop/Close) to Blinds/Cover/Shutter popUp - 12.10.2022 - v3.5.0 Add PageNavigation via Datapoint - 25.10.2022 - v3.5.0 Add New Parameters to popUpNotify / Layout 2 - - 26.10.2022 - v3.5.0.1 Fix Thermostat for tado Support (by Sternmiere) - - 27.10.2022 - v3.5.0.1 Add VirtualDevice Gate + - 26.10.2022 - v3.5.0.1 Fix Thermostat for tado Support (by Sternmiere) + - 27.10.2022 - v3.5.0.1 Add VirtualDevice Gate + - 27.10.2022 - v3.5.0.2 Applied Boy Scout Rule (Fixed some typos, changed var to let, fixed min/max colorTemp Bug) -Wenn Rule definiert, dann können die Hardware-Tasten ebenfalls für Seitensteuerung (dann nicht mehr als Releais) genutzt werden -Tasmota Konsole: +Wenn Rule definiert, dann können die Hardware-Tasten ebenfalls für Seitensteuerung (dann nicht mehr als Relais) genutzt werden +Tasmota Konsole: Rule2 on Button1#state do Publish %topic%/%prefix%/RESULT {"CustomRecv":"event,button1"} endon on Button2#state do Publish %topic%/%prefix%/RESULT {"CustomRecv":"event,button2"} endon Rule2 1 (Rule aktivieren) - Rule2 0 (Rule deaktivieren) + Rule2 0 (Rule deaktivieren) Mögliche Seiten-Ansichten: screensaver Page - wird nach definiertem Zeitraum (config) mit Dimm-Modus aktiv (Uhrzeit, Datum, Aktuelle Temperatur mit Symbol) - (die 4 kleineren Icons können als Wetter-Vorschau + 4Tage (Symbol + Höschsttemperatur) oder zur Anzeige definierter Infos konfiguriert werden) + (die 4 kleineren Icons können als Wetter-Vorschau + 4Tage (Symbol + Höchsttemperatur) oder zur Anzeige definierter Infos konfiguriert werden) cardEntities Page - 4 vertikale angeordnete Steuerelemente - auch als Subpage cardGrid Page - 6 horizontal angeordnete Steuerelemente in 2 Reihen a 3 Steuerelemente - auch als Subpage cardThermo Page - Thermostat mit Solltemperatur, Isttemperatur, Mode - Weitere Eigenschaften können im Alias definiert werden - cardMedia Page - Mediaplayer - Ausnahme: Alias sollte mit Alias-Manager automatisch über Alexa-Verzeichnes Player angelegt werden + cardMedia Page - Mediaplayer - Ausnahme: Alias sollte mit Alias-Manager automatisch über Alexa-Verzeichnis Player angelegt werden cardAlarm Page - Alarmseite mit Zustand und Tastenfeld - cardPower Page - Energiefluss + cardPower Page - Energiefluss Popup-Pages: - popupLight Page - in Abhängigkeit zum gewählten Alias werden "Helligkeit", "Farb-Temperatur" und "Farbauswahl" bereitgestellt - popupShutter Page - die Shutter-Potition (Rollo, Jalousie, Markise, Leinwand, etc.) kann über einen Slider verändert werden. + popupLight Page - in Abhängigkeit zum gewählten Alias werden "Helligkeit", "Farbtemperatur" und "Farbauswahl" bereitgestellt + popupShutter Page - die Shutter-Position (Rollo, Jalousie, Markise, Leinwand, etc.) kann über einen Slider verändert werden. popupNotify Page - Info - Seite mit Headline Text und Buttons - Intern für manuelle Updates / Extern zur Befüllung von Datenpunkten unter 0_userdata screensaver Notify - Über zwei externe Datenpunkte in 0_userdata können "Headline" und "Text" an den Screensaver zur Info gesendet werden -Mögliche Aliase: (Vorzugsweise mit ioBroker-Adapter "Geräte verwalten" konfigurieren, da SET, GET, ACTUAL, etc. verwendet werden) +Mögliche Aliase: (Vorzugsweise mit ioBroker-Adapter "Geräte verwalten" konfigurieren, da SET, GET, ACTUAL, etc. verwendet werden) Info - Werte aus Datenpunkt Schieberegler - Slider numerische Werte (SET/ACTUAL) - Lautstärke - Volume (SET/ACTUAL) und MUTE - Lautstärke-Gruppe - analog Lautstärke + Lautstärke - Volume (SET/ACTUAL) und MUTE + Lautstärke-Gruppe - analog Lautstärke Licht - An/Aus (Schalter) Steckdose - An/Aus (Schalter) Dimmer - An/Aus, Brightness - Farbtemperatur - An/Aus, Farbtemperatur und Brightness - HUE-Licht - Zum Schalten von Color-Leuchtmitteln über HUE-Wert, Brightness, Farbtemperatur, An/Aus (HUE kann auch fehlen) - RGB-Licht - RGB-Leuchtmitteln/Stripes welche Rot/Grün/ und Blau separat benötigen (Tasmota, WifiLight, etc.) + Brightness, Farbtemperatur - RGB-Licht-einzeln - RGB-Leuchtmitteln/Stripes welche HEX-Farbwerte benötigen (Tasmota, WifiLight, etc.) + Brightness, Farbtemperatur - Jalousien - Up, Stop, Down, Position - Fenster - Sensor open - Tür - Sensor open + Farbtemperatur - An/Aus, Farbtemperatur und Brightness + HUE-Licht - Zum Schalten von Color-Leuchtmitteln über HUE-Wert, Brightness, Farbtemperatur, An/Aus (HUE kann auch fehlen) + RGB-Licht - RGB-Leuchtmitteln/Stripes welche Rot/Grün/ und Blau separat benötigen (Tasmota, WifiLight, etc.) + Brightness, Farbtemperatur + RGB-Licht-einzeln - RGB-Leuchtmitteln/Stripes welche HEX-Farbwerte benötigen (Tasmota, WifiLight, etc.) + Brightness, Farbtemperatur + Jalousien - Up, Stop, Down, Position + Fenster - Sensor open + Tür - Sensor open Verschluss - Türschloss SET/ACTUAL/OPEN Taste - Für Szenen oder Radiosender, etc. --> Nur Funktionsaufruf - Kein Taster wie MonoButton - True/False Tastensensor - analog Taste - Thermostat - Aktuelle Raumtemperatur, Setpoint, etc. + Thermostat - Aktuelle Raumtemperatur, Setpoint, etc. Klimaanlage - Buttons zur Steuerung der Klimaanlage im unteren Bereich - Temperatur - Anzeige von Temperture - Datenpunkten, ananlog Info - Feuchtigkeit - Anzeige von Humidity - Datenpunkten, ananlog Info - Medien - Steuerung von Alexa - Über Alias-Manager im Verzeichnis Player automatisch anlegen (Geräte-Manager funktioniert nicht) - Wettervorhersage - Aktuelle Außen-Temperatur (Temp) und aktuelles Accu-Wheather-Icon (Icon) für Screensaver + Temperatur - Anzeige von Temperatur - Datenpunkten, analog Info + Feuchtigkeit - Anzeige von Humidity - Datenpunkten, analog Info + Medien - Steuerung von Alexa - Über Alias-Manager im Verzeichnis Player automatisch anlegen (Geräte-Manager funktioniert nicht) + Wettervorhersage - Aktuelle Außen-Temperatur (Temp) und aktuelles AccuWeather-Icon (Icon) für Screensaver Interne Sonoff-Sensoren (über Tasmota): - ESP-Temperatur - wird in 0_userdata.0. abgelegt, kann als Alias importieert werden --> SetOption146 1 - Temperatur - Raumtemperatur - wird in 0_userdata.0. abgelegt, kann als Alias importieert werden - (!!! Achtung: der interne Sonoff-Sensor liefert keine exakten Daten, da das NSPanel-Board und der ESP selbst Hitze produzieren !!! + ESP-Temperatur - wird in 0_userdata.0. abgelegt, kann als Alias importiert werden --> SetOption146 1 + Temperatur - Raumtemperatur - wird in 0_userdata.0. abgelegt, kann als Alias importiert werden + (!!! Achtung: der interne Sonoff-Sensor liefert keine exakten Daten, da das NSPanel-Board und der ESP selbst Hitze produzieren !!! ggf. Offset einplanen oder besser einen externen Sensor über Zigbee etc. verwenden) Timestamp - wird in 0_userdata.0. Zeitpunkt der letzten Sensorübertragung -Tasmota-Status0 - (zyklische Ausführung) +Tasmota-Status0 - (zyklische Ausführung) liefert relevanten Tasmota-Informationen und kann bei Bedarf in "function get_tasmota_status0()" erweitert werden. Daten werden in 0_userdata.0. abgelegt Erforderliche Adapter: - Accu-Wheater: - Bei Nutzung der Wetterfunktionen (und zur Icon-Konvertierung) im Screensaver + AccuWeather: - Bei Nutzung der Wetterfunktionen (und zur Icon-Konvertierung) im Screensaver Alexa2: - Bei Nutzung der dynamischen SpeakerList in der cardMedia Geräte verwalten - Für Erstellung der Aliase - Alias-Manager - !!! ausschießlich für MEDIA-Alias + Alias-Manager - !!! ausschließlich für MEDIA-Alias MQTT-Adapter - Für Kommunikation zwischen Skript und Tasmota JavaScript-Adapter @@ -132,10 +133,12 @@ Upgrades in Konsole: Tasmota BerryDriver : Backlog UpdateDriverVersion https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; Restart 1 TFT EU STABLE Version : FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v3.5.0.tft --------------------------------------------------------------------------------------- -*/ -var Icons = new IconsSelector(); -var timeoutSlider: any; -var manually_Update = false; +*/ +import { config } from './NsPanelTs' + +let Icons = new IconsSelector(); +let timeoutSlider: any; +let manually_Update = false; const NSPanel_Path = '0_userdata.0.NSPanel.1.'; const NSPanel_Alarm_Path = '0_userdata.0.NSPanel.'; //Neuer Pfad für gemeinsame Nutzung durch mehrere Panels (bei Nutzung der cardAlarm) @@ -144,7 +147,7 @@ const Debug = false; // Variablen zur Steuerung der Wettericons auf dem Screensaver (Steuerung in 0_userdata.0.XPANELX.ScreensaverInfo) // Wenn weatherForecastTimer auf true, dann Wechsel zwischen Datenpunkten und Wettervorhersage (30 Sekunden nach Minute (Zeit)) // Wenn weatherForecastTimer auf false, dann Möglichkeit über weatherForecast, ob Datenpunkte oder Wettervorhersage (true = WeatherForecast/false = Datenpunkte) -var weatherForecast: boolean; //Änderung zum Video --> Einstellung siehe Wiki +let weatherForecast: boolean; // Änderung zum Video --> Einstellung siehe Wiki const HMIOff: RGB = { red: 68, green: 115, blue: 158 }; // Blau-Off - Original Entity Off const HMIDark: RGB = { red: 29, green: 29, blue: 29 }; // Original Background Color @@ -220,7 +223,7 @@ const swSnowyRainy: RGB = { red: 150, green: 150, blue: 255}; const swSunny: RGB = { red: 255, green: 255, blue: 0}; const swWindy: RGB = { red: 150, green: 150, blue: 150}; -var vwIconColor = []; +let vwIconColor = []; //-- Anfang der Variablen für Seitengestaltung -- Aliase erforderlich ---------------- @@ -228,41 +231,6 @@ var vwIconColor = []; //-- ENDE der Variablen für Seitengestaltung -- Aliase erforderlich ------------------ -export const config: Config = { - panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT', // anpassen - panelSendTopic: 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend', // anpassen - firstScreensaverEntity: { ScreensaverEntity: 'accuweather.0.Hourly.h0.PrecipitationProbability', ScreensaverEntityIcon: 'weather-pouring', ScreensaverEntityText: 'Regen', ScreensaverEntityUnitText: '%', ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} }, - secondScreensaverEntity: { ScreensaverEntity: 'accuweather.0.Current.WindSpeed', ScreensaverEntityIcon: 'weather-windy', ScreensaverEntityText: "Wind", ScreensaverEntityUnitText: 'km/h', ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 120} }, - thirdScreensaverEntity: { ScreensaverEntity: 'accuweather.0.Current.UVIndex', ScreensaverEntityIcon: 'solar-power', ScreensaverEntityText: 'UV', ScreensaverEntityUnitText: '', ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 9} }, - fourthScreensaverEntity: { ScreensaverEntity: 'accuweather.0.Current.RelativeHumidity', ScreensaverEntityIcon: 'water-percent', ScreensaverEntityText: 'Luft', ScreensaverEntityUnitText: '%', ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65} }, - alternativeScreensaverLayout: false, - autoWeatherColorScreensaverLayout: true, - //!!!! Achtung anpassen !!!! - mrIcon1ScreensaverEntity: { ScreensaverEntity: 'mqtt.0.SmartHome.NSPanel_1.stat.POWER1', ScreensaverEntityIcon: 'light-switch', ScreensaverEntityOnColor: On, ScreensaverEntityOffColor: Off }, - mrIcon2ScreensaverEntity: { ScreensaverEntity: 'mqtt.0.SmartHome.NSPanel_1.stat.POWER2', ScreensaverEntityIcon: 'lightbulb', ScreensaverEntityOnColor: On, ScreensaverEntityOffColor: Off }, - timeoutScreensaver: 20, - dimmode: 20, - active: 100, //Standard-Brightness TFT - screenSaverDoubleClick: true, - locale: 'de-DE', // en-US, de-DE, nl-NL, da-DK, es-ES, fr-FR, it-IT, ru-RU, etc. - timeFormat: '%H:%M', // currently not used - dateFormat: '%A, %d. %B %Y', // currently not used - weatherEntity: 'alias.0.Wetter', // Dieser Alias muss erstellt werden, damit die 4 kleineren Icons (Wetter oder DP) angezeigt werden können - defaultOffColor: Off, - defaultOnColor: On, - defaultColor: Off, - defaultBackgroundColor: Black, //New Parameter - temperatureUnit: '°C', - pages: [ - - ], - subPages: [ - - ], - button1Page: null, //Beispiel-Seite auf Button 1, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null, - button2Page: null //Beispiel-Seite auf Button 2, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null, -}; - // _________________________________ Ab hier keine Konfiguration mehr _____________________________________ const request = require('request'); @@ -296,37 +264,45 @@ on({id: [].concat([NSPanel_Path + 'PageNavi']), change: "any"}, async function ( function ScreensaverDimmode(timeDimMode: DimMode) { try { - if (Debug) console.log(rgb_dec565(HMIDark)) - if (Debug) console.log('Dimmode='+ timeDimMode.dimmodeOn) + if (Debug) { + console.log(rgb_dec565(HMIDark)) + } + if (Debug) { + console.log('Dimmode=' + timeDimMode.dimmodeOn) + } if (timeDimMode.dimmodeOn != undefined ? timeDimMode.dimmodeOn : false) { if (compareTime(timeDimMode.timeNight != undefined ? timeDimMode.timeNight : '22:00', timeDimMode.timeDay != undefined ? timeDimMode.timeDay : '07:00', 'not between', undefined)) { SendToPanel({ payload: 'dimmode~' + timeDimMode.brightnessDay + '~' + config.active + '~' + rgb_dec565(config.defaultBackgroundColor) }); - if (Debug) console.log('Day Payload: ' + 'dimmode~' + timeDimMode.brightnessDay + '~' + config.active ) + if (Debug) { + console.log('Day Payload: ' + 'dimmode~' + timeDimMode.brightnessDay + '~' + config.active) + } } else { SendToPanel({ payload: 'dimmode~' + timeDimMode.brightnessNight + '~' + config.active + '~' + rgb_dec565(config.defaultBackgroundColor) }); - if (Debug) console.log('Night Payload: ' + 'dimmode~' + timeDimMode.brightnessNight + '~' + config.active ) + if (Debug) { + console.log('Night Payload: ' + 'dimmode~' + timeDimMode.brightnessNight + '~' + config.active) + } } } else { SendToPanel({ payload: 'dimmode~' + config.dimmode + '~' + config.active + '~' + rgb_dec565(config.defaultBackgroundColor) }); } } catch (err) { console.warn('function ScreensaverDimmode: ' + err.message); - } + } } async function InitWeatherForecast() { try { //----Möglichkeit, im Screensaver zwischen Accu-Weather Forecast oder selbstdefinierten Werten zu wählen--------------------------------- - if (existsState(NSPanel_Path + "ScreensaverInfo.weatherForecast") == false || - existsState(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer") == false || - existsState(NSPanel_Path + "ScreensaverInfo.entityChangeTime") == false) { + if (existsState(NSPanel_Path + "ScreensaverInfo.weatherForecast") == false || + existsState(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer") == false || + existsState(NSPanel_Path + "ScreensaverInfo.entityChangeTime") == false) { await createStateAsync(NSPanel_Path + "ScreensaverInfo.weatherForecast", true, { type: 'boolean' }); await createStateAsync(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer", true, { type: 'boolean' }); await createStateAsync(NSPanel_Path + "ScreensaverInfo.entityChangeTime", 60, { type: 'number' }); - }; + } } catch (err) { console.warn('function InitWeatherForecast: ' + err.message); - } + } } InitWeatherForecast(); @@ -378,7 +354,7 @@ async function InitDimmode() { ScreensaverDimmode(timeDimMode); } catch (err) { console.warn('function InitDimmode: ' + err.message); - } + } } InitDimmode(); @@ -401,10 +377,10 @@ const popupNotifyButton2TextColor = NSPanel_Path + 'popupNotify.popupNotifyButto const popupNotifyButton2Text = NSPanel_Path + 'popupNotify.popupNotifyButton2Text'; const popupNotifySleepTimeout = NSPanel_Path + 'popupNotify.popupNotifySleepTimeout'; // in sek. / wenn 0, dann bleibt die Nachricht stehen const popupNotifyAction = NSPanel_Path + 'popupNotify.popupNotifyAction'; // Antwort aus dem Panel true/false -const popupNotifyLayout = NSPanel_Path + 'popupNotify.popupNotifyLayout'; -const popupNotifyFontIdText = NSPanel_Path + 'popupNotify.popupNotifyFontIdText'; 1 - 5 -const popupNotifyIcon = NSPanel_Path + 'popupNotify.popupNotifyIcon'; 1 - 5 -const popupNotifyIconColor = NSPanel_Path + 'popupNotify.popupNotifyIconColor'; 1 - 5 +const popupNotifyLayout = NSPanel_Path + 'popupNotify.popupNotifyLayout'; +const popupNotifyFontIdText = NSPanel_Path + 'popupNotify.popupNotifyFontIdText'; // 1 - 5 +const popupNotifyIcon = NSPanel_Path + 'popupNotify.popupNotifyIcon'; // 1 - 5 +const popupNotifyIconColor = NSPanel_Path + 'popupNotify.popupNotifyIconColor'; // 1 - 5 async function InitPopupNotify() { try { @@ -419,14 +395,14 @@ async function InitPopupNotify() { } await createStateAsync(popupNotifyHeading, { type: 'string' }); - await createStateAsync(popupNotifyHeadingColor, { type: 'string' }); + await createStateAsync(popupNotifyHeadingColor, { type: 'string' }); await createStateAsync(popupNotifyText, { type: 'string' }); - await createStateAsync(popupNotifyTextColor, { type: 'string' }); + await createStateAsync(popupNotifyTextColor, { type: 'string' }); await createStateAsync(popupNotifyInternalName, { type: 'string' }); await createStateAsync(popupNotifyButton1Text, { type: 'string' }); - await createStateAsync(popupNotifyButton1TextColor, { type: 'string' }); + await createStateAsync(popupNotifyButton1TextColor, { type: 'string' }); await createStateAsync(popupNotifyButton2Text, { type: 'string' }); - await createStateAsync(popupNotifyButton2TextColor, { type: 'string' }); + await createStateAsync(popupNotifyButton2TextColor, { type: 'string' }); await createStateAsync(popupNotifySleepTimeout, { type: 'number' }); await createStateAsync(popupNotifyAction, { type: 'boolean' }); await createStateAsync(popupNotifyLayout, { type: 'number' }); @@ -447,10 +423,10 @@ async function InitPopupNotify() { }); // popupNotify - Notification an separate Seite - on({ id: [popupNotifyInternalName], change: 'ne' }, async (obj) => { - - var notification : string = '' - + on({ id: [popupNotifyInternalName], change: 'ne' }, async () => { + + let notification: string; + let v_popupNotifyHeadingColor = (getState(popupNotifyHeadingColor).val != null) ? getState(popupNotifyHeadingColor).val : '65504'// Farbe Headline - gelb 65504 let v_popupNotifyButton1TextColor = (getState(popupNotifyButton1TextColor).val != null) ? getState(popupNotifyButton1TextColor).val : '63488'// Farbe Headline - gelb 65504 let v_popupNotifyButton2TextColor = (getState(popupNotifyButton2TextColor).val != null) ? getState(popupNotifyButton2TextColor).val : '2016'// Farbe Headline - gelb 65504 @@ -460,22 +436,22 @@ async function InitPopupNotify() { let v_popupNotifyIcon = (getState(popupNotifyIcon).val != null) ? getState(popupNotifyIcon).val : 'alert' notification = 'entityUpdateDetail' + '~' - + getState(popupNotifyInternalName).val + '~' - + getState(popupNotifyHeading).val + '~' - + v_popupNotifyHeadingColor + '~' - + getState(popupNotifyButton1Text).val + '~' - + v_popupNotifyButton1TextColor + '~' - + getState(popupNotifyButton2Text).val + '~' - + v_popupNotifyButton2TextColor + '~' - + getState(popupNotifyText).val + '~' - + v_popupNotifyTextColor + '~' - + getState(popupNotifySleepTimeout).val; + + getState(popupNotifyInternalName).val + '~' + + getState(popupNotifyHeading).val + '~' + + v_popupNotifyHeadingColor + '~' + + getState(popupNotifyButton1Text).val + '~' + + v_popupNotifyButton1TextColor + '~' + + getState(popupNotifyButton2Text).val + '~' + + v_popupNotifyButton2TextColor + '~' + + getState(popupNotifyText).val + '~' + + v_popupNotifyTextColor + '~' + + getState(popupNotifySleepTimeout).val; if (getState(popupNotifyLayout).val == 2) { notification = notification + '~' - + v_popupNotifyFontIdText + '~' - + Icons.GetIcon(v_popupNotifyIcon) + '~' - + v_popupNotifyIconColor; + + v_popupNotifyFontIdText + '~' + + Icons.GetIcon(v_popupNotifyIcon) + '~' + + v_popupNotifyIconColor; } setIfExists(config.panelSendTopic, 'pageType~popupNotify'); @@ -484,7 +460,7 @@ async function InitPopupNotify() { }); } catch (err) { console.warn('function InitPopupNotify: ' + err.message); - } + } } InitPopupNotify(); @@ -502,40 +478,40 @@ schedule('* * * * *', () => { SendTime(); } catch (err) { console.warn('schedule: ' + err.message); - } + } }); -//Wechsel zwischen Screensaver Enities und WeatherForecast +//Wechsel zwischen Screensaver Entities und WeatherForecast schedule('*/' + getState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime').val + ' * * * * *', () => { try { - //WeatherForcast true/false Umschaltung verzögert + //WeatherForecast true/false Umschaltung verzögert if (getState(NSPanel_Path + "ScreensaverInfo.popupNotifyHeading").val == '' && getState(NSPanel_Path + "ScreensaverInfo.popupNotifyText").val == '' && getState(NSPanel_Path + "ScreensaverInfo.weatherForecast").val == true && getState(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer").val == true) { - setStateDelayed(NSPanel_Path + "ScreensaverInfo.weatherForecast", false, (getState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime').val / 2 * 1000), false); + setStateDelayed(NSPanel_Path + "ScreensaverInfo.weatherForecast", false, (getState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime').val / 2 * 1000), false); } else if (getState(NSPanel_Path + "ScreensaverInfo.popupNotifyHeading").val == '' && getState(NSPanel_Path + "ScreensaverInfo.popupNotifyText").val == '' && getState(NSPanel_Path + "ScreensaverInfo.weatherForecast").val == false && getState(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer").val == true) { setStateDelayed(NSPanel_Path + "ScreensaverInfo.weatherForecast", true, (getState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime').val / 2 * 1000), false); } } catch (err) { console.warn('schedule: ' + err.message); - } + } }); function InitHWButton1Color() { try { if (config.mrIcon1ScreensaverEntity.ScreensaverEntity != null || config.mrIcon1ScreensaverEntity.ScreensaverEntity != undefined) { - on({id: config.mrIcon1ScreensaverEntity.ScreensaverEntity, change: "ne"}, async function (obj) { + on({id: config.mrIcon1ScreensaverEntity.ScreensaverEntity, change: "ne"}, async function () { HandleScreensaverUpdate(); }); } } catch (err) { console.warn('function InitHWButton1Color: ' + err.message); - } + } } InitHWButton1Color(); function InitHWButton2Color() { try { if (config.mrIcon2ScreensaverEntity.ScreensaverEntity != null || config.mrIcon2ScreensaverEntity.ScreensaverEntity != undefined) { - on({id: config.mrIcon2ScreensaverEntity.ScreensaverEntity, change: "ne"}, async function (obj) { + on({id: config.mrIcon2ScreensaverEntity.ScreensaverEntity, change: "ne"}, async function () { HandleScreensaverUpdate(); }); } @@ -578,7 +554,9 @@ check_updates(); function get_locales() { try { - if (Debug) console.log('Requesting locales'); + if (Debug) { + console.log('Requesting locales'); + } request({ url: 'https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/ioBroker/ioBroker_NSPanel_locales.json', headers: { @@ -596,7 +574,7 @@ function get_locales() { }); } catch (err) { console.error('error requesting locales in function get_locales: ' + err.message); - } + } } async function check_updates() { @@ -604,13 +582,17 @@ async function check_updates() { const desired_display_firmware_version = 43; const berry_driver_version = 4; - if (Debug) console.log('Check-Updates'); + if (Debug) { + console.log('Check-Updates'); + } // Tasmota-Firmware-Vergleich if (existsObject(NSPanel_Path + 'Tasmota_Firmware.currentVersion') && existsObject(NSPanel_Path + 'Tasmota_Firmware.onlineVersion')) { if (getState(NSPanel_Path + 'Tasmota_Firmware.currentVersion').val !== getState(NSPanel_Path + 'Tasmota_Firmware.onlineVersion').val) { if (existsState(NSPanel_Path + 'NSPanel_autoUpdate')) { if (getState(NSPanel_Path + 'NSPanel_autoUpdate').val) { - if (Debug) console.log('Auto-Updates eingeschaltet - Update wird durchgeführt'); + if (Debug) { + console.log('Auto-Updates eingeschaltet - Update wird durchgeführt'); + } // Tasmota Upgrade durchführen update_tasmota_firmware(); // Aktuelle Tasmota Version = Online Tasmota Version @@ -618,7 +600,9 @@ async function check_updates() { await setStateAsync(NSPanel_Path + 'Tasmota_Firmware.currentVersion', { val: getState(NSPanel_Path + 'Tasmota_Firmware.onlineVersion').val, ack: true }); } else { // Auf Tasmota-Updates hinweisen - if (Debug) console.log('Automatische Updates aus'); + if (Debug) { + console.log('Automatische Updates aus'); + } const InternalName = 'TasmotaFirmwareUpdate'; const Headline = 'Tasmota-Firmware Update'; @@ -636,7 +620,9 @@ async function check_updates() { } } } else { - if (Debug) console.log('Tasmota-Version auf NSPanel aktuell'); + if (Debug) { + console.log('Tasmota-Version auf NSPanel aktuell'); + } } } @@ -650,10 +636,14 @@ async function check_updates() { // Aktuelle Berry-Driver Version = Online Berry-Driver Version await setStateAsync(NSPanel_Path + 'Berry_Driver.currentVersion', { val: getState(NSPanel_Path + 'Berry_Driver.onlineVersion').val, ack: true }); - if (Debug) console.log('Berry-Driver automatisch aktualisiert'); + if (Debug) { + console.log('Berry-Driver automatisch aktualisiert'); + } } else { //Auf BerryDriver-Update hinweisen - if (Debug) console.log('Automatische Updates aus'); + if (Debug) { + console.log('Automatische Updates aus'); + } const InternalName = 'BerryDriverUpdate'; const Headline = 'Berry-Driver Update'; @@ -671,7 +661,9 @@ async function check_updates() { } } } else { - if (Debug) console.log('Berry-Driver auf NSPanel aktuell'); + if (Debug) { + console.log('Berry-Driver auf NSPanel aktuell'); + } } } @@ -685,10 +677,14 @@ async function check_updates() { // Aktuelle TFT-Firmware Version = Online TFT-Firmware Version await setStateAsync(NSPanel_Path + 'Display_Firmware.currentVersion', { val: getState(NSPanel_Path + 'Display_Firmware.onlineVersion').val, ack: true }); - if (Debug) console.log('Display_Firmware automatisch aktualisiert'); + if (Debug) { + console.log('Display_Firmware automatisch aktualisiert'); + } } else { // Auf TFT-Firmware hinweisen - if (Debug) console.log('Automatische Updates aus'); + if (Debug) { + console.log('Automatische Updates aus'); + } const InternalName = 'TFTFirmwareUpdate'; const Headline = 'TFT-Firmware Update'; @@ -706,7 +702,9 @@ async function check_updates() { } } } else { - if (Debug) console.log('Display_Firmware auf NSPanel aktuell'); + if (Debug) { + console.log('Display_Firmware auf NSPanel aktuell'); + } } } } catch (err) { @@ -720,7 +718,9 @@ on({ id: NSPanel_Path + 'popupNotify.popupNotifyAction', change: 'any' }, async if (!val) { manually_Update = false; - if (Debug) console.log('Es wurde Button1 gedrückt'); + if (Debug) { + console.log('Es wurde Button1 gedrückt'); + } } else if (val) { if (manually_Update) { const internalName = getState(NSPanel_Path + 'popupNotify.popupNotifyInternalName').val; @@ -734,7 +734,9 @@ on({ id: NSPanel_Path + 'popupNotify.popupNotifyAction', change: 'any' }, async } } - if (Debug) console.log('Es wurde Button2 gedrückt'); + if (Debug) { + console.log('Es wurde Button2 gedrückt'); + } } } catch (err) { console.warn('Trigger popupNotifyAction: ' + err.message); @@ -763,7 +765,9 @@ function get_current_tasmota_ip_address() { const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2'; const infoObj = JSON.parse(getState(infoObjId).val); - if (Debug) console.log(`get_current_tasmota_ip_address: ${infoObj.Info2.IPAddress}`); + if (Debug) { + console.log(`get_current_tasmota_ip_address: ${infoObj.Info2.IPAddress}`); + } return infoObj.Info2.IPAddress; } catch (err) { @@ -773,7 +777,9 @@ function get_current_tasmota_ip_address() { function get_online_tasmota_firmware_version() { try { - if (Debug) console.log('Requesting tasmota firmware version'); + if (Debug) { + console.log('Requesting tasmota firmware version'); + } request({ url: 'https://api.github.com/repositories/80286288/releases/latest', headers: { @@ -798,7 +804,9 @@ function get_online_tasmota_firmware_version() { function get_current_berry_driver_version() { try { - if (Debug) console.log('Requesting current berry driver version'); + if (Debug) { + console.log('Requesting current berry driver version'); + } request({ url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=GetDriverVersion`, headers: { @@ -819,7 +827,9 @@ function get_current_berry_driver_version() { function get_tasmota_status0() { try { - if (Debug) console.log('Requesting tasmota status0'); + if (Debug) { + console.log('Requesting tasmota status0'); + } request({ url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=Status0`, headers: { @@ -864,7 +874,9 @@ function get_tasmota_status0() { function get_online_berry_driver_version() { try { - if (Debug) console.log('Requesting online berry driver version'); + if (Debug) { + console.log('Requesting online berry driver version'); + } request({ url: 'https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be', headers: { @@ -888,7 +900,9 @@ function get_online_berry_driver_version() { function check_version_tft_firmware() { try { - if (Debug) console.log('Requesting online TFT version'); + if (Debug) { + console.log('Requesting online TFT version'); + } request({ url: 'https://api.github.com/repos/joBr99/nspanel-lovelace-ui/releases/latest', headers: { @@ -897,9 +911,9 @@ function check_version_tft_firmware() { }, async (error, response, result) => { if (result) { try { - var NSPanel_JSON = JSON.parse(result); // JSON Resultat in Variable Schreiben - var NSPanelTagName = NSPanel_JSON.tag_name; // created_at; published_at; name ; draft ; prerelease - var NSPanelVersion = NSPanelTagName.replace(/v/i, ''); // Aus Variable überflüssiges "v" filtern und in Release-Variable schreiben + let NSPanel_JSON = JSON.parse(result); // JSON Resultat in Variable Schreiben + let NSPanelTagName = NSPanel_JSON.tag_name; // created_at; published_at; name ; draft ; prerelease + let NSPanelVersion = NSPanelTagName.replace(/v/i, ''); // Aus Variable überflüssiges "v" filtern und in Release-Variable schreiben await createStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', { type: 'string' }); await setStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', { val: NSPanelVersion, ack: true }); @@ -915,7 +929,9 @@ function check_version_tft_firmware() { function check_online_display_firmware() { try { - if (Debug) console.log('Requesting online firmware version'); + if (Debug) { + console.log('Requesting online firmware version'); + } request({ url: 'https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/apps/nspanel-lovelace-ui/nspanel-lovelace-ui.py', headers: { @@ -941,8 +957,8 @@ function check_online_display_firmware() { on({ id: config.panelRecvTopic }, async (obj) => { if (obj.state.val.startsWith('\{"CustomRecv":')) { try { - var json = JSON.parse(obj.state.val); - var split = json.CustomRecv.split(','); + let json = JSON.parse(obj.state.val); + let split = json.CustomRecv.split(','); if (split[0] == 'event' && split[1] == 'startup') { await createStateAsync(NSPanel_Path + 'Display_Firmware.currentVersion', { type: 'string' }); await createStateAsync(NSPanel_Path + 'NSPanel_Version', { type: 'string' }); @@ -963,7 +979,7 @@ function update_berry_driver_version() { headers: { 'User-Agent': 'ioBroker' } - }, async function (error, response, result) { + }, async function () { }); } catch (err) { @@ -980,7 +996,7 @@ function update_tft_firmware() { headers: { 'User-Agent': 'ioBroker' } - }, async function (error, response, result) { + }, async function () { await createStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', { type: 'string' }); await setStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', { val: tft_version, ack: true }); }); @@ -996,7 +1012,7 @@ function update_tasmota_firmware() { headers: { 'User-Agent': 'ioBroker' } - }, async function (error, response, result) { + }, async function () { }); } catch (err) { console.warn('error at function update_tasmota_firmware: ' + err.message); @@ -1005,7 +1021,7 @@ function update_tasmota_firmware() { //------------------End Update Functions // Only monitor the extra nodes if present -var updateArray: string[] = []; +let updateArray: string[] = []; if (config.firstScreensaverEntity !== null && config.firstScreensaverEntity.ScreensaverEntity != null && existsState(config.firstScreensaverEntity.ScreensaverEntity)) { updateArray.push(config.firstScreensaverEntity.ScreensaverEntity) @@ -1029,9 +1045,9 @@ on({ id: config.panelRecvTopic }, function (obj) { try { if (obj.state.val.startsWith('\{"CustomRecv":')) { try { - var json = JSON.parse(obj.state.val); + let json = JSON.parse(obj.state.val); - var split = json.CustomRecv.split(','); + let split = json.CustomRecv.split(','); HandleMessage(split[0], split[1], parseInt(split[2]), split); } catch (err) { console.warn(err.message); @@ -1045,9 +1061,11 @@ on({ id: config.panelRecvTopic }, function (obj) { function SendToPanel(val: Payload | Payload[]): void { try { if (Array.isArray(val)) { - val.forEach(function (id, i) { + val.forEach(function (id) { setState(config.panelSendTopic, id.payload); - if (Debug) console.log(id.payload); + if (Debug) { + console.log(id.payload); + } }); } else { setState(config.panelSendTopic, val.payload); @@ -1060,7 +1078,9 @@ function SendToPanel(val: Payload | Payload[]): void { on({ id: NSPanel_Alarm_Path + 'Alarm.AlarmState', change: 'ne' }, async (obj) => { try { if ((obj.state ? obj.state.val : '') == 'armed' || (obj.state ? obj.state.val : '') == 'disarmed' || (obj.state ? obj.state.val : '') == 'triggered') { - if (Debug) console.log(activePage); + if (Debug) { + console.log(activePage); + } if (NSPanel_Path == getState(NSPanel_Alarm_Path + 'Alarm.PANEL').val) { GeneratePage(activePage); } @@ -1091,17 +1111,22 @@ function HandleMessage(typ: string, method: string, page: number, words: Array { pageItem = sp.items.find(e => e.id === searching); - if (pageItem !== undefined) { - return false; - } - return true; + + return pageItem === undefined; }); return pageItem; @@ -1166,7 +1189,7 @@ function GeneratePage(page: Page): void { } function HandleHardwareButton(method: string): void { - try { + try { let page: (PageThermo | PageMedia | PageAlarm | PageEntities | PageGrid | PageQR | PagePower); if (config.button1Page !== null && method == 'button1') { page = config.button1Page; @@ -1216,7 +1239,7 @@ function SendTime(): void { function GenerateEntitiesPage(page: PageEntities): Payload[] { try { - var out_msgs: Array = []; + let out_msgs: Array; out_msgs = [{ payload: 'pageType~cardEntities' }] out_msgs.push({ payload: GeneratePageElements(page) }); return out_msgs @@ -1227,8 +1250,7 @@ function GenerateEntitiesPage(page: PageEntities): Payload[] { function GenerateGridPage(page: PageGrid): Payload[] { try { - var out_msgs: Array = []; - out_msgs = [{ payload: 'pageType~cardGrid' }] + let out_msgs: Array = [{ payload: 'pageType~cardGrid' }]; out_msgs.push({ payload: GeneratePageElements(page) }); return out_msgs } catch (err) { @@ -1280,17 +1302,17 @@ function GeneratePageElements(page: Page): string { function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = false): string { try { - var iconId = '0'; + let iconId = '0'; if (pageItem.id == 'delete') { return '~delete~~~~~'; } - var name: string; - var type: string; + let name: string; + let type: string; // ioBroker if (existsObject(pageItem.id) || pageItem.navigate === true) { - var iconColor = rgb_dec565(config.defaultColor); + let iconColor = rgb_dec565(config.defaultColor); if (pageItem.navigate) { type = 'button'; @@ -1301,7 +1323,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = } let o = getObject(pageItem.id) - var val = null; + let val = null; if (existsState(pageItem.id + '.GET')) { val = getState(pageItem.id + '.GET').val; @@ -1314,13 +1336,15 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = // Fallback if no name is given name = pageItem.name !== undefined ? pageItem.name : o.common.name.de; + let optVal = '0'; + switch (o.common.role) { case 'socket': case 'light': type = 'light'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'socket' ? Icons.GetIcon('power-socket-de') : Icons.GetIcon('lightbulb'); - var iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : o.common.role == 'socket' ? Icons.GetIcon('power-socket-de') : Icons.GetIcon('lightbulb'); - var optVal = '0'; + let iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : o.common.role == 'socket' ? Icons.GetIcon('power-socket-de') : Icons.GetIcon('lightbulb'); + optVal = '0'; if (val === true || val === 'true') { optVal = '1'; @@ -1339,7 +1363,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = case 'hue': type = 'light'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('lightbulb'); - var optVal = '0'; + optVal = '0'; if (existsState(pageItem.id + '.ON_ACTUAL')) { val = getState(pageItem.id + '.ON_ACTUAL').val; @@ -1351,7 +1375,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = iconColor = GetIconColor(pageItem, existsState(pageItem.id + '.DIMMER') ? 100 - getState(pageItem.id + '.DIMMER').val : true, useColors); } - if (pageItem.interpolateColor != undefined && pageItem.interpolateColor == true) { + if (pageItem.interpolateColor != undefined && pageItem.interpolateColor == true) { if (existsState(pageItem.id + '.HUE')) { if (getState(pageItem.id + '.HUE').val != null) { let huecolor = hsv2rgb(getState(pageItem.id + '.HUE').val, 1, 1); @@ -1367,7 +1391,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = case 'ct': type = 'light'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('lightbulb'); - var optVal = '0'; + optVal = '0'; if (existsState(pageItem.id + '.ON')) { val = getState(pageItem.id + '.ON').val; @@ -1384,7 +1408,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = case 'rgb': type = 'light'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('lightbulb'); - var optVal = '0'; + optVal = '0'; if (existsState(pageItem.id + '.ON_ACTUAL')) { val = getState(pageItem.id + '.ON_ACTUAL').val; @@ -1411,7 +1435,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = case 'rgbSingle': type = 'light'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('lightbulb'); - var optVal = '0'; + optVal = '0'; if (existsState(pageItem.id + '.ON_ACTUAL')) { val = getState(pageItem.id + '.ON_ACTUAL').val; @@ -1425,10 +1449,10 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = if (existsState(pageItem.id + '.RGB')) { if (getState(pageItem.id + '.RGB').val != null) { - var hex = getState(pageItem.id + '.RGB').val; - var hexRed = parseInt(hex[1] + hex[2], 16); - var hexGreen = parseInt(hex[3] + hex[4], 16); - var hexBlue = parseInt(hex[5] + hex[6], 16); + let hex = getState(pageItem.id + '.RGB').val; + let hexRed = parseInt(hex[1] + hex[2], 16); + let hexGreen = parseInt(hex[3] + hex[4], 16); + let hexBlue = parseInt(hex[5] + hex[6], 16); let rgb = { red: Math.round(hexRed), green: Math.round(hexGreen), blue: Math.round(hexBlue) }; iconColor = rgb_dec565(pageItem.interpolateColor !== undefined ? rgb : config.defaultOnColor); } @@ -1439,7 +1463,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = case 'dimmer': type = 'light'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('lightbulb'); - var optVal = '0'; + optVal = '0'; if (existsState(pageItem.id + '.ON_ACTUAL')) { val = getState(pageItem.id + '.ON_ACTUAL').val; @@ -1463,40 +1487,43 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = return '~' + type + '~' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~'; - case 'gate': + case 'gate': type = 'text'; + let gateState: string; if (existsState(pageItem.id + '.ACTUAL')) { + if (getState(pageItem.id + '.ACTUAL').val == 0 || getState(pageItem.id + '.ACTUAL').val === false) { iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('garage'); iconColor = GetIconColor(pageItem, false, useColors); - var gateState = findLocale('window', 'closed'); + gateState = findLocale('window', 'closed'); } else { iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('garage-open'); iconId = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : Icons.GetIcon('garage-open'); iconColor = GetIconColor(pageItem, true, useColors); - var gateState = findLocale('window', 'opened'); + gateState = findLocale('window', 'opened'); } - + RegisterEntityWatcher(pageItem.id + '.ACTUAL'); - + } - + return '~' + type + '~' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + gateState; case 'door': case 'window': type = 'text'; + let windowState; if (existsState(pageItem.id + '.ACTUAL')) { if (getState(pageItem.id + '.ACTUAL').val) { iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'door' ? Icons.GetIcon('door-open') : Icons.GetIcon('window-open-variant'); iconColor = GetIconColor(pageItem, false, useColors); - var windowState = findLocale('window', 'opened'); + windowState = findLocale('window', 'opened'); } else { iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'door' ? Icons.GetIcon('door-closed') : Icons.GetIcon('window-closed-variant'); //iconId = Icons.GetIcon('window-closed-variant'); iconColor = GetIconColor(pageItem, true, useColors); - var windowState = findLocale('window', 'closed'); + windowState = findLocale('window', 'closed'); } RegisterEntityWatcher(pageItem.id + '.ACTUAL'); @@ -1522,7 +1549,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = type = 'text'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'value.temperature' || o.common.role == 'thermostat' ? Icons.GetIcon('thermometer') : Icons.GetIcon('information-outline'); let unit = ''; - var optVal = '0'; + optVal = '0'; if (existsState(pageItem.id + '.ON_ACTUAL')) { optVal = getState(pageItem.id + '.ON_ACTUAL').val; @@ -1555,16 +1582,17 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = type = 'button'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('lock'); iconColor = GetIconColor(pageItem, true, useColors); + let lockState; if (existsState(pageItem.id + '.ACTUAL')) { if (getState(pageItem.id + '.ACTUAL').val) { iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('lock'); iconColor = GetIconColor(pageItem, true, useColors); - var lockState = findLocale('lock', 'UNLOCK'); + lockState = findLocale('lock', 'UNLOCK'); } else { iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('lock-open-variant'); iconColor = GetIconColor(pageItem, false, useColors); - var lockState = findLocale('lock', 'LOCK'); + lockState = findLocale('lock', 'LOCK'); } lockState = pageItem.buttonText !== undefined ? pageItem.buttonText : lockState; RegisterEntityWatcher(pageItem.id + '.ACTUAL'); @@ -1643,7 +1671,9 @@ function findLocale(controlsObject: string, controlsState: string): string { const locale = config.locale; const strJson = getState(NSPanel_Path + 'NSPanel_locales_json').val; - if (Debug) console.log(controlsObject + ' - ' + controlsState); + if (Debug) { + console.log(controlsObject + ' - ' + controlsState); + } try { const obj = JSON.parse(strJson); @@ -1657,8 +1687,10 @@ function findLocale(controlsObject: string, controlsState: string): string { } catch (err) { if (err.message.substring(0, 35) == 'Cannot read properties of undefined') { - if (Debug) console.log('function findLocale: missing translation: ' + controlsObject + ' - ' + controlsState); - } else { + if (Debug) { + console.log('function findLocale: missing translation: ' + controlsObject + ' - ' + controlsState); + } + } else { console.warn('function findLocale: ' + err.message); } return controlsState; @@ -1677,11 +1709,11 @@ function GetIconColor(pageItem: PageItem, value: (boolean | number), useColors: value = value < minValue ? minValue : value; return rgb_dec565( - Interpolate( - pageItem.offColor !== undefined ? pageItem.offColor : config.defaultOffColor, - pageItem.onColor !== undefined ? pageItem.onColor : config.defaultOnColor, - scale(value, minValue, maxValue, 0, 1) - ) + Interpolate( + pageItem.offColor !== undefined ? pageItem.offColor : config.defaultOffColor, + pageItem.onColor !== undefined ? pageItem.onColor : config.defaultOnColor, + scale(value, minValue, maxValue, 0, 1) + ) ); } @@ -1701,7 +1733,7 @@ function RegisterEntityWatcher(id: string): void { return; } - subscriptions[id] = (on({ id: id, change: 'any' }, (data) => { + subscriptions[id] = (on({ id: id, change: 'any' }, () => { if (pageId == -1 && config.button1Page != undefined) { SendToPanel({ payload: GeneratePageElements(config.button1Page) }); } @@ -1753,8 +1785,8 @@ function GetUnitOfMeasurement(id: string): string { function GenerateThermoPage(page: PageThermo): Payload[] { try { - var id = page.items[0].id - var out_msgs: Array = []; + let id = page.items[0].id + let out_msgs: Array = []; out_msgs.push({ payload: 'pageType~cardThermo' }); // ioBroker @@ -1782,15 +1814,16 @@ function GenerateThermoPage(page: PageThermo): Payload[] { } let statusStr: String = 'MANU'; let status = ''; - if (existsState(id + '.MODE')) - status = getState(id + '.MODE').val; + if (existsState(id + '.MODE')) { + status = getState(id + '.MODE').val; // FixMe: Variable status is never used! + } //Attribute hinzufügen, wenn im Alias definiert let i_list = Array.prototype.slice.apply($('[state.id="' + id + '.*"]')); + let bt = ['~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~']; if ((i_list.length - 3) != 0) { - var i = 0; - var bt = ['~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~']; + let i = 0; if (o.common.role == 'thermostat') { @@ -1838,9 +1871,9 @@ function GenerateThermoPage(page: PageThermo): Payload[] { for (let i_index in i_list) { let thermostatState = i_list[i_index].split('.'); if ( - thermostatState[thermostatState.length - 1] != 'SET' && - thermostatState[thermostatState.length - 1] != 'ACTUAL' && - thermostatState[thermostatState.length - 1] != 'MODE' + thermostatState[thermostatState.length - 1] != 'SET' && + thermostatState[thermostatState.length - 1] != 'ACTUAL' && + thermostatState[thermostatState.length - 1] != 'MODE' ) { i++; @@ -1989,27 +2022,29 @@ function GenerateThermoPage(page: PageThermo): Payload[] { out_msgs.push({ payload: 'entityUpd~' - + name + '~' // Heading - + GetNavigationString(pageId) + '~' // Page Navigation - + id + '~' // internalNameEntiy - + currentTemp + config.temperatureUnit + '~' // Ist-Temperatur (String) - + destTemp + '~' // Soll-Temperatur (numerisch ohne Komma) - + statusStr + '~' // Mode - + minTemp + '~' // Thermostat Min-Temperatur - + maxTemp + '~' // Thermostat Max-Temperatur - + stepTemp + '~' // Schritte für Soll (5°C) - + icon_res // Icons Status - + findLocale('thermostat', 'Currently') + '~' // Bezeicher vor Aktueller Raumtemperatur - + findLocale('thermostat', 'State') + '~' // Bezeicner vor - + '~' // Bezeichner vor HVAC -- Gibt es nicht mehr - + config.temperatureUnit + '~' // Bezeichner hinter Solltemp - + '' + '~' // iconTemperature dstTempTwoTempMode - + '' // dstTempTwoTempMode + + name + '~' // Heading + + GetNavigationString(pageId) + '~' // Page Navigation + + id + '~' // internalNameEntity + + currentTemp + config.temperatureUnit + '~' // Ist-Temperatur (String) + + destTemp + '~' // Soll-Temperatur (numerisch ohne Komma) + + statusStr + '~' // Mode + + minTemp + '~' // Thermostat Min-Temperatur + + maxTemp + '~' // Thermostat Max-Temperatur + + stepTemp + '~' // Schritte für Soll (5°C) + + icon_res // Icons Status + + findLocale('thermostat', 'Currently') + '~' // Bezeichner vor Aktueller Raumtemperatur + + findLocale('thermostat', 'State') + '~' // Bezeichner vor + + '~' // Bezeichner vor HVAC -- Gibt es nicht mehr + + config.temperatureUnit + '~' // Bezeichner hinter Solltemp + + '' + '~' // iconTemperature dstTempTwoTempMode + + '' // dstTempTwoTempMode }); } - if (Debug) console.log(out_msgs); + if (Debug) { + console.log(out_msgs); + } return out_msgs } catch (err) { console.warn('function GenerateThermoPage: ' + err.message); @@ -2018,38 +2053,38 @@ function GenerateThermoPage(page: PageThermo): Payload[] { function GenerateMediaPage(page: PageMedia): Payload[] { try { - var id = page.items[0].id - - var out_msgs: Array = []; + let id = page.items[0].id + + let out_msgs: Array = []; out_msgs.push({ payload: 'pageType~cardMedia' }); if (existsObject(id)) { let name = getState(id + '.ALBUM').val; let title = getState(id + '.TITLE').val; let author = getState(id + '.ARTIST').val; - + let vInstance = page.items[0].adapterPlayerInstance; let v1Adapter = vInstance.split('.'); let v2Adapter = v1Adapter[0]; - //Alexa + neue Adpter/Player + //Alexa + neue Adapter/Player let media_icon = Icons.GetIcon('playlist-music'); //Spotify-Premium if (v2Adapter == 'spotify-premium') { media_icon = Icons.GetIcon('spotify'); name = getState(id + '.CONTEXT_DESCRIPTION').val; - let nameLenght = name.length; + let nameLength = name.length; if (name.substring(0,9) == 'Playlist:') { - let nameLenght = name.length; - name = name.slice(10, nameLenght); + let nameLength = name.length; + name = name.slice(10, nameLength); } else if (name.substring(0,6) == 'Album:') { - let nameLenght = name.length; - name = name.slice(10, nameLenght); - } else if (name.substring(0,6) == 'Track') { + let nameLength = name.length; + name = name.slice(10, nameLength); + } else if (name.substring(0,6) == 'Track') { name = 'Spotify-Premium'; } - if (nameLenght == 0) { + if (nameLength == 0) { name = 'Spotify-Premium'; } author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val; @@ -2057,7 +2092,7 @@ function GenerateMediaPage(page: PageMedia): Payload[] { author = getState(id + '.ARTIST').val; } if ((getState(id + '.ARTIST').val).length == 0) { - author = 'no music to control'; + author = 'no music to control'; } } @@ -2068,36 +2103,36 @@ function GenerateMediaPage(page: PageMedia): Payload[] { let nameLenght = name.length; if (nameLenght == 0) { name = 'Sonos Player'; - } + } author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val; if ((getState(id + '.ARTIST').val).length == 0) { - author = 'no music to control'; + author = 'no music to control'; } } //Logitech Squeezebox RPC if (v2Adapter == 'squeezeboxrpc') { media_icon = Icons.GetIcon('dlna'); - let nameLenght = name.length; - if (nameLenght == 0) { + let nameLength = name.length; + if (nameLength == 0) { name = 'Squeezebox RPC'; author = 'no music to control'; - } + } } //Alexa2 if (v2Adapter == 'alexa2') { media_icon = Icons.GetIcon('playlist-music'); - let nameLenght = name.length; - if (nameLenght == 0) { + let nameLength = name.length; + if (nameLength == 0) { name = 'Alexa Player'; - author = 'no music to control'; - } + author = 'no music to control'; + } } - + let volume = getState(id + '.VOLUME').val; - var iconplaypause = Icons.GetIcon('pause'); //pause - var onoffbutton = 1374; + let iconplaypause = Icons.GetIcon('pause'); //pause + let onoffbutton = 1374; //Für alle Player if (getState(id + '.STATE').val) { @@ -2115,14 +2150,16 @@ function GenerateMediaPage(page: PageMedia): Payload[] { iconplaypause = Icons.GetIcon('play'); //play } - if (Debug) console.log(v2Adapter); + if (Debug) { + console.log(v2Adapter); + } let currentSpeaker = 'kein Speaker gefunden'; if (v2Adapter == 'alexa2') { currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', page.items[0].mediaDevice, '.Info.name'].join(''))).val; } else if (v2Adapter == 'spotify-premium') { - currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'player.device.name'].join(''))).val; + currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'player.device.name'].join(''))).val; } else if (v2Adapter == 'sonos') { currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'root.', page.items[0].mediaDevice, '.members'].join(''))).val; } else if (v2Adapter == 'squeezeboxrpc') { @@ -2133,10 +2170,10 @@ function GenerateMediaPage(page: PageMedia): Payload[] { //------------------------------------------------------------------------------------------------------------- // nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten // Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter - let speakerlist = ''; + let speakerList = ''; if (page.items[0].speakerList.length > 0) { for (let i_index in page.items[0].speakerList) { - speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?'; + speakerList = speakerList + page.items[0].speakerList[i_index] + '?'; } } else { let i_list = Array.prototype.slice.apply($('[state.id="' + page.items[0].adapterPlayerInstance + 'Echo-Devices.*.Info.name"]')); @@ -2145,31 +2182,33 @@ function GenerateMediaPage(page: PageMedia): Payload[] { let deviceId = i; deviceId = deviceId.split('.'); if (getState(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.online'].join(''))).val && - existsObject(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.Player'].join(''))) && - existsObject(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.Commands'].join('')))) { - speakerlist = speakerlist + getState(i).val + '?'; + existsObject(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.Player'].join(''))) && + existsObject(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.Commands'].join('')))) { + speakerList = speakerList + getState(i).val + '?'; } } } - speakerlist = speakerlist.substring(0, speakerlist.length - 1); + speakerList = speakerList.substring(0, speakerList.length - 1); //-------------------------------------------------------------------------------------------------------------- out_msgs.push({ payload: 'entityUpd~' + //entityUpd - name + '~' + //heading - GetNavigationString(pageId) + '~' + //navigation - id + '~' + //internalNameEntiy - media_icon + '~' + //icon - title + '~' + //title - author + '~' + //author - volume + '~' + //volume - iconplaypause + '~' + //playpauseicon - currentSpeaker + '~' + //currentSpeaker - speakerlist + '~' + //speakerList-seperated-by-? - onoffbutton + name + '~' + //heading + GetNavigationString(pageId) + '~' + //navigation + id + '~' + //internalNameEntiy + media_icon + '~' + //icon + title + '~' + //title + author + '~' + //author + volume + '~' + //volume + iconplaypause + '~' + //playpauseicon + currentSpeaker + '~' + //currentSpeaker + speakerList + '~' + //speakerList-seperated-by-? + onoffbutton }); //On/Off Button Color } - if (Debug) console.log(out_msgs); + if (Debug) { + console.log(out_msgs); + } return out_msgs } catch (err) { console.warn('function GenerateMediaPage: ' + err.message); @@ -2179,11 +2218,11 @@ function GenerateMediaPage(page: PageMedia): Payload[] { function GenerateAlarmPage(page: PageAlarm): Payload[] { try { activePage = page; - var id = page.items[0].id - - var out_msgs: Array = []; + let id = page.items[0].id + + let out_msgs: Array = []; out_msgs.push({ payload: 'pageType~cardAlarm' }); - var nsPath = NSPanel_Alarm_Path + 'Alarm.'; + let nsPath = NSPanel_Alarm_Path + 'Alarm.'; if (existsState(nsPath + 'AlarmPin') == false || existsState(nsPath + 'AlarmState') == false || existsState(nsPath + 'AlarmType') == false || existsState(nsPath + 'PIN_Failed') == false || existsState(nsPath + 'PANEL') == false) { createState(nsPath + 'AlarmPin', '0000', { type: 'string' }, function () { setState(nsPath + 'AlarmPin', '0000') }); @@ -2194,17 +2233,19 @@ function GenerateAlarmPage(page: PageAlarm): Payload[] { } if (existsState(nsPath + 'AlarmPin') && existsState(nsPath + 'AlarmState') && existsState(nsPath + 'AlarmType')) { - //var entityPin = getState(nsPath + 'AlarmPin').val; - var entityState = getState(nsPath + 'AlarmState').val; - //var entityType = getState(nsPath + 'AlarmType').val; - var arm1: string, arm2: string, arm3: string, arm4: string; - var arm1ActionName: string, arm2ActionName: string, arm3ActionName: string, arm4ActionName: string; - var icon = '0'; - var iconcolor = 63488; - var numpadStatus = 'disable'; - var flashing = 'disable'; + //let entityPin = getState(nsPath + 'AlarmPin').val; + let entityState = getState(nsPath + 'AlarmState').val; + //let entityType = getState(nsPath + 'AlarmType').val; + let arm1: string, arm2: string, arm3: string, arm4: string; + let arm1ActionName: string, arm2ActionName: string, arm3ActionName: string, arm4ActionName: string; + let icon = '0'; + let iconcolor = 63488; + let numpadStatus = 'disable'; + let flashing = 'disable'; - if (Debug) console.log(id); + if (Debug) { + console.log(id); + } if (entityState == 'armed' || entityState == 'triggered') { arm1 = 'Deaktivieren'; //arm1*~* @@ -2255,23 +2296,25 @@ function GenerateAlarmPage(page: PageAlarm): Payload[] { out_msgs.push({ payload: 'entityUpd~' + //entityUpd~* - id + '~' + //internalNameEntity*~* - GetNavigationString(pageId) + '~' + //navigation*~* --> hiddenCards - arm1 + '~' + //arm1*~* - arm1ActionName + '~' + //arm1ActionName*~* - arm2 + '~' + //arm2*~* - arm2ActionName + '~' + //arm2ActionName*~* - arm3 + '~' + //arm3*~* - arm3ActionName + '~' + //arm3ActionName*~* - arm4 + '~' + //arm4*~* - arm4ActionName + '~' + //arm4ActionName*~* - icon + '~' + //icon*~* - iconcolor + '~' + //iconcolor*~* - numpadStatus + '~' + //numpadStatus*~* - flashing + id + '~' + //internalNameEntity*~* + GetNavigationString(pageId) + '~' + //navigation*~* --> hiddenCards + arm1 + '~' + //arm1*~* + arm1ActionName + '~' + //arm1ActionName*~* + arm2 + '~' + //arm2*~* + arm2ActionName + '~' + //arm2ActionName*~* + arm3 + '~' + //arm3*~* + arm3ActionName + '~' + //arm3ActionName*~* + arm4 + '~' + //arm4*~* + arm4ActionName + '~' + //arm4ActionName*~* + icon + '~' + //icon*~* + iconcolor + '~' + //iconcolor*~* + numpadStatus + '~' + //numpadStatus*~* + flashing }); //flashing* - if (Debug) console.log(out_msgs); + if (Debug) { + console.log(out_msgs); + } return out_msgs } } catch (err) { @@ -2283,37 +2326,39 @@ function GenerateQRPage(page: PageQR): Payload[] { try { activePage = page; - var id = page.items[0].id - var out_msgs: Array = []; + let id = page.items[0].id + let out_msgs: Array = []; out_msgs.push({ payload: 'pageType~cardQR' }); let o = getObject(id) - var heading = page.heading !== undefined ? page.heading : o.common.name.de - var textQR = page.items[0].id + '.ACTUAL' !== undefined ? getState(page.items[0].id + '.ACTUAL').val : 'WIFI:T:undefined;S:undefined;P:undefined;H:undefined;' - var hiddenPWD = false; + let heading = page.heading !== undefined ? page.heading : o.common.name.de + let textQR = page.items[0].id + '.ACTUAL' !== undefined ? getState(page.items[0].id + '.ACTUAL').val : 'WIFI:T:undefined;S:undefined;P:undefined;H:undefined;' + let hiddenPWD = false; if (page.items[0].hidePassword !== undefined && page.items[0].hidePassword == true) { hiddenPWD = true } const tempstr = textQR.split(';'); + let optionalValue1; + let optionalValue2 for (let w = 0; w < tempstr.length - 1; w++) { if (tempstr[w].substring(0, 1) == 'S') { - var optionalValue1 = tempstr[w].slice(2); + optionalValue1 = tempstr[w].slice(2); } if (tempstr[w].substring(0, 1) == 'P') { - var optionalValue2 = tempstr[w].slice(2); + optionalValue2 = tempstr[w].slice(2); } } - var type1 = 'text'; - var internalName1 = 'SSID'; - var iconId1 = Icons.GetIcon('wifi'); - var displayName1 = 'SSID'; - var type2 = 'text'; - var internalName2 = 'Passwort'; - var iconId2 = Icons.GetIcon('key'); - var displayName2 = 'Passwort'; + let type1 = 'text'; + let internalName1 = 'SSID'; + let iconId1 = Icons.GetIcon('wifi'); + let displayName1 = 'SSID'; + let type2 = 'text'; + let internalName2 = 'Passwort'; + let iconId2 = Icons.GetIcon('key'); + let displayName2 = 'Passwort'; if (hiddenPWD) { type2 = 'disable'; @@ -2323,21 +2368,21 @@ function GenerateQRPage(page: PageQR): Payload[] { out_msgs.push({ payload: 'entityUpd~' + //entityUpd - heading + '~' + //heading - GetNavigationString(pageId) + '~' + //navigation - textQR + '~' + //textQR - type1 + '~' + //type - internalName1 + '~' + //internalName - iconId1 + '~' + //iconId - 65535 + '~' + //iconColor - displayName1 + '~' + //displayName - optionalValue1 + '~' + //optionalValue - type2 + '~' + //type - internalName2 + '~' + //internalName - iconId2 + '~' + //iconId - 65535 + '~' + //iconColor - displayName2 + '~' + //displayName - optionalValue2 + heading + '~' + //heading + GetNavigationString(pageId) + '~' + //navigation + textQR + '~' + //textQR + type1 + '~' + //type + internalName1 + '~' + //internalName + iconId1 + '~' + //iconId + 65535 + '~' + //iconColor + displayName1 + '~' + //displayName + optionalValue1 + '~' + //optionalValue + type2 + '~' + //type + internalName2 + '~' + //internalName + iconId2 + '~' + //iconId + 65535 + '~' + //iconColor + displayName2 + '~' + //displayName + optionalValue2 }); //optionalValue //entityUpd,heading,navigation,textQR[,type,internalName,iconId,displayName,optionalValue]x2 @@ -2352,30 +2397,33 @@ function GeneratePowerPage(page: PagePower): Payload[] { try { activePage = page; - if (Debug) console.log(page.items[0].id); + if (Debug) { + console.log(page.items[0].id); + } - var demoMode = false; + let demoMode = false; + let id; - try { - var id = page.items[0].id + try { + id = page.items[0].id } catch (err) { console.log("Kein PageItem definiert - cardPower Demo-Modus aktiv"); demoMode = true; - } + } let heading = 'cardPower Example'; if (demoMode != true) { let o = getObject(id) - heading = page.heading !== undefined ? page.heading : o.common.name.de - } + heading = page.heading !== undefined ? page.heading : o.common.name.de + } const obj = JSON.parse((getState(page.items[0].id + '.ACTUAL').val)); - var out_msgs: Array = []; + let out_msgs: Array = []; out_msgs.push({ payload: 'pageType~cardPower' }); //Demo Data if no pageItem present - let array_icon_color = [White, MSGreen, MSYellow, MSGreen, MSYellow, MSGreen, MSRed]; + let array_icon_color = [White, MSGreen, MSYellow, MSGreen, MSYellow, MSGreen, MSRed]; let array_icon = ['home', 'battery-charging-60', 'solar-power-variant', 'wind-turbine', 'shape', 'transmission-tower', 'car']; let array_powerspeed = ['', '-1', '2', '4', '1', '1', '5']; let array_powerstate = ['', '0,5 kW', '0,9 kW', '2,8 kW', '0,2 kW', '0,1 kW', '4,6 kW']; @@ -2388,11 +2436,11 @@ function GeneratePowerPage(page: PagePower): Payload[] { array_icon[obji + 1] = obj[obji].icon; array_powerspeed[obji + 1] = obj[obji].speed; array_powerstate[obji + 1] = obj[obji].value + ' ' + obj[obji].unit ; - } + } } let power_string : any = ''; - + for (let i = 1; i < 7; i++ ) { power_string = power_string + rgb_dec565(array_icon_color[i]) + '~'; // icon_color~ power_string = power_string + Icons.GetIcon(array_icon[i]) + '~'; // icon~ @@ -2400,16 +2448,16 @@ function GeneratePowerPage(page: PagePower): Payload[] { power_string = power_string + array_powerstate[i] + '~'; // entity.state~ } - power_string = power_string.substring(0, power_string.length - 1); + power_string = power_string.substring(0, power_string.length - 1); out_msgs.push({ payload: 'entityUpd~' + //entityUpd~* - heading + '~' + //internalNameEntity*~* - GetNavigationString(pageId) + '~' + //navigation*~* - rgb_dec565(array_icon_color[0]) + '~' + // icon_color~ Mitte - Icons.GetIcon(array_icon[0]) + '~' + // icon~ Mitte - array_powerspeed[0] + '~' + // entity.state~ Mitte - power_string + heading + '~' + //internalNameEntity*~* + GetNavigationString(pageId) + '~' + //navigation*~* + rgb_dec565(array_icon_color[0]) + '~' + // icon_color~ Mitte + Icons.GetIcon(array_icon[0]) + '~' + // icon~ Mitte + array_powerspeed[0] + '~' + // entity.state~ Mitte + power_string }); return out_msgs @@ -2437,7 +2485,7 @@ function setIfExists(id: string, value: any, type: string | null = null): boolea return false; } catch (err) { console.warn('function setIfExists: ' + err.message); - } + } } function toggleState(id: string): boolean { @@ -2450,13 +2498,13 @@ function toggleState(id: string): boolean { return false; } catch (err) { console.warn('function toggleState: ' + err.message); - } + } } function HandleButtonEvent(words): void { try { - var id = words[2] - var buttonAction = words[3]; + let id = words[2] + let buttonAction = words[3]; if (Debug) { console.log(words[0] + ' - ' + words[1] + ' - ' + words[2] + ' - ' + words[3] + ' - ' + words[4] + ' - PageId: ' + pageId); @@ -2467,7 +2515,11 @@ function HandleButtonEvent(words): void { return; } - if (Debug) console.log(buttonAction); + if (Debug) { + console.log(buttonAction); + } + + let pageNum:number = 0; switch (buttonAction) { case 'bUp': @@ -2480,13 +2532,13 @@ function HandleButtonEvent(words): void { GeneratePage(config.pages[pageId]); break; case 'bNext': - var pageNum = (((pageId + 1) % config.pages.length) + config.pages.length) % config.pages.length; + pageNum = (((pageId + 1) % config.pages.length) + config.pages.length) % config.pages.length; pageId = pageNum; UnsubscribeWatcher(); GeneratePage(config.pages[pageId]); break; case 'bPrev': - var pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length; + pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length; pageId = pageNum; UnsubscribeWatcher(); if (activePage != undefined && activePage.parent != undefined) { @@ -2511,7 +2563,9 @@ function HandleButtonEvent(words): void { GeneratePage(config.pages[pageId]); } } else { - if (Debug) console.log('bExit: ' + words[4] + ' - ' + pageId); + if (Debug) { + console.log('bExit: ' + words[4] + ' - ' + pageId); + } setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', ''); setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', ''); GeneratePage(activePage); @@ -2531,7 +2585,7 @@ function HandleButtonEvent(words): void { break; case 'OnOff': if (existsObject(id)) { - var action = false + let action = false if (words[4] == '1') action = true; let o = getObject(id); @@ -2555,7 +2609,7 @@ function HandleButtonEvent(words): void { break; case 'button': if (existsObject(id)) { - var action = false + let action = false if (words[4] == '1') action = true; let o = getObject(id); @@ -2607,7 +2661,7 @@ function HandleButtonEvent(words): void { break; case 'tiltClose': setIfExists(id + '.TILT_CLOSE', true); - break; + break; case 'tiltSlider': (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })(); timeoutSlider = setTimeout(async function () { @@ -2649,7 +2703,7 @@ function HandleButtonEvent(words): void { (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })(); timeoutSlider = setTimeout(async function () { let pageItem = findPageItem(id); - if (pageItem.minValueColorTemp !== undefined && pageItem.minValueColorTemp !== undefined) { + if (pageItem.minValueColorTemp !== undefined && pageItem.maxValueColorTemp !== undefined) { let colorTempK = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.minValueColorTemp, pageItem.maxValueColorTemp)); setIfExists(id + '.TEMPERATURE', (colorTempK)); } else { @@ -2660,8 +2714,12 @@ function HandleButtonEvent(words): void { case 'colorWheel': let colorCoordinates = words[4].split('|'); let rgb = pos_to_color(colorCoordinates[0], colorCoordinates[1]); - if (Debug) console.log(rgb); - if (Debug) console.log(getHue(rgb.red, rgb.green, rgb.blue)); + if (Debug) { + console.log(rgb); + } + if (Debug) { + console.log(getHue(rgb.red, rgb.green, rgb.blue)); + } let o = getObject(id); switch (o.common.role) { case 'hue': @@ -2673,17 +2731,19 @@ function HandleButtonEvent(words): void { setIfExists(id + '.BLUE', rgb.blue); break; case 'rgbSingle': - let pageItem = findPageItem(id); + let pageItem = findPageItem(id); if (pageItem.colormode == "xy") { //Für z.B. Deconz XY setIfExists(id + ".RGB", rgb_to_cie(rgb.red, rgb.green, rgb.blue)); - if (Debug) console.log(rgb_to_cie(rgb.red, rgb.green, rgb.blue)); + if (Debug) { + console.log(rgb_to_cie(rgb.red, rgb.green, rgb.blue)); + } } else { //Für RGB - setIfExists(id + ".RGB", ConvertRGBtoHex(rgb.red, rgb.green, rgb.blue)); + setIfExists(id + ".RGB", ConvertRGBtoHex(rgb.red, rgb.green, rgb.blue)); } - break; + break; } break; case 'tempUpd': @@ -2692,7 +2752,7 @@ function HandleButtonEvent(words): void { case 'media-back': setIfExists(id + '.PREV', true); setTimeout(function(){ - GeneratePage(activePage); + GeneratePage(activePage); },3000) break; case 'media-pause': @@ -2715,13 +2775,13 @@ function HandleButtonEvent(words): void { } } setTimeout(function(){ - GeneratePage(activePage); + GeneratePage(activePage); },3000) break; case 'media-next': setIfExists(id + '.NEXT', true); setTimeout(function(){ - GeneratePage(activePage); + GeneratePage(activePage); },3000) break; case 'volumeSlider': @@ -2735,7 +2795,7 @@ function HandleButtonEvent(words): void { switch (deviceAdapter) { case 'spotify-premium': - var strDeviceID = spotifyGetDeviceID(words[4]); + let strDeviceID = spotifyGetDeviceID(words[4]); setState(adapterInstance + 'devices.' + strDeviceID + ".useForPlayback", true); break; case 'alexa2': @@ -2754,7 +2814,7 @@ function HandleButtonEvent(words): void { break; case 'chromecast': break; - } + } break; case 'media-OnOff': let pageItemTem = findPageItem(id); @@ -2780,19 +2840,19 @@ function HandleButtonEvent(words): void { switch (words[4]) { case 'BOOT': setIfExists(words[2] + '.' + 'BOOST', !getState(words[2] + '.' + 'BOOST').val) - break; + break; case 'PART': setIfExists(words[2] + '.' + 'PARTY', !getState(words[2] + '.' + 'PARTY').val) - break; + break; case 'AUTT': setIfExists(words[2] + '.' + 'AUTOMATIC', !getState(words[2] + '.' + 'AUTOMATIC').val) - break; + break; case 'MANT': setIfExists(words[2] + '.' + 'MANUAL', !getState(words[2] + '.' + 'MANUAL').val) - break; + break; case 'VACT': setIfExists(words[2] + '.' + 'VACATION', !getState(words[2] + '.' + 'VACATION').val) - break; + break; } let modes = ['BOOT', 'PART', 'AUTT', 'MANT', 'VACT'] let modesDP = ['BOOST', 'PARTY', 'AUTOMATIC', 'MANUAL', 'VACATION'] @@ -2803,7 +2863,7 @@ function HandleButtonEvent(words): void { } GeneratePage(config.pages[pageId]); } else { - var HVACMode = 0; + let HVACMode = 0; switch (words[4]) { case 'POWER': HVACMode = 0; @@ -2855,8 +2915,8 @@ function HandleButtonEvent(words): void { setIfExists(id + '.PANEL', NSPanel_Path); } setTimeout(function(){ - GeneratePage(activePage); - },250) + GeneratePage(activePage); + },250) break; case 'A2': // Alarm-Page Alarm 2 aktivieren if (words[4] != '') { @@ -2866,8 +2926,8 @@ function HandleButtonEvent(words): void { setIfExists(id + '.PANEL', NSPanel_Path); } setTimeout(function(){ - GeneratePage(activePage); - },250) + GeneratePage(activePage); + },250) break; case 'A3': // Alarm-Page Alarm 3 aktivieren if (words[4] != '') { @@ -2877,8 +2937,8 @@ function HandleButtonEvent(words): void { setIfExists(id + '.PANEL', NSPanel_Path); } setTimeout(function(){ - GeneratePage(activePage); - },250) + GeneratePage(activePage); + },250) break; case 'A4': // Alarm-Page Alarm 4 aktivieren if (words[4] != '') { @@ -2888,12 +2948,16 @@ function HandleButtonEvent(words): void { setIfExists(id + '.PANEL', NSPanel_Path); } setTimeout(function(){ - GeneratePage(activePage); - },250) + GeneratePage(activePage); + },250) break; case 'D1': // Alarm-Page Alarm Deaktivieren - if (Debug) console.log('D1: ' + getState(id + '.PIN').val); - if (Debug) console.log(words[4]); + if (Debug) { + console.log('D1: ' + getState(id + '.PIN').val); + } + if (Debug) { + console.log(words[4]); + } if (words[4] != '') { if (getState(id + '.PIN').val == words[4]) { setIfExists(id + '.PIN', '0000'); @@ -2906,7 +2970,7 @@ function HandleButtonEvent(words): void { } setIfExists(id + '.PANEL', NSPanel_Path); setTimeout(function(){ - GeneratePage(activePage); + GeneratePage(activePage); },500) } break; @@ -2915,13 +2979,15 @@ function HandleButtonEvent(words): void { } } catch (err) { console.log('function HandleButtonEvent: ' + err.message); - } + } } function GetNavigationString(pageId: number): string { try { - if (Debug) console.log(pageId); + if (Debug) { + console.log(pageId); + } if (activePage.subPage) return '1|0'; @@ -2940,19 +3006,19 @@ function GetNavigationString(pageId: number): string { } } catch (err) { console.log('function GetNavigationString: ' + err.message); - } + } } function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { try { - var out_msgs: Array = []; + let out_msgs: Array = []; let id = pageItem.id if (existsObject(id)) { - var o = getObject(id) - var val: (boolean | number) = 0; + let o = getObject(id) + let val: (boolean | number) = 0; let icon = Icons.GetIcon('lightbulb'); - var iconColor = rgb_dec565(config.defaultColor); + let iconColor = rgb_dec565(config.defaultColor); if (type == 'popupLight') { let switchVal = '0'; @@ -2977,16 +3043,16 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { out_msgs.push({ payload: 'entityUpdateDetail' + '~' // entityUpdateDetail - + id + '~' - + icon + '~' // iconId - + iconColor + '~' // iconColor - + switchVal + '~' // buttonState - + 'disable' + '~' // sliderBrightnessPos - + 'disable' + '~' // sliderColorTempPos - + 'disable' + '~' // colorMode - + '' + '~' // Color-Bezeichnung - + findLocale('lights', 'Temperature') + '~' // Temperature-Bezeichnung - + findLocale('lights', 'Brightness') + + id + '~' + + icon + '~' // iconId + + iconColor + '~' // iconColor + + switchVal + '~' // buttonState + + 'disable' + '~' // sliderBrightnessPos + + 'disable' + '~' // sliderColorTempPos + + 'disable' + '~' // colorMode + + '' + '~' // Color-Bezeichnung + + findLocale('lights', 'Temperature') + '~' // Temperature-Bezeichnung + + findLocale('lights', 'Brightness') }); // Brightness-Bezeichnung } @@ -3001,7 +3067,7 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { } if (val === true) { - var iconColor = GetIconColor(pageItem, val, false); + let iconColor = GetIconColor(pageItem, val, false); switchVal = '1' } @@ -3026,16 +3092,16 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { out_msgs.push({ payload: 'entityUpdateDetail' + '~' //entityUpdateDetail - + id + '~' - + icon + '~' //iconId - + iconColor + '~' //iconColor - + switchVal + '~' //buttonState - + brightness + '~' //sliderBrightnessPos - + 'disable' + '~' //sliderColorTempPos - + 'disable' + '~' //colorMod - + '' + '~' //Color-Bezeichnung - + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung - + findLocale('lights', 'Brightness') + + id + '~' + + icon + '~' //iconId + + iconColor + '~' //iconColor + + switchVal + '~' //buttonState + + brightness + '~' //sliderBrightnessPos + + 'disable' + '~' //sliderColorTempPos + + 'disable' + '~' //colorMod + + '' + '~' //Color-Bezeichnung + + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung + + findLocale('lights', 'Brightness') }); //Brightness-Bezeichnung console.log('light.' + id) @@ -3068,7 +3134,7 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { iconColor = GetIconColor(pageItem, false, true); } - var colorMode = 'disable'; + let colorMode = 'disable'; if (existsState(id + '.HUE')) { if (getState(id + '.HUE').val != null) { colorMode = 'enable'; @@ -3079,10 +3145,10 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { } } - var colorTemp = 0; + let colorTemp = 0; if (existsState(id + '.TEMPERATURE')) { if (getState(id + '.TEMPERATURE').val != null) { - if (pageItem.minValueColorTemp !== undefined && pageItem.minValueColorTemp !== undefined) { + if (pageItem.minValueColorTemp !== undefined && pageItem.maxValueColorTemp !== undefined) { colorTemp = Math.trunc(scale(getState(id + '.TEMPERATURE').val, pageItem.minValueColorTemp, pageItem.maxValueColorTemp, 0, 100)); } else { colorTemp = 100 - getState(id + '.TEMPERATURE').val; @@ -3095,16 +3161,16 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { out_msgs.push({ payload: 'entityUpdateDetail' + '~' //entityUpdateDetail - + id + '~' - + icon + '~' //iconId - + iconColor + '~' //iconColor - + switchVal + '~' //buttonState - + brightness + '~' //sliderBrightnessPos - + colorTemp + '~' //sliderColorTempPos - + colorMode + '~' //colorMode (if hue-alias without hue-datapoint, then disable) - + 'Color' + '~' //Color-Bezeichnung - + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung - + findLocale('lights', 'Brightness') + + id + '~' + + icon + '~' //iconId + + iconColor + '~' //iconColor + + switchVal + '~' //buttonState + + brightness + '~' //sliderBrightnessPos + + colorTemp + '~' //sliderColorTempPos + + colorMode + '~' //colorMode (if hue-alias without hue-datapoint, then disable) + + 'Color' + '~' //Color-Bezeichnung + + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung + + findLocale('lights', 'Brightness') }); //Brightness-Bezeichnung } @@ -3134,7 +3200,7 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { iconColor = GetIconColor(pageItem, false, true); } - var colorMode = 'disable'; + let colorMode = 'disable'; if (existsState(id + '.RED') && existsState(id + '.GREEN') && existsState(id + '.BLUE')) { if (getState(id + '.RED').val != null && getState(id + '.GREEN').val != null && getState(id + '.BLUE').val != null) { colorMode = 'enable'; @@ -3144,7 +3210,7 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { } } - var colorTemp = 0; + let colorTemp = 0; if (existsState(id + '.TEMPERATURE')) { if (getState(id + '.TEMPERATURE').val != null) { if (pageItem.minValueColorTemp !== undefined && pageItem.minValueColorTemp !== undefined) { @@ -3160,16 +3226,16 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { out_msgs.push({ payload: 'entityUpdateDetail' + '~' //entityUpdateDetail - + id + '~' - + icon + '~' //iconId - + iconColor + '~' //iconColor - + switchVal + '~' //buttonState - + brightness + '~' //sliderBrightnessPos - + colorTemp + '~' //sliderColorTempPos - + colorMode + '~' //colorMode (if hue-alias without hue-datapoint, then disable) - + 'Color' + '~' //Color-Bezeichnung - + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung - + findLocale('lights', 'Brightness') + + id + '~' + + icon + '~' //iconId + + iconColor + '~' //iconColor + + switchVal + '~' //buttonState + + brightness + '~' //sliderBrightnessPos + + colorTemp + '~' //sliderColorTempPos + + colorMode + '~' //colorMode (if hue-alias without hue-datapoint, then disable) + + 'Color' + '~' //Color-Bezeichnung + + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung + + findLocale('lights', 'Brightness') }); //Brightness-Bezeichnung } @@ -3199,24 +3265,24 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { iconColor = GetIconColor(pageItem, false, true); } - var colorMode = 'disable'; + let colorMode = 'disable'; if (existsState(id + '.RGB')) { if (getState(id + '.RGB').val != null) { colorMode = 'enable'; - var hex = getState(id + '.RGB').val; - var hexRed = parseInt(hex[1] + hex[2], 16); - var hexGreen = parseInt(hex[3] + hex[4], 16); - var hexBlue = parseInt(hex[5] + hex[6], 16); + let hex = getState(id + '.RGB').val; + let hexRed = parseInt(hex[1] + hex[2], 16); + let hexGreen = parseInt(hex[3] + hex[4], 16); + let hexBlue = parseInt(hex[5] + hex[6], 16); let rgb = { red: Math.round(hexRed), green: Math.round(hexGreen), blue: Math.round(hexBlue) } iconColor = rgb_dec565(pageItem.interpolateColor !== undefined ? rgb : config.defaultOnColor); //RegisterDetailEntityWatcher(id + '.HUE', pageItem, type); } } - var colorTemp = 0; + let colorTemp = 0; if (existsState(id + '.TEMPERATURE')) { if (getState(id + '.TEMPERATURE').val != null) { - if (pageItem.minValueColorTemp !== undefined && pageItem.minValueColorTemp !== undefined) { + if (pageItem.minValueColorTemp !== undefined && pageItem.maxValueColorTemp !== undefined) { colorTemp = Math.trunc(scale(getState(id + '.TEMPERATURE').val, pageItem.minValueColorTemp, pageItem.maxValueColorTemp, 0, 100)); } else { colorTemp = 100 - getState(id + '.TEMPERATURE').val; @@ -3229,16 +3295,16 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { out_msgs.push({ payload: 'entityUpdateDetail' + '~' //entityUpdateDetail - + id + '~' - + icon + '~' //iconId - + iconColor + '~' //iconColor - + switchVal + '~' //buttonState - + brightness + '~' //sliderBrightnessPos - + colorTemp + '~' //sliderColorTempPos - + colorMode + '~' //colorMode (if hue-alias without hue-datapoint, then disable) - + 'Color' + '~' //Color-Bezeichnung - + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung - + findLocale('lights', 'Brightness') + + id + '~' + + icon + '~' //iconId + + iconColor + '~' //iconColor + + switchVal + '~' //buttonState + + brightness + '~' //sliderBrightnessPos + + colorTemp + '~' //sliderColorTempPos + + colorMode + '~' //colorMode (if hue-alias without hue-datapoint, then disable) + + 'Color' + '~' //Color-Bezeichnung + + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung + + findLocale('lights', 'Brightness') }); //Brightness-Bezeichnung } @@ -3268,12 +3334,12 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { iconColor = GetIconColor(pageItem, false, true); } - var colorMode = 'disable'; + let colorMode = 'disable'; - var colorTemp = 0; + let colorTemp = 0; if (existsState(id + '.TEMPERATURE')) { if (getState(id + '.TEMPERATURE').val != null) { - if (pageItem.minValueColorTemp !== undefined && pageItem.minValueColorTemp !== undefined) { + if (pageItem.minValueColorTemp !== undefined && pageItem.maxValueColorTemp !== undefined) { colorTemp = Math.trunc(scale(getState(id + '.TEMPERATURE').val, pageItem.minValueColorTemp, pageItem.maxValueColorTemp, 0, 100)); } else { colorTemp = 100 - getState(id + '.TEMPERATURE').val; @@ -3286,16 +3352,16 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { out_msgs.push({ payload: 'entityUpdateDetail' + '~' //entityUpdateDetail - + id + '~' - + icon + '~' //iconId - + iconColor + '~' //iconColor - + switchVal + '~' //buttonState - + brightness + '~' //sliderBrightnessPos - + colorTemp + '~' //sliderColorTempPos - + colorMode + '~' //colorMode (if hue-alias without hue-datapoint, then disable) - + 'Color' + '~' //Color-Bezeichnung - + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung - + findLocale('lights', 'Brightness') + + id + '~' + + icon + '~' //iconId + + iconColor + '~' //iconColor + + switchVal + '~' //buttonState + + brightness + '~' //sliderBrightnessPos + + colorTemp + '~' //sliderColorTempPos + + colorMode + '~' //colorMode (if hue-alias without hue-datapoint, then disable) + + 'Color' + '~' //Color-Bezeichnung + + findLocale('lights', 'Temperature') + '~' //Temperature-Bezeichnung + + findLocale('lights', 'Brightness') }); //Brightness-Bezeichnung } } @@ -3309,7 +3375,7 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { val = getState(id + '.SET').val; RegisterDetailEntityWatcher(id + '.SET', pageItem, type); } - var tilt_position: any = 'disabled' + let tilt_position: any = 'disabled' if (existsState(id + '.TILT_ACTUAL')) { tilt_position = getState(id + '.TILT_ACTUAL').val; RegisterDetailEntityWatcher(id + '.TILT_ACTUAL', pageItem, type); @@ -3319,7 +3385,7 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { } let textSecondRow = ''; - let icon_id = icon; + let icon_id = icon; let icon_up = Icons.GetIcon('arrow-up'); let icon_stop = Icons.GetIcon('stop'); let icon_down = Icons.GetIcon('arrow-down'); @@ -3352,25 +3418,25 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { out_msgs.push({ payload: 'entityUpdateDetail' + '~' //entityUpdateDetail - + id + '~' //entity_id - + val + '~' //Shutterposition - + textSecondRow + '~' //pos_status 2.line - + findLocale('blinds', 'Position') + '~' //pos_translation - + icon_id + '~' //{icon_id}~ - + icon_up + '~' //{icon_up}~ - + icon_stop + '~' //{icon_stop}~ - + icon_down + '~' //{icon_down}~ - + icon_up_status + '~' //{icon_up_status}~ - + icon_stop_status + '~' //{icon_stop_status}~ - + icon_down_status + '~' //{icon_down_status}~ - + textTilt + '~' //{textTilt}~ - + iconTiltLeft + '~' //{iconTiltLeft}~ - + iconTiltStop + '~' //{iconTiltStop}~ - + iconTiltRight + '~' //{iconTiltRight}~ - + iconTiltLeftStatus + '~' //{iconTiltLeftStatus}~ - + iconTiltStopStatus + '~' //{iconTiltStopStatus}~ - + iconTiltRightStatus + '~' //{iconTiltRightStatus}~ - + tilt_pos //{tilt_pos}") + + id + '~' //entity_id + + val + '~' //Shutterposition + + textSecondRow + '~' //pos_status 2.line + + findLocale('blinds', 'Position') + '~' //pos_translation + + icon_id + '~' //{icon_id}~ + + icon_up + '~' //{icon_up}~ + + icon_stop + '~' //{icon_stop}~ + + icon_down + '~' //{icon_down}~ + + icon_up_status + '~' //{icon_up_status}~ + + icon_stop_status + '~' //{icon_stop_status}~ + + icon_down_status + '~' //{icon_down_status}~ + + textTilt + '~' //{textTilt}~ + + iconTiltLeft + '~' //{iconTiltLeft}~ + + iconTiltStop + '~' //{iconTiltStop}~ + + iconTiltRight + '~' //{iconTiltRight}~ + + iconTiltLeftStatus + '~' //{iconTiltLeftStatus}~ + + iconTiltStopStatus + '~' //{iconTiltStopStatus}~ + + iconTiltRightStatus + '~' //{iconTiltRightStatus}~ + + tilt_pos //{tilt_pos}") }); } } @@ -3379,7 +3445,7 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { } catch (err) { console.log('function GenerateDetailPage: ' + err.message); - } + } } function scale(number: number, inMin: number, inMax: number, outMin: number, outMax: number): number { @@ -3387,7 +3453,7 @@ function scale(number: number, inMin: number, inMax: number, outMin: number, out return (outMax + outMin) - ((number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin); } catch (err) { console.log('function scale: ' + err.message); - } + } } function UnsubscribeWatcher(): void { @@ -3398,7 +3464,7 @@ function UnsubscribeWatcher(): void { } } catch (err) { console.log('function UnsubscribeWatcher: ' + err.message); - } + } } function HandleScreensaver(): void { @@ -3411,31 +3477,35 @@ function HandleScreensaver(): void { function HandleScreensaverUpdate(): void { try { if (screensaverEnabled && config.weatherEntity != null && existsObject(config.weatherEntity)) { - var icon = getState(config.weatherEntity + '.ICON').val; + let icon = getState(config.weatherEntity + '.ICON').val; let temperature = - existsState(config.weatherEntity + '.ACTUAL') ? getState(config.weatherEntity + '.ACTUAL').val : - existsState(config.weatherEntity + '.TEMP') ? getState(config.weatherEntity + '.TEMP').val : 'null'; + existsState(config.weatherEntity + '.ACTUAL') ? getState(config.weatherEntity + '.ACTUAL').val : + existsState(config.weatherEntity + '.TEMP') ? getState(config.weatherEntity + '.TEMP').val : 'null'; if (config.alternativeScreensaverLayout) { temperature = parseInt(Math.round(temperature).toFixed()); } let payloadString = - 'weatherUpdate~' + Icons.GetIcon(GetAccuWeatherIcon(parseInt(icon))) + '~' - + temperature + ' ' + config.temperatureUnit + '~'; + 'weatherUpdate~' + Icons.GetIcon(GetAccuWeatherIcon(parseInt(icon))) + '~' + + temperature + ' ' + config.temperatureUnit + '~'; vwIconColor[0] = GetAccuWeatherIconColor(parseInt(icon)); - if (Debug) console.log(GetAccuWeatherIconColor(parseInt(icon))); + if (Debug) { + console.log(GetAccuWeatherIconColor(parseInt(icon))); + } if (weatherForecast) { - // Accu-Weather Forecast Tag 2 - Tag 5 -- Wenn weatherForecast = true + // AccuWeather Forecast Tag 2 - Tag 5 -- Wenn weatherForecast = true for (let i = 2; i < 6; i++) { let TempMax = getState('accuweather.0.Summary.TempMax_d' + i).val; let DayOfWeek = getState('accuweather.0.Summary.DayOfWeek_d' + i).val; let WeatherIcon = GetAccuWeatherIcon(getState('accuweather.0.Summary.WeatherIcon_d' + i).val); vwIconColor[i-1] = GetAccuWeatherIconColor(getState('accuweather.0.Summary.WeatherIcon_d' + i).val); - if (Debug) console.log(vwIconColor[i-1]); + if (Debug) { + console.log(vwIconColor[i - 1]); + } payloadString += DayOfWeek + '~' + Icons.GetIcon(WeatherIcon) + '~' + TempMax + ' ' + config.temperatureUnit + '~'; } } else { @@ -3443,7 +3513,7 @@ function HandleScreensaverUpdate(): void { payloadString += GetScreenSaverEntityString(config.secondScreensaverEntity); payloadString += GetScreenSaverEntityString(config.thirdScreensaverEntity); payloadString += GetScreenSaverEntityString(config.fourthScreensaverEntity); - + const colorScale0: RGB = { red: 99, green: 190, blue: 123 }; const colorScale1: RGB = { red: 129, green: 199, blue: 126 }; const colorScale2: RGB = { red: 161, green: 208, blue: 127 }; @@ -3472,15 +3542,17 @@ function HandleScreensaverUpdate(): void { valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) } else { if (valueScale < iconvalbest) { - valueScale = scale(valueScale,iconvalmin, iconvalbest, 0, 10) + valueScale = scale(valueScale,iconvalmin, iconvalbest, 0, 10) } else if (valueScale > iconvalbest || iconvalbest != iconvalmin) { - valueScale = scale(valueScale,iconvalbest, iconvalmax, 10, 0) + valueScale = scale(valueScale,iconvalbest, iconvalmax, 10, 0) } else { - valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) + valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) } } - let valueScaletemp = (Math.round(valueScale)).toFixed(); - if (Debug) console.log(valueScaletemp); + let valueScaletemp = (Math.round(valueScale)).toFixed(); + if (Debug) { + console.log(valueScaletemp); + } switch (valueScaletemp) { case '0': vwIconColor[1] = rgb_dec565(colorScale0); @@ -3505,7 +3577,7 @@ function HandleScreensaverUpdate(): void { break; case '7': vwIconColor[1] = rgb_dec565(colorScale7); - break; + break; case '8': vwIconColor[1] = rgb_dec565(colorScale8); break; @@ -3515,7 +3587,7 @@ function HandleScreensaverUpdate(): void { case '10': vwIconColor[1] = rgb_dec565(colorScale10); break; - } + } } if (config.firstScreensaverEntity.ScreensaverEntityIconColor.val_min == undefined) { vwIconColor[1] = rgb_dec565(config.firstScreensaverEntity.ScreensaverEntityIconColor); @@ -3524,7 +3596,7 @@ function HandleScreensaverUpdate(): void { vwIconColor[1] = rgb_dec565(sctF1Icon); } } else { - vwIconColor[1] = rgb_dec565(sctF1Icon); + vwIconColor[1] = rgb_dec565(sctF1Icon); } if (config.secondScreensaverEntity.ScreensaverEntityIconColor != undefined) { @@ -3544,15 +3616,17 @@ function HandleScreensaverUpdate(): void { valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) } else { if (valueScale < iconvalbest) { - valueScale = scale(valueScale,iconvalmin, iconvalbest, 0, 10) + valueScale = scale(valueScale,iconvalmin, iconvalbest, 0, 10) } else if (valueScale > iconvalbest || iconvalbest != iconvalmin) { - valueScale = scale(valueScale,iconvalbest, iconvalmax, 10, 0) + valueScale = scale(valueScale,iconvalbest, iconvalmax, 10, 0) } else { - valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) + valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) } } - let valueScaletemp = (Math.round(valueScale)).toFixed(); - if (Debug) console.log(valueScaletemp); + let valueScaletemp = (Math.round(valueScale)).toFixed(); + if (Debug) { + console.log(valueScaletemp); + } switch (valueScaletemp) { case '0': vwIconColor[2] = rgb_dec565(colorScale0); @@ -3577,7 +3651,7 @@ function HandleScreensaverUpdate(): void { break; case '7': vwIconColor[2] = rgb_dec565(colorScale7); - break; + break; case '8': vwIconColor[2] = rgb_dec565(colorScale8); break; @@ -3587,16 +3661,16 @@ function HandleScreensaverUpdate(): void { case '10': vwIconColor[2] = rgb_dec565(colorScale10); break; - } + } } if (config.secondScreensaverEntity.ScreensaverEntityIconColor.val_min == undefined) { vwIconColor[2] = rgb_dec565(config.secondScreensaverEntity.ScreensaverEntityIconColor); } } else { - vwIconColor[2] = rgb_dec565(sctF2Icon); + vwIconColor[2] = rgb_dec565(sctF2Icon); } } else { - vwIconColor[2] = rgb_dec565(sctF2Icon); + vwIconColor[2] = rgb_dec565(sctF2Icon); } if (config.thirdScreensaverEntity.ScreensaverEntityIconColor != undefined) { @@ -3616,15 +3690,17 @@ function HandleScreensaverUpdate(): void { valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) } else { if (valueScale < iconvalbest) { - valueScale = scale(valueScale,iconvalmin, iconvalbest, 0, 10) + valueScale = scale(valueScale,iconvalmin, iconvalbest, 0, 10) } else if (valueScale > iconvalbest || iconvalbest != iconvalmin) { - valueScale = scale(valueScale,iconvalbest, iconvalmax, 10, 0) + valueScale = scale(valueScale,iconvalbest, iconvalmax, 10, 0) } else { - valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) + valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) } } - let valueScaletemp = (Math.round(valueScale)).toFixed(); - if (Debug) console.log(valueScaletemp); + let valueScaletemp = (Math.round(valueScale)).toFixed(); + if (Debug) { + console.log(valueScaletemp); + } switch (valueScaletemp) { case '0': vwIconColor[3] = rgb_dec565(colorScale0); @@ -3649,7 +3725,7 @@ function HandleScreensaverUpdate(): void { break; case '7': vwIconColor[3] = rgb_dec565(colorScale7); - break; + break; case '8': vwIconColor[3] = rgb_dec565(colorScale8); break; @@ -3659,16 +3735,16 @@ function HandleScreensaverUpdate(): void { case '10': vwIconColor[3] = rgb_dec565(colorScale10); break; - } + } } if (config.thirdScreensaverEntity.ScreensaverEntityIconColor.val_min == undefined) { vwIconColor[3] = rgb_dec565(config.thirdScreensaverEntity.ScreensaverEntityIconColor); } } else { - vwIconColor[3] = rgb_dec565(sctF2Icon); + vwIconColor[3] = rgb_dec565(sctF2Icon); } } else { - vwIconColor[3] = rgb_dec565(sctF2Icon); + vwIconColor[3] = rgb_dec565(sctF2Icon); } if (config.fourthScreensaverEntity.ScreensaverEntityIconColor != undefined) { @@ -3688,15 +3764,17 @@ function HandleScreensaverUpdate(): void { valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) } else { if (valueScale < iconvalbest) { - valueScale = scale(valueScale,iconvalmin, iconvalbest, 0, 10) + valueScale = scale(valueScale,iconvalmin, iconvalbest, 0, 10) } else if (valueScale > iconvalbest || iconvalbest != iconvalmin) { - valueScale = scale(valueScale,iconvalbest, iconvalmax, 10, 0) + valueScale = scale(valueScale,iconvalbest, iconvalmax, 10, 0) } else { - valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) + valueScale = scale(valueScale,iconvalmin, iconvalmax, 10, 0) } } - let valueScaletemp = (Math.round(valueScale)).toFixed(); - if (Debug) console.log(valueScaletemp); + let valueScaletemp = (Math.round(valueScale)).toFixed(); + if (Debug) { + console.log(valueScaletemp); + } switch (valueScaletemp) { case '0': vwIconColor[4] = rgb_dec565(colorScale0); @@ -3721,7 +3799,7 @@ function HandleScreensaverUpdate(): void { break; case '7': vwIconColor[4] = rgb_dec565(colorScale7); - break; + break; case '8': vwIconColor[4] = rgb_dec565(colorScale8); break; @@ -3731,42 +3809,42 @@ function HandleScreensaverUpdate(): void { case '10': vwIconColor[4] = rgb_dec565(colorScale10); break; - } + } } if (config.fourthScreensaverEntity.ScreensaverEntityIconColor.val_min == undefined) { vwIconColor[4] = rgb_dec565(config.fourthScreensaverEntity.ScreensaverEntityIconColor); } } else { - vwIconColor[4] = rgb_dec565(sctF2Icon); + vwIconColor[4] = rgb_dec565(sctF2Icon); } } else { - vwIconColor[4] = rgb_dec565(sctF2Icon); + vwIconColor[4] = rgb_dec565(sctF2Icon); } } //AltLayout if (config.alternativeScreensaverLayout) { - payloadString += parseInt(getState(config.fourthScreensaverEntity.ScreensaverEntity).val) + '~'; + payloadString += parseInt(getState(config.fourthScreensaverEntity.ScreensaverEntity).val) + '~'; payloadString += config.fourthScreensaverEntity.ScreensaverEntityUnitText + '~' } else { - payloadString += '~~' + payloadString += '~~' } - + let hwBtn1Col: any = config.mrIcon1ScreensaverEntity.ScreensaverEntityOffColor; if (config.mrIcon1ScreensaverEntity.ScreensaverEntity != null) { if (typeof (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) == 'string') { let hwBtn1: string = getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val; if (hwBtn1 == 'ON') { - hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor; + hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor; } payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIcon) + '~' + rgb_dec565(hwBtn1Col) + '~'; } else if (typeof (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) == 'boolean') { let hwBtn1: boolean = getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val; if (hwBtn1) { - hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor; + hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor; } payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIcon) + '~' + rgb_dec565(hwBtn1Col) + '~'; - } + } } else { hwBtn1Col = Black; payloadString += '~~'; @@ -3777,28 +3855,28 @@ function HandleScreensaverUpdate(): void { if (typeof (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) == 'string') { let hwBtn2: string = getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val; if (hwBtn2 == 'ON') { - hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor; + hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor; } payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIcon) + '~' + rgb_dec565(hwBtn2Col) + '~'; } else if (typeof (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) == 'boolean') { let hwBtn2: boolean = getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val; if (hwBtn2) { - hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor; + hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor; } payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIcon) + '~' + rgb_dec565(hwBtn2Col) + '~'; - } + } } else { hwBtn2Col = Black; payloadString += '~~'; } HandleScreensaverColors(); - + SendToPanel({ payload: payloadString }); - + } } catch (err) { console.log('HandleScreensaverUpdate: ' + err.message); - } + } } function HandleScreensaverColors(): void { @@ -3822,34 +3900,34 @@ function HandleScreensaverColors(): void { vwIcon[1] = vwIconColor[1]; vwIcon[2] = vwIconColor[2]; vwIcon[3] = vwIconColor[3]; - vwIcon[4] = vwIconColor[4]; + vwIcon[4] = vwIconColor[4]; } } let payloadString = 'color' + '~' + - rgb_dec565(scbackground) + '~' + //background - rgb_dec565(sctime) + '~' + //time - rgb_dec565(sctimeAMPM) + '~' + //timeAMPM~ - rgb_dec565(scdate) + '~' + //date~ - vwIcon[0] + '~' + //tMainIcon~ rgb_dec565(sctMainIcon) - rgb_dec565(sctMainText) + '~' + //tMainText~ - rgb_dec565(sctForecast1) + '~' + //tForecast1~ - rgb_dec565(sctForecast2) + '~' + //tForecast2~ - rgb_dec565(sctForecast3) + '~' + //tForecast3~ - rgb_dec565(sctForecast4) + '~' + //tForecast4~ - vwIcon[1] + '~' + //tF1Icon~ rgb_dec565(sctF1Icon) - vwIcon[2] + '~' + //tF2Icon~ rgb_dec565(sctF2Icon) - vwIcon[3] + '~' + //tF3Icon~ rgb_dec565(sctF3Icon) - vwIcon[4] + '~' + //tF4Icon~ rgb_dec565(sctF4Icon) - rgb_dec565(sctForecast1Val) + '~' + //tForecast1Val~ - rgb_dec565(sctForecast2Val) + '~' + //tForecast2Val~ - rgb_dec565(sctForecast3Val) + '~' + //tForecast3Val~ - rgb_dec565(sctForecast4Val) + '~' + //tForecast4Val~ - rgb_dec565(scbar) + '~' + //bar~ - rgb_dec565(sctMainIconAlt) + '~' + //tMainIconAlt - rgb_dec565(sctMainTextAlt) + '~' + //tMainTextAlt - rgb_dec565(sctTimeAdd); - //true; + rgb_dec565(scbackground) + '~' + //background + rgb_dec565(sctime) + '~' + //time + rgb_dec565(sctimeAMPM) + '~' + //timeAMPM~ + rgb_dec565(scdate) + '~' + //date~ + vwIcon[0] + '~' + //tMainIcon~ rgb_dec565(sctMainIcon) + rgb_dec565(sctMainText) + '~' + //tMainText~ + rgb_dec565(sctForecast1) + '~' + //tForecast1~ + rgb_dec565(sctForecast2) + '~' + //tForecast2~ + rgb_dec565(sctForecast3) + '~' + //tForecast3~ + rgb_dec565(sctForecast4) + '~' + //tForecast4~ + vwIcon[1] + '~' + //tF1Icon~ rgb_dec565(sctF1Icon) + vwIcon[2] + '~' + //tF2Icon~ rgb_dec565(sctF2Icon) + vwIcon[3] + '~' + //tF3Icon~ rgb_dec565(sctF3Icon) + vwIcon[4] + '~' + //tF4Icon~ rgb_dec565(sctF4Icon) + rgb_dec565(sctForecast1Val) + '~' + //tForecast1Val~ + rgb_dec565(sctForecast2Val) + '~' + //tForecast2Val~ + rgb_dec565(sctForecast3Val) + '~' + //tForecast3Val~ + rgb_dec565(sctForecast4Val) + '~' + //tForecast4Val~ + rgb_dec565(scbar) + '~' + //bar~ + rgb_dec565(sctMainIconAlt) + '~' + //tMainIconAlt + rgb_dec565(sctMainTextAlt) + '~' + //tMainTextAlt + rgb_dec565(sctTimeAdd); + //true; SendToPanel({ payload: payloadString }); } catch (err) { @@ -3957,7 +4035,7 @@ function GetAccuWeatherIconColor(icon: number): number { case 24: // Ice case 30: // Hot case 31: // Cold - return rgb_dec565(swExceptional); // exceptional + return rgb_dec565(swExceptional); // exceptional case 7: // Cloudy case 8: // Dreary (Overcast) @@ -4000,7 +4078,7 @@ function GetAccuWeatherIconColor(icon: number): number { case 26: // Freezing Rain case 39: // Partly Cloudy w/ Showers case 40: // Mostly Cloudy w/ Showers - return rgb_dec565(swRainy); // rainy + return rgb_dec565(swRainy); // rainy case 19: // Flurries case 20: // Mostly Cloudy w/ Flurries @@ -4009,7 +4087,7 @@ function GetAccuWeatherIconColor(icon: number): number { case 23: // Mostly Cloudy w/ Snow case 43: // Mostly Cloudy w/ Flurries case 44: // Mostly Cloudy w/ Snow - return rgb_dec565(swSnowy); // snowy + return rgb_dec565(swSnowy); // snowy case 29: // Rain and Snow return rgb_dec565(swSnowyRainy); // snowy-rainy @@ -4059,9 +4137,9 @@ function GetBlendedColor(percentage: number): RGB { } function Interpolate(color1: RGB, color2: RGB, fraction: number): RGB { - var r: number = InterpolateNum(color1.red, color2.red, fraction); - var g: number = InterpolateNum(color1.green, color2.green, fraction); - var b: number = InterpolateNum(color1.blue, color2.blue, fraction); + let r: number = InterpolateNum(color1.red, color2.red, fraction); + let g: number = InterpolateNum(color1.green, color2.green, fraction); + let b: number = InterpolateNum(color1.blue, color2.blue, fraction); return { red: Math.round(r), green: Math.round(g), blue: Math.round(b) }; } @@ -4083,7 +4161,7 @@ function rad2deg(rad) { } function ColorToHex(color) { - var hexadecimal = color.toString(16); + let hexadecimal = color.toString(16); return hexadecimal.length == 1 ? '0' + hexadecimal : hexadecimal; } @@ -4102,25 +4180,25 @@ function hsv2rgb(hue: number, saturation: number, value: number) { let chroma = value * saturation; let x = chroma * (1 - Math.abs((hue % 2) - 1)); let rgb = hue <= 1 ? [chroma, x, 0] : - hue <= 2 ? [x, chroma, 0] : - hue <= 3 ? [0, chroma, x] : - hue <= 4 ? [0, x, chroma] : - hue <= 5 ? [x, 0, chroma] : - [chroma, 0, x]; + hue <= 2 ? [x, chroma, 0] : + hue <= 3 ? [0, chroma, x] : + hue <= 4 ? [0, x, chroma] : + hue <= 5 ? [x, 0, chroma] : + [chroma, 0, x]; return rgb.map(v => (v + value - chroma) * 255); } function getHue(red: number, green: number, blue: number) { - var min = Math.min(Math.min(red, green), blue); - var max = Math.max(Math.max(red, green), blue); + let min = Math.min(Math.min(red, green), blue); + let max = Math.max(Math.max(red, green), blue); if (min == max) { return 0; } - var hue = 0; + let hue = 0; if (max == red) { hue = (green - blue) / (max - min); @@ -4138,9 +4216,9 @@ function getHue(red: number, green: number, blue: number) { } function pos_to_color(x: number, y: number): RGB { - var r = 160 / 2; - var x = Math.round((x - r) / r * 100) / 100; - var y = Math.round((r - y) / r * 100) / 100; + let r = 160 / 2; + x = Math.round((x - r) / r * 100) / 100; + y = Math.round((r - y) / r * 100) / 100; r = Math.sqrt(x * x + y * y); let sat = 0 @@ -4150,39 +4228,39 @@ function pos_to_color(x: number, y: number): RGB { sat = r; } - var hsv = rad2deg(Math.atan2(y, x)); - var rgb = hsv2rgb(hsv, sat, 1); + let hsv = rad2deg(Math.atan2(y, x)); + let rgb = hsv2rgb(hsv, sat, 1); return { red: Math.round(rgb[0]), green: Math.round(rgb[1]), blue: Math.round(rgb[2]) }; } function rgb_to_cie(red, green, blue) { - //Apply a gamma correction to the RGB values, which makes the color more vivid and more the like the color displayed on the screen of your device - let vred = (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92); - let vgreen = (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92); - let vblue = (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92); - - //RGB values to XYZ using the Wide RGB D65 conversion formula - let X = vred * 0.664511 + vgreen * 0.154324 + vblue * 0.162028; - let Y = vred * 0.283881 + vgreen * 0.668433 + vblue * 0.047685; - let Z = vred * 0.000088 + vgreen * 0.072310 + vblue * 0.986039; - - //Calculate the xy values from the XYZ values - let ciex = (X / (X + Y + Z)).toFixed(4); - let ciey = (Y / (X + Y + Z)).toFixed(4); - let cie = "[" + ciex + "," + ciey + "]" - - return cie; + //Apply a gamma correction to the RGB values, which makes the color more vivid and more the like the color displayed on the screen of your device + let vred = (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92); + let vgreen = (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92); + let vblue = (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92); + + //RGB values to XYZ using the Wide RGB D65 conversion formula + let X = vred * 0.664511 + vgreen * 0.154324 + vblue * 0.162028; + let Y = vred * 0.283881 + vgreen * 0.668433 + vblue * 0.047685; + let Z = vred * 0.000088 + vgreen * 0.072310 + vblue * 0.986039; + + //Calculate the xy values from the XYZ values + let ciex = (X / (X + Y + Z)).toFixed(4); + let ciey = (Y / (X + Y + Z)).toFixed(4); + let cie = "[" + ciex + "," + ciey + "]" + + return cie; } function spotifyGetDeviceID(vDeviceString) { const availableDeviceIDs = getState("spotify-premium.0.devices.availableDeviceListIds").val; const availableDeviceNames = getState("spotify-premium.0.devices.availableDeviceListString").val; - var arrayDeviceListIds = availableDeviceIDs.split(";"); - var arrayDeviceListSting = availableDeviceNames.split(";"); - var indexPos = arrayDeviceListSting.indexOf(vDeviceString); - var strDevID = arrayDeviceListIds[indexPos]; + let arrayDeviceListIds = availableDeviceIDs.split(";"); + let arrayDeviceListSting = availableDeviceNames.split(";"); + let indexPos = arrayDeviceListSting.indexOf(vDeviceString); + let strDevID = arrayDeviceListIds[indexPos]; return strDevID; } @@ -4208,37 +4286,37 @@ type Page = { interface PageEntities extends Page { type: 'cardEntities', items: PageItem[], -}; +} interface PageGrid extends Page { type: 'cardGrid', items: PageItem[], -}; +} interface PageThermo extends Page { type: 'cardThermo', items: PageItem[], -}; +} interface PageMedia extends Page { type: 'cardMedia', items: PageItem[], -}; +} interface PageAlarm extends Page { type: 'cardAlarm', items: PageItem[], -}; +} interface PageQR extends Page { type: 'cardQR', items: PageItem[], -}; +} interface PagePower extends Page { type: 'cardPower', items: PageItem[], -}; +} type PageItem = { id: string, @@ -4303,7 +4381,7 @@ type Config = { subPages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower)[], button1Page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | null), button2Page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower| null), -}; +} type ScreenSaverElement = { ScreensaverEntity: string | null,