v.4.4.0.7 - Fix: first start and initialisation with new NSPanel device (by wolwin)

https://github.com/joBr99/nspanel-lovelace-ui/pull/1263
This commit is contained in:
Armilar
2024-10-09 23:12:42 +02:00
committed by GitHub
parent c864eb6e73
commit 4f17085a81

View File

@@ -1,5 +1,5 @@
/*-----------------------------------------------------------------------
TypeScript v4.4.0.6 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @ticaki / @Britzelpuf / @Sternmiere / @ravenS0ne
TypeScript v4.4.0.7 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @ticaki / @Britzelpuf / @Sternmiere / @ravenS0ne
- abgestimmt auf TFT 53 / v4.4.0 / BerryDriver 9 / Tasmota 14.2.0
@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
@@ -31,8 +31,8 @@ https://github.com/joBr99/nspanel-lovelace-ui/wiki/iobroker---Basisinstallation#
ReleaseNotes:
Bugfixes und Erweiterungen:
See ChangeLog all Release Notes: https://github.com/joBr99/nspanel-lovelace-ui/wiki/Release-Notes
See ChangeLog all Release Notes: https://github.com/joBr99/nspanel-lovelace-ui/wiki/Release-Notes
- 08.11.2023 - v4.3.3 Upgrade TFT 53 / 4.3.3
- 11.11.2023 - v4.3.3.1 Fix for Issues #1020 HandleHardwareButton buttonConfig.mode -> 'toggle' and 'set'
- 12.11.2023 - v4.3.3.2 Add autoCreateALias to cardUnlock
@@ -40,7 +40,7 @@ ReleaseNotes:
- 13.11.2023 - v4.3.3.3 if setOption = false, do not create autoAlias (Functional/Servicemenu) and Datapoints
- 15.11.2023 - v4.3.3.4 New Service Page -> ioBroker Info
- 16.11.2023 - v4.3.3.5 Add Multilingualism to Service Menu (39 languages)
- 17.11.2023 - v4.3.3.5 Add Multilingualism to cardUnlock, cardQR, popupFan, popupTimer (39 languages)
- 17.11.2023 - v4.3.3.5 Add Multilingualism to cardUnlock, cardQR, popupFan, popupTimer (39 languages)
- 18.11.2023 - v4.3.3.6 Add autoCreateALias to PageAlarm
- 20.11.2023 - v4.3.3.6 Add actionStringArray to PageAlarm
- 20.11.2023 - v4.3.3.6 Add Multilingualism to cardAlarm (39 languages)
@@ -116,7 +116,7 @@ ReleaseNotes:
- 09.02.2024 - v4.3.3.42 Spotify Media-Player: Dynamic loading of the speaker list, playlist, tracklist, fix repeat, add seek, add elapsed/duration
- 10.02.2024 - v4.3.3.42 Spotify Minor Fixes; Add miValue / maxValue to Volume-Slider
- 10.02.2024 - v4.3.3.43 Fix: cardGrid2 => 9 Entities for Layout 'us-p' issue #1167
- 11.02.2024 - v4.3.3.43 Fix VolumeSlider
- 11.02.2024 - v4.3.3.43 Fix VolumeSlider
- 05.05.2024 - v4.3.3.44 Fix MQTT-Port-check
- 13.05.2024 - v4.4.0.0 TFT 54 / 4.4.0
- 19.05.2024 - v4.4.0.1 TFT 53 / 4.4.0
@@ -124,12 +124,13 @@ ReleaseNotes:
- 13.06.2024 - v4.4.0.3 Check prefix '.tele.' in config.NSPanelReceiveTopic
- 13.09.2024 - v4.4.0.4 New Feature: Hidden Carts
- 18.09.2024 - v4.4.0.5 Remove day.JS
- 19.09.2024 - v4.4.0.6 Check Ports with mqtt.X and mqtt-client.X
- 19.09.2024 - v4.4.0.6 Check Ports with mqtt.X and mqtt-client.X
- 27.09.2024 - v4.4.0.6 Fix: Using MQTT adapter or MQTT-CLIENT adapter / Minor Fix by wolwin
- 09.10.2024 - v4.4.0.7 Fix: first start and initialisation with new NSPanel device - Fix by wolwin
Todo:
- XX.12.2024 - v5.0.0 ioBroker Adapter
***************************************************************************************************************
* DE: Für die Erstellung der Aliase durch das Skript, muss in der JavaScript Instanz "setObject" gesetzt sein! *
* EN: In order for the script to create the aliases, “setObject” must be set in the JavaScript instance! *
@@ -271,7 +272,7 @@ let Debug: boolean = false;
// DE: Mögliche Wetteradapter 'accuweather.0.' oder 'daswetter.0.'
// EN: Possible weather adapters 'accuweather.0.' or 'the weather.0.'
const weatherAdapterInstance: string = 'accuweather.0.';
// DE: Mögliche Werte: 'Min', 'Max' oder 'MinMax' im Screensaver
// EN: Possible values: 'Min', 'Max' or 'MinMax' in the screensaver
const weatherScreensaverTempMinMax: string = 'MinMax';
@@ -400,8 +401,8 @@ let Debug: boolean = false;
//-- Anfang für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich ----------------
//-- Start for your own pages -- some self-defined aliases required ----------------
//-- https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Page-%E2%80%90-Typen_How-2_Beispiele
//-- https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Page-%E2%80%90-Typen_How-2_Beispiele
//-- ENDE für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich -------------------------
//-- END for your own pages -- some self-defined aliases required ------------------------
@@ -995,7 +996,7 @@ export const config: Config = {
// _________________________________ DE: Ab hier keine Konfiguration mehr _____________________________________
// _________________________________ EN: No more configuration from here _____________________________________
const scriptVersion: string = 'v4.4.0.6';
const scriptVersion: string = 'v4.4.0.7';
const tft_version: string = 'v4.4.0';
const desired_display_firmware_version = 53;
const berry_driver_version = 9;
@@ -1008,14 +1009,23 @@ let vwIconColor: number[] = [];
let weatherForecast: boolean;
let pageCounter: number = 0;
let alwaysOn: boolean = false;
let valueHiddenCards = getState(NSPanel_Path + 'Config.hiddenCards').val;
let valueHiddenCards: boolean = false;
if ( existsState(NSPanel_Path + 'Config.hiddenCards')) {
valueHiddenCards = getState(NSPanel_Path + 'Config.hiddenCards').val;
}
let buttonToggleState: { [key: string]: boolean } = {};
const axios = require('axios');
const moment = require('moment');
const parseFormat = require('moment-parseformat');
moment.locale(getState(NSPanel_Path + 'Config.locale').val);
let firstRun: boolean = false;
if ( existsState(NSPanel_Path + 'Config.locale')) {
moment.locale(getState(NSPanel_Path + 'Config.locale').val);
} else {
moment.locale('en-US');
firstRun = true;
}
const scheduleList: { [key: string]: any } = {};
@@ -1023,6 +1033,8 @@ const globalTextColor: any = White;
const Sliders2: number = 0;
let checkBlindActive: boolean = false;
log('--- start of NsPanelTs: ' + NSPanel_Path + ' ---', 'info');
async function Init_momentjs() {
try {
@@ -1067,6 +1079,7 @@ async function CheckConfigParameters() {
if (config.panelRecvTopic.indexOf('.tele.') < 0) {
log('Config-Parameter: << config.panelRecvTopic - ' + config.panelRecvTopic + ' >> does not refer to the prefix .tele. Please Check Parameters!', 'error');
}
if (existsObject(config.panelSendTopic) == false) {
const n = config.panelSendTopic.split('.');
const a = n.shift();
@@ -1125,10 +1138,10 @@ async function CheckConfigParameters() {
}
});
if (config.mrIcon1ScreensaverEntity.ScreensaverEntity != null && existsObject(config.mrIcon1ScreensaverEntity.ScreensaverEntity) == false) {
log('mrIcon1ScreensaverEntity data point in the config not available - please adjust', 'warn');
if ( existsState(NSPanel_Path + 'Config')) log('mrIcon1ScreensaverEntity data point in the config not available - please adjust', 'warn');
}
if (config.mrIcon2ScreensaverEntity.ScreensaverEntity != null && existsObject(config.mrIcon2ScreensaverEntity.ScreensaverEntity) == false) {
log('mrIcon2ScreensaverEntity data point in the config not available - please adjust', 'warn');
if ( existsState(NSPanel_Path + 'Config')) log('mrIcon2ScreensaverEntity data point in the config not available - please adjust', 'warn');
}
if (CheckEnableSetObject()) {
log('setObjects enabled - create Alias Channels possible', 'info');
@@ -1162,7 +1175,7 @@ async function InitIoBrokerInfo() {
name: 'ACTUAL',
});
// ScriptName
await createStateAsync(NSPanel_Path + 'IoBroker.ScriptName', 'v' + javaScriptVersion, { type: 'string', write: false });
await createStateAsync(NSPanel_Path + 'IoBroker.ScriptName', 'v' + NSPanel_Path + 'IoBroker.ScriptName', { type: 'string', write: false });
setObject(AliasPath + 'IoBroker.ScriptName', { type: 'channel', common: { role: 'info', name: 'Scriptname' }, native: {} });
await createAliasAsync(AliasPath + 'IoBroker.ScriptName.ACTUAL', NSPanel_Path + 'IoBroker.ScriptName', true, <iobJS.StateCommon>{ type: 'string', role: 'state', name: 'ACTUAL' });
}
@@ -1259,17 +1272,18 @@ async function CheckMQTTPorts() {
log('error at function CheckMQTTPorts: ' + err.message, 'warn');
}
}
CheckMQTTPorts();
async function Init_Release() {
const FWVersion = [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56];
const FWRelease = ['3.3.1', '3.4.0', '3.5.0', '3.5.X', '3.6.0', '3.7.3', '3.8.0', '3.8.3', '3.9.4', '4.0.5', '4.1.4', '4.2.1', '4.4.0', '4.4.0', '4.5.0', '4.6.0'];
const FWVersion = [0, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56];
const FWRelease = ['0', '3.3.1', '3.4.0', '3.5.0', '3.5.X', '3.6.0', '3.7.3', '3.8.0', '3.8.3', '3.9.4', '4.0.5', '4.1.4', '4.2.1', '4.4.0', '4.4.0', '4.5.0', '4.6.0'];
try {
if (existsObject(NSPanel_Path + 'Display_Firmware.desiredVersion') == false) {
await createStateAsync(NSPanel_Path + 'Display_Firmware.desiredVersion', desired_display_firmware_version, { type: 'number', write: false });
// if 'desiredVersion' as a string: await createStateAsync(NSPanel_Path + 'Display_Firmware.desiredVersion', String(desired_display_firmware_version), { type: 'string', write: false });
} else {
await setStateAsync(NSPanel_Path + 'Display_Firmware.desiredVersion', desired_display_firmware_version, true);
// if 'desiredVersion' as a string: await setStateAsync(NSPanel_Path + 'Display_Firmware.desiredVersion', String(desired_display_firmware_version), true);
}
if (existsObject(NSPanel_Path + 'Config.Update.activ') == false) {
@@ -1291,7 +1305,7 @@ async function Init_Release() {
//Create TFT DP's
if (isSetOptionActive) {
await createStateAsync(NSPanel_Path + 'Display_Firmware.TFT.currentVersion', currentFW + ' / v' + FWRelease[findFWIndex], { type: 'string', write: false });
await createStateAsync(NSPanel_Path + 'Display_Firmware.TFT.desiredVersion', desired_display_firmware_version, { type: 'string', write: false });
await createStateAsync(NSPanel_Path + 'Display_Firmware.TFT.desiredVersion', String(desired_display_firmware_version), { type: 'string', write: false });
setObject(AliasPath + 'Display_Firmware.TFT.currentVersion', { type: 'channel', common: { role: 'info', name: 'current TFT-Version' }, native: {} });
setObject(AliasPath + 'Display_Firmware.TFT.desiredVersion', { type: 'channel', common: { role: 'info', name: 'desired TFT-Version' }, native: {} });
await createAliasAsync(AliasPath + 'Display_Firmware.TFT.currentVersion.ACTUAL', NSPanel_Path + 'Display_Firmware.TFT.currentVersion', true, <iobJS.StateCommon>{
@@ -1308,7 +1322,7 @@ async function Init_Release() {
} else {
//Create TFT DP's
await setStateAsync(NSPanel_Path + 'Display_Firmware.TFT.currentVersion', currentFW + ' / v' + FWRelease[findFWIndex], true);
await setStateAsync(NSPanel_Path + 'Display_Firmware.TFT.desiredVersion', desired_display_firmware_version + ' / ' + tft_version, true);
await setStateAsync(NSPanel_Path + 'Display_Firmware.TFT.desiredVersion', String(desired_display_firmware_version) + ' / ' + tft_version, true);
}
} catch (err: any) {
log('error at function Init_Release: ' + err.message, 'warn');
@@ -1666,7 +1680,11 @@ InitActiveBrightness();
on({ id: [NSPanel_Path + 'ScreensaverInfo.activeBrightness'], change: 'ne' }, async function (obj) {
try {
let active = getState(NSPanel_Path + 'ScreensaverInfo.activeDimmodeBrightness').val ?? -1;
let dimBrightness:number = -1;
if (existsState(NSPanel_Path + 'ScreensaverInfo.activeDimmodeBrightness')) {
dimBrightness = getState(NSPanel_Path + 'ScreensaverInfo.activeDimmodeBrightness').val;
}
let active = dimBrightness ?? -1;
if (obj.state.val >= 0 || obj.state.val <= 100) {
log('action at trigger activeBrightness: ' + obj.state.val + ' - activeDimmodeBrightness: ' + active, 'info');
SendToPanel({ payload: 'dimmode~' + active + '~' + obj.state.val + '~' + rgb_dec565(config.defaultBackgroundColor) + '~' + rgb_dec565(globalTextColor) + '~' + Sliders2 });
@@ -1679,7 +1697,11 @@ on({ id: [NSPanel_Path + 'ScreensaverInfo.activeBrightness'], change: 'ne' }, as
on({ id: [NSPanel_Path + 'ScreensaverInfo.activeDimmodeBrightness'], change: 'ne' }, async function (obj) {
try {
let active = getState(NSPanel_Path + 'ScreensaverInfo.activeBrightness').val ?? 80;
let brightness:number = 100;
if (existsState(NSPanel_Path + 'ScreensaverInfo.activeBrightness')) {
brightness = getState(NSPanel_Path + 'ScreensaverInfo.activeBrightness').val;
}
let active = brightness ?? 80;
if (obj.state.val != null && obj.state.val != -1) {
if (obj.state.val < -1 || obj.state.val > 100) {
log('activeDimmodeBrightness value only between -1 and 100', 'info');
@@ -1709,7 +1731,11 @@ on({ id: [NSPanel_Path + 'ScreensaverInfo.activeDimmodeBrightness'], change: 'ne
on({ id: String(NSPanel_Path) + 'ScreensaverInfo.Trigger_Dimmode', change: 'ne' }, async function (obj) {
try {
let active = getState(NSPanel_Path + 'ScreensaverInfo.activeBrightness').val ?? 80;
let brightness:number = 100;
if (existsState(NSPanel_Path + 'ScreensaverInfo.activeBrightness')) {
brightness = getState(NSPanel_Path + 'ScreensaverInfo.activeBrightness').val;
}
let active = brightness ?? 80;
if (obj.state.val) {
SendToPanel({ payload: 'dimmode~' + 100 + '~' + active + '~' + rgb_dec565(config.defaultBackgroundColor) + '~' + rgb_dec565(globalTextColor) + '~' + Sliders2 });
} else {
@@ -1929,6 +1955,7 @@ async function InitDateformat() {
}
}
InitDateformat();
//Control Dateformat short/long from DP's
on({ id: [String(NSPanel_Path) + 'Config.Dateformat.Switch.weekday', String(NSPanel_Path) + 'Config.Dateformat.Switch.month'], change: 'ne' }, async function (obj) {
try {
@@ -2098,7 +2125,7 @@ async function InitPageNavi() {
try {
if (!existsState(NSPanel_Path + 'PageNavi')) {
await createStateAsync(NSPanel_Path + 'PageNavi', <iobJS.StateCommon>{ type: 'string', write: true });
await setStateAsync(NSPanel_Path + 'PageNavi', <iobJS.State>{ val: { pagetype: 'page', pageId: 0 }, ack: true });
await setStateAsync(NSPanel_Path + 'PageNavi', <iobJS.State>{ val: "{ pagetype: 'page', pageId: 0 }", ack: true });
}
} catch (err: any) {
log('error at function InitPageNavi: ' + err.message, 'warn');
@@ -2110,11 +2137,15 @@ InitPageNavi();
on({ id: [NSPanel_Path + 'PageNavi'], change: 'any' }, async function (obj) {
try {
if (existsState(NSPanel_Path + 'PageNavi')) {
let vObj = JSON.parse(obj.state.val);
if (vObj.pagetype == 'page') {
GeneratePage(config.pages[vObj.pageId]);
} else if (vObj.pagetype == 'subpage') {
GeneratePage(config.subPages[vObj.pageId]);
try {
let vObj = JSON.parse(obj.state.val);
if (vObj.pagetype == 'page') {
GeneratePage(config.pages[vObj.pageId]);
} else if (vObj.pagetype == 'subpage') {
GeneratePage(config.subPages[vObj.pageId]);
}
} catch (e) {
log('non valid JSON at trigger PageNavi', 'info');
}
}
} catch (err: any) {
@@ -2125,8 +2156,16 @@ on({ id: [NSPanel_Path + 'PageNavi'], change: 'any' }, async function (obj) {
//----------------------Begin Dimmode
function ScreensaverDimmode(timeDimMode: NSPanel.DimMode) {
try {
let active = getState(NSPanel_Path + 'ScreensaverInfo.activeBrightness').val ?? 80;
let dimmode = getState(NSPanel_Path + 'ScreensaverInfo.activeDimmodeBrightness').val ?? -1;
let brightness:number = 100;
let dimBrightness:number = -1;
if (existsState(NSPanel_Path + 'ScreensaverInfo.activeBrightness')) {
brightness = getState(NSPanel_Path + 'ScreensaverInfo.activeBrightness').val;
}
if (existsState(NSPanel_Path + 'ScreensaverInfo.activeDimmodeBrightness')) {
dimBrightness = getState(NSPanel_Path + 'ScreensaverInfo.activeDimmodeBrightness').val;
}
let active = brightness ?? 80;
let dimmode = dimBrightness ?? -1;
if (Debug) {
log('function ScreensaverDimmode RGB-Wert HMIDark' + rgb_dec565(HMIDark), 'info');
}
@@ -2349,9 +2388,10 @@ async function Calc_Consumtion(Brightness: number, Relays: number) {
//
async function CountRelaysOn(Path: string) {
try {
let r1: boolean = getState(Path + 'Relay.1').val;
let r2: boolean = getState(Path + 'Relay.2').val;
let r1: boolean = true;
let r2: boolean = true;
if (existsState(Path + 'Relay.1')) r1 = getState(Path + 'Relay.1').val;
if (existsState(Path + 'Relay.2')) r2 = getState(Path + 'Relay.2').val;
if (r1 && r2) {
return 2;
} else if (!r1 && !r2) {
@@ -2365,6 +2405,13 @@ async function CountRelaysOn(Path: string) {
}
async function DetermineDimBrightness(Path: string) {
if ( existsState(NSPanel_Path + 'NSPanel_Dimmode_hourDay') &&
existsState(NSPanel_Path + 'NSPanel_Dimmode_hourNight') &&
existsState(NSPanel_Path + 'NSPanel_Dimmode_brightnessDay') &&
existsState(NSPanel_Path + 'NSPanel_Dimmode_brightnessNight') &&
existsState(NSPanel_Path + 'ScreensaverInfo') &&
existsState(NSPanel_Path + 'ActivePage')
) {
try {
const vTimeDay = getState(Path + 'NSPanel_Dimmode_hourDay').val;
const vTimeNight = getState(Path + 'NSPanel_Dimmode_hourNight').val;
@@ -2388,6 +2435,7 @@ async function DetermineDimBrightness(Path: string) {
} catch (err: any) {
log('error at function DetermineDimBrightness: ' + err.message, 'warn');
}
}
}
async function DetermineScreensaverDimmode(timeDimMode: NSPanel.DimMode) {
@@ -2492,8 +2540,14 @@ async function InitPopupNotify() {
// Notification to screensaver
on({ id: [screensaverNotifyHeading, screensaverNotifyText], change: 'ne', ack: false }, async (obj) => {
const heading = getState(screensaverNotifyHeading).val;
const text = getState(screensaverNotifyText).val;
let heading: string = '';
let text: string = '';
if (existsState(screensaverNotifyHeading)) {
heading = getState(screensaverNotifyHeading).val;
}
if (existsState(screensaverNotifyText)) {
text = getState(screensaverNotifyText).val;
}
if (screensaverEnabled && heading != '' && text != '') {
setIfExists(config.panelSendTopic, `notify~${heading}~${text}`);
@@ -2517,8 +2571,14 @@ async function InitPopupNotify() {
let v_popupNotifyIcon = getState(popupNotifyIcon).val != null ? getState(popupNotifyIcon).val : 'alert';
let v_popupNotifyBuzzer = getState(popupNotifyBuzzer).val != null ? getState(popupNotifyBuzzer).val : '0';
const heading = getState(popupNotifyHeading).val;
const text = getState(popupNotifyText).val;
let heading: string = '';
let text: string = '';
if (existsState(popupNotifyHeading)) {
heading = getState(popupNotifyHeading).val;
}
if (existsState(popupNotifyText)) {
text = getState(popupNotifyText).val;
}
notification =
'entityUpdateDetail' +
@@ -2606,23 +2666,47 @@ let scheduleSendTime = adapterSchedule(new Date().setSeconds(0, 0), 60, () => {
});
//Switch between Screensaver Entities and WeatherForecast
let scheduleSwichScreensaver = adapterSchedule(undefined, parseInt(getState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime').val), () => {
let screensaverChangeTime = 60;
if (existsState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime')) {
screensaverChangeTime = parseInt(getState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime').val);
}
let scheduleSwichScreensaver = adapterSchedule(undefined, screensaverChangeTime, () => {
try {
//WeatherForecast true/false Switchover delayed
let heading: string = '';
let text: string = '';
let wForecast: boolean = true;
let wForecastTimer: boolean = true;
let changeTime:number = 60;
if (existsState(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading')) {
heading = getState(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading').val;
}
if (existsState(NSPanel_Path + 'ScreensaverInfo.popupNotifyText')) {
text = getState(NSPanel_Path + 'ScreensaverInfo.popupNotifyText').val;
}
if (existsState(NSPanel_Path + 'ScreensaverInfo.weatherForecast')) {
wForecast = getState(NSPanel_Path + 'ScreensaverInfo.weatherForecast').val;
}
if (existsState(NSPanel_Path + 'ScreensaverInfo.weatherForecastTimer')) {
wForecastTimer = getState(NSPanel_Path + 'ScreensaverInfo.weatherForecastTimer').val;
}
if (existsState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime')) {
changeTime = getState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime').val;
}
if (
getState(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading').val == '' &&
getState(NSPanel_Path + 'ScreensaverInfo.popupNotifyText').val == '' &&
getState(NSPanel_Path + 'ScreensaverInfo.weatherForecast').val == true &&
getState(NSPanel_Path + 'ScreensaverInfo.weatherForecastTimer').val == true
heading == '' &&
text == '' &&
wForecast == true &&
wForecastTimer == true
) {
setStateDelayed(NSPanel_Path + 'ScreensaverInfo.weatherForecast', false, (getState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime').val / 2) * 1000, false);
setStateDelayed(NSPanel_Path + 'ScreensaverInfo.weatherForecast', false, (changeTime / 2) * 1000, false);
} else if (
getState(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading').val == '' &&
getState(NSPanel_Path + 'ScreensaverInfo.popupNotifyText').val == '' &&
getState(NSPanel_Path + 'ScreensaverInfo.weatherForecast').val == false &&
getState(NSPanel_Path + 'ScreensaverInfo.weatherForecastTimer').val == true
heading == '' &&
text == '' &&
wForecast == false &&
wForecastTimer == true
) {
setStateDelayed(NSPanel_Path + 'ScreensaverInfo.weatherForecast', true, (getState(NSPanel_Path + 'ScreensaverInfo.entityChangeTime').val / 2) * 1000, false);
setStateDelayed(NSPanel_Path + 'ScreensaverInfo.weatherForecast', true, (changeTime / 2) * 1000, false);
}
} catch (err: any) {
log('error at schedule entityChangeTime: ' + err.message, 'warn');
@@ -2683,31 +2767,43 @@ let scheduleStartup = adapterSchedule({ hour: 3, minute: 30 }, 24 * 60 * 60, asy
setIfExists(config.panelSendTopic, 'pageType~pageStartup');
});
// Updates currently compare every 12 hours
// Check for updates with Start
get_locales();
get_locales_servicemenu();
// setIfExists(config.panelSendTopic, 'pageType~pageStartup');
// get_tasmota_status0();
// get_panel_update_data();
// check_updates();
// Updates currently compare and every 12 hours
let scheduleCheckUpdates = adapterSchedule(undefined, 60 * 60 * 12, () => {
get_tasmota_status0();
get_panel_update_data();
check_updates();
});
// Check for updates with Start
get_locales();
get_locales_servicemenu();
setIfExists(config.panelSendTopic, 'pageType~pageStartup');
get_tasmota_status0();
get_panel_update_data();
check_updates();
// force manual restart after object initialization
/*
setTimeout(async function () {
setState(config.panelSendTopic, 'pageType~pageStartup');
}, 90000);
if (firstRun) {
stopScript(scriptName);
}
*/
setTimeout(async function () {
if (firstRun) {
stopScript(scriptName);
}
}, 20000);
//------------------Begin Update Functions
function getMomentjsLocale(): String {
try {
let locale = getState(NSPanel_Path + 'Config.locale').val;
let locale = 'en-US';
if ( existsState(NSPanel_Path + 'Config.locale')) {
let locale = getState(NSPanel_Path + 'Config.locale').val;
}
if (locale == 'hy-AM' || locale == 'zh-CN' || locale == 'zh-TW') {
return locale.toLowerCase();
} else {
@@ -2876,44 +2972,52 @@ async function check_updates() {
// TFT-Firmware-Vergleich
if (existsObject(NSPanel_Path + 'Display_Firmware.currentVersion')) {
if (parseInt(getState(NSPanel_Path + 'Display_Firmware.currentVersion').val) < desired_display_firmware_version) {
if (existsState(NSPanel_Path + 'NSPanel_autoUpdate')) {
if (getState(NSPanel_Path + 'NSPanel_autoUpdate').val) {
log('Auto-updates switched on - update TFT firmware is carried out', 'info');
// TFT-Firmware Update durchführen
update_tft_firmware();
// Aktuelle TFT-Firmware Version = Online TFT-Firmware Version
await setStateAsync(NSPanel_Path + 'Display_Firmware.currentVersion', <iobJS.State>{ val: getState(NSPanel_Path + 'Display_Firmware.onlineVersion').val, ack: true });
if (Debug) log('Display firmware updated automatically', 'info');
} else {
// Auf TFT-Firmware hinweisen
if (Debug) log('Display firmware => Automatic updates off, manual update required', 'info');
InternalName = 'TFTFirmwareUpdate';
Headline = 'TFT-Firmware Update';
Text = [
'Es ist eine neue Version der TFT-Firmware',
'\r\n',
'verfügbar',
'\r\n',
'\r\n',
'Installierte Version: ' + String(getState(String(NSPanel_Path) + 'Display_Firmware.currentVersion').val),
'\r\n',
'Verfügbare Version: ' + String(desired_display_firmware_version),
'\r\n',
'\r\n',
'Upgrade durchführen?',
].join('');
Update = true;
}
}
if (parseInt(getState(NSPanel_Path + 'Display_Firmware.currentVersion').val) == 0) {
log('Actual TFT-firmware version just not not initialized', 'info');
} else {
if (Debug) log('Already the latest display firmware on NSPanel', 'info');
if (parseInt(getState(NSPanel_Path + 'Display_Firmware.currentVersion').val) < desired_display_firmware_version) {
if (existsState(NSPanel_Path + 'NSPanel_autoUpdate')) {
if (getState(NSPanel_Path + 'NSPanel_autoUpdate').val) {
log('Auto-updates switched on - update TFT firmware is carried out', 'info');
// TFT-Firmware Update durchführen
update_tft_firmware();
// Aktuelle TFT-Firmware Version = Online TFT-Firmware Version
await setStateAsync(NSPanel_Path + 'Display_Firmware.currentVersion', <iobJS.State>{ val: getState(NSPanel_Path + 'Display_Firmware.onlineVersion').val, ack: true });
if (Debug) log('Display firmware updated automatically', 'info');
} else {
// Auf TFT-Firmware hinweisen
if (Debug) log('Display firmware => Automatic updates off, manual update required', 'info');
InternalName = 'TFTFirmwareUpdate';
Headline = 'TFT-Firmware Update';
Text = [
'Es ist eine neue Version der TFT-Firmware',
'\r\n',
'verfügbar',
'\r\n',
'\r\n',
'Installierte Version: ' + String(getState(String(NSPanel_Path) + 'Display_Firmware.currentVersion').val),
'\r\n',
'Verfügbare Version: ' + String(desired_display_firmware_version),
'\r\n',
'\r\n',
'Upgrade durchführen?',
].join('');
Update = true;
}
}
} else {
if (Debug) log('Already the latest display firmware on NSPanel', 'info');
}
}
}
let update_message: boolean = getState(NSPanel_Path + 'Config.Update.UpdateMessage').val;
let update_message: boolean = true;
if (existsState(NSPanel_Path + 'Config.Update.UpdateMessage')) {
update_message = getState(NSPanel_Path + 'Config.Update.UpdateMessage').val;
}
if (Update && update_message) {
await setStateAsync(popupNotifyHeading, <iobJS.State>{ val: Headline, ack: false });
await setStateAsync(popupNotifyHeadingColor, <iobJS.State>{ val: HeadlineColor, ack: false });
@@ -3396,94 +3500,103 @@ function update_berry_driver_version() {
}
function update_tft_firmware() {
if (getState(NSPanel_Path + 'Config.Update.activ').val == 0) {
let desired_display_firmware_url = '';
if ((existsObject(NSPanel_Path + 'Config.Update.activ') != false) && (existsObject(NSPanel_Path + 'Display_Firmware.TFT.currentVersion') != false)) {
let id = getState(NSPanel_Path + 'Display_Firmware.TFT.currentVersion').val;
let currentVersion = id.split('/');
let version = parseInt(currentVersion[0]);
if ( ! isNaN(version) ) {
if ((getState(NSPanel_Path + 'Config.Update.activ').val == 0) && (version != 0)) {
if (existsState(NSPanel_Path + 'NSPanel_Version')) {
let desired_display_firmware_url = '';
if (getState(NSPanel_Path + 'NSPanel_Version').val == 'us-l') {
desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-l-${tft_version}.tft`;
} else if (getState(NSPanel_Path + 'NSPanel_Version').val == 'us-p') {
desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-p-${tft_version}.tft`;
} else {
desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-${tft_version}.tft`;
}
log('Start TFT-Upgrade for: ' + getState(NSPanel_Path + 'NSPanel_Version').val + ' Version', 'info');
log('Install NextionTFT: ' + desired_display_firmware_url, 'info');
try {
let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=FlashNextion ${desired_display_firmware_url}`;
if (tasmota_web_admin_password != '') {
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=FlashNextion ${desired_display_firmware_url}`;
}
axios
.get(urlString, { headers: { 'User-Agent': 'ioBroker' } })
.then(async function (response) {
if (response.status === 200) {
if (Debug) {
log(response.data, 'info');
}
await createStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string', write: false });
await setStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.State>{ val: tft_version, ack: true });
Init_Release();
if (getState(NSPanel_Path + 'NSPanel_Version').val == 'us-l') {
desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-l-${tft_version}.tft`;
} else if (getState(NSPanel_Path + 'NSPanel_Version').val == 'us-p') {
desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-p-${tft_version}.tft`;
} else {
log('Axios Status - update_tft_firmware: ' + response.state, 'warn');
desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-${tft_version}.tft`;
}
})
.catch(function (error) {
log(error, 'warn');
});
} catch (err: any) {
log('error request in function update_tft_firmware: ' + err.message, 'warn');
log('Start TFT-Upgrade for: ' + getState(NSPanel_Path + 'NSPanel_Version').val + ' Version', 'info');
log('Install NextionTFT: ' + desired_display_firmware_url, 'info');
try {
let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=FlashNextion ${desired_display_firmware_url}`;
if (tasmota_web_admin_password != '') {
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=FlashNextion ${desired_display_firmware_url}`;
}
axios
.get(urlString, { headers: { 'User-Agent': 'ioBroker' } })
.then(async function (response) {
if (response.status === 200) {
if (Debug) {
log(response.data, 'info');
}
await createStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string', write: false });
await setStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.State>{ val: tft_version, ack: true });
Init_Release();
} else {
log('Axios Status - update_tft_firmware: ' + response.state, 'warn');
}
})
.catch(function (error) {
log(error, 'warn');
});
} catch (err: any) {
log('error request in function update_tft_firmware: ' + err.message, 'warn');
}
}
}
}
}
}
function update_tasmota_firmware() {
try {
if (getState(NSPanel_Path + 'Config.Update.activ').val == 0) {
let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=OtaUrl ${tasmotaOtaUrl}${tasmotaOtaVersion}`;
if (tasmota_web_admin_password != '') {
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=OtaUrl ${tasmotaOtaUrl}${tasmotaOtaVersion}`;
}
axios
.get(urlString, { headers: { 'User-Agent': 'ioBroker' } })
.then(async function (response) {
if (response.status === 200) {
if (Debug) {
log(response.data, 'info');
if (existsObject(NSPanel_Path + 'Config.Update.activ') != false) {
try {
if (getState(NSPanel_Path + 'Config.Update.activ').val == 0) {
let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=OtaUrl ${tasmotaOtaUrl}${tasmotaOtaVersion}`;
if (tasmota_web_admin_password != '') {
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=OtaUrl ${tasmotaOtaUrl}${tasmotaOtaVersion}`;
}
axios
.get(urlString, { headers: { 'User-Agent': 'ioBroker' } })
.then(async function (response) {
if (response.status === 200) {
if (Debug) {
log(response.data, 'info');
}
} else {
log('Axios Status - update_tasmota_firmware ==> set OTA: ' + response.state, 'warn');
}
} else {
log('Axios Status - update_tasmota_firmware ==> set OTA: ' + response.state, 'warn');
}
})
.catch(function (error) {
log(error, 'warn');
});
})
.catch(function (error) {
log(error, 'warn');
});
urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=Upgrade 1`;
if (tasmota_web_admin_password != '') {
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=Upgrade 1`;
}
urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=Upgrade 1`;
if (tasmota_web_admin_password != '') {
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=Upgrade 1`;
}
axios
.get(urlString, { headers: { 'User-Agent': 'ioBroker' } })
.then(async function (response) {
if (response.status === 200) {
if (Debug) {
log(response.data, 'info');
axios
.get(urlString, { headers: { 'User-Agent': 'ioBroker' } })
.then(async function (response) {
if (response.status === 200) {
if (Debug) {
log(response.data, 'info');
}
} else {
log('Axios Status - update_tasmota_firmware: ' + response.state, 'warn');
}
} else {
log('Axios Status - update_tasmota_firmware: ' + response.state, 'warn');
}
})
.catch(function (error) {
log(error, 'warn');
});
})
.catch(function (error) {
log(error, 'warn');
});
}
} catch (err: any) {
log('error request in function update_tasmota_firmware: ' + err.message, 'warn');
}
} catch (err: any) {
log('error request in function update_tasmota_firmware: ' + err.message, 'warn');
}
}
//mqttCallback (topic: string, message: string): Promise<void> {
@@ -3735,9 +3848,13 @@ function HandleHardwareButton(method: NSPanel.EventMethod): void {
}
function HandleStartupProcess(): void {
let timeout:number = 10;
SendDate();
SendTime();
SendToPanel({ payload: 'timeout~' + getState(NSPanel_Path + 'Config.Screensaver.timeoutScreensaver').val });
if (existsState(NSPanel_Path + 'Config.Screensaver.timeoutScreensaver')) {
timeout = getState(NSPanel_Path + 'Config.Screensaver.timeoutScreensaver').val;
}
SendToPanel({ payload: 'timeout~' + timeout });
}
function SendDate(): void {
@@ -3836,20 +3953,28 @@ function GeneratePageElements(page: PageType): string {
maxItems = 1;
break;
case 'cardEntities':
if (getState(NSPanel_Path + 'NSPanel_Version').val == 'eu') {
maxItems = 4;
if (existsState(NSPanel_Path + 'NSPanel_Version')) {
if (getState(NSPanel_Path + 'NSPanel_Version').val == 'eu') {
maxItems = 4;
} else {
maxItems = 5;
}
} else {
maxItems = 5;
maxItems = 4;
}
break;
case 'cardGrid':
maxItems = 6;
break;
case 'cardGrid2':
if (getState(NSPanel_Path + 'NSPanel_Version').val == 'us-p') {
maxItems = 9;
if (existsState(NSPanel_Path + 'NSPanel_Version')) {
if (getState(NSPanel_Path + 'NSPanel_Version').val == 'us-p') {
maxItems = 9;
} else {
maxItems = 8;
}
} else {
maxItems = 8;
maxItems = 8;
}
break;
}
@@ -4687,62 +4812,91 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean =
}
function findLocale(controlsObject: string, controlsState: string): string {
if ( ! existsState(NSPanel_Path + 'Config.locale')) {
if (Debug) {
log('findLocaleServMenu missing object: ' + NSPanel_Path + 'Config.locale' + ' -> ' + controlsState, 'warn');
}
return controlsState;
}
if ( ! existsState(NSPanel_Path + 'NSPanel_locales_json')) {
if (Debug) {
log('findLocaleServMenu missing object: ' + NSPanel_Path + 'NSPanel_locales_json' + ' -> ' + controlsState, 'warn');
}
return controlsState;
}
const locale = getState(NSPanel_Path + 'Config.locale').val;
const strJson = getState(NSPanel_Path + 'NSPanel_locales_json').val;
if (Debug) {
log(controlsObject + ' - ' + controlsState, 'info');
}
try {
const obj = JSON.parse(strJson);
const strLocale = obj[controlsObject][controlsState][locale];
if (strLocale != undefined) {
if (Debug) {
log('findLocale: ' + controlsObject + ' - ' + controlsState + ' - ' + strLocale, 'info');
}
return strLocale;
} else {
if (Debug) {
log('findLocale missing locale: ' + controlsObject + ' - ' + controlsState, 'info');
}
return controlsState;
}
} catch (err: any) {
if (err.message.substring(0, 35) == 'Cannot read properties of undefined') {
if (Debug) {
log('function findLocale: missing translation: ' + controlsObject + ' - ' + controlsState, 'info');
}
log('function findLocale: missing translation: ' + controlsObject + ' - ' + controlsState, 'info');
} else {
log('error at function findLocale: ' + err.message, 'warn');
log('error at function findLocale: ' + controlsObject + ' - ' + controlsState + ' : ' + err.message, 'warn');
}
return controlsState;
}
}
function findLocaleServMenu(controlsState: string): string {
if ( ! existsState(NSPanel_Path + 'Config.locale')) {
if (Debug) {
log('findLocaleServMenu missing object: ' + NSPanel_Path + 'Config.locale' + ' -> ' + controlsState, 'warn');
}
return controlsState;
}
if ( ! existsState(NSPanel_Path + 'NSPanel_locales_service_json')) {
if (Debug) {
log('findLocaleServMenu missing object: ' + NSPanel_Path + 'NSPanel_locales_service_json' + ' -> ' + controlsState, 'warn');
}
return controlsState;
}
const locale = getState(NSPanel_Path + 'Config.locale').val;
const strJson = getState(NSPanel_Path + 'NSPanel_locales_service_json').val;
if (Debug) {
log(controlsState, 'info');
}
try {
const obj = JSON.parse(strJson);
const strLocale = obj[controlsState][locale];
if (strLocale != undefined) {
if (Debug) {
log('findLocaleServMenu: ' + controlsState + ' - ' + locale + ' -> ' + strLocale, 'info');
}
return strLocale;
} else {
if (obj[controlsState]['en-US'] != undefined) {
if (Debug) {
log('findLocaleServMenu: ' + controlsState + ' - ' + locale + ' -> ' + obj[controlsState]['en-US'], 'info');
}
return obj[controlsState]['en-US'];
} else {
if (Debug) {
log('findLocaleServMenu missing entry: ' + controlsState + ' - en-US', 'info');
}
return controlsState;
}
}
} catch (err: any) {
if (err.message.substring(0, 35) == 'Cannot read properties of undefined') {
if (Debug) {
log('function findLocale: missing translation: ' + controlsState, 'info');
}
log('function findLocaleServMenu: missing translation: ' + controlsState + ' - ' + locale, 'info');
} else {
log('error at function findLocale: ' + err.message, 'warn');
log('error at function findLocaleServMenu: ' + controlsState + ' - ' + locale + ' : ' + err.message, 'warn');
}
return controlsState;
}
@@ -9876,8 +10030,15 @@ function HandleScreensaverStatusIcons(): void {
}
}
let alternateScreensaverMFRIcon1Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.1').val;
let alternateScreensaverMFRIcon2Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.2').val;
let alternateScreensaverMFRIcon1Size: boolean = true;
let alternateScreensaverMFRIcon2Size: boolean = true;
if (existsState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.1')) {
alternateScreensaverMFRIcon1Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.1').val;
}
if (existsState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.2')) {
alternateScreensaverMFRIcon2Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.2').val;
}
//Alternate MRIcon Size
if (alternateScreensaverMFRIcon1Size) {
payloadString += '1~';