'use strict' const express = require('express') const path = require('path') const app = express() const util = require("util"); const fs = require("fs"); const bodyParser = require("body-parser"); const server = require('http').createServer(app); const io = require('socket.io')(server); const mqtt = require('mqtt'); const session = require('express-session'); const bcrypt = require('bcrypt') const client = mqtt.connect('mqtt://127.0.0.1:1883', {clientId: 'node_server', clean: true}) let newData; let user; let msg; let sesUser; let sesStart; app.use(express.static(path.join(__dirname, '/'))); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.use(session({ secret: 'esp vent', resave: false, saveUninitialized: false, name: 'sid', cookie: { httpOnly: false } })) const writeFile = util.promisify(fs.writeFile); const readFile = util.promisify(fs.readFile); function read(filePath) { return readFile(path.resolve(__dirname, filePath)).then(data => JSON.parse(data)); } function write(data, filePath) { return writeFile(path.resolve(__dirname, filePath), JSON.stringify(data, null, 2)) .catch(err => console.error(err)); } function getTime(){ let today = new Date(); let day = ("0" + today.getDate()).slice(-2); let month = ("0" + (today.getMonth() + 1)).slice(-2); let hours = ("0" + today.getHours()).slice(-2); let mins = ("0" + today.getMinutes()).slice(-2); let secs = ("0" + today.getSeconds()).slice(-2); let timestamp = (day + '.' + month + '.' + today.getFullYear() + ' ' + hours + '.' + mins + '.' + secs).toString(); return timestamp; } client.on('connect', ()=>{ console.log('MQTT client connected: '+ client.connected); }); client.subscribe('controller/status', (err)=>{ if(err){ console.log('Subscription failed') } }); io.on('connection', (socket)=>{ console.log("User " + socket.id + " connected"); socket.on('setting', (arg)=> { let data = JSON.stringify(arg); client.publish("controller/settings", JSON.stringify(arg), { qos: 2, retain: false }, (error)=>{ if(error){ console.log(error); } }) }); }); client.on('message', async (topic, message) =>{ newData = JSON.parse(message); console.log(newData); io.emit('data', newData); let info = []; try { info = await read('data.json'); } catch (e) { console.log(e); } let now = getTime(); newData['ts'] = now; info.push(newData); write(info, 'data.json'); }); app.get('/', (req, res)=>{ res.sendFile(path.join(__dirname + '/index.html')); }) app.get('/data', async (req, res) => { try { const data = await read('data.json'); res.json(data); } catch (e) { res.status(404).send(e); } }); app.get('/register', (req,res)=>{ res.send(`