mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-21 15:04:24 +01:00
v3.4.0.6 - Update
- Add 5 Entities in US Panel Version to cardEntities - Fix screenSaverDoubleClick - Add cardPower (experimental) - Add sueezeboxrpc to cardMedia - Time-configurable change for screensaver icons
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
TypeScript v3.4.0.5 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Britzelpuf
|
TypeScript v3.4.0.6 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Britzelpuf
|
||||||
- abgestimmt auf TFT 42 / v3.4.0 / BerryDriver 4 / Tasmota 12.1.1
|
- abgestimmt auf TFT 42 / v3.4.0 / BerryDriver 4 / Tasmota 12.1.1
|
||||||
@joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker
|
@joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker
|
||||||
|
|
||||||
@@ -8,36 +8,37 @@ icon_mapping.ts: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroke
|
|||||||
|
|
||||||
ioBroker-Unterstützung: https://forum.iobroker.net/topic/50888/sonoff-nspanel
|
ioBroker-Unterstützung: https://forum.iobroker.net/topic/50888/sonoff-nspanel
|
||||||
WIKI zu diesem Projekt unter: https://github.com/joBr99/nspanel-lovelace-ui/wiki (siehe Sidebar)
|
WIKI zu diesem Projekt unter: https://github.com/joBr99/nspanel-lovelace-ui/wiki (siehe Sidebar)
|
||||||
|
Icons unter: https://htmlpreview.github.io/?https://github.com/jobr99/Generate-HASP-Fonts/blob/master/cheatsheet.html
|
||||||
|
|
||||||
ReleaseNotes:
|
ReleaseNotes:
|
||||||
Bugfixes und Erweiterungen:
|
Bugfixes und Erweiterungen:
|
||||||
- cardQR (für Gäste WLAN)
|
- cardQR (für Gäste WLAN)
|
||||||
- cardThermo (Neues Design für Alias Thermostat und zusätzlich für Alias Klimaanlage)
|
- cardThermo (Neues Design für Alias Thermostat und zusätzlich für Alias Klimaanlage)
|
||||||
- 08.05.2022 - V2.9.0 - Menüpfeile bei HardwareButtons (button1Page; button2Page) mit Navigation auf Page 0
|
- 08.05.2022 - v2.9.0 - Menüpfeile bei HardwareButtons (button1Page; button2Page) mit Navigation auf Page 0
|
||||||
- 08.05.2022 - V2.9.0 - Standard-Brightness über neuen Parameter active einstellbar (Test mit 2.9.3)
|
- 08.05.2022 - v2.9.0 - Standard-Brightness über neuen Parameter active einstellbar (Test mit 2.9.3)
|
||||||
- 08.05.2022 - V2.9.0 - Schalter (Licht, Dimmer, Hue, etc) in cardGrid lassen sich wieder schalten
|
- 08.05.2022 - v2.9.0 - Schalter (Licht, Dimmer, Hue, etc) in cardGrid lassen sich wieder schalten
|
||||||
- 14.06.2022 - V2.9.0 - Aktion auf Submenüs schaltet unmittelbar auf vorheriges Mainmenu (Many thanks to Grrzzz)
|
- 14.06.2022 - v2.9.0 - Aktion auf Submenüs schaltet unmittelbar auf vorheriges Mainmenu (Many thanks to Grrzzz)
|
||||||
- 14.06.2022 - V2.9.0 - Menü-Pfeile in Subpages (z.B. card QR, cardMedia, etc) (Many thanks to Grrzzz)
|
- 14.06.2022 - v2.9.0 - Menü-Pfeile in Subpages (z.B. card QR, cardMedia, etc) (Many thanks to Grrzzz)
|
||||||
- 15.06.2022 - V3.0.0 - Date/Time im Screensaver auf Basis localString (de-DE/en-EN/nl-NL/etc.)
|
- 15.06.2022 - v3.0.0 - Date/Time im Screensaver auf Basis localString (de-DE/en-EN/nl-NL/etc.)
|
||||||
- 16.06.2022 - V3.0.0 - Multilingual - config.locale (en-EN, de-DE, nl-NL, da-DK, es-ES, fr-FR, it-IT, ru-RU, etc.)
|
- 16.06.2022 - v3.0.0 - Multilingual - config.locale (en-EN, de-DE, nl-NL, da-DK, es-ES, fr-FR, it-IT, ru-RU, etc.)
|
||||||
- 16.06.2022 - V3.0.0 - Bugfix by Grrzzz - Subpages
|
- 16.06.2022 - v3.0.0 - Bugfix by Grrzzz - Subpages
|
||||||
- 18.06.2022 - V3.1.0 - Längere Textfelder in cardEntities
|
- 18.06.2022 - v3.1.0 - Längere Textfelder in cardEntities
|
||||||
- 18.06.2022 - V3.1.0 - Detail-Page Lights/Shutter hat neuen Parameter "id"
|
- 18.06.2022 - V3.1.0 - Detail-Page Lights/Shutter hat neuen Parameter "id"
|
||||||
- 19.06.2022 - V3.1.0 - Bugfix toLocalTimeString in en-EN/en-US
|
- 19.06.2022 - v3.1.0 - Bugfix toLocalTimeString in en-EN/en-US
|
||||||
- 19.06.2022 - V3.1.0 - Fehler in findLocale abgefangen
|
- 19.06.2022 - v3.1.0 - Fehler in findLocale abgefangen
|
||||||
- 19.06.2022 - V3.1.0 - Umstellung auf "Home Assistant" Sprachfile
|
- 19.06.2022 - v3.1.0 - Umstellung auf "Home Assistant" Sprachfile
|
||||||
- 19.06.2022 - V3.1.0 - Alias "light" und "socket" haben optionalen Parameter icon2 für negative Zustände
|
- 19.06.2022 - v3.1.0 - Alias "light" und "socket" haben optionalen Parameter icon2 für negative Zustände
|
||||||
- 29.06.2022 - V3.1.1 - Bugfix Github #286 (Active Page) + Bugfix pageThermo, pageMedia, pageAlarm as first Page
|
- 29.06.2022 - v3.1.1 - Bugfix Github #286 (Active Page) + Bugfix pageThermo, pageMedia, pageAlarm as first Page
|
||||||
- 25.08.2022 - V3.1.0 - Code-Verbesserungen (klein0r)
|
- 25.08.2022 - v3.1.0 - Code-Verbesserungen (klein0r)
|
||||||
- 26.08.2022 - V3.2.0 - pageItem mit CIE (XY) Parameter für ColorWheel (Steuerung für z.B Deconz-Farben bei denen Hue nicht greift)
|
- 26.08.2022 - v3.2.0 - pageItem mit CIE (XY) Parameter für ColorWheel (Steuerung für z.B Deconz-Farben bei denen Hue nicht greift)
|
||||||
- 28.08.2022 - V3.2.0 - Wechsel zwischen Weather-Forecast und eigenen Datenpunkten im Screensaver (minütlich)
|
- 28.08.2022 - v3.2.0 - Wechsel zwischen Weather-Forecast und eigenen Datenpunkten im Screensaver (minütlich)
|
||||||
- 28.08.2022 - V3.2.0 - Bugfix für 3.2.0 in GenerateDetailPage: Color-Language nicht über findLocales, da nicht in Sprachfile enthalten
|
- 28.08.2022 - v3.2.0 - Bugfix für 3.2.0 in GenerateDetailPage: Color-Language nicht über findLocales, da nicht in Sprachfile enthalten
|
||||||
- 29.08.2022 - V3.3.0 - Upgrade TFT 40
|
- 29.08.2022 - v3.3.0 - Upgrade TFT 40
|
||||||
- 29.08.2022 - V3.3.1 - Upgrade TFT 41
|
- 29.08.2022 - v3.3.1 - Upgrade TFT 41
|
||||||
- 04.09.2022 - V3.3.1 - Überarbeitung und BugFix für cardAlarm
|
- 04.09.2022 - v3.3.1 - Überarbeitung und BugFix für cardAlarm
|
||||||
- 13.09.2022 - V3.3.1.3 BugFix Screensaver Toggle
|
- 13.09.2022 - v3.3.1.3 BugFix Screensaver Toggle
|
||||||
- 13.09.2022 - V3.3.1.3 Überarbeitung und BugFix und Refresh Features für cardMedia (Breaking Changes)
|
- 13.09.2022 - v3.3.1.3 Überarbeitung und BugFix und Refresh Features für cardMedia (Breaking Changes)
|
||||||
- 13.09.2022 - V3.3.1.3 Hinzufügen von SpotifyPremium, Sonos und Chromecast (Google home) zur cardMedia-Logik
|
- 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 - BugFix Dimmode
|
||||||
- 15.09.2022 - V3.4.0 - Colormode für Screensaver + AutoColor WeatherForecast
|
- 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
|
||||||
@@ -45,6 +46,11 @@ ReleaseNotes:
|
|||||||
- 17.09.2022 - v3.4.0.3 Bugfix bNext / bPrev by joBr99
|
- 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
|
- 18.09.2022 - v3.4.0.4 Add On/Off Colors in config.mrIcon1ScreensaverEntity and config.mrIcon2ScreensaverEntity
|
||||||
- 19.09.2022 - v3.4.0.5 Add Mode to cardThermo (Alias Thermostat)
|
- 19.09.2022 - v3.4.0.5 Add Mode to cardThermo (Alias Thermostat)
|
||||||
|
- 03.10.2022 - v3.4.0.6 Add 5 Entities in US Panel Version to cardEntities
|
||||||
|
- 03.10.2022 - v3.4.0.6 Fix screenSaverDoubleClick
|
||||||
|
- 03.10.2022 - v3.4.0.6 Add cardPower (experimental)
|
||||||
|
- 05.10.2022 - v3.4.0.6 Add sueezeboxrpc to cardMedia
|
||||||
|
- 07.10.2022 - v3.4.0.6 Time-configurable change for screensaver icons
|
||||||
|
|
||||||
Wenn Rule definiert, dann können die Hardware-Tasten ebenfalls für Seitensteuerung (dann nicht mehr als Releais) genutzt werden
|
Wenn Rule definiert, dann können die Hardware-Tasten ebenfalls für Seitensteuerung (dann nicht mehr als Releais) genutzt werden
|
||||||
Tasmota Konsole:
|
Tasmota Konsole:
|
||||||
@@ -123,7 +129,7 @@ const Debug = false;
|
|||||||
// Variablen zur Steuerung der Wettericons auf dem Screensaver (Steuerung in 0_userdata.0.XPANELX.ScreensaverInfo)
|
// 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 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)
|
// Wenn weatherForecastTimer auf false, dann Möglichkeit über weatherForecast, ob Datenpunkte oder Wettervorhersage (true = WeatherForecast/false = Datenpunkte)
|
||||||
var weatherForecast;
|
var weatherForecast: boolean; //Änderung zum Video --> Einstellung siehe Wiki
|
||||||
|
|
||||||
const HMIOff: RGB = { red: 68, green: 115, blue: 158 }; // Blau-Off - Original
|
const HMIOff: RGB = { red: 68, green: 115, blue: 158 }; // Blau-Off - Original
|
||||||
const Off: RGB = { red: 253, green: 128, blue: 0 }; // Orange-Off - schönere Farbübergänge
|
const Off: RGB = { red: 253, green: 128, blue: 0 }; // Orange-Off - schönere Farbübergänge
|
||||||
@@ -145,6 +151,19 @@ const colorRadio: RGB = { red: 255, green: 127, blue: 0 };
|
|||||||
const BatteryFull: RGB = { red: 96, green: 176, blue: 62 };
|
const BatteryFull: RGB = { red: 96, green: 176, blue: 62 };
|
||||||
const BatteryEmpty: RGB = { red: 179, green: 45, blue: 25 };
|
const BatteryEmpty: RGB = { red: 179, green: 45, blue: 25 };
|
||||||
|
|
||||||
|
//Dynamische Indikatoren
|
||||||
|
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 };
|
||||||
|
const colorScale3: RGB = { red: 129, green: 217, blue: 126 };
|
||||||
|
const colorScale4: RGB = { red: 222, green: 226, blue: 131 };
|
||||||
|
const colorScale5: RGB = { red: 254, green: 235, blue: 132 };
|
||||||
|
const colorScale6: RGB = { red: 255, green: 210, blue: 129 };
|
||||||
|
const colorScale7: RGB = { red: 251, green: 185, blue: 124 };
|
||||||
|
const colorScale8: RGB = { red: 251, green: 158, blue: 117 };
|
||||||
|
const colorScale9: RGB = { red: 248, green: 131, blue: 111 };
|
||||||
|
const colorScale10: RGB = { red: 248, green: 105, blue: 107 };
|
||||||
|
|
||||||
//Screensaver Default Theme Colors
|
//Screensaver Default Theme Colors
|
||||||
const scbackground: RGB = { red: 0, green: 0, blue: 0};
|
const scbackground: RGB = { red: 0, green: 0, blue: 0};
|
||||||
const sctime: RGB = { red: 255, green: 255, blue: 255};
|
const sctime: RGB = { red: 255, green: 255, blue: 255};
|
||||||
@@ -574,6 +593,7 @@ const request = require('request');
|
|||||||
//----------------------Begin Dimmode
|
//----------------------Begin Dimmode
|
||||||
|
|
||||||
function ScreensaverDimmode(timeDimMode: DimMode) {
|
function ScreensaverDimmode(timeDimMode: DimMode) {
|
||||||
|
try {
|
||||||
if (Debug) console.log('Dimmode='+ timeDimMode.dimmodeOn)
|
if (Debug) console.log('Dimmode='+ timeDimMode.dimmodeOn)
|
||||||
if (timeDimMode.dimmodeOn != undefined ? timeDimMode.dimmodeOn : false) {
|
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)) {
|
if (compareTime(timeDimMode.timeNight != undefined ? timeDimMode.timeNight : '22:00', timeDimMode.timeDay != undefined ? timeDimMode.timeDay : '07:00', 'not between', undefined)) {
|
||||||
@@ -586,20 +606,30 @@ function ScreensaverDimmode(timeDimMode: DimMode) {
|
|||||||
} else {
|
} else {
|
||||||
SendToPanel({ payload: 'dimmode~' + config.dimmode + '~' + config.active });
|
SendToPanel({ payload: 'dimmode~' + config.dimmode + '~' + config.active });
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function ScreensaverDimmode: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function InitWeatherForecast() {
|
async function InitWeatherForecast() {
|
||||||
|
try {
|
||||||
//----Möglichkeit, im Screensaver zwischen Accu-Weather Forecast oder selbstdefinierten Werten zu wählen---------------------------------
|
//----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) {
|
if (existsState(NSPanel_Path + "ScreensaverInfo.weatherForecast") == false ||
|
||||||
|
existsState(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer") == false ||
|
||||||
|
existsState(NSPanel_Path + "ScreensaverInfo.entiiesChangeTime") == false) {
|
||||||
await createStateAsync(NSPanel_Path + "ScreensaverInfo.weatherForecast", true, { type: 'boolean' });
|
await createStateAsync(NSPanel_Path + "ScreensaverInfo.weatherForecast", true, { type: 'boolean' });
|
||||||
await createStateAsync(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer", true, { type: 'boolean' });
|
await createStateAsync(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer", true, { type: 'boolean' });
|
||||||
|
await createStateAsync(NSPanel_Path + "ScreensaverInfo.entiiesChangeTime", 60, { type: 'number' });
|
||||||
};
|
};
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function InitWeatherForecast: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InitWeatherForecast();
|
InitWeatherForecast();
|
||||||
|
|
||||||
async function InitDimmode() {
|
async function InitDimmode() {
|
||||||
|
try {
|
||||||
// Screensaver nachts auf dunkel ("brightnessNight: z.B. 2") oder aus ("brightnessNight:0")
|
// Screensaver nachts auf dunkel ("brightnessNight: z.B. 2") oder aus ("brightnessNight:0")
|
||||||
if (!existsState(NSPanel_Path + 'NSPanel_Dimmode_brightnessDay')) {
|
if (!existsState(NSPanel_Path + 'NSPanel_Dimmode_brightnessDay')) {
|
||||||
await createStateAsync(NSPanel_Path + 'NSPanel_Dimmode_brightnessDay', <iobJS.StateCommon>{ type: 'number' });
|
await createStateAsync(NSPanel_Path + 'NSPanel_Dimmode_brightnessDay', <iobJS.StateCommon>{ type: 'number' });
|
||||||
@@ -643,6 +673,9 @@ async function InitDimmode() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ScreensaverDimmode(timeDimMode);
|
ScreensaverDimmode(timeDimMode);
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function InitDimmode: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InitDimmode();
|
InitDimmode();
|
||||||
@@ -663,6 +696,7 @@ const popupNotifySleepTimeout = NSPanel_Path + 'popupNotify.popupNotifySleepTime
|
|||||||
const popupNotifyAction = NSPanel_Path + 'popupNotify.popupNotifyAction'; // Antwort aus dem Panel true/false
|
const popupNotifyAction = NSPanel_Path + 'popupNotify.popupNotifyAction'; // Antwort aus dem Panel true/false
|
||||||
|
|
||||||
async function InitPopupNotify() {
|
async function InitPopupNotify() {
|
||||||
|
try {
|
||||||
if (!existsState(screensaverNotifyHeading)) {
|
if (!existsState(screensaverNotifyHeading)) {
|
||||||
await createStateAsync(screensaverNotifyHeading, <iobJS.StateCommon>{ type: 'string' });
|
await createStateAsync(screensaverNotifyHeading, <iobJS.StateCommon>{ type: 'string' });
|
||||||
await setStateAsync(screensaverNotifyHeading, <iobJS.State>{ val: '', ack: true });
|
await setStateAsync(screensaverNotifyHeading, <iobJS.State>{ val: '', ack: true });
|
||||||
@@ -710,6 +744,9 @@ async function InitPopupNotify() {
|
|||||||
setIfExists(config.panelSendTopic, 'pageType~popupNotify');
|
setIfExists(config.panelSendTopic, 'pageType~popupNotify');
|
||||||
setIfExists(config.panelSendTopic, notification);
|
setIfExists(config.panelSendTopic, notification);
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function InitPopupNotify: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InitPopupNotify();
|
InitPopupNotify();
|
||||||
@@ -721,31 +758,52 @@ let pageId = 0;
|
|||||||
// Neu für Subpages
|
// Neu für Subpages
|
||||||
let activePage = undefined;
|
let activePage = undefined;
|
||||||
|
|
||||||
|
//Uhrzeit an NSPanel senden
|
||||||
schedule('* * * * *', () => {
|
schedule('* * * * *', () => {
|
||||||
|
try {
|
||||||
SendTime();
|
SendTime();
|
||||||
//WeatherForcast true/false Umschaltung halbe Minute verzögert
|
} catch (err) {
|
||||||
|
console.warn('schedule: ' + err.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//Wechsel zwischen Screensaver Enities und WeatherForecast
|
||||||
|
schedule('*/' + getState(NSPanel_Path + 'ScreensaverInfo.entiiesChangeTime').val + ' * * * * *', () => {
|
||||||
|
try {
|
||||||
|
//WeatherForcast 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) {
|
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, 30000, false);
|
setStateDelayed(NSPanel_Path + "ScreensaverInfo.weatherForecast", false, (getState(NSPanel_Path + 'ScreensaverInfo.entiiesChangeTime').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) {
|
} 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, 30000, false);
|
setStateDelayed(NSPanel_Path + "ScreensaverInfo.weatherForecast", true, (getState(NSPanel_Path + 'ScreensaverInfo.entiiesChangeTime').val / 2 * 1000), false);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('schedule: ' + err.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function InitHWButton1Color() {
|
function InitHWButton1Color() {
|
||||||
|
try {
|
||||||
if (config.mrIcon1ScreensaverEntity.ScreensaverEntity != null || config.mrIcon1ScreensaverEntity.ScreensaverEntity != undefined) {
|
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 (obj) {
|
||||||
HandleScreensaverUpdate();
|
HandleScreensaverUpdate();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function InitHWButton1Color: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
InitHWButton1Color();
|
InitHWButton1Color();
|
||||||
|
|
||||||
function InitHWButton2Color() {
|
function InitHWButton2Color() {
|
||||||
|
try {
|
||||||
if (config.mrIcon2ScreensaverEntity.ScreensaverEntity != null || config.mrIcon2ScreensaverEntity.ScreensaverEntity != undefined) {
|
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 (obj) {
|
||||||
HandleScreensaverUpdate();
|
HandleScreensaverUpdate();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function InitHWButton2Color: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
InitHWButton2Color();
|
InitHWButton2Color();
|
||||||
|
|
||||||
@@ -764,8 +822,8 @@ schedule({ hour: 3, minute: 30 }, async () => {
|
|||||||
await setStateAsync(config.panelSendTopic, 'pageType~pageStartup');
|
await setStateAsync(config.panelSendTopic, 'pageType~pageStartup');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Updates vergleichen aktuell alle 30 Minuten
|
// Updates vergleichen aktuell alle 12 Stunden
|
||||||
schedule('*/30 * * * *', () => {
|
schedule('{"time":{"start":"00:00","end":"23:59","mode":"hours","interval":12},"period":{"days":1}}', () => {
|
||||||
get_tasmota_status0();
|
get_tasmota_status0();
|
||||||
get_panel_update_data();
|
get_panel_update_data();
|
||||||
check_updates();
|
check_updates();
|
||||||
@@ -804,6 +862,7 @@ function get_locales() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function check_updates() {
|
async function check_updates() {
|
||||||
|
try {
|
||||||
const desired_display_firmware_version = 42;
|
const desired_display_firmware_version = 42;
|
||||||
const berry_driver_version = 4;
|
const berry_driver_version = 4;
|
||||||
|
|
||||||
@@ -912,9 +971,13 @@ async function check_updates() {
|
|||||||
if (Debug) console.log('Display_Firmware auf NSPanel aktuell');
|
if (Debug) console.log('Display_Firmware auf NSPanel aktuell');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function check_updates: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
on({ id: NSPanel_Path + 'popupNotify.popupNotifyAction', change: 'any' }, async function (obj) {
|
on({ id: NSPanel_Path + 'popupNotify.popupNotifyAction', change: 'any' }, async function (obj) {
|
||||||
|
try {
|
||||||
const val = obj.state ? obj.state.val : false;
|
const val = obj.state ? obj.state.val : false;
|
||||||
|
|
||||||
if (!val) {
|
if (!val) {
|
||||||
@@ -935,9 +998,13 @@ 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);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
async function get_panel_update_data() {
|
async function get_panel_update_data() {
|
||||||
|
try {
|
||||||
await createStateAsync(NSPanel_Path + 'NSPanel_autoUpdate', false, <iobJS.StateCommon>{ read: true, write: true, name: 'Auto-Update', type: 'boolean', def: false });
|
await createStateAsync(NSPanel_Path + 'NSPanel_autoUpdate', false, <iobJS.StateCommon>{ read: true, write: true, name: 'Auto-Update', type: 'boolean', def: false });
|
||||||
|
|
||||||
await createStateAsync(NSPanel_Path + 'NSPanel_ipAddress', <iobJS.StateCommon>{ type: 'string' });
|
await createStateAsync(NSPanel_Path + 'NSPanel_ipAddress', <iobJS.StateCommon>{ type: 'string' });
|
||||||
@@ -948,15 +1015,22 @@ async function get_panel_update_data() {
|
|||||||
get_online_berry_driver_version();
|
get_online_berry_driver_version();
|
||||||
check_version_tft_firmware();
|
check_version_tft_firmware();
|
||||||
check_online_display_firmware();
|
check_online_display_firmware();
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function get_panel_update_data: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_current_tasmota_ip_address() {
|
function get_current_tasmota_ip_address() {
|
||||||
|
try {
|
||||||
const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2';
|
const infoObjId = config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO2';
|
||||||
const infoObj = JSON.parse(getState(infoObjId).val);
|
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;
|
return infoObj.Info2.IPAddress;
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function get_current_tasmota_ip_address: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_online_tasmota_firmware_version() {
|
function get_online_tasmota_firmware_version() {
|
||||||
@@ -1222,15 +1296,16 @@ on({ id: config.panelRecvTopic }, function (obj) {
|
|||||||
var split = json.CustomRecv.split(',');
|
var split = json.CustomRecv.split(',');
|
||||||
HandleMessage(split[0], split[1], parseInt(split[2]), split);
|
HandleMessage(split[0], split[1], parseInt(split[2]), split);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.warn(err.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.warn('Trigger panelRecTopic: ' + err.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function SendToPanel(val: Payload | Payload[]): void {
|
function SendToPanel(val: Payload | Payload[]): void {
|
||||||
|
try {
|
||||||
if (Array.isArray(val)) {
|
if (Array.isArray(val)) {
|
||||||
val.forEach(function (id, i) {
|
val.forEach(function (id, i) {
|
||||||
setState(config.panelSendTopic, id.payload);
|
setState(config.panelSendTopic, id.payload);
|
||||||
@@ -1239,18 +1314,26 @@ function SendToPanel(val: Payload | Payload[]): void {
|
|||||||
} else {
|
} else {
|
||||||
setState(config.panelSendTopic, val.payload);
|
setState(config.panelSendTopic, val.payload);
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function SendToPanel: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
on({ id: NSPanel_Alarm_Path + 'Alarm.AlarmState', change: 'ne' }, async (obj) => {
|
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 ((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) {
|
if (NSPanel_Path == getState(NSPanel_Alarm_Path + 'Alarm.PANEL').val) {
|
||||||
GeneratePage(activePage);
|
GeneratePage(activePage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('Trigger AlarmState: ' + err.message);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function HandleMessage(typ: string, method: string, page: number, words: Array<string>): void {
|
function HandleMessage(typ: string, method: string, page: number, words: Array<string>): void {
|
||||||
|
try {
|
||||||
if (typ == 'event') {
|
if (typ == 'event') {
|
||||||
switch (method) {
|
switch (method) {
|
||||||
case 'startup':
|
case 'startup':
|
||||||
@@ -1285,9 +1368,14 @@ function HandleMessage(typ: string, method: string, page: number, words: Array<s
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function HandleMessage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function findPageItem(searching: String): PageItem {
|
function findPageItem(searching: String): PageItem {
|
||||||
|
try {
|
||||||
|
|
||||||
let pageItem = activePage.items.find(e => e.id === searching);
|
let pageItem = activePage.items.find(e => e.id === searching);
|
||||||
|
|
||||||
if (pageItem !== undefined) {
|
if (pageItem !== undefined) {
|
||||||
@@ -1303,9 +1391,13 @@ function findPageItem(searching: String): PageItem {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return pageItem;
|
return pageItem;
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function findPageItem: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GeneratePage(page: Page): void {
|
function GeneratePage(page: Page): void {
|
||||||
|
try {
|
||||||
activePage = page;
|
activePage = page;
|
||||||
switch (page.type) {
|
switch (page.type) {
|
||||||
case 'cardEntities':
|
case 'cardEntities':
|
||||||
@@ -1330,9 +1422,13 @@ function GeneratePage(page: Page): void {
|
|||||||
SendToPanel(GeneratePowerPage(<PagePower>page));
|
SendToPanel(GeneratePowerPage(<PagePower>page));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GeneratePage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function HandleHardwareButton(method: string): void {
|
function HandleHardwareButton(method: string): void {
|
||||||
|
try {
|
||||||
let page: (PageThermo | PageMedia | PageAlarm | PageEntities | PageGrid | PageQR | PagePower);
|
let page: (PageThermo | PageMedia | PageAlarm | PageEntities | PageGrid | PageQR | PagePower);
|
||||||
if (config.button1Page !== null && method == 'button1') {
|
if (config.button1Page !== null && method == 'button1') {
|
||||||
page = config.button1Page;
|
page = config.button1Page;
|
||||||
@@ -1345,46 +1441,65 @@ function HandleHardwareButton(method: string): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
GeneratePage(page);
|
GeneratePage(page);
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function HandleHardwareButton: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function HandleStartupProcess(): void {
|
function HandleStartupProcess(): void {
|
||||||
SendDate();
|
SendDate();
|
||||||
SendTime();
|
SendTime();
|
||||||
SendToPanel({ payload: 'timeout~' + config.timeoutScreensaver });
|
SendToPanel({ payload: 'timeout~' + config.timeoutScreensaver });
|
||||||
//SendToPanel({ payload: 'dimmode~' + config.dimmode + '~' + config.active });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function SendDate(): void {
|
function SendDate(): void {
|
||||||
|
try {
|
||||||
const date = new Date();
|
const date = new Date();
|
||||||
const options: any = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
|
const options: any = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
|
||||||
const _SendDate = date.toLocaleDateString(config.locale, options);
|
const _SendDate = date.toLocaleDateString(config.locale, options);
|
||||||
|
|
||||||
SendToPanel(<Payload>{ payload: 'date~' + _SendDate });
|
SendToPanel(<Payload>{ payload: 'date~' + _SendDate });
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function SendDate: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function SendTime(): void {
|
function SendTime(): void {
|
||||||
|
try {
|
||||||
const d = new Date();
|
const d = new Date();
|
||||||
const hr = (d.getHours() < 10 ? '0' : '') + d.getHours();
|
const hr = (d.getHours() < 10 ? '0' : '') + d.getHours();
|
||||||
const min = (d.getMinutes() < 10 ? '0' : '') + d.getMinutes();
|
const min = (d.getMinutes() < 10 ? '0' : '') + d.getMinutes();
|
||||||
|
|
||||||
SendToPanel(<Payload>{ payload: 'time~' + hr + ':' + min });
|
SendToPanel(<Payload>{ payload: 'time~' + hr + ':' + min });
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function SendTime: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GenerateEntitiesPage(page: PageEntities): Payload[] {
|
function GenerateEntitiesPage(page: PageEntities): Payload[] {
|
||||||
|
try {
|
||||||
var out_msgs: Array<Payload> = [];
|
var out_msgs: Array<Payload> = [];
|
||||||
out_msgs = [{ payload: 'pageType~cardEntities' }]
|
out_msgs = [{ payload: 'pageType~cardEntities' }]
|
||||||
out_msgs.push({ payload: GeneratePageElements(page) });
|
out_msgs.push({ payload: GeneratePageElements(page) });
|
||||||
return out_msgs
|
return out_msgs
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GenerateEntitiesPage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GenerateGridPage(page: PageGrid): Payload[] {
|
function GenerateGridPage(page: PageGrid): Payload[] {
|
||||||
|
try {
|
||||||
var out_msgs: Array<Payload> = [];
|
var out_msgs: Array<Payload> = [];
|
||||||
out_msgs = [{ payload: 'pageType~cardGrid' }]
|
out_msgs = [{ payload: 'pageType~cardGrid' }]
|
||||||
out_msgs.push({ payload: GeneratePageElements(page) });
|
out_msgs.push({ payload: GeneratePageElements(page) });
|
||||||
return out_msgs
|
return out_msgs
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GenerateGridPage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GeneratePageElements(page: Page): string {
|
function GeneratePageElements(page: Page): string {
|
||||||
|
try {
|
||||||
activePage = page;
|
activePage = page;
|
||||||
let maxItems = 0;
|
let maxItems = 0;
|
||||||
switch (page.type) {
|
switch (page.type) {
|
||||||
@@ -1401,7 +1516,11 @@ function GeneratePageElements(page: Page): string {
|
|||||||
maxItems = 1;
|
maxItems = 1;
|
||||||
break;
|
break;
|
||||||
case 'cardEntities':
|
case 'cardEntities':
|
||||||
|
if (getState(NSPanel_Path + 'NSPanel_Version').val == 'eu') {
|
||||||
maxItems = 4;
|
maxItems = 4;
|
||||||
|
} else {
|
||||||
|
maxItems = 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'cardGrid':
|
case 'cardGrid':
|
||||||
maxItems = 6;
|
maxItems = 6;
|
||||||
@@ -1416,9 +1535,13 @@ function GeneratePageElements(page: Page): string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pageData;
|
return pageData;
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GeneratePageElements: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = false): string {
|
function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = false): string {
|
||||||
|
try {
|
||||||
var iconId = '0';
|
var iconId = '0';
|
||||||
if (pageItem.id == 'delete') {
|
if (pageItem.id == 'delete') {
|
||||||
return '~delete~~~~~';
|
return '~delete~~~~~';
|
||||||
@@ -1490,6 +1613,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean =
|
|||||||
iconColor = GetIconColor(pageItem, existsState(pageItem.id + '.DIMMER') ? 100 - getState(pageItem.id + '.DIMMER').val : true, useColors);
|
iconColor = GetIconColor(pageItem, existsState(pageItem.id + '.DIMMER') ? 100 - getState(pageItem.id + '.DIMMER').val : true, useColors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pageItem.interpolateColor != undefined && pageItem.interpolateColor == true) {
|
||||||
if (existsState(pageItem.id + '.HUE')) {
|
if (existsState(pageItem.id + '.HUE')) {
|
||||||
if (getState(pageItem.id + '.HUE').val != null) {
|
if (getState(pageItem.id + '.HUE').val != null) {
|
||||||
let huecolor = hsv2rgb(getState(pageItem.id + '.HUE').val, 1, 1);
|
let huecolor = hsv2rgb(getState(pageItem.id + '.HUE').val, 1, 1);
|
||||||
@@ -1498,6 +1622,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean =
|
|||||||
// RegisterDetailEntityWatcher(id + '.HUE');
|
// RegisterDetailEntityWatcher(id + '.HUE');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return '~' + type + '~' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + optVal;
|
return '~' + type + '~' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + optVal;
|
||||||
|
|
||||||
@@ -1751,6 +1876,9 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return '~delete~~~~~';
|
return '~delete~~~~~';
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function CreateEntity: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function findLocale(controlsObject: string, controlsState: string): string {
|
function findLocale(controlsObject: string, controlsState: string): string {
|
||||||
@@ -1766,13 +1894,15 @@ function findLocale(controlsObject: string, controlsState: string): string {
|
|||||||
} else {
|
} else {
|
||||||
return controlsState;
|
return controlsState;
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.warn('function findLocale: ' + err.message);
|
||||||
return controlsState;
|
return controlsState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetIconColor(pageItem: PageItem, value: (boolean | number), useColors: boolean): number {
|
function GetIconColor(pageItem: PageItem, value: (boolean | number), useColors: boolean): number {
|
||||||
|
try {
|
||||||
// dimmer
|
// dimmer
|
||||||
if ((pageItem.useColor || useColors) && pageItem.interpolateColor && typeof (value) === 'number') {
|
if ((pageItem.useColor || useColors) && pageItem.interpolateColor && typeof (value) === 'number') {
|
||||||
let maxValue = pageItem.maxValueBrightness !== undefined ? pageItem.maxValueBrightness : 100;
|
let maxValue = pageItem.maxValueBrightness !== undefined ? pageItem.maxValueBrightness : 100;
|
||||||
@@ -1796,10 +1926,13 @@ function GetIconColor(pageItem: PageItem, value: (boolean | number), useColors:
|
|||||||
}
|
}
|
||||||
|
|
||||||
return rgb_dec565(pageItem.offColor !== undefined ? pageItem.offColor : config.defaultOffColor);
|
return rgb_dec565(pageItem.offColor !== undefined ? pageItem.offColor : config.defaultOffColor);
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GetIconColor: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function RegisterEntityWatcher(id: string): void {
|
function RegisterEntityWatcher(id: string): void {
|
||||||
|
try {
|
||||||
if (subscriptions.hasOwnProperty(id)) {
|
if (subscriptions.hasOwnProperty(id)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1815,9 +1948,13 @@ function RegisterEntityWatcher(id: string): void {
|
|||||||
SendToPanel({ payload: GeneratePageElements(activePage) });
|
SendToPanel({ payload: GeneratePageElements(activePage) });
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function RegisterEntityWatcher: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function RegisterDetailEntityWatcher(id: string, pageItem: PageItem, type: string): void {
|
function RegisterDetailEntityWatcher(id: string, pageItem: PageItem, type: string): void {
|
||||||
|
try {
|
||||||
if (subscriptions.hasOwnProperty(id)) {
|
if (subscriptions.hasOwnProperty(id)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1825,9 +1962,13 @@ function RegisterDetailEntityWatcher(id: string, pageItem: PageItem, type: strin
|
|||||||
subscriptions[id] = (on({ id: id, change: 'any' }, () => {
|
subscriptions[id] = (on({ id: id, change: 'any' }, () => {
|
||||||
SendToPanel(GenerateDetailPage(type, pageItem));
|
SendToPanel(GenerateDetailPage(type, pageItem));
|
||||||
}))
|
}))
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function RegisterDetailEntityWatcher: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetUnitOfMeasurement(id: string): string {
|
function GetUnitOfMeasurement(id: string): string {
|
||||||
|
try {
|
||||||
if (!existsObject(id))
|
if (!existsObject(id))
|
||||||
return '';
|
return '';
|
||||||
|
|
||||||
@@ -1841,9 +1982,13 @@ function GetUnitOfMeasurement(id: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GetUnitOfMeasurement: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GenerateThermoPage(page: PageThermo): Payload[] {
|
function GenerateThermoPage(page: PageThermo): Payload[] {
|
||||||
|
try {
|
||||||
var id = page.items[0].id
|
var id = page.items[0].id
|
||||||
var out_msgs: Array<Payload> = [];
|
var out_msgs: Array<Payload> = [];
|
||||||
out_msgs.push({ payload: 'pageType~cardThermo' });
|
out_msgs.push({ payload: 'pageType~cardThermo' });
|
||||||
@@ -1956,9 +2101,9 @@ function GenerateThermoPage(page: PageThermo): Payload[] {
|
|||||||
case 'MAINTAIN':
|
case 'MAINTAIN':
|
||||||
if (existsState(id + '.MAINTAIN') && getState(id + '.MAINTAIN').val != null) {
|
if (existsState(id + '.MAINTAIN') && getState(id + '.MAINTAIN').val != null) {
|
||||||
if (getState(id + '.MAINTAIN').val >> .1) {
|
if (getState(id + '.MAINTAIN').val >> .1) {
|
||||||
bt[i - 1] = Icons.GetIcon('fire') + '~60897~1~' + 'MAIN' + '~';
|
bt[i - 1] = Icons.GetIcon('account-wrench') + '~60897~1~' + 'MAIN' + '~';
|
||||||
} else {
|
} else {
|
||||||
bt[i - 1] = Icons.GetIcon('fire') + '~33840~0~' + 'MAIN' + '~';
|
bt[i - 1] = Icons.GetIcon('account-wrench') + '~33840~1~' + 'MAIN' + '~';
|
||||||
}
|
}
|
||||||
} else i--;
|
} else i--;
|
||||||
break;
|
break;
|
||||||
@@ -2093,16 +2238,19 @@ function GenerateThermoPage(page: PageThermo): Payload[] {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(out_msgs);
|
if (Debug) console.log(out_msgs);
|
||||||
return out_msgs
|
return out_msgs
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GenerateThermoPage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GenerateMediaPage(page: PageMedia): Payload[] {
|
function GenerateMediaPage(page: PageMedia): Payload[] {
|
||||||
|
try {
|
||||||
var id = page.items[0].id
|
var id = page.items[0].id
|
||||||
|
|
||||||
var out_msgs: Array<Payload> = [];
|
var out_msgs: Array<Payload> = [];
|
||||||
|
|
||||||
try {
|
|
||||||
out_msgs.push({ payload: 'pageType~cardMedia' });
|
out_msgs.push({ payload: 'pageType~cardMedia' });
|
||||||
if (existsObject(id)) {
|
if (existsObject(id)) {
|
||||||
let name = getState(id + '.ALBUM').val;
|
let name = getState(id + '.ALBUM').val;
|
||||||
@@ -2113,8 +2261,9 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
let v1Adapter = vInstance.split('.');
|
let v1Adapter = vInstance.split('.');
|
||||||
let v2Adapter = v1Adapter[0];
|
let v2Adapter = v1Adapter[0];
|
||||||
|
|
||||||
//Alexa
|
//Alexa + neue Adpter/Player
|
||||||
let media_icon = Icons.GetIcon('playlist-music');
|
let media_icon = Icons.GetIcon('playlist-music');
|
||||||
|
|
||||||
//Spotify-Premium
|
//Spotify-Premium
|
||||||
if (v2Adapter == 'spotify-premium') {
|
if (v2Adapter == 'spotify-premium') {
|
||||||
media_icon = Icons.GetIcon('spotify');
|
media_icon = Icons.GetIcon('spotify');
|
||||||
@@ -2132,8 +2281,16 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
if (nameLenght == 0) {
|
if (nameLenght == 0) {
|
||||||
name = 'Spotify-Premium';
|
name = 'Spotify-Premium';
|
||||||
}
|
}
|
||||||
|
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
||||||
|
if (author.length > 30) {
|
||||||
|
author = getState(id + '.ARTIST').val;
|
||||||
}
|
}
|
||||||
//Spotify-Premium
|
if ((getState(id + '.ARTIST').val).length == 0) {
|
||||||
|
author = 'no music to control';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sonos
|
||||||
if (v2Adapter == 'sonos') {
|
if (v2Adapter == 'sonos') {
|
||||||
media_icon = Icons.GetIcon('music');
|
media_icon = Icons.GetIcon('music');
|
||||||
name = getState(id + '.CONTEXT_DESCRIPTION').val;
|
name = getState(id + '.CONTEXT_DESCRIPTION').val;
|
||||||
@@ -2141,6 +2298,20 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
if (nameLenght == 0) {
|
if (nameLenght == 0) {
|
||||||
name = 'Sonos Player';
|
name = 'Sonos Player';
|
||||||
}
|
}
|
||||||
|
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
||||||
|
if ((getState(id + '.ARTIST').val).length == 0) {
|
||||||
|
author = 'no music to control';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Logitech Squeezebox RPC
|
||||||
|
if (v2Adapter == 'squeezeboxrpc') {
|
||||||
|
media_icon = Icons.GetIcon('dlna');
|
||||||
|
let nameLenght = name.length;
|
||||||
|
if (nameLenght == 0) {
|
||||||
|
name = 'Squeezebox RPC';
|
||||||
|
author = 'no music to control';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Alexa2
|
//Alexa2
|
||||||
@@ -2153,26 +2324,11 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v2Adapter == 'spotify-premium') {
|
|
||||||
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
|
||||||
if (author.length > 30) {
|
|
||||||
author = getState(id + '.ARTIST').val;
|
|
||||||
}
|
|
||||||
if ((getState(id + '.ARTIST').val).length == 0) {
|
|
||||||
author = 'no music to control';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (v2Adapter == 'sonos') {
|
|
||||||
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
|
||||||
if ((getState(id + '.ARTIST').val).length == 0) {
|
|
||||||
author = 'no music to control';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let volume = getState(id + '.VOLUME').val;
|
let volume = getState(id + '.VOLUME').val;
|
||||||
var iconplaypause = Icons.GetIcon('pause'); //pause
|
var iconplaypause = Icons.GetIcon('pause'); //pause
|
||||||
var onoffbutton = 1374;
|
var onoffbutton = 1374;
|
||||||
|
|
||||||
|
//Für alle Player
|
||||||
if (getState(id + '.STATE').val) {
|
if (getState(id + '.STATE').val) {
|
||||||
onoffbutton = 65535;
|
onoffbutton = 65535;
|
||||||
iconplaypause = Icons.GetIcon('pause'); //pause
|
iconplaypause = Icons.GetIcon('pause'); //pause
|
||||||
@@ -2180,6 +2336,14 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
iconplaypause = Icons.GetIcon('play'); //play
|
iconplaypause = Icons.GetIcon('play'); //play
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Ausnahme für squeezebox, da State = Power
|
||||||
|
if (getState(id + '.PAUSE').val === false && v2Adapter == 'squeezeboxrpc') {
|
||||||
|
onoffbutton = 65535;
|
||||||
|
iconplaypause = Icons.GetIcon('pause'); //pause
|
||||||
|
} else {
|
||||||
|
iconplaypause = Icons.GetIcon('play'); //play
|
||||||
|
}
|
||||||
|
|
||||||
if (Debug) console.log(v2Adapter);
|
if (Debug) console.log(v2Adapter);
|
||||||
|
|
||||||
let currentSpeaker = 'kein Speaker gefunden';
|
let currentSpeaker = 'kein Speaker gefunden';
|
||||||
@@ -2190,6 +2354,10 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
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') {
|
} else if (v2Adapter == 'sonos') {
|
||||||
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'root.', page.items[0].mediaDevice, '.members'].join(''))).val;
|
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'root.', page.items[0].mediaDevice, '.members'].join(''))).val;
|
||||||
|
} else if (v2Adapter == 'squeezeboxrpc') {
|
||||||
|
if(existsObject(([page.items[0].adapterPlayerInstance, 'Playername'].join('')))) {
|
||||||
|
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Playername'].join(''))).val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//-------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------
|
||||||
// nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
|
// nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
|
||||||
@@ -2238,6 +2406,7 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function GenerateAlarmPage(page: PageAlarm): Payload[] {
|
function GenerateAlarmPage(page: PageAlarm): Payload[] {
|
||||||
|
try {
|
||||||
activePage = page;
|
activePage = page;
|
||||||
var id = page.items[0].id
|
var id = page.items[0].id
|
||||||
|
|
||||||
@@ -2334,9 +2503,13 @@ function GenerateAlarmPage(page: PageAlarm): Payload[] {
|
|||||||
if (Debug) console.log(out_msgs);
|
if (Debug) console.log(out_msgs);
|
||||||
return out_msgs
|
return out_msgs
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GenerateAlarmPage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GenerateQRPage(page: PageQR): Payload[] {
|
function GenerateQRPage(page: PageQR): Payload[] {
|
||||||
|
try {
|
||||||
activePage = page;
|
activePage = page;
|
||||||
|
|
||||||
var id = page.items[0].id
|
var id = page.items[0].id
|
||||||
@@ -2388,21 +2561,84 @@ function GenerateQRPage(page: PageQR): Payload[] {
|
|||||||
|
|
||||||
//entityUpd,heading,navigation,textQR[,type,internalName,iconId,displayName,optionalValue]x2
|
//entityUpd,heading,navigation,textQR[,type,internalName,iconId,displayName,optionalValue]x2
|
||||||
return out_msgs
|
return out_msgs
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GenerateQRPage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check by Armilar
|
|
||||||
function GeneratePowerPage(page: PagePower): Payload[] {
|
function GeneratePowerPage(page: PagePower): Payload[] {
|
||||||
|
try {
|
||||||
activePage = page;
|
activePage = page;
|
||||||
|
|
||||||
var out_msgs: Array<Payload> = [];
|
if (Debug) console.log(page.items[0].id);
|
||||||
//out_msgs.push({ payload: 'pageType~cardPower' });
|
|
||||||
|
|
||||||
//out_msgs.push({payload: 'entityUpd~test~1|1~6666~A~8888~B~1~t0o~t0u~9999~C~2~t1o~t1u~1111~D~3~t2o~t2u~33333~E~-1~t3o~t3u~3333~F~-2~t4o~t4u~4444~G~-3~t5o~t5u'});
|
var demoMode = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
var 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
|
||||||
|
}
|
||||||
|
|
||||||
|
const obj = JSON.parse((getState(page.items[0].id + '.ACTUAL').val));
|
||||||
|
|
||||||
|
var out_msgs: Array<Payload> = [];
|
||||||
|
out_msgs.push({ payload: 'pageType~cardPower' });
|
||||||
|
|
||||||
|
//Demo Data if no pageItem present
|
||||||
|
let array_icon_color = [HMIOff, 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'];
|
||||||
|
|
||||||
|
let arrayColorScale = [colorScale0, colorScale1, colorScale2, colorScale3, colorScale4, colorScale5, colorScale6, colorScale7, colorScale8, colorScale9, colorScale10]
|
||||||
|
|
||||||
|
if (!demoMode) {
|
||||||
|
for (let obji = 0; obji < 6; obji++) {
|
||||||
|
array_icon_color[obji + 1] = arrayColorScale[obj[obji].iconColor];
|
||||||
|
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~
|
||||||
|
power_string = power_string + array_powerspeed[i] + '~'; // speed~
|
||||||
|
power_string = power_string + array_powerstate[i] + '~'; // entity.state~
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
});
|
||||||
|
|
||||||
return out_msgs
|
return out_msgs
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GeneratePowerPage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setIfExists(id: string, value: any, type: string | null = null): boolean {
|
function setIfExists(id: string, value: any, type: string | null = null): boolean {
|
||||||
|
try {
|
||||||
if (type === null) {
|
if (type === null) {
|
||||||
if (existsState(id)) {
|
if (existsState(id)) {
|
||||||
setState(id, value);
|
setState(id, value);
|
||||||
@@ -2417,18 +2653,26 @@ function setIfExists(id: string, value: any, type: string | null = null): boolea
|
|||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function setIfExists: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleState(id: string): boolean {
|
function toggleState(id: string): boolean {
|
||||||
|
try {
|
||||||
const obj = getObject(id);
|
const obj = getObject(id);
|
||||||
if (existsState(id) && obj.common.type !== undefined && obj.common.type === 'boolean') {
|
if (existsState(id) && obj.common.type !== undefined && obj.common.type === 'boolean') {
|
||||||
setIfExists(id, !getState(id).val);
|
setIfExists(id, !getState(id).val);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function toggleState: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function HandleButtonEvent(words): void {
|
function HandleButtonEvent(words): void {
|
||||||
|
try {
|
||||||
var id = words[2]
|
var id = words[2]
|
||||||
var buttonAction = words[3];
|
var buttonAction = words[3];
|
||||||
|
|
||||||
@@ -2478,8 +2722,10 @@ function HandleButtonEvent(words): void {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'bExit':
|
case 'bExit':
|
||||||
if (config.screenSaverDoubleClick) {
|
if (config.screenSaverDoubleClick && words[2] == 'screensaver') {
|
||||||
if (words[4] == 2) {
|
if (words[4] == 2) {
|
||||||
|
setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
|
||||||
|
setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
|
||||||
GeneratePage(config.pages[pageId]);
|
GeneratePage(config.pages[pageId]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -2653,11 +2899,24 @@ function HandleButtonEvent(words): void {
|
|||||||
},3000)
|
},3000)
|
||||||
break;
|
break;
|
||||||
case 'media-pause':
|
case 'media-pause':
|
||||||
|
let pageItemTemp = findPageItem(id);
|
||||||
|
let adaInstanceSplit = pageItemTemp.adapterPlayerInstance.split('.');
|
||||||
|
if (adaInstanceSplit[0] == 'squeezeboxrpc') {
|
||||||
|
let stateVal = getState(pageItemTemp.adapterPlayerInstance + 'state').val
|
||||||
|
if (stateVal == 0) {
|
||||||
|
setState(pageItemTemp.adapterPlayerInstance + 'state', 1)
|
||||||
|
} else if (stateVal == 1) {
|
||||||
|
setState(pageItemTemp.adapterPlayerInstance + 'state', 0)
|
||||||
|
} else if (stateVal == null) {
|
||||||
|
setState(pageItemTemp.adapterPlayerInstance + 'state', 1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if (getState(id + '.STATE').val === true) {
|
if (getState(id + '.STATE').val === true) {
|
||||||
setIfExists(id + '.PAUSE', true);
|
setIfExists(id + '.PAUSE', true);
|
||||||
} else {
|
} else {
|
||||||
setIfExists(id + '.PLAY', true);
|
setIfExists(id + '.PLAY', true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
GeneratePage(activePage);
|
GeneratePage(activePage);
|
||||||
},3000)
|
},3000)
|
||||||
@@ -2701,7 +2960,22 @@ function HandleButtonEvent(words): void {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'media-OnOff':
|
case 'media-OnOff':
|
||||||
|
let pageItemTem = findPageItem(id);
|
||||||
|
let adaInstanceSpli = pageItemTem.adapterPlayerInstance.split('.');
|
||||||
|
if (adaInstanceSpli[0] == 'squeezeboxrpc') {
|
||||||
|
let stateVal = getState(pageItemTem.adapterPlayerInstance + 'Power').val
|
||||||
|
if (stateVal === 0) {
|
||||||
|
setState(pageItemTem.adapterPlayerInstance + 'Power', 1)
|
||||||
|
setIfExists(id + '.STOP', false)
|
||||||
|
setIfExists(id + '.STATE', 1)
|
||||||
|
} else {
|
||||||
|
setState(pageItemTem.adapterPlayerInstance + 'Power', 0)
|
||||||
setIfExists(id + '.STOP', true)
|
setIfExists(id + '.STOP', true)
|
||||||
|
setIfExists(id + '.STATE', 0)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setIfExists(id + '.STOP', true)
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'hvac_action':
|
case 'hvac_action':
|
||||||
if (words[4] == 'BOOT' || words[4] == 'PART' || words[4] == 'AUTT' || words[4] == 'MANT' || words[4] == 'VACT') {
|
if (words[4] == 'BOOT' || words[4] == 'PART' || words[4] == 'AUTT' || words[4] == 'MANT' || words[4] == 'VACT') {
|
||||||
@@ -2842,9 +3116,14 @@ function HandleButtonEvent(words): void {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log('function HandleButtonEvent: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetNavigationString(pageId: number): string {
|
function GetNavigationString(pageId: number): string {
|
||||||
|
try {
|
||||||
|
|
||||||
if (Debug) console.log(pageId);
|
if (Debug) console.log(pageId);
|
||||||
|
|
||||||
if (activePage.subPage)
|
if (activePage.subPage)
|
||||||
@@ -2862,10 +3141,13 @@ function GetNavigationString(pageId: number): string {
|
|||||||
default:
|
default:
|
||||||
return '1|1';
|
return '1|1';
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log('function GetNavigationString: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] {
|
function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] {
|
||||||
|
try {
|
||||||
var out_msgs: Array<Payload> = [];
|
var out_msgs: Array<Payload> = [];
|
||||||
let id = pageItem.id
|
let id = pageItem.id
|
||||||
|
|
||||||
@@ -3241,17 +3523,29 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return out_msgs;
|
return out_msgs;
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
console.log('function GenerateDetailPage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function scale(number: number, inMin: number, inMax: number, outMin: number, outMax: number): number {
|
function scale(number: number, inMin: number, inMax: number, outMin: number, outMax: number): number {
|
||||||
|
try {
|
||||||
return (outMax + outMin) - ((number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin);
|
return (outMax + outMin) - ((number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin);
|
||||||
|
} catch (err) {
|
||||||
|
console.log('function scale: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function UnsubscribeWatcher(): void {
|
function UnsubscribeWatcher(): void {
|
||||||
|
try {
|
||||||
for (const [key, value] of Object.entries(subscriptions)) {
|
for (const [key, value] of Object.entries(subscriptions)) {
|
||||||
unsubscribe(value);
|
unsubscribe(value);
|
||||||
delete subscriptions[key];
|
delete subscriptions[key];
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log('function UnsubscribeWatcher: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function HandleScreensaver(): void {
|
function HandleScreensaver(): void {
|
||||||
@@ -3639,12 +3933,12 @@ function HandleScreensaverUpdate(): void {
|
|||||||
|
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log('HandleScreensaverUpdate' + err.message);
|
console.log('HandleScreensaverUpdate: ' + err.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function HandleScreensaverColors(): void {
|
function HandleScreensaverColors(): void {
|
||||||
|
try {
|
||||||
let vwIcon = [];
|
let vwIcon = [];
|
||||||
if (config.autoWeatherColorScreensaverLayout) {
|
if (config.autoWeatherColorScreensaverLayout) {
|
||||||
vwIcon[0] = vwIconColor[0];
|
vwIcon[0] = vwIconColor[0];
|
||||||
@@ -3694,9 +3988,13 @@ function HandleScreensaverColors(): void {
|
|||||||
//true;
|
//true;
|
||||||
|
|
||||||
SendToPanel(<Payload>{ payload: payloadString });
|
SendToPanel(<Payload>{ payload: payloadString });
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('HandleScreensaverColors: '+ err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetScreenSaverEntityString(configElement: ScreenSaverElement | null): string {
|
function GetScreenSaverEntityString(configElement: ScreenSaverElement | null): string {
|
||||||
|
try {
|
||||||
if (configElement != null && configElement.ScreensaverEntity != null && existsState(configElement.ScreensaverEntity)) {
|
if (configElement != null && configElement.ScreensaverEntity != null && existsState(configElement.ScreensaverEntity)) {
|
||||||
let u1 = getState(configElement.ScreensaverEntity).val;
|
let u1 = getState(configElement.ScreensaverEntity).val;
|
||||||
|
|
||||||
@@ -3705,9 +4003,13 @@ function GetScreenSaverEntityString(configElement: ScreenSaverElement | null): s
|
|||||||
else {
|
else {
|
||||||
return '~~~';
|
return '~~~';
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('GetScreenSaverEntityString: '+ err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetAccuWeatherIcon(icon: number): string {
|
function GetAccuWeatherIcon(icon: number): string {
|
||||||
|
try {
|
||||||
switch (icon) {
|
switch (icon) {
|
||||||
case 24: // Ice
|
case 24: // Ice
|
||||||
case 30: // Hot
|
case 30: // Hot
|
||||||
@@ -3780,10 +4082,13 @@ function GetAccuWeatherIcon(icon: number): string {
|
|||||||
default:
|
default:
|
||||||
return 'alert-circle-outline';
|
return 'alert-circle-outline';
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('GetAccuWeatherIcon: '+ err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetAccuWeatherIconColor(icon: number): number {
|
function GetAccuWeatherIconColor(icon: number): number {
|
||||||
|
try{
|
||||||
switch (icon) {
|
switch (icon) {
|
||||||
case 24: // Ice
|
case 24: // Ice
|
||||||
case 30: // Hot
|
case 30: // Hot
|
||||||
@@ -3856,6 +4161,9 @@ function GetAccuWeatherIconColor(icon: number): number {
|
|||||||
default:
|
default:
|
||||||
return rgb_dec565(White);
|
return rgb_dec565(White);
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('GetAccuWeatherIconColor: '+ err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------Begin Read Internal Sensor Data
|
//------------------Begin Read Internal Sensor Data
|
||||||
|
|||||||
Reference in New Issue
Block a user