103 lines
2.8 KiB
JavaScript
103 lines
2.8 KiB
JavaScript
'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 WebSocket = require('ws');
|
|
|
|
//const wss = new WebSocket.Server({server});
|
|
const client = mqtt.connect('mqtt://127.0.0.1:1883', {clientId: 'node_server', clean: true})
|
|
let newData;
|
|
|
|
app.use(express.static(path.join(__dirname, '/')));
|
|
app.use(bodyParser.json());
|
|
app.use(bodyParser.urlencoded({extended: 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));
|
|
}
|
|
|
|
app.get('/', (req, res)=>{
|
|
|
|
res.sendFile(path.join(__dirname + '/index.html'));
|
|
})
|
|
|
|
client.on('connect', ()=>{
|
|
console.log('MQTT client connect: '+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);
|
|
console.log(data);
|
|
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.toString());
|
|
io.emit('data', newData);
|
|
console.log(newData);
|
|
//console.log(message)
|
|
//io.on('connection', (socket)=>{
|
|
//let send = JSON.stringify(newdata);
|
|
|
|
//});
|
|
|
|
let info = [];
|
|
try {
|
|
info = await read('data.json');
|
|
} catch (e) {
|
|
}
|
|
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();
|
|
//console.log(timestamp);
|
|
newData['ts'] = timestamp;
|
|
info.push(newData);
|
|
write(info, 'data.json');
|
|
});
|
|
|
|
|
|
|
|
app.get('/data', async (req, res) => {
|
|
try {
|
|
const data = await read('data.json');
|
|
res.json(data);
|
|
} catch (e) {
|
|
res.status(404).send(e);
|
|
}
|
|
});
|
|
|
|
|
|
server.listen(3000, () => console.log('Server listening on port 3000')); |