diff --git a/main.js b/main.js index d670fe3..f997e01 100644 --- a/main.js +++ b/main.js @@ -296,63 +296,72 @@ class Divera247 extends utils.Adapter { // Setting the update state this.setState('lastUpdate', { val: Date.now(), ack: true }); + this.log.debug('Received data from Divera-API: ' + JSON.stringify(content)); // Setting the alarm specific states when a new alarm is active and addressed to the configured divera user id - if (content.success && Object.keys(content.data.items).length > 0) { - const alarmContent = content.data.items[content.data.sorting[0]]; - if ((internalAlarmData.alarmID != alarmContent.id && !alarmContent.closed) || (internalAlarmData.alarmID == alarmContent.id && internalAlarmData.lastAlarmUpdate < alarmContent.ts_update && !alarmContent.closed)) { - this.log.debug('New or updated alarm!'); - this.log.debug('Received data from Divera-API: ' + JSON.stringify(content)); - - // Setting internal variables for later checkes - internalAlarmData.alarmID = alarmContent.id; - internalAlarmData.alarmClosed = alarmContent.closed; - internalAlarmData.lastAlarmUpdate = alarmContent.ts_update; - - // Checking UI Input filter and trigger update the states - if (diveraFilterOnlyAlarmsForMyUser) { - for (const elm of userData.diveraMemberships) { - this.log.debug('checking if my user-id \'' + elm.id + '\' for \'' + elm.name + '\' is alarmed'); - if (alarmContent.ucr_addressed.includes(parseInt(elm.id, 10))) { - this.setAdapterStates(alarmContent); - this.log.debug('my user is alarmed - states refreshed for the current alarm'); - break; - } else { - this.log.debug('user is not alarmed'); + if (content.success) { + if (Object.keys(content.data.items).length > 0) { + const alarmContent = content.data.items[content.data.sorting[0]]; + if ((internalAlarmData.alarmID != alarmContent.id && !alarmContent.closed) || (internalAlarmData.alarmID == alarmContent.id && internalAlarmData.lastAlarmUpdate < alarmContent.ts_update && !alarmContent.closed)) { + this.log.debug('New or updated alarm!'); + + // Setting internal variables for later checkes + internalAlarmData.alarmID = alarmContent.id; + internalAlarmData.alarmClosed = alarmContent.closed; + internalAlarmData.lastAlarmUpdate = alarmContent.ts_update; + + // Checking UI Input filter and trigger update the states + if (diveraFilterOnlyAlarmsForMyUser) { + for (const elm of userData.diveraMemberships) { + this.log.debug('checking if my user-id \'' + elm.id + '\' for \'' + elm.name + '\' is alarmed'); + if (alarmContent.ucr_addressed.includes(parseInt(elm.id, 10))) { + this.setAdapterStates(alarmContent); + this.log.debug('my user is alarmed - states refreshed for the current alarm'); + break; + } else { + this.log.debug('user is not alarmed'); + } } - } - } else if (diveraUserIDs.length > 0 && diveraUserIDs[0] != '') { - for (const elm of diveraUserIDs) { - this.log.debug('checking if user \'' + elm + '\' is alarmed'); - if (alarmContent.ucr_addressed.includes(parseInt(elm, 10))) { - this.setAdapterStates(alarmContent); - this.log.debug('user is alarmed - states refreshed for the current alarm'); - break; - } else { - this.log.debug('user is not alarmed'); + } else if (diveraUserIDs.length > 0 && diveraUserIDs[0] != '') { + for (const elm of diveraUserIDs) { + this.log.debug('checking if user \'' + elm + '\' is alarmed'); + if (alarmContent.ucr_addressed.includes(parseInt(elm, 10))) { + this.setAdapterStates(alarmContent); + this.log.debug('user is alarmed - states refreshed for the current alarm'); + break; + } else { + this.log.debug('user is not alarmed'); + } } - } - } else if (diveraUserGroups.length > 0 && diveraUserGroups[0] != '') { - for (const elm of diveraUserGroups) { - this.log.debug('checking if group \'' + elm + '\' is alarmed'); - if (alarmContent.group.includes(parseInt(elm, 10))) { - this.setAdapterStates(alarmContent); - this.log.debug('group is alarmed - states refreshed for the current alarm'); - break; - } else { - this.log.debug('group is not alarmed'); + } else if (diveraUserGroups.length > 0 && diveraUserGroups[0] != '') { + for (const elm of diveraUserGroups) { + this.log.debug('checking if group \'' + elm + '\' is alarmed'); + if (alarmContent.group.includes(parseInt(elm, 10))) { + this.setAdapterStates(alarmContent); + this.log.debug('group is alarmed - states refreshed for the current alarm'); + break; + } else { + this.log.debug('group is not alarmed'); + } } + } else { + this.log.debug('userID and group check skipped as of no userID or group is specified or my user was already alarmed'); + this.setAdapterStates(alarmContent); + this.log.debug('states refreshed for the current alarm'); } - } else { - this.log.debug('userID and group check skipped as of no userID or group is specified or my user was already alarmed'); - this.setAdapterStates(alarmContent); - this.log.debug('states refreshed for the current alarm'); + } else if (internalAlarmData.alarmID == alarmContent.id && alarmContent.closed && !internalAlarmData.alarmClosed) { + this.setState('alarm', { val: !alarmContent.closed, ack: true }); + this.log.debug('alarm is closed'); + internalAlarmData.alarmClosed = alarmContent.closed; } - } else if (internalAlarmData.alarmID == alarmContent.id && alarmContent.closed && !internalAlarmData.alarmClosed) { - this.setState('alarm', { val: !alarmContent.closed, ack: true }); - this.log.debug('alarm is closed'); - internalAlarmData.alarmClosed = alarmContent.closed; + } else { + // We got data, but no alarms are set. + this.setState('alarm', { val: false, ack: true }); + this.log.debug('no alarms'); + internalAlarmData.alarmClosed = true; } + } else { + this.log.warn('api content retrieval not successful'); } } ).catch(