diff --git a/ioBroker/NsPanelTs.ts b/ioBroker/NsPanelTs.ts index acd3ffa9..34626e77 100644 --- a/ioBroker/NsPanelTs.ts +++ b/ioBroker/NsPanelTs.ts @@ -2769,14 +2769,12 @@ function check_online_display_firmware() { } } -//mqttCallback (topic: string, message: string): Promise { on({ id: config.panelRecvTopic }, async (obj) => { if (obj.state.val.startsWith('\{"CustomRecv":')) { try { - const json = JSON.parse(obj.state.val); - const split = json.CustomRecv.split(','); if (isSetOptionActive) { - + let json = JSON.parse(obj.state.val); + let split = json.CustomRecv.split(','); if (split[0] == 'event' && split[1] == 'startup') { await createStateAsync(NSPanel_Path + 'Display_Firmware.currentVersion', { type: 'string' }); await createStateAsync(NSPanel_Path + 'NSPanel_Version', { type: 'string' }); @@ -2792,11 +2790,9 @@ on({ id: config.panelRecvTopic }, async (obj) => { } } } - HandleMessage(split[0], split[1], parseInt(split[2]), split); } catch (err: any) { log('error at trigger rceiving CustomRecv: ' + err.message, 'warn'); } - } }); @@ -2919,7 +2915,7 @@ function update_tasmota_firmware() { log('error request in function update_tasmota_firmware: ' + err.message, 'warn'); } } -//mqttCallback (topic: string, message: string): Promise { + on({ id: config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'INFO1', change: 'ne'}, async (obj) => { try { if (getState(NSPanel_Path + 'Config.Update.activ').val == 0) { @@ -2940,6 +2936,23 @@ on({ id: config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESU //------------------End Update Functions +on({ id: config.panelRecvTopic, change: 'any' }, async function (obj) { + try { + if (obj.state.val.startsWith('\{"CustomRecv":')) { + try { + let json = JSON.parse(obj.state.val); + + let split = json.CustomRecv.split(','); + HandleMessage(split[0], split[1], parseInt(split[2]), split); + } catch (err: any) { + log('error json.split in Trigger panelRecTopic: ' + err.message, 'warn'); + } + } + } catch (err: any) { + log('error at Trigger panelRecTopic: ' + err.message, 'warn'); + } +}); + async function SendToPanel(val: Payload | Payload[]) { try { if (Array.isArray(val)) { @@ -3303,6 +3316,17 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = let buttonText: string = 'PRESS'; let type: string; + if (pageItem.id && existsState(pageItem.id + '.ACTUAL') == false) { + if (pageItem.popupTimerType == 'TimeCard' && pageItem.autoCreateALias == true) { + log(NSPanel_Path + 'Userdata.' + pageItem.id + '.Time') + createStateAsync(NSPanel_Path + 'Userdata.' + pageItem.id + '.Time', '0', { type: 'number' }); + createStateAsync(NSPanel_Path + 'Userdata.' + pageItem.id + '.State', 'idle', { type: 'string' }); + setObject(pageItem.id, { type: 'channel', common: { role: 'value.time', name: 'Time' }, native: {} }); + createAliasAsync(pageItem.id + '.ACTUAL', NSPanel_Path + 'Userdata.' + pageItem.id + '.Time', true, { type: 'number', role: 'state', name: 'ACTUAL' }); + createAliasAsync(pageItem.id + '.STATE', NSPanel_Path + 'Userdata.' + pageItem.id + '.State', true, { type: 'string', role: 'state', name: 'STATE' }); + } + } + // ioBroker if (pageItem.id && existsObject(pageItem.id) || pageItem.navigate === true) { @@ -8279,67 +8303,65 @@ function HandleScreensaverUpdate(): void { } // 3 leftScreensaverEntities - if (screensaverAdvanced) { + if (screensaverAdvanced) { let checkpoint = true; let i = 0; - if (config.leftScreensaverEntity && Array.isArray(config.leftScreensaverEntity)) { - for (i = 0; i < 3; i++) { - const leftScreensaverEntity = config.leftScreensaverEntity[i] - if (leftScreensaverEntity === null || leftScreensaverEntity === undefined) { - checkpoint = false; - break;; - } - RegisterScreensaverEntityWatcher(leftScreensaverEntity.ScreensaverEntity) - - let val = getState(leftScreensaverEntity.ScreensaverEntity).val; - let iconColor = rgb_dec565(White); - let icon; - if (typeof leftScreensaverEntity.ScreensaverEntityIconOn == 'string' && existsObject(leftScreensaverEntity.ScreensaverEntityIconOn as string)) { - let iconName = getState(leftScreensaverEntity.ScreensaverEntityIconOn!).val; - icon = Icons.GetIcon(iconName); - } else { - icon = Icons.GetIcon(leftScreensaverEntity.ScreensaverEntityIconOn); - } - - if (parseFloat(val + "") == val) { - val = parseFloat(val); - } - - if (typeof (val) == 'number') { - val = (val * (leftScreensaverEntity.ScreensaverEntityFactor ? leftScreensaverEntity.ScreensaverEntityFactor! : 0)).toFixed(leftScreensaverEntity.ScreensaverEntityDecimalPlaces) + leftScreensaverEntity.ScreensaverEntityUnitText; - iconColor = GetScreenSaverEntityColor(leftScreensaverEntity); - } - else if (typeof (val) == 'boolean') { - iconColor = GetScreenSaverEntityColor(leftScreensaverEntity); - if (!val && leftScreensaverEntity.ScreensaverEntityIconOff != null) { - icon = Icons.GetIcon(leftScreensaverEntity.ScreensaverEntityIconOff) - } - } - else if (typeof (val) == 'string') { - iconColor = GetScreenSaverEntityColor(leftScreensaverEntity); - let pformat = parseFormat(val); - if (Debug) log('moments.js --> Datum ' + val + ' valid?: ' + moment(val, pformat, true).isValid(), 'info'); - if (moment(val, pformat, true).isValid()) { - let DatumZeit = moment(val, pformat).unix(); // Umwandlung in Unix Time-Stamp - if (leftScreensaverEntity.ScreensaverEntityDateFormat !== undefined) { - val = new Date(DatumZeit * 1000).toLocaleString(getState(NSPanel_Path + 'Config.locale').val, leftScreensaverEntity.ScreensaverEntityDateFormat); - } else { - val = new Date(DatumZeit * 1000).toLocaleString(getState(NSPanel_Path + 'Config.locale').val); - } - } - } - const temp = leftScreensaverEntity.ScreensaverEntityIconColor; - if (temp && typeof temp == 'string' && existsObject(temp)) { - iconColor = getState(temp).val; - } - - payloadString += '~' + - '~' + - icon + '~' + - iconColor + '~' + - leftScreensaverEntity.ScreensaverEntityText + '~' + - val + '~'; + for (i = 0; i < 3; i++) { + + if (config.leftScreensaverEntity[i] == null || config.leftScreensaverEntity[i] == undefined) { + checkpoint = false; + break; } + RegisterScreensaverEntityWatcher(config.leftScreensaverEntity[i].ScreensaverEntity) + + let val = getState(config.leftScreensaverEntity[i].ScreensaverEntity).val; + let iconColor = rgb_dec565(White); + let icon; + if (typeof config.leftScreensaverEntity[i].ScreensaverEntityIconOn == 'string' && existsObject(config.leftScreensaverEntity[i].ScreensaverEntityIconOn as string)) { + let iconName = getState(config.leftScreensaverEntity[i].ScreensaverEntityIconOn!).val; + icon = Icons.GetIcon(iconName); + } else { + icon = Icons.GetIcon(config.leftScreensaverEntity[i].ScreensaverEntityIconOn); + } + + if (parseFloat(val+"") == val) { + val = parseFloat(val); + } + + if (typeof(val) == 'number') { + val = (val * (config.leftScreensaverEntity[i].ScreensaverEntityFactor ? config.leftScreensaverEntity[i].ScreensaverEntityFactor! : 0)).toFixed(config.leftScreensaverEntity[i].ScreensaverEntityDecimalPlaces) + config.leftScreensaverEntity[i].ScreensaverEntityUnitText; + iconColor = GetScreenSaverEntityColor(config.leftScreensaverEntity[i]); + } + else if (typeof(val) == 'boolean') { + iconColor = GetScreenSaverEntityColor(config.leftScreensaverEntity[i]); + if (!val && config.leftScreensaverEntity[i].ScreensaverEntityIconOff != null) { + icon = Icons.GetIcon(config.leftScreensaverEntity[i].ScreensaverEntityIconOff) + } + } + else if (typeof(val) == 'string') { + iconColor = GetScreenSaverEntityColor(config.leftScreensaverEntity[i]); + let pformat = parseFormat(val); + if (Debug) log('moments.js --> Datum ' + val + ' valid?: ' + moment(val, pformat, true).isValid(), 'info'); + if (moment(val, pformat, true).isValid()) { + let DatumZeit = moment(val, pformat).unix(); // Umwandlung in Unix Time-Stamp + if (config.leftScreensaverEntity[i].ScreensaverEntityDateFormat !== undefined) { + val = new Date(DatumZeit * 1000).toLocaleString(getState(NSPanel_Path + 'Config.locale').val, config.leftScreensaverEntity[i].ScreensaverEntityDateFormat); + } else { + val = new Date(DatumZeit * 1000).toLocaleString(getState(NSPanel_Path + 'Config.locale').val); + } + } + } + const temp = config.leftScreensaverEntity[i].ScreensaverEntityIconColor; + if (temp && typeof temp == 'string' && existsObject(temp)) { + iconColor = getState(temp).val; + } + + payloadString += '~' + + '~' + + icon + '~' + + iconColor + '~' + + config.leftScreensaverEntity[i].ScreensaverEntityText + '~' + + val + '~'; } if (checkpoint == false) { for (let j = i; j < 3; j++) { @@ -8447,7 +8469,7 @@ function HandleScreensaverUpdate(): void { } //Alternativ Layout bekommt zusätzlichen Status - if (config.bottomScreensaverEntity[4] && getState(NSPanel_Path + 'Config.Screensaver.alternativeScreensaverLayout').val) { + if (getState(NSPanel_Path + 'Config.Screensaver.alternativeScreensaverLayout').val) { let val = getState(config.bottomScreensaverEntity[4].ScreensaverEntity).val; if (parseFloat(val+"") == val) { val = parseFloat(val); @@ -8566,38 +8588,37 @@ function HandleScreensaverUpdate(): void { // 5 indicatorScreensaverEntities for (let i = 0; i < 5; i++) { let checkpoint = true; - const indicatorScreensaverEntity:ScreenSaverElementWithUndefined = config.indicatorScreensaverEntity[i]; - if (indicatorScreensaverEntity == null) { + if (config.indicatorScreensaverEntity[i] == null) { checkpoint = false; break; } - RegisterScreensaverEntityWatcher(indicatorScreensaverEntity.ScreensaverEntity) + RegisterScreensaverEntityWatcher(config.indicatorScreensaverEntity[i].ScreensaverEntity) - let val = getState(indicatorScreensaverEntity.ScreensaverEntity).val; + let val = getState(config.indicatorScreensaverEntity[i].ScreensaverEntity).val; if (parseFloat(val+"") == val) { val = parseFloat(val); } let iconColor = rgb_dec565(White); let icon; - if (indicatorScreensaverEntity.ScreensaverEntityIconOn && existsObject(indicatorScreensaverEntity.ScreensaverEntityIconOn!)) { - let iconName = getState(indicatorScreensaverEntity.ScreensaverEntityIconOn!).val; + if (config.indicatorScreensaverEntity[i].ScreensaverEntityIconOn && existsObject(config.indicatorScreensaverEntity[i].ScreensaverEntityIconOn!)) { + let iconName = getState(config.indicatorScreensaverEntity[i].ScreensaverEntityIconOn!).val; icon = Icons.GetIcon(iconName); } else { - icon = Icons.GetIcon(indicatorScreensaverEntity.ScreensaverEntityIconOn); + icon = Icons.GetIcon(config.indicatorScreensaverEntity[i].ScreensaverEntityIconOn); } if (typeof(val) == 'number') { - val = (val * (indicatorScreensaverEntity.ScreensaverEntityFactor ? indicatorScreensaverEntity.ScreensaverEntityFactor! : 0)).toFixed(indicatorScreensaverEntity.ScreensaverEntityDecimalPlaces) + indicatorScreensaverEntity.ScreensaverEntityUnitText; - iconColor = GetScreenSaverEntityColor(indicatorScreensaverEntity); + val = (val * (config.indicatorScreensaverEntity[i].ScreensaverEntityFactor ? config.indicatorScreensaverEntity[i].ScreensaverEntityFactor! : 0)).toFixed(config.indicatorScreensaverEntity[i].ScreensaverEntityDecimalPlaces) + config.indicatorScreensaverEntity[i].ScreensaverEntityUnitText; + iconColor = GetScreenSaverEntityColor(config.indicatorScreensaverEntity[i]); } else if (typeof(val) == 'boolean') { - iconColor = GetScreenSaverEntityColor(indicatorScreensaverEntity); - if (!val && indicatorScreensaverEntity.ScreensaverEntityIconOff != null) { - icon = Icons.GetIcon(indicatorScreensaverEntity.ScreensaverEntityIconOff) + iconColor = GetScreenSaverEntityColor(config.indicatorScreensaverEntity[i]); + if (!val && config.indicatorScreensaverEntity[i].ScreensaverEntityIconOff != null) { + icon = Icons.GetIcon(config.indicatorScreensaverEntity[i].ScreensaverEntityIconOff) } } - const temp = indicatorScreensaverEntity.ScreensaverEntityIconColor + const temp = config.indicatorScreensaverEntity[4].ScreensaverEntityIconColor if (temp && typeof temp == 'string' && existsObject(temp)) { iconColor = getState(temp).val; } @@ -8605,7 +8626,7 @@ function HandleScreensaverUpdate(): void { '~' + icon + '~' + iconColor + '~' + - indicatorScreensaverEntity.ScreensaverEntityText + '~' + + config.indicatorScreensaverEntity[i].ScreensaverEntityText + '~' + val + '~'; } } @@ -9257,7 +9278,6 @@ function GetDasWetterIconColor(icon: number): number { } //------------------Begin Read Internal Sensor Data -//mqttCallback (topic: string, message: string): Promise { on({ id: config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESULT'.length) + 'SENSOR' }, async (obj) => { try { const Tasmota_Sensor = JSON.parse(obj.state.val); @@ -9596,7 +9616,7 @@ type PageBaseItem = { unit?: string, navigate?: boolean, colormode?: string, - colorScale?: IconScaleElement, + colorScale?: any, //adapterPlayerInstance?: adapterPlayerInstanceType, mediaDevice?: string, targetPage?: string, @@ -9624,12 +9644,15 @@ type PageBaseItem = { yAxis?: string, yAxisTicks?: number[] | string, xAxisDecorationId?: string, + popupType?: string, + popupOptions?: string[], useValue?: boolean, monobutton?: boolean, inSel_ChoiceState?: boolean, iconArray?: string[], fontSize?: number, actionStringArray?: string[], + popupTimerType?: string, alwaysOnDisplay?: boolean, crossfade?: boolean, } @@ -9653,9 +9676,9 @@ type Config = { panelRecvTopic: string, panelSendTopic: string, weatherEntity: string, - leftScreensaverEntity: leftScreensaverEntityType + leftScreensaverEntity: ScreenSaverElement[], bottomScreensaverEntity: ScreenSaverElement[], - indicatorScreensaverEntity: indicatorScreensaverEntityType + indicatorScreensaverEntity: ScreenSaverElement[], mrIcon1ScreensaverEntity: ScreenSaverMRElement, mrIcon2ScreensaverEntity: ScreenSaverMRElement, defaultColor: RGB, @@ -9667,18 +9690,16 @@ type Config = { button1: ConfigButtonFunction, button2: ConfigButtonFunction } -type leftScreensaverEntityType = [ScreenSaverElementWithUndefined, ScreenSaverElementWithUndefined, ScreenSaverElementWithUndefined] | []; -type indicatorScreensaverEntityType = [ScreenSaverElementWithUndefined, ScreenSaverElementWithUndefined, ScreenSaverElementWithUndefined, ScreenSaverElementWithUndefined, ScreenSaverElementWithUndefined] | []; -type ScreenSaverElementWithUndefined = null | undefined | ScreenSaverElement + type ScreenSaverElement = { ScreensaverEntity: string, - ScreensaverEntityText: string, ScreensaverEntityFactor?: number, ScreensaverEntityDecimalPlaces?: number, - ScreensaverEntityDateFormat?: Intl.DateTimeFormatOptions, + ScreensaverEntityDateFormat?: any | null, ScreensaverEntityIconOn?: string | null, ScreensaverEntityIconOff?: string | null, - ScreensaverEntityUnitText?: string, + ScreensaverEntityText: string, + ScreensaverEntityUnitText?: string | null, ScreensaverEntityIconColor?: RGB | IconScaleElement | string ScreensaverEntityOnColor?: RGB ScreensaverEntityOffColor?: RGB