45 lines
1.9 KiB
JavaScript
45 lines
1.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const express = require("express");
|
|
const logger = require("./log");
|
|
const bodyParser = require("body-parser");
|
|
const config = require("./config");
|
|
const MqttDispatcher_1 = require("./MqttDispatcher");
|
|
const events_1 = require("events");
|
|
class GeoFences extends events_1.EventEmitter {
|
|
constructor() {
|
|
super();
|
|
this.app = express();
|
|
this.app.use(bodyParser.urlencoded({ extended: false }));
|
|
this.app.use(bodyParser.json());
|
|
this.attendanceSheet = {};
|
|
}
|
|
exec() {
|
|
this.app.post('/', (req, res) => {
|
|
const reqData = req.body;
|
|
const deviceId = reqData.device;
|
|
let occupantName = 'unknown';
|
|
const location = reqData.name;
|
|
if (deviceId in config.dict.occupants) {
|
|
occupantName = config.dict.occupants[deviceId];
|
|
}
|
|
const presence = reqData.entry == '1';
|
|
const direction = presence ? 'arrives at' : 'leaves from';
|
|
logger.info(`${deviceId} (${occupantName}) ${direction} ${location}`);
|
|
logger.info(JSON.stringify(reqData));
|
|
res.send('OK');
|
|
const state = presence ? 'present' : 'absent';
|
|
MqttDispatcher_1.mqttHandler.send(`${GeoFences.geoFencesTopicPre}/${occupantName}`, state);
|
|
this.attendanceSheet[occupantName] = presence;
|
|
logger.info(`attendanceSheet is now ${JSON.stringify(this.attendanceSheet)}`);
|
|
this.emit('change', this.attendanceSheet);
|
|
});
|
|
let port = parseInt(config.dict.geofencesPort);
|
|
this.server = this.app.listen(port, '', () => {
|
|
logger.info(`geofences server listening on ${port}`);
|
|
});
|
|
}
|
|
}
|
|
GeoFences.geoFencesTopicPre = "dispatcher_ng/geofences";
|
|
exports.GeoFences = GeoFences;
|
|
//# sourceMappingURL=GeoFences.js.map
|