2022-10-21 11:17:48 +03:00

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'));