const io = require('socket.io-client'); const socket = io('http://localhost:3000'); let timeFlag; // Flag to keep track of time passed let prevData; // Object to store and compare previously sent data socket.on('connect', () => { console.log('Connected to server!'); // Client connects to server // Only happens the first time the client connects to the server timeFlag = new Date(); prevData = { temperature: getTemp(), humAir: getHumAir(), humGround: getHumGround(), airSpeed: getAirSpeed(), } }); setInterval(() => { let data = { temperature: getTemp(), humAir: getHumAir(), humGround: getHumGround(), airSpeed: getAirSpeed(), } const now = new Date(); let timeDiff = now - timeFlag; timeDiff /= 1000; // If more than 5 minutes have passed or compareData is true if ((timeDiff > 5) || compareData(data)) { prevData = data; timeFlag = new Date(); socket.emit('data', data); } }, 30 * 1000); // Every 30s // Return a test temp from 1-50 getTemp = () => { return Math.floor(Math.random() * 50); } // Return a test air humidity from 1-100 getHumAir = () => { return Math.floor(Math.random() * 100); } // Return a test ground humidity from 1-100 getHumGround = () => { return Math.floor(Math.random() * 100); } // Return a test wind speed from 1-12 getAirSpeed = () => { return Math.floor(Math.random() * 12); } // Compare data with prevData and determine if they need to be send to server compareData = (data) => { for (const key in data) { if (diff(data[key], prevData[key]) > 10) return true; } return false; } // Handy function to calculate the % difference diff = (x, y) => { return 100 * Math.abs((x - y) / ((x + y) / 2)); }