Extend Button Configuration to enable direct entity manipulation without exiting screensaver

This commit is contained in:
Oliver
2023-03-07 09:54:27 +01:00
parent 568dbe26fb
commit 478ef3bdd7
2 changed files with 100 additions and 34 deletions

View File

@@ -1274,8 +1274,18 @@ export const config = <Config> {
], ],
button1Page: button1Page, //Beispiel-Seite auf Button 1, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null, button1: {
button2Page: button2Page //Beispiel-Seite auf Button 2, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null, 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 { function HandleHardwareButton(method: string): void {
try { try {
let page: (PageThermo | PageMedia | PageAlarm | PageEntities | PageGrid | PageQR | PagePower | PageChart | PageUnlock); let buttonConfig: ConfigButtonFunction = config[method];
if (config.button1Page !== null && method == 'button1') { if(buttonConfig.mode === null) {
page = config.button1Page;
pageId = -1;
} else if (config.button2Page !== null && method == 'button2') {
page = config.button2Page;
pageId = -2;
} else {
return; 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) { } catch (err) {
console.warn('function HandleHardwareButton: ' + err.message); console.warn('function HandleHardwareButton: ' + err.message);
} }
@@ -3735,11 +3761,11 @@ function RegisterEntityWatcher(id: string): void {
} }
subscriptions[id] = (on({ id: id, change: 'any' }, () => { subscriptions[id] = (on({ id: id, change: 'any' }, () => {
if (pageId == -1 && config.button1Page != undefined) { if (pageId == -1 && config.button1.page) {
SendToPanel({ payload: GeneratePageElements(config.button1Page) }); SendToPanel({ payload: GeneratePageElements(config.button1.page) });
} }
if (pageId == -2 && config.button2Page != undefined) { if (pageId == -2 && config.button2.page) {
SendToPanel({ payload: GeneratePageElements(config.button2Page) }); SendToPanel({ payload: GeneratePageElements(config.button2.page) });
} }
if (activePage !== undefined) { if (activePage !== undefined) {
SendToPanel({ payload: GeneratePageElements(activePage) }); SendToPanel({ payload: GeneratePageElements(activePage) });
@@ -8032,6 +8058,13 @@ type DimMode = {
timeNight: (string | undefined) 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 = { type Config = {
panelRecvTopic: string, panelRecvTopic: string,
panelSendTopic: string, panelSendTopic: string,
@@ -8047,8 +8080,8 @@ type Config = {
defaultBackgroundColor: RGB, defaultBackgroundColor: RGB,
pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock )[], pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock )[],
subPages: (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), button1: ConfigButtonFunction,
button2Page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null) button2: ConfigButtonFunction
} }
type ScreenSaverElement = { type ScreenSaverElement = {

View File

@@ -762,8 +762,18 @@ export const config = <Config> {
NSPanel_FirmwareBerry, //Auto-Alias Service Page NSPanel_FirmwareBerry, //Auto-Alias Service Page
NSPanel_FirmwareNextion, //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, button1: {
button2Page: null //Beispiel-Seite auf Button 2, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null, 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 { function HandleHardwareButton(method: string): void {
try { try {
let page: (PageThermo | PageMedia | PageAlarm | PageEntities | PageGrid | PageQR | PagePower | PageChart | PageUnlock); let buttonConfig: ConfigButtonFunction = config[method];
if (config.button1Page !== null && method == 'button1') { if(buttonConfig.mode === null) {
page = config.button1Page;
pageId = -1;
} else if (config.button2Page !== null && method == 'button2') {
page = config.button2Page;
pageId = -2;
} else {
return; 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) { } catch (err) {
console.warn('function HandleHardwareButton: ' + err.message); console.warn('function HandleHardwareButton: ' + err.message);
} }
@@ -3223,11 +3249,11 @@ function RegisterEntityWatcher(id: string): void {
} }
subscriptions[id] = (on({ id: id, change: 'any' }, () => { subscriptions[id] = (on({ id: id, change: 'any' }, () => {
if (pageId == -1 && config.button1Page != undefined) { if (pageId == -1 && config.button1.page) {
SendToPanel({ payload: GeneratePageElements(config.button1Page) }); SendToPanel({ payload: GeneratePageElements(config.button1.page) });
} }
if (pageId == -2 && config.button2Page != undefined) { if (pageId == -2 && config.button2.page) {
SendToPanel({ payload: GeneratePageElements(config.button2Page) }); SendToPanel({ payload: GeneratePageElements(config.button2.page) });
} }
if (activePage !== undefined) { if (activePage !== undefined) {
SendToPanel({ payload: GeneratePageElements(activePage) }); SendToPanel({ payload: GeneratePageElements(activePage) });
@@ -7520,6 +7546,13 @@ type DimMode = {
timeNight: (string | undefined) 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 = { type Config = {
panelRecvTopic: string, panelRecvTopic: string,
panelSendTopic: string, panelSendTopic: string,
@@ -7535,8 +7568,8 @@ type Config = {
defaultBackgroundColor: RGB, defaultBackgroundColor: RGB,
pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock )[], pages: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock )[],
subPages: (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), button1: ConfigButtonFunction,
button2Page: (PageThermo | PageMedia | PageAlarm | PageQR | PageEntities | PageGrid | PagePower | PageChart | PageUnlock | null) button2: ConfigButtonFunction
} }
type ScreenSaverElement = { type ScreenSaverElement = {