owmweather - Move pulling code to lib
parent
76cd112a13
commit
729628ca0f
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -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"}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue