80 lines
2.0 KiB
JavaScript
80 lines
2.0 KiB
JavaScript
const SerialPort = require('serialport');
|
|
const parsers = SerialPort.parsers;
|
|
const fs = require('fs');
|
|
let express = require('express');
|
|
let app = express();
|
|
let server = require('http').createServer(app);
|
|
let io = require('socket.io')(server);
|
|
/* COMMUNICATION WITH ARDUINO AND CLENSING OF DATA */
|
|
|
|
let lastHour = []
|
|
let history = [];
|
|
let temperature;
|
|
const parser = new parsers.Readline({
|
|
delimiter: '\r\n'
|
|
});
|
|
|
|
const port = new SerialPort('COM3', {
|
|
baudRate: 115200
|
|
});
|
|
|
|
port.pipe(parser);
|
|
|
|
port.on('open', () => {
|
|
console.log('Serial connection on COM3 initialized')
|
|
});
|
|
|
|
port.on('data', (data) => {
|
|
let temp = parseFloat(data.toString());
|
|
if (temp == NaN) return;
|
|
if (temp == NaN) return;
|
|
if (temp == undefined) return;
|
|
if (temp == null) return;
|
|
if (temp + 5 < temperature) return;
|
|
if (temp - 5 > temperature) return;
|
|
temperature = temp;
|
|
});
|
|
|
|
/* SIMPLE WEBSERVER */
|
|
|
|
app.use('/', express.static(__dirname + '/client'));
|
|
app.get('/', function(req, res) {
|
|
res.sendFile(__dirname + '/client/index.html');
|
|
});
|
|
app.listen(7000);
|
|
console.log('Server listening on 8081')
|
|
|
|
/* WEBSOCKETS */
|
|
|
|
server.listen(7001);
|
|
|
|
io.on('connection', (socket) => {
|
|
let ip = socket.request.connection.remoteAddress;
|
|
if (ip.startsWith('::ffff:')) ip = ip.substring(7);
|
|
|
|
socket.on('handshake', function(data) {
|
|
console.log('New client connecting at ' + ip)
|
|
socket.emit('handshake', 'server');
|
|
});
|
|
|
|
socket.on('ready', function(data) {
|
|
console.log('Handshake with ' + ip + ' successful')
|
|
socket.emit('lasthour', lastHour);
|
|
|
|
setInterval(() => {
|
|
socket.emit('temp', [temperature, temperature * 2]);
|
|
}, 60000);
|
|
});
|
|
|
|
socket.on('another', function(data) {
|
|
socket.emit('temp', [temperature, temperature * 2]);
|
|
});
|
|
});
|
|
|
|
setInterval(() => {
|
|
history.push(temperature);
|
|
lastHour.push(temperature);
|
|
if (lastHour.length > 60) lastHour.splice(0,1);
|
|
fs.appendFileSync('client/history.csv', `${new Date().toLocaleString()},${temperature}\n`)
|
|
}, 60000)
|