iobroker.shuttercontrol
Version:
Automatic control for shutters
59 lines (47 loc) • 2.89 kB
JavaScript
let timerSleep = 0;
async function sleep(ms) {
return new Promise(async (resolve) => {
// @ts-ignore
timerSleep = setTimeout(async () => resolve(), ms);
});
}
async function shutterState(shutterID, adapter, shutterSettings, checkTimeDelay) {
return new Promise(async (resolve) => {
let checkTime = 1000;
if (adapter.config.currentShutterState == true &&
checkTimeDelay == true) {
checkTime = adapter.config.currentShutterStateTime ? (adapter.config.currentShutterStateTime * 1000) : 60000;
}
if (shutterSettings) {
const result = shutterSettings.filter((d) => d.name == shutterID);
await sleep(checkTime);
for (const i in result) {
for (const s in shutterSettings) {
if (shutterSettings[s].shutterName == result[i].shutterName) {
const _shutterState = await adapter.getForeignStateAsync(shutterSettings[s].name).catch((e) => adapter.log.warn(e));
const nameDevice = shutterSettings[s].shutterName.replace(/[.;, ]/g, '_');
if (_shutterState?.val !== null && _shutterState?.val !== undefined &&
shutterSettings[s].currentHeight != Math.round(_shutterState.val / adapter.config.shutterStateRound) * adapter.config.shutterStateRound) {
shutterSettings[s].currentHeight = Math.round(_shutterState.val / adapter.config.shutterStateRound) * adapter.config.shutterStateRound;
await adapter.setStateAsync(`shutters.autoLevel.${nameDevice}`, { val: parseFloat(shutterSettings[s].currentHeight), ack: true })
.catch((e) => adapter.log.warn(e));
adapter.log.debug(`save current height after State Check: ${shutterSettings[s].currentHeight}% from ${shutterSettings[s].shutterName}`);
if (shutterSettings[s].triggerAction == 'Manu_Mode') {
shutterSettings[s].triggerHeight = shutterSettings[s].currentHeight;
shutterSettings[s].alarmTriggerAction = 'Manu_Mode';
shutterSettings[s].alarmTriggerLevel = Math.round(_shutterState.val / adapter.config.shutterStateRound) * adapter.config.shutterStateRound;
adapter.log.debug(`Shutter ${shutterSettings[s].shutterName} was moved manually to: ${shutterSettings[s].currentHeight}% - prevent trigger from driving back`);
}
}
}
}
}
clearTimeout(timerSleep);
resolve(shutterSettings);
} else {
resolve(shutterSettings);
}
});
}
module.exports = shutterState;
;