owmweather - Move pulling code to lib

master
Martin Boonk 2022-07-02 23:27:02 +02:00
parent 76cd112a13
commit 729628ca0f
4 changed files with 72 additions and 66 deletions

View File

@ -1,74 +1,26 @@
(function() { (function() {
let responsePromise; let waiting = false;
let settings = require("Storage").readJSON("owmweather.json", 1) || { let settings = require("Storage").readJSON("owmweather.json", 1) || {
enabled: false enabled: false
}; };
if (settings.enabled) {
Bangle.pullOwmWeather = function(force, completionCallback) { function completion(){
if (!force && responsePromise){ waiting = false;
return; }
}
let location = require("Storage").readJSON("mylocation.json", 1) || { if (settings.enabled) {
"lat": 51.50,
"lon": 0.12,
"location": "London"
};
let settings = require("Storage").readJSON("owmweather.json", 1);
let uri = "https://api.openweathermap.org/data/2.5/weather?lat=" + location.lat.toFixed(2) + "&lon=" + location.lon.toFixed(2) + "&exclude=hourly,daily&appid=" + settings.apikey;
if (Bangle.http){
responsePromise = Bangle.http(uri).then(event => {
let result = parseWeather(event.resp);
responsePromise = false;
if (completionCallback) completionCallback(result);
}).catch((e)=>{
responsePromise = false;
if (completionCallback) completionCallback(e);
});
} else {
if (completionCallback) completionCallback(/*LANG*/"No http method found");
}
};
var parseWeather = function(response) {
let owmData = JSON.parse(response);
let isOwmData = owmData.coord && owmData.weather && owmData.main;
if (isOwmData) {
let json = require("Storage").readJSON('weather.json') || {};
let weather = {};
weather.time = Date.now();
weather.hum = owmData.main.humidity;
weather.temp = owmData.main.temp;
weather.code = owmData.weather[0].id;
weather.wdir = owmData.wind.deg;
weather.wind = owmData.wind.speed;
weather.loc = owmData.name;
weather.txt = owmData.weather[0].main;
if (weather.wdir != null) {
let deg = weather.wdir;
while (deg < 0 || deg > 360) {
deg = (deg + 360) % 360;
}
weather.wrose = ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw', 'n'][Math.floor((deg + 22.5) / 45)];
}
json.weather = weather;
require("Storage").writeJSON('weather.json', json);
require("weather").emit("update", json.weather);
return undefined;
} else {
return /*LANG*/"Not OWM data";
}
};
let weather = require("Storage").readJSON('weather.json') || {}; let weather = require("Storage").readJSON('weather.json') || {};
if (weather.time + settings.refresh * 1000 * 60 < Date.now()){ if (weather.time + settings.refresh * 1000 * 60 < Date.now()){
Bangle.pullOwmWeather(); if (!waiting){
waiting = true;
require("owmweather").pull(completion);
}
} }
setInterval(() => { setInterval(() => {
Bangle.pullOwmWeather(); if (!waiting){
waiting = true;
require("owmweather").pull(completion);
}
}, settings.refresh * 1000 * 60); }, settings.refresh * 1000 * 60);
delete settings; delete settings;
} }

53
apps/owmweather/lib.js Normal file
View File

@ -0,0 +1,53 @@
function parseWeather(response) {
let owmData = JSON.parse(response);
let isOwmData = owmData.coord && owmData.weather && owmData.main;
if (isOwmData) {
let json = require("Storage").readJSON('weather.json') || {};
let weather = {};
weather.time = Date.now();
weather.hum = owmData.main.humidity;
weather.temp = owmData.main.temp;
weather.code = owmData.weather[0].id;
weather.wdir = owmData.wind.deg;
weather.wind = owmData.wind.speed;
weather.loc = owmData.name;
weather.txt = owmData.weather[0].main;
if (weather.wdir != null) {
let deg = weather.wdir;
while (deg < 0 || deg > 360) {
deg = (deg + 360) % 360;
}
weather.wrose = ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw', 'n'][Math.floor((deg + 22.5) / 45)];
}
json.weather = weather;
require("Storage").writeJSON('weather.json', json);
require("weather").emit("update", json.weather);
return undefined;
} else {
return /*LANG*/"Not OWM data";
}
}
exports.pull = function(completionCallback) {
let location = require("Storage").readJSON("mylocation.json", 1) || {
"lat": 51.50,
"lon": 0.12,
"location": "London"
};
let settings = require("Storage").readJSON("owmweather.json", 1);
let uri = "https://api.openweathermap.org/data/2.5/weather?lat=" + location.lat.toFixed(2) + "&lon=" + location.lon.toFixed(2) + "&exclude=hourly,daily&appid=" + settings.apikey;
if (Bangle.http){
Bangle.http(uri, {timeout:10000}).then(event => {
let result = parseWeather(event.resp);
if (completionCallback) completionCallback(result);
}).catch((e)=>{
if (completionCallback) completionCallback(e);
});
} else {
if (completionCallback) completionCallback(/*LANG*/"No http method found");
}
};

View File

@ -13,6 +13,7 @@
"storage": [ "storage": [
{"name":"owmweather.default.json","url":"default.json"}, {"name":"owmweather.default.json","url":"default.json"},
{"name":"owmweather.boot.js","url":"boot.js"}, {"name":"owmweather.boot.js","url":"boot.js"},
{"name":"owmweather","url":"lib.js"},
{"name":"owmweather.settings.js","url":"settings.js"} {"name":"owmweather.settings.js","url":"settings.js"}
] ]
} }

View File

@ -38,13 +38,13 @@
} }
}, },
"Force refresh": ()=>{ "Force refresh": ()=>{
if (!Bangle.pullOwmWeather){ if (!settings.apikey){
E.showAlert("Reload watch after enabling","Hint").then(()=>{ E.showAlert("API key is needed","Hint").then(()=>{
E.showMenu(buildMainMenu()); E.showMenu(buildMainMenu());
}); });
} else { } else {
E.showMessage("Reloading weather"); E.showMessage("Reloading weather");
Bangle.pullOwmWeather(true, (e)=>{ require("owmweather").pull((e)=>{
if (e) { if (e) {
E.showAlert(e,"Error").then(()=>{ E.showAlert(e,"Error").then(()=>{
E.showMenu(buildMainMenu()); E.showMenu(buildMainMenu());