fixes
This commit is contained in:
parent
f6fc542d81
commit
5b923badf7
50
service.js
50
service.js
@ -161,7 +161,10 @@ coreDb.openCoreDatabase((successDatabase) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* authenticate Divera Monitor with Autologin Key
|
||||||
|
* @returns boolean
|
||||||
|
*/
|
||||||
async function auth(){
|
async function auth(){
|
||||||
let resp = await client.get(`${AUTH_ENDPOINT}${config.MONITOR_ID}.html?autologin=${config.AUTOLOGIN_KEY}`)
|
let resp = await client.get(`${AUTH_ENDPOINT}${config.MONITOR_ID}.html?autologin=${config.AUTOLOGIN_KEY}`)
|
||||||
if(resp.status === 200){
|
if(resp.status === 200){
|
||||||
@ -170,6 +173,16 @@ async function auth(){
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Data from Divera pull Endpoint. With ts=0 all data is pulled.
|
||||||
|
* If ?ts={timestamp}, data changed since this timestamp is pulled.
|
||||||
|
* We just pull all data.
|
||||||
|
*
|
||||||
|
* The Divera Monitor App also connects to a websocket connection where changes are pushed.
|
||||||
|
* Maybe this is a better idea to pull data in the future than pulling in a while loop
|
||||||
|
*
|
||||||
|
* @returns {dict|null}
|
||||||
|
*/
|
||||||
async function pull(){
|
async function pull(){
|
||||||
let resp = await client.get(`${PULL_ENDPOINT}?ts=0`)
|
let resp = await client.get(`${PULL_ENDPOINT}?ts=0`)
|
||||||
if(resp.status === 200){
|
if(resp.status === 200){
|
||||||
@ -178,34 +191,47 @@ async function pull(){
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function handling the state change of an User.
|
||||||
|
* The feedback-status-id is identified by name and basedata(user)-(uu)id is identified by firstname and lastname
|
||||||
|
* So Divera feedback-status/firstname & lastname must be the same as in ALARMiator
|
||||||
|
*
|
||||||
|
* Feedback-state changes are applyed to the lates active operation
|
||||||
|
*
|
||||||
|
* if STATUS_EB/STATUS_NED is set, all groups for this user are muted/unmuted if the name is matching
|
||||||
|
*
|
||||||
|
* @param {Number} consumer_id
|
||||||
|
* @param {Number} status_id
|
||||||
|
*/
|
||||||
async function onStateChange(consumer_id, status_id){
|
async function onStateChange(consumer_id, status_id){
|
||||||
|
|
||||||
var d_consumer = pulled_data['consumer'][consumer_id]
|
var d_consumer = pulled_data['consumer'][consumer_id]
|
||||||
var d_status = pulled_data['status'][status_id]
|
var d_status = pulled_data['status'][status_id]
|
||||||
global.logger.info(`${d_consumer['stdformat_name']}: ${d_status['name']}`)
|
global.logger.info(`${d_consumer.stdformat_name.trim()}: ${d_status.name.trim()}`)
|
||||||
|
|
||||||
let a_consumer = await getMemberByName(d_consumer.firstname, d_consumer.lastname)
|
let a_consumer = await getMemberByName(d_consumer.firstname.trim(), d_consumer.lastname.trim())
|
||||||
if(a_consumer === null){
|
if(a_consumer === null){
|
||||||
global.logger.debug(`basedata nicht gefunden`)
|
global.logger.info(`no matching basedata for \'${d_consumer.firstname.trim()}\' \'${d_consumer.lastname.trim()}\'`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let a_status = await getFeedbackStateIDbyName(d_status['name'])
|
let a_status = await getFeedbackStateIDbyName(d_status.name.trim())
|
||||||
if(a_status !== null){
|
if(a_status !== null){
|
||||||
// Status ist eine Rückmeldung
|
// state is feedback to an operation
|
||||||
let a_operation = await getActiveOperation()
|
let a_operation = await getActiveOperation()
|
||||||
if(a_consumer === null){
|
if(a_consumer === null){
|
||||||
global.logger.debug(`kein aktiver alarm`)
|
global.logger.info(`no active operation running`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// set feedback go last operation
|
||||||
setFeedback(a_operation, a_consumer, a_status)
|
setFeedback(a_operation, a_consumer, a_status)
|
||||||
}else{
|
}else{
|
||||||
// Status auf einsatzbereit/nicht einsatzbereit prüfen
|
// Status auf einsatzbereit/nicht einsatzbereit prüfen
|
||||||
if(config.STATUS_EB == d_status['name']){
|
if(config.STATUS_EB.trim() == d_status.name.trim()){
|
||||||
//Alle Gruppen alamieren
|
//Alle Gruppen alamieren
|
||||||
setGroupsMutedStateForMember(a_consumer,false)
|
setGroupsMutedStateForMember(a_consumer,false)
|
||||||
}
|
}
|
||||||
if(config.STATUS_NEB == d_status['name']){
|
if(config.STATUS_NEB.trim() == d_status.name.trim()){
|
||||||
//Alle Gruppen alamieren deaktivieren
|
//Alle Gruppen alamieren deaktivieren
|
||||||
setGroupsMutedStateForMember(a_consumer,true)
|
setGroupsMutedStateForMember(a_consumer,true)
|
||||||
}
|
}
|
||||||
@ -228,6 +254,7 @@ async function startAPI() {
|
|||||||
if('monitor' in d){
|
if('monitor' in d){
|
||||||
var m = d['monitor'][config.MONITOR_ID]
|
var m = d['monitor'][config.MONITOR_ID]
|
||||||
Object.entries(m).forEach(([key, value]) => {
|
Object.entries(m).forEach(([key, value]) => {
|
||||||
|
// wenn 'monitor' nicht in pulled_data ist das der erste pull, dann alle status in ALARMiator abgleichen (betrifft hautsächlich den EB/NEB status)
|
||||||
if(!('monitor' in pulled_data) || ('monitor' in pulled_data && value.status !== pulled_data['monitor'][key]['status'])){
|
if(!('monitor' in pulled_data) || ('monitor' in pulled_data && value.status !== pulled_data['monitor'][key]['status'])){
|
||||||
onStateChange(value.id,value.status )
|
onStateChange(value.id,value.status )
|
||||||
}
|
}
|
||||||
@ -238,13 +265,14 @@ async function startAPI() {
|
|||||||
}
|
}
|
||||||
_pulled_data = await pull()
|
_pulled_data = await pull()
|
||||||
if(_pulled_data === null){
|
if(_pulled_data === null){
|
||||||
global.logger.info('_pulled_data === null, reauth')
|
global.logger.debug('_pulled_data === null, reauth')
|
||||||
_auth = await auth()
|
_auth = await auth()
|
||||||
_pulled_data = await pull()
|
_pulled_data = await pull()
|
||||||
if(_pulled_data === null){
|
if(_pulled_data === null){
|
||||||
global.logger.info('_pulled_data === null after reauth, EXIT!!')
|
global.logger.debug('_pulled_data === null after reauth, EXIT!!')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
global.logger.info('auth mit API_KEY war nicht erfolgreich. Service ist gestoppt und startet nicht mehr automatisch??')
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user