diff --git a/ioBroker/NsPanelTs.ts b/ioBroker/NsPanelTs.ts index c2c8cbef..c5c359f1 100644 --- a/ioBroker/NsPanelTs.ts +++ b/ioBroker/NsPanelTs.ts @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------- -TypeScript v3.5.0.5 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Sternmiere/@Britzelpuf -- abgestimmt auf TFT 43 / v3.5.0 / BerryDriver 4 / Tasmota 12.2.0 +TypeScript v3.6.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Sternmiere/@Britzelpuf +- abgestimmt auf TFT 45 / v3.6.0 / BerryDriver 4 / Tasmota 12.2.0 @joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker NsPanelTs.ts (dieses TypeScript in ioBroker) Stable: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/NsPanelTs.ts icon_mapping.ts: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/icon_mapping.ts (TypeScript muss in global liegen) @@ -12,7 +12,6 @@ Icons unter: https://htmlpreview.github.io/?https://github.com/jobr99/Generate-H Achtung Änderung des Sonoff ESP-Temperatursensors !!! Bitte "SetOption146 1" in der Tasmota-Console ausführen !!! ******************************************************************************* - ReleaseNotes: Bugfixes und Erweiterungen: - cardQR (für Gäste WLAN) @@ -69,7 +68,21 @@ ReleaseNotes: - 04.11.2022 - v3.5.0.5 Create Auto-Alias for Service Pages - 07.11.2022 - v3.5.0.5 Create Auto-Alias for Alexa2, Spotify-Premium, Sonos - 08.11.2022 - v3.5.0.5 Create Auto-Alias for Wheather-Forcast (Screensaver Big-Icon) - + - 07.10.2022 - v3.6.0 Upgrade TFT 45 + - 09.11.2022 - v3.6.0 Add new Alias-DeviceTyp cie (control colors with XY) + - 16.11.2022 - v3.6.0 Control Relay 1 + 2 via Datapoints + - 17.11.2022 - v3.6.0 Add Datapoint to Control Screensaver-Dimmode + - 17.11.2022 - v3.6.0 Change to Page after bExit + - 18.11.2022 - v3.6.0 Add cardChart by fumanchi (only on DEV) + - 24.11.2022 - v3.6.0 Add Background Color Switch via DP + - 26.11.2022 - v3.6.0 Add cardMedia Colors + - 26.11.2022 - v3.6.0 Add cardThermostat Popup + + Todo's for 3.6.0.1 + - XX.11.2022 - v3.6.0.1 Add Fan + - XX.11.2022 - v3.6.0.1 Add In_Sel PopUp + - 26.11.2022 - v3.6.0.1 Add cardChart on PROD (implemented but working with v3.6.1 --> next TFT) + ***************************************************************************************************************** * Falls Aliase durch das Skript erstellt werden sollen, muss in der JavaScript Instanz "setObect" gesetzt sein! * ***************************************************************************************************************** @@ -142,7 +155,7 @@ Erforderliche Adapter: 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 + TFT EU STABLE Version : FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v3.6.0.tft --------------------------------------------------------------------------------------- */ let Icons = new IconsSelector(); @@ -150,7 +163,7 @@ let timeoutSlider: any; let manually_Update = false; const autoCreateAlias = true; //Für diese Option muss der Haken in setObjects in deiner javascript.X. Instanz gesetzt sein. -const NSPanel_Path = '0_userdata.0.NSPanel.1.'; +const NSPanel_Path = '0_userdata.0.NSPanel.EMU.'; const NSPanel_Alarm_Path = '0_userdata.0.NSPanel.'; //Neuer Pfad für gemeinsame Nutzung durch mehrere Panels (bei Nutzung der cardAlarm) let AliasPath: string = 'alias.0.' + NSPanel_Path.substring(13, NSPanel_Path.length); @@ -197,6 +210,9 @@ const colorScale10: RGB = { red: 248, green: 105, blue: 107 }; //Screensaver Default Theme Colors const scbackground: RGB = { red: 0, green: 0, blue: 0}; +const scbackgroundInd1: RGB = { red: 255, green: 0, blue: 0}; +const scbackgroundInd2: RGB = { red: 121, green: 222, blue: 121}; +const scbackgroundInd3: RGB = { red: 255, green: 255, blue: 0}; const sctime: RGB = { red: 255, green: 255, blue: 255}; const sctimeAMPM: RGB = { red: 255, green: 255, blue: 255}; const scdate: RGB = { red: 255, green: 255, blue: 255}; @@ -255,6 +271,22 @@ let Test_Licht1: PageEntities = ] }; +//Only DEV --> Test +let ChartDemo: PageChart = +{ + "type": "cardChart", + "heading": "Charts Demo", + "useColor": true, + "subPage": false, + "parent": undefined, + "items": [{ + id: 'alias.0.NSPanel_1.cardChart', + yAxis: 'Gas [kWh]', + yAxisTicks: [2,4,6,8,10,12,14], + onColor: Yellow + }] +}; + let CardPowerExample: PagePower = { "type": "cardPower", @@ -263,7 +295,7 @@ let CardPowerExample: PagePower = "subPage": false, "parent": undefined, "items": [ - { id: "alias.0.NSPanel_1.Power.PowerCard" }, + { id: 'alias.0.NSPanel_1.Power.PowerCard' }, ] }; @@ -382,18 +414,6 @@ let Subpages_1: PageEntities = "items": [{ id: "alias.0.NSPanel_1.Guest_Wifi", hidePassword: true }] }; -let ChartDemo: PageChart = -{ - "type": "cardChart", - "heading": "ChartsDmo", - "useColor": true, - "subPage": false, - "parent": undefined, - "yAxis": "Gas [kWh]", - "yAxisTicks": [2,4,6,8,10,12,14], - "items": [{ id: "0_userdata.0.NSPanel_1.TDSF.gas", onColor: {red:156, green:56, blue:86}}] -}; - let Buero_Seite_2: PageGrid = { "type": "cardGrid", @@ -434,8 +454,8 @@ let Alexa: PageMedia = 'items': [{ id: AliasPath + 'Media.PlayerAlexa', adapterPlayerInstance: 'alexa2.0.', - mediaDevice: 'G0XXXXXXXXXXXXXX', //Hier eigenes Device (Alexa-Seriennummer) auswählen - speakerList: ['Überall','Gartenhaus','Esszimmer','Heimkino','Echo Dot Küche','Echo Spot Buero'], //anpassen an eigene Alexa's + mediaDevice: 'G0XXXXXXXXXXXXXX', + speakerList: ['Überall','Gartenhaus','Esszimmer','Heimkino','Echo Dot Küche','Echo Spot Buero'], autoCreateALias : true }] }; @@ -450,7 +470,7 @@ let Sonos: PageMedia = 'items': [{ id: AliasPath + 'Media.PlayerSonos', adapterPlayerInstance: "sonos.0.", - mediaDevice: "192_168_1_212", //IP der eigenen Sonos anpassen + mediaDevice: "192_168_1_212", speakerList: ['Terrasse'], autoCreateALias : true }] @@ -466,7 +486,10 @@ let SpotifyPremium: PageMedia = "items": [{ id: AliasPath + 'Media.PlayerSpotifyPremium', adapterPlayerInstance: "spotify-premium.0.", - speakerList: ['LENOVO-W11-01','Terrasse','Überall','Gartenhaus','Esszimmer','Heimkino','Echo Dot Küche','Echo Spot Buero'], //anpassen + speakerList: ['LENOVO-W11-01','Terrasse','Überall','Gartenhaus','Esszimmer','Heimkino','Echo Dot Küche','Echo Spot Buero'], + colorMediaIcon: colorSpotify, + colorMediaArtist: Yellow, + colorMediaTitle: Yellow, autoCreateALias : true }] }; @@ -480,7 +503,7 @@ let SqueezeboxRPC: PageMedia = "parent": undefined, "items": [{ id: "alias.0.Media.LMS.SqueezePlay", - adapterPlayerInstance: "squeezeboxrpc.0.Players.SqueezePlay.", //Player anpassen + adapterPlayerInstance: "squeezeboxrpc.0.Players.SqueezePlay.", speakerList: ['SqueezePlay'] }] }; @@ -502,7 +525,18 @@ let Buero_Klimaanlage: PageThermo = "useColor": true, "subPage": false, "parent": undefined, - "items": [{ id: "alias.0.NSPanel_1.TestKlimaanlage", minValue: 50, maxValue: 250}] + "items": [{ + id: "alias.0.NSPanel_1.TestKlimaanlage", + minValue: 50, + maxValue: 250, + popupThermoMode1: ['Auto','0','1','2','3'], + popupThermoMode2: ['Auto','0','1','2','3','4','5'], + popupThermoMode3: ['Auto','Manual','Boost',], + popUpThermoName: ["Schwenk-Modus", 'Speed', 'Temperatur'], + icon: 'fan', + setThermoAlias: ['MODE1','MODE2','MODE3'], + //setThermoDestTemp2: 'ACTUAL2' + }] }; let Buero_Alarm: PageAlarm = @@ -616,8 +650,8 @@ let Service: PageEntities = }; export const config: Config = { - panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT', // anpassen - panelSendTopic: 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend', // anpassen + panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_EMU.tele.RESULT', // anpassen + panelSendTopic: 'mqtt.0.SmartHome.NSPanel_EMU.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} }, @@ -630,19 +664,19 @@ export const config: Config = { 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 --> oder autoCreateAlias auf 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: [ - //SqueezeboxRPC, //Beispiel-Seite Buero_Seite_1, //Beispiel-Seite CardPowerExample, //Beispiel-Seite + //SqueezeboxRPC, //Beispiel-Seite Sonos, //Beispiel-Seite SpotifyPremium, //Beispiel-Seite Alexa, //Beispiel-Seite @@ -656,7 +690,7 @@ export const config: Config = { Subpages_1, //Beispiel-Seite Buero_Themostat, //Beispiel-Seite Buero_Alarm, //Beispiel-Seite - ChartDemo, //Beispiel-Seite + Service //Auto-Alias Service Page ], subPages: [ @@ -677,6 +711,82 @@ const request = require('request'); let useMediaEvents: boolean = false; let timeoutMedia: any; +var bgColorScrSaver: number = 0; + +//switch BackgroundColors for Screensaver Indicators +async function Init_Screensaver_Backckground_Color_Switch() { + if (existsState(NSPanel_Path + 'ScreensaverInfo.bgColorIndicator') == false ) { + await createStateAsync(NSPanel_Path + 'ScreensaverInfo.bgColorIndicator', 0, true, { type: 'number' }); + } +} +Init_Screensaver_Backckground_Color_Switch(); + +on({id: [].concat(String(NSPanel_Path) + 'ScreensaverInfo.bgColorIndicator'), change: "ne"}, async function (obj) { + try { + bgColorScrSaver = obj.state.val; + if (bgColorScrSaver < 4) { + HandleScreensaverUpdate(); + } + } catch (err) { + console.warn(err.message); + } +}); + +//go to Page X after bExit +async function Init_bExit_Page_Change() { + if (existsState(NSPanel_Path + 'ScreensaverInfo.bExitPage') == false ) { + await createStateAsync(NSPanel_Path + 'ScreensaverInfo.bExitPage', null, true, { type: 'number' }); + } +} +Init_bExit_Page_Change(); + +//Dimmode über Trigger über BWM +async function Init_Dimmode_Trigger() { + if (existsState(NSPanel_Path + 'ScreensaverInfo.Trigger_Dimmode') == false ) { + await createStateAsync(NSPanel_Path + 'ScreensaverInfo.Trigger_Dimmode', false, true, { type: 'boolean' }); + } +} +Init_Dimmode_Trigger(); + +on({id: [].concat(String(NSPanel_Path) + 'ScreensaverInfo.Trigger_Dimmode'), change: "ne"}, async function (obj) { + try { + if (obj.state.val) { + SendToPanel({ payload: 'dimmode~' + 100 + '~' + config.active + '~' + rgb_dec565(config.defaultBackgroundColor) }); + } else { + InitDimmode(); + } + } catch (err) { + console.warn(err.message); + } +}); + +//switch Relays 1 + 2 with DP's +async function Init_Relays() { + if (existsState(NSPanel_Path + 'Relay.1') == false || + existsState(NSPanel_Path + 'Relay.2') == false) { + await createStateAsync(NSPanel_Path + 'Relay.1', true, { type: 'boolean' }); + await createStateAsync(NSPanel_Path + 'Relay.2', true, { type: 'boolean' }); + } +} +Init_Relays(); + +on({id: [].concat(String(NSPanel_Path) + 'Relay.1').concat(String(NSPanel_Path) + 'Relay.2'), change: "ne"}, async function (obj) { + try { + let Button = obj.id.split('.'); + require("request")((['http://',get_current_tasmota_ip_address(),'/cm?cmnd=Power',Button[Button.length - 1],' ',(obj.state ? obj.state.val : "")].join(''))).on("error", function (err) {console.error(err.message);}); + } catch (err) { + console.warn(err.message); + } +}); + +on({id: [].concat(config.mrIcon1ScreensaverEntity.ScreensaverEntity).concat(config.mrIcon2ScreensaverEntity.ScreensaverEntity), change: "ne"}, async function (obj) { + if (obj.id.substring(0,4) == 'mqtt') { + let Button = obj.id.split('.'); + if (getState(NSPanel_Path + 'Relay.' + Button[Button.length - 1].substring(5,6)).val != obj.state.val) { + await setStateAsync(NSPanel_Path + 'Relay.' + Button[Button.length - 1].substring(5,6), obj.state.val == 'ON' ? true : false); + } + } +}); // Create atomatically Wheather-Alias, if exists accuweather.0. and is not exists Config-Wheather-Alias async function CreateWeatherAlias () { @@ -1055,7 +1165,7 @@ function get_locales() { async function check_updates() { try { - const desired_display_firmware_version = 43; + const desired_display_firmware_version = 45; const berry_driver_version = 4; if (Debug) { @@ -1504,7 +1614,7 @@ function update_berry_driver_version() { } function update_tft_firmware() { - const tft_version: string = 'v3.5.0'; + const tft_version: string = 'v3.6.0'; const desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-${tft_version}.tft`; try { request({ @@ -1700,7 +1810,7 @@ function GeneratePage(page: Page): void { case 'cardPower': SendToPanel(GeneratePowerPage(page)); break; - case 'cardChart': + case 'cardChart': SendToPanel(GenerateChartPage(page)); break; } @@ -1711,7 +1821,7 @@ function GeneratePage(page: Page): 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 | PageChart); if (config.button1Page !== null && method == 'button1') { page = config.button1Page; pageId = -1; @@ -1796,6 +1906,12 @@ function GeneratePageElements(page: Page): string { case 'cardQR': maxItems = 1; break; + case 'cardPower': + maxItems = 1; + break; + case 'cardChart': + maxItems = 1; + break; case 'cardEntities': if (getState(NSPanel_Path + 'NSPanel_Version').val == 'eu') { maxItems = 4; @@ -1953,6 +2069,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = return '~' + type + '~' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + optVal; + case 'cie': case 'rgbSingle': type = 'light'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('lightbulb'); @@ -2539,26 +2656,37 @@ function GenerateThermoPage(page: PageThermo): Payload[] { } } + let destTemp2 = '' + if (page.items[0].setThermoDestTemp2 != undefined) { + destTemp2 = getState(id + '.' + page.items[0].setThermoDestTemp2).val; + } + + let thermoPopup = 0 + if (page.items[0].popupThermoMode1 != undefined) { + thermoPopup = 1; + } + + let icon_res = bt[0] + bt[1] + bt[2] + bt[3] + bt[4] + bt[5] + bt[6] + bt[7]; out_msgs.push({ payload: 'entityUpd~' - + 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 + + 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 State + + config.temperatureUnit + '~' // iconTemperature dstTempTwoTempMode + + destTemp2 + '~' // dstTempTwoTempMode --> Wenn Wert, dann 2 Temp + + thermoPopup // PopUp + }); } @@ -2840,14 +2968,21 @@ function GenerateMediaPage(page: PageMedia): Payload[] { speakerList = speakerList.substring(0, speakerList.length - 1); //-------------------------------------------------------------------------------------------------------------- + let colMediaIcon = (page.items[0].colorMediaIcon != undefined) ? page.items[0].colorMediaIcon : White; + let colMediaTitle = (page.items[0].colorMediaTitle != undefined) ? page.items[0].colorMediaTitle : White; + let colMediaArtist = (page.items[0].colorMediaArtist != undefined) ? page.items[0].colorMediaArtist : White; + out_msgs.push({ payload: 'entityUpd~' + //entityUpd name + '~' + //heading GetNavigationString(pageId) + '~' + //navigation id + '~' + //internalNameEntiy media_icon + '~' + //icon + rgb_dec565(colMediaIcon) + '~' + //iconColor title + '~' + //title + rgb_dec565(colMediaTitle) + '~' + //titleColor author + '~' + //author + rgb_dec565(colMediaArtist) + '~' + //authorColor volume + '~' + //volume iconplaypause + '~' + //playpauseicon currentSpeaker + '~' + //currentSpeaker @@ -3124,21 +3259,21 @@ function GenerateChartPage(page: PageChart): Payload[] { let out_msgs: Array = []; out_msgs.push({ payload: 'pageType~cardChart' }); - let heading = page.heading !== undefined ? page.heading : "chart..." + let heading = page.heading !== undefined ? page.heading : "Chart..." - let txt = getState(id).val + let txt = getState(id + '.ACTUAL').val + //entityUpd~Chart Demo~1|1~6666~Gas [kWh]~20:40:60:80:100~10~7^2:00~7~6^4:00~6~7^6:00~0~7^8:00~5~1^10:00~1~10^12:00~5~6^14:00~8 out_msgs.push({ - payload: 'entityUpd~' + //entityUpd - heading + '~' + //heading - GetNavigationString(pageId) + '~' + //navigation - rgb_dec565(page.items[0].onColor) + '~' + //color - page.yAxis + '~' + - page.yAxisTicks.join(':') + '~' + - txt + payload: 'entityUpd~' + //entityUpd + heading + '~' + //heading + GetNavigationString(pageId) + '~' + //navigation + rgb_dec565(page.items[0].onColor) + '~' + //color + page.items[0].yAxis + '~' + + page.items[0].yAxisTicks.join(':') + '~' + + txt }); - //entityUpd,,,,,:[]*[~]* return out_msgs } catch (err) { @@ -3236,10 +3371,15 @@ function HandleButtonEvent(words): void { break; case 'bExit': 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]); + if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) { + GeneratePage(config.pages[getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val]); + } else { + console.log('3') + GeneratePage(config.pages[pageId]); + } } } else { if (Debug) { @@ -3247,7 +3387,11 @@ function HandleButtonEvent(words): void { } setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', ''); setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', ''); - GeneratePage(activePage); + if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) { + GeneratePage(config.pages[getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val]); + } else { + GeneratePage(config.pages[activePage]); + } } break; case 'notifyAction': @@ -3574,6 +3718,22 @@ function HandleButtonEvent(words): void { } break; + + case 'mode-modus1': + let pageItemT1 = findPageItem(id); + console.log(id + '.' + pageItemT1.setThermoAlias[0] + ' - ' + 'mode-modus1' + ' - ' + words[4]); + setIfExists(id + '.' + pageItemT1.setThermoAlias[0], pageItemT1.popupThermoMode1[parseInt(words[4])]); + break; + case 'mode-modus2': + let pageItemT2 = findPageItem(id); + console.log(id + '.' + pageItemT2.setThermoAlias[1] + ' - ' + 'mode-modus2' + ' - ' + words[4]); + setIfExists(id + '.' + pageItemT2.setThermoAlias[1], pageItemT2.popupThermoMode2[parseInt(words[4])]); + break; + case 'mode-modus3': + let pageItemT3 = findPageItem(id); + console.log(id + '.' + pageItemT3.setThermoAlias[2] + ' - ' + 'mode-modus3' + ' - ' + words[4]) + setIfExists(id + '.' + pageItemT3.setThermoAlias[2], pageItemT3.popupThermoMode3[parseInt(words[4])]); + break; case 'number-set': setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4])); break; @@ -3663,11 +3823,12 @@ function GetNavigationString(pageId: number): string { // left navigation arrow | right navigation arrow // X|X // 0 = no arrow - // 1 = right or left navigation arrow - // 2 = up navigation arrow + // 1|1 = right and left navigation arrow + // 2|0 = (right) up navigation arrow + // 2|2 = (right) up navigation arrow | (left) home navigation icon if (activePage.subPage) - return '1|0'; + return '2|2'; switch (pageId) { case 0: @@ -4117,6 +4278,52 @@ function GenerateDetailPage(type: string, pageItem: PageItem): Payload[] { + tilt_pos //{tilt_pos}") }); } + + if (type == 'popupThermo') { + console.log('popupThermo'); + let vIcon = (pageItem.icon != undefined) ? pageItem.icon : 'fan'; + let mode1 = (pageItem.popupThermoMode1 != undefined) ? pageItem.popupThermoMode1.join('?') : ''; + let mode2 = (pageItem.popupThermoMode2 != undefined) ? pageItem.popupThermoMode2.join('?') : ''; + let mode3 = (pageItem.popupThermoMode3 != undefined) ? pageItem.popupThermoMode3.join('?') : ''; + + let payloadParameters1 = '~~~~' + if (pageItem.popupThermoMode1 != undefined) { + RegisterDetailEntityWatcher(pageItem.id + "." + pageItem.setThermoAlias[0], pageItem, type); + payloadParameters1 = pageItem.popUpThermoName[0] + '~' //{heading}~ Mode 1 + + 'modus1' + '~' //{id}~ Mode 1 + + getState(pageItem.id + "." + pageItem.setThermoAlias[0]).val + '~' //{ACTUAL}~ Mode 1 + + mode1 + '~' //{possible values} Mode 1 (1-n) + } + + let payloadParameters2 = '~~~~' + if (pageItem.popupThermoMode2 != undefined) { + RegisterDetailEntityWatcher(pageItem.id + "." + pageItem.setThermoAlias[1], pageItem, type); + payloadParameters2 = pageItem.popUpThermoName[1] + '~' //{heading}~ Mode 2 + + 'modus2' + '~' //{id}~ Mode 2 + + getState(pageItem.id + "." + pageItem.setThermoAlias[1]).val + '~' //{ACTUAL}~ Mode 2 + + mode2 + '~' //{possible values} + } + + let payloadParameters3 = '~~~~' + if (pageItem.popupThermoMode3 != undefined) { + RegisterDetailEntityWatcher(pageItem.id + "." + pageItem.setThermoAlias[2], pageItem, type); + payloadParameters3 = pageItem.popUpThermoName[2] + '~' //{heading}~ Mode 3 + + 'modus3' + '~' //{id}~ Mode 3 + + getState(pageItem.id + "." + pageItem.setThermoAlias[2]).val + '~' //{ACTUAL}~ Mode 3 + + mode3 //{possible values} Mode 3 (1-n) + } + + out_msgs.push({ + payload: 'entityUpdateDetail' + '~' //entityUpdateDetail + + id + '~' //{entity_id} + + Icons.GetIcon(vIcon) + '~' //{icon_id}~ + + 11487 + '~' //{icon_color}~ + + payloadParameters1 + + payloadParameters2 + + payloadParameters3 + }); + } + } return out_msgs; @@ -4582,8 +4789,20 @@ function HandleScreensaverColors(): void { } } + let scrSvrBGCol: any; + + if (bgColorScrSaver == 0) { + scrSvrBGCol = rgb_dec565(scbackground); + } else if (bgColorScrSaver == 1) { + scrSvrBGCol = rgb_dec565(scbackgroundInd1); + } else if (bgColorScrSaver == 2) { + scrSvrBGCol = rgb_dec565(scbackgroundInd2); + } else if (bgColorScrSaver == 3) { + scrSvrBGCol = rgb_dec565(scbackgroundInd3); + } + let payloadString = 'color' + '~' + - rgb_dec565(scbackground) + '~' + //background + scrSvrBGCol + '~' + //background rgb_dec565(sctime) + '~' + //time rgb_dec565(sctimeAMPM) + '~' + //timeAMPM~ rgb_dec565(scdate) + '~' + //date~ @@ -4798,7 +5017,7 @@ on({ id: config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESU await setStateAsync(NSPanel_Path + 'Sensor.Time', { val: Tasmota_Sensor.Time, ack: true }); await setStateAsync(NSPanel_Path + 'Sensor.TempUnit', { val: '°' + Tasmota_Sensor.TempUnit, ack: true }); - await setStateAsync(NSPanel_Path + 'Sensor.ANALOG.Temperature', { val: parseFloat(Tasmota_Sensor.ANALOG.Temperature1), ack: true }); + //await setStateAsync(NSPanel_Path + 'Sensor.ANALOG.Temperature', { val: parseFloat(Tasmota_Sensor.ANALOG.Temperature1), ack: true }); await setStateAsync(NSPanel_Path + 'Sensor.ESP32.Temperature', { val: parseFloat(Tasmota_Sensor.ESP32.Temperature), ack: true }); if (autoCreateAlias) { @@ -4965,7 +5184,7 @@ type Page = { items: PageItem[], useColor: boolean, subPage: boolean, - parent: Page, + parent: Page }; interface PageEntities extends Page { @@ -5003,6 +5222,11 @@ interface PagePower extends Page { items: PageItem[], } +interface PageChart extends Page { + type: 'cardChart', + items: PageItem[], +} + type PageItem = { id: string, icon: (string | undefined), @@ -5029,6 +5253,17 @@ type PageItem = { speakerList: (string[] | undefined), hidePassword: (boolean | undefined), autoCreateALias: (boolean | undefined) + colorMediaIcon: (RGB | undefined), + colorMediaArtist: (RGB | undefined), + colorMediaTitle: (RGB | undefined), + popupThermoMode1: (string[] | undefined), + popupThermoMode2: (string[] | undefined), + popupThermoMode3: (string[] | undefined), + popUpThermoName: (string[] | undefined), + setThermoAlias: (string[] | undefined), + setThermoDestTemp2: (string | undefined), + yAxis: (string | undefined), + yAxisTicks: (number[] | undefined), } type DimMode = {