|
var logger = require('winston');
var sensor = require("ds18x20")
var devices;
var channel;
var current_temp;
const Sequelize = require('sequelize');
const sequelize = new Sequelize('postgres://postgres:postgres-pi@localhost:5432/home_automation');
sequelize
.authenticate()
.then(() => { logger.info('Connection to database has been established successfully.'); })
.catch(err => { logger.info('Unable to connect to the database:', err); });
module.exports.start = function(router, channel_config){
channel = channel_config
logger.info("Starting External temperature module");
var isLoaded = sensor.isDriverLoaded();
if(isLoaded){
logger.info("ds18x20 sensor drivers are loaded.")
devices = sensor.list();
console.log(devices);
setInterval(function () {
var temperature = readSensor();
}, 5000);
setInterval(function () {
saveData();
}, 300000);
} else {
logger.info("ds18x20 sensor drivers are not loaded.")
}
router.get('/external_temperature', function (req, res) {
logger.info("Received request for external temperature data");
sequelize.query("SELECT * FROM conditions", { type: sequelize.QueryTypes.SELECT}).then(data => {
res.json(data);
})
});
}
function readSensor() {
// Read Sensor data
if(devices == undefined){
devices = sensor.list();
}
sensor.get(devices[devices.length - 1], function(err, temp){
if(err){
console.log(err);
}
channel.emit('temperature_external', { temperature: temp });
current_temp = temp;
});
}
function saveData(){
sequelize.query("INSERT INTO conditions(time, location, temperature) VALUES (NOW(), 'external', " + current_temp + ");").spread((results, metadata) => {
// Results will be an empty array and metadata will contain the number of affected rows.
})
}
|