diff --git a/ioBroker/NsPanelTs.ts b/ioBroker/NsPanelTs.ts index 426f80e0..53055839 100644 --- a/ioBroker/NsPanelTs.ts +++ b/ioBroker/NsPanelTs.ts @@ -1274,8 +1274,18 @@ export const config = { ], - button1Page: button1Page, //Beispiel-Seite auf Button 1, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null, - button2Page: button2Page //Beispiel-Seite auf Button 2, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null, + button1: { + mode: null, // Mögliche Werte wenn Rule2 definiert: page, toggle, set - Wenn nicht definiert --> mode: null + page: null, // Zielpage - Verwendet wenn mode = page (bisher button1Page) + entity: null, // Zielentity - Verwendet wenn mode = set oder toggle + setValue: null // Zielwert - Verwendet wenn mode = set + }, + button2: { + mode: null, // Mögliche Werte wenn Rule2 definiert: page, toggle, set - Wenn nicht definiert --> mode: null + page: null, // Zielpage - Verwendet wenn mode = page (bisher button2Page) + entity: null, // Zielentity - Verwendet wenn mode = set oder toggle + setValue: null // Zielwert - Verwendet wenn mode = set + } }; @@ -2988,18 +2998,34 @@ function GeneratePage(page: Page): void { function HandleHardwareButton(method: string): void { try { - let page: (PageThermo | PageMedia | PageAlarm | PageEntities | PageGrid | PageQR | PagePower | PageChart | PageUnlock); - if (config.button1Page !== null && method == 'button1') { - page = config.button1Page; - pageId = -1; - } else if (config.button2Page !== null && method == 'button2') { - page = config.button2Page; - pageId = -2; - } else { + let buttonConfig: ConfigButtonFunction = config[method]; + if(buttonConfig.mode === null) { return; } - GeneratePage(page); + switch(buttonConfig.mode) { + case 'page': + if (buttonConfig.page) { + if(method == 'button1') { + pageId = -1; + } else if (method == 'button2') { + pageId = -2; + } + GeneratePage(buttonConfig.page); + break; + } + case 'toggle': + if (buttonConfig.entity) { + let current = getState(buttonConfig.entity).val; + setState(buttonConfig.entity, !current); + } + break; + case 'set': + if (buttonConfig.entity) { + setState(buttonConfig.entity, buttonConfig.setValue); + } + break; + } } catch (err) { console.warn('function HandleHardwareButton: ' + err.message); } @@ -3735,11 +3761,11 @@ function RegisterEntityWatcher(id: string): void { } subscriptions[id] = (on({ id: id, change: 'any' }, () => { - if (pageId == -1 && config.button1Page != undefined) { - SendToPanel({ payload: GeneratePageElements(config.button1Page) }); + if (pageId == -1 && config.button1.page) { + SendToPanel({ payload: GeneratePageElements(config.button1.page) }); } - if (pageId == -2 && config.button2Page != undefined) { - SendToPanel({ payload: GeneratePageElements(config.button2Page) }); + if (pageId == -2 && config.button2.page) { + SendToPanel({ payload: GeneratePageElements(config.button2.page) }); } if (activePage !== undefined) { SendToPanel({ payload: GeneratePageElements(activePage) }); @@ -8032,6 +8058,13 @@ type DimMode = { timeNight: (string | undefined) } +type ConfigButtonFunction = { + mode: string | null, + page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null), + entity: string | null, + setValue: string | number | null +} + type Config = { panelRecvTopic: string, panelSendTopic: string, @@ -8047,8 +8080,8 @@ type Config = { defaultBackgroundColor: RGB, pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock )[], subPages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock)[], - button1Page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null), - button2Page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null) + button1: ConfigButtonFunction, + button2: ConfigButtonFunction } type ScreenSaverElement = { diff --git a/ioBroker/NsPanelTs_without_Examples.ts b/ioBroker/NsPanelTs_without_Examples.ts index 369e8806..5f6f69db 100644 --- a/ioBroker/NsPanelTs_without_Examples.ts +++ b/ioBroker/NsPanelTs_without_Examples.ts @@ -762,8 +762,18 @@ export const config = { NSPanel_FirmwareBerry, //Auto-Alias Service Page NSPanel_FirmwareNextion, //Auto-Alias Service Page ], - button1Page: null, //Beispiel-Seite auf Button 1, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null, - button2Page: null //Beispiel-Seite auf Button 2, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null, + button1: { + mode: null, // Mögliche Werte wenn Rule2 definiert: page, toggle, set - Wenn nicht definiert --> mode: null + page: null, // Zielpage - Verwendet wenn mode = page (bisher button1Page) + entity: null, // Zielentity - Verwendet wenn mode = set oder toggle + setValue: null // Zielwert - Verwendet wenn mode = set + }, + button2: { + mode: null, // Mögliche Werte wenn Rule2 definiert: page, toggle, set - Wenn nicht definiert --> mode: null + page: null, // Zielpage - Verwendet wenn mode = page (bisher button2Page) + entity: null, // Zielentity - Verwendet wenn mode = set oder toggle + setValue: null // Zielwert - Verwendet wenn mode = set + } }; @@ -2476,18 +2486,34 @@ function GeneratePage(page: Page): void { function HandleHardwareButton(method: string): void { try { - let page: (PageThermo | PageMedia | PageAlarm | PageEntities | PageGrid | PageQR | PagePower | PageChart | PageUnlock); - if (config.button1Page !== null && method == 'button1') { - page = config.button1Page; - pageId = -1; - } else if (config.button2Page !== null && method == 'button2') { - page = config.button2Page; - pageId = -2; - } else { + let buttonConfig: ConfigButtonFunction = config[method]; + if(buttonConfig.mode === null) { return; } - GeneratePage(page); + switch(buttonConfig.mode) { + case 'page': + if (buttonConfig.page) { + if(method == 'button1') { + pageId = -1; + } else if (method == 'button2') { + pageId = -2; + } + GeneratePage(buttonConfig.page); + break; + } + case 'toggle': + if (buttonConfig.entity) { + let current = getState(buttonConfig.entity).val; + setState(buttonConfig.entity, !current); + } + break; + case 'set': + if (buttonConfig.entity) { + setState(buttonConfig.entity, buttonConfig.setValue); + } + break; + } } catch (err) { console.warn('function HandleHardwareButton: ' + err.message); } @@ -3223,11 +3249,11 @@ function RegisterEntityWatcher(id: string): void { } subscriptions[id] = (on({ id: id, change: 'any' }, () => { - if (pageId == -1 && config.button1Page != undefined) { - SendToPanel({ payload: GeneratePageElements(config.button1Page) }); + if (pageId == -1 && config.button1.page) { + SendToPanel({ payload: GeneratePageElements(config.button1.page) }); } - if (pageId == -2 && config.button2Page != undefined) { - SendToPanel({ payload: GeneratePageElements(config.button2Page) }); + if (pageId == -2 && config.button2.page) { + SendToPanel({ payload: GeneratePageElements(config.button2.page) }); } if (activePage !== undefined) { SendToPanel({ payload: GeneratePageElements(activePage) }); @@ -7520,6 +7546,13 @@ type DimMode = { timeNight: (string | undefined) } +type ConfigButtonFunction = { + mode: string | null, + page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null), + entity: string | null, + setValue: string | number | null +} + type Config = { panelRecvTopic: string, panelSendTopic: string, @@ -7535,8 +7568,8 @@ type Config = { defaultBackgroundColor: RGB, pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock )[], subPages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock)[], - button1Page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null), - button2Page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null) + button1: ConfigButtonFunction, + button2: ConfigButtonFunction } type ScreenSaverElement = {