Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 58 additions & 49 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down