From 863923a3aa7502ceafdcea7bfd15df8d1634df21 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Fri, 18 Jun 2021 20:16:00 +0200 Subject: [PATCH] fix #485: weather: add wind direction --- apps.json | 2 +- apps/weather/ChangeLog | 3 ++- apps/weather/app.js | 8 ++++++-- apps/weather/lib.js | 17 +++++++++++++++++ apps/weather/screenshot.png | Bin 4039 -> 4296 bytes 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/apps.json b/apps.json index 96a224d6e..cb40456fe 100644 --- a/apps.json +++ b/apps.json @@ -531,7 +531,7 @@ { "id": "weather", "name": "Weather", "icon": "icon.png", - "version":"0.04", + "version":"0.05", "description": "Show Gadgetbridge weather report", "readme": "readme.md", "tags": "widget,outdoors", diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index d202a5562..8d8585db9 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -1,3 +1,4 @@ 0.02: Make minor adjustments to widget, and discard stale weather data after a configurable period. 0.03: Fix flickering last updated time. -0.04: Adjust "weather unknown" message according to Bluetooth connection. \ No newline at end of file +0.04: Adjust "weather unknown" message according to Bluetooth connection. +0.05: Add wind direction. \ No newline at end of file diff --git a/apps/weather/app.js b/apps/weather/app.js index 288f0a3e3..6ea043467 100644 --- a/apps/weather/app.js +++ b/apps/weather/app.js @@ -30,10 +30,14 @@ g.setFont("6x8", 1); g.setFontAlign(-1, 0, 0); g.drawString("Humidity", 135, 130); - g.drawString("Wind", 135, 142); g.setFontAlign(1, 0, 0); g.drawString(w.hum+"%", 225, 130); - g.drawString(locale.speed(w.wind), 225, 142); + if ('wind' in w) { + g.setFontAlign(-1, 0, 0); + g.drawString("Wind", 135, 142); + g.setFontAlign(1, 0, 0); + g.drawString(locale.speed(w.wind)+' '+w.wrose.toUpperCase(), 225, 142); + } g.setFont("6x8", 2).setFontAlign(0, 0, 0); g.drawString(w.loc, 120, 170); diff --git a/apps/weather/lib.js b/apps/weather/lib.js index fffc523ca..597eac105 100644 --- a/apps/weather/lib.js +++ b/apps/weather/lib.js @@ -22,6 +22,20 @@ function scheduleExpiry(json) { } } +/** + * Convert numeric direction into human-readable label + * + * @param {number} deg - Direction in degrees + * @return {string|null} - Nearest compass point + */ +function compassRose(deg) { + if (typeof deg === 'undefined') return null; + while (deg<0 || deg>360) { + deg = (deg+360)%360; + } + return ['n','ne','e','se','s','sw','w','nw','n'][Math.floor((deg+22.5)/45)]; +} + function setCurrentWeather(json) { scheduleExpiry(json); exports.current = json.weather; @@ -30,6 +44,9 @@ function setCurrentWeather(json) { function update(weatherEvent) { let weather = Object.assign({}, weatherEvent); weather.time = Date.now(); + if ('wdir' in weather) { + weather.wrose = compassRose(weather.wdir); + } delete weather.t; let json = storage.readJSON('weather.json')||{}; diff --git a/apps/weather/screenshot.png b/apps/weather/screenshot.png index ce79b3b646bfebdad6c29f57779c018ce0ce457e..0cd6de46aa209adb623fb1a5c89cd448883b0b15 100644 GIT binary patch literal 4296 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 OU}l#rE>aAg?)@JQE$p2D literal 4039 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 Fe*nCRR)+up