BangleApps/apps/usgs/app.js

90 lines
2.6 KiB
JavaScript

var dataStreams = {}; // Will hold directions to Datastreams and units, with above keys
var FILE = "usgs.json";
// Load settings
var settings = Object.assign({
loc: '03272100',
keys: {'Gage height': true, 'Discharge': true, 'Temperature, water': true},
shortenedName: {"Gage height":"Ga","Discharge":"Dis","Temperature, water":"Temp"},
tempUnitF: true,
}, require('Storage').readJSON(FILE, true) || {});
function fetchStartup() {
uri = "https://labs.waterdata.usgs.gov/sta/v1.1/Things('USGS-" +
settings.loc +
"')/Datastreams?$expand=Observations($orderby=phenomenonTime%20desc;$top=1;$select=result)&$select=unitOfMeasurement,description";
if (Bangle.http) {
Bangle.http(uri, {timeout:10000}).then(d => handleStartup(JSON.parse(d.resp).value));
}
}
function handleStartup(data) {
for (var key1 in data) {
desc = data[key1].description.split(" / ")[0];
if (settings.keys[desc]) {
if (data[key1].unitOfMeasurement.symbol === "degC" && settings.tempUnitF) {
symbol = "F";
result = (data[key1].Observations[0].result * 9 / 5) + 32;
} else {
symbol = data[key1].unitOfMeasurement.symbol;
result = data[key1].Observations[0].result;
}
dataStreams[desc] = JSON.parse(
'{"unit":"' +
symbol +
'","value":"' +
result +
'"}'
);
}
}
displayData(dataStreams);
}
function displayData(dataStreams) {
g.clear();
g.setFont("Vector",20);
g.setFontAlign(0,0);
string = "";
for (var key in dataStreams) {
unit = dataStreams[key].unit;
value = dataStreams[key].value;
if (settings.shortenedName[key]) {
name = settings.shortenedName[key];
} else {
name = key;
}
string += name+": "+value+" "+unit+"\n";
}
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
// Format the time as a string
var timeString = hours.toString().padStart(2, "0") + ":" +
minutes.toString().padStart(2, "0") + ":" +
seconds.toString().padStart(2,"0");
E.showMessage(string,timeString);
}
function handleButton() {
switch(nPress) {
case 1:
fetchStartup();
break;
case 2:
Bangle.showLauncher();
break;
default:
Bangle.buzz(50);
}
nPress=0;
}
fetchStartup();
nPress = 0;
tPress = 0;
setWatch(() => {
nPress++;
clearTimeout(tPress);
tPress = setTimeout(() => {handleButton();}, 500);
}, (process.env.HWVERSION==2) ? BTN1 : BTN2, {repeat: true, edge: "rising"});