const mqtt = require('mqtt'); const request = require('request'); let util = require('util'); const logger = require('log4js').getLogger(); const EventEmitter = require('events'); let Minibus = require('minibus'); // var db = require('../server/db-connector').dbConnection; //var nano = require('nano')('http://martind2000:1V3D4m526i@localhost:5984'); //var nano = require('nano')('http://localhost:5984'); let db_name = 'mqtt'; //var dbCouch = nano.use(db_name); var globalMode = 'FanOff'; var lastDispatch = 0; const mqttClient = function (events) { const orgId = ''; const userName = ''; const appKey = 'bob'; this.livingRoom = { temp: 0, last: 0 }; let mode = 'FanOff'; const d = new Date(); this.lastMsg = d.getTime(); events.on('sendIFTTT', function (mode) { const url = ['https://maker.ifttt.com/trigger/', mode, '/with/key/cWvECkeiyAPwmiOPBkXL2D'].join(''); if (mode !== globalMode) { console.log('Sending..'); globalMode = mode; request(url, function (error, response, body) { // if (!error && response.statusCode === 200) { console.log(response, body); // } }); var d = new Date(); lastDispatch = d.getTime(); } else { console.log('Not sent...'); } }); this.fanTimer = function () { 'use strict'; const now = new Date; const mod = 900000 - (now.getTime() % 900000); if (globalMode === 'FanOff') { console.log('Fans off, temp should be <= 19.5'); mode = (parseFloat(this.livingRoom.temp) <= 19.5) ? 'FanOn' : 'FanOff'; } else { console.log('Fans on, temp should not be less than 22.5'); mode = (parseFloat(this.livingRoom.temp) <= 22.5) ? 'FanOn' : 'FanOff'; } let n = new Date(); n = n.getTime() - this.lastMsg; console.log('Last msg', n); if (n >= 600000) { console.error('No message received for over 10 minutes'); mode = 'FanOff'; throw new error('Ejecting for restart'); } logger.info('LR temp:', this.livingRoom.temp); events.emit('sendIFTTT', mode); const data = {id: 'temperature', data: {mode: mode, temp: this.livingRoom.temp}}; events.emit('sendSocket', data); setTimeout(this.fanTimer.bind(this), mod + 10); }; this.lighting = 'lights'; this.connected = false; const options = { keepalive: 3600, clientId: 'a:' + orgId + ':' + Date.now(), username: userName, password: new Buffer(appKey) }; this.client = mqtt.connect('mqtt://' + orgId + 'silvrtree.co.uk', options); this.client.on('connect', function () { connected = true; logger.info('Connected to SIlvr Broker'); this.fanTimer(); }.bind(this)); this.client.subscribe('livingroomTemp'); this.client.on('message', function (topic, message) { const json = JSON.parse(message.toString()); logger.debug(json); logger.debug(json.temp); this.livingRoom.temp = parseFloat(json.temp); console.log('lr:',this.livingRoom.temp, this.livingRoom.temp >= 22.6); if (this.livingRoom.temp >= 22.7) { console.log('Max temp reached, turn off'); events.emit('sendIFTTT', 'FanOff'); } const d = new Date(); this.lastMsg = d.getTime(); const data = {id: 'temperature', data: {mode: mode, temp: this.livingRoom.temp}}; events.emit('sendSocket', data); }.bind(this)); this.isConnected = function () { return this.connected; }; }; module.exports.mqttClient = mqttClient;