From f0edaa36fbb99bafaefe7f1bd3df730a309c0e4f Mon Sep 17 00:00:00 2001 From: Johannes <29555657+joBr99@users.noreply.github.com> Date: Sun, 20 Aug 2023 15:53:34 +0200 Subject: [PATCH 01/13] Update nspanel-lovelace-ui.py --- apps/nspanel-lovelace-ui/nspanel-lovelace-ui.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/nspanel-lovelace-ui/nspanel-lovelace-ui.py b/apps/nspanel-lovelace-ui/nspanel-lovelace-ui.py index 628142ad..c8489c08 100644 --- a/apps/nspanel-lovelace-ui/nspanel-lovelace-ui.py +++ b/apps/nspanel-lovelace-ui/nspanel-lovelace-ui.py @@ -27,8 +27,8 @@ class NsPanelLovelaceUIManager(hass.Hass): controller = LuiController(cfg, mqttsend.send_mqtt_msg) desired_tasmota_driver_version = 8 - desired_display_firmware_version = 51 - version = "v4.1.1" + desired_display_firmware_version = 52 + version = "v4.2.0" model = cfg.get("model") if model == "us-l": From 7d2503c66b847ff7eeee6798627680a6a5ab912e Mon Sep 17 00:00:00 2001 From: Thomas <101348966+tt-tom17@users.noreply.github.com> Date: Mon, 21 Aug 2023 23:44:23 +0200 Subject: [PATCH 02/13] v4.2.0 - Add new alias state for iconcolor and buttontext for icon for subpages - Add Alias role 'warnings' for icon for subpages --- ioBroker/NsPanelTs.ts | 121 +++++++++++++++---------- ioBroker/NsPanelTs_without_Examples.ts | 119 ++++++++++++++---------- 2 files changed, 145 insertions(+), 95 deletions(-) diff --git a/ioBroker/NsPanelTs.ts b/ioBroker/NsPanelTs.ts index 8ad31a46..3ae3afa4 100644 --- a/ioBroker/NsPanelTs.ts +++ b/ioBroker/NsPanelTs.ts @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------- -TypeScript v4.1.4.4 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @Sternmiere / @Britzelpuf / @ravenS0ne / @TT-Tom +TypeScript v4.2.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @Sternmiere / @Britzelpuf / @ravenS0ne / @TT-Tom - abgestimmt auf TFT 51 / v4.1.4 / BerryDriver 8 / Tasmota 13.0.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 @@ -149,6 +149,7 @@ ReleaseNotes: - 12.08.2023 - v4.1.4.2 Add onStop function() to Schedules - 13.08.2023 - v4.1.4.3 Add InSel to popUpLight - 13.08.2023 - v4.1.4.4 Add Parameter inSel_ChoiceState to InSel to show/hide Focus + - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages *********************************************************************************************************** @@ -478,7 +479,7 @@ let Subpages_1 = 'heading': 'Test Subpages', 'useColor': true, 'items': [ - { navigate: true, id: null, targetPage: 'Abfall', onColor: White, name: 'Abfallkalender'}, + { navigate: true, id: 'alias.0.NSPanel_1.Abfall.event1', targetPage: 'Abfall', name: 'Abfallkalender'}, { navigate: true, id: null, targetPage: 'WLAN', onColor: White, name: 'Gäste WLAN'}, ] }; @@ -3255,6 +3256,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = } let name: string; + let buttonText: string = 'PRESS'; let type: string; // ioBroker @@ -3316,83 +3318,106 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = if (pageItem.navigate) { - if (pageItem.id == null && pageItem.targetPage != undefined){ - let buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; + if (pageItem.id == null && pageItem.targetPage != undefined) { + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; type = 'button'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); iconColor = GetIconColor(pageItem, true, useColors); if (Debug) console.log('CreateEntity statisch Icon Navi ~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + pageItem.name + '~' + buttonText) return '~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + pageItem.name + '~' + buttonText; - } else if (pageItem.id != null && pageItem.targetPage != undefined){ - let buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; + + } else if (pageItem.id != null && pageItem.targetPage != undefined) { + type = 'button'; - + switch (o.common.role) { case 'socket': case 'light': iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'socket' ? Icons.GetIcon('power-socket-de') : Icons.GetIcon('lightbulb'); - iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : o.common.role == 'socket' ? Icons.GetIcon('power-socket-de') : Icons.GetIcon('lightbulb'); - optVal = '0'; + iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : iconId; - if (val === true || val === 'true') { - optVal = '1'; - iconColor = GetIconColor(pageItem, true, useColors); + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + if (existsState(pageItem.id + '.COLORDEC')) { + iconColor = getState(pageItem.id + '.COLORDEC').val; } else { - iconColor = GetIconColor(pageItem, false, useColors); - if (pageItem.icon !== undefined) { - if (pageItem.icon2 !== undefined) { - iconId = iconId2; - } - } - } - break; - case 'blind': - iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('window-open'); - iconColor = GetIconColor(pageItem, existsState(pageItem.id + '.ACTUAL') ? getState(pageItem.id + '.ACTUAL').val : true, useColors); - break; - case 'door': - case 'window': - 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'); + if (val === true || val === 'true') { iconColor = GetIconColor(pageItem, false, useColors); } else { - iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'door' ? Icons.GetIcon('door-closed') : Icons.GetIcon('window-closed-variant'); iconColor = GetIconColor(pageItem, true, useColors); - } - } + }; + }; + if (val === true || val === 'true') { iconId = iconId2; }; break; + + case 'blind': + iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('window-open'); + iconColor = existsState(pageItem.id + '.COLORDEC') ? getState(pageItem.id + '.COLORDEC').val : GetIconColor(pageItem, existsState(pageItem.id + '.ACTUAL') ? getState(pageItem.id + '.ACTUAL').val : true, useColors); + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + break; + + case 'door': + case 'window': + iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'door' ? Icons.GetIcon('door-open') : Icons.GetIcon('window-open-variant'); + iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : o.common.role == 'door' ? Icons.GetIcon('door-closed') : Icons.GetIcon('window-closed-variant'); + + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + if (existsState(pageItem.id + '.COLORDEC')) { + iconColor = getState(pageItem.id + '.COLORDEC').val; + } else { + if (val === true || val === 'true') { + iconColor = GetIconColor(pageItem, false, useColors); + } else { + iconColor = GetIconColor(pageItem, true, useColors); + }; + }; + if (val === true || val === 'true') { iconId = iconId2; } + break; + case 'info': iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); - iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : Icons.GetIcon('gesture-tap-button'); - iconColor = GetIconColor(pageItem, true, useColors); - if (val === true || val === 'true') { - iconColor = GetIconColor(pageItem, true, useColors); + iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : iconId; + + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + if (existsState(pageItem.id + '.COLORDEC')) { + iconColor = getState(pageItem.id + '.COLORDEC').val; } else { - iconColor = GetIconColor(pageItem, false, useColors); - if (pageItem.icon !== undefined) { - if (pageItem.icon2 !== undefined) { - iconId = iconId2; - } - } + if (val === true || val === 'true') { + iconColor = GetIconColor(pageItem, false, useColors); + } else { + iconColor = GetIconColor(pageItem, true, useColors); + }; }; + if (val === true || val === 'true') { iconId = iconId2; } break; + + case 'warning': + iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); + iconColor = pageItem.onColor !== undefined ? GetIconColor(pageItem, true, useColors) : getState(pageItem.id + '.LEVEL').val; + name = pageItem.name !== undefined ? pageItem.name : getState(pageItem.id + '.INFO').val; + break; + default: - return '~delete~~~~~'; + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + iconColor = pageItem.onColor !== undefined ? GetIconColor(pageItem, true, useColors) : existsState(pageItem.id + '.COLORDEC') ? getState(pageItem.id + '.COLORDEC').val : 65535; + iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); + break; + // return '~delete~~~~~'; } + if (Debug) console.log('CreateEntity Dynamische Icon Navi ~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText) - return '~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText; + return '~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText; + } else { type = 'button'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); iconColor = GetIconColor(pageItem, true, useColors); - let buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; if (Debug) console.log('CreateEntity Standard ~' + type + '~' + 'navigate.' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText) - return '~' + type + '~' + 'navigate.' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText; - } - } + return '~' + type + '~' + 'navigate.' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText; + } + } switch (o.common.role) { case 'socket': diff --git a/ioBroker/NsPanelTs_without_Examples.ts b/ioBroker/NsPanelTs_without_Examples.ts index d7d20346..d1675259 100644 --- a/ioBroker/NsPanelTs_without_Examples.ts +++ b/ioBroker/NsPanelTs_without_Examples.ts @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------- -TypeScript v4.1.4.4 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @Sternmiere / @Britzelpuf / @ravenS0ne / @TT-Tom +TypeScript v4.2.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @Sternmiere / @Britzelpuf / @ravenS0ne / @TT-Tom - abgestimmt auf TFT 51 / v4.1.4 / BerryDriver 8 / Tasmota 13.0.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 @@ -149,6 +149,7 @@ ReleaseNotes: - 12.08.2023 - v4.1.4.2 Add onStop function() to Schedules - 13.08.2023 - v4.1.4.3 Add InSel to popUpLight - 13.08.2023 - v4.1.4.4 Add Parameter inSel_ChoiceState to InSel to show/hide Focus + - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages *********************************************************************************************************** @@ -2756,6 +2757,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = } let name: string; + let buttonText: string = 'PRESS'; let type: string; // ioBroker @@ -2817,83 +2819,106 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = if (pageItem.navigate) { - if (pageItem.id == null && pageItem.targetPage != undefined){ - let buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; + if (pageItem.id == null && pageItem.targetPage != undefined) { + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; type = 'button'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); iconColor = GetIconColor(pageItem, true, useColors); if (Debug) console.log('CreateEntity statisch Icon Navi ~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + pageItem.name + '~' + buttonText) return '~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + pageItem.name + '~' + buttonText; - } else if (pageItem.id != null && pageItem.targetPage != undefined){ - let buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; + + } else if (pageItem.id != null && pageItem.targetPage != undefined) { + type = 'button'; - + switch (o.common.role) { case 'socket': case 'light': iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'socket' ? Icons.GetIcon('power-socket-de') : Icons.GetIcon('lightbulb'); - iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : o.common.role == 'socket' ? Icons.GetIcon('power-socket-de') : Icons.GetIcon('lightbulb'); - optVal = '0'; + iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : iconId; - if (val === true || val === 'true') { - optVal = '1'; - iconColor = GetIconColor(pageItem, true, useColors); + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + if (existsState(pageItem.id + '.COLORDEC')) { + iconColor = getState(pageItem.id + '.COLORDEC').val; } else { - iconColor = GetIconColor(pageItem, false, useColors); - if (pageItem.icon !== undefined) { - if (pageItem.icon2 !== undefined) { - iconId = iconId2; - } - } - } - break; - case 'blind': - iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('window-open'); - iconColor = GetIconColor(pageItem, existsState(pageItem.id + '.ACTUAL') ? getState(pageItem.id + '.ACTUAL').val : true, useColors); - break; - case 'door': - case 'window': - 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'); + if (val === true || val === 'true') { iconColor = GetIconColor(pageItem, false, useColors); } else { - iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'door' ? Icons.GetIcon('door-closed') : Icons.GetIcon('window-closed-variant'); iconColor = GetIconColor(pageItem, true, useColors); - } - } + }; + }; + if (val === true || val === 'true') { iconId = iconId2; }; break; + + case 'blind': + iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('window-open'); + iconColor = existsState(pageItem.id + '.COLORDEC') ? getState(pageItem.id + '.COLORDEC').val : GetIconColor(pageItem, existsState(pageItem.id + '.ACTUAL') ? getState(pageItem.id + '.ACTUAL').val : true, useColors); + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + break; + + case 'door': + case 'window': + iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : o.common.role == 'door' ? Icons.GetIcon('door-open') : Icons.GetIcon('window-open-variant'); + iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : o.common.role == 'door' ? Icons.GetIcon('door-closed') : Icons.GetIcon('window-closed-variant'); + + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + if (existsState(pageItem.id + '.COLORDEC')) { + iconColor = getState(pageItem.id + '.COLORDEC').val; + } else { + if (val === true || val === 'true') { + iconColor = GetIconColor(pageItem, false, useColors); + } else { + iconColor = GetIconColor(pageItem, true, useColors); + }; + }; + if (val === true || val === 'true') { iconId = iconId2; } + break; + case 'info': iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); - iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : Icons.GetIcon('gesture-tap-button'); - iconColor = GetIconColor(pageItem, true, useColors); - if (val === true || val === 'true') { - iconColor = GetIconColor(pageItem, true, useColors); + iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : iconId; + + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + if (existsState(pageItem.id + '.COLORDEC')) { + iconColor = getState(pageItem.id + '.COLORDEC').val; } else { - iconColor = GetIconColor(pageItem, false, useColors); - if (pageItem.icon !== undefined) { - if (pageItem.icon2 !== undefined) { - iconId = iconId2; - } - } + if (val === true || val === 'true') { + iconColor = GetIconColor(pageItem, false, useColors); + } else { + iconColor = GetIconColor(pageItem, true, useColors); + }; }; + if (val === true || val === 'true') { iconId = iconId2; } break; + + case 'warning': + iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); + iconColor = pageItem.onColor !== undefined ? GetIconColor(pageItem, true, useColors) : getState(pageItem.id + '.LEVEL').val; + name = pageItem.name !== undefined ? pageItem.name : getState(pageItem.id + '.INFO').val; + break; + default: - return '~delete~~~~~'; + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; + iconColor = pageItem.onColor !== undefined ? GetIconColor(pageItem, true, useColors) : existsState(pageItem.id + '.COLORDEC') ? getState(pageItem.id + '.COLORDEC').val : 65535; + iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); + break; + // return '~delete~~~~~'; } + if (Debug) console.log('CreateEntity Dynamische Icon Navi ~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText) - return '~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText; + return '~' + type + '~' + 'navigate.' + pageItem.targetPage + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText; + } else { type = 'button'; iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); iconColor = GetIconColor(pageItem, true, useColors); - let buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; + buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : 'PRESS'; if (Debug) console.log('CreateEntity Standard ~' + type + '~' + 'navigate.' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText) - return '~' + type + '~' + 'navigate.' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText; - } - } + return '~' + type + '~' + 'navigate.' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + buttonText; + } + } switch (o.common.role) { case 'socket': From fe44b008afae102915f87557d632dad5474fc66e Mon Sep 17 00:00:00 2001 From: Armilar <102996011+Armilar@users.noreply.github.com> Date: Tue, 22 Aug 2023 09:02:40 +0200 Subject: [PATCH 03/13] v4.2.0 * Update 52 / 4.2.0 * Add new alias state for iconcolor and buttontext for icon for subpages * Add Alias role 'warnings' for icon for subpages --- ioBroker/NsPanelTs.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ioBroker/NsPanelTs.ts b/ioBroker/NsPanelTs.ts index 3ae3afa4..611866f7 100644 --- a/ioBroker/NsPanelTs.ts +++ b/ioBroker/NsPanelTs.ts @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------- -TypeScript v4.2.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @Sternmiere / @Britzelpuf / @ravenS0ne / @TT-Tom -- abgestimmt auf TFT 51 / v4.1.4 / BerryDriver 8 / Tasmota 13.0.0 +TypeScript v4.2.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne +- abgestimmt auf TFT 52 / v4.2.0 / BerryDriver 8 / Tasmota 13.1.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) @@ -149,6 +149,7 @@ ReleaseNotes: - 12.08.2023 - v4.1.4.2 Add onStop function() to Schedules - 13.08.2023 - v4.1.4.3 Add InSel to popUpLight - 13.08.2023 - v4.1.4.4 Add Parameter inSel_ChoiceState to InSel to show/hide Focus + - 12.08.2023 - v4.2.0 Upgrade TFT 52 / 4.2.0 - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages @@ -240,7 +241,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-v4.1.4.tft + TFT EU STABLE Version : FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v4.2.0.tft --------------------------------------------------------------------------------------- */ @@ -1341,8 +1342,8 @@ export const config = { const request = require('request'); //Desired Firmware -const tft_version: string = 'v4.1.4'; -const desired_display_firmware_version = 51; +const tft_version: string = 'v4.2.0'; +const desired_display_firmware_version = 52; const berry_driver_version = 8; const tasmotaOtaUrl: string = 'http://ota.tasmota.com/tasmota32/release/'; From 040119963a7d59dd7ab771b5a242036892f0339f Mon Sep 17 00:00:00 2001 From: Armilar <102996011+Armilar@users.noreply.github.com> Date: Tue, 22 Aug 2023 09:07:00 +0200 Subject: [PATCH 04/13] v4.2.0 * Update 52 / 4.2.0 * Add new alias state for iconcolor and buttontext for icon for subpages * Add Alias role 'warnings' for icon for subpages --- ioBroker/NsPanelTs_without_Examples.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ioBroker/NsPanelTs_without_Examples.ts b/ioBroker/NsPanelTs_without_Examples.ts index d1675259..bd18285f 100644 --- a/ioBroker/NsPanelTs_without_Examples.ts +++ b/ioBroker/NsPanelTs_without_Examples.ts @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------- -TypeScript v4.2.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @Sternmiere / @Britzelpuf / @ravenS0ne / @TT-Tom -- abgestimmt auf TFT 51 / v4.1.4 / BerryDriver 8 / Tasmota 13.0.0 +TypeScript v4.2.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne +- abgestimmt auf TFT 52 / v4.2.0 / BerryDriver 8 / Tasmota 13.1.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) @@ -149,6 +149,7 @@ ReleaseNotes: - 12.08.2023 - v4.1.4.2 Add onStop function() to Schedules - 13.08.2023 - v4.1.4.3 Add InSel to popUpLight - 13.08.2023 - v4.1.4.4 Add Parameter inSel_ChoiceState to InSel to show/hide Focus + - 21.08.2023 - v4.2.0 Upgrade TFT 52 / 4.2.0 - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages @@ -240,7 +241,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-v4.1.4.tft + TFT EU STABLE Version : FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v4.2.0.tft --------------------------------------------------------------------------------------- */ @@ -842,8 +843,8 @@ export const config = { const request = require('request'); //Desired Firmware -const tft_version: string = 'v4.1.4'; -const desired_display_firmware_version = 51; +const tft_version: string = 'v4.2.0'; +const desired_display_firmware_version = 52; const berry_driver_version = 8; const tasmotaOtaUrl: string = 'http://ota.tasmota.com/tasmota32/release/'; From b3b24d4b8d724ec822b38139deb71f59e8178321 Mon Sep 17 00:00:00 2001 From: Armilar <102996011+Armilar@users.noreply.github.com> Date: Tue, 22 Aug 2023 15:19:21 +0200 Subject: [PATCH 05/13] v4.2.0.1 - Update NsPanelTs.ts * v4.2.0 Upgrade TFT 52 / 4.2.0 * v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages * v4.2.0.1 Add iconArray to Alias "Klimaanlage" (airCondition) --- ioBroker/NsPanelTs.ts | 152 ++++++++++++++++++++++++++++++------------ 1 file changed, 109 insertions(+), 43 deletions(-) diff --git a/ioBroker/NsPanelTs.ts b/ioBroker/NsPanelTs.ts index 611866f7..007b3e36 100644 --- a/ioBroker/NsPanelTs.ts +++ b/ioBroker/NsPanelTs.ts @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------- -TypeScript v4.2.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne +TypeScript v4.2.0.1 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne - abgestimmt auf TFT 52 / v4.2.0 / BerryDriver 8 / Tasmota 13.1.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 @@ -149,9 +149,9 @@ ReleaseNotes: - 12.08.2023 - v4.1.4.2 Add onStop function() to Schedules - 13.08.2023 - v4.1.4.3 Add InSel to popUpLight - 13.08.2023 - v4.1.4.4 Add Parameter inSel_ChoiceState to InSel to show/hide Focus - - 12.08.2023 - v4.2.0 Upgrade TFT 52 / 4.2.0 + - 21.08.2023 - v4.2.0 Upgrade TFT 52 / 4.2.0 - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages - + - 22.08.2023 - v4.2.0.1 Add iconArray to Alias "Klimaanlage" (airCondition) *********************************************************************************************************** * Für die Erstellung der Aliase durch das Skript, muss in der JavaScript Instanz "setObect" gesetzt sein! * @@ -685,6 +685,7 @@ let Buero_Klimaanlage = minValue: 50, maxValue: 250, stepValue: 5, + iconArray: ['power-standby','air-conditioner','snowflake','fire','alpha-e-circle-outline','fan','water-percent','swap-vertical-bold'], popupThermoMode1: ['Auto','0','1','2','3'], popupThermoMode2: ['Auto','0','1','2','3','4','5'], popupThermoMode3: ['Auto','Manual','Boost',], @@ -695,6 +696,21 @@ let Buero_Klimaanlage = }] }; +let Pool_Waermepumpe = +{ + 'type': 'cardThermo', + 'heading': 'Pool Wärmepumpe', + 'useColor': true, + 'items': [{ + id: 'alias.0.NSPanel_1.Pool_Waermepumpe', + minValue: 100, + maxValue: 300, + stepValue: 5, + iconArray: ['power-standby','alpha-a-circle-outline','snowflake','fire'], + //iconArray: ['power-standby','air-conditioner','snowflake','fire','alpha-e-circle-outline','fan','water-percent','swap-vertical-bold'], + }] +}; + let Buero_Alarm = { 'type': 'cardAlarm', @@ -3346,9 +3362,9 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = iconColor = GetIconColor(pageItem, false, useColors); } else { iconColor = GetIconColor(pageItem, true, useColors); - }; - }; - if (val === true || val === 'true') { iconId = iconId2; }; + } + } + if (val === true || val === 'true') { iconId = iconId2 }; break; case 'blind': @@ -3370,9 +3386,9 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = iconColor = GetIconColor(pageItem, false, useColors); } else { iconColor = GetIconColor(pageItem, true, useColors); - }; - }; - if (val === true || val === 'true') { iconId = iconId2; } + } + } + if (val === true || val === 'true') { iconId = iconId2 }; break; case 'info': @@ -3387,9 +3403,9 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = iconColor = GetIconColor(pageItem, false, useColors); } else { iconColor = GetIconColor(pageItem, true, useColors); - }; - }; - if (val === true || val === 'true') { iconId = iconId2; } + } + } + if (val === true || val === 'true') { iconId = iconId2 }; break; case 'warning': @@ -3986,7 +4002,7 @@ function GenerateThermoPage(page: PageThermo): Payload[] { let id = page.items[0].id let out_msgs: Array = []; out_msgs.push({ payload: 'pageType~cardThermo' }); - + // ioBroker if (existsObject(id)) { let o = getObject(id); @@ -4023,6 +4039,9 @@ function GenerateThermoPage(page: PageThermo): Payload[] { //Attribute hinzufügen, wenn im Alias definiert let i_list = Array.prototype.slice.apply($('[state.id="' + id + '.*"]')); let bt = ['~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~']; + + let tempIcon: string = ''; + if ((i_list.length - 3) != 0) { let i = 0; @@ -4176,47 +4195,78 @@ function GenerateThermoPage(page: PageThermo): Payload[] { if(stateKeyNumber == Mode) { statusStr = stateName.replace('_', ' '); } + switch(stateName) { case 'AUTO': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('air-conditioner') + '~1024~1~' + 'AUTO' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[1] !== '') { + tempIcon = page.items[0].iconArray[1]; } else { - bt[iconIndex] = Icons.GetIcon('air-conditioner') + '~35921~0~' + 'AUTO' + '~'; + tempIcon = 'air-conditioner'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~1024~1~' + 'AUTO' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'AUTO' + '~'; } break; case 'COOL': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('snowflake') + '~11487~1~' + 'COOL' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[2] !== '') { + tempIcon = page.items[0].iconArray[2]; } else { - bt[iconIndex] = Icons.GetIcon('snowflake') + '~35921~0~' + 'COOL' + '~'; + tempIcon = 'snowflake'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~11487~1~' + 'COOL' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'COOL' + '~'; } break; case 'HEAT': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('fire') + '~64512~1~' + 'HEAT' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[3] !== '') { + tempIcon = page.items[0].iconArray[3]; } else { - bt[iconIndex] = Icons.GetIcon('fire') + '~35921~0~' + 'HEAT' + '~'; + tempIcon = 'fire'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~64512~1~' + 'HEAT' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'HEAT' + '~'; } break; case 'ECO': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('alpha-e-circle-outline') + '~2016~1~' + 'ECO' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[4] !== '') { + tempIcon = page.items[0].iconArray[4]; } else { - bt[iconIndex] = Icons.GetIcon('alpha-e-circle-outline') + '~35921~0~' + 'ECO' + '~'; + tempIcon = 'alpha-e-circle-outline'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'ECO' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'ECO' + '~'; } break; case 'FAN_ONLY': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('fan') + '~11487~1~' + 'FAN_ONLY' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[5] !== '') { + tempIcon = page.items[0].iconArray[5]; } else { - bt[iconIndex] = Icons.GetIcon('fan') + '~35921~0~' + 'FAN_ONLY' + '~'; + tempIcon = 'fan'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~11487~1~' + 'FAN_ONLY' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'FAN_ONLY' + '~'; } break; case 'DRY': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('water-percent') + '~60897~1~' + 'DRY' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[6] !== '') { + tempIcon = page.items[0].iconArray[6]; } else { - bt[iconIndex] = Icons.GetIcon('water-percent') + '~35921~0~' + 'DRY' + '~'; + tempIcon = 'water-percent'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~60897~1~' + 'DRY' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'DRY' + '~'; } break; } @@ -4224,32 +4274,47 @@ function GenerateThermoPage(page: PageThermo): Payload[] { } if (iconIndex <= 7 && existsState(id + '.ECO') && getState(id + '.ECO').val != null) { + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[4] !== '') { + tempIcon = page.items[0].iconArray[4]; + } else { + tempIcon = 'alpha-e-circle-outline'; + } if (getState(id + '.ECO').val && getState(id + '.ECO').val == 1) { - bt[iconIndex] = Icons.GetIcon('alpha-e-circle-outline') + '~2016~1~' + 'ECO' + '~'; + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'ECO' + '~'; statusStr = 'ECO'; } else { - bt[iconIndex] = Icons.GetIcon('alpha-e-circle-outline') + '~35921~0~' + 'ECO' + '~'; + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'ECO' + '~'; } iconIndex++; } if (iconIndex <= 7 && existsState(id + '.SWING') && getState(id + '.SWING').val != null) { - if (getState(id + '.POWER').val && getState(id + '.SWING').val == 1) { //0=ON oder .SWING = true - bt[7] = Icons.GetIcon('swap-vertical-bold') + '~2016~1~' + 'SWING' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[7] !== '') { + tempIcon = page.items[0].iconArray[7]; } else { - bt[7] = Icons.GetIcon('swap-vertical-bold') + '~35921~0~' + 'SWING' + '~'; + tempIcon = 'swap-vertical-bold'; + } + if (getState(id + '.POWER').val && getState(id + '.SWING').val == 1) { //0=ON oder .SWING = true + bt[7] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'SWING' + '~'; + } else { + bt[7] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'SWING' + '~'; } iconIndex++; } // Power Icon zuletzt pruefen, damit der Mode ggf. mit OFF ueberschrieben werden kann if (existsState(id + '.POWER') && getState(id + '.POWER').val != null) { + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[0] !== '') { + tempIcon = page.items[0].iconArray[0]; + } else { + tempIcon = 'power-standby'; + } if (States[Mode] == 'OFF' || !getState(id + '.POWER').val) { - bt[0] = Icons.GetIcon('power-standby') + '~35921~0~' + 'POWER' + '~'; + bt[0] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'POWER' + '~'; statusStr = 'OFF'; } else { - bt[0] = Icons.GetIcon('power-standby') + '~2016~1~' + 'POWER' + '~'; + bt[0] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'POWER' + '~'; } } } @@ -4282,10 +4347,10 @@ function GenerateThermoPage(page: PageThermo): Payload[] { + minTemp + '~' // Thermostat Min-Temperatur + maxTemp + '~' // Thermostat Max-Temperatur + stepTemp + '~' // Schritte für Soll (5°C) - + icon_res // Icons Status + + icon_res // Icons Status + findLocale('thermostat', 'Currently') + '~' // Bezeichner vor Aktueller Raumtemperatur - + findLocale('thermostat', 'State') + '~~' // Bezeichner vor State - + temperatureUnit + '~' // iconTemperature dstTempTwoTempMode + + findLocale('thermostat', 'State') + '~~' // Bezeichner vor State + + temperatureUnit + '~' // iconTemperature dstTempTwoTempMode + destTemp2 + '~' // dstTempTwoTempMode --> Wenn Wert, dann 2 Temp + thermoPopup // PopUp @@ -8337,8 +8402,9 @@ type PageItem = { popupType: (string | undefined), popupOptions: (string[] | undefined), useValue: (boolean | undefined), - monobutton: (boolean | undefined) - inSel_ChoiceState: (boolean | undefined) + monobutton: (boolean | undefined), + inSel_ChoiceState: (boolean | undefined), + iconArray: (string[] | undefined) } type DimMode = { From d2695d993e0876a6db1fd3fa9c48944aeb8a6ea7 Mon Sep 17 00:00:00 2001 From: Armilar <102996011+Armilar@users.noreply.github.com> Date: Tue, 22 Aug 2023 15:19:27 +0200 Subject: [PATCH 06/13] v4.2.0.1 - Update NsPanelTs_without_Examples.ts * v4.2.0 Upgrade TFT 52 / 4.2.0 * v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages * v4.2.0.1 Add iconArray to Alias "Klimaanlage" (airCondition) --- ioBroker/NsPanelTs_without_Examples.ts | 134 +++++++++++++++++-------- 1 file changed, 92 insertions(+), 42 deletions(-) diff --git a/ioBroker/NsPanelTs_without_Examples.ts b/ioBroker/NsPanelTs_without_Examples.ts index bd18285f..54f0378a 100644 --- a/ioBroker/NsPanelTs_without_Examples.ts +++ b/ioBroker/NsPanelTs_without_Examples.ts @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------- -TypeScript v4.2.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne +TypeScript v4.2.0.1 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne - abgestimmt auf TFT 52 / v4.2.0 / BerryDriver 8 / Tasmota 13.1.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 @@ -151,7 +151,7 @@ ReleaseNotes: - 13.08.2023 - v4.1.4.4 Add Parameter inSel_ChoiceState to InSel to show/hide Focus - 21.08.2023 - v4.2.0 Upgrade TFT 52 / 4.2.0 - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages - + - 22.08.2023 - v4.2.0.1 Add iconArray to Alias "Klimaanlage" (airCondition) *********************************************************************************************************** * Für die Erstellung der Aliase durch das Skript, muss in der JavaScript Instanz "setObect" gesetzt sein! * @@ -2847,9 +2847,9 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = iconColor = GetIconColor(pageItem, false, useColors); } else { iconColor = GetIconColor(pageItem, true, useColors); - }; - }; - if (val === true || val === 'true') { iconId = iconId2; }; + } + } + if (val === true || val === 'true') { iconId = iconId2 }; break; case 'blind': @@ -2871,9 +2871,9 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = iconColor = GetIconColor(pageItem, false, useColors); } else { iconColor = GetIconColor(pageItem, true, useColors); - }; - }; - if (val === true || val === 'true') { iconId = iconId2; } + } + } + if (val === true || val === 'true') { iconId = iconId2 } break; case 'info': @@ -2888,9 +2888,9 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = iconColor = GetIconColor(pageItem, false, useColors); } else { iconColor = GetIconColor(pageItem, true, useColors); - }; - }; - if (val === true || val === 'true') { iconId = iconId2; } + } + } + if (val === true || val === 'true') { iconId = iconId2 } break; case 'warning': @@ -3487,7 +3487,7 @@ function GenerateThermoPage(page: PageThermo): Payload[] { let id = page.items[0].id let out_msgs: Array = []; out_msgs.push({ payload: 'pageType~cardThermo' }); - + // ioBroker if (existsObject(id)) { let o = getObject(id); @@ -3524,6 +3524,9 @@ function GenerateThermoPage(page: PageThermo): Payload[] { //Attribute hinzufügen, wenn im Alias definiert let i_list = Array.prototype.slice.apply($('[state.id="' + id + '.*"]')); let bt = ['~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~', '~~~~']; + + let tempIcon: string = ''; + if ((i_list.length - 3) != 0) { let i = 0; @@ -3677,47 +3680,78 @@ function GenerateThermoPage(page: PageThermo): Payload[] { if(stateKeyNumber == Mode) { statusStr = stateName.replace('_', ' '); } + switch(stateName) { case 'AUTO': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('air-conditioner') + '~1024~1~' + 'AUTO' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[1] !== '') { + tempIcon = page.items[0].iconArray[1]; } else { - bt[iconIndex] = Icons.GetIcon('air-conditioner') + '~35921~0~' + 'AUTO' + '~'; + tempIcon = 'air-conditioner'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~1024~1~' + 'AUTO' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'AUTO' + '~'; } break; case 'COOL': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('snowflake') + '~11487~1~' + 'COOL' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[2] !== '') { + tempIcon = page.items[0].iconArray[2]; } else { - bt[iconIndex] = Icons.GetIcon('snowflake') + '~35921~0~' + 'COOL' + '~'; + tempIcon = 'snowflake'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~11487~1~' + 'COOL' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'COOL' + '~'; } break; case 'HEAT': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('fire') + '~64512~1~' + 'HEAT' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[3] !== '') { + tempIcon = page.items[0].iconArray[3]; } else { - bt[iconIndex] = Icons.GetIcon('fire') + '~35921~0~' + 'HEAT' + '~'; + tempIcon = 'fire'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~64512~1~' + 'HEAT' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'HEAT' + '~'; } break; case 'ECO': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('alpha-e-circle-outline') + '~2016~1~' + 'ECO' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[4] !== '') { + tempIcon = page.items[0].iconArray[4]; } else { - bt[iconIndex] = Icons.GetIcon('alpha-e-circle-outline') + '~35921~0~' + 'ECO' + '~'; + tempIcon = 'alpha-e-circle-outline'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'ECO' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'ECO' + '~'; } break; case 'FAN_ONLY': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('fan') + '~11487~1~' + 'FAN_ONLY' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[5] !== '') { + tempIcon = page.items[0].iconArray[5]; } else { - bt[iconIndex] = Icons.GetIcon('fan') + '~35921~0~' + 'FAN_ONLY' + '~'; + tempIcon = 'fan'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~11487~1~' + 'FAN_ONLY' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'FAN_ONLY' + '~'; } break; case 'DRY': - if(stateKeyNumber == Mode) { - bt[iconIndex] = Icons.GetIcon('water-percent') + '~60897~1~' + 'DRY' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[6] !== '') { + tempIcon = page.items[0].iconArray[6]; } else { - bt[iconIndex] = Icons.GetIcon('water-percent') + '~35921~0~' + 'DRY' + '~'; + tempIcon = 'water-percent'; + } + if(stateKeyNumber == Mode) { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~60897~1~' + 'DRY' + '~'; + } else { + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'DRY' + '~'; } break; } @@ -3725,32 +3759,47 @@ function GenerateThermoPage(page: PageThermo): Payload[] { } if (iconIndex <= 7 && existsState(id + '.ECO') && getState(id + '.ECO').val != null) { + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[4] !== '') { + tempIcon = page.items[0].iconArray[4]; + } else { + tempIcon = 'alpha-e-circle-outline'; + } if (getState(id + '.ECO').val && getState(id + '.ECO').val == 1) { - bt[iconIndex] = Icons.GetIcon('alpha-e-circle-outline') + '~2016~1~' + 'ECO' + '~'; + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'ECO' + '~'; statusStr = 'ECO'; } else { - bt[iconIndex] = Icons.GetIcon('alpha-e-circle-outline') + '~35921~0~' + 'ECO' + '~'; + bt[iconIndex] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'ECO' + '~'; } iconIndex++; } if (iconIndex <= 7 && existsState(id + '.SWING') && getState(id + '.SWING').val != null) { - if (getState(id + '.POWER').val && getState(id + '.SWING').val == 1) { //0=ON oder .SWING = true - bt[7] = Icons.GetIcon('swap-vertical-bold') + '~2016~1~' + 'SWING' + '~'; + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[7] !== '') { + tempIcon = page.items[0].iconArray[7]; } else { - bt[7] = Icons.GetIcon('swap-vertical-bold') + '~35921~0~' + 'SWING' + '~'; + tempIcon = 'swap-vertical-bold'; + } + if (getState(id + '.POWER').val && getState(id + '.SWING').val == 1) { //0=ON oder .SWING = true + bt[7] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'SWING' + '~'; + } else { + bt[7] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'SWING' + '~'; } iconIndex++; } // Power Icon zuletzt pruefen, damit der Mode ggf. mit OFF ueberschrieben werden kann if (existsState(id + '.POWER') && getState(id + '.POWER').val != null) { + if (page.items[0].iconArray !== undefined && page.items[0].iconArray[0] !== '') { + tempIcon = page.items[0].iconArray[0]; + } else { + tempIcon = 'power-standby'; + } if (States[Mode] == 'OFF' || !getState(id + '.POWER').val) { - bt[0] = Icons.GetIcon('power-standby') + '~35921~0~' + 'POWER' + '~'; + bt[0] = Icons.GetIcon(tempIcon) + '~35921~0~' + 'POWER' + '~'; statusStr = 'OFF'; } else { - bt[0] = Icons.GetIcon('power-standby') + '~2016~1~' + 'POWER' + '~'; + bt[0] = Icons.GetIcon(tempIcon) + '~2016~1~' + 'POWER' + '~'; } } } @@ -3783,10 +3832,10 @@ function GenerateThermoPage(page: PageThermo): Payload[] { + minTemp + '~' // Thermostat Min-Temperatur + maxTemp + '~' // Thermostat Max-Temperatur + stepTemp + '~' // Schritte für Soll (5°C) - + icon_res // Icons Status + + icon_res // Icons Status + findLocale('thermostat', 'Currently') + '~' // Bezeichner vor Aktueller Raumtemperatur - + findLocale('thermostat', 'State') + '~~' // Bezeichner vor State - + temperatureUnit + '~' // iconTemperature dstTempTwoTempMode + + findLocale('thermostat', 'State') + '~~' // Bezeichner vor State + + temperatureUnit + '~' // iconTemperature dstTempTwoTempMode + destTemp2 + '~' // dstTempTwoTempMode --> Wenn Wert, dann 2 Temp + thermoPopup // PopUp @@ -7838,8 +7887,9 @@ type PageItem = { popupType: (string | undefined), popupOptions: (string[] | undefined), useValue: (boolean | undefined), - monobutton: (boolean | undefined) - inSel_ChoiceState: (boolean | undefined) + monobutton: (boolean | undefined), + inSel_ChoiceState: (boolean | undefined), + iconArray: (string[] | undefined) } type DimMode = { From affb6635794a0669c89b4b63bfc4413f4ee9a91d Mon Sep 17 00:00:00 2001 From: Armilar <102996011+Armilar@users.noreply.github.com> Date: Wed, 23 Aug 2023 12:32:01 +0200 Subject: [PATCH 07/13] v4.2.0.2 - Add cardGrid2 * Add cardGrid2 --- ioBroker/NsPanelTs_without_Examples.ts | 35 +++++++++++++++++++++----- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/ioBroker/NsPanelTs_without_Examples.ts b/ioBroker/NsPanelTs_without_Examples.ts index 54f0378a..a9939717 100644 --- a/ioBroker/NsPanelTs_without_Examples.ts +++ b/ioBroker/NsPanelTs_without_Examples.ts @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------- -TypeScript v4.2.0.1 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne +TypeScript v4.2.0.2 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne - abgestimmt auf TFT 52 / v4.2.0 / BerryDriver 8 / Tasmota 13.1.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 @@ -152,6 +152,7 @@ ReleaseNotes: - 21.08.2023 - v4.2.0 Upgrade TFT 52 / 4.2.0 - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages - 22.08.2023 - v4.2.0.1 Add iconArray to Alias "Klimaanlage" (airCondition) + - 23.08.2023 - v4.2.0.2 Add CardGrid2 with maxItems = 8 *********************************************************************************************************** * Für die Erstellung der Aliase durch das Skript, muss in der JavaScript Instanz "setObect" gesetzt sein! * @@ -169,6 +170,7 @@ Mögliche Seiten-Ansichten: (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 + cardGrid2 Page - 8 horizontal angeordnete Steuerelemente in 2 Reihen a 4 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-Verzeichnis Player angelegt werden cardAlarm Page - Alarmseite mit Zustand und Tastenfeld @@ -2567,6 +2569,9 @@ function GeneratePage(page: Page): void { case 'cardGrid': SendToPanel(GenerateGridPage(page)); break; + case 'cardGrid2': + SendToPanel(GenerateGridPage2(page)); + break; case 'cardMedia': useMediaEvents = true; SendToPanel(GenerateMediaPage(page)); @@ -2697,6 +2702,16 @@ function GenerateGridPage(page: PageGrid): Payload[] { } } +function GenerateGridPage2(page: PageGrid2): Payload[] { + try { + let out_msgs: Array = [{ payload: 'pageType~cardGrid2' }]; + out_msgs.push({ payload: GeneratePageElements(page) }); + return out_msgs; + } catch (err) { + console.warn('error at function GenerateGridPage2: ' + err.message); + } +} + function GeneratePageElements(page: Page): string { try { activePage = page; @@ -2731,6 +2746,9 @@ function GeneratePageElements(page: Page): string { } break; case 'cardGrid': + maxItems = 6; + break; + case 'cardGrid2': maxItems = 8; break; } @@ -2873,7 +2891,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = iconColor = GetIconColor(pageItem, true, useColors); } } - if (val === true || val === 'true') { iconId = iconId2 } + if (val === true || val === 'true') { iconId = iconId2 }; break; case 'info': @@ -2890,7 +2908,7 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = iconColor = GetIconColor(pageItem, true, useColors); } } - if (val === true || val === 'true') { iconId = iconId2 } + if (val === true || val === 'true') { iconId = iconId2 }; break; case 'warning': @@ -7802,6 +7820,11 @@ interface PageGrid extends Page { items: PageItem[], } +interface PageGrid2 extends Page { + type: 'cardGrid2', + items: PageItem[], +} + interface PageThermo extends Page { type: 'cardThermo', items: PageItem[], @@ -7902,7 +7925,7 @@ type DimMode = { type ConfigButtonFunction = { mode: string | null, - page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null), + page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PageGrid2 | PagePower | PageChart | PageUnlock | null), entity: string | null, setValue: string | number | null } @@ -7920,8 +7943,8 @@ type Config = { defaultOnColor: RGB, defaultOffColor: RGB, defaultBackgroundColor: RGB, - pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock )[], - subPages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock)[], + pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PageGrid2 | PagePower | PageChart | PageUnlock )[], + subPages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PageGrid2 | PagePower | PageChart | PageUnlock)[], button1: ConfigButtonFunction, button2: ConfigButtonFunction } From 5a07523a8673c5489c5900d96b43cc9959ada632 Mon Sep 17 00:00:00 2001 From: Armilar <102996011+Armilar@users.noreply.github.com> Date: Wed, 23 Aug 2023 12:32:07 +0200 Subject: [PATCH 08/13] v4.2.0.2 - Add cardGrid2 * Add cardGrid2 --- ioBroker/NsPanelTs.ts | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/ioBroker/NsPanelTs.ts b/ioBroker/NsPanelTs.ts index 007b3e36..29521770 100644 --- a/ioBroker/NsPanelTs.ts +++ b/ioBroker/NsPanelTs.ts @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------- -TypeScript v4.2.0.1 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne +TypeScript v4.2.0.2 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne - abgestimmt auf TFT 52 / v4.2.0 / BerryDriver 8 / Tasmota 13.1.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 @@ -152,6 +152,7 @@ ReleaseNotes: - 21.08.2023 - v4.2.0 Upgrade TFT 52 / 4.2.0 - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages - 22.08.2023 - v4.2.0.1 Add iconArray to Alias "Klimaanlage" (airCondition) + - 23.08.2023 - v4.2.0.2 Add CardGrid2 with maxItems = 8 *********************************************************************************************************** * Für die Erstellung der Aliase durch das Skript, muss in der JavaScript Instanz "setObect" gesetzt sein! * @@ -169,6 +170,7 @@ Mögliche Seiten-Ansichten: (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 + cardGrid2 Page - 8 horizontal angeordnete Steuerelemente in 2 Reihen a 4 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-Verzeichnis Player angelegt werden cardAlarm Page - Alarmseite mit Zustand und Tastenfeld @@ -512,9 +514,9 @@ let Subpages_1 = 'items': [{ id: 'alias.0.NSPanel_1.Guest_Wifi', hidePassword: false }] }; -let Buero_Seite_2 = +let Buero_Seite_2 = { - 'type': 'cardGrid', + 'type': 'cardGrid2', 'heading': 'Büro 2', 'useColor': true, 'items': [ @@ -524,7 +526,7 @@ let Buero_Seite_2 = { id: 'alias.0.NSPanel_1.Luftreiniger', icon: 'power', offColor: MSRed, onColor: MSGreen}, { id: 'alias.0.NSPanel_1.TestBlind', icon: 'projector-screen', onColor: White, name: 'Beamer', secondRow: 'auch Text'}, { id: 'alias.0.NSPanel_1.Kippfenster', useValue: true }, - //PageItem>{ id: 'alias.0.NSPanel_1.Radio.Bob', icon: 'play', onColor: White, name: 'TuneIn'} + { id: 'alias.0.NSPanel_1.Radio.Bob', icon: 'play', onColor: White, name: 'TuneIn'} ] }; @@ -3082,6 +3084,9 @@ function GeneratePage(page: Page): void { case 'cardGrid': SendToPanel(GenerateGridPage(page)); break; + case 'cardGrid2': + SendToPanel(GenerateGridPage2(page)); + break; case 'cardMedia': useMediaEvents = true; SendToPanel(GenerateMediaPage(page)); @@ -3212,6 +3217,16 @@ function GenerateGridPage(page: PageGrid): Payload[] { } } +function GenerateGridPage2(page: PageGrid2): Payload[] { + try { + let out_msgs: Array = [{ payload: 'pageType~cardGrid2' }]; + out_msgs.push({ payload: GeneratePageElements(page) }); + return out_msgs; + } catch (err) { + console.warn('error at function GenerateGridPage2: ' + err.message); + } +} + function GeneratePageElements(page: Page): string { try { activePage = page; @@ -3246,6 +3261,9 @@ function GeneratePageElements(page: Page): string { } break; case 'cardGrid': + maxItems = 6; + break; + case 'cardGrid2': maxItems = 8; break; } @@ -8317,6 +8335,11 @@ interface PageGrid extends Page { items: PageItem[], } +interface PageGrid2 extends Page { + type: 'cardGrid2', + items: PageItem[], +} + interface PageThermo extends Page { type: 'cardThermo', items: PageItem[], @@ -8417,7 +8440,7 @@ type DimMode = { type ConfigButtonFunction = { mode: string | null, - page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null), + page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PageGrid2 | PagePower | PageChart | PageUnlock | null), entity: string | null, setValue: string | number | null } @@ -8435,8 +8458,8 @@ type Config = { defaultOnColor: RGB, defaultOffColor: RGB, defaultBackgroundColor: RGB, - pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock )[], - subPages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock)[], + pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PageGrid2 | PagePower | PageChart | PageUnlock )[], + subPages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PageGrid2 | PagePower | PageChart | PageUnlock)[], button1: ConfigButtonFunction, button2: ConfigButtonFunction } From cf1acdefffce23cb0839178f0a6c2a10fc365461 Mon Sep 17 00:00:00 2001 From: Johannes <29555657+joBr99@users.noreply.github.com> Date: Wed, 23 Aug 2023 18:30:33 +0200 Subject: [PATCH 09/13] Update pages.py #946 --- apps/nspanel-lovelace-ui/luibackend/pages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/nspanel-lovelace-ui/luibackend/pages.py b/apps/nspanel-lovelace-ui/luibackend/pages.py index 774e25e7..5ce8cb88 100644 --- a/apps/nspanel-lovelace-ui/luibackend/pages.py +++ b/apps/nspanel-lovelace-ui/luibackend/pages.py @@ -299,7 +299,7 @@ class LuiPagesGen(object): value = entity.state # limit value to 4 chars on us-p - if self._config.get("model") == "us-p": + if self._config.get("model") == "us-p" and cardType in ["cardGrid", "cardGrid2", "cardEntities"]: value = entity.state[:4] if value[-1] == ".": value = value[:-1] From 11106eb77817d035d6809bf7abd9b09d2a8ad00b Mon Sep 17 00:00:00 2001 From: Johannes <29555657+joBr99@users.noreply.github.com> Date: Wed, 23 Aug 2023 18:34:16 +0200 Subject: [PATCH 10/13] Update pages.py --- apps/nspanel-lovelace-ui/luibackend/pages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/nspanel-lovelace-ui/luibackend/pages.py b/apps/nspanel-lovelace-ui/luibackend/pages.py index 5ce8cb88..4b86e639 100644 --- a/apps/nspanel-lovelace-ui/luibackend/pages.py +++ b/apps/nspanel-lovelace-ui/luibackend/pages.py @@ -299,7 +299,7 @@ class LuiPagesGen(object): value = entity.state # limit value to 4 chars on us-p - if self._config.get("model") == "us-p" and cardType in ["cardGrid", "cardGrid2", "cardEntities"]: + if self._config.get("model") == "us-p" and cardType == "cardEntities": value = entity.state[:4] if value[-1] == ".": value = value[:-1] From 847546893ffe2a1e3081192b0e1ab3b22a1bff57 Mon Sep 17 00:00:00 2001 From: Johannes <29555657+joBr99@users.noreply.github.com> Date: Wed, 23 Aug 2023 18:47:45 +0200 Subject: [PATCH 11/13] Update controller.py --- apps/nspanel-lovelace-ui/luibackend/controller.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/nspanel-lovelace-ui/luibackend/controller.py b/apps/nspanel-lovelace-ui/luibackend/controller.py index da1fc3d1..b9bbdd08 100644 --- a/apps/nspanel-lovelace-ui/luibackend/controller.py +++ b/apps/nspanel-lovelace-ui/luibackend/controller.py @@ -173,8 +173,8 @@ class LuiController(object): self._pages_gen.render_card(self._current_card, send_page_type=False) # send detail page update, just in case if self._current_card.cardType in ["cardGrid", "cardGrid2", "cardEntities", "cardMedia"]: - #if entity.startswith("light"): - # self._pages_gen.generate_light_detail_page(res_uuid) + if entity.startswith("light"): + self._pages_gen.generate_light_detail_page(res_uuid) if entity.startswith("cover"): self._pages_gen.generate_shutter_detail_page(entity) if entity.startswith("fan"): From a44573cfc94fb853f7fee9666370625679674a90 Mon Sep 17 00:00:00 2001 From: Armilar <102996011+Armilar@users.noreply.github.com> Date: Thu, 24 Aug 2023 09:50:59 +0200 Subject: [PATCH 12/13] v4.2.1.1 - Add WINDOWOPEN to cardThermo (Thermostat) Add WINDOWOPEN to cardThermo (Thermostat) --- ioBroker/NsPanelTs_without_Examples.ts | 30 ++++++++++++++++++-------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/ioBroker/NsPanelTs_without_Examples.ts b/ioBroker/NsPanelTs_without_Examples.ts index a9939717..c6d6deb5 100644 --- a/ioBroker/NsPanelTs_without_Examples.ts +++ b/ioBroker/NsPanelTs_without_Examples.ts @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------- -TypeScript v4.2.0.2 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne -- abgestimmt auf TFT 52 / v4.2.0 / BerryDriver 8 / Tasmota 13.1.0 +TypeScript v4.2.1.1 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne +- abgestimmt auf TFT 52 / v4.2.1 / BerryDriver 8 / Tasmota 13.1.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) @@ -8,17 +8,17 @@ 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) Icons unter: https://htmlpreview.github.io/?https://github.com/jobr99/Generate-HASP-Fonts/blob/master/cheatsheet.html -******************************************************************************* +************************************************************************************************ Achtung Änderung des Sonoff ESP-Temperatursensors !!! Bitte "SetOption146 1" in der Tasmota-Console ausführen !!! -******************************************************************************* +************************************************************************************************ In bestimmten Situationen kommt es vor, dass sich das Panel mit FlashNextion unter Tasmota > 12.2.0 nicht flashen lässt. Für den Fall ein Tasmota Dowengrade durchführen und FlashNextion wiederholen. -******************************************************************************* +************************************************************************************************ Ab Tasmota > 13.0.0 ist für ein Upgrade ggfs. eine Umpartitionierung erforderlich https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Tasmota-FAQ#3-tasmota-update-probleme -******************************************************************************* +************************************************************************************************ ReleaseNotes: Bugfixes und Erweiterungen: @@ -153,6 +153,9 @@ ReleaseNotes: - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages - 22.08.2023 - v4.2.0.1 Add iconArray to Alias "Klimaanlage" (airCondition) - 23.08.2023 - v4.2.0.2 Add CardGrid2 with maxItems = 8 + - 23.08.2023 - v4.2.1 Upgrade TFT 52 / 4.2.1 + - 23.08.2023 - v4.2.1.1 Add WINDOWOPEN to cardThermo (Thermostat) + *********************************************************************************************************** * Für die Erstellung der Aliase durch das Skript, muss in der JavaScript Instanz "setObect" gesetzt sein! * @@ -243,7 +246,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-v4.2.0.tft + TFT EU STABLE Version : FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v4.2.1.tft --------------------------------------------------------------------------------------- */ @@ -845,7 +848,7 @@ export const config = { const request = require('request'); //Desired Firmware -const tft_version: string = 'v4.2.0'; +const tft_version: string = 'v4.2.1'; const desired_display_firmware_version = 52; const berry_driver_version = 8; const tasmotaOtaUrl: string = 'http://ota.tasmota.com/tasmota32/release/'; @@ -872,7 +875,7 @@ onStop (function scriptStop () { async function Init_Release() { const FWVersion = [41,42,43,44,45,46,47,48,49,50,51,52,53] - const FWRelease = ['3.3.1','3.4.0','3.5.0','3.5.X','3.6.0','3.7.3','3.8.0','3.8.3','3.9.4','4.0.5','4.1.4','4.2.0','4.3.0'] + const FWRelease = ['3.3.1','3.4.0','3.5.0','3.5.X','3.6.0','3.7.3','3.8.0','3.8.3','3.9.4','4.0.5','4.1.4','4.2.1','4.3.0'] try { if (existsObject(NSPanel_Path + 'Display_Firmware.desiredVersion') == false) { await createStateAsync(NSPanel_Path + 'Display_Firmware.desiredVersion', desired_display_firmware_version, { type: 'number' }); @@ -3671,6 +3674,15 @@ function GenerateThermoPage(page: PageThermo): Payload[] { } } else i--; break; + case 'WINDOWOPEN': + if (existsState(id + '.WINDOWOPEN') && getState(id + '.WINDOWOPEN').val != null) { + if (getState(id + '.WINDOWOPEN').val) { + bt[i - 1] = Icons.GetIcon('window-open-variant') + '~63488~1~' + 'WIN' + '~'; + } else { + bt[i - 1] = Icons.GetIcon('window-closed-variant') + '~2016~1~' + 'WIN' + '~'; + } + } else i--; + break; default: i--; break; From 49352c7ca09dce51cefe14645dc96f99197516ca Mon Sep 17 00:00:00 2001 From: Armilar <102996011+Armilar@users.noreply.github.com> Date: Thu, 24 Aug 2023 09:51:08 +0200 Subject: [PATCH 13/13] v4.2.1.1 - Add WINDOWOPEN to cardThermo (Thermostat) Add WINDOWOPEN to cardThermo (Thermostat) --- ioBroker/NsPanelTs.ts | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/ioBroker/NsPanelTs.ts b/ioBroker/NsPanelTs.ts index 29521770..a4677392 100644 --- a/ioBroker/NsPanelTs.ts +++ b/ioBroker/NsPanelTs.ts @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------- -TypeScript v4.2.0.2 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne -- abgestimmt auf TFT 52 / v4.2.0 / BerryDriver 8 / Tasmota 13.1.0 +TypeScript v4.2.1.1 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne +- abgestimmt auf TFT 52 / v4.2.1 / BerryDriver 8 / Tasmota 13.1.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) @@ -8,17 +8,17 @@ 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) Icons unter: https://htmlpreview.github.io/?https://github.com/jobr99/Generate-HASP-Fonts/blob/master/cheatsheet.html -******************************************************************************* +************************************************************************************************ Achtung Änderung des Sonoff ESP-Temperatursensors !!! Bitte "SetOption146 1" in der Tasmota-Console ausführen !!! -******************************************************************************* +************************************************************************************************ In bestimmten Situationen kommt es vor, dass sich das Panel mit FlashNextion unter Tasmota > 12.2.0 nicht flashen lässt. Für den Fall ein Tasmota Dowengrade durchführen und FlashNextion wiederholen. -******************************************************************************* +************************************************************************************************ Ab Tasmota > 13.0.0 ist für ein Upgrade ggfs. eine Umpartitionierung erforderlich https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Tasmota-FAQ#3-tasmota-update-probleme -******************************************************************************* +************************************************************************************************ ReleaseNotes: Bugfixes und Erweiterungen: @@ -153,6 +153,9 @@ ReleaseNotes: - 21.08.2023 - v4.2.0 Add new alias state for iconcolor and buttontext for icon for subpages - 22.08.2023 - v4.2.0.1 Add iconArray to Alias "Klimaanlage" (airCondition) - 23.08.2023 - v4.2.0.2 Add CardGrid2 with maxItems = 8 + - 23.08.2023 - v4.2.1 Upgrade TFT 52 / 4.2.1 + - 23.08.2023 - v4.2.1.1 Add WINDOWOPEN to cardThermo (Thermostat) + *********************************************************************************************************** * Für die Erstellung der Aliase durch das Skript, muss in der JavaScript Instanz "setObect" gesetzt sein! * @@ -243,7 +246,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-v4.2.0.tft + TFT EU STABLE Version : FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v4.2.1.tft --------------------------------------------------------------------------------------- */ @@ -1360,7 +1363,7 @@ export const config = { const request = require('request'); //Desired Firmware -const tft_version: string = 'v4.2.0'; +const tft_version: string = 'v4.2.1'; const desired_display_firmware_version = 52; const berry_driver_version = 8; const tasmotaOtaUrl: string = 'http://ota.tasmota.com/tasmota32/release/'; @@ -1387,7 +1390,7 @@ onStop (function scriptStop () { async function Init_Release() { const FWVersion = [41,42,43,44,45,46,47,48,49,50,51,52,53] - const FWRelease = ['3.3.1','3.4.0','3.5.0','3.5.X','3.6.0','3.7.3','3.8.0','3.8.3','3.9.4','4.0.5','4.1.4','4.2.0','4.3.0'] + const FWRelease = ['3.3.1','3.4.0','3.5.0','3.5.X','3.6.0','3.7.3','3.8.0','3.8.3','3.9.4','4.0.5','4.1.4','4.2.1','4.3.0'] try { if (existsObject(NSPanel_Path + 'Display_Firmware.desiredVersion') == false) { await createStateAsync(NSPanel_Path + 'Display_Firmware.desiredVersion', desired_display_firmware_version, { type: 'number' }); @@ -4186,6 +4189,15 @@ function GenerateThermoPage(page: PageThermo): Payload[] { } } else i--; break; + case 'WINDOWOPEN': + if (existsState(id + '.WINDOWOPEN') && getState(id + '.WINDOWOPEN').val != null) { + if (getState(id + '.WINDOWOPEN').val) { + bt[i - 1] = Icons.GetIcon('window-open-variant') + '~63488~1~' + 'WIN' + '~'; + } else { + bt[i - 1] = Icons.GetIcon('window-closed-variant') + '~2016~1~' + 'WIN' + '~'; + } + } else i--; + break; default: i--; break;