145 lines
3.9 KiB
JavaScript
145 lines
3.9 KiB
JavaScript
// Description: Main JavaScript file for the web application.
|
|
// arrays and stuff
|
|
const sensorData = {};
|
|
let liveGraphs = [];
|
|
let nodeArray = [];
|
|
let nodeDict = {};
|
|
let graphArray = [];
|
|
// letiables
|
|
let intervalDelay = 5000;
|
|
let amountOfNodes = 3;
|
|
|
|
const socket = new WebSocket("ws://145.92.8.114/ws");
|
|
function openConnection() {
|
|
// Open connection
|
|
socket.addEventListener("open", (event) => {
|
|
console.log("Connected to the WebSocket server");
|
|
});
|
|
|
|
// Error handling
|
|
socket.addEventListener('error', (event) => {
|
|
console.error('WebSocket error:', event);
|
|
// Attempt to reconnect
|
|
setTimeout(openConnection, 1000); // Retry after 1 second
|
|
});
|
|
|
|
// Message handling
|
|
socket.addEventListener("message", (event) => {
|
|
try {
|
|
const jsonData = JSON.parse(event.data);
|
|
// Use the parsed JSON data as needed
|
|
handleIncomingData(jsonData);
|
|
|
|
} catch (error) {
|
|
console.error("Error parsing JSON:", error);
|
|
}
|
|
});
|
|
|
|
// Close handling
|
|
socket.addEventListener('close', (event) => {
|
|
console.log('Connection closed');
|
|
// Attempt to reconnect
|
|
setTimeout(openConnection, 1000); // Retry after 1 second
|
|
});
|
|
console.log("Connected to the WebSocket server");
|
|
}
|
|
|
|
openConnection();
|
|
|
|
async function handleIncomingData(data) {
|
|
if (!data.node || !data.Temp || !data.Humi || !data.eCO2 || !data.TVOC) {
|
|
console.error('Invalid data received:', data);
|
|
return;
|
|
}
|
|
|
|
await nodeAdressHandler(data.node, Object.keys(data).filter(key => key !== 'node'));
|
|
|
|
let nodeName = nodeDict[data.node].name;
|
|
let temperature = data.Temp;
|
|
let humidity = data.Humi;
|
|
let CO2 = data.eCO2;
|
|
let TVOC = data.TVOC;
|
|
|
|
// Update the gauges with the new data
|
|
if (sensorData[data.node]) {
|
|
sensorData[data.node].updateGauge(1, temperature);
|
|
sensorData[data.node].updateGauge(2, humidity);
|
|
sensorData[data.node].updateGauge(3, CO2);
|
|
sensorData[data.node].updateGauge(4, TVOC);
|
|
sensorData[data.node].graph.updateGraph(temperature, humidity, CO2, TVOC);
|
|
} else {
|
|
console.error('No sensor data for node:', nodeName);
|
|
}
|
|
}
|
|
|
|
async function nodeAdressHandler(node, dataTypes) {
|
|
let nodeInfo = await getNodeInfo(node);
|
|
|
|
if (!nodeInfo) {
|
|
console.error('No node info found for node:', node);
|
|
return;
|
|
}
|
|
|
|
let nodeName = nodeInfo.name;
|
|
let nodeLocation = nodeInfo.location;
|
|
|
|
if (!nodeArray.includes(node)) {
|
|
nodeArray.push(node);
|
|
nodeDict[node] = {name: nodeName, location: nodeLocation};
|
|
|
|
let maxGaugeValues = dataTypes.map(dataType => {
|
|
switch (dataType) {
|
|
case 'Temp': return 50;
|
|
case 'Humi': return 100;
|
|
case 'eCO2': return 3000;
|
|
case 'TVOC': return 2200;
|
|
default: return 100;
|
|
}
|
|
});
|
|
|
|
let gaugeGroup = new GaugeGroup(nodeName, nodeLocation, dataTypes.length, maxGaugeValues, dataTypes);
|
|
sensorData[node] = gaugeGroup;
|
|
gaugeGroup.graph = new liveGraph(nodeName);
|
|
sensorData[node] = gaugeGroup;
|
|
gaugeGroup.graph.makeGraph();
|
|
sensorData[node] = gaugeGroup;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function getNodeInfo(node){
|
|
return fetch("http://145.92.8.114/getNodeInfo?macAdress=" + node)
|
|
.then(response => {
|
|
if (!response.ok) {
|
|
throw new Error('Network response was not ok');
|
|
}
|
|
return response.json();
|
|
})
|
|
.then(data => {
|
|
if (data.length == 0) {
|
|
throw new Error('No data returned for node: ' + node);
|
|
}
|
|
return {
|
|
name: data[0].Name,
|
|
location: data[0].Location // Assuming the server returns a Location property
|
|
};
|
|
})
|
|
|
|
}
|
|
|
|
// create a function to enable and disable the graph using .disabled using the id of the graph
|
|
function toggleGraph(nodeId) {
|
|
let graph = document.querySelector('#liveGraph' + nodeId);
|
|
|
|
if (graph) {
|
|
if (graph.classList.contains('disabled')) {
|
|
graph.classList.remove('disabled');
|
|
} else {
|
|
graph.classList.add('disabled');
|
|
}
|
|
} else {
|
|
console.error('No element found with id: liveGraph' + nodeId);
|
|
}
|
|
}
|