diff --git a/README.md b/README.md index 56396c2..44ee29c 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ When the adapter crashes or an other Code error happens, this error message that * (simatec) Code revision and improvements * (simatec) many small fixes * (simatec) Fix sleep up when open the Window +* (simatec) Fix Sunprotect end by Shutter up ### 1.7.3 (2024-06-20) * (simatec) Fix Sunprotect End-Delay diff --git a/lib/sunProtect.js b/lib/sunProtect.js index 542222a..670d1d4 100644 --- a/lib/sunProtect.js +++ b/lib/sunProtect.js @@ -320,7 +320,11 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e)); if (_shutterState?.val) { - if (shutterSettings[s].triggerAction == 'sunProtect' && shutterSettings[s].KeepSunProtect === false && (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(heightDownSun) || Math.round(parseFloat(_shutterState.val) / vRound) * vRound == parseFloat(shutterSettings[s].currentHeight))) { + if (shutterSettings[s].triggerAction == 'sunProtect' && + shutterSettings[s].KeepSunProtect === false && + (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(heightDownSun) || + Math.round(parseFloat(_shutterState.val) / vRound) * vRound == parseFloat(shutterSettings[s].currentHeight))) { + shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); shutterSettings[s].triggerAction = 'up'; @@ -330,8 +334,19 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { adapter.log.debug('Temperature inside: ' + insideTemp + ' < ' + hysteresisInside + ' OR ( Temperature outside: ' + outsideTemp + ' < ' + hysteresisOutside + ' OR Light: ' + sunLight + ' < ' + hysteresisLight + ' )'); adapter.log.debug('save new trigger height: ' + shutterSettings[s].triggerHeight + '%'); adapter.log.debug('save new trigger action: ' + shutterSettings[s].triggerAction); - } - else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { + } else if (shutterSettings[s].triggerAction == 'sunProtect' && + shutterSettings[s].KeepSunProtect === false && + (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightUp) || + Math.round(parseFloat(_shutterState.val) / vRound) * vRound == parseFloat(shutterSettings[s].heightUp))) { + + shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); + shutterSettings[s].triggerAction = 'up'; + + adapter.log.info(`#1 Will end sunprotect ID: ${shutterSettings[s].shutterName} value: ${shutterSettings[s].triggerHeight}% after is the value for up`); + adapter.log.debug(`save new trigger height: ${shutterSettings[s].triggerHeight}%`); + adapter.log.debug(`save new trigger action: ${shutterSettings[s].triggerAction}`); + + } else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { shutterSettings[s].sunProtectEndtimerid = '' shutterSettings[s].triggerAction = 'none'; adapter.log.debug('OpenInSunProtect for ' + shutterSettings[s].shutterName + ' is not longer active'); @@ -521,7 +536,7 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { shutterSettings[s].triggerHeight = parseFloat(heightDownSun); shutterSettings[s].triggerAction = 'sunProtect'; - adapter.log.info(' Will sunprotect ID: ' + shutterSettings[s].shutterName + ' value: ' + heightDownSun + '%' + ' after the window has been closed '); + adapter.log.info(' Will sunprotect ID: ' + shutterSettings[s].shutterName + ' value: ' + heightDownSun + '%' + ' after the window has been closed'); adapter.log.debug('save new trigger height: ' + heightDownSun + '%'); adapter.log.debug('save new trigger action: ' + shutterSettings[s].triggerAction); @@ -659,8 +674,19 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { adapter.log.debug('Temperature inside: ' + insideTemp + ' < ' + hysteresisInside + ' OR ( Temperature outside: ' + outsideTemp + ' < ' + hysteresisOutside + ' OR Light: ' + sunLight + ' < ' + hysteresisLight + ' )'); adapter.log.debug('save new trigger action: ' + shutterSettings[s].triggerAction); adapter.log.debug('save new trigger height: ' + shutterSettings[s].triggerHeight + '%'); - } - else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { + } else if (shutterSettings[s].triggerAction == 'sunProtect' && + shutterSettings[s].KeepSunProtect === false && + (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightUp) || + Math.round(parseFloat(_shutterState.val) / vRound) * vRound == parseFloat(shutterSettings[s].heightUp))) { + + shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); + shutterSettings[s].triggerAction = 'up'; + + adapter.log.info(`#2 Will end sunprotect ID: ${shutterSettings[s].shutterName} value: ${shutterSettings[s].triggerHeight}% after is the value for up`); + adapter.log.debug(`save new trigger height: ${shutterSettings[s].triggerHeight}%`); + adapter.log.debug(`save new trigger action: ${shutterSettings[s].triggerAction}`); + + } else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { shutterSettings[s].triggerAction = 'none'; adapter.log.debug('OpenInSunProtect for ' + shutterSettings[s].shutterName + ' is not longer active'); @@ -975,8 +1001,19 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { adapter.log.debug('Sunprotect for ' + shutterSettings[s].shutterName + ' is not active anymore'); adapter.log.debug('save new trigger action: ' + shutterSettings[s].triggerAction); adapter.log.debug('save new trigger height: ' + shutterSettings[s].triggerHeight + '%'); - } - else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { + } else if (shutterSettings[s].triggerAction == 'sunProtect' && + shutterSettings[s].KeepSunProtect === false && + (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightUp) || + Math.round(parseFloat(_shutterState.val) / vRound) * vRound == parseFloat(shutterSettings[s].heightUp))) { + + shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); + shutterSettings[s].triggerAction = 'up'; + + adapter.log.info(`#3 Will end sunprotect ID: ${shutterSettings[s].shutterName} value: ${shutterSettings[s].triggerHeight}% after is the value for up`); + adapter.log.debug(`save new trigger height: ${shutterSettings[s].triggerHeight}%`); + adapter.log.debug(`save new trigger action: ${shutterSettings[s].triggerAction}`); + + } else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { shutterSettings[s].sunProtectEndtimerid = '' shutterSettings[s].triggerAction = 'none'; @@ -1202,8 +1239,19 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { adapter.log.debug('save new trigger height: ' + shutterSettings[s].triggerHeight + '%'); adapter.log.debug('Sunprotect for ' + shutterSettings[s].shutterName + ' is not active anymore'); adapter.log.debug('save new trigger action: ' + shutterSettings[s].triggerAction); - } - else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { + } else if (shutterSettings[s].triggerAction == 'sunProtect' && + shutterSettings[s].KeepSunProtect === false && + (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightUp) || + Math.round(parseFloat(_shutterState.val) / vRound) * vRound == parseFloat(shutterSettings[s].heightUp))) { + + shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); + shutterSettings[s].triggerAction = 'up'; + + adapter.log.info(`#4 Will end sunprotect ID: ${shutterSettings[s].shutterName} value: ${shutterSettings[s].triggerHeight}% after is the value for up`); + adapter.log.debug(`save new trigger height: ${shutterSettings[s].triggerHeight}%`); + adapter.log.debug(`save new trigger action: ${shutterSettings[s].triggerAction}`); + + } else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { shutterSettings[s].triggerAction = 'none'; adapter.log.debug('OpenInSunProtect for ' + shutterSettings[s].shutterName + ' is not longer active'); @@ -1501,8 +1549,19 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { adapter.log.debug('Sunprotect for ' + shutterSettings[s].shutterName + ' is not active anymore'); adapter.log.debug('save new trigger action: ' + shutterSettings[s].triggerAction); adapter.log.debug('save new trigger height: ' + shutterSettings[s].triggerHeight + '%'); - } - else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { + } else if (shutterSettings[s].triggerAction == 'sunProtect' && + shutterSettings[s].KeepSunProtect === false && + (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightUp) || + Math.round(parseFloat(_shutterState.val) / vRound) * vRound == parseFloat(shutterSettings[s].heightUp))) { + + shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); + shutterSettings[s].triggerAction = 'up'; + + adapter.log.info(`#5 Will end sunprotect ID: ${shutterSettings[s].shutterName} value: ${shutterSettings[s].triggerHeight}% after is the value for up`); + adapter.log.debug(`save new trigger height: ${shutterSettings[s].triggerHeight}%`); + adapter.log.debug(`save new trigger action: ${shutterSettings[s].triggerAction}`); + + } else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { shutterSettings[s].sunProtectEndtimerid = '' shutterSettings[s].triggerAction = 'none'; shutterSettings[s].sunProtectEndtimerid = ''; @@ -1731,8 +1790,19 @@ async function sunProtect(adapter, elevation, azimuth, shutterSettings) { adapter.log.debug('save new trigger height: ' + shutterSettings[s].triggerHeight + '%'); adapter.log.debug('Sunprotect for ' + shutterSettings[s].shutterName + ' is not active anymore'); adapter.log.debug('save new trigger action: ' + shutterSettings[s].triggerAction); - } - else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { + } else if (shutterSettings[s].triggerAction == 'sunProtect' && + shutterSettings[s].KeepSunProtect === false && + (parseFloat(shutterSettings[s].triggerHeight) == parseFloat(shutterSettings[s].heightUp) || + Math.round(parseFloat(_shutterState.val) / vRound) * vRound == parseFloat(shutterSettings[s].heightUp))) { + + shutterSettings[s].triggerHeight = parseFloat(shutterSettings[s].heightUp); + shutterSettings[s].triggerAction = 'up'; + + adapter.log.info(`#6 Will end sunprotect ID: ${shutterSettings[s].shutterName} value: ${shutterSettings[s].triggerHeight}% after is the value for up`); + adapter.log.debug(`save new trigger height: ${shutterSettings[s].triggerHeight}%`); + adapter.log.debug(`save new trigger action: ${shutterSettings[s].triggerAction}`); + + } else if (shutterSettings[s].currentAction == 'OpenInSunProtect') { shutterSettings[s].triggerAction = 'none'; adapter.log.debug('OpenInSunProtect for ' + shutterSettings[s].shutterName + ' is not longer active');