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

@@ -762,8 +762,18 @@ export const config = <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 = {