diff --git a/client.js b/client.js index 27be6e0..b0d68fb 100644 --- a/client.js +++ b/client.js @@ -3,6 +3,30 @@ let stations = {}; let messages = []; const timeoutLength = 20 * 60 * 1000; // 20 Minutes +const trackedStations = { + // Digis/iGates + "W1FN-1": null, + "W1FN-3": null, + "W1FN-5": null, + "W1FN-6": null, + "W1FN-7": null, + "W1FN-8": null, + "W1FN-9": null, + "W1FN-10": null, + "N1GMC-1": null, + "N1GMC-2": null, + + // Vehicles + "KC1GDW-6": "Rover 1", + "K1EHZ-9": "Rover 2", + "N0JSR-9": "Rover 3", + "W1KUA-9": "Manager", + "KC1GDW-13": "Coordinator", + "WB1BRE-12": "EMS", + "KC1GDW-11": "Bike Tech", + "KC1GDW-14": "Something (panel van thing)" +}; + const lowVoltage = 11.9; if (Notification.permission !== "granted") { @@ -13,6 +37,13 @@ if (Notification.permission !== "granted") { }); } +function getTactical(callsign) { + if (trackedStations[callsign]) + return `${trackedStations[callsign]} [${callsign}]`; + else + return callsign; +} + function prettyDuration(duration) { let date = new Date(timeoutLength); return date.getUTCHours() > 0 ? date.getUTCHours() + " Hours": "" + @@ -41,7 +72,7 @@ function redrawTable() { tr.classList.add('lowVoltage'); } tr.innerHTML = - `${callsign}` + + `${getTactical(callsign)}` + `${station.lastHeard.toLocaleTimeString('en-GB')}` + `${nowDelta.toLocaleTimeString('en-GB', {timeZone: "UTC"})}` + `${station.lastVoltage||''}` + @@ -55,12 +86,12 @@ function notify(title, body) { } function alertNotHeard(callsign) { - notify(`${callsign} has not been heard for ${prettyDuration(timeoutLength)}!`, + notify(`${getTactical(callsign)} has not been heard for ${prettyDuration(timeoutLength)}!`, `Last Heard: ${stations[callsign].lastHeard.toLocaleTimeString('en-GB')}`); } function alertVoltage(callsign) { - notify(`${callsign}'s battery has dropepd below ${lowVoltage}V`, + notify(`${getTactical(callsign)}'s battery has dropepd below ${lowVoltage}V`, `Voltage: ${stations[callsign].lastVoltage}`); } @@ -73,28 +104,32 @@ aprsStream.onmessage = function(event) { console.log(message); messages.push(message); - if (!(callsign in stations)) { - stations[callsign] = {}; - } + // TODO: hacky filter + if (callsign in trackedStations) { - else { - window.clearTimeout(stations[callsign].timeout); - } - stations[callsign].lastHeard = date; - stations[callsign].delta = date - stations[callsign].lastHeard; - stations[callsign].timeout = window.setTimeout( - alertNotHeard, timeoutLength, callsign); - - if ('data' in message && 'analog' in message.data) { - stations[callsign].lastVoltage = message.data.analog[0] / 10; - stations[callsign].lastTemperature = message.data.analog[1]; - - if (stations[callsign].lastVoltage <= lowVoltage) { - alertVoltage(callsign); + if (!(callsign in stations)) { + stations[callsign] = {}; + } + else { + window.clearTimeout(stations[callsign].timeout); } - } - redrawTable(); + stations[callsign].lastHeard = date; + stations[callsign].delta = date - stations[callsign].lastHeard; + stations[callsign].timeout = window.setTimeout( + alertNotHeard, timeoutLength, callsign); + + if ('data' in message && 'analog' in message.data) { + stations[callsign].lastVoltage = message.data.analog[0] / 10; + stations[callsign].lastTemperature = message.data.analog[1]; + + if (stations[callsign].lastVoltage <= lowVoltage) { + alertVoltage(callsign); + } + } + + redrawTable(); + } }; window.addEventListener("load", redrawTable);