diff --git a/.github/workflows/test-and-release.yml b/.github/workflows/test-and-release.yml index 96840ec8..d76873e4 100644 --- a/.github/workflows/test-and-release.yml +++ b/.github/workflows/test-and-release.yml @@ -56,7 +56,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - node-version: [14.x, 16.x, 18.x] + node-version: [16.x, 18.x] os: [ubuntu-latest, windows-latest, macos-latest] steps: diff --git a/README.md b/README.md index 31b4b6ef..b9266ba0 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ [![Downloads](https://img.shields.io/npm/dm/iobroker.shuttercontrol.svg)](https://www.npmjs.com/package/iobroker.shuttercontrol) [![Known Vulnerabilities](https://snyk.io/test/github/simatec/ioBroker.shuttercontrol/badge.svg)](https://snyk.io/test/github/simatec/ioBroker.shuttercontrol) -[![Travis-CI](http://img.shields.io/travis/simatec/ioBroker.shuttercontrol/master.svg)](https://travis-ci.org/simatec/ioBroker.shuttercontrol) ![Test and Release](https://github.com/simatec/ioBroker.shuttercontrol/workflows/Test%20and%20Release/badge.svg) [![License](https://img.shields.io/github/license/simatec/ioBroker.shuttercontrol?style=flat)](https://github.com/simatec/ioBroker.shuttercontrol/blob/master/LICENSE) [![Donate](https://img.shields.io/badge/donate-paypal-blue?style=flat)](https://paypal.me/mk1676) @@ -47,6 +46,26 @@ When the adapter crashes or an other Code error happens, this error message that ## Changelog +### 1.5.0 (2023-06-05) +* (simatec) new Manu-Mode Check added +* (simatec) suncalc added +* (simatec) Dependencies updated + +### 1.4.29 (2023-04-26) +* (simatec) Bugfix Brightness down + +### 1.4.28 (2023-04-17) +* (simatec) small Fixes + +### 1.4.27 (2023-04-17) +* (simatec) small Fixes + +### 1.4.26 (2023-04-14) +* (simatec) Fix Sunprotect + +### 1.4.25 (2023-04-13) +* (simatec) small Fixes + ### 1.4.24 (2023-04-10) * (simatec) Fix end of Sunprotect * (simatec) small Fixes diff --git a/docs/de/shuttercontrol.md b/docs/de/shuttercontrol.md index 40758cde..baa49ad4 100644 --- a/docs/de/shuttercontrol.md +++ b/docs/de/shuttercontrol.md @@ -618,13 +618,10 @@ Dieser Parameter kann verhindern, dass der Rollo bei wechselnder Bewölkung imme > Hinweis: Wird ein Rollladen manuell verstellt und entspricht die Position nicht der automatisch angefahrenen, setzt die Automatik aus! -> Ausnahme: -Wenn der Rollladen das erste Mal am Tag manuell auf 100% geöffnet -wird, wird ebenso der Sonnenschutz ermöglicht. Hierbei fährt der Rollladen -bei Bedarf kurz nach dem manuellen Hochfahren in den Sonnenschutz. -Wird der Rollladen automatisch hochgefahren und sind die Voraussetzungen für -den Sonnenschutz erfüllt, so fährt er direkt die Höhe des Sonnenschutzes an. +> Ausnahme: +Wird der Rollladen manuell in die konfigurierte Höhe für öffnen, schließen oder Sonnenschutz gefahren, bleibt die Automatik bestehen. + **Rollladen Verzögerung bei Fenster öffnen (s)** Parameter um das Öffnen des Rollladens zu verzögern, nachdem das Fenster/Türe geöffnet wurde (in Sekunden) diff --git a/io-package.json b/io-package.json index cda3a7e0..9f6367df 100644 --- a/io-package.json +++ b/io-package.json @@ -1,8 +1,86 @@ { "common": { "name": "shuttercontrol", - "version": "1.4.24", + "version": "1.5.0", "news": { + "1.5.0": { + "en": "new Manu-Mode Check added\nsuncalc added\nDependencies updated", + "de": "neue Manu-Mode Check hinzugefügt\nsuncalc hinzugefügt\nAusgaben aktualisiert", + "ru": "новый Manu-Mode Проверить добавлено\nsuncalc добавлено\nОбновленные зависимости", + "pt": "novo Manu-Mode Verificação adicionada\nadicionar ao cesto\nDependências atualizadas", + "nl": "nieuwe Manu-Mode Controle toegevoegd\nsuncalc toegevoegd\nAfhankelijkheid geüpdateerd", + "fr": "nouveau Manu-Mode Check added\nsuncalc ajouté\nDépendances mises à jour", + "it": "nuovo Manu-Mode Check aggiunto\nsuncalc aggiunto\nDipendenze aggiornate", + "es": "nuevo Manu-Mode Check añadido\nsuncalc añadido\nActualización de las dependencias", + "pl": "nowy Manu-Mode Check dodać\ndodać\nZależności", + "uk": "новий Manu-Mode Перевірити\nдодано сонце\nЗалежність оновлено", + "zh-cn": "新马努-马西 检查站\n日增\nB. 更新的属地" + }, + "1.4.29": { + "en": "Bugfix Brightness down", + "de": "Bugfix Helligkeit unten", + "ru": "Bugfix Яркость вниз", + "pt": "Bugfix Brilho para baixo", + "nl": "Bugfix Brightness", + "fr": "Bugfix Brightness down", + "it": "Bugfix luminosità giù", + "es": "Bugfix Brightness abajo", + "pl": "Bugfix Bright", + "uk": "Bugfix Яскравість вниз", + "zh-cn": "Bugfix Brightim" + }, + "1.4.28": { + "en": "small Fixes", + "de": "kleine Feste", + "ru": "небольшие исправления", + "pt": "pequenas correções", + "nl": "kleine Fixes", + "fr": "petits Fixes", + "it": "piccoli corredi", + "es": "pequeñas fijaciones", + "pl": "mały Fisz", + "uk": "маленькі Фікси", + "zh-cn": "小型固定" + }, + "1.4.27": { + "en": "small Fixes", + "de": "kleine Feste", + "ru": "небольшие исправления", + "pt": "pequenas correções", + "nl": "kleine Fixes", + "fr": "petits Fixes", + "it": "piccoli corredi", + "es": "pequeñas fijaciones", + "pl": "mały Fisz", + "uk": "маленькі Фікси", + "zh-cn": "小型固定" + }, + "1.4.26": { + "en": "Fix Sunprotect", + "de": "Sunprotekt reparieren", + "ru": "Исправление Sunprotect", + "pt": "Fix Sunprotect", + "nl": "Vertaling:", + "fr": "Fix Sunprotect", + "it": "Fissare la protezione solare", + "es": "Protección solar", + "pl": "Fix Sunprotekt", + "uk": "Виправлення Sunprotect", + "zh-cn": "Fix Sunprotect" + }, + "1.4.25": { + "en": "small Fixes", + "de": "kleine Feste", + "ru": "небольшие исправления", + "pt": "pequenas correções", + "nl": "kleine Fixes", + "fr": "petits Fixes", + "it": "piccoli corredi", + "es": "pequeñas fijaciones", + "pl": "mały Fisz", + "uk": "маленькі Фікси", + "zh-cn": "小型固定" + }, "1.4.24": { "en": "Fix end of Sunprotect\nsmall Fixes\nFix shutter alarm\nSentry fixes\nBugfix Brightness down\nDependencies updated\nFix Astro Time", "de": "Festes Ende von Sunprotect\nkleine Feste\nAlarm für den Verschluss\nSentry Fixes\nBugfix Helligkeit unten\nAusgaben aktualisiert\nAstro Time", @@ -15,83 +93,6 @@ "pl": "Pięć końca Słońca\nmały Fisz\nFixs shutter alarm\nStatystyka\nBugfix Bright\nZależności\nCzasopismo", "uk": "Фіксований кінець Sunprotect\nмаленькі Фікси\nВиправлення тривожної сигналізації\nПанчохи\nBugfix Яскравість вниз\nЗалежність оновлено\nВиправлення часу Астро", "zh-cn": "九. 防疫\n小型固定\nB. 警戒\nSentry fix\nBugfix Brightim\nB. 更新的属地\n固定时间" - }, - "1.4.23": { - "en": "Bugfix Brightness-Sensor\nDependencies updated\nsmall fixes", - "de": "Bugfix Helligkeitssensor\nAusgaben aktualisiert\nkleine fixierungen", - "ru": "Bugfix Яркость-Sensor\nОбновленные зависимости\nнебольшие исправления", - "pt": "Bugfix Brightness-Sensor\nDependências atualizadas\npequenas correções", - "nl": "Bugfix Brightness-Sensor\nAfhankelijkheid geüpdateerd\nkleine fixes", - "fr": "Bugfix Brightness-Sensor\nDépendances mises à jour\npetites corrections", - "it": "Bugfix Brightness-Sensor\nDipendenze aggiornate\npiccole correzioni", - "es": "Bugfix Brightness-Sensor\nActualización de las dependencias\npequeños accesorios", - "pl": "Bugfix Brightness-Sensor\nZależności\ndrobne rozwiązanie", - "uk": "Bugfix Яскравість-сенсор\nЗалежність оновлено\nмаленькі кріплення", - "zh-cn": "Bugfix Bright-Sensor\nB. 更新的属地\n小型配件" - }, - "1.4.22": { - "en": "Bugfix Brightness-Sensor\nDependencies updated\nFix Alarm Settings", - "de": "Bugfix Helligkeitssensor\nAusgaben aktualisiert\nAlarmeinstellungen festlegen", - "ru": "Bugfix Яркость-Sensor\nОбновленные зависимости\nИсправление настроек тревоги", - "pt": "Bugfix Brightness-Sensor\nDependências atualizadas\nDefinir configurações de alarme", - "nl": "Bugfix Brightness-Sensor\nAfhankelijkheid geüpdateerd\nFix Alarm Setting", - "fr": "Bugfix Brightness-Sensor\nDépendances mises à jour\nRéglage des paramètres d'alarme", - "it": "Bugfix Brightness-Sensor\nDipendenze aggiornate\nImpostazioni di allarme", - "es": "Bugfix Brightness-Sensor\nActualización de las dependencias\nAjuste de Alarma", - "pl": "Bugfix Brightness-Sensor\nZależności\nFix Alarm Setting (ang.)", - "uk": "Bugfix Яскравість-сенсор\nЗалежність оновлено\nВиправлення параметрів сигналізації", - "zh-cn": "Bugfix Bright-Sensor\nB. 更新的属地\nFix Alarm Seting" - }, - "1.4.21": { - "en": "fix Brightness Settings\nDependencies updated", - "de": "korrektur der Helligkeitseinstellungen\nAusgaben aktualisiert", - "ru": "исправить настройки яркости\nОбновленные зависимости", - "pt": "corrigir configurações de brilho\nDependências atualizadas", - "nl": "herstel Brightness Setting\nAfhankelijkheid geüpdateerd", - "fr": "correction des paramètres de luminosité\nDépendances mises à jour", - "it": "fix Impostazioni di luminosità\nDipendenze aggiornate", - "es": "arregla los ajustes de brillo\nActualización de las dependencias", - "pl": "brightness Settings (ang.)\nZależności", - "uk": "виправити налаштування яскравості\nЗалежність оновлено", - "zh-cn": "fix 版权规定\nB. 更新的属地" - }, - "1.4.20": { - "en": "Bugfix Brightness-Sensor", - "de": "Bugfix Helligkeitssensor", - "ru": "Bugfix Яркость-Sensor", - "pt": "Bugfix Brightness-Sensor", - "nl": "Bugfix Brightness-Sensor", - "fr": "Bugfix Brightness-Sensor", - "it": "Bugfix Brightness-Sensor", - "es": "Bugfix Brightness-Sensor", - "pl": "Bugfix Brightness-Sensor", - "uk": "Bugfix Яскравість-сенсор", - "zh-cn": "Bugfix Bright-Sensor" - }, - "1.4.19": { - "en": "Time config for Brightness-Sensor added\nsmall Bugfixes\nDependencies updated", - "de": "Time config für Brightness-Sensor hinzugefügt\nkleine Bugfixes\nAusgaben aktualisiert", - "ru": "Время config для Brightness-Sensor добавлен\nнебольшие багфиксы\nОбновленные зависимости", - "pt": "Tempo de configuração para Brightness-Sensor adicionado\npequenos bugs\nDependências atualizadas", - "nl": "Tijdstip voor Brightness-Sensor toegevoegd\nkleine Bugfix\nAfhankelijkheid geüpdateerd", - "fr": "Configuration du temps pour Brightness-Sensor ajouté\npetites Bugfixes\nDépendances mises à jour", - "it": "Configurazione del tempo per Brightness-Sensor aggiunto\npiccoli bugfix\nDipendenze aggiornate", - "es": "Ajuste del tiempo para Brightness-Sensor añadido\npequeños Bugfixes\nActualización de las dependencias", - "pl": "Konfiguracja czasu Brightness-Sensor dodaje do Brightness-Sensor\nmały Bugfix\nZależności", - "uk": "Налаштування часу для Brightness-Sensor додано\nмаленькі Бугфікси\nЗалежність оновлено", - "zh-cn": "Brightness-Sensor补充说的时限\n小额Bugfix\nB. 更新的属地" - }, - "1.4.18": { - "en": "Bugfixes Button Action", - "de": "Bugfixes Button Aktion", - "ru": "Bugfixes Кнопка Action", - "pt": "Bugfixs Button Ação", - "nl": "Bugfixs Button Act", - "fr": "Bugfixes Button Action", - "it": "Bugfixs Button Azione", - "es": "Bugfixes Button Action", - "pl": "Akcji Buttona", - "zh-cn": "Bugfixing Button行动" } }, "title": "shuttercontrol", diff --git a/lib/shutterAlarm.js b/lib/shutterAlarm.js index fdf26eac..fa3a2bfb 100644 --- a/lib/shutterAlarm.js +++ b/lib/shutterAlarm.js @@ -22,7 +22,7 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { const alarmFrostLevel = adapter.config.alarmFrostLevel; const alarmFireLevel = adapter.config.alarmFireLevel; - const driveDelayUpAstro = adapter.config.driveDelayUpAstro !== 0 ? adapter.config.driveDelayUpAstro * 1000 : 20; + const driveDelayUpAstro = adapter.config.driveDelayUpAstro != 0 ? adapter.config.driveDelayUpAstro * 1000 : 20; let statusAlarmWind1 = false; let statusAlarmWind2 = false; @@ -38,19 +38,19 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { if (shutterSettings) { switch (alarmType) { case 'alarmWind1': - resAlarm = shutterSettings.filter((/** @type {{ enableAlarmWind1: boolean; }} */ d) => d.enableAlarmWind1 === true); + resAlarm = shutterSettings.filter((/** @type {{ enableAlarmWind1: boolean; }} */ d) => d.enableAlarmWind1 == true); break; case 'alarmWind2': - resAlarm = shutterSettings.filter((/** @type {{ enableAlarmWind2: boolean; }} */ d) => d.enableAlarmWind2 === true); + resAlarm = shutterSettings.filter((/** @type {{ enableAlarmWind2: boolean; }} */ d) => d.enableAlarmWind2 == true); break; case 'alarmRain': - resAlarm = shutterSettings.filter((/** @type {{ enableAlarmRain: boolean; }} */ d) => d.enableAlarmRain === true); + resAlarm = shutterSettings.filter((/** @type {{ enableAlarmRain: boolean; }} */ d) => d.enableAlarmRain == true); break; case 'alarmFrost': - resAlarm = shutterSettings.filter((/** @type {{ enableAlarmFrost: boolean; }} */ d) => d.enableAlarmFrost === true); + resAlarm = shutterSettings.filter((/** @type {{ enableAlarmFrost: boolean; }} */ d) => d.enableAlarmFrost == true); break; case 'alarmFire': - resAlarm = shutterSettings.filter((/** @type {{ enableAlarmFire: boolean; }} */ d) => d.enableAlarmFire === true); + resAlarm = shutterSettings.filter((/** @type {{ enableAlarmFire: boolean; }} */ d) => d.enableAlarmFire == true); break; } @@ -59,7 +59,7 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { for (const i in result) { for (const s in shutterSettings) { - if (shutterSettings[s].shutterName === result[i].shutterName) { + if (shutterSettings[s].shutterName == result[i].shutterName) { const nameDevice = shutterSettings[s].shutterName.replace(/[.;, ]/g, '_'); let convertShutter = false; @@ -72,48 +72,48 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { const pendingAlarm = await checkPendingAlarm(adapter, shutterSettings[s]); - const _alarmWind1 = adapter.config.alarmWind1 !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmWind1).catch((e) => adapter.log.warn(e)) : null; - if (_alarmWind1 && _alarmWind1.val !== undefined) { + const _alarmWind1 = adapter.config.alarmWind1 != '' ? await adapter.getForeignStateAsync(adapter.config.alarmWind1).catch((e) => adapter.log.warn(e)) : null; + if (typeof _alarmWind1 != undefined && _alarmWind1 != null) { statusAlarmWind1 = _alarmWind1.val; } - const _alarmWind2 = adapter.config.alarmWind2 !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmWind2).catch((e) => adapter.log.warn(e)) : null; - if (_alarmWind2 && _alarmWind2.val !== undefined) { + const _alarmWind2 = adapter.config.alarmWind2 != '' ? await adapter.getForeignStateAsync(adapter.config.alarmWind2).catch((e) => adapter.log.warn(e)) : null; + if (typeof _alarmWind2 != undefined && _alarmWind2 != null) { statusAlarmWind2 = _alarmWind2.val; } - const _alarmRain = adapter.config.alarmRain !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmRain).catch((e) => adapter.log.warn(e)) : null; - if (_alarmRain && _alarmRain.val) { + const _alarmRain = adapter.config.alarmRain != '' ? await adapter.getForeignStateAsync(adapter.config.alarmRain).catch((e) => adapter.log.warn(e)) : null; + if (typeof _alarmRain != undefined && _alarmRain != null) { statusAlarmRain = _alarmRain.val; } - const _alarmFrost = adapter.config.alarmFrost !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmFrost).catch((e) => adapter.log.warn(e)) : null; - if (_alarmFrost && _alarmFrost.val !== undefined) { + const _alarmFrost = adapter.config.alarmFrost != '' ? await adapter.getForeignStateAsync(adapter.config.alarmFrost).catch((e) => adapter.log.warn(e)) : null; + if (typeof _alarmFrost != undefined && _alarmFrost != null) { statusAlarmFrost = _alarmFrost.val; } - const _alarmFire = adapter.config.alarmFire !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmFire).catch((e) => adapter.log.warn(e)) : null; - if (_alarmFire && _alarmFire.val !== undefined) { + const _alarmFire = adapter.config.alarmFire != '' ? await adapter.getForeignStateAsync(adapter.config.alarmFire).catch((e) => adapter.log.warn(e)) : null; + if (typeof _alarmFire != undefined && _alarmFire != null) { statusAlarmFire = _alarmFire.val; } - const _triggerState = shutterSettings[s].triggerID !== '' ? await adapter.getForeignStateAsync(shutterSettings[s].triggerID).catch((e) => adapter.log.warn(e)) : null; + const _triggerState = shutterSettings[s].triggerID != '' ? await adapter.getForeignStateAsync(shutterSettings[s].triggerID).catch((e) => adapter.log.warn(e)) : null; mustValue = ('' + shutterSettings[s].triggerState); - mustValueTilted = shutterSettings[s].triggerStateTilted === 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); + mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (_triggerState && _triggerState.val !== undefined) { + if (typeof _triggerState != undefined && _triggerState != null) { currentValue = ('' + _triggerState.val); } switch (alarmType) { // +++++++++++++++++ Alarm Wind 1 +++++++++++++++ case 'alarmWind1': - if (statusAlarmWind1 === true) { + if (statusAlarmWind1) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) !== parseFloat(alarmWind1Level) && statusAlarmFire === false) { - if (statusAlarmWind2 === false && statusAlarmRain === false && statusAlarmFrost === false && statusAlarmFire === false) { - if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) != parseFloat(alarmWind1Level) && statusAlarmFire == false) { + if (statusAlarmWind2 == false && statusAlarmRain == false && statusAlarmFrost == false && statusAlarmFire == false) { + if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].triggerHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].triggerAction; } else { @@ -130,9 +130,9 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm wind 1 ' + shutterSettings[s].shutterName + ' old height: ' + shutterSettings[s].oldHeight + '% new height: ' + shutterSettings[s].currentHeight + '%'); } - else if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) === parseFloat(alarmWind1Level) && statusAlarmFire === false) { - if ((statusAlarmWind2 === false && statusAlarmRain === false && statusAlarmFrost === false && statusAlarmFire === false)) { - if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + else if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) == parseFloat(alarmWind1Level) && statusAlarmFire == false) { + if ((statusAlarmWind2 == false && statusAlarmRain == false && statusAlarmFrost == false && statusAlarmFire == false)) { + if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].triggerHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].triggerAction; } else { @@ -149,12 +149,12 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm wind 1 ' + shutterSettings[s].shutterName + ' already at: ' + shutterSettings[s].currentHeight + '% - setting current action: ' + shutterSettings[s].currentAction); } - } else if (statusAlarmWind1 === false) { - if (pendingAlarm === false && statusAlarmFrost === false) { - if (currentValue === mustValue || currentValue === mustValueTilted || shutterSettings[s].triggerID === '') { + } else if (!statusAlarmWind1) { + if (pendingAlarm == false && statusAlarmFrost == false) { + if (currentValue === mustValue || currentValue === mustValueTilted || shutterSettings[s].triggerID == '') { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) !== parseFloat(shutterSettings[s].alarmTriggerLevel)) { + if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) != parseFloat(shutterSettings[s].alarmTriggerLevel)) { shutterSettings[s].currentHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; shutterSettings[s].currentAction = shutterSettings[s].alarmTriggerAction; @@ -164,7 +164,7 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm wind 1 endet and no other alarm is pending ' + shutterSettings[s].shutterName + ' old height: ' + shutterSettings[s].oldHeight + '% new height: ' + shutterSettings[s].currentHeight + '%'); } - else if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) === parseFloat(shutterSettings[s].alarmTriggerLevel)) { + else if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].alarmTriggerLevel)) { shutterSettings[s].currentHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; shutterSettings[s].currentAction = shutterSettings[s].alarmTriggerAction; @@ -174,10 +174,10 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm wind 1 endet and no other alarm is pending ' + shutterSettings[s].shutterName + ' already at: ' + shutterSettings[s].currentHeight + '% - setting current action: ' + shutterSettings[s].currentAction); } - } else if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + } else if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined) { + if (typeof _shutterState != undefined && _shutterState != null) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerAction = shutterSettings[s].alarmTriggerAction; shutterSettings[s].currentHeight = shutterSettings[s].triggerDrive; @@ -192,9 +192,9 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { } else { adapter.log.info('Alarm Wind 1 endet for ID: ' + shutterSettings[s].shutterName + ' driving to next highest alarm priority'); - if (statusAlarmFire === false) { - if (statusAlarmFrost === true) { - if (shutterSettings[s].alarmTriggerAction === 'down') { + if (statusAlarmFire == false) { + if (statusAlarmFrost == true) { + if (shutterSettings[s].alarmTriggerAction == 'down') { shutterSettings[s].currentAction = 'frost'; shutterSettings[s].currentHeight = alarmFrostLevel; } else { @@ -202,11 +202,11 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { shutterSettings[s].currentHeight = shutterSettings[s].alarmTriggerLevel; } } - if (statusAlarmWind2 === true) { + if (statusAlarmWind2 == true) { shutterSettings[s].currentHeight = alarmWind2Level; shutterSettings[s].currentAction = 'wind2'; } - if (statusAlarmRain === true) { + if (statusAlarmRain == true) { shutterSettings[s].currentHeight = alarmRainLevel; shutterSettings[s].currentAction = 'rain'; } @@ -225,12 +225,12 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { // +++++++++++++++++ Alarm Wind 2 +++++++++++++++ case 'alarmWind2': - if (statusAlarmWind2 === true) { + if (statusAlarmWind2) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) !== parseFloat(alarmWind2Level) && statusAlarmFire === false) { - if (statusAlarmWind1 === false && statusAlarmRain === false && statusAlarmFrost === false && statusAlarmFire === false) { - if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) != parseFloat(alarmWind2Level) && statusAlarmFire == false) { + if (statusAlarmWind1 == false && statusAlarmRain == false && statusAlarmFrost == false && statusAlarmFire == false) { + if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].triggerHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].triggerAction; } else { @@ -247,9 +247,9 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm wind 2 ' + shutterSettings[s].shutterName + ' old height: ' + shutterSettings[s].oldHeight + '% new height: ' + shutterSettings[s].currentHeight + '%'); } - else if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) === parseFloat(alarmWind2Level)) { - if (statusAlarmRain === false && statusAlarmFrost === false && statusAlarmFire === false) { - if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + else if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) == parseFloat(alarmWind2Level)) { + if (statusAlarmRain == false && statusAlarmFrost == false && statusAlarmFire == false) { + if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].triggerHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].triggerAction; } else { @@ -266,12 +266,12 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm wind 2 ' + shutterSettings[s].shutterName + ' already at: ' + shutterSettings[s].currentHeight + '% - setting current action: ' + shutterSettings[s].currentAction); } - } else if (statusAlarmWind2 === false) { - if (pendingAlarm === false && statusAlarmFrost === false) { - if (currentValue === mustValue || currentValue === mustValueTilted || shutterSettings[s].triggerID === '') { + } else if (statusAlarmWind2 == false) { + if (pendingAlarm == false && statusAlarmFrost == false) { + if (currentValue === mustValue || currentValue === mustValueTilted || shutterSettings[s].triggerID == '') { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) !== parseFloat(shutterSettings[s].alarmTriggerLevel) && statusAlarmFire === false) { + if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) != parseFloat(shutterSettings[s].alarmTriggerLevel) && statusAlarmFire == false) { shutterSettings[s].currentHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; shutterSettings[s].currentAction = shutterSettings[s].alarmTriggerAction; @@ -281,7 +281,7 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm wind 2 endet and no other alarm is pending ' + shutterSettings[s].shutterName + ' old height: ' + shutterSettings[s].oldHeight + '% new height: ' + shutterSettings[s].currentHeight + '%'); } - else if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) === parseFloat(shutterSettings[s].alarmTriggerLevel)) { + else if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].alarmTriggerLevel)) { shutterSettings[s].currentHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; shutterSettings[s].currentAction = shutterSettings[s].alarmTriggerAction; @@ -291,10 +291,10 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm wind 2 endet and no other alarm is pending ' + shutterSettings[s].shutterName + ' already at: ' + shutterSettings[s].currentHeight + '% - setting current action: ' + shutterSettings[s].currentAction); } - } else if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + } else if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined) { + if (typeof _shutterState != undefined && _shutterState != null) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerAction = shutterSettings[s].alarmTriggerAction; shutterSettings[s].currentHeight = shutterSettings[s].triggerDrive; @@ -308,9 +308,9 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { } } else { adapter.log.info('Alarm Wind 2 endet for ID: ' + shutterSettings[s].shutterName + ' driving to next highest alarm priority'); - if (statusAlarmFire === false) { - if (statusAlarmFrost === true) { - if (shutterSettings[s].alarmTriggerAction === 'down') { + if (statusAlarmFire == false) { + if (statusAlarmFrost == true) { + if (shutterSettings[s].alarmTriggerAction == 'down') { shutterSettings[s].currentAction = 'frost'; shutterSettings[s].currentHeight = alarmFrostLevel; } else { @@ -318,11 +318,11 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { shutterSettings[s].currentHeight = shutterSettings[s].alarmTriggerLevel; } } - if (statusAlarmWind1 === true) { + if (statusAlarmWind1 == true) { shutterSettings[s].currentHeight = alarmWind1Level; shutterSettings[s].currentAction = 'wind1'; } - if (statusAlarmRain === true) { + if (statusAlarmRain == true) { shutterSettings[s].currentHeight = alarmRainLevel; shutterSettings[s].currentAction = 'rain'; } @@ -341,12 +341,12 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { // +++++++++++++++++ Alarm Rain +++++++++++++++ case 'alarmRain': - if (statusAlarmRain === true) { + if (statusAlarmRain == true) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) !== parseFloat(alarmRainLevel) && statusAlarmFire === false) { - if (statusAlarmWind1 === false && statusAlarmWind2 === false && statusAlarmFrost === false && statusAlarmFire === false) { - if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) != parseFloat(alarmRainLevel) && statusAlarmFire == false) { + if (statusAlarmWind1 == false && statusAlarmWind2 == false && statusAlarmFrost == false && statusAlarmFire == false) { + if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].triggerHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].triggerAction; } else { @@ -363,9 +363,9 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm rain ' + shutterSettings[s].shutterName + ' old height: ' + shutterSettings[s].oldHeight + '% new height: ' + shutterSettings[s].currentHeight + '%'); } - else if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) === parseFloat(alarmRainLevel) && statusAlarmFire === false) { - if (statusAlarmWind1 === false && statusAlarmWind2 === false && statusAlarmFrost === false && statusAlarmFire === false) { - if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + else if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) == parseFloat(alarmRainLevel) && statusAlarmFire == false) { + if (statusAlarmWind1 == false && statusAlarmWind2 == false && statusAlarmFrost == false && statusAlarmFire == false) { + if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].triggerHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].triggerAction; } else { @@ -382,12 +382,12 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm rain ' + shutterSettings[s].shutterName + ' already at: ' + shutterSettings[s].currentHeight + '% - setting current action: ' + shutterSettings[s].currentAction); } - } else if (statusAlarmRain === false) { - if (pendingAlarm === false && statusAlarmFrost === false) { - if (currentValue === mustValue || currentValue === mustValueTilted || shutterSettings[s].triggerID === '') { + } else if (statusAlarmRain == false) { + if (pendingAlarm == false && statusAlarmFrost == false) { + if (currentValue === mustValue || currentValue === mustValueTilted || shutterSettings[s].triggerID == '') { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) !== parseFloat(shutterSettings[s].alarmTriggerLevel)) { + if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) != parseFloat(shutterSettings[s].alarmTriggerLevel)) { shutterSettings[s].currentHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; shutterSettings[s].currentAction = shutterSettings[s].alarmTriggerAction; @@ -397,7 +397,7 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm rain endet and no other alarm is pending ' + shutterSettings[s].shutterName + ' old height: ' + shutterSettings[s].oldHeight + '% new height: ' + shutterSettings[s].currentHeight + '%'); } - else if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) === parseFloat(shutterSettings[s].alarmTriggerLevel)) { + else if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].alarmTriggerLevel)) { shutterSettings[s].currentHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; shutterSettings[s].currentAction = shutterSettings[s].alarmTriggerAction; @@ -407,10 +407,10 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm rain endet and no other alarm is pending ' + shutterSettings[s].shutterName + ' already at: ' + shutterSettings[s].currentHeight + '% - setting current action: ' + shutterSettings[s].currentAction); } - } else if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + } else if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined) { + if (typeof _shutterState != undefined && _shutterState != null) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerAction = shutterSettings[s].alarmTriggerAction; shutterSettings[s].currentHeight = shutterSettings[s].triggerDrive; @@ -425,9 +425,9 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { } else { adapter.log.info('Alarm Rain endet for ID: ' + shutterSettings[s].shutterName + ' driving to next highest alarm priority'); - if (statusAlarmFire === false) { - if (statusAlarmFrost === true) { - if (shutterSettings[s].alarmTriggerAction === 'down') { + if (statusAlarmFire == false) { + if (statusAlarmFrost == true) { + if (shutterSettings[s].alarmTriggerAction == 'down') { shutterSettings[s].currentAction = 'frost'; shutterSettings[s].currentHeight = alarmFrostLevel; } else { @@ -435,11 +435,11 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { shutterSettings[s].currentHeight = shutterSettings[s].alarmTriggerLevel; } } - if (statusAlarmWind1 === true) { + if (statusAlarmWind1 == true) { shutterSettings[s].currentHeight = alarmWind1Level; shutterSettings[s].currentAction = 'wind1'; } - if (statusAlarmWind2 === true) { + if (statusAlarmWind2 == true) { shutterSettings[s].currentHeight = alarmWind2Level; shutterSettings[s].currentAction = 'wind2'; } @@ -458,25 +458,25 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { // +++++++++++++++++ Alarm Frost +++++++++++++++ case 'alarmFrost': - if (statusAlarmFrost === true) { + if (statusAlarmFrost == true) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) !== parseFloat(alarmFrostLevel) && statusAlarmFire === false) { - if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { - if (statusAlarmWind1 === false && statusAlarmWind2 === false && statusAlarmRain === false && statusAlarmFire === false) { + if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) != parseFloat(alarmFrostLevel) && statusAlarmFire == false) { + if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { + if (statusAlarmWind1 == false && statusAlarmWind2 == false && statusAlarmRain == false && statusAlarmFire == false) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].triggerHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].triggerAction; } - if ((shutterSettings[s].triggerHeight < parseFloat(alarmFrostLevel) && convertShutter === false) || (shutterSettings[s].triggerHeight > parseFloat(alarmFrostLevel) && convertShutter === true)) { + if ((shutterSettings[s].triggerHeight < parseFloat(alarmFrostLevel) && convertShutter == false) || (shutterSettings[s].triggerHeight > parseFloat(alarmFrostLevel) && convertShutter == true)) { shutterSettings[s].triggerHeight = parseFloat(alarmFrostLevel); shutterSettings[s].triggerAction = 'frost'; } - } else if (currentValue === mustValue || currentValue === mustValueTilted || currentValue === '') { - if (statusAlarmWind1 === false && statusAlarmWind2 === false && statusAlarmRain === false && statusAlarmFire === false) { + } else if (currentValue === mustValue || currentValue === mustValueTilted || currentValue == '') { + if (statusAlarmWind1 == false && statusAlarmWind2 == false && statusAlarmRain == false && statusAlarmFire == false) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].currentHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].currentAction; } - if ((parseFloat(_shutterState.val) < parseFloat(alarmFrostLevel) && convertShutter === false) || (parseFloat(_shutterState.val) > parseFloat(alarmFrostLevel) && convertShutter === true)) { + if ((parseFloat(_shutterState.val) < parseFloat(alarmFrostLevel) && convertShutter == false) || (parseFloat(_shutterState.val) > parseFloat(alarmFrostLevel) && convertShutter == true)) { shutterSettings[s].currentHeight = parseFloat(alarmFrostLevel); shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; shutterSettings[s].currentAction = 'frost'; @@ -489,14 +489,14 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { } } - else if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) === parseFloat(alarmFrostLevel) && statusAlarmFire === false) { - if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { - if (statusAlarmWind1 === false && statusAlarmWind2 === false && statusAlarmRain === false && statusAlarmFire === false) { + else if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) == parseFloat(alarmFrostLevel) && statusAlarmFire == false) { + if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { + if (statusAlarmWind1 == false && statusAlarmWind2 == false && statusAlarmRain == false && statusAlarmFire == false) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].triggerHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].triggerAction; } - } else if (currentValue === mustValue || currentValue === mustValueTilted || currentValue === '') { - if (statusAlarmWind1 === false && statusAlarmWind2 === false && statusAlarmRain === false && statusAlarmFire === false) { + } else if (currentValue === mustValue || currentValue === mustValueTilted || currentValue == '') { + if (statusAlarmWind1 == false && statusAlarmWind2 == false && statusAlarmRain == false && statusAlarmFire == false) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].currentHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].currentAction; } @@ -510,12 +510,12 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm frost' + shutterSettings[s].shutterName + ' already at: ' + shutterSettings[s].currentHeight + '% - setting current action: ' + shutterSettings[s].currentAction); } - } else if (statusAlarmFrost === false) { - if (pendingAlarm === false) { - if (currentValue === mustValue || currentValue === mustValueTilted || shutterSettings[s].triggerID === '') { + } else if (statusAlarmFrost == false) { + if (pendingAlarm == false) { + if (currentValue === mustValue || currentValue === mustValueTilted || shutterSettings[s].triggerID == '') { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) !== parseFloat(shutterSettings[s].alarmTriggerLevel)) { + if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) != parseFloat(shutterSettings[s].alarmTriggerLevel)) { shutterSettings[s].currentHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; shutterSettings[s].currentAction = shutterSettings[s].alarmTriggerAction; @@ -525,7 +525,7 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm frost endet and no other alarm is pending ' + shutterSettings[s].shutterName + ' old height: ' + shutterSettings[s].oldHeight + '% new height: ' + shutterSettings[s].currentHeight + '%'); } - else if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) === parseFloat(shutterSettings[s].alarmTriggerLevel)) { + else if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].alarmTriggerLevel)) { shutterSettings[s].currentHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; shutterSettings[s].currentAction = shutterSettings[s].alarmTriggerAction; @@ -535,10 +535,10 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm frost endet and no other alarm is pending ' + shutterSettings[s].shutterName + ' already at: ' + shutterSettings[s].currentHeight + '% - setting current action: ' + shutterSettings[s].currentAction); } - } else if (currentValue !== '' && currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + } else if (currentValue != '' && currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined) { + if (typeof _shutterState != undefined && _shutterState != null) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].alarmTriggerLevel); shutterSettings[s].triggerAction = shutterSettings[s].alarmTriggerAction; shutterSettings[s].currentHeight = shutterSettings[s].triggerDrive; @@ -552,16 +552,16 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { } } else { adapter.log.info('Alarm frost endet for ID: ' + shutterSettings[s].shutterName + ' driving to next highest alarm priority'); - if (statusAlarmFire === false) { - if (statusAlarmWind1 === true) { + if (statusAlarmFire == false) { + if (statusAlarmWind1 == true) { shutterSettings[s].currentHeight = alarmWind1Level; shutterSettings[s].currentAction = 'wind1'; } - if (statusAlarmWind2 === true) { + if (statusAlarmWind2 == true) { shutterSettings[s].currentHeight = alarmWind2Level; shutterSettings[s].currentAction = 'wind2'; } - if (statusAlarmRain === true) { + if (statusAlarmRain == true) { shutterSettings[s].currentHeight = alarmRainLevel; shutterSettings[s].currentAction = 'rain'; } @@ -580,11 +580,11 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { // +++++++++++++++++ Alarm Fire +++++++++++++++ case 'alarmFire': - if (statusAlarmFire === true) { + if (statusAlarmFire == true) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) !== parseFloat(alarmFireLevel)) { - if (statusAlarmWind1 === false && statusAlarmWind2 === false && statusAlarmRain === false && statusAlarmFrost === false) { + if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) != parseFloat(alarmFireLevel)) { + if (statusAlarmWind1 == false && statusAlarmWind2 == false && statusAlarmRain == false && statusAlarmFrost == false) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].currentHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].currentAction; } @@ -597,8 +597,8 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm fire ' + shutterSettings[s].shutterName + ' old height: ' + shutterSettings[s].oldHeight + '% new height: ' + shutterSettings[s].currentHeight + '%'); } - else if (_shutterState && _shutterState.val !== undefined && parseFloat(_shutterState.val) === parseFloat(alarmFireLevel)) { - if (statusAlarmWind1 === false && statusAlarmWind2 === false && statusAlarmRain === false && statusAlarmFrost === false) { + else if (typeof _shutterState != undefined && _shutterState != null && parseFloat(_shutterState.val) == parseFloat(alarmFireLevel)) { + if (statusAlarmWind1 == false && statusAlarmWind2 == false && statusAlarmRain == false && statusAlarmFrost == false) { shutterSettings[s].alarmTriggerLevel = shutterSettings[s].currentHeight; shutterSettings[s].alarmTriggerAction = shutterSettings[s].currentAction; } @@ -611,7 +611,7 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { adapter.log.debug('shutter alarm fire ' + shutterSettings[s].shutterName + ' already at: ' + shutterSettings[s].currentHeight + '% - setting current action: ' + shutterSettings[s].currentAction); } - } else if (statusAlarmFire === false) { + } else if (statusAlarmFire == false) { adapter.log.info('Alarm fire endet for ID: ' + shutterSettings[s].shutterName + ' fire alarm is not driving back! - please init shutters with button "open all"'); } await sleep(driveDelayUpAstro); @@ -629,7 +629,7 @@ async function shutterAlarm(adapter, alarmType, shutterSettings) { async function checkPendingAlarm(adapter, Shutter) { return new Promise(async (resolve) => { - if (Shutter.enableAlarmWind1 === true || Shutter.enableAlarmWind2 === true || Shutter.enableAlarmRain === true || Shutter.enableAlarmFire === true || Shutter.enableAlarmFrost === true) { + if (Shutter.enableAlarmWind1 == true || Shutter.enableAlarmWind2 == true || Shutter.enableAlarmRain == true || Shutter.enableAlarmFire == true || Shutter.enableAlarmFrost == true) { adapter.log.debug('start pendingAlarm to check if an alarm is currently pending (exept frost)'); } @@ -640,22 +640,22 @@ async function checkPendingAlarm(adapter, Shutter) { let resAlarmPending = false; try { - const _statusAlarmWind1 = adapter.config.alarmWind1 !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmWind1).catch((e) => adapter.log.warn(e)) : null; - if (_statusAlarmWind1 && _statusAlarmWind1.val !== undefined) { + const _statusAlarmWind1 = adapter.config.alarmWind1 != '' ? await adapter.getForeignStateAsync(adapter.config.alarmWind1).catch((e) => adapter.log.warn(e)) : null; + if (typeof _statusAlarmWind1 != undefined && _statusAlarmWind1 != null && _statusAlarmWind1.val) { statusAlarmWind1 = _statusAlarmWind1.val; } - const _statusAlarmWind2 = adapter.config.alarmWind2 !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmWind2).catch((e) => adapter.log.warn(e)) : null; - if (_statusAlarmWind2 && _statusAlarmWind2.val !== undefined) { + const _statusAlarmWind2 = adapter.config.alarmWind2 != '' ? await adapter.getForeignStateAsync(adapter.config.alarmWind2).catch((e) => adapter.log.warn(e)) : null; + if (typeof _statusAlarmWind2 != undefined && _statusAlarmWind2 != null && _statusAlarmWind2.val) { statusAlarmWind2 = _statusAlarmWind2.val; } - const _statusAlarmRain = adapter.config.alarmRain !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmRain).catch((e) => adapter.log.warn(e)) : null; - if (_statusAlarmRain && _statusAlarmRain.val !== undefined) { + const _statusAlarmRain = adapter.config.alarmRain != '' ? await adapter.getForeignStateAsync(adapter.config.alarmRain).catch((e) => adapter.log.warn(e)) : null; + if (typeof _statusAlarmRain != undefined && _statusAlarmRain != null && _statusAlarmRain.val) { statusAlarmRain = _statusAlarmRain.val; } - const _statusAlarmFire = adapter.config.alarmFire !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmFire).catch((e) => adapter.log.warn(e)) : null; - if (_statusAlarmFire && _statusAlarmFire.val !== undefined) { + const _statusAlarmFire = adapter.config.alarmFire != '' ? await adapter.getForeignStateAsync(adapter.config.alarmFire).catch((e) => adapter.log.warn(e)) : null; + if (typeof _statusAlarmFire != undefined && _statusAlarmFire != null && _statusAlarmFire.val) { statusAlarmFire = _statusAlarmFire.val; } } catch (e) { @@ -663,11 +663,11 @@ async function checkPendingAlarm(adapter, Shutter) { } // check if alarm ist pending for the given shutter and return true if yes - if ((statusAlarmWind1 === true && Shutter.enableAlarmWind1 === true) || (statusAlarmWind2 === true && Shutter.enableAlarmWind2 === true) || (statusAlarmRain === true && Shutter.enableAlarmRain === true) || (statusAlarmFire === true && Shutter.enableAlarmFire === true) || (Shutter.currentAction === 'fire')) { + if ((statusAlarmWind1 == true && Shutter.enableAlarmWind1 == true) || (statusAlarmWind2 == true && Shutter.enableAlarmWind2 == true) || (statusAlarmRain == true && Shutter.enableAlarmRain == true) || (statusAlarmFire == true && Shutter.enableAlarmFire == true) || (Shutter.currentAction == 'fire')) { resAlarmPending = true; } - if (Shutter.enableAlarmWind1 === true || Shutter.enableAlarmWind2 === true || Shutter.enableAlarmRain === true || Shutter.enableAlarmFire === true || Shutter.enableAlarmFrost === true) { + if (Shutter.enableAlarmWind1 == true || Shutter.enableAlarmWind2 == true || Shutter.enableAlarmRain == true || Shutter.enableAlarmFire == true || Shutter.enableAlarmFrost == true) { adapter.log.debug('status alarm pending for ' + Shutter.name + ': ' + resAlarmPending); } resolve(resAlarmPending); @@ -678,22 +678,22 @@ async function checkPendingAlarm(adapter, Shutter) { async function checkFrostAlarm(adapter, Shutter) { return new Promise(async (resolve) => { - if (Shutter.enableAlarmWind1 === true || Shutter.enableAlarmWind2 === true || Shutter.enableAlarmRain === true || Shutter.enableAlarmFire === true || Shutter.enableAlarmFrost === true) { + if (Shutter.enableAlarmWind1 == true || Shutter.enableAlarmWind2 == true || Shutter.enableAlarmRain == true || Shutter.enableAlarmFire == true || Shutter.enableAlarmFrost == true) { adapter.log.debug('start checking frost alarm'); } let resAlarmFrost = false; try { - const _resAlarmFrost = adapter.config.alarmFrost !== '' ? await adapter.getForeignStateAsync(adapter.config.alarmFrost).catch((e) => adapter.log.warn(e)) : null; - if (_resAlarmFrost && _resAlarmFrost.val !== undefined ) { + const _resAlarmFrost = adapter.config.alarmFrost != '' ? await adapter.getForeignStateAsync(adapter.config.alarmFrost).catch((e) => adapter.log.warn(e)) : null; + if (typeof _resAlarmFrost != undefined && _resAlarmFrost != null && _resAlarmFrost.val) { resAlarmFrost = _resAlarmFrost.val; } } catch (e) { adapter.log.warn(`check frost alarm is not possible: ${e}`) } - if (Shutter.enableAlarmWind1 === true || Shutter.enableAlarmWind2 === true || Shutter.enableAlarmRain === true || Shutter.enableAlarmFire === true || Shutter.enableAlarmFrost === true) { + if (Shutter.enableAlarmWind1 == true || Shutter.enableAlarmWind2 == true || Shutter.enableAlarmRain == true || Shutter.enableAlarmFire == true || Shutter.enableAlarmFrost == true) { adapter.log.debug('status frost alarm for ' + Shutter.name + ': ' + resAlarmFrost); } resolve(resAlarmFrost); diff --git a/lib/shutterBrightnessSensor.js b/lib/shutterBrightnessSensor.js index 28665d1e..e212ab0d 100644 --- a/lib/shutterBrightnessSensor.js +++ b/lib/shutterBrightnessSensor.js @@ -49,17 +49,17 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings const shutterUpBrightness = adapter.config.lightsensorUp; const shutterDownBrightnessTime = adapter.config.lightsensorDownTime; const shutterUpBrightnessTime = adapter.config.lightsensorUpTime; - const driveDelayAstro = adapter.config.driveDelayUpAstro !== 0 ? adapter.config.driveDelayUpAstro * 1000 : 20; + const driveDelayAstro = adapter.config.driveDelayUpAstro != 0 ? adapter.config.driveDelayUpAstro * 1000 : 20; const currentTime = getDate(); - if (currentTime > shutterDownBrightnessTime && brightnessValue <= shutterDownBrightness && brightnessDown === false) { + if (currentTime > shutterDownBrightnessTime && brightnessValue <= shutterDownBrightness && brightnessDown == false) { if (shutterSettings) { - const resLiving = shutterSettings.filter((/** @type {{ typeDown: string; }} */ d) => d.typeDown === 'lightsensor'); // Filter Area Living + const resLiving = shutterSettings.filter((/** @type {{ typeDown: string; }} */ d) => d.typeDown == 'lightsensor'); // Filter Area Living const result = resLiving.filter((/** @type {{ enabled: boolean; }} */ d) => d.enabled === true); // Filter enabled for (const i in result) { for (const s in shutterSettings) { - if (shutterSettings[s].shutterName === result[i].shutterName) { + if (shutterSettings[s].shutterName == result[i].shutterName) { const inSummerNotDown = await CheckInSummerNotDown(adapter, shutterSettings[s]); const XmasLevel = await GetXmasLevel(adapter, shutterSettings[s]); const nameDevice = shutterSettings[s].shutterName.replace(/[.;, ]/g, '_'); @@ -72,8 +72,8 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings if (getDate() < adapter.config.betweenPositionTime) { // between Position Level - targetLevel2Set = shutterSettings[s].betweenPosition === true ? parseFloat(shutterSettings[s].betweenPositionLevel) : parseFloat(shutterSettings[s].heightDown); - downAction = shutterSettings[s].betweenPosition === true ? 'middle' : 'down'; + targetLevel2Set = shutterSettings[s].betweenPosition == true ? parseFloat(shutterSettings[s].betweenPositionLevel) : parseFloat(shutterSettings[s].heightDown); + downAction = shutterSettings[s].betweenPosition == true ? 'middle' : 'down'; } else { targetLevel2Set = parseFloat(shutterSettings[s].heightDown); downAction = 'down'; @@ -87,7 +87,7 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings shutterSettings[s].alarmTriggerAction = downAction; // overwrite target position and downAction if frost alarm is set. - if (statusAlarmFrost === true && shutterSettings[s].enableAlarmFrost === true && downAction !== 'Xmas') { + if (statusAlarmFrost == true && shutterSettings[s].enableAlarmFrost == true && downAction != 'Xmas') { targetLevel2Set = parseFloat(adapter.config.alarmFrostLevel); downAction = 'frost'; } @@ -96,22 +96,22 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings const _autoDownState = await adapter.getStateAsync(`shutters.autoDown.${nameDevice}`).catch((e) => adapter.log.warn(e)); if (_autoDownState && _autoDownState === true || _autoDownState && _autoDownState.val === true) { - if (shutterSettings[s].currentAction !== 'triggered' || shutterSettings[s].currentAction !== 'triggered_Tilted' || shutterSettings[s].currentAction !== 'down') { - if (pendingAlarm === false) { + if (shutterSettings[s].currentAction != 'triggered' || shutterSettings[s].currentAction != 'triggered_Tilted' || shutterSettings[s].currentAction != 'down') { + if (pendingAlarm == false) { let currentValue = ''; - const _triggerState = shutterSettings[s].triggerID !== '' ? await adapter.getForeignStateAsync(shutterSettings[s].triggerID).catch((e) => adapter.log.warn(e)) : null; + const _triggerState = shutterSettings[s].triggerID != '' ? await adapter.getForeignStateAsync(shutterSettings[s].triggerID).catch((e) => adapter.log.warn(e)) : null; const mustValue = ('' + shutterSettings[s].triggerState); - const mustValueTilted = shutterSettings[s].triggerStateTilted === 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); + const mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (_triggerState && _triggerState.val !== undefined) { + if (typeof _triggerState != undefined && _triggerState != null && _triggerState.val != undefined) { currentValue = ('' + _triggerState.val); } - if (currentValue === mustValue || currentValue === mustValueTilted || (currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].autoDrive !== 'onlyUp' && shutterSettings[s].autoDrive !== 'off')) { + if (currentValue === mustValue || currentValue === mustValueTilted || (currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].autoDrive != 'onlyUp' && shutterSettings[s].autoDrive != 'off')) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && _shutterState.val !== targetLevel2Set && shutterSettings[s].triggerAction !== 'down') { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != targetLevel2Set && shutterSettings[s].triggerAction != 'down') { shutterSettings[s].currentHeight = targetLevel2Set; shutterSettings[s].currentAction = downAction; shutterSettings[s].lastAutoAction = 'Down_Brightness'; @@ -123,7 +123,7 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings adapter.log.debug(`last automatic Action for ${shutterSettings[s].shutterName}: ${shutterSettings[s].lastAutoAction}`); adapter.log.debug(`save current height: ${shutterSettings[s].currentHeight}% from ${shutterSettings[s].shutterName}`); } - else if (_shutterState && _shutterState.val !== undefined && _shutterState.val === targetLevel2Set && (shutterSettings[s].currentHeight !== targetLevel2Set || shutterSettings[s].currentAction !== downAction)) { + else if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val == targetLevel2Set && (shutterSettings[s].currentHeight != targetLevel2Set || shutterSettings[s].currentAction != downAction)) { shutterSettings[s].currentHeight = targetLevel2Set; shutterSettings[s].currentAction = downAction; @@ -131,10 +131,10 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings adapter.log.debug(`Lightsensor down ${shutterSettings[s].shutterName} already down at: ${targetLevel2Set}% - setting current action: ${shutterSettings[s].currentAction}`); } - } else if (shutterSettings[s].triggerID === '') { + } else if (shutterSettings[s].triggerID == '') { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && _shutterState.val !== targetLevel2Set && shutterSettings[s].lastAutoAction !== 'Down_Brightness' && (_shutterState.val === shutterSettings[s].heightDownSun || _shutterState.val === shutterSettings[s].heightUp || _shutterState.val === shutterSettings[s].triggerDrive)) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != targetLevel2Set && (_shutterState.val == shutterSettings[s].heightDownSun || _shutterState.val == shutterSettings[s].heightUp || _shutterState.val == shutterSettings[s].triggerDrive)) { shutterSettings[s].currentHeight = targetLevel2Set; shutterSettings[s].currentAction = downAction; shutterSettings[s].lastAutoAction = 'Down_Brightness'; @@ -144,7 +144,7 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings adapter.log.debug(`last automatic Action for ${shutterSettings[s].shutterName}: ${shutterSettings[s].lastAutoAction}`); adapter.log.debug(`save current height: ${shutterSettings[s].currentHeight}% from ${shutterSettings[s].shutterName}`); } - else if (_shutterState && _shutterState.val !== undefined && _shutterState.val === targetLevel2Set && (shutterSettings[s].currentHeight !== targetLevel2Set || shutterSettings[s].currentAction !== downAction)) { + else if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val == targetLevel2Set && (shutterSettings[s].currentHeight != targetLevel2Set || shutterSettings[s].currentAction != downAction)) { shutterSettings[s].currentHeight = targetLevel2Set; shutterSettings[s].currentAction = downAction; @@ -153,10 +153,10 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings adapter.log.debug(`Lightsensor down ${shutterSettings[s].shutterName} already down at: ${targetLevel2Set}% - setting current action: ${shutterSettings[s].currentAction}`); } - } else if (currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + } else if (currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && _shutterState.val !== targetLevel2Set && (_shutterState.val === shutterSettings[s].heightDownSun || _shutterState.val === shutterSettings[s].heightUp || _shutterState.val === shutterSettings[s].triggerDrive)) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != targetLevel2Set && (_shutterState.val == shutterSettings[s].heightDownSun || _shutterState.val == shutterSettings[s].heightUp || _shutterState.val == shutterSettings[s].triggerDrive)) { shutterSettings[s].triggerHeight = targetLevel2Set; shutterSettings[s].triggerAction = downAction; @@ -179,21 +179,21 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings } } else if (currentTime > shutterUpBrightnessTime && currentTime < shutterDownBrightnessTime && brightnessValue > shutterUpBrightness) { if (shutterSettings) { - const resLiving = shutterSettings.filter((/** @type {{ typeUp: string; }} */ d) => d.typeUp === 'lightsensor'); // Filter Area Living + const resLiving = shutterSettings.filter((/** @type {{ typeUp: string; }} */ d) => d.typeUp == 'lightsensor'); // Filter Area Living const result = resLiving.filter((/** @type {{ enabled: boolean; }} */ d) => d.enabled === true); // Filter enabled for (const i in result) { for (const s in shutterSettings) { - if (shutterSettings[s].shutterName === result[i].shutterName) { + if (shutterSettings[s].shutterName == result[i].shutterName) { const nameDevice = shutterSettings[s].shutterName.replace(/[.;, ]/g, '_'); const pendingAlarm = await checkPendingAlarm(adapter, shutterSettings[s]); const _autoUpState = await adapter.getStateAsync(`shutters.autoUp.${nameDevice}`).catch((e) => adapter.log.warn(e)); if (_autoUpState && _autoUpState === true || _autoUpState && _autoUpState.val === true) { - if (pendingAlarm === false) { + if (pendingAlarm == false) { let shutterHeight = 0; - if (shutterSettings[s].currentAction === 'sunProtect' || shutterSettings[s].currentAction === 'OpenInSunProtect') { + if (shutterSettings[s].currentAction == 'sunProtect' || shutterSettings[s].currentAction == 'OpenInSunProtect') { shutterHeight = parseFloat(shutterSettings[s].heightDownSun); shutterSettings[s].currentAction = 'sunProtect'; } else { @@ -207,19 +207,19 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings let currentValue = ''; - const _triggerState = shutterSettings[s].triggerID !== '' ? await adapter.getForeignStateAsync(shutterSettings[s].triggerID).catch((e) => adapter.log.warn(e)) : null; + const _triggerState = shutterSettings[s].triggerID != '' ? await adapter.getForeignStateAsync(shutterSettings[s].triggerID).catch((e) => adapter.log.warn(e)) : null; const mustValue = ('' + shutterSettings[s].triggerState); - const mustValueTilted = shutterSettings[s].triggerStateTilted === 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); + const mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (_triggerState && _triggerState.val !== undefined) { + if (typeof _triggerState != undefined && _triggerState != null && _triggerState.val != undefined) { currentValue = ('' + _triggerState.val); } - if (pendingAlarm === false) { - if (currentValue === mustValue || currentValue === mustValueTilted || (currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].autoDrive !== 'onlyDown' && shutterSettings[s].autoDrive !== 'off')) { + if (pendingAlarm == false) { + if (currentValue === mustValue || currentValue === mustValueTilted || (currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].autoDrive != 'onlyDown' && shutterSettings[s].autoDrive != 'off')) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && _shutterState.val !== shutterHeight && shutterSettings[s].lastAutoAction !== 'up_Brightness') { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != shutterHeight && shutterSettings[s].lastAutoAction != 'up_Brightness') { shutterSettings[s].currentHeight = shutterHeight; shutterSettings[s].lastAutoAction = 'up_Brightness'; shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; // reset Trigger @@ -230,7 +230,7 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings adapter.log.debug(`last automatic Action for ${shutterSettings[s].shutterName}: ${shutterSettings[s].lastAutoAction}`); adapter.log.debug('save current height: ' + shutterSettings[s].currentHeight + '%' + ' from ' + shutterSettings[s].shutterName); } - else if (_shutterState && _shutterState.val !== undefined && _shutterState.val === shutterHeight) { + else if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val == shutterHeight) { shutterSettings[s].currentHeight = shutterHeight; shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; // reset Trigger shutterSettings[s].triggerAction = shutterSettings[s].currentAction; // reset Trigger @@ -240,10 +240,10 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings adapter.log.debug(`Lightsensor up ${shutterSettings[s].shutterName} already up at: ${shutterSettings[s].heightUp}% - setting current action: ${shutterSettings[s].currentAction}`); } - } else if (shutterSettings[s].triggerID === '') { + } else if (shutterSettings[s].triggerID == '') { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && _shutterState.val !== shutterHeight && shutterSettings[s].lastAutoAction !== 'up_Brightness') { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != shutterHeight && shutterSettings[s].lastAutoAction != 'up_Brightness') { shutterSettings[s].currentHeight = shutterHeight; shutterSettings[s].lastAutoAction = 'up_Brightness'; @@ -252,17 +252,17 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings adapter.log.debug(`last automatic Action for ${shutterSettings[s].shutterName}: ${shutterSettings[s].lastAutoAction}`); adapter.log.debug(`save current height: ${shutterSettings[s].currentHeight}% from ${shutterSettings[s].shutterName}`); } - else if (_shutterState && _shutterState.val !== undefined && _shutterState.val === shutterHeight) { + else if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val == shutterHeight) { shutterSettings[s].currentHeight = shutterHeight; await setShutterInfo(adapter, shutterSettings, shutterSettings[s], nameDevice); adapter.log.debug(`Lightsensor up ${shutterSettings[s].shutterName} already up at: ${shutterSettings[s].heightUp}% - setting current action: ${shutterSettings[s].currentAction}`); } - } else if (currentValue !== mustValue && currentValue !== mustValueTilted && shutterSettings[s].driveAfterClose === true) { + } else if (currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].driveAfterClose == true) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && _shutterState.val !== shutterHeight) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != shutterHeight) { shutterSettings[s].triggerHeight = shutterHeight; shutterSettings[s].triggerAction = shutterSettings[s].currentAction; @@ -275,7 +275,7 @@ async function shutterBrightnessSensor(adapter, brightnessValue, shutterSettings await sleep(driveDelayAstro); } else { let shutterHeight = 0; - if (shutterSettings[s].currentAction === 'sunProtect' || shutterSettings[s].currentAction === 'OpenInSunProtect') { + if (shutterSettings[s].currentAction == 'sunProtect' || shutterSettings[s].currentAction == 'OpenInSunProtect') { shutterHeight = parseFloat(shutterSettings[s].heightDownSun); } else { shutterHeight = parseFloat(shutterSettings[s].heightUp); diff --git a/lib/sunProtect.js b/lib/sunProtect.js index 8b733a0a..4da5465e 100644 --- a/lib/sunProtect.js +++ b/lib/sunProtect.js @@ -55,7 +55,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { mustValue = ('' + shutterSettings[s].triggerState); mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (typeof _triggerState != undefined && _triggerState != null) { + if (typeof _triggerState != undefined && _triggerState != null && _triggerState.val != undefined) { currentValue = ('' + _triggerState.val); } @@ -65,17 +65,17 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { let sunLight = 0; const _insideTempState = shutterSettings[s].tempSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].tempSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _insideTempState != undefined && _insideTempState != null) { + if (typeof _insideTempState != undefined && _insideTempState != null && _insideTempState.val != undefined) { insideTemp = parseFloat(_insideTempState.val); } const _outsideTempState = shutterSettings[s].outsideTempSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].outsideTempSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _outsideTempState != undefined && _outsideTempState != null) { + if (typeof _outsideTempState != undefined && _outsideTempState != null && _outsideTempState.val != undefined) { outsideTemp = parseFloat(_outsideTempState.val); } const _sunLight = shutterSettings[s].lightSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].lightSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _sunLight != undefined && _sunLight != null) { + if (typeof _sunLight != undefined && _sunLight != null && _sunLight.val != undefined) { sunLight = parseFloat(_sunLight.val); } @@ -91,7 +91,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp) { @@ -139,7 +139,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp + ' AND triggerAction:' + shutterSettings[s].triggerAction + ' != down '); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp && shutterSettings[s].triggerAction != 'down' && shutterSettings[s].currentAction != 'middle' && shutterSettings[s].currentAction != 'Xmas') { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightDownSun); @@ -176,7 +176,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].currentAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].sunProtectEndtimerid = ''; shutterSettings[s].currentAction = 'up'; @@ -224,7 +224,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].triggerAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); shutterSettings[s].triggerAction = 'up'; @@ -266,7 +266,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { mustValue = ('' + shutterSettings[s].triggerState); mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (typeof _triggerState != undefined && _triggerState != null) { + if (typeof _triggerState != undefined && _triggerState != null && _triggerState.val != undefined) { currentValue = ('' + _triggerState.val); } @@ -276,17 +276,17 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { let sunLight = 0; const _insideTempState = shutterSettings[s].tempSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].tempSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _insideTempState != undefined && _insideTempState != null) { + if (typeof _insideTempState != undefined && _insideTempState != null && _insideTempState.val != undefined) { insideTemp = parseFloat(_insideTempState.val); } const _outsideTempState = shutterSettings[s].outsideTempSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].outsideTempSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _outsideTempState != undefined && _outsideTempState != null) { + if (typeof _outsideTempState != undefined && _outsideTempState != null && _outsideTempState.val != undefined) { outsideTemp = parseFloat(_outsideTempState.val); } const _sunLight = shutterSettings[s].lightSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].lightSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _sunLight != undefined && _sunLight != null) { + if (typeof _sunLight != undefined && _sunLight != null && _sunLight.val != undefined) { sunLight = parseFloat(_sunLight.val); } @@ -302,7 +302,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp) { @@ -348,7 +348,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp + ' AND triggerAction:' + shutterSettings[s].triggerAction + ' != down '); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp && shutterSettings[s].triggerAction != 'down' && shutterSettings[s].currentAction != 'middle' && shutterSettings[s].currentAction != 'Xmas') { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightDownSun); @@ -387,7 +387,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].currentAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].sunProtectEndtimerid = ''; shutterSettings[s].currentAction = 'up'; @@ -436,7 +436,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].triggerAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); shutterSettings[s].triggerAction = 'up'; @@ -479,7 +479,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { mustValue = ('' + shutterSettings[s].triggerState); mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (typeof _triggerState != undefined && _triggerState != null) { + if (typeof _triggerState != undefined && _triggerState != null && _triggerState.val != undefined) { currentValue = ('' + _triggerState.val); } @@ -488,12 +488,12 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { let sunLight = 0; const _outsideTempState = shutterSettings[s].outsideTempSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].outsideTempSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _outsideTempState != undefined && _outsideTempState != null) { + if (typeof _outsideTempState != undefined && _outsideTempState != null && _outsideTempState.val != undefined) { outsideTemp = parseFloat(_outsideTempState.val); } const _sunLight = shutterSettings[s].lightSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].lightSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _sunLight != undefined && _sunLight != null) { + if (typeof _sunLight != undefined && _sunLight != null && _sunLight.val != undefined) { sunLight = parseFloat(_sunLight.val); } @@ -509,7 +509,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp) { @@ -558,7 +558,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp && shutterSettings[s].triggerAction != 'down' && shutterSettings[s].currentAction != 'middle' && shutterSettings[s].currentAction != 'Xmas') { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightDownSun); @@ -595,7 +595,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].currentAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].sunProtectEndtimerid = ''; shutterSettings[s].currentAction = 'up'; @@ -641,7 +641,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].triggerAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); shutterSettings[s].triggerAction = 'up'; @@ -684,7 +684,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { mustValue = ('' + shutterSettings[s].triggerState); mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (typeof _triggerState != undefined && _triggerState != null) { + if (typeof _triggerState != undefined && _triggerState != null && _triggerState.val != undefined) { currentValue = ('' + _triggerState.val); } @@ -694,7 +694,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp) { shutterSettings[s].currentAction = 'sunProtect'; @@ -740,7 +740,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp && shutterSettings[s].triggerAction != 'down' && shutterSettings[s].currentAction != 'middle' && shutterSettings[s].currentAction != 'Xmas') { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightDownSun); @@ -766,7 +766,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].currentAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].currentAction = 'up'; shutterSettings[s].currentHeight = shutterSettings[s].heightUp; @@ -801,7 +801,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].triggerAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); shutterSettings[s].triggerAction = 'up'; @@ -840,7 +840,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { mustValue = ('' + shutterSettings[s].triggerState); mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (typeof _triggerState != undefined && _triggerState != null) { + if (typeof _triggerState != undefined && _triggerState != null && _triggerState.val != undefined) { currentValue = ('' + _triggerState.val); } @@ -849,12 +849,12 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { let sunLight = 0; const _outsideTempState = shutterSettings[s].outsideTempSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].outsideTempSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _outsideTempState != undefined && _outsideTempState != null) { + if (typeof _outsideTempState != undefined && _outsideTempState != null && _outsideTempState.val != undefined) { outsideTemp = parseFloat(_outsideTempState.val); } const _sunLight = shutterSettings[s].lightSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].lightSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _sunLight != undefined && _sunLight != null) { + if (typeof _sunLight != undefined && _sunLight != null && _sunLight.val != undefined) { sunLight = parseFloat(_sunLight.val); } @@ -868,7 +868,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp) { @@ -915,7 +915,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp && shutterSettings[s].triggerAction != 'down' && shutterSettings[s].currentAction != 'middle' && shutterSettings[s].currentAction != 'Xmas') { @@ -953,7 +953,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].currentAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].sunProtectEndtimerid = ''; shutterSettings[s].currentAction = 'up'; @@ -1000,7 +1000,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].triggerAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); shutterSettings[s].triggerAction = 'up'; @@ -1042,7 +1042,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { mustValue = ('' + shutterSettings[s].triggerState); mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (typeof _triggerState != undefined && _triggerState != null) { + if (typeof _triggerState != undefined && _triggerState != null && _triggerState.val != undefined) { currentValue = ('' + _triggerState.val); } @@ -1050,7 +1050,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { let insideTemp = 0; const _insideTempState = shutterSettings[s].tempSensor != '' ? await adapter.getForeignStateAsync(shutterSettings[s].tempSensor).catch((e) => adapter.log.warn(e)) : null; - if (typeof _insideTempState != undefined && _insideTempState != null) { + if (typeof _insideTempState != undefined && _insideTempState != null && _insideTempState.val != undefined) { insideTemp = parseFloat(_insideTempState.val); } @@ -1059,7 +1059,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp) { shutterSettings[s].currentAction = 'sunProtect'; shutterSettings[s].currentHeight = shutterSettings[s].heightDownSun; @@ -1103,7 +1103,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { adapter.log.debug(shutterSettings[s].shutterName + ': Check basis for sunprotect. Height:' + _shutterState.val + ' > HeightDownSun: ' + shutterSettings[s].heightDownSun + ' AND Height:' + _shutterState.val + ' == currentHeight:' + shutterSettings[s].currentHeight + ' AND currentHeight:' + shutterSettings[s].currentHeight + ' == heightUp:' + shutterSettings[s].heightUp); if (((parseFloat(_shutterState.val) > parseFloat(shutterSettings[s].heightDownSun) && convertShutter == false) || (parseFloat(_shutterState.val) < parseFloat(shutterSettings[s].heightDownSun) && convertShutter == true)) && parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight) && shutterSettings[s].currentHeight == shutterSettings[s].heightUp && shutterSettings[s].triggerAction != 'down' && shutterSettings[s].currentAction != 'middle' && shutterSettings[s].currentAction != 'Xmas') { shutterSettings[s].triggerAction = 'sunProtect'; @@ -1130,7 +1130,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].currentAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].currentAction = 'up'; shutterSettings[s].currentHeight = shutterSettings[s].heightUp; @@ -1166,7 +1166,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if (shutterSettings[s].triggerAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); shutterSettings[s].triggerAction = 'up'; @@ -1244,11 +1244,11 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { const mustValue = ('' + shutterSettings[s].triggerState); const mustValueTilted = shutterSettings[s].triggerStateTilted == 'none' ? ('' + shutterSettings[s].triggerState) : ('' + shutterSettings[s].triggerStateTilted); - if (typeof _triggerState != undefined && _triggerState != null) { + if (typeof _triggerState != undefined && _triggerState != null && _triggerState.val != undefined) { currentValue = ('' + _triggerState.val); } - if ((currentValue === mustValue || currentValue === mustValueTilted) && shutterSettings[s].triggerID != '' || (currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].autoDrive != 'onlyDown' && shutterSettings[s].autoDrive != 'off') || (shutterSettings[s].triggerID == '')) { + if ((currentValue === mustValue || currentValue === mustValueTilted) || (currentValue != mustValue && currentValue != mustValueTilted && shutterSettings[s].autoDrive != 'onlyDown' && shutterSettings[s].autoDrive != 'off') || (shutterSettings[s].triggerID == '')) { if (shutterSettings[s].sunProtectEndtimerid != '' && shutterSettings[s].sunProtectEndtimerid != '0') { adapter.log.debug('Stopping sunprotect delay for ' + shutterSettings[s].shutterName); clearTimeout(shutterSettings[s].sunProtectEndtimerid); @@ -1257,7 +1257,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if ((shutterSettings[s].currentAction == 'sunProtect' || shutterSettings[s].currentAction == 'manu_sunProtect') && shutterSettings[s].KeepSunProtect === false && (parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].sunProtectEndtimerid = '' shutterSettings[s].currentAction = 'up'; @@ -1290,7 +1290,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { if (pendingAlarm == false) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (typeof _shutterState != undefined && _shutterState != null) { + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != undefined) { if ((shutterSettings[s].triggerAction == 'sunProtect' || shutterSettings[s].triggerAction == 'manu_sunProtect') && shutterSettings[s].KeepSunProtect === false && (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightDownSun) || parseFloat(_shutterState.val) == parseFloat(shutterSettings[s].currentHeight))) { shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); shutterSettings[s].triggerAction = 'up'; diff --git a/main.js b/main.js index 0e78438f..d3aae615 100644 --- a/main.js +++ b/main.js @@ -8,7 +8,7 @@ const utils = require('@iobroker/adapter-core'); // @ts-ignore const schedule = require('node-schedule'); // @ts-ignore -const SunCalc = require('suncalc2'); +const SunCalc = require('suncalc'); const sunProtect = require('./lib/sunProtect.js'); // SunProtect const triggerChange = require('./lib/triggerChange.js'); // triggerChange @@ -241,13 +241,43 @@ function startAdapter(options) { const nameDevice = shutterSettings[s].shutterName.replace(/[.;, ]/g, '_'); const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined && shutterSettings[s].oldHeight !== _shutterState.val) { + if (typeof _shutterState != undefined && _shutterState != null && shutterSettings[s].oldHeight != _shutterState.val) { adapter.log.debug('Shutter state changed: ' + shutterSettings[s].shutterName + ' old value = ' + shutterSettings[s].oldHeight + ' new value = ' + _shutterState.val); } - if (_shutterState && _shutterState.val !== undefined && _shutterState.val !== shutterSettings[s].currentHeight && _shutterState.val !== shutterSettings[s].oldHeight && adapter.config.currentShutterState === true) { - - shutterSettings[s].currentAction = 'Manu_Mode'; - shutterSettings[s].triggerAction = 'Manu_Mode'; + if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val != shutterSettings[s].currentHeight && _shutterState.val != shutterSettings[s].oldHeight) { + + switch (_shutterState.val) { + case parseFloat(shutterSettings[s].heightUp): + shutterSettings[s].currentAction = 'up'; + shutterSettings[s].triggerAction = 'up'; + shutterSettings[s].currentHeight = _shutterState.val; + shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; + + adapter.log.debug(shutterSettings[s].shutterName + ' Old value = ' + shutterSettings[s].oldHeight + '. New value = ' + _shutterState.val + '. automatic is active'); + break; + case parseFloat(shutterSettings[s].heightDown): + shutterSettings[s].currentAction = 'down'; + shutterSettings[s].triggerAction = 'down'; + shutterSettings[s].currentHeight = _shutterState.val; + shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; + + adapter.log.debug(shutterSettings[s].shutterName + ' Old value = ' + shutterSettings[s].oldHeight + '. New value = ' + _shutterState.val + '. automatic is active'); + break; + case parseFloat(shutterSettings[s].heightDownSun): + shutterSettings[s].currentAction = 'sunProtect'; + shutterSettings[s].triggerAction = 'sunProtect'; + shutterSettings[s].currentHeight = _shutterState.val; + shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight; + + adapter.log.debug(shutterSettings[s].shutterName + ' Old value = ' + shutterSettings[s].oldHeight + '. New value = ' + _shutterState.val + '. automatic is active'); + break; + default: + shutterSettings[s].currentAction = 'Manu_Mode'; + shutterSettings[s].triggerAction = 'Manu_Mode'; + + adapter.log.debug(shutterSettings[s].shutterName + ' drived manually to ' + _shutterState.val + '. Old value = ' + shutterSettings[s].oldHeight + '. New value = ' + _shutterState.val); + adapter.log.debug(shutterSettings[s].shutterName + ' Updated trigger action to ' + shutterSettings[s].triggerAction + ' to prevent moving after window close '); + } adapter.log.debug(`#1 shutterName: ${shutterSettings[s].shutterName}`); adapter.log.debug(`#1 shutterState: ${_shutterState.val} %`); @@ -261,29 +291,9 @@ function startAdapter(options) { await adapter.setStateAsync('shutters.autoState.' + nameDevice, { val: shutterSettings[s].currentAction, ack: true }) .catch((e) => adapter.log.warn(e)); - adapter.log.debug(shutterSettings[s].shutterName + ' drived manually to ' + _shutterState.val + '. Old value = ' + shutterSettings[s].oldHeight + '. New value = ' + _shutterState.val); - adapter.log.debug(shutterSettings[s].shutterName + ' Updated trigger action to ' + shutterSettings[s].triggerAction + ' to prevent moving after window close '); - shutterSettings = await shutterState(shutterSettings[s].name, adapter, shutterSettings, false); - } else if (_shutterState && _shutterState.val !== undefined && _shutterState.val !== shutterSettings[s].currentHeight && _shutterState.val !== shutterSettings[s].oldHeight && adapter.config.currentShutterState === false) { - shutterSettings[s].currentAction = 'Manu_Mode'; - shutterSettings[s].triggerAction = 'Manu_Mode'; - - adapter.log.debug(`#2 shutterName: ${shutterSettings[s].shutterName}`); - adapter.log.debug(`#2 shutterState: ${_shutterState.val} %`); - adapter.log.debug(`#2 currentAction: ${shutterSettings[s].currentAction}`); - adapter.log.debug(`#2 triggerAction: ${shutterSettings[s].triggerAction}`); - adapter.log.debug(`#2 currentHeight: ${shutterSettings[s].currentHeight} %`); - adapter.log.debug(`#2 oldHeight: ${shutterSettings[s].oldHeight} %`); - adapter.log.debug(`#2 currentShutterState: ${adapter.config.currentShutterState === true ? 'activated' : 'disabled'}`); - adapter.log.debug(`#2 currentShutterStateTime: ${adapter.config.currentShutterStateTime} seconds`); - - await adapter.setStateAsync('shutters.autoState.' + nameDevice, { val: shutterSettings[s].currentAction, ack: true }) - .catch((e) => adapter.log.warn(e)); - adapter.log.debug(shutterSettings[s].shutterName + ' Updated trigger action to ' + shutterSettings[s].triggerAction + ' to prevent moving after window close '); - adapter.log.debug(shutterSettings[s].shutterName + ' drived manually to ' + _shutterState.val + '. Old value = ' + shutterSettings[s].oldHeight + '. New value = ' + _shutterState.val); shutterSettings = await shutterState(shutterSettings[s].name, adapter, shutterSettings, false); - } else if (_shutterState && _shutterState.val !== undefined && _shutterState.val === shutterSettings[s].currentHeight) { + } else if (typeof _shutterState != undefined && _shutterState != null && _shutterState.val === shutterSettings[s].currentHeight) { adapter.log.debug(shutterSettings[s].shutterName + ' Old value = ' + shutterSettings[s].oldHeight + '. New value = ' + _shutterState.val + '. automatic is active'); shutterSettings = await shutterState(shutterSettings[s].name, adapter, shutterSettings, false); } @@ -292,7 +302,7 @@ function startAdapter(options) { //Shutter is closed -> opened manually to heightUp (should be 100% or 0%) before it has been opened automatically -> enable possibility to activate sunprotect height if required --> if sunprotect is required: shutter is set to sunProtect height - if (shutterSettings[s].firstCompleteUp === true && state.val === shutterSettings[s].heightUp && shutterSettings[s].currentAction !== 'up' && shutterSettings[s].currentAction !== 'triggered' && shutterSettings[s].currentAction !== 'triggered_Tilted') { + if (shutterSettings[s].firstCompleteUp === true && state.val === shutterSettings[s].heightUp && shutterSettings[s].currentAction != 'up' && shutterSettings[s].currentAction != 'triggered' && shutterSettings[s].currentAction != 'triggered_Tilted') { shutterSettings[s].currentHeight = state.val; shutterSettings[s].currentAction = 'none'; //reset mode. e.g. mode can be set to sunProtect later if window is closed shutterSettings[s].firstCompleteUp = false; @@ -304,7 +314,7 @@ function startAdapter(options) { adapter.log.debug(shutterSettings[s].shutterName + ' opened manually to ' + shutterSettings[s].heightUp + '. Old value = ' + shutterSettings[s].oldHeight + '. New value = ' + state.val + '. Possibility to activate sunprotect enabled.'); } - if (shutterSettings[s].firstCompleteUp === true && shutterSettings[s].currentAction !== 'triggered' && shutterSettings[s].currentAction !== 'triggered_Tilted' && shutterSettings[s].currentAction !== 'none' && (state.val === shutterSettings[s].heightUp || state.val === shutterSettings[s].heightDownSun)) { + if (shutterSettings[s].firstCompleteUp === true && shutterSettings[s].currentAction != 'triggered' && shutterSettings[s].currentAction != 'triggered_Tilted' && shutterSettings[s].currentAction != 'none' && (state.val === shutterSettings[s].heightUp || state.val === shutterSettings[s].heightDownSun)) { shutterSettings[s].firstCompleteUp = false; //reset firstCompleteUp if shutter has been moved up } //save old height @@ -405,17 +415,17 @@ async function shutterConfigCheck() { shutterSettings[s].trigDelyDown = shutterSettings[s].trigDelyDown ? shutterSettings[s].trigDelyDown : '0'; shutterSettings[s].sunProtectEndDely = shutterSettings[s].sunProtectEndDely ? shutterSettings[s].sunProtectEndDely : '0'; - shutterSettings[s].LateDown = shutterSettings[s].LateDown !== null ? shutterSettings[s].LateDown : false; - shutterSettings[s].inSummerNotDown = shutterSettings[s].inSummerNotDown !== null ? shutterSettings[s].inSummerNotDown : false; - shutterSettings[s].KeepSunProtect = shutterSettings[s].KeepSunProtect !== null ? shutterSettings[s].KeepSunProtect : false; - shutterSettings[s].driveAfterClose = shutterSettings[s].driveAfterClose !== null ? shutterSettings[s].driveAfterClose : false; - shutterSettings[s].useXmasLevel = shutterSettings[s].useXmasLevel !== null ? shutterSettings[s].useXmasLevel : false; - shutterSettings[s].betweenPosition = shutterSettings[s].betweenPosition !== null ? shutterSettings[s].betweenPosition : false; - shutterSettings[s].enableAlarmWind1 = shutterSettings[s].enableAlarmWind1 !== null ? shutterSettings[s].enableAlarmWind1 : false; - shutterSettings[s].enableAlarmWind2 = shutterSettings[s].enableAlarmWind2 !== null ? shutterSettings[s].enableAlarmWind2 : false; - shutterSettings[s].enableAlarmRain = shutterSettings[s].enableAlarmRain !== null ? shutterSettings[s].enableAlarmRain : false; - shutterSettings[s].enableAlarmFrost = shutterSettings[s].enableAlarmFrost !== null ? shutterSettings[s].enableAlarmFrost : false; - shutterSettings[s].enableAlarmFire = shutterSettings[s].enableAlarmFire !== null ? shutterSettings[s].enableAlarmFire : false; + shutterSettings[s].LateDown = shutterSettings[s].LateDown != null ? shutterSettings[s].LateDown : false; + shutterSettings[s].inSummerNotDown = shutterSettings[s].inSummerNotDown != null ? shutterSettings[s].inSummerNotDown : false; + shutterSettings[s].KeepSunProtect = shutterSettings[s].KeepSunProtect != null ? shutterSettings[s].KeepSunProtect : false; + shutterSettings[s].driveAfterClose = shutterSettings[s].driveAfterClose != null ? shutterSettings[s].driveAfterClose : false; + shutterSettings[s].useXmasLevel = shutterSettings[s].useXmasLevel != null ? shutterSettings[s].useXmasLevel : false; + shutterSettings[s].betweenPosition = shutterSettings[s].betweenPosition != null ? shutterSettings[s].betweenPosition : false; + shutterSettings[s].enableAlarmWind1 = shutterSettings[s].enableAlarmWind1 != null ? shutterSettings[s].enableAlarmWind1 : false; + shutterSettings[s].enableAlarmWind2 = shutterSettings[s].enableAlarmWind2 != null ? shutterSettings[s].enableAlarmWind2 : false; + shutterSettings[s].enableAlarmRain = shutterSettings[s].enableAlarmRain != null ? shutterSettings[s].enableAlarmRain : false; + shutterSettings[s].enableAlarmFrost = shutterSettings[s].enableAlarmFrost != null ? shutterSettings[s].enableAlarmFrost : false; + shutterSettings[s].enableAlarmFire = shutterSettings[s].enableAlarmFire != null ? shutterSettings[s].enableAlarmFire : false; if (num === parseFloat(s)) { adapter.log.debug('shutter Config Check successfully completed'); @@ -585,25 +595,25 @@ async function checkActualStates() { autoChildrenStr = _autoChildrenStates.val; } - if (adapter.config.publicHolidays === true && (adapter.config.publicHolInstance !== 'none' || adapter.config.publicHolInstance !== '')) { + if (adapter.config.publicHolidays === true && (adapter.config.publicHolInstance != 'none' || adapter.config.publicHolInstance != '')) { const _publicHolidayStr = await adapter.getForeignStateAsync(adapter.config.publicHolInstance + '.heute.boolean').catch((e) => adapter.log.warn(e)); - if (typeof _publicHolidayStr !== undefined && _publicHolidayStr !== null) { + if (typeof _publicHolidayStr != undefined && _publicHolidayStr != null) { publicHolidayStr = _publicHolidayStr.val; } const _publicHolidayTomorowStr = await adapter.getForeignStateAsync(adapter.config.publicHolInstance + '.morgen.boolean').catch((e) => adapter.log.warn(e)); - if (typeof _publicHolidayTomorowStr !== undefined && _publicHolidayTomorowStr !== null) { + if (typeof _publicHolidayTomorowStr != undefined && _publicHolidayTomorowStr != null) { publicHolidayTomorowStr = _publicHolidayTomorowStr.val; } } - if (adapter.config.schoolfree === true && (adapter.config.schoolfreeInstance !== 'none' || adapter.config.schoolfreeInstance !== '')) { + if (adapter.config.schoolfree === true && (adapter.config.schoolfreeInstance != 'none' || adapter.config.schoolfreeInstance != '')) { const _schoolfreeStr = await adapter.getForeignStateAsync(adapter.config.schoolfreeInstance + '.info.today').catch((e) => adapter.log.warn(e)); - if (typeof _schoolfreeStr !== undefined && _schoolfreeStr !== null) { + if (typeof _schoolfreeStr != undefined && _schoolfreeStr != null) { schoolfreeStr = _schoolfreeStr.val; } const _schoolfreeTomorowStr = await adapter.getForeignStateAsync(adapter.config.schoolfreeInstance + '.info.tomorrow').catch((e) => adapter.log.warn(e)); - if (typeof _schoolfreeTomorowStr !== undefined && _schoolfreeTomorowStr !== null) { + if (typeof _schoolfreeTomorowStr != undefined && _schoolfreeTomorowStr != null) { schoolfreeTomorowStr = _schoolfreeTomorowStr.val; } } @@ -611,7 +621,7 @@ async function checkActualStates() { if (adapter.config.HolidayDP !== '') { adapter.log.debug('checking HolidayDP'); const _HolidayDP = await adapter.getForeignStateAsync(adapter.config.HolidayDP).catch((e) => adapter.log.warn(e)); - if (typeof _HolidayDP !== undefined && _HolidayDP !== null) { + if (typeof _HolidayDP != undefined && _HolidayDP != null) { adapter.log.debug('got HolidayDP ' + _HolidayDP.val); await adapter.setStateAsync('control.Holiday', { val: _HolidayDP.val, ack: true }) .catch((e) => adapter.log.warn(e)); @@ -621,7 +631,7 @@ async function checkActualStates() { if (adapter.config.schoolfreeDP !== '') { adapter.log.debug('checking schoolfreeDP'); const _schoolfreeDP = await adapter.getForeignStateAsync(adapter.config.schoolfreeDP).catch((e) => adapter.log.warn(e)); - if (typeof _schoolfreeDP !== undefined && _schoolfreeDP !== null) { + if (typeof _schoolfreeDP != undefined && _schoolfreeDP != null) { adapter.log.debug('got schoolfreeDP ' + _schoolfreeDP.val); await adapter.setStateAsync('control.schoolfree', { val: _schoolfreeDP.val, ack: true }) .catch((e) => adapter.log.warn(e)); @@ -669,7 +679,7 @@ const calc = schedule.scheduleJob('calcTimer', '30 2 * * *', async function () { const nameDevice = resultStates[i].shutterName.replace(/[.;, ]/g, '_'); const _shutterState = await adapter.getForeignStateAsync(resultStates[i].name).catch((e) => adapter.log.warn(e)); - if (_shutterState && _shutterState.val !== undefined) { + if (typeof _shutterState != undefined && _shutterState != null) { // Case: Shutter in sunProtect mode. Auto-down in the evening before end of sunProtect. The sun is sill shining. Prevent that the shutter opens again with end of sunProtect. // currentAction=sunprotect would be set in sunProtect(). But not if currentAction=down. So this is checked in sunProtect(). Reset here to enable possibility to set sunProtect in the morning -> resultStates[i].currentAction = 'none'; @@ -679,7 +689,7 @@ const calc = schedule.scheduleJob('calcTimer', '30 2 * * *', async function () { .catch((e) => adapter.log.warn(e)); adapter.log.debug(resultStates[i].shutterName + " set currentHeight to " + _shutterState.val); - if (_shutterState && _shutterState.val !== undefined) { + if (typeof _shutterState.val != undefined && _shutterState.val != null) { resultStates[i].currentHeight = _shutterState.val; await adapter.setStateAsync('shutters.autoLevel.' + nameDevice, { val: parseFloat(resultStates[i].currentHeight), ack: true }) .catch((e) => adapter.log.warn(e)); @@ -833,10 +843,7 @@ function shutterDriveCalc() { } else if (IsEarlier(astroTimeLivingUp, adapter.config.WE_shutterUpLivingMin)) { upTimeLiving = adapter.config.WE_shutterUpLivingMin; debugCnt = 14; - } else if (IsEqual(astroTimeLivingUp, adapter.config.WE_shutterUpLivingMin)) { - upTimeLiving = astroTimeLivingUp; - debugCnt = 15; - } + } } else { if (dayStr < 6 && dayStr > 0) { if (IsLater(astroTimeLivingUp, adapter.config.W_shutterUpLivingMax)) { @@ -895,10 +902,7 @@ function shutterDriveCalc() { } else if (IsEarlier(astroTimeSleepUp, adapter.config.WE_shutterUpSleepMin)) { upTimeSleep = adapter.config.WE_shutterUpSleepMin; debugCnt = 14; - } else if (IsEqual(astroTimeSleepUp, adapter.config.WE_shutterUpSleepMin)) { - upTimeSleep = astroTimeSleepUp; - debugCnt = 15; - } + } } else { if (dayStr < 6 && dayStr > 0) { @@ -918,10 +922,7 @@ function shutterDriveCalc() { } else if (IsEarlier(astroTimeSleepUp, adapter.config.W_shutterUpSleepMin)) { upTimeSleep = adapter.config.W_shutterUpSleepMin; debugCnt = 8; - } else if (IsEqual(astroTimeSleepUp, adapter.config.W_shutterUpSleepMin)) { - upTimeSleep = astroTimeSleepUp; - debugCnt = 9; - } + } } } @@ -961,10 +962,7 @@ function shutterDriveCalc() { } else if (IsEarlier(astroTimeChildrenUp, adapter.config.WE_shutterUpChildrenMin)) { upTimeChildren = adapter.config.WE_shutterUpChildrenMin; debugCnt = 14; - } else if (IsEqual(astroTimeChildrenUp, adapter.config.WE_shutterUpChildrenMin)) { - upTimeChildren = astroTimeChildrenUp; - debugCnt = 15; - } + } } else { @@ -985,10 +983,7 @@ function shutterDriveCalc() { } else if (IsEarlier(astroTimeChildrenUp, adapter.config.W_shutterUpChildrenMin)) { upTimeChildren = adapter.config.W_shutterUpChildrenMin; debugCnt = 8; - } else if (IsEqual(astroTimeChildrenUp, adapter.config.W_shutterUpChildrenMin)) { - upTimeChildren = astroTimeChildrenUp; - debugCnt = 9; - } + } } } @@ -1661,16 +1656,16 @@ function main(adapter) { adapter.log.info('subscribe ' + adapter.config.schoolfreeDP); } - if (adapter.config.triggerAutoLiving !== '') { + if (adapter.config.triggerAutoLiving != '') { adapter.subscribeForeignStates(adapter.config.triggerAutoLiving); } - if (adapter.config.triggerAutoSleep !== '') { + if (adapter.config.triggerAutoSleep != '') { adapter.subscribeForeignStates(adapter.config.triggerAutoSleep); } - if (adapter.config.triggerAutoChildren !== '') { + if (adapter.config.triggerAutoChildren != '') { adapter.subscribeForeignStates(adapter.config.triggerAutoChildren); } - if (adapter.config.lightsensorUpDown !== '') { + if (adapter.config.lightsensorUpDown != '') { adapter.subscribeForeignStates(adapter.config.lightsensorUpDown); adapter.getForeignState(adapter.config.lightsensorUpDown, (state) => { if (state && state.val && state.val !== null) { @@ -1680,26 +1675,26 @@ function main(adapter) { }); } - if (adapter.config.alarmWind1 !== '') { + if (adapter.config.alarmWind1 != '') { adapter.subscribeForeignStates(adapter.config.alarmWind1); } - if (adapter.config.alarmWind2 !== '') { + if (adapter.config.alarmWind2 != '') { adapter.subscribeForeignStates(adapter.config.alarmWind2); } - if (adapter.config.alarmRain !== '') { + if (adapter.config.alarmRain != '') { adapter.subscribeForeignStates(adapter.config.alarmRain); } - if (adapter.config.alarmFrost !== '') { + if (adapter.config.alarmFrost != '') { adapter.subscribeForeignStates(adapter.config.alarmFrost); } - if (adapter.config.alarmFire !== '') { + if (adapter.config.alarmFire != '') { adapter.subscribeForeignStates(adapter.config.alarmFire); } //adapter.log.debug('all shutters ' + JSON.stringify(result)); if (shutterSettings) { const res = shutterSettings.map(({ triggerID }) => ({ triggerID })); - const resTriggerActive = res.filter((/** @type {{ triggerID: string; }} */ d) => d.triggerID !== ''); + const resTriggerActive = res.filter((/** @type {{ triggerID: string; }} */ d) => d.triggerID != ''); for (const i in resTriggerActive) { if (resTrigger.indexOf(resTriggerActive[i].triggerID) === -1) { @@ -1712,7 +1707,7 @@ function main(adapter) { }); const resInsideTemp = shutterSettings.map(({ tempSensor }) => ({ tempSensor })); - const rescurrentInsideTemp = resInsideTemp.filter((/** @type {{ tempSensor: string; }} */ d) => d.tempSensor !== ''); + const rescurrentInsideTemp = resInsideTemp.filter((/** @type {{ tempSensor: string; }} */ d) => d.tempSensor != ''); for (const i in rescurrentInsideTemp) { if (resSunInsideTemp.indexOf(rescurrentInsideTemp[i].tempSensor) === -1) { @@ -1725,7 +1720,7 @@ function main(adapter) { }); const resOutsideTemp = shutterSettings.map(({ outsideTempSensor }) => ({ outsideTempSensor })); - const rescurrentOutsideTemp = resOutsideTemp.filter((/** @type {{ outsideTempSensor: string; }} */ d) => d.outsideTempSensor !== ''); + const rescurrentOutsideTemp = resOutsideTemp.filter((/** @type {{ outsideTempSensor: string; }} */ d) => d.outsideTempSensor != ''); for (const i in rescurrentOutsideTemp) { if (resSunOutsideTemp.indexOf(rescurrentOutsideTemp[i].outsideTempSensor) === -1) { @@ -1738,7 +1733,7 @@ function main(adapter) { }); const resLight = shutterSettings.map(({ lightSensor }) => ({ lightSensor })); - const rescurrentLight = resLight.filter((/** @type {{ lightSensor: string; }} */ d) => d.lightSensor !== ''); + const rescurrentLight = resLight.filter((/** @type {{ lightSensor: string; }} */ d) => d.lightSensor != ''); for (const i in rescurrentLight) { if (resSunLight.indexOf(rescurrentLight[i].lightSensor) === -1) { @@ -1752,7 +1747,7 @@ function main(adapter) { }); const resShutter = shutterSettings.map(({ name }) => ({ name })); - const rescurrentShutter = resShutter.filter((/** @type {{ name: string; }} */ d) => d.name !== ''); + const rescurrentShutter = resShutter.filter((/** @type {{ name: string; }} */ d) => d.name != ''); for (const i in rescurrentShutter) { if (resShutterState.indexOf(rescurrentShutter[i].name) === -1) { @@ -1766,7 +1761,7 @@ function main(adapter) { for (const s in shutterSettings) { adapter.getForeignState(shutterSettings[s].name, (state) => { - if (typeof state !== undefined && state !== null) { + if (typeof state != undefined && state != null) { shutterSettings[s].currentHeight = (state.val); shutterSettings[s].oldHeight = (state.val); shutterSettings[s].triggerHeight = (state.val); diff --git a/package-lock.json b/package-lock.json index 5946d8ec..bef5ef93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,39 +1,39 @@ { "name": "iobroker.shuttercontrol", - "version": "1.4.24", + "version": "1.5.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "iobroker.shuttercontrol", - "version": "1.4.24", + "version": "1.5.0", "license": "MIT", "dependencies": { "@iobroker/adapter-core": "^2.6.8", "node-schedule": "^2.1.1", - "suncalc2": "^1.8.1" + "suncalc": "^1.9.0" }, "devDependencies": { "@alcalzone/release-script": "^3.5.9", "@alcalzone/release-script-plugin-iobroker": "^3.5.9", "@alcalzone/release-script-plugin-license": "^3.5.9", "@iobroker/testing": "^4.1.0", - "@types/chai": "^4.3.4", + "@types/chai": "^4.3.5", "@types/chai-as-promised": "^7.1.5", - "@types/gulp": "^4.0.10", + "@types/gulp": "^4.0.11", "@types/mocha": "^10.0.1", - "@types/node": "^18.15.11", + "@types/node": "^20.2.5", "@types/proxyquire": "^1.3.28", - "@types/sinon": "^10.0.13", + "@types/sinon": "^10.0.15", "@types/sinon-chai": "^3.2.9", - "axios": "^1.3.4", + "axios": "^1.4.0", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", - "eslint": "^8.37.0", + "eslint": "^8.42.0", "gulp": "^4.0.2", "mocha": "^10.2.0", "proxyquire": "^2.1.3", - "sinon": "^15.0.3", + "sinon": "^15.1.0", "sinon-chai": "^3.7.0", "tslint": "^6.1.3" } @@ -631,14 +631,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.5.2", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -677,18 +677,18 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz", - "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -910,9 +910,9 @@ "dev": true }, "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", "dev": true }, "node_modules/@types/chai-as-promised": { @@ -951,9 +951,9 @@ } }, "node_modules/@types/gulp": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.10.tgz", - "integrity": "sha512-spgZHJFqiEJGwqGlf7T/k4nkBpBcLgP7T0EfN6G2vvnhUfvd4uO1h8RwpXOE8x/54DVYUs1XCAtBHkX/R3axAQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.11.tgz", + "integrity": "sha512-jy0nfcsjiGqO1prNsYMK/bHkTblIBgG04sL2nxPpnP9MyNicHp1SUblomjOla6JoW1qkR67HjFHqIibpPoShNQ==", "dev": true, "dependencies": { "@types/undertaker": ">=1.2.6", @@ -1120,9 +1120,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" }, "node_modules/@types/proxyquire": { "version": "1.3.28", @@ -1131,9 +1131,9 @@ "dev": true }, "node_modules/@types/sinon": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", - "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", + "version": "10.0.15", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.15.tgz", + "integrity": "sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==", "dev": true, "dependencies": { "@types/sinonjs__fake-timers": "*" @@ -1582,9 +1582,9 @@ } }, "node_modules/axios": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", - "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -2503,16 +2503,16 @@ } }, "node_modules/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.37.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -2521,9 +2521,9 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2531,13 +2531,12 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -2560,9 +2559,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -2570,12 +2569,15 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2678,14 +2680,14 @@ } }, "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3476,10 +3478,10 @@ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/gulp": { @@ -4053,12 +4055,6 @@ "node": ">=0.10.0" } }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6010,13 +6006,13 @@ "dev": true }, "node_modules/sinon": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.0.3.tgz", - "integrity": "sha512-si3geiRkeovP7Iel2O+qGL4NrO9vbMf3KsrJEi0ghP1l5aBkB5UxARea5j0FUsSqH3HLBh0dQPAyQ8fObRUqHw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.1.0.tgz", + "integrity": "sha512-cS5FgpDdE9/zx7no8bxROHymSlPLZzq0ChbbLk1DrxBfc+eTeBK3y8nIL+nu/0QeYydhhbLIr7ecHJpywjQaoQ==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.0.2", + "@sinonjs/fake-timers": "^10.2.0", "@sinonjs/samsam": "^8.0.0", "diff": "^5.1.0", "nise": "^5.1.4", @@ -6047,21 +6043,12 @@ } }, "node_modules/sinon/node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^2.0.0" - } - }, - "node_modules/sinon/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", + "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", "dev": true, "dependencies": { - "type-detect": "4.0.8" + "@sinonjs/commons": "^3.0.0" } }, "node_modules/sinon/node_modules/@sinonjs/samsam": { @@ -6463,10 +6450,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/suncalc2": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/suncalc2/-/suncalc2-1.8.1.tgz", - "integrity": "sha512-tNoAni1LqWzBzJRX3NRCsD50gVsuejH1jd9Y+XyKO3WkpPIU+QNyWF4Zf2JnUQKW2LKLWIBgVDQCrgsQwqs0tA==" + "node_modules/suncalc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.9.0.tgz", + "integrity": "sha512-vMJ8Byp1uIPoj+wb9c1AdK4jpkSKVAywgHX0lqY7zt6+EWRRC3Z+0Ucfjy/0yxTVO1hwwchZe4uoFNqrIC24+A==" }, "node_modules/supports-color": { "version": "8.1.1", @@ -7728,14 +7715,14 @@ "dev": true }, "@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.5.2", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -7762,15 +7749,15 @@ } }, "@eslint/js": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz", - "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -7953,9 +7940,9 @@ "dev": true }, "@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", "dev": true }, "@types/chai-as-promised": { @@ -7994,9 +7981,9 @@ } }, "@types/gulp": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.10.tgz", - "integrity": "sha512-spgZHJFqiEJGwqGlf7T/k4nkBpBcLgP7T0EfN6G2vvnhUfvd4uO1h8RwpXOE8x/54DVYUs1XCAtBHkX/R3axAQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.11.tgz", + "integrity": "sha512-jy0nfcsjiGqO1prNsYMK/bHkTblIBgG04sL2nxPpnP9MyNicHp1SUblomjOla6JoW1qkR67HjFHqIibpPoShNQ==", "dev": true, "requires": { "@types/undertaker": ">=1.2.6", @@ -8126,9 +8113,9 @@ "dev": true }, "@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" }, "@types/proxyquire": { "version": "1.3.28", @@ -8137,9 +8124,9 @@ "dev": true }, "@types/sinon": { - "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", - "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", + "version": "10.0.15", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.15.tgz", + "integrity": "sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==", "dev": true, "requires": { "@types/sinonjs__fake-timers": "*" @@ -8491,9 +8478,9 @@ "dev": true }, "axios": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", - "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "dev": true, "requires": { "follow-redirects": "^1.15.0", @@ -9253,16 +9240,16 @@ "dev": true }, "eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.37.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -9271,9 +9258,9 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -9281,13 +9268,12 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -9369,9 +9355,9 @@ } }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -9379,20 +9365,20 @@ } }, "eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true }, "espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" + "eslint-visitor-keys": "^3.4.1" } }, "esprima": { @@ -10010,10 +9996,10 @@ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "gulp": { @@ -10449,12 +10435,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11963,13 +11943,13 @@ "dev": true }, "sinon": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.0.3.tgz", - "integrity": "sha512-si3geiRkeovP7Iel2O+qGL4NrO9vbMf3KsrJEi0ghP1l5aBkB5UxARea5j0FUsSqH3HLBh0dQPAyQ8fObRUqHw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.1.0.tgz", + "integrity": "sha512-cS5FgpDdE9/zx7no8bxROHymSlPLZzq0ChbbLk1DrxBfc+eTeBK3y8nIL+nu/0QeYydhhbLIr7ecHJpywjQaoQ==", "dev": true, "requires": { "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.0.2", + "@sinonjs/fake-timers": "^10.2.0", "@sinonjs/samsam": "^8.0.0", "diff": "^5.1.0", "nise": "^5.1.4", @@ -11986,23 +11966,12 @@ } }, "@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", + "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", "dev": true, "requires": { - "@sinonjs/commons": "^2.0.0" - }, - "dependencies": { - "@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - } + "@sinonjs/commons": "^3.0.0" } }, "@sinonjs/samsam": { @@ -12348,10 +12317,10 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "suncalc2": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/suncalc2/-/suncalc2-1.8.1.tgz", - "integrity": "sha512-tNoAni1LqWzBzJRX3NRCsD50gVsuejH1jd9Y+XyKO3WkpPIU+QNyWF4Zf2JnUQKW2LKLWIBgVDQCrgsQwqs0tA==" + "suncalc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.9.0.tgz", + "integrity": "sha512-vMJ8Byp1uIPoj+wb9c1AdK4jpkSKVAywgHX0lqY7zt6+EWRRC3Z+0Ucfjy/0yxTVO1hwwchZe4uoFNqrIC24+A==" }, "supports-color": { "version": "8.1.1", diff --git a/package.json b/package.json index 7626f5e4..32d4a93c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "iobroker.shuttercontrol", - "version": "1.4.24", + "version": "1.5.0", "description": "Automatic control for shutters", "author": { "name": "simatec", @@ -23,29 +23,29 @@ "dependencies": { "@iobroker/adapter-core": "^2.6.8", "node-schedule": "^2.1.1", - "suncalc2": "^1.8.1" + "suncalc": "^1.9.0" }, "devDependencies": { "@alcalzone/release-script": "^3.5.9", "@alcalzone/release-script-plugin-iobroker": "^3.5.9", "@alcalzone/release-script-plugin-license": "^3.5.9", "@iobroker/testing": "^4.1.0", - "@types/chai": "^4.3.4", + "@types/chai": "^4.3.5", "@types/chai-as-promised": "^7.1.5", - "@types/gulp": "^4.0.10", + "@types/gulp": "^4.0.11", "@types/mocha": "^10.0.1", - "@types/node": "^18.15.11", + "@types/node": "^20.2.5", "@types/proxyquire": "^1.3.28", - "@types/sinon": "^10.0.13", + "@types/sinon": "^10.0.15", "@types/sinon-chai": "^3.2.9", - "axios": "^1.3.4", + "axios": "^1.4.0", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", - "eslint": "^8.37.0", + "eslint": "^8.42.0", "gulp": "^4.0.2", "mocha": "^10.2.0", "proxyquire": "^2.1.3", - "sinon": "^15.0.3", + "sinon": "^15.1.0", "sinon-chai": "^3.7.0", "tslint": "^6.1.3" },