mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2026-02-06 05:18:54 +01:00
@@ -1,5 +1,5 @@
|
|||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
TypeScript v4.3.3.37 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @ticaki / @Britzelpuf / @Sternmiere / @ravenS0ne
|
TypeScript v4.3.3.38 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @ticaki / @Britzelpuf / @Sternmiere / @ravenS0ne
|
||||||
- abgestimmt auf TFT 53 / v4.3.3 / BerryDriver 9 / Tasmota 13.3.0
|
- abgestimmt auf TFT 53 / v4.3.3 / BerryDriver 9 / Tasmota 13.3.0
|
||||||
@joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker
|
@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
|
NsPanelTs.ts (dieses TypeScript in ioBroker) Stable: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/NsPanelTs.ts
|
||||||
@@ -98,7 +98,13 @@ ReleaseNotes:
|
|||||||
- 09.01.2024 - v4.3.3.36 Fix: schedule SendTime
|
- 09.01.2024 - v4.3.3.36 Fix: schedule SendTime
|
||||||
- 09.01.2024 - v4.3.3.36 Fix: Function _schedule SummerTime/WinterTime
|
- 09.01.2024 - v4.3.3.36 Fix: Function _schedule SummerTime/WinterTime
|
||||||
- 15.01.2024 - v4.3.3.37 Change: Allow data points to be flushed for popUpNotify. Activate screensaver with one click.
|
- 15.01.2024 - v4.3.3.37 Change: Allow data points to be flushed for popUpNotify. Activate screensaver with one click.
|
||||||
|
- 16.01.2024 - v4.3.3.38 Fix: joBr99#1098
|
||||||
|
- 16.01.2024 - v4.3.3.38 Types: Number of PageItems defined & HandleScreensaverStatusIcons rewritten
|
||||||
|
- 16.01.2024 - v4.3.3.38 Optimate: function SendTime()
|
||||||
|
- 17.01.2024 - v4.3.3.38 Add: ScreensaverEntityIconSelect for MRIcons is like common.states for states.
|
||||||
|
- 17.01.2024 - v4.3.3.38 Add: Changing the ScreensaverEntityValue value updates the screensaver.
|
||||||
|
- 19.01.2024 - v4.3.3.38 Change: yAxisTicks parameter is not required in cardLChart PageItem
|
||||||
|
|
||||||
Todo:
|
Todo:
|
||||||
- XX.XX.XXXX - v5.0.0 Change the bottomScreensaverEntity (rolling) if more than 6 entries are defined
|
- XX.XX.XXXX - v5.0.0 Change the bottomScreensaverEntity (rolling) if more than 6 entries are defined
|
||||||
|
|
||||||
@@ -964,7 +970,7 @@ export const config: Config = {
|
|||||||
// _________________________________ DE: Ab hier keine Konfiguration mehr _____________________________________
|
// _________________________________ DE: Ab hier keine Konfiguration mehr _____________________________________
|
||||||
// _________________________________ EN: No more configuration from here _____________________________________
|
// _________________________________ EN: No more configuration from here _____________________________________
|
||||||
|
|
||||||
const scriptVersion: string = 'v4.3.3.37';
|
const scriptVersion: string = 'v4.3.3.38';
|
||||||
const tft_version: string = 'v4.3.3';
|
const tft_version: string = 'v4.3.3';
|
||||||
const desired_display_firmware_version = 53;
|
const desired_display_firmware_version = 53;
|
||||||
const berry_driver_version = 9;
|
const berry_driver_version = 9;
|
||||||
@@ -1045,7 +1051,7 @@ async function CheckConfigParameters() {
|
|||||||
const i = n.shift();
|
const i = n.shift();
|
||||||
|
|
||||||
if (a === 'mqtt' && !isNaN(Number(i))) {
|
if (a === 'mqtt' && !isNaN(Number(i))) {
|
||||||
sendTo(`${a}.${i}`, 'sendMessage2Client', {topic: n.join('/'), message: 'time~12:00'});
|
sendTo(`${a}.${i}`, 'sendMessage2Client', {topic: n.join('/'), message: buildNSPanelString('time', '12:00')});
|
||||||
await sleep(500);
|
await sleep(500);
|
||||||
}
|
}
|
||||||
if (await existsObjectAsync(config.panelSendTopic) == false) {
|
if (await existsObjectAsync(config.panelSendTopic) == false) {
|
||||||
@@ -1428,7 +1434,7 @@ Init_Screensaver_Backckground_Color_Switch();
|
|||||||
on({id: NSPanel_Path + 'ScreensaverInfo.bgColorIndicator', change: "ne"}, async function (obj) {
|
on({id: NSPanel_Path + 'ScreensaverInfo.bgColorIndicator', change: "ne"}, async function (obj) {
|
||||||
try {
|
try {
|
||||||
bgColorScrSaver = obj.state.val;
|
bgColorScrSaver = obj.state.val;
|
||||||
if (bgColorScrSaver < 4) {
|
if (bgColorScrSaver < 6) {
|
||||||
HandleScreensaverUpdate();
|
HandleScreensaverUpdate();
|
||||||
}
|
}
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
@@ -1784,9 +1790,11 @@ on({id: [String(NSPanel_Path) + 'Relay.1',String(NSPanel_Path) + 'Relay.2'], cha
|
|||||||
|
|
||||||
async function SubscribeMRIcons () {
|
async function SubscribeMRIcons () {
|
||||||
try {
|
try {
|
||||||
if (config.mrIcon1ScreensaverEntity.ScreensaverEntity != null) {
|
let arr = config.mrIcon1ScreensaverEntity.ScreensaverEntity != null ? [config.mrIcon1ScreensaverEntity.ScreensaverEntity] : [];
|
||||||
on({id: config.mrIcon1ScreensaverEntity.ScreensaverEntity, change: "ne"}, async function (obj) {
|
arr = config.mrIcon1ScreensaverEntity.ScreensaverEntityValue != null ? [...arr, config.mrIcon1ScreensaverEntity.ScreensaverEntityValue] : arr;
|
||||||
if (obj.id!.substring(0,4) == 'mqtt') {
|
if (arr.length > 0) {
|
||||||
|
on({id: arr, change: "ne"}, async function (obj) {
|
||||||
|
if (obj.id!.substring(0,4) == 'mqtt') {
|
||||||
let Button = obj.id!.split('.');
|
let Button = obj.id!.split('.');
|
||||||
if (getState(NSPanel_Path + 'Relay.' + Button[Button.length - 1].substring(5,6)).val != obj.state.val) {
|
if (getState(NSPanel_Path + 'Relay.' + Button[Button.length - 1].substring(5,6)).val != obj.state.val) {
|
||||||
await setStateAsync(NSPanel_Path + 'Relay.' + Button[Button.length - 1].substring(5,6), obj.state.val == 'ON' ? true : false);
|
await setStateAsync(NSPanel_Path + 'Relay.' + Button[Button.length - 1].substring(5,6), obj.state.val == 'ON' ? true : false);
|
||||||
@@ -1796,8 +1804,10 @@ async function SubscribeMRIcons () {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (config.mrIcon2ScreensaverEntity.ScreensaverEntity != null) {
|
arr = config.mrIcon2ScreensaverEntity.ScreensaverEntity != null ? [config.mrIcon2ScreensaverEntity.ScreensaverEntity] : [];
|
||||||
on({id: config.mrIcon2ScreensaverEntity.ScreensaverEntity, change: "ne"}, async function (obj) {
|
arr = config.mrIcon2ScreensaverEntity.ScreensaverEntityValue != null ? [...arr, config.mrIcon2ScreensaverEntity.ScreensaverEntityValue] : arr;
|
||||||
|
if (arr.length > 0) {
|
||||||
|
on({id: arr, change: "ne"}, async function (obj) {
|
||||||
if (obj.id!.substring(0,4) == 'mqtt') {
|
if (obj.id!.substring(0,4) == 'mqtt') {
|
||||||
let Button = obj.id!.split('.');
|
let Button = obj.id!.split('.');
|
||||||
if (getState(NSPanel_Path + 'Relay.' + Button[Button.length - 1].substring(5,6)).val != obj.state.val) {
|
if (getState(NSPanel_Path + 'Relay.' + Button[Button.length - 1].substring(5,6)).val != obj.state.val) {
|
||||||
@@ -3053,7 +3063,7 @@ on({ id: NSPanel_Alarm_Path + 'Alarm.AlarmState', change: 'ne' }, async (obj) =>
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function HandleMessage(typ: string, method: NSPanel.EventMethod, page: number | undefined, words: Array<string> | undefined): void {
|
function HandleMessage(typ: string, method: NSPanel.EventMethod, page: number | undefined, words: string[] | undefined): void {
|
||||||
try {
|
try {
|
||||||
if (typ == 'event') {
|
if (typ == 'event') {
|
||||||
switch (method as NSPanel.EventMethod) {
|
switch (method as NSPanel.EventMethod) {
|
||||||
@@ -3154,9 +3164,9 @@ function findPageItem(searching: String): PageItem {
|
|||||||
function GeneratePage(page: PageType): void {
|
function GeneratePage(page: PageType): void {
|
||||||
try {
|
try {
|
||||||
activePage = page;
|
activePage = page;
|
||||||
setIfExists(NSPanel_Path + 'ActivePage.type', activePage!.type);
|
setIfExists(NSPanel_Path + 'ActivePage.type', activePage.type);
|
||||||
setIfExists(NSPanel_Path + 'ActivePage.heading', activePage!.heading);
|
setIfExists(NSPanel_Path + 'ActivePage.heading', activePage.heading);
|
||||||
setIfExists(NSPanel_Path + 'ActivePage.id0', activePage!.items[0].id);
|
setIfExists(NSPanel_Path + 'ActivePage.id0', activePage.items[0] !== undefined ? activePage.items[0].id : '');
|
||||||
switch (page.type) {
|
switch (page.type) {
|
||||||
case 'cardEntities':
|
case 'cardEntities':
|
||||||
SendToPanel(GenerateEntitiesPage(page));
|
SendToPanel(GenerateEntitiesPage(page));
|
||||||
@@ -3258,7 +3268,7 @@ function SendDate(): void {
|
|||||||
const options: any = { weekday: dpWeekday, year: 'numeric', month: dpMonth, day: 'numeric' };
|
const options: any = { weekday: dpWeekday, year: 'numeric', month: dpMonth, day: 'numeric' };
|
||||||
const _SendDate = dpCustomFormat != '' ? dayjs().format(dpCustomFormat) : date.toLocaleDateString(getState(NSPanel_Path + 'Config.locale').val, options);
|
const _SendDate = dpCustomFormat != '' ? dayjs().format(dpCustomFormat) : date.toLocaleDateString(getState(NSPanel_Path + 'Config.locale').val, options);
|
||||||
|
|
||||||
SendToPanel(<NSPanel.Payload>{ payload: 'date~' + _SendDate });
|
SendToPanel({ payload: 'date~' + _SendDate });
|
||||||
}
|
}
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
if (err.message = 'Cannot convert undefined or null to object') {
|
if (err.message = 'Cannot convert undefined or null to object') {
|
||||||
@@ -3271,11 +3281,12 @@ function SendDate(): void {
|
|||||||
|
|
||||||
function SendTime(): void {
|
function SendTime(): void {
|
||||||
try {
|
try {
|
||||||
const d = new Date();
|
/*const d = new Date();
|
||||||
const hr = (d.getHours() < 10 ? '0' : '') + d.getHours();
|
const hr = (d.getHours() < 10 ? '0' : '') + d.getHours();
|
||||||
const min = (d.getMinutes() < 10 ? '0' : '') + d.getMinutes();
|
const min = (d.getMinutes() < 10 ? '0' : '') + d.getMinutes();
|
||||||
|
|
||||||
SendToPanel(<NSPanel.Payload>{ payload: 'time~' + hr + ':' + min });
|
SendToPanel({ payload: 'time~' + hr + ':' + min });*/
|
||||||
|
SendToPanel({ payload: `time~${new Date().toLocaleTimeString('de-DE', { hour: "2-digit", minute: "2-digit" })}`, });
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
log('error at function SendTime: ' + err.message, 'warn');
|
log('error at function SendTime: ' + err.message, 'warn');
|
||||||
}
|
}
|
||||||
@@ -3283,7 +3294,7 @@ function SendTime(): void {
|
|||||||
|
|
||||||
function GenerateEntitiesPage(page: NSPanel.PageEntities): NSPanel.Payload[] {
|
function GenerateEntitiesPage(page: NSPanel.PageEntities): NSPanel.Payload[] {
|
||||||
try {
|
try {
|
||||||
let out_msgs: Array<NSPanel.Payload>;
|
let out_msgs: NSPanel.Payload[];
|
||||||
out_msgs = [{ payload: 'pageType~cardEntities' }]
|
out_msgs = [{ payload: 'pageType~cardEntities' }]
|
||||||
out_msgs.push({ payload: GeneratePageElements(page) });
|
out_msgs.push({ payload: GeneratePageElements(page) });
|
||||||
return out_msgs
|
return out_msgs
|
||||||
@@ -3295,7 +3306,7 @@ function GenerateEntitiesPage(page: NSPanel.PageEntities): NSPanel.Payload[] {
|
|||||||
|
|
||||||
function GenerateGridPage(page: NSPanel.PageGrid): NSPanel.Payload[] {
|
function GenerateGridPage(page: NSPanel.PageGrid): NSPanel.Payload[] {
|
||||||
try {
|
try {
|
||||||
let out_msgs: Array<NSPanel.Payload> = [{ payload: 'pageType~cardGrid' }];
|
let out_msgs: NSPanel.Payload[] = [{ payload: 'pageType~cardGrid' }];
|
||||||
out_msgs.push({ payload: GeneratePageElements(page) });
|
out_msgs.push({ payload: GeneratePageElements(page) });
|
||||||
return out_msgs;
|
return out_msgs;
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
@@ -3306,7 +3317,7 @@ function GenerateGridPage(page: NSPanel.PageGrid): NSPanel.Payload[] {
|
|||||||
|
|
||||||
function GenerateGridPage2(page: NSPanel.PageGrid2): NSPanel.Payload[] {
|
function GenerateGridPage2(page: NSPanel.PageGrid2): NSPanel.Payload[] {
|
||||||
try {
|
try {
|
||||||
let out_msgs: Array<NSPanel.Payload> = [{ payload: 'pageType~cardGrid2' }];
|
let out_msgs: NSPanel.Payload[] = [{ payload: 'pageType~cardGrid2' }];
|
||||||
out_msgs.push({ payload: GeneratePageElements(page) });
|
out_msgs.push({ payload: GeneratePageElements(page) });
|
||||||
return out_msgs;
|
return out_msgs;
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
@@ -4314,7 +4325,7 @@ function GenerateThermoPage(page: NSPanel.PageThermo): NSPanel.Payload[] {
|
|||||||
try {
|
try {
|
||||||
UnsubscribeWatcher();
|
UnsubscribeWatcher();
|
||||||
let id = page.items[0].id
|
let id = page.items[0].id
|
||||||
let out_msgs: Array<NSPanel.Payload> = [];
|
let out_msgs: NSPanel.Payload[] = [];
|
||||||
out_msgs.push({ payload: 'pageType~cardThermo' });
|
out_msgs.push({ payload: 'pageType~cardThermo' });
|
||||||
|
|
||||||
// ioBroker
|
// ioBroker
|
||||||
@@ -4695,8 +4706,9 @@ function GenerateThermoPage(page: NSPanel.PageThermo): NSPanel.Payload[] {
|
|||||||
|
|
||||||
function unsubscribeMediaSubscriptions(): void {
|
function unsubscribeMediaSubscriptions(): void {
|
||||||
for (let i = 0; i < config.pages.length; i++) {
|
for (let i = 0; i < config.pages.length; i++) {
|
||||||
if (config.pages[i].type == 'cardMedia') {
|
const page: NSPanel.PageType = config.pages[i];
|
||||||
let mediaID = config.pages[i].items[0].id;
|
if (isPageMedia(page)) {
|
||||||
|
let mediaID = page.items[0].id;
|
||||||
unsubscribe(mediaID + '.STATE');
|
unsubscribe(mediaID + '.STATE');
|
||||||
unsubscribe(mediaID + '.ARTIST');
|
unsubscribe(mediaID + '.ARTIST');
|
||||||
unsubscribe(mediaID + '.TITLE');
|
unsubscribe(mediaID + '.TITLE');
|
||||||
@@ -4710,8 +4722,9 @@ function unsubscribeMediaSubscriptions(): void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (let i = 0; i < config.subPages.length; i++) {
|
for (let i = 0; i < config.subPages.length; i++) {
|
||||||
if (config.subPages[i].type == 'cardMedia') {
|
const page: NSPanel.PageType = config.subPages[i];
|
||||||
let mediaID = config.subPages[i].items[0].id;
|
if (isPageMedia(page)) {
|
||||||
|
let mediaID = page.items[0].id;
|
||||||
unsubscribe(mediaID + '.STATE');
|
unsubscribe(mediaID + '.STATE');
|
||||||
unsubscribe(mediaID + '.ARTIST');
|
unsubscribe(mediaID + '.ARTIST');
|
||||||
unsubscribe(mediaID + '.TITLE');
|
unsubscribe(mediaID + '.TITLE');
|
||||||
@@ -5050,7 +5063,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
if (!page.items[0].id) throw new Error ('Missing page id for cardMedia!');
|
if (!page.items[0].id) throw new Error ('Missing page id for cardMedia!');
|
||||||
|
|
||||||
let id = page.items[0].id;
|
let id = page.items[0].id;
|
||||||
let out_msgs: Array<NSPanel.Payload> = [];
|
let out_msgs: NSPanel.Payload[] = [];
|
||||||
|
|
||||||
if (!page.items[0].adapterPlayerInstance!) throw new Error('page.items[0].adapterPlayerInstance is undefined!')
|
if (!page.items[0].adapterPlayerInstance!) throw new Error('page.items[0].adapterPlayerInstance is undefined!')
|
||||||
let vInstance = page.items[0].adapterPlayerInstance!;
|
let vInstance = page.items[0].adapterPlayerInstance!;
|
||||||
@@ -5338,7 +5351,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
//-------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------
|
||||||
// All Alexa devices (the online / player and commands directory is available) are listed and linked below
|
// All Alexa devices (the online / player and commands directory is available) are listed and linked below
|
||||||
// If the constant alexaSpeakerList contains at least one entry, the constant is used - otherwise all devices from the Alexa adapter
|
// If the constant alexaSpeakerList contains at least one entry, the constant is used - otherwise all devices from the Alexa adapter
|
||||||
let speakerListArray: Array<string> = [];
|
let speakerListArray: string[] = [];
|
||||||
if (page.items[0].speakerList && page.items[0].speakerList.length > 0) {
|
if (page.items[0].speakerList && page.items[0].speakerList.length > 0) {
|
||||||
for (let i_index in page.items[0].speakerList) {
|
for (let i_index in page.items[0].speakerList) {
|
||||||
speakerListArray.push(page.items[0].speakerList[i_index]);
|
speakerListArray.push(page.items[0].speakerList[i_index]);
|
||||||
@@ -5669,7 +5682,7 @@ function GenerateAlarmPage(page: NSPanel.PageAlarm): NSPanel.Payload[] {
|
|||||||
let id = page.items[0].id
|
let id = page.items[0].id
|
||||||
let name = page.heading;
|
let name = page.heading;
|
||||||
|
|
||||||
let out_msgs: Array<NSPanel.Payload> = [];
|
let out_msgs: NSPanel.Payload[] = [];
|
||||||
out_msgs.push({ payload: 'pageType~cardAlarm' });
|
out_msgs.push({ payload: 'pageType~cardAlarm' });
|
||||||
let nsPath = NSPanel_Alarm_Path + 'Alarm';
|
let nsPath = NSPanel_Alarm_Path + 'Alarm';
|
||||||
|
|
||||||
@@ -5827,7 +5840,7 @@ function GenerateUnlockPage(page: NSPanel.PageUnlock): NSPanel.Payload[] {
|
|||||||
let id = page.items[0].id
|
let id = page.items[0].id
|
||||||
let name = page.heading;
|
let name = page.heading;
|
||||||
|
|
||||||
let out_msgs: Array<NSPanel.Payload> = [];
|
let out_msgs: NSPanel.Payload[] = [];
|
||||||
out_msgs.push({ payload: 'pageType~cardAlarm' });
|
out_msgs.push({ payload: 'pageType~cardAlarm' });
|
||||||
|
|
||||||
let dpPath : string = ''
|
let dpPath : string = ''
|
||||||
@@ -5908,7 +5921,7 @@ function GenerateQRPage(page: NSPanel.PageQR): NSPanel.Payload[] {
|
|||||||
activePage = page;
|
activePage = page;
|
||||||
if (!page.items[0].id) throw new Error ('Missing pageItem.id for cardQRPage!');
|
if (!page.items[0].id) throw new Error ('Missing pageItem.id for cardQRPage!');
|
||||||
let id = page.items[0].id;
|
let id = page.items[0].id;
|
||||||
let out_msgs: Array<NSPanel.Payload> = [];
|
let out_msgs: NSPanel.Payload[] = [];
|
||||||
out_msgs.push({ payload: 'pageType~cardQR' });
|
out_msgs.push({ payload: 'pageType~cardQR' });
|
||||||
|
|
||||||
let dpPath : string = ''
|
let dpPath : string = ''
|
||||||
@@ -5998,14 +6011,16 @@ function GenerateQRPage(page: NSPanel.PageQR): NSPanel.Payload[] {
|
|||||||
|
|
||||||
function unsubscribePowerSubscriptions(): void {
|
function unsubscribePowerSubscriptions(): void {
|
||||||
for (let i = 0; i < config.pages.length; i++) {
|
for (let i = 0; i < config.pages.length; i++) {
|
||||||
if (config.pages[i].type == 'cardPower') {
|
const page: NSPanel.PageType = config.pages[i];
|
||||||
let powerID = config.pages[i].items[0].id;
|
if (isPagePower(page)) {
|
||||||
|
let powerID = page.items[0].id;
|
||||||
unsubscribe(powerID + '.ACTUAL');
|
unsubscribe(powerID + '.ACTUAL');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (let i = 0; i < config.subPages.length; i++) {
|
for (let i = 0; i < config.subPages.length; i++) {
|
||||||
if (config.subPages[i].type == 'cardPower') {
|
const page: NSPanel.PageType = config.subPages[i];
|
||||||
let powerID = config.subPages[i].items[0].id;
|
if (isPagePower(page)) {
|
||||||
|
let powerID = page.items[0].id;
|
||||||
unsubscribe(powerID + '.ACTUAL');
|
unsubscribe(powerID + '.ACTUAL');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6049,7 +6064,7 @@ function GeneratePowerPage(page: NSPanel.PagePower): NSPanel.Payload[] {
|
|||||||
obj = JSON.parse((getState(page.items[0].id + '.ACTUAL').val));
|
obj = JSON.parse((getState(page.items[0].id + '.ACTUAL').val));
|
||||||
}
|
}
|
||||||
|
|
||||||
let out_msgs: Array<NSPanel.Payload> = [];
|
let out_msgs: NSPanel.Payload[] = [];
|
||||||
|
|
||||||
// Leave the display on if the alwaysOnDisplay parameter is specified (true)
|
// Leave the display on if the alwaysOnDisplay parameter is specified (true)
|
||||||
if (page.type == 'cardPower' && pageCounter == 0 && page.items[0].alwaysOnDisplay != undefined) {
|
if (page.type == 'cardPower' && pageCounter == 0 && page.items[0].alwaysOnDisplay != undefined) {
|
||||||
@@ -6149,7 +6164,7 @@ function GenerateChartPage(page: NSPanel.PageChart): NSPanel.Payload[] {
|
|||||||
activePage = page;
|
activePage = page;
|
||||||
|
|
||||||
let id = page.items[0].id;
|
let id = page.items[0].id;
|
||||||
let out_msgs: Array<NSPanel.Payload> = [];
|
let out_msgs: NSPanel.Payload[] = [];
|
||||||
out_msgs.push({ payload: 'pageType~' + page.type });
|
out_msgs.push({ payload: 'pageType~' + page.type });
|
||||||
|
|
||||||
let heading = page.heading !== undefined ? page.heading : "Chart...";
|
let heading = page.heading !== undefined ? page.heading : "Chart...";
|
||||||
@@ -7437,7 +7452,7 @@ function GetNavigationString(pageId: number): string {
|
|||||||
function GenerateDetailPage(type: NSPanel.PopupType, optional: NSPanel.mediaOptional | undefined, pageItem: PageItem, placeId: number | undefined): NSPanel.Payload[] {
|
function GenerateDetailPage(type: NSPanel.PopupType, optional: NSPanel.mediaOptional | undefined, pageItem: PageItem, placeId: number | undefined): NSPanel.Payload[] {
|
||||||
if (Debug) log('GenerateDetailPage Übergabe Type: ' + type + ' - optional: ' + optional + ' - pageItem.id: ' + pageItem.id, 'info');
|
if (Debug) log('GenerateDetailPage Übergabe Type: ' + type + ' - optional: ' + optional + ' - pageItem.id: ' + pageItem.id, 'info');
|
||||||
try {
|
try {
|
||||||
let out_msgs: Array<NSPanel.Payload> = [];
|
let out_msgs: NSPanel.Payload[] = [];
|
||||||
let id = pageItem.id;
|
let id = pageItem.id;
|
||||||
|
|
||||||
if (id && existsObject(id)) {
|
if (id && existsObject(id)) {
|
||||||
@@ -8239,7 +8254,7 @@ function GenerateDetailPage(type: NSPanel.PopupType, optional: NSPanel.mediaOpti
|
|||||||
// Playlist browsing not supported by squeezeboxrpc adapter. But Favorites can be used
|
// Playlist browsing not supported by squeezeboxrpc adapter. But Favorites can be used
|
||||||
actualState = ''; // Not supported by squeezeboxrpc adapter
|
actualState = ''; // Not supported by squeezeboxrpc adapter
|
||||||
let tempPlayList: string[] = [];
|
let tempPlayList: string[] = [];
|
||||||
let pathParts: Array<string> = pageItem.adapterPlayerInstance!.split('.');
|
let pathParts: string[] = pageItem.adapterPlayerInstance!.split('.');
|
||||||
for (let favorite_index = 0; favorite_index < 45; favorite_index++) {
|
for (let favorite_index = 0; favorite_index < 45; favorite_index++) {
|
||||||
let favorite_name_selector: string = [pathParts[0], pathParts[1], 'Favorites', favorite_index, 'Name'].join('.');
|
let favorite_name_selector: string = [pathParts[0], pathParts[1], 'Favorites', favorite_index, 'Name'].join('.');
|
||||||
if (!existsObject(favorite_name_selector)) {
|
if (!existsObject(favorite_name_selector)) {
|
||||||
@@ -8841,7 +8856,7 @@ function HandleScreensaverUpdate(): void {
|
|||||||
}
|
}
|
||||||
if (Debug) log('HandleScreensaverUpdate payload: weatherUpdate~' + payloadString, 'info');
|
if (Debug) log('HandleScreensaverUpdate payload: weatherUpdate~' + payloadString, 'info');
|
||||||
|
|
||||||
SendToPanel(<NSPanel.Payload>{ payload: 'weatherUpdate~' + payloadString });
|
SendToPanel({ payload: 'weatherUpdate~' + payloadString });
|
||||||
|
|
||||||
HandleScreensaverStatusIcons();
|
HandleScreensaverStatusIcons();
|
||||||
}
|
}
|
||||||
@@ -8868,162 +8883,133 @@ function RegisterScreensaverEntityWatcher(id: string): void {
|
|||||||
function HandleScreensaverStatusIcons() : void {
|
function HandleScreensaverStatusIcons() : void {
|
||||||
try {
|
try {
|
||||||
let payloadString = '';
|
let payloadString = '';
|
||||||
let hwBtn1Col: any = config.mrIcon1ScreensaverEntity.ScreensaverEntityOffColor;
|
const iconData: Record<'mrIcon1' | 'mrIcon2', NSPanel.ScreenSaverMRDataElement> = {
|
||||||
if (config.mrIcon1ScreensaverEntity.ScreensaverEntity != null) {
|
mrIcon1: {
|
||||||
// Prüfung ob ScreensaverEntity vom Typ String ist
|
ScreensaverEntity: config.mrIcon1ScreensaverEntity.ScreensaverEntity != null
|
||||||
if (typeof (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) == 'string') {
|
&& existsState(config.mrIcon1ScreensaverEntity.ScreensaverEntity)
|
||||||
if (Debug) log('Entity ist String', 'info')
|
? getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val
|
||||||
let hwBtn1: string = getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val;
|
: null,
|
||||||
if (hwBtn1 == 'ON') {
|
ScreensaverEntityIconOn: config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn
|
||||||
hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor;
|
? Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn)
|
||||||
|
: '',
|
||||||
|
ScreensaverEntityIconOff: config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff
|
||||||
|
? Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff)
|
||||||
|
: '',
|
||||||
|
ScreensaverEntityOnColor: config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor,
|
||||||
|
ScreensaverEntityOffColor: config.mrIcon1ScreensaverEntity.ScreensaverEntityOffColor,
|
||||||
|
ScreensaverEntityValue: config.mrIcon1ScreensaverEntity.ScreensaverEntityValue === null
|
||||||
|
? null
|
||||||
|
: getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val,
|
||||||
|
ScreensaverEntityValueDecimalPlace: config.mrIcon1ScreensaverEntity.ScreensaverEntityValueDecimalPlace,
|
||||||
|
ScreensaverEntityValueUnit: config.mrIcon1ScreensaverEntity.ScreensaverEntityValueUnit,
|
||||||
|
ScreensaverEntityIconSelect: config.mrIcon1ScreensaverEntity.ScreensaverEntityIconSelect
|
||||||
|
&& typeof config.mrIcon1ScreensaverEntity.ScreensaverEntityIconSelect === 'object'
|
||||||
|
? config.mrIcon1ScreensaverEntity.ScreensaverEntityIconSelect
|
||||||
|
: null,
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
mrIcon2: {
|
||||||
|
ScreensaverEntity: config.mrIcon2ScreensaverEntity.ScreensaverEntity != null
|
||||||
|
&& existsState(config.mrIcon2ScreensaverEntity.ScreensaverEntity)
|
||||||
|
? getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val
|
||||||
|
: null,
|
||||||
|
ScreensaverEntityIconOn: config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn
|
||||||
|
? Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn)
|
||||||
|
: '',
|
||||||
|
ScreensaverEntityIconOff: config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff
|
||||||
|
? Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff)
|
||||||
|
: '',
|
||||||
|
ScreensaverEntityOnColor: config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor,
|
||||||
|
ScreensaverEntityOffColor: config.mrIcon2ScreensaverEntity.ScreensaverEntityOffColor,
|
||||||
|
ScreensaverEntityValue: config.mrIcon2ScreensaverEntity.ScreensaverEntityValue === null
|
||||||
|
? null
|
||||||
|
: getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val,
|
||||||
|
ScreensaverEntityValueDecimalPlace: config.mrIcon2ScreensaverEntity.ScreensaverEntityValueDecimalPlace,
|
||||||
|
ScreensaverEntityValueUnit: config.mrIcon2ScreensaverEntity.ScreensaverEntityValueUnit,
|
||||||
|
ScreensaverEntityIconSelect: config.mrIcon2ScreensaverEntity.ScreensaverEntityIconSelect
|
||||||
|
&& typeof config.mrIcon2ScreensaverEntity.ScreensaverEntityIconSelect === 'object'
|
||||||
|
? config.mrIcon2ScreensaverEntity.ScreensaverEntityIconSelect
|
||||||
|
: null,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const a in iconData) {
|
||||||
|
if (iconData[a].ScreensaverEntityValue !== null) {
|
||||||
|
switch (typeof iconData[a].ScreensaverEntityValue) {
|
||||||
|
case "string":
|
||||||
|
if (iconData[a].ScreensaverEntityValue === '' || isNaN(iconData[a].ScreensaverEntityValue)) break;
|
||||||
|
case "number":
|
||||||
|
case "bigint":
|
||||||
|
iconData[a].ScreensaverEntityValue = Number(iconData[a].ScreensaverEntityValue).toFixed(iconData[a].ScreensaverEntityValueDecimalPlace);
|
||||||
|
break;
|
||||||
|
case "boolean":
|
||||||
|
break;
|
||||||
|
case "symbol":
|
||||||
|
case "undefined":
|
||||||
|
case "object":
|
||||||
|
case "function":
|
||||||
|
iconData[a].ScreensaverEntityValue = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let hwBtn1Col: RGB = iconData[a].ScreensaverEntityOffColor;
|
||||||
|
if (iconData[a].ScreensaverEntity != null || iconData[a].ScreensaverEntityValue != null) {
|
||||||
|
// Prüfung ob ScreensaverEntity vom Typ String ist
|
||||||
|
if (iconData[a].ScreensaverEntity != null) {
|
||||||
|
if (typeof (iconData[a].ScreensaverEntity) == 'string') {
|
||||||
|
if (Debug) log('Entity ist String', 'info')
|
||||||
|
switch (String(iconData[a].ScreensaverEntity).toUpperCase()) {
|
||||||
|
case 'ON':
|
||||||
|
case 'OK':
|
||||||
|
case 'AN':
|
||||||
|
case 'YES':
|
||||||
|
case 'TRUE':
|
||||||
|
case 'ONLINE':
|
||||||
|
hwBtn1Col = iconData[a].ScreensaverEntityOnColor;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
if (Debug) log('Value: ' + iconData[a].ScreensaverEntity + ' Color: ' + JSON.stringify(hwBtn1Col), 'info')
|
||||||
|
// Alles was kein String ist in Boolean umwandeln
|
||||||
|
} else {
|
||||||
|
if (Debug) log('Entity ist kein String', 'info')
|
||||||
|
if (!!iconData[a].ScreensaverEntity) {
|
||||||
|
hwBtn1Col = iconData[a].ScreensaverEntityOnColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (Debug) log('Value: ' + hwBtn1 + ' Color: ' + JSON.stringify(hwBtn1Col), 'info')
|
|
||||||
|
|
||||||
// Icon ermitteln
|
// Icon ermitteln
|
||||||
if (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) {
|
if (iconData[a].ScreensaverEntityIconSelect && iconData[a].ScreensaverEntity != null) {
|
||||||
payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
|
const icon = iconData[a].ScreensaverEntityIconSelect[iconData[a].ScreensaverEntity];
|
||||||
|
if (icon !== undefined) {
|
||||||
|
payloadString += Icons.GetIcon(icon);
|
||||||
|
if (Debug) log('SelectIcon: '+payloadString, 'info')
|
||||||
|
}
|
||||||
|
} else if (iconData[a].ScreensaverEntity) {
|
||||||
|
payloadString += iconData[a].ScreensaverEntityIconOn;
|
||||||
if (Debug) log('Icon if true '+payloadString, 'info')
|
if (Debug) log('Icon if true '+payloadString, 'info')
|
||||||
} else {
|
} else {
|
||||||
if (config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff != null) {
|
if (iconData[a].ScreensaverEntityIconOff) {
|
||||||
payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff);
|
payloadString += iconData[a].ScreensaverEntityIconOff;
|
||||||
if (Debug) log('Icon else true '+payloadString, 'info')
|
if (Debug) log('Icon1 else true '+payloadString, 'info')
|
||||||
} else {
|
} else {
|
||||||
payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
|
payloadString += iconData[a].ScreensaverEntityIconOn;
|
||||||
if (Debug) log('Icon else false '+payloadString, 'info')
|
if (Debug) log('Icon1 else false '+payloadString, 'info')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (config.mrIcon1ScreensaverEntity.ScreensaverEntityValue != null) {
|
|
||||||
if (isNaN(getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val) == false) {
|
if (iconData[a].ScreensaverEntityValue != null) {
|
||||||
payloadString += (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val).toFixed(config.mrIcon1ScreensaverEntity.ScreensaverEntityValueDecimalPlace);
|
payloadString += iconData[a].ScreensaverEntityValue;
|
||||||
payloadString += (config.mrIcon1ScreensaverEntity.ScreensaverEntityValueUnit == null) ? '' : config.mrIcon1ScreensaverEntity.ScreensaverEntityValueUnit;
|
payloadString += (iconData[a].ScreensaverEntityValueUnit == null) ? '' : iconData[a].ScreensaverEntityValueUnit;
|
||||||
if (Debug) log('Value ist eine Zahl ' + payloadString, 'info')
|
}
|
||||||
} else {
|
|
||||||
payloadString += getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val
|
|
||||||
if (Debug) log('Value ist keine Zahl ' + payloadString, 'info')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
payloadString += '~' + rgb_dec565(hwBtn1Col) + '~';
|
|
||||||
} else if (typeof (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) == 'boolean') {
|
|
||||||
let hwBtn1: boolean = getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val;
|
|
||||||
if (hwBtn1) {
|
|
||||||
hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor;
|
|
||||||
}
|
|
||||||
if (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) {
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
|
|
||||||
} else {
|
|
||||||
if (config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff != null) {
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff);
|
|
||||||
} else {
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (config.mrIcon1ScreensaverEntity.ScreensaverEntityValue != null) {
|
|
||||||
if (isNaN(getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val) == false) {
|
|
||||||
payloadString += (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val).toFixed(config.mrIcon1ScreensaverEntity.ScreensaverEntityValueDecimalPlace);
|
|
||||||
payloadString += (config.mrIcon1ScreensaverEntity.ScreensaverEntityValueUnit == null) ? '' : config.mrIcon1ScreensaverEntity.ScreensaverEntityValueUnit;
|
|
||||||
} else {
|
|
||||||
payloadString += getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val
|
|
||||||
}
|
|
||||||
}
|
|
||||||
payloadString += '~' + rgb_dec565(hwBtn1Col) + '~';
|
payloadString += '~' + rgb_dec565(hwBtn1Col) + '~';
|
||||||
|
} else {
|
||||||
|
hwBtn1Col = Black;
|
||||||
|
payloadString += '~~';
|
||||||
}
|
}
|
||||||
} else if (config.mrIcon1ScreensaverEntity.ScreensaverEntity == null && config.mrIcon1ScreensaverEntity.ScreensaverEntityValue != null){
|
|
||||||
|
|
||||||
if(config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor != null){
|
|
||||||
hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor;
|
|
||||||
}
|
|
||||||
if(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn != null){
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.mrIcon1ScreensaverEntity.ScreensaverEntityValue != null) {
|
|
||||||
if (isNaN(getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val) == false) {
|
|
||||||
payloadString += (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val).toFixed(config.mrIcon1ScreensaverEntity.ScreensaverEntityValueDecimalPlace);
|
|
||||||
payloadString += (config.mrIcon1ScreensaverEntity.ScreensaverEntityValueUnit == null) ? '' : config.mrIcon1ScreensaverEntity.ScreensaverEntityValueUnit;
|
|
||||||
} else {
|
|
||||||
payloadString += getState(config.mrIcon1ScreensaverEntity.ScreensaverEntityValue).val
|
|
||||||
}
|
|
||||||
}
|
|
||||||
payloadString += '~' + rgb_dec565(hwBtn1Col) + '~';
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
hwBtn1Col = Black;
|
|
||||||
payloadString += '~~';
|
|
||||||
}
|
|
||||||
|
|
||||||
let hwBtn2Col: any = config.mrIcon2ScreensaverEntity.ScreensaverEntityOffColor;
|
|
||||||
if (config.mrIcon2ScreensaverEntity.ScreensaverEntity != null) {
|
|
||||||
if (typeof (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) == 'string') {
|
|
||||||
let hwBtn2: string = getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val;
|
|
||||||
if (hwBtn2 == 'ON') {
|
|
||||||
hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor;
|
|
||||||
}
|
|
||||||
if (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) {
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
|
|
||||||
} else {
|
|
||||||
if (config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff != null) {
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff);
|
|
||||||
} else {
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (config.mrIcon2ScreensaverEntity.ScreensaverEntityValue != null) {
|
|
||||||
if (isNaN(getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val) == false) {
|
|
||||||
payloadString += (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val).toFixed(config.mrIcon2ScreensaverEntity.ScreensaverEntityValueDecimalPlace);
|
|
||||||
payloadString += (config.mrIcon2ScreensaverEntity.ScreensaverEntityValueUnit == null) ? '' : config.mrIcon2ScreensaverEntity.ScreensaverEntityValueUnit;
|
|
||||||
} else {
|
|
||||||
payloadString += getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val
|
|
||||||
}
|
|
||||||
}
|
|
||||||
payloadString += '~' + rgb_dec565(hwBtn2Col) + '~';
|
|
||||||
} else if (typeof (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) == 'boolean') {
|
|
||||||
let hwBtn2: boolean = getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val;
|
|
||||||
if (hwBtn2) {
|
|
||||||
hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor;
|
|
||||||
}
|
|
||||||
if (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) {
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
|
|
||||||
} else {
|
|
||||||
if (config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff != null) {
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff);
|
|
||||||
} else {
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (config.mrIcon2ScreensaverEntity.ScreensaverEntityValue != null) {
|
|
||||||
if (isNaN(getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val) == false) {
|
|
||||||
payloadString += (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val).toFixed(config.mrIcon2ScreensaverEntity.ScreensaverEntityValueDecimalPlace);
|
|
||||||
payloadString += (config.mrIcon2ScreensaverEntity.ScreensaverEntityValueUnit == null) ? '' : config.mrIcon2ScreensaverEntity.ScreensaverEntityValueUnit;
|
|
||||||
} else {
|
|
||||||
payloadString += getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val
|
|
||||||
}
|
|
||||||
}
|
|
||||||
payloadString += '~' + rgb_dec565(hwBtn2Col) + '~';
|
|
||||||
}
|
|
||||||
} else if (config.mrIcon2ScreensaverEntity.ScreensaverEntity == null && config.mrIcon2ScreensaverEntity.ScreensaverEntityValue != null){
|
|
||||||
|
|
||||||
if(config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor != null){
|
|
||||||
hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn != null){
|
|
||||||
payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.mrIcon2ScreensaverEntity.ScreensaverEntityValue != null) {
|
|
||||||
if (isNaN(getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val) == false) {
|
|
||||||
payloadString += (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val).toFixed(config.mrIcon2ScreensaverEntity.ScreensaverEntityValueDecimalPlace);
|
|
||||||
payloadString += (config.mrIcon2ScreensaverEntity.ScreensaverEntityValueUnit == null) ? '' : config.mrIcon2ScreensaverEntity.ScreensaverEntityValueUnit;
|
|
||||||
} else {
|
|
||||||
payloadString += getState(config.mrIcon2ScreensaverEntity.ScreensaverEntityValue).val
|
|
||||||
}
|
|
||||||
}
|
|
||||||
payloadString += '~' + rgb_dec565(hwBtn2Col) + '~';
|
|
||||||
} else {
|
|
||||||
hwBtn2Col = Black;
|
|
||||||
payloadString += '~~';
|
|
||||||
}
|
|
||||||
|
|
||||||
let alternateScreensaverMFRIcon1Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.1').val
|
let alternateScreensaverMFRIcon1Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.1').val
|
||||||
let alternateScreensaverMFRIcon2Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.2').val
|
let alternateScreensaverMFRIcon2Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.2').val
|
||||||
//Alternate MRIcon Size
|
//Alternate MRIcon Size
|
||||||
@@ -9038,7 +9024,7 @@ function HandleScreensaverStatusIcons() : void {
|
|||||||
payloadString += '~';
|
payloadString += '~';
|
||||||
}
|
}
|
||||||
|
|
||||||
SendToPanel(<NSPanel.Payload>{ payload: 'statusUpdate~' + payloadString });
|
SendToPanel({ payload: 'statusUpdate~' + payloadString });
|
||||||
|
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
log('error at function HandleScreensaverStatusIcons: ' + err.message, 'warn');
|
log('error at function HandleScreensaverStatusIcons: ' + err.message, 'warn');
|
||||||
@@ -9115,25 +9101,27 @@ function HandleScreensaverColors(): void {
|
|||||||
scrSvrBGCol = rgb_dec565({ red: 100, green: 0, blue: 0 });
|
scrSvrBGCol = rgb_dec565({ red: 100, green: 0, blue: 0 });
|
||||||
}
|
}
|
||||||
|
|
||||||
let payloadString = 'color' + '~' +
|
let payloadString = buildNSPanelString(
|
||||||
scrSvrBGCol + '~' + //background
|
'color' ,
|
||||||
rgb_dec565(sctime) + '~' + //time
|
scrSvrBGCol , //background
|
||||||
rgb_dec565(sctimeAMPM) + '~' + //timeAMPM~
|
rgb_dec565(sctime) , //time
|
||||||
rgb_dec565(scdate) + '~' + //date~
|
rgb_dec565(sctimeAMPM) , //timeAMPM~
|
||||||
rgb_dec565(sctMainText) + '~' + //tMainText~
|
rgb_dec565(scdate) , //date~
|
||||||
rgb_dec565(sctForecast1) + '~' + //tForecast1~
|
rgb_dec565(sctMainText) , //tMainText~
|
||||||
rgb_dec565(sctForecast2) + '~' + //tForecast2~
|
rgb_dec565(sctForecast1) , //tForecast1~
|
||||||
rgb_dec565(sctForecast3) + '~' + //tForecast3~
|
rgb_dec565(sctForecast2) , //tForecast2~
|
||||||
rgb_dec565(sctForecast4) + '~' + //tForecast4~
|
rgb_dec565(sctForecast3) , //tForecast3~
|
||||||
rgb_dec565(sctForecast1Val) + '~' + //tForecast1Val~
|
rgb_dec565(sctForecast4) , //tForecast4~
|
||||||
rgb_dec565(sctForecast2Val) + '~' + //tForecast2Val~
|
rgb_dec565(sctForecast1Val) , //tForecast1Val~
|
||||||
rgb_dec565(sctForecast3Val) + '~' + //tForecast3Val~
|
rgb_dec565(sctForecast2Val) , //tForecast2Val~
|
||||||
rgb_dec565(sctForecast4Val) + '~' + //tForecast4Val~
|
rgb_dec565(sctForecast3Val) , //tForecast3Val~
|
||||||
rgb_dec565(scbar) + '~' + //bar~
|
rgb_dec565(sctForecast4Val) , //tForecast4Val~
|
||||||
rgb_dec565(sctMainTextAlt) + '~' + //tMainTextAlt
|
rgb_dec565(scbar) , //bar~
|
||||||
rgb_dec565(sctTimeAdd); //tTimeAdd
|
rgb_dec565(sctMainTextAlt) , //tMainTextAlt
|
||||||
|
rgb_dec565(sctTimeAdd) //tTimeAdd
|
||||||
|
);
|
||||||
|
|
||||||
SendToPanel(<NSPanel.Payload>{ payload: payloadString });
|
SendToPanel({ payload: payloadString });
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
log('error at function HandleScreensaverColors: '+ err.message, 'warn');
|
log('error at function HandleScreensaverColors: '+ err.message, 'warn');
|
||||||
}
|
}
|
||||||
@@ -9567,7 +9555,7 @@ function Interpolate(color1: RGB, color2: RGB, fraction: number): RGB {
|
|||||||
let r: number = InterpolateNum(color1.red, color2.red, fraction);
|
let r: number = InterpolateNum(color1.red, color2.red, fraction);
|
||||||
let g: number = InterpolateNum(color1.green, color2.green, fraction);
|
let g: number = InterpolateNum(color1.green, color2.green, fraction);
|
||||||
let b: number = InterpolateNum(color1.blue, color2.blue, fraction);
|
let b: number = InterpolateNum(color1.blue, color2.blue, fraction);
|
||||||
return <RGB>{ red: Math.round(r), green: Math.round(g), blue: Math.round(b) };
|
return { red: Math.round(r), green: Math.round(g), blue: Math.round(b) };
|
||||||
}
|
}
|
||||||
|
|
||||||
function InterpolateNum(d1: number, d2: number, fraction: number): number {
|
function InterpolateNum(d1: number, d2: number, fraction: number): number {
|
||||||
@@ -9704,6 +9692,14 @@ function spotifyGetDeviceID(vDeviceString: string): string {
|
|||||||
let strDevID = arrayDeviceListIds[indexPos];
|
let strDevID = arrayDeviceListIds[indexPos];
|
||||||
return strDevID;
|
return strDevID;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Join arguments with ~ and return the string;
|
||||||
|
* @param tokens unlimited numbers of strings
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
function buildNSPanelString(...tokens: (string|number)[]): string {
|
||||||
|
return tokens.join('~');
|
||||||
|
}
|
||||||
|
|
||||||
type RGB = NSPanel.RGB;
|
type RGB = NSPanel.RGB;
|
||||||
type PageItem = NSPanel.PageItem;
|
type PageItem = NSPanel.PageItem;
|
||||||
@@ -9835,12 +9831,24 @@ function isPageThermoItem(F: PageItem | NSPanel.PageThermoItem):F is NSPanel.Pag
|
|||||||
return 'popupThermoMode1' in F;
|
return 'popupThermoMode1' in F;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isPageMedia(F: NSPanel.PageType | NSPanel.PageMedia):F is NSPanel.PageMedia {
|
||||||
|
return F.type == 'cardMedia';
|
||||||
|
}
|
||||||
|
function isPagePower(F: NSPanel.PageType | NSPanel.PagePower):F is NSPanel.PagePower {
|
||||||
|
return F.type == 'cardPower';
|
||||||
|
}
|
||||||
|
|
||||||
namespace NSPanel {
|
namespace NSPanel {
|
||||||
export type PopupType = 'popupFan' | 'popupInSel' | 'popupLight' | 'popupLightNew' | 'popupNotify' | 'popupShutter' | 'popupThermo' | 'popupTimer'
|
export type PopupType = 'popupFan' | 'popupInSel' | 'popupLight' | 'popupLightNew' | 'popupNotify' | 'popupShutter' | 'popupThermo' | 'popupTimer'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export type EventMethod = 'startup' | 'sleepReached' | 'pageOpenDetail' | 'buttonPress2' | 'renderCurrentPage' | 'button1' | 'button2'
|
export type EventMethod = 'startup' | 'sleepReached' | 'pageOpenDetail' | 'buttonPress2' | 'renderCurrentPage' | 'button1' | 'button2'
|
||||||
|
export type panelRecvType = {
|
||||||
|
event: 'event';
|
||||||
|
method: EventMethod
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export type SerialType = 'button' | 'light' | 'shutter' | 'text' | 'input_sel' | 'timer' | 'number' | 'fan'
|
export type SerialType = 'button' | 'light' | 'shutter' | 'text' | 'input_sel' | 'timer' | 'number' | 'fan'
|
||||||
|
|
||||||
@@ -9894,48 +9902,49 @@ namespace NSPanel {
|
|||||||
|
|
||||||
export type PageEntities = {
|
export type PageEntities = {
|
||||||
type: 'cardEntities',
|
type: 'cardEntities',
|
||||||
items: PageItem[],
|
items: [PageItem?, PageItem?, PageItem?, PageItem?, PageItem?],
|
||||||
} & PageBaseType
|
} & PageBaseType
|
||||||
|
|
||||||
export type PageGrid = {
|
export type PageGrid = {
|
||||||
type: 'cardGrid',
|
type: 'cardGrid',
|
||||||
items: PageItem[],
|
items: [PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?],
|
||||||
} & PageBaseType
|
} & PageBaseType
|
||||||
|
|
||||||
export type PageGrid2 = {
|
export type PageGrid2 = {
|
||||||
type: 'cardGrid2',
|
type: 'cardGrid2',
|
||||||
items: PageItem[],
|
items: [PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?],
|
||||||
} & PageBaseType
|
} & PageBaseType
|
||||||
|
|
||||||
export type PageThermo = {
|
export type PageThermo = {
|
||||||
type: 'cardThermo',
|
type: 'cardThermo',
|
||||||
items: PageThermoItem[],
|
items: [PageThermoItem],
|
||||||
|
|
||||||
} & Omit<PageBaseType, 'useColor'>
|
} & Omit<PageBaseType, 'useColor'>
|
||||||
|
|
||||||
export type PageMedia = {
|
export type PageMedia = {
|
||||||
type: 'cardMedia',
|
type: 'cardMedia',
|
||||||
items: PageMediaItem[],
|
items: [PageMediaItem],
|
||||||
} & Omit<PageBaseType, 'useColor' | 'autoCreateAlias'>
|
} & Omit<PageBaseType, 'useColor' | 'autoCreateAlias'>
|
||||||
|
|
||||||
|
|
||||||
export type PageAlarm = {
|
export type PageAlarm = {
|
||||||
type: 'cardAlarm',
|
type: 'cardAlarm',
|
||||||
items: PageItem[],
|
items: [PageItem],
|
||||||
} & Omit<PageBaseType, 'useColor'>
|
} & Omit<PageBaseType, 'useColor'>
|
||||||
|
|
||||||
export type PageUnlock = {
|
export type PageUnlock = {
|
||||||
type: 'cardUnlock',
|
type: 'cardUnlock',
|
||||||
items: PageItem[],
|
items: [PageItem],
|
||||||
} & Omit<PageBaseType, 'useColor'> & Partial<Pick<PageBaseType, 'useColor'>>
|
} & Omit<PageBaseType, 'useColor'> & Partial<Pick<PageBaseType, 'useColor'>>
|
||||||
|
|
||||||
export type PageQR = {
|
export type PageQR = {
|
||||||
type: 'cardQR',
|
type: 'cardQR',
|
||||||
items: PageItem[],
|
items: [PageItem],
|
||||||
} & Omit<PageBaseType, 'useColor'>
|
} & Omit<PageBaseType, 'useColor'>
|
||||||
|
|
||||||
export type PagePower = {
|
export type PagePower = {
|
||||||
type: 'cardPower',
|
type: 'cardPower',
|
||||||
items: PageItem[],
|
items: [PageItem],
|
||||||
} & Omit<PageBaseType, 'useColor'>
|
} & Omit<PageBaseType, 'useColor'>
|
||||||
|
|
||||||
export type PageChart = {
|
export type PageChart = {
|
||||||
@@ -10077,6 +10086,7 @@ namespace NSPanel {
|
|||||||
export type ScreenSaverMRElement = {
|
export type ScreenSaverMRElement = {
|
||||||
ScreensaverEntity: string | null,
|
ScreensaverEntity: string | null,
|
||||||
ScreensaverEntityIconOn: string | null,
|
ScreensaverEntityIconOn: string | null,
|
||||||
|
ScreensaverEntityIconSelect?: {[key: string]: string} | null | undefined,
|
||||||
ScreensaverEntityIconOff: string | null,
|
ScreensaverEntityIconOff: string | null,
|
||||||
ScreensaverEntityValue: string | null,
|
ScreensaverEntityValue: string | null,
|
||||||
ScreensaverEntityValueDecimalPlace: number | null,
|
ScreensaverEntityValueDecimalPlace: number | null,
|
||||||
@@ -10084,6 +10094,17 @@ namespace NSPanel {
|
|||||||
ScreensaverEntityOnColor: RGB,
|
ScreensaverEntityOnColor: RGB,
|
||||||
ScreensaverEntityOffColor: RGB
|
ScreensaverEntityOffColor: RGB
|
||||||
}
|
}
|
||||||
|
export type ScreenSaverMRDataElement = {
|
||||||
|
ScreensaverEntity: string | number | boolean | null,
|
||||||
|
ScreensaverEntityIconOn: string | null,
|
||||||
|
ScreensaverEntityIconOff: string | null,
|
||||||
|
ScreensaverEntityValue: string | number | boolean | null,
|
||||||
|
ScreensaverEntityValueDecimalPlace: number | null,
|
||||||
|
ScreensaverEntityValueUnit: string | null,
|
||||||
|
ScreensaverEntityOnColor: RGB,
|
||||||
|
ScreensaverEntityOffColor: RGB
|
||||||
|
ScreensaverEntityIconSelect: {[key: string]: string} | null,
|
||||||
|
}
|
||||||
|
|
||||||
export type IconScaleElement = {
|
export type IconScaleElement = {
|
||||||
val_min:number,
|
val_min:number,
|
||||||
|
|||||||
Reference in New Issue
Block a user