From 219ab5979521d6103cb649604f40c267cbf23289 Mon Sep 17 00:00:00 2001 From: Carlos de Huerta Date: Fri, 16 Apr 2021 20:26:46 +0200 Subject: [PATCH 01/38] changes for a 2.1.1 version of Pi Weather Rock with Internationalization and Localization through a new file and a ui:lang property in the config file --- forecast-mock.json | 0 piweatherrock/intl.py | 44 ++++ piweatherrock/piweatherrock.lang.json | 201 ++++++++++++++++++ piweatherrock/plugin_info/__init__.py | 32 ++- .../plugin_weather_common/__init__.py | 42 ++-- .../piweatherrock.lang.json | 20 ++ .../plugin_weather_daily/__init__.py | 15 +- piweatherrock/pwr-config-upgrade | 124 +++++++++++ piweatherrock/pwr-ui | 26 +++ piweatherrock/weather.py | 17 +- requirements.txt | 1 + screenshot.jpeg | Bin 0 -> 165073 bytes setup.py | 1 + version.py | 2 +- weather-mock.json | 0 15 files changed, 489 insertions(+), 36 deletions(-) create mode 100644 forecast-mock.json create mode 100644 piweatherrock/intl.py create mode 100644 piweatherrock/piweatherrock.lang.json create mode 100644 piweatherrock/plugin_weather_common/piweatherrock.lang.json create mode 100644 piweatherrock/pwr-config-upgrade create mode 100755 piweatherrock/pwr-ui create mode 100644 screenshot.jpeg create mode 100644 weather-mock.json diff --git a/forecast-mock.json b/forecast-mock.json new file mode 100644 index 0000000..e69de29 diff --git a/piweatherrock/intl.py b/piweatherrock/intl.py new file mode 100644 index 0000000..56c0f98 --- /dev/null +++ b/piweatherrock/intl.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2021 Carlos de Huerta +# Distributed under the MIT License (https://opensource.org/licenses/MIT) + +import json +import babel + +from datetime import date, datetime, time +from babel.dates import format_date, format_datetime, format_time +from os import path + +RESOURCES_FILE = 'piweatherrock.lang.json' + +class intl: + """ + This class assists in the internationalization and localization Pi Weather Rock data + through the text stored in the RESOURCES_FILE for different languages supported by the config file. + and several methods for date and time information. + """ + + def __init__(self): + with open(path.join(path.dirname(__file__),RESOURCES_FILE), "r") as t: + self.resources = json.load(t) + + def get_weekday(self, ui_lang, date): + return format_date(date,"EEEE",locale='%s' % ui_lang).capitalize() + + def get_datetime(self, ui_lang, datetime, twelvehr): + if twelvehr is True: + return format_datetime(datetime, "EEE, MMM dd HH:mm", locale='%s' % ui_lang).title() + else: + return format_datetime(datetime, "EEE, MMM dd hh:mm", locale='%s' % ui_lang).title() + + def get_ampm(self, ui_lang, datetime): + return format_datetime(datetime, "a", locale='%s' % ui_lang) + + def get_text(self, ui_lang, text, capital = False, fallback = 'en'): + if self.resources.get(ui_lang) is None: + ui_lang = fallback + + if capital is True: + return self.resources[ui_lang][text].capitalize() + else: + return self.resources[ui_lang][text] \ No newline at end of file diff --git a/piweatherrock/piweatherrock.lang.json b/piweatherrock/piweatherrock.lang.json new file mode 100644 index 0000000..79af9fd --- /dev/null +++ b/piweatherrock/piweatherrock.lang.json @@ -0,0 +1,201 @@ +{ + "ar":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "az":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "be":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "bg":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "bn":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "bs":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "ca":{ + "feels_like": "Sensació tèrmica:", + "wind": "Vent:", + "humidity": "Humitat:", + "umbrella": "¡Agafa el paraigües!", + "no_umbrella": "Avui no agafis el paraigües", + "today": "avui", + "powered_by": "Weather rock gràcies a Dark Sky", + "tonight": "aquesta nit", + "tomorrow": "demà", + "check_at": "Part meteorològic de les", + "sunrise": "Alba: {sunrise}", + "sunset": "Posta de sol: {sunset}", + "sunrise_at": "fa de dia a {hour} hrs {minute:02d} min", + "sunset_at": "Ocàs a {hour} hrs {minute:02d} min", + "daylight": "Llum de dia: {hour} hrs {minute:02d} min" + }, + "cs":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "da":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "de":{ + "feels_like": "Fühlt sich an wie:", + "wind": "Wind:", + "humidity": "Luftfeuchtigkeit:", + "umbrella": "Schnapp dir den Regenschirm!", + "no_umbrella": "Nimm heute nicht den Regenschirm", + "today": "heute", + "powered_by": "Weather rock dank Dark Sky", + "tonight": "heute Abend", + "tomorrow":"morgen", + "check_at": "Wetterbericht der", + "sunrise": "Sonnenaufgang: {sunrise}", + "sunset": "Sonnenuntergang: {sunset}", + "sunrise_at": "Sonnenaufgang in {hour} std. {minute:02d} min.", + "sunset_at": "Sonnenuntergang in {hour} std. {minute:02d} min.", + "daylight": "Tageslicht: {hour} Std. {minute:02d} min." + }, + "el":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "en": { + "feels_like": "Feels Like:", + "wind":"Wind:", + "humidity":"Humidity:", + "umbrella":"Grab your umbrella!", + "no_umbrella":"No umbrella needed today.", + "today":"today", + "powered_by":"A weather rock powered by Dark Sky", + "tonight":"tonight", + "tomorrow":"tomorrow", + "check_at":"Weather checked at", + "sunrise":"Sunrise: {sunrise}", + "sunset":"Sunset: {sunset}", + "sunrise_at":"Sunrise in {hour} hrs {minute:02d} min", + "sunset_at":"Sunset in {hour} hrs {minute:02d} min", + "daylight":"Daylight: {hour} hrs {minute:02d} min" + }, + "eo":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "es": { + "feels_like": "Sensación térmica:", + "wind":"Viento:", + "humidity":"Humedad:", + "umbrella":"¡Coge el paragüas!", + "no_umbrella":"Hoy no cojas el paragüas", + "today":"hoy", + "powered_by":"Weather rock gracias a Dark Sky", + "tonight":"esta noche", + "tomorrow":"mañana", + "check_at":"Parte meteorológico de las", + "sunrise":"Amanecer: {sunrise}", + "sunset":"Puesta de sol: {sunset}", + "sunrise_at":"Amanece en {hour} hrs {minute:02d} min", + "sunset_at":"Ocaso en {hour} hrs {minute:02d} min", + "daylight":"Luz de día: {hour} hrs {minute:02d} min" + }, + "et":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "eu":{ + "feels_like": "Sentitzen da:", + "wind": "Haizea:", + "humidity": "Hezetasuna:", + "umbrella": "Hartu aterkia!", + "no_umbrella": "Gaur ez hartu aterkia", + "today": "gaur", + "powered_by": "Weather rock Dark Sky-ri esker", + "tonight": "gaur gauean", + "tomorrow": "bihar", + "check_at": "Eguraldiaren iragarpena", + "sunrise": "Egunsentia: {sunrise}", + "sunset": "Ilunabarra: {sunset}", + "sunrise_at": "Egunsentia {hour} hrs {minute:02d} min", + "sunset_at": "Ilunabarra {hour} hrs {minute:02d} min", + "daylight": "Eguneko argia: {hour} hrs {minute:02d} min" + }, + "fi":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "fr":{ + "feels_like": "Refroidissement éolien:", + "wind": "Vent:", + "humidity": "Humidité:", + "umbrella": "Attrape le parapluie!", + "no_umbrella": "Ne prenez pas le parapluie aujourd'hui", + "today": "aujourd'hui", + "powered_by": "Weather rock grâce à Dark Sky", + "tonight":"ce soir", + "tomorrow": "demain", + "check_at": "Bulletin météo du", + "sunrise": "Lever de soleil: {sunrise}", + "sunset": "Coucher de soleil: {sunset}", + "sunrise_at": "Lever de soleil dans {hour} hrs {minute:02d} min", + "sunset_at": "Coucher de soleil dans {hour} hrs {minute:02d} min", + "daylight": "Lumière du joir: {hour} hrs {minute:02d} min" + }, + "gl":{ + "feels_like": "Refrixeración do vento:", + "wind": "Vento:", + "moist": "Humidade:", + "umbrella": "Agarra o paraugas!", + "no_umbrella": "Non collas o paraugas hoxe", + "today": "hoxe", + "powered_by": "O tempo é rockeiro grazas a Dark Sky", + "tonight": "esta noite", + "mañá": "mañá", + "check_at": "Informe meteorolóxico do", + "sunrise": "Amanecer: {sunrise}", + "sunset": "Atardecer: {sunset}", + "sunrise_at": "Amencer en {hour} hrs {minute:02d} min", + "sunset_at": "Atardecer en {hour} hrs {minute:02d} min", + "daylight": "Luz do día: {hour} hrs {minute:02d} min" + }, + "he":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "hi":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "hr":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "hu":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "id":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "is":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "it":{ + "feels_like": "Si sente come:", + "wind": "Vento:", + "humidity": "Umidità:", + "umbrella": "Prendi l'ombrello!", + "no_umbrella": "Non prendere l'ombrello oggi", + "today": "today", + "powered_by": "Weather rock grazie a Dark Sky", + "tonight": "stasera", + "tomorrow": "domani", + "check_at": "Bollettino meteorologico del", + "sunrise": "Alba: {sunrise}", + "sunset": "Tramonto: {sunset}", + "sunrise_at": "Alba tra {hour} ore {minute:02d} min", + "sunset_at": "Tramonto tra {hour} ore {minute:02d} min", + "daylight": "Luce del giorno: {hour} ore {minute:02d} min" + }, + "ja":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "ka":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "kn":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "ko":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "kw":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "lv":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "ml":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "mr":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "nb":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "nl":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "no":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "pa":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "pl":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "pt":{ + "feels_like": "Parece:", + "wind": "Vento:", + "humidity": "Umidade:", + "umbrella": "¡Pegue o guarda-chuva!", + "no_umbrella": "Não leve o guarda-chuva hoje", + "today": "hoje", + "powered_by": "Weather rock graças ao Dark Sky", + "tonight": "esta noite", + "tomorrow": "amanhã", + "check_at": "Boletim meteorológico de", + "sunrise": "Nascer do sol: {sunrise}", + "sunset": "Pôr do sol: {sunset}", + "sunrise_at": "Nascer do sol em {hour} horas {minute:02d} min", + "sunset_at": "Pôr do sol em {hour} horas {minute:02d} min", + "daylight": "Luz do dia: {hour} horas {minute:02d} min" + }, + "ro":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "ru":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "sk":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "sl":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "sr":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "sv":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "ta":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "te":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "tet":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "tr":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "uk":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "ur":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "x-pig-latin":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "zh":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, + "zh-tw":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""} +} diff --git a/piweatherrock/plugin_info/__init__.py b/piweatherrock/plugin_info/__init__.py index 8148c29..baaaeab 100644 --- a/piweatherrock/plugin_info/__init__.py +++ b/piweatherrock/plugin_info/__init__.py @@ -7,6 +7,10 @@ import pygame import time +# local imports +from piweatherrock.intl import intl +from piweatherrock.plugin_weather_common import PluginWeatherCommon + class PluginInfo: """ @@ -30,7 +34,10 @@ def __init__(self, weather_rock): self.time_date_small_y_position = None self.sunrise_string = None self.sunset_string = None - + self.weather_common = None + self.intl = None + self.ui_lang = None + self.get_rock_values(weather_rock) def get_rock_values(self, weather_rock): @@ -46,6 +53,11 @@ def get_rock_values(self, weather_rock): self.time_date_small_y_position = weather_rock.time_date_small_y_position self.sunrise_string = weather_rock.sunrise_string self.sunset_string = weather_rock.sunset_string + self.weather_common = PluginWeatherCommon(weather_rock) + + #Initialize locale resources + self.intl = intl() + self.ui_lang = self.config["ui_lang"] def disp_info(self, weather_rock): self.get_rock_values(weather_rock) @@ -103,33 +115,33 @@ def disp_info(self, weather_rock): (tp + tx1 + 3, self.time_date_small_y_position)) self.string_print( - "A weather rock powered by Dark Sky", small_font, + self.intl.get_text(self.ui_lang,"powered_by"), small_font, self.xmax * 0.05, 3, text_color) self.string_print( - "Sunrise: %s" % self.sunrise_string, + self.intl.get_text(self.ui_lang,"sunrise").format(sunrise=self.sunrise_string), small_font, self.xmax * 0.05, 4, text_color) self.string_print( - "Sunset: %s" % self.sunset_string, + self.intl.get_text(self.ui_lang,"sunset").format(sunset=self.sunset_string), small_font, self.xmax * 0.05, 5, text_color) - text = "Daylight: %d hrs %02d min" % (day_hrs, day_mins) + text = self.intl.get_text(self.ui_lang,"daylight").format(hour=day_hrs, minute=day_mins) self.string_print(text, small_font, self.xmax * 0.05, 6, text_color) # leaving row 7 blank if in_daylight: - text = "Sunset in %d hrs %02d min" % self.stot( - delta_seconds_til_dark) + (sunset_hour, sunset_minute) = self.stot(delta_seconds_til_dark) + text = self.intl.get_text(self.ui_lang,"sunset_at").format(hour=sunset_hour, minute=sunset_minute) else: - text = "Sunrise in %d hrs %02d min" % self.stot( - seconds_til_daylight) + (sunrise_hour, sunrise_minute) = self.stot(seconds_til_daylight) + text = self.intl.get_text(self.ui_lang,"sunrise_at").format(hour=sunrise_hour, minute=sunrise_minute) self.string_print(text, small_font, self.xmax * 0.05, 8, text_color) # leaving row 9 blank - text = "Weather checked at" + text = self.intl.get_text(self.ui_lang,"check_at") self.string_print(text, small_font, self.xmax * 0.05, 10, text_color) if self.config["12hour_disp"]: diff --git a/piweatherrock/plugin_weather_common/__init__.py b/piweatherrock/plugin_weather_common/__init__.py index fa2bb6e..bf4b9b0 100644 --- a/piweatherrock/plugin_weather_common/__init__.py +++ b/piweatherrock/plugin_weather_common/__init__.py @@ -3,14 +3,18 @@ # Copyright (c) 2017 Gene Liverman # Distributed under the MIT License (https://opensource.org/licenses/MIT) -import datetime import pygame import time +import json from os import path +from datetime import datetime + +# local imports +from piweatherrock.intl import intl -UNICODE_DEGREE = u'\xb0' +UNICODE_DEGREE = u'\xb0' class PluginWeatherCommon: """ @@ -36,9 +40,11 @@ def __init__(self, weather_rock): self.time_date_small_y_position = None self.subwindow_text_height = None self.icon_size = None - + self.intl = None + self.ui_lang = None + self.get_rock_values(weather_rock) - + def get_rock_values(self, weather_rock): self.screen = weather_rock.screen self.weather = weather_rock.weather @@ -52,6 +58,10 @@ def get_rock_values(self, weather_rock): self.time_date_small_y_position = weather_rock.time_date_small_y_position self.subwindow_text_height = weather_rock.subwindow_text_height self.icon_size = weather_rock.icon_size + + #Initialize locale resources + self.intl = intl() + self.ui_lang = self.config["ui_lang"] def disp_weather_top(self, weather_rock): self.get_rock_values(weather_rock) @@ -69,7 +79,7 @@ def disp_weather_top(self, weather_rock): self.disp_current_temp(font_name, text_color) self.disp_summary() self.display_conditions_line( - 'Feels Like:', int(round(self.weather.apparentTemperature)), + self.intl.get_text(self.ui_lang,"feels_like"), int(round(self.weather.apparentTemperature)), True) try: @@ -81,18 +91,18 @@ def disp_weather_top(self, weather_rock): int(round(self.weather.windSpeed))) + \ ' ' + self.get_windspeed_abbreviation(self.config["units"]) self.display_conditions_line( - 'Wind:', wind_txt, False, 1) + self.intl.get_text(self.ui_lang,"wind"), wind_txt, False, 1) self.display_conditions_line( - 'Humidity:', str(int(round((self.weather.humidity * 100)))) + '%', + self.intl.get_text(self.ui_lang,"humidity"), str(int(round((self.weather.humidity * 100)))) + '%', False, 2) # Skipping multiplier 3 (line 4) if self.take_umbrella: - umbrella_txt = 'Grab your umbrella!' + umbrella_txt = self.intl.get_text(self.ui_lang,"umbrella") else: - umbrella_txt = 'No umbrella needed today.' + umbrella_txt = self.intl.get_text(self.ui_lang,"no_umbrella") self.disp_umbrella_info(umbrella_txt) def draw_screen_border(self, line_color, xmin, lines): @@ -138,10 +148,10 @@ def disp_time_date(self, font_name, text_color): int(self.ymax * self.time_date_small_text_height), bold=1) if self.config["12hour_disp"]: - time_string = time.strftime("%a, %b %d %I:%M", time.localtime()) - am_pm_string = time.strftime(" %p", time.localtime()) + time_string = self.intl.get_datetime(self.ui_lang, datetime.utcnow(), True) + am_pm_string = self.intl.get_ampm(self.ui_lang, datetime.utcnow()) else: - time_string = time.strftime("%a, %b %d %H:%M", time.localtime()) + time_string = self.intl.get_datetime(self.ui_lang, datetime.utcnow(), False) am_pm_string = "hr" rendered_time_string = time_date_font.render(time_string, True, @@ -269,12 +279,12 @@ def umbrella_needed(self): take_umbrella = True else: # determine if an umbrella is needed during daylight hours - curr_date = datetime.datetime.today().date() + curr_date = datetime.today().date() for hour in self.weather.hourly: - hr = datetime.datetime.fromtimestamp(hour.time) - sr = datetime.datetime.fromtimestamp( + hr = datetime.fromtimestamp(hour.time) + sr = datetime.fromtimestamp( self.weather.daily[0].sunriseTime) - ss = datetime.datetime.fromtimestamp( + ss = datetime.fromtimestamp( self.weather.daily[0].sunsetTime) rain_chance = hour.precipProbability is_today = hr.date() == curr_date diff --git a/piweatherrock/plugin_weather_common/piweatherrock.lang.json b/piweatherrock/plugin_weather_common/piweatherrock.lang.json new file mode 100644 index 0000000..05eb5db --- /dev/null +++ b/piweatherrock/plugin_weather_common/piweatherrock.lang.json @@ -0,0 +1,20 @@ +{ + "en": { + "feels_like": "Feels Like:", + "wind":"Wind:", + "humidity":"Humidity:", + "umbrella":"Grab your umbrella!", + "no_unmbrella":"No umbrella needed today.", + "today":"Today", + "powered_by":"A weather rock powered by Dark Sky" + }, + "es": { + "feels_like": "Parecen:", + "wind":"Viento:", + "humidity":"Humedad:", + "umbrella":"¡Coge el paragüas!", + "no_umbrella":"Hoy no necesitarás el paragüas.", + "today":"Hoy", + "powered_by":"Weather rock gracias a Dark Sky" + } +} diff --git a/piweatherrock/plugin_weather_daily/__init__.py b/piweatherrock/plugin_weather_daily/__init__.py index 79a1df1..7258b85 100644 --- a/piweatherrock/plugin_weather_daily/__init__.py +++ b/piweatherrock/plugin_weather_daily/__init__.py @@ -6,12 +6,14 @@ import datetime import pygame +# local imports +from piweatherrock.intl import intl from piweatherrock.plugin_weather_common import PluginWeatherCommon class PluginWeatherDaily: """ - This plugin is resposible for displaying the screen with the daily + This plugin is responsible for displaying the screen with the daily forecast. """ @@ -19,11 +21,17 @@ def __init__(self, weather_rock): self.screen = None self.weather = None self.weather_common = None + self.intl = None + self.ui_lang = None def get_rock_values(self, weather_rock): self.screen = weather_rock.screen self.weather = weather_rock.weather self.weather_common = PluginWeatherCommon(weather_rock) + + #Initialize locale resources + self.intl = intl() + self.ui_lang = self.weather_common.config["ui_lang"] def disp_daily(self, weather_rock): self.get_rock_values(weather_rock) @@ -32,7 +40,7 @@ def disp_daily(self, weather_rock): # Today today = self.weather.daily[0] - today_string = "Today" + today_string = self.intl.get_text(self.ui_lang,"today", True) multiplier = 1 self.weather_common.display_subwindow(today, today_string, multiplier) @@ -40,10 +48,9 @@ def disp_daily(self, weather_rock): for future_day in range(3): this_day = self.weather.daily[future_day + 1] this_day_no = datetime.datetime.fromtimestamp(this_day.time) - this_day_string = this_day_no.strftime("%A") multiplier += 2 self.weather_common.display_subwindow( - this_day, this_day_string, multiplier) + this_day, self.intl.get_weekday(self.ui_lang, this_day_no), multiplier) # Update the display pygame.display.update() diff --git a/piweatherrock/pwr-config-upgrade b/piweatherrock/pwr-config-upgrade new file mode 100644 index 0000000..9114be2 --- /dev/null +++ b/piweatherrock/pwr-config-upgrade @@ -0,0 +1,124 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright (c) 2020 Gene Liverman +# Distributed under the MIT License (https://opensource.org/licenses/MIT) + +############################################################################### +# Raspberry Pi Weather Display Config Page Plugin +# Original By: github user: metaMMA 2020-03-15 +############################################################################### + +import json +import os +import socket + +from argparse import ArgumentParser + +pi_ip = socket.gethostbyname(socket.gethostname() + ".local") + + +def migrate_to_json_config(config_location): + print(f"\nImporting current configuration settings.\n\n" + f"Go to http://{pi_ip}:8888 to view new configuration interface.\n") + + # cd to the folder where config.py resides + config_dir = os.path.dirname(os.path.abspath(config_location)) + os.chdir(config_dir) + + # import the old config + import config + + old_config = {} + old_config["ds_api_key"] = config.DS_API_KEY + old_config["update_freq"] = int(config.DS_CHECK_INTERVAL) + old_config["lat"] = float(config.LAT) + old_config["lon"] = float(config.LON) + old_config["units"] = config.UNITS + old_config["lang"] = config.LANG + old_config["fullscreen"] = config.FULLSCREEN + old_config["icon_offset"] = float(config.LARGE_ICON_OFFSET) + old_config["plugins"] = {} + old_config["plugins"]["daily"] = {} + old_config["plugins"]["hourly"] = {} + old_config["plugins"]["daily"]["enabled"] = True + old_config["plugins"]["hourly"]["enabled"] = True + if hasattr(config, "DAILY_PAUSE"): + old_config["plugins"]["daily"]["pause"] = int(config.DAILY_PAUSE) + else: + old_config["plugins"]["daily"]["pause"] = 60 + if hasattr(config, "HOURLY_PAUSE"): + old_config["plugins"]["hourly"]["pause"] = int(config.HOURLY_PAUSE) + else: + old_config["plugins"]["hourly"]["pause"] = 60 + if hasattr(config, "INFO_PAUSE"): + old_config["info_pause"] = int(config.INFO_PAUSE) + else: + old_config["info_pause"] = 300 + if hasattr(config, "INFO_DELAY"): + old_config["info_delay"] = int(config.INFO_DELAY) + else: + old_config["info_delay"] = 900 + os.remove("config.py") + + # get out of the git repo since its not used any more + script_dir = os.path.dirname(os.path.abspath(__file__)) + os.chdir(script_dir) + + return old_config + + +def main(): + parser = ArgumentParser( + """ + Creates or updates a configuration file. + """) + parser.add_argument( + '-c', '--config', required=True, + help='Path to your config.json file') + parser.add_argument( + '-o', '--oldconfig', required=False, + help='Path to your old config.py file') + parser.add_argument( + '-s', '--sample', required=True, + help=""" + Path to config.json-sample. + This file is included automatically when installing via pip. + You can locate it with the 'find' command like so: + find /usr/local -type f -name config.json-sample + """) + + args = parser.parse_args() + config_file = os.path.abspath(args.config) + sample_file = os.path.abspath(args.sample) + + if args.oldconfig is not None and os.path.exists(args.oldconfig): + old_config_file = os.path.abspath(args.oldconfig) + old_config = migrate_to_json_config(old_config_file) + + elif os.path.exists('/home/pi/config.py'): + old_config = migrate_to_json_config('/home/pi/config.py') + + elif os.path.exists(config_file): + with open(config_file, "r") as f: + old_config = json.load(f) + + elif os.path.exists(sample_file): + with open(sample_file, "r") as f: + old_config = json.load(f) + print(f"\nYou must configure PiWeatherRock.\n\n" + f"Go to http://{pi_ip}:8888 to configure.\n") + + with open(sample_file, "r") as f: + new_config = json.load(f) + + # Add any new config variables + for key in new_config.keys(): + if key not in old_config.keys(): + old_config[key] = new_config[key] + + with open(config_file, "w") as f: + json.dump(old_config, f) + + +if __name__ == '__main__': + main() diff --git a/piweatherrock/pwr-ui b/piweatherrock/pwr-ui new file mode 100755 index 0000000..61656c4 --- /dev/null +++ b/piweatherrock/pwr-ui @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright (c) 2020 Gene Liverman +# Distributed under the MIT License (https://opensource.org/licenses/MIT) + +import os +from argparse import ArgumentParser +from piweatherrock.runner import Runner + + +def main(): + parser = ArgumentParser( + """Runs the PiWeatherRock UI""") + parser.add_argument( + '-c', '--config', required=True, + help='Path to your config file') + + args = parser.parse_args() + config = os.path.abspath(args.config) + + runner = Runner() + runner.main(config) + + +if __name__ == '__main__': + main() diff --git a/piweatherrock/weather.py b/piweatherrock/weather.py index 587289c..2e299cb 100644 --- a/piweatherrock/weather.py +++ b/piweatherrock/weather.py @@ -19,6 +19,9 @@ import pygame import requests +# local imports +from piweatherrock.intl import intl + # globals UNICODE_DEGREE = u'\xb0' @@ -39,6 +42,10 @@ def __init__(self, config_file): with open(config_file, "r") as f: self.config = json.load(f) + #Initialize locale intl + self.intl = intl() + self.ui_lang = self.config["ui_lang"] + self.last_update_check = 0 self.weather = {} self.get_forecast() @@ -155,17 +162,17 @@ def get_forecast(self): exclude='minutely', units=self.config["units"], lang=self.config["lang"]) - + sunset_today = datetime.datetime.fromtimestamp( self.weather.daily[0].sunsetTime) if datetime.datetime.now() < sunset_today: index = 0 - sr_suffix = 'today' - ss_suffix = 'tonight' + sr_suffix = self.intl.get_text(self.ui_lang,"today") + ss_suffix = self.intl.get_text(self.ui_lang,"tonight") else: index = 1 - sr_suffix = 'tomorrow' - ss_suffix = 'tomorrow' + sr_suffix = self.intl.get_text(self.ui_lang,"tomorrow") + ss_suffix = self.intl.get_text(self.ui_lang,"tomorrow") self.sunrise = self.weather.daily[index].sunriseTime self.sunset = self.weather.daily[index].sunsetTime diff --git a/requirements.txt b/requirements.txt index cf64753..718fb31 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,5 +3,6 @@ pygame pyserial requests cherrypy +babel piweatherrock-webconfig==1.5.0 diff --git a/screenshot.jpeg b/screenshot.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..082286fc86e67b800b8c55c109a5c5f508375f3b GIT binary patch literal 165073 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

>x$ZH)uYher~}s-Q0By1_u|biAUpkQzU+cf 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 Date: Fri, 16 Apr 2021 20:33:40 +0200 Subject: [PATCH 02/38] Delete piweatherrock.lang.json --- .../piweatherrock.lang.json | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 piweatherrock/plugin_weather_common/piweatherrock.lang.json diff --git a/piweatherrock/plugin_weather_common/piweatherrock.lang.json b/piweatherrock/plugin_weather_common/piweatherrock.lang.json deleted file mode 100644 index 05eb5db..0000000 --- a/piweatherrock/plugin_weather_common/piweatherrock.lang.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "en": { - "feels_like": "Feels Like:", - "wind":"Wind:", - "humidity":"Humidity:", - "umbrella":"Grab your umbrella!", - "no_unmbrella":"No umbrella needed today.", - "today":"Today", - "powered_by":"A weather rock powered by Dark Sky" - }, - "es": { - "feels_like": "Parecen:", - "wind":"Viento:", - "humidity":"Humedad:", - "umbrella":"¡Coge el paragüas!", - "no_umbrella":"Hoy no necesitarás el paragüas.", - "today":"Hoy", - "powered_by":"Weather rock gracias a Dark Sky" - } -} From 95f4c9febfa4fd1ca0eed5c2c6c73e5df4c8fb63 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 17 Apr 2021 13:42:10 +0200 Subject: [PATCH 03/38] Delete screenshot.jpeg --- screenshot.jpeg | Bin 165073 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 screenshot.jpeg diff --git a/screenshot.jpeg b/screenshot.jpeg deleted file mode 100644 index 082286fc86e67b800b8c55c109a5c5f508375f3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165073 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

>x$ZH)uYher~}s-Q0By1_u|biAUpkQzU+cf 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 Date: Sat, 17 Apr 2021 13:42:21 +0200 Subject: [PATCH 04/38] Delete weather-mock.json --- weather-mock.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 weather-mock.json diff --git a/weather-mock.json b/weather-mock.json deleted file mode 100644 index e69de29..0000000 From 8daed5d0323529ba4c6ede625c5f7aeb4de499e7 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 17 Apr 2021 13:42:37 +0200 Subject: [PATCH 05/38] Delete forecast-mock.json --- forecast-mock.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 forecast-mock.json diff --git a/forecast-mock.json b/forecast-mock.json deleted file mode 100644 index e69de29..0000000 From ce7d494edbd165d2436c9e3f208c615fe43097b0 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 17 Apr 2021 13:43:22 +0200 Subject: [PATCH 06/38] Delete pwr-config-upgrade --- piweatherrock/pwr-config-upgrade | 124 ------------------------------- 1 file changed, 124 deletions(-) delete mode 100644 piweatherrock/pwr-config-upgrade diff --git a/piweatherrock/pwr-config-upgrade b/piweatherrock/pwr-config-upgrade deleted file mode 100644 index 9114be2..0000000 --- a/piweatherrock/pwr-config-upgrade +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# Copyright (c) 2020 Gene Liverman -# Distributed under the MIT License (https://opensource.org/licenses/MIT) - -############################################################################### -# Raspberry Pi Weather Display Config Page Plugin -# Original By: github user: metaMMA 2020-03-15 -############################################################################### - -import json -import os -import socket - -from argparse import ArgumentParser - -pi_ip = socket.gethostbyname(socket.gethostname() + ".local") - - -def migrate_to_json_config(config_location): - print(f"\nImporting current configuration settings.\n\n" - f"Go to http://{pi_ip}:8888 to view new configuration interface.\n") - - # cd to the folder where config.py resides - config_dir = os.path.dirname(os.path.abspath(config_location)) - os.chdir(config_dir) - - # import the old config - import config - - old_config = {} - old_config["ds_api_key"] = config.DS_API_KEY - old_config["update_freq"] = int(config.DS_CHECK_INTERVAL) - old_config["lat"] = float(config.LAT) - old_config["lon"] = float(config.LON) - old_config["units"] = config.UNITS - old_config["lang"] = config.LANG - old_config["fullscreen"] = config.FULLSCREEN - old_config["icon_offset"] = float(config.LARGE_ICON_OFFSET) - old_config["plugins"] = {} - old_config["plugins"]["daily"] = {} - old_config["plugins"]["hourly"] = {} - old_config["plugins"]["daily"]["enabled"] = True - old_config["plugins"]["hourly"]["enabled"] = True - if hasattr(config, "DAILY_PAUSE"): - old_config["plugins"]["daily"]["pause"] = int(config.DAILY_PAUSE) - else: - old_config["plugins"]["daily"]["pause"] = 60 - if hasattr(config, "HOURLY_PAUSE"): - old_config["plugins"]["hourly"]["pause"] = int(config.HOURLY_PAUSE) - else: - old_config["plugins"]["hourly"]["pause"] = 60 - if hasattr(config, "INFO_PAUSE"): - old_config["info_pause"] = int(config.INFO_PAUSE) - else: - old_config["info_pause"] = 300 - if hasattr(config, "INFO_DELAY"): - old_config["info_delay"] = int(config.INFO_DELAY) - else: - old_config["info_delay"] = 900 - os.remove("config.py") - - # get out of the git repo since its not used any more - script_dir = os.path.dirname(os.path.abspath(__file__)) - os.chdir(script_dir) - - return old_config - - -def main(): - parser = ArgumentParser( - """ - Creates or updates a configuration file. - """) - parser.add_argument( - '-c', '--config', required=True, - help='Path to your config.json file') - parser.add_argument( - '-o', '--oldconfig', required=False, - help='Path to your old config.py file') - parser.add_argument( - '-s', '--sample', required=True, - help=""" - Path to config.json-sample. - This file is included automatically when installing via pip. - You can locate it with the 'find' command like so: - find /usr/local -type f -name config.json-sample - """) - - args = parser.parse_args() - config_file = os.path.abspath(args.config) - sample_file = os.path.abspath(args.sample) - - if args.oldconfig is not None and os.path.exists(args.oldconfig): - old_config_file = os.path.abspath(args.oldconfig) - old_config = migrate_to_json_config(old_config_file) - - elif os.path.exists('/home/pi/config.py'): - old_config = migrate_to_json_config('/home/pi/config.py') - - elif os.path.exists(config_file): - with open(config_file, "r") as f: - old_config = json.load(f) - - elif os.path.exists(sample_file): - with open(sample_file, "r") as f: - old_config = json.load(f) - print(f"\nYou must configure PiWeatherRock.\n\n" - f"Go to http://{pi_ip}:8888 to configure.\n") - - with open(sample_file, "r") as f: - new_config = json.load(f) - - # Add any new config variables - for key in new_config.keys(): - if key not in old_config.keys(): - old_config[key] = new_config[key] - - with open(config_file, "w") as f: - json.dump(old_config, f) - - -if __name__ == '__main__': - main() From 6105dd5b145ec839f81e43120fcc73cefa4d5b7c Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 17 Apr 2021 13:43:28 +0200 Subject: [PATCH 07/38] Delete pwr-ui --- piweatherrock/pwr-ui | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100755 piweatherrock/pwr-ui diff --git a/piweatherrock/pwr-ui b/piweatherrock/pwr-ui deleted file mode 100755 index 61656c4..0000000 --- a/piweatherrock/pwr-ui +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# Copyright (c) 2020 Gene Liverman -# Distributed under the MIT License (https://opensource.org/licenses/MIT) - -import os -from argparse import ArgumentParser -from piweatherrock.runner import Runner - - -def main(): - parser = ArgumentParser( - """Runs the PiWeatherRock UI""") - parser.add_argument( - '-c', '--config', required=True, - help='Path to your config file') - - args = parser.parse_args() - config = os.path.abspath(args.config) - - runner = Runner() - runner.main(config) - - -if __name__ == '__main__': - main() From 7af61d5390dd072acd1ec0847bf528697800c9ec Mon Sep 17 00:00:00 2001 From: Carlos de Huerta Date: Sat, 17 Apr 2021 18:01:52 +0200 Subject: [PATCH 08/38] version 2.2.1 with intl and local with sample for es, eu, gl, en, it, pt, de, fr, ca --- forecast-mock.json | 0 piweatherrock/config.json-sample | 1 + piweatherrock/{intl.py => intl/__init__.py} | 25 ++- piweatherrock/intl/data/piweatherrock.ca.json | 19 +++ piweatherrock/intl/data/piweatherrock.de.json | 19 +++ piweatherrock/intl/data/piweatherrock.en.json | 19 +++ piweatherrock/intl/data/piweatherrock.es.json | 19 +++ piweatherrock/intl/data/piweatherrock.eu.json | 19 +++ piweatherrock/intl/data/piweatherrock.fr.json | 19 +++ piweatherrock/intl/data/piweatherrock.gl.json | 19 +++ piweatherrock/intl/data/piweatherrock.it.json | 19 +++ .../{ => intl/data}/piweatherrock.lang.json | 153 ------------------ piweatherrock/intl/data/piweatherrock.pt.json | 19 +++ piweatherrock/plugin_info/__init__.py | 14 +- .../plugin_weather_common/__init__.py | 15 +- .../plugin_weather_daily/__init__.py | 2 +- piweatherrock/pwr-config-upgrade | 124 -------------- piweatherrock/pwr-ui | 26 --- requirements.txt | 1 + screenshot.jpeg | Bin 165073 -> 0 bytes setup.py | 2 +- version.py | 2 +- weather-mock.json | 0 23 files changed, 204 insertions(+), 332 deletions(-) delete mode 100644 forecast-mock.json rename piweatherrock/{intl.py => intl/__init__.py} (62%) create mode 100644 piweatherrock/intl/data/piweatherrock.ca.json create mode 100644 piweatherrock/intl/data/piweatherrock.de.json create mode 100644 piweatherrock/intl/data/piweatherrock.en.json create mode 100644 piweatherrock/intl/data/piweatherrock.es.json create mode 100644 piweatherrock/intl/data/piweatherrock.eu.json create mode 100644 piweatherrock/intl/data/piweatherrock.fr.json create mode 100644 piweatherrock/intl/data/piweatherrock.gl.json create mode 100644 piweatherrock/intl/data/piweatherrock.it.json rename piweatherrock/{ => intl/data}/piweatherrock.lang.json (66%) create mode 100644 piweatherrock/intl/data/piweatherrock.pt.json delete mode 100644 piweatherrock/pwr-config-upgrade delete mode 100755 piweatherrock/pwr-ui delete mode 100644 screenshot.jpeg delete mode 100644 weather-mock.json diff --git a/forecast-mock.json b/forecast-mock.json deleted file mode 100644 index e69de29..0000000 diff --git a/piweatherrock/config.json-sample b/piweatherrock/config.json-sample index 4bf6d63..468548e 100644 --- a/piweatherrock/config.json-sample +++ b/piweatherrock/config.json-sample @@ -5,6 +5,7 @@ "lon": 0.246810, "units": "us", "lang": "en", + "ui_lang": "en", "fullscreen": true, "icon_offset": -23.5, "update_freq": 300, diff --git a/piweatherrock/intl.py b/piweatherrock/intl/__init__.py similarity index 62% rename from piweatherrock/intl.py rename to piweatherrock/intl/__init__.py index 56c0f98..6948b72 100644 --- a/piweatherrock/intl.py +++ b/piweatherrock/intl/__init__.py @@ -4,23 +4,22 @@ import json import babel +import i18n from datetime import date, datetime, time from babel.dates import format_date, format_datetime, format_time from os import path -RESOURCES_FILE = 'piweatherrock.lang.json' - class intl: """ This class assists in the internationalization and localization Pi Weather Rock data - through the text stored in the RESOURCES_FILE for different languages supported by the config file. - and several methods for date and time information. + through the use of python i18n and Babel. """ def __init__(self): - with open(path.join(path.dirname(__file__),RESOURCES_FILE), "r") as t: - self.resources = json.load(t) + i18n.set('file_format', 'json') + i18n.set('fallback', 'en') + i18n.load_path.append(path.join(path.dirname(__file__),'data')) def get_weekday(self, ui_lang, date): return format_date(date,"EEEE",locale='%s' % ui_lang).capitalize() @@ -34,11 +33,11 @@ def get_datetime(self, ui_lang, datetime, twelvehr): def get_ampm(self, ui_lang, datetime): return format_datetime(datetime, "a", locale='%s' % ui_lang) - def get_text(self, ui_lang, text, capital = False, fallback = 'en'): - if self.resources.get(ui_lang) is None: - ui_lang = fallback - - if capital is True: - return self.resources[ui_lang][text].capitalize() + def get_text(self, ui_lang, text, params = None): + i18n.set('locale', ui_lang) + label = 'piweatherrock.' + text + + if params is None: + return i18n.t(label) else: - return self.resources[ui_lang][text] \ No newline at end of file + return i18n.t(label, **params) \ No newline at end of file diff --git a/piweatherrock/intl/data/piweatherrock.ca.json b/piweatherrock/intl/data/piweatherrock.ca.json new file mode 100644 index 0000000..f3b7255 --- /dev/null +++ b/piweatherrock/intl/data/piweatherrock.ca.json @@ -0,0 +1,19 @@ +{ + "ca":{ + "feels_like": "Sensació tèrmica:", + "wind": "Vent:", + "humidity": "Humitat:", + "umbrella": "¡Agafa el paraigües!", + "no_umbrella": "Avui no agafis el paraigües", + "today": "avui", + "powered_by": "Weather rock gràcies a Dark Sky", + "tonight": "aquesta nit", + "tomorrow": "demà", + "check_at": "Part meteorològic de les", + "sunrise": "Alba: %{sunrise}", + "sunset": "Posta de sol: %{sunset}", + "sunrise_at": "fa de dia a %{hour} hrs %{minute} min", + "sunset_at": "Ocàs a %{hour} hrs %{minute} min", + "daylight": "Llum de dia: %{hour} hrs %{minute} min" + } +} diff --git a/piweatherrock/intl/data/piweatherrock.de.json b/piweatherrock/intl/data/piweatherrock.de.json new file mode 100644 index 0000000..adfc911 --- /dev/null +++ b/piweatherrock/intl/data/piweatherrock.de.json @@ -0,0 +1,19 @@ +{ + "de":{ + "feels_like": "Fühlt sich an wie:", + "wind": "Wind:", + "humidity": "Luftfeuchtigkeit:", + "umbrella": "Schnapp dir den Regenschirm!", + "no_umbrella": "Nimm heute nicht den Regenschirm", + "today": "heute", + "powered_by": "Weather rock dank Dark Sky", + "tonight": "heute Abend", + "tomorrow":"morgen", + "check_at": "Wetterbericht der", + "sunrise": "Sonnenaufgang: %{sunrise}", + "sunset": "Sonnenuntergang: %{sunset}", + "sunrise_at": "Sonnenaufgang in %{hour} std. %{minute} min.", + "sunset_at": "Sonnenuntergang in %{hour} std. %{minute} min.", + "daylight": "Tageslicht: %{hour} Std. %{minute} min." + } +} diff --git a/piweatherrock/intl/data/piweatherrock.en.json b/piweatherrock/intl/data/piweatherrock.en.json new file mode 100644 index 0000000..54de593 --- /dev/null +++ b/piweatherrock/intl/data/piweatherrock.en.json @@ -0,0 +1,19 @@ +{ + "en": { + "feels_like": "Feels Like:", + "wind":"Wind:", + "humidity":"Humidity:", + "umbrella":"Grab your umbrella!", + "no_umbrella":"No umbrella needed today.", + "today":"today", + "powered_by":"A weather rock powered by Dark Sky", + "tonight":"tonight", + "tomorrow":"tomorrow", + "check_at":"Weather checked at", + "sunrise":"Sunrise: %{sunrise}", + "sunset":"Sunset: %{sunset}", + "sunrise_at":"Sunrise in %{hour} hrs %{minute} min", + "sunset_at":"Sunset in %{hour} hrs %{minute} min", + "daylight":"Daylight: %{hour} hrs %{minute} min" + } +} diff --git a/piweatherrock/intl/data/piweatherrock.es.json b/piweatherrock/intl/data/piweatherrock.es.json new file mode 100644 index 0000000..fabc92f --- /dev/null +++ b/piweatherrock/intl/data/piweatherrock.es.json @@ -0,0 +1,19 @@ +{ + "es": { + "feels_like": "Sensación térmica:", + "wind":"Viento:", + "humidity":"Humedad:", + "umbrella":"¡Coge el paragüas!", + "no_umbrella":"Hoy no cojas el paragüas", + "today":"hoy", + "powered_by":"Weather rock gracias a Dark Sky", + "tonight":"esta noche", + "tomorrow":"mañana", + "check_at":"Parte meteorológico de las", + "sunrise":"Amanecer: %{sunrise}", + "sunset":"Puesta de sol: %{sunset}", + "sunrise_at":"Amanece en %{hour} hrs %{minute} min", + "sunset_at":"Ocaso en %{hour} hrs %{minute} min", + "daylight":"Luz de día: %{hour} hrs %{minute} min" + } +} diff --git a/piweatherrock/intl/data/piweatherrock.eu.json b/piweatherrock/intl/data/piweatherrock.eu.json new file mode 100644 index 0000000..263f6da --- /dev/null +++ b/piweatherrock/intl/data/piweatherrock.eu.json @@ -0,0 +1,19 @@ +{ + "eu":{ + "feels_like": "Sentitzen da:", + "wind": "Haizea:", + "humidity": "Hezetasuna:", + "umbrella": "Hartu aterkia!", + "no_umbrella": "Gaur ez hartu aterkia", + "today": "gaur", + "powered_by": "Weather rock Dark Sky-ri esker", + "tonight": "gaur gauean", + "tomorrow": "bihar", + "check_at": "Eguraldiaren iragarpena", + "sunrise": "Egunsentia: %{sunrise}", + "sunset": "Ilunabarra: %{sunset}", + "sunrise_at": "Egunsentia %{hour} hrs %{minute} min", + "sunset_at": "Ilunabarra %{hour} hrs %{minute} min", + "daylight": "Eguneko argia: %{hour} hrs %{minute} min" + } +} diff --git a/piweatherrock/intl/data/piweatherrock.fr.json b/piweatherrock/intl/data/piweatherrock.fr.json new file mode 100644 index 0000000..0a5759b --- /dev/null +++ b/piweatherrock/intl/data/piweatherrock.fr.json @@ -0,0 +1,19 @@ +{ + "fr":{ + "feels_like": "Refroidissement éolien:", + "wind": "Vent:", + "humidity": "Humidité:", + "umbrella": "Attrape le parapluie!", + "no_umbrella": "Ne prenez pas le parapluie aujourd'hui", + "today": "aujourd'hui", + "powered_by": "Weather rock grâce à Dark Sky", + "tonight":"ce soir", + "tomorrow": "demain", + "check_at": "Bulletin météo du", + "sunrise": "Lever de soleil: %{sunrise}", + "sunset": "Coucher de soleil: %{sunset}", + "sunrise_at": "Lever de soleil dans %{hour} hrs %{minute} min", + "sunset_at": "Coucher de soleil dans %{hour} hrs %{minute} min", + "daylight": "Lumière du joir: %{hour} hrs %{minute} min" + } +} diff --git a/piweatherrock/intl/data/piweatherrock.gl.json b/piweatherrock/intl/data/piweatherrock.gl.json new file mode 100644 index 0000000..a77d23b --- /dev/null +++ b/piweatherrock/intl/data/piweatherrock.gl.json @@ -0,0 +1,19 @@ +{ + "gl":{ + "feels_like": "Refrixeración do vento:", + "wind": "Vento:", + "moist": "Humidade:", + "umbrella": "Agarra o paraugas!", + "no_umbrella": "Non collas o paraugas hoxe", + "today": "hoxe", + "powered_by": "O tempo é rockeiro grazas a Dark Sky", + "tonight": "esta noite", + "mañá": "mañá", + "check_at": "Informe meteorolóxico do", + "sunrise": "Amanecer: %{sunrise}", + "sunset": "Atardecer: %{sunset}", + "sunrise_at": "Amencer en %{hour} hrs %{minute} min", + "sunset_at": "Atardecer en %{hour} hrs %{minute} min", + "daylight": "Luz do día: %{hour} hrs %{minute} min" + } +} diff --git a/piweatherrock/intl/data/piweatherrock.it.json b/piweatherrock/intl/data/piweatherrock.it.json new file mode 100644 index 0000000..7ab1532 --- /dev/null +++ b/piweatherrock/intl/data/piweatherrock.it.json @@ -0,0 +1,19 @@ +{ + "it":{ + "feels_like": "Si sente come:", + "wind": "Vento:", + "humidity": "Umidità:", + "umbrella": "Prendi l'ombrello!", + "no_umbrella": "Non prendere l'ombrello oggi", + "today": "today", + "powered_by": "Weather rock grazie a Dark Sky", + "tonight": "stasera", + "tomorrow": "domani", + "check_at": "Bollettino meteorologico del", + "sunrise": "Alba: %{sunrise}", + "sunset": "Tramonto: %{sunset}", + "sunrise_at": "Alba tra %{hour} ore %{minute} min", + "sunset_at": "Tramonto tra %{hour} ore %{minute} min", + "daylight": "Luce del giorno: %{hour} ore %{minute} min" + } +} diff --git a/piweatherrock/piweatherrock.lang.json b/piweatherrock/intl/data/piweatherrock.lang.json similarity index 66% rename from piweatherrock/piweatherrock.lang.json rename to piweatherrock/intl/data/piweatherrock.lang.json index 79af9fd..d8c59ae 100644 --- a/piweatherrock/piweatherrock.lang.json +++ b/piweatherrock/intl/data/piweatherrock.lang.json @@ -5,154 +5,18 @@ "bg":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "bn":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "bs":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, - "ca":{ - "feels_like": "Sensació tèrmica:", - "wind": "Vent:", - "humidity": "Humitat:", - "umbrella": "¡Agafa el paraigües!", - "no_umbrella": "Avui no agafis el paraigües", - "today": "avui", - "powered_by": "Weather rock gràcies a Dark Sky", - "tonight": "aquesta nit", - "tomorrow": "demà", - "check_at": "Part meteorològic de les", - "sunrise": "Alba: {sunrise}", - "sunset": "Posta de sol: {sunset}", - "sunrise_at": "fa de dia a {hour} hrs {minute:02d} min", - "sunset_at": "Ocàs a {hour} hrs {minute:02d} min", - "daylight": "Llum de dia: {hour} hrs {minute:02d} min" - }, "cs":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "da":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, - "de":{ - "feels_like": "Fühlt sich an wie:", - "wind": "Wind:", - "humidity": "Luftfeuchtigkeit:", - "umbrella": "Schnapp dir den Regenschirm!", - "no_umbrella": "Nimm heute nicht den Regenschirm", - "today": "heute", - "powered_by": "Weather rock dank Dark Sky", - "tonight": "heute Abend", - "tomorrow":"morgen", - "check_at": "Wetterbericht der", - "sunrise": "Sonnenaufgang: {sunrise}", - "sunset": "Sonnenuntergang: {sunset}", - "sunrise_at": "Sonnenaufgang in {hour} std. {minute:02d} min.", - "sunset_at": "Sonnenuntergang in {hour} std. {minute:02d} min.", - "daylight": "Tageslicht: {hour} Std. {minute:02d} min." - }, "el":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, - "en": { - "feels_like": "Feels Like:", - "wind":"Wind:", - "humidity":"Humidity:", - "umbrella":"Grab your umbrella!", - "no_umbrella":"No umbrella needed today.", - "today":"today", - "powered_by":"A weather rock powered by Dark Sky", - "tonight":"tonight", - "tomorrow":"tomorrow", - "check_at":"Weather checked at", - "sunrise":"Sunrise: {sunrise}", - "sunset":"Sunset: {sunset}", - "sunrise_at":"Sunrise in {hour} hrs {minute:02d} min", - "sunset_at":"Sunset in {hour} hrs {minute:02d} min", - "daylight":"Daylight: {hour} hrs {minute:02d} min" - }, "eo":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, - "es": { - "feels_like": "Sensación térmica:", - "wind":"Viento:", - "humidity":"Humedad:", - "umbrella":"¡Coge el paragüas!", - "no_umbrella":"Hoy no cojas el paragüas", - "today":"hoy", - "powered_by":"Weather rock gracias a Dark Sky", - "tonight":"esta noche", - "tomorrow":"mañana", - "check_at":"Parte meteorológico de las", - "sunrise":"Amanecer: {sunrise}", - "sunset":"Puesta de sol: {sunset}", - "sunrise_at":"Amanece en {hour} hrs {minute:02d} min", - "sunset_at":"Ocaso en {hour} hrs {minute:02d} min", - "daylight":"Luz de día: {hour} hrs {minute:02d} min" - }, "et":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, - "eu":{ - "feels_like": "Sentitzen da:", - "wind": "Haizea:", - "humidity": "Hezetasuna:", - "umbrella": "Hartu aterkia!", - "no_umbrella": "Gaur ez hartu aterkia", - "today": "gaur", - "powered_by": "Weather rock Dark Sky-ri esker", - "tonight": "gaur gauean", - "tomorrow": "bihar", - "check_at": "Eguraldiaren iragarpena", - "sunrise": "Egunsentia: {sunrise}", - "sunset": "Ilunabarra: {sunset}", - "sunrise_at": "Egunsentia {hour} hrs {minute:02d} min", - "sunset_at": "Ilunabarra {hour} hrs {minute:02d} min", - "daylight": "Eguneko argia: {hour} hrs {minute:02d} min" - }, "fi":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, - "fr":{ - "feels_like": "Refroidissement éolien:", - "wind": "Vent:", - "humidity": "Humidité:", - "umbrella": "Attrape le parapluie!", - "no_umbrella": "Ne prenez pas le parapluie aujourd'hui", - "today": "aujourd'hui", - "powered_by": "Weather rock grâce à Dark Sky", - "tonight":"ce soir", - "tomorrow": "demain", - "check_at": "Bulletin météo du", - "sunrise": "Lever de soleil: {sunrise}", - "sunset": "Coucher de soleil: {sunset}", - "sunrise_at": "Lever de soleil dans {hour} hrs {minute:02d} min", - "sunset_at": "Coucher de soleil dans {hour} hrs {minute:02d} min", - "daylight": "Lumière du joir: {hour} hrs {minute:02d} min" - }, - "gl":{ - "feels_like": "Refrixeración do vento:", - "wind": "Vento:", - "moist": "Humidade:", - "umbrella": "Agarra o paraugas!", - "no_umbrella": "Non collas o paraugas hoxe", - "today": "hoxe", - "powered_by": "O tempo é rockeiro grazas a Dark Sky", - "tonight": "esta noite", - "mañá": "mañá", - "check_at": "Informe meteorolóxico do", - "sunrise": "Amanecer: {sunrise}", - "sunset": "Atardecer: {sunset}", - "sunrise_at": "Amencer en {hour} hrs {minute:02d} min", - "sunset_at": "Atardecer en {hour} hrs {minute:02d} min", - "daylight": "Luz do día: {hour} hrs {minute:02d} min" - }, "he":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "hi":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "hr":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "hu":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "id":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "is":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, - "it":{ - "feels_like": "Si sente come:", - "wind": "Vento:", - "humidity": "Umidità:", - "umbrella": "Prendi l'ombrello!", - "no_umbrella": "Non prendere l'ombrello oggi", - "today": "today", - "powered_by": "Weather rock grazie a Dark Sky", - "tonight": "stasera", - "tomorrow": "domani", - "check_at": "Bollettino meteorologico del", - "sunrise": "Alba: {sunrise}", - "sunset": "Tramonto: {sunset}", - "sunrise_at": "Alba tra {hour} ore {minute:02d} min", - "sunset_at": "Tramonto tra {hour} ore {minute:02d} min", - "daylight": "Luce del giorno: {hour} ore {minute:02d} min" - }, "ja":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "ka":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "kn":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, @@ -166,23 +30,6 @@ "no":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "pa":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "pl":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, - "pt":{ - "feels_like": "Parece:", - "wind": "Vento:", - "humidity": "Umidade:", - "umbrella": "¡Pegue o guarda-chuva!", - "no_umbrella": "Não leve o guarda-chuva hoje", - "today": "hoje", - "powered_by": "Weather rock graças ao Dark Sky", - "tonight": "esta noite", - "tomorrow": "amanhã", - "check_at": "Boletim meteorológico de", - "sunrise": "Nascer do sol: {sunrise}", - "sunset": "Pôr do sol: {sunset}", - "sunrise_at": "Nascer do sol em {hour} horas {minute:02d} min", - "sunset_at": "Pôr do sol em {hour} horas {minute:02d} min", - "daylight": "Luz do dia: {hour} horas {minute:02d} min" - }, "ro":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "ru":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, "sk":{"feels_like": "","wind": "","humidity": "","umbrella": "","no_umbrella": "","today": "","powered_by": "","tonight": "","tomorrow": "","check_at": "","sunrise": "","sunset": "","sunrise_at": "","sunset_at": "","daylight": ""}, diff --git a/piweatherrock/intl/data/piweatherrock.pt.json b/piweatherrock/intl/data/piweatherrock.pt.json new file mode 100644 index 0000000..0259e87 --- /dev/null +++ b/piweatherrock/intl/data/piweatherrock.pt.json @@ -0,0 +1,19 @@ +{ + "pt":{ + "feels_like": "Parece:", + "wind": "Vento:", + "humidity": "Umidade:", + "umbrella": "¡Pegue o guarda-chuva!", + "no_umbrella": "Não leve o guarda-chuva hoje", + "today": "hoje", + "powered_by": "Weather rock graças ao Dark Sky", + "tonight": "esta noite", + "tomorrow": "amanhã", + "check_at": "Boletim meteorológico de", + "sunrise": "Nascer do sol: %{sunrise}", + "sunset": "Pôr do sol: %{sunset}", + "sunrise_at": "Nascer do sol em %{hour} horas %{minute} min", + "sunset_at": "Pôr do sol em %{hour} horas %{minute} min", + "daylight": "Luz do dia: %{hour} horas %{minute} min" + } +} diff --git a/piweatherrock/plugin_info/__init__.py b/piweatherrock/plugin_info/__init__.py index baaaeab..c1d0018 100644 --- a/piweatherrock/plugin_info/__init__.py +++ b/piweatherrock/plugin_info/__init__.py @@ -119,24 +119,24 @@ def disp_info(self, weather_rock): self.xmax * 0.05, 3, text_color) self.string_print( - self.intl.get_text(self.ui_lang,"sunrise").format(sunrise=self.sunrise_string), + self.intl.get_text(self.ui_lang,"sunrise", {'sunrise':self.sunrise_string}), small_font, self.xmax * 0.05, 4, text_color) self.string_print( - self.intl.get_text(self.ui_lang,"sunset").format(sunset=self.sunset_string), + self.intl.get_text(self.ui_lang,"sunset", {'sunset':self.sunset_string}), small_font, self.xmax * 0.05, 5, text_color) - text = self.intl.get_text(self.ui_lang,"daylight").format(hour=day_hrs, minute=day_mins) + text = self.intl.get_text(self.ui_lang,"daylight",{'hour':day_hrs,'minute':day_mins}) self.string_print(text, small_font, self.xmax * 0.05, 6, text_color) # leaving row 7 blank if in_daylight: (sunset_hour, sunset_minute) = self.stot(delta_seconds_til_dark) - text = self.intl.get_text(self.ui_lang,"sunset_at").format(hour=sunset_hour, minute=sunset_minute) + text = self.intl.get_text(self.ui_lang,"sunset_at",{'hour':sunset_hour,'minute':sunset_minute}) else: (sunrise_hour, sunrise_minute) = self.stot(seconds_til_daylight) - text = self.intl.get_text(self.ui_lang,"sunrise_at").format(hour=sunrise_hour, minute=sunrise_minute) + text = self.intl.get_text(self.ui_lang,"sunrise_at",{'hour':sunrise_hour,'minute':sunrise_minute}) self.string_print(text, small_font, self.xmax * 0.05, 8, text_color) # leaving row 9 blank @@ -145,11 +145,11 @@ def disp_info(self, weather_rock): self.string_print(text, small_font, self.xmax * 0.05, 10, text_color) if self.config["12hour_disp"]: - text = " %s" % time.strftime( + text = "%s" % time.strftime( "%I:%M:%S %p %Z on %a. %d %b %Y ", time.localtime(self.last_update_check)) else: - text = " %s" % time.strftime( + text = "%s" % time.strftime( "%H:%M:%S %Z on %a. %d %b %Y ", time.localtime(self.last_update_check)) diff --git a/piweatherrock/plugin_weather_common/__init__.py b/piweatherrock/plugin_weather_common/__init__.py index bf4b9b0..28b3f1f 100644 --- a/piweatherrock/plugin_weather_common/__init__.py +++ b/piweatherrock/plugin_weather_common/__init__.py @@ -229,26 +229,29 @@ def display_conditions_line(self, label, cond, is_temp, multiplier=None): self.screen.blit( txt, (self.xmax * x_start_position, self.ymax * y_start)) + + # position the information for the second column based on the length of the labels + second_column_x_start_position = txt.get_rect().width txt = conditions_font.render(str(cond), True, text_color) - self.screen.blit(txt, (self.xmax * second_column_x_start_position, + self.screen.blit(txt, (self.xmax * x_start_position + second_column_x_start_position * 1.01, self.ymax * y_start)) if is_temp: - txt_x = txt.get_size()[0] + txt_x = txt.get_rect().width degree_font = pygame.font.SysFont( font_name, int(self.ymax * degree_symbol_height), bold=1) degree_txt = degree_font.render(UNICODE_DEGREE, True, text_color) self.screen.blit(degree_txt, ( - self.xmax * second_column_x_start_position + txt_x * 1.01, + self.xmax * x_start_position + second_column_x_start_position + txt_x * 1.2, self.ymax * (y_start + degree_symbol_y_offset))) degree_letter = conditions_font.render( self.get_temperature_letter(self.config["units"]), True, text_color) - degree_letter_x = degree_letter.get_size()[0] + degree_letter_x = degree_letter.get_rect().width self.screen.blit(degree_letter, ( - self.xmax * second_column_x_start_position + - txt_x + degree_letter_x * 1.01, + self.xmax * x_start_position + second_column_x_start_position + + txt_x + degree_letter_x, self.ymax * (y_start + degree_symbol_y_offset))) def deg_to_compass(self, degrees): diff --git a/piweatherrock/plugin_weather_daily/__init__.py b/piweatherrock/plugin_weather_daily/__init__.py index 7258b85..a5fefda 100644 --- a/piweatherrock/plugin_weather_daily/__init__.py +++ b/piweatherrock/plugin_weather_daily/__init__.py @@ -40,7 +40,7 @@ def disp_daily(self, weather_rock): # Today today = self.weather.daily[0] - today_string = self.intl.get_text(self.ui_lang,"today", True) + today_string = self.intl.get_text(self.ui_lang,"today").capitalize() multiplier = 1 self.weather_common.display_subwindow(today, today_string, multiplier) diff --git a/piweatherrock/pwr-config-upgrade b/piweatherrock/pwr-config-upgrade deleted file mode 100644 index 9114be2..0000000 --- a/piweatherrock/pwr-config-upgrade +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# Copyright (c) 2020 Gene Liverman -# Distributed under the MIT License (https://opensource.org/licenses/MIT) - -############################################################################### -# Raspberry Pi Weather Display Config Page Plugin -# Original By: github user: metaMMA 2020-03-15 -############################################################################### - -import json -import os -import socket - -from argparse import ArgumentParser - -pi_ip = socket.gethostbyname(socket.gethostname() + ".local") - - -def migrate_to_json_config(config_location): - print(f"\nImporting current configuration settings.\n\n" - f"Go to http://{pi_ip}:8888 to view new configuration interface.\n") - - # cd to the folder where config.py resides - config_dir = os.path.dirname(os.path.abspath(config_location)) - os.chdir(config_dir) - - # import the old config - import config - - old_config = {} - old_config["ds_api_key"] = config.DS_API_KEY - old_config["update_freq"] = int(config.DS_CHECK_INTERVAL) - old_config["lat"] = float(config.LAT) - old_config["lon"] = float(config.LON) - old_config["units"] = config.UNITS - old_config["lang"] = config.LANG - old_config["fullscreen"] = config.FULLSCREEN - old_config["icon_offset"] = float(config.LARGE_ICON_OFFSET) - old_config["plugins"] = {} - old_config["plugins"]["daily"] = {} - old_config["plugins"]["hourly"] = {} - old_config["plugins"]["daily"]["enabled"] = True - old_config["plugins"]["hourly"]["enabled"] = True - if hasattr(config, "DAILY_PAUSE"): - old_config["plugins"]["daily"]["pause"] = int(config.DAILY_PAUSE) - else: - old_config["plugins"]["daily"]["pause"] = 60 - if hasattr(config, "HOURLY_PAUSE"): - old_config["plugins"]["hourly"]["pause"] = int(config.HOURLY_PAUSE) - else: - old_config["plugins"]["hourly"]["pause"] = 60 - if hasattr(config, "INFO_PAUSE"): - old_config["info_pause"] = int(config.INFO_PAUSE) - else: - old_config["info_pause"] = 300 - if hasattr(config, "INFO_DELAY"): - old_config["info_delay"] = int(config.INFO_DELAY) - else: - old_config["info_delay"] = 900 - os.remove("config.py") - - # get out of the git repo since its not used any more - script_dir = os.path.dirname(os.path.abspath(__file__)) - os.chdir(script_dir) - - return old_config - - -def main(): - parser = ArgumentParser( - """ - Creates or updates a configuration file. - """) - parser.add_argument( - '-c', '--config', required=True, - help='Path to your config.json file') - parser.add_argument( - '-o', '--oldconfig', required=False, - help='Path to your old config.py file') - parser.add_argument( - '-s', '--sample', required=True, - help=""" - Path to config.json-sample. - This file is included automatically when installing via pip. - You can locate it with the 'find' command like so: - find /usr/local -type f -name config.json-sample - """) - - args = parser.parse_args() - config_file = os.path.abspath(args.config) - sample_file = os.path.abspath(args.sample) - - if args.oldconfig is not None and os.path.exists(args.oldconfig): - old_config_file = os.path.abspath(args.oldconfig) - old_config = migrate_to_json_config(old_config_file) - - elif os.path.exists('/home/pi/config.py'): - old_config = migrate_to_json_config('/home/pi/config.py') - - elif os.path.exists(config_file): - with open(config_file, "r") as f: - old_config = json.load(f) - - elif os.path.exists(sample_file): - with open(sample_file, "r") as f: - old_config = json.load(f) - print(f"\nYou must configure PiWeatherRock.\n\n" - f"Go to http://{pi_ip}:8888 to configure.\n") - - with open(sample_file, "r") as f: - new_config = json.load(f) - - # Add any new config variables - for key in new_config.keys(): - if key not in old_config.keys(): - old_config[key] = new_config[key] - - with open(config_file, "w") as f: - json.dump(old_config, f) - - -if __name__ == '__main__': - main() diff --git a/piweatherrock/pwr-ui b/piweatherrock/pwr-ui deleted file mode 100755 index 61656c4..0000000 --- a/piweatherrock/pwr-ui +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# Copyright (c) 2020 Gene Liverman -# Distributed under the MIT License (https://opensource.org/licenses/MIT) - -import os -from argparse import ArgumentParser -from piweatherrock.runner import Runner - - -def main(): - parser = ArgumentParser( - """Runs the PiWeatherRock UI""") - parser.add_argument( - '-c', '--config', required=True, - help='Path to your config file') - - args = parser.parse_args() - config = os.path.abspath(args.config) - - runner = Runner() - runner.main(config) - - -if __name__ == '__main__': - main() diff --git a/requirements.txt b/requirements.txt index 718fb31..8ed4a3d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,5 +4,6 @@ pyserial requests cherrypy babel +i18n piweatherrock-webconfig==1.5.0 diff --git a/screenshot.jpeg b/screenshot.jpeg deleted file mode 100644 index 082286fc86e67b800b8c55c109a5c5f508375f3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165073 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

>x$ZH)uYher~}s-Q0By1_u|biAUpkQzU+cf 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 Date: Sat, 17 Apr 2021 18:42:06 +0200 Subject: [PATCH 09/38] fix requirements python-i18n --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 8ed4a3d..4bd1cdf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,6 @@ pyserial requests cherrypy babel -i18n +python-i18n piweatherrock-webconfig==1.5.0 From 16020b93fdc03fc8e91b676de89db9e4b27e4fda Mon Sep 17 00:00:00 2001 From: Carlos de Huerta Date: Sat, 17 Apr 2021 18:53:14 +0200 Subject: [PATCH 10/38] typo es lang --- piweatherrock/intl/data/piweatherrock.es.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/piweatherrock/intl/data/piweatherrock.es.json b/piweatherrock/intl/data/piweatherrock.es.json index fabc92f..0eac6bd 100644 --- a/piweatherrock/intl/data/piweatherrock.es.json +++ b/piweatherrock/intl/data/piweatherrock.es.json @@ -3,8 +3,8 @@ "feels_like": "Sensación térmica:", "wind":"Viento:", "humidity":"Humedad:", - "umbrella":"¡Coge el paragüas!", - "no_umbrella":"Hoy no cojas el paragüas", + "umbrella":"¡Coge el paraguas!", + "no_umbrella":"Hoy no cojas el paraguas", "today":"hoy", "powered_by":"Weather rock gracias a Dark Sky", "tonight":"esta noche", From ae51ac2f57968cb09f21cef82af89a43ea2c3394 Mon Sep 17 00:00:00 2001 From: Carlos de Huerta Date: Sat, 17 Apr 2021 19:08:59 +0200 Subject: [PATCH 11/38] remove unnecessary imports --- piweatherrock/plugin_info/__init__.py | 3 --- piweatherrock/plugin_weather_common/__init__.py | 1 - 2 files changed, 4 deletions(-) diff --git a/piweatherrock/plugin_info/__init__.py b/piweatherrock/plugin_info/__init__.py index c1d0018..c0459c9 100644 --- a/piweatherrock/plugin_info/__init__.py +++ b/piweatherrock/plugin_info/__init__.py @@ -9,7 +9,6 @@ # local imports from piweatherrock.intl import intl -from piweatherrock.plugin_weather_common import PluginWeatherCommon class PluginInfo: @@ -34,7 +33,6 @@ def __init__(self, weather_rock): self.time_date_small_y_position = None self.sunrise_string = None self.sunset_string = None - self.weather_common = None self.intl = None self.ui_lang = None @@ -53,7 +51,6 @@ def get_rock_values(self, weather_rock): self.time_date_small_y_position = weather_rock.time_date_small_y_position self.sunrise_string = weather_rock.sunrise_string self.sunset_string = weather_rock.sunset_string - self.weather_common = PluginWeatherCommon(weather_rock) #Initialize locale resources self.intl = intl() diff --git a/piweatherrock/plugin_weather_common/__init__.py b/piweatherrock/plugin_weather_common/__init__.py index 28b3f1f..a13531f 100644 --- a/piweatherrock/plugin_weather_common/__init__.py +++ b/piweatherrock/plugin_weather_common/__init__.py @@ -5,7 +5,6 @@ import pygame import time -import json from os import path from datetime import datetime From b25595caaf8313061a82659ac03edb37abd3298a Mon Sep 17 00:00:00 2001 From: Carlos de Huerta Date: Sun, 18 Apr 2021 11:11:48 +0200 Subject: [PATCH 12/38] included timezone --- piweatherrock/intl/__init__.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/piweatherrock/intl/__init__.py b/piweatherrock/intl/__init__.py index 6948b72..992331a 100644 --- a/piweatherrock/intl/__init__.py +++ b/piweatherrock/intl/__init__.py @@ -5,10 +5,12 @@ import json import babel import i18n +from os import path from datetime import date, datetime, time from babel.dates import format_date, format_datetime, format_time -from os import path +from babel import Locale +from babel.dates import LOCALTZ, get_timezone_name, get_timezone class intl: """ @@ -20,18 +22,24 @@ def __init__(self): i18n.set('file_format', 'json') i18n.set('fallback', 'en') i18n.load_path.append(path.join(path.dirname(__file__),'data')) + self.tz = get_timezone(LOCALTZ) def get_weekday(self, ui_lang, date): - return format_date(date,"EEEE",locale='%s' % ui_lang).capitalize() + date = self.tz.fromutc(self.tz.localize(date)) + return format_date(date,"EEEE",locale=Locale.parse(ui_lang)).capitalize() def get_datetime(self, ui_lang, datetime, twelvehr): + datetime = self.tz.fromutc(self.tz.localize(datetime)) + if twelvehr is True: - return format_datetime(datetime, "EEE, MMM dd HH:mm", locale='%s' % ui_lang).title() + return format_datetime(datetime, "EEE, MMM dd HH:mm", locale=Locale.parse(ui_lang)).title() else: - return format_datetime(datetime, "EEE, MMM dd hh:mm", locale='%s' % ui_lang).title() + return format_datetime(datetime, "EEE, MMM dd hh:mm", locale=Locale.parse(ui_lang)).title() def get_ampm(self, ui_lang, datetime): - return format_datetime(datetime, "a", locale='%s' % ui_lang) + datetime = self.tz.fromutc(self.tz.localize(datetime)) + + return format_datetime(datetime, "a", locale=Locale.parse(ui_lang)) def get_text(self, ui_lang, text, params = None): i18n.set('locale', ui_lang) From bca700f6315f9b2f12858b3f5d578e63508e57bf Mon Sep 17 00:00:00 2001 From: Carlos de Huerta Date: Sun, 30 Apr 2023 13:58:17 +0200 Subject: [PATCH 13/38] changes for openmeteo vs darksky --- install.sh | 0 piweatherrock/climate/__init__.py | 9 + piweatherrock/climate/data.py | 62 ++++ piweatherrock/climate/data/example.json | 283 ++++++++++++++++++ piweatherrock/climate/forecast.py | 97 ++++++ piweatherrock/climate/openmeteo.py | 236 +++++++++++++++ .../icons/256/_nt_spritesheet.png | Bin .../icons/256/_spritesheet.png | Bin .../icons/256/chanceflurries.png | Bin .../icons/256/chancerain.png | Bin .../icons/256/chancesleet.png | Bin .../icons/256/chancesnow.png | Bin .../icons/256/chancetstorms.png | Bin .../plugin_weather_common/icons/256/clear.png | Bin .../icons/256/cloudy.png | Bin .../icons/256/flurries.png | Bin .../plugin_weather_common/icons/256/fog.png | Bin .../plugin_weather_common/icons/256/hazy.png | Bin .../icons/256/mostlycloudy.png | Bin .../icons/256/mostlysunny.png | Bin .../icons/256/nt_chanceflurries.png | Bin .../icons/256/nt_chancerain.png | Bin .../icons/256/nt_chancesleet.png | Bin .../icons/256/nt_chancesnow.png | Bin .../icons/256/nt_chancetstorms.png | Bin .../icons/256/nt_clear.png | Bin .../icons/256/nt_cloudy.png | Bin .../icons/256/nt_flurries.png | Bin .../icons/256/nt_fog.png | Bin .../icons/256/nt_hazy.png | Bin .../icons/256/nt_mostlycloudy.png | Bin .../icons/256/nt_mostlysunny.png | Bin .../icons/256/nt_partlycloudy.png | Bin .../icons/256/nt_partlysunny.png | Bin .../icons/256/nt_rain.png | Bin .../icons/256/nt_sleet.png | Bin .../icons/256/nt_snow.png | Bin .../icons/256/nt_sunny.png | Bin .../icons/256/nt_tstorms.png | Bin .../icons/256/nt_unknown.png | Bin .../icons/256/partlycloudy.png | Bin .../icons/256/partlysunny.png | Bin .../plugin_weather_common/icons/256/rain.png | Bin .../plugin_weather_common/icons/256/sleet.png | Bin .../plugin_weather_common/icons/256/snow.png | Bin .../plugin_weather_common/icons/256/sunny.png | Bin .../icons/256/tstorms.png | Bin .../icons/256/unknown.png | Bin .../icons/64/_nt_spritesheet.png | Bin .../icons/64/_spritesheet.png | Bin .../icons/64/chanceflurries.png | Bin .../icons/64/chancerain.png | Bin .../icons/64/chancesleet.png | Bin .../icons/64/chancesnow.png | Bin .../icons/64/chancetstorms.png | Bin .../plugin_weather_common/icons/64/clear.png | Bin .../plugin_weather_common/icons/64/cloudy.png | Bin .../icons/64/flurries.png | Bin .../plugin_weather_common/icons/64/fog.png | Bin .../plugin_weather_common/icons/64/hazy.png | Bin .../icons/64/mostlycloudy.png | Bin .../icons/64/mostlysunny.png | Bin .../icons/64/nt_chanceflurries.png | Bin .../icons/64/nt_chancerain.png | Bin .../icons/64/nt_chancesleet.png | Bin .../icons/64/nt_chancesnow.png | Bin .../icons/64/nt_chancetstorms.png | Bin .../icons/64/nt_clear.png | Bin .../icons/64/nt_cloudy.png | Bin .../icons/64/nt_flurries.png | Bin .../plugin_weather_common/icons/64/nt_fog.png | Bin .../icons/64/nt_hazy.png | Bin .../icons/64/nt_mostlycloudy.png | Bin .../icons/64/nt_mostlysunny.png | Bin .../icons/64/nt_partlycloudy.png | Bin .../icons/64/nt_partlysunny.png | Bin .../icons/64/nt_rain.png | Bin .../icons/64/nt_sleet.png | Bin .../icons/64/nt_snow.png | Bin .../icons/64/nt_sunny.png | Bin .../icons/64/nt_tstorms.png | Bin .../icons/64/nt_unknown.png | Bin .../icons/64/partlycloudy.png | Bin .../icons/64/partlysunny.png | Bin .../plugin_weather_common/icons/64/rain.png | Bin .../plugin_weather_common/icons/64/sleet.png | Bin .../plugin_weather_common/icons/64/snow.png | Bin .../plugin_weather_common/icons/64/sunny.png | Bin .../icons/64/tstorms.png | Bin .../icons/64/unknown.png | Bin .../icons/alt_icons/generate-dark-sky-pngs.sh | 0 piweatherrock/runner.py | 1 + piweatherrock/weather.py | 12 +- requirements.txt | 2 +- scripts/pwr-ui | 0 95 files changed, 696 insertions(+), 6 deletions(-) mode change 100755 => 100644 install.sh create mode 100644 piweatherrock/climate/__init__.py create mode 100644 piweatherrock/climate/data.py create mode 100644 piweatherrock/climate/data/example.json create mode 100644 piweatherrock/climate/forecast.py create mode 100644 piweatherrock/climate/openmeteo.py mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/_nt_spritesheet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/_spritesheet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/chanceflurries.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/chancerain.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/chancesleet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/chancesnow.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/chancetstorms.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/clear.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/cloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/flurries.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/fog.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/hazy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/mostlycloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/mostlysunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_chanceflurries.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_chancerain.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_chancesleet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_chancesnow.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_chancetstorms.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_clear.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_cloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_flurries.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_fog.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_hazy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_mostlycloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_mostlysunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_partlycloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_partlysunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_rain.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_sleet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_snow.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_sunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_tstorms.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/nt_unknown.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/partlycloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/partlysunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/rain.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/sleet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/snow.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/sunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/tstorms.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/256/unknown.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/_nt_spritesheet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/_spritesheet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/chanceflurries.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/chancerain.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/chancesleet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/chancesnow.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/chancetstorms.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/clear.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/cloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/flurries.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/fog.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/hazy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/mostlycloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/mostlysunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_chanceflurries.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_chancerain.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_chancesleet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_chancesnow.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_chancetstorms.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_clear.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_cloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_flurries.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_fog.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_hazy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_mostlycloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_mostlysunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_partlycloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_partlysunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_rain.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_sleet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_snow.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_sunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_tstorms.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/nt_unknown.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/partlycloudy.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/partlysunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/rain.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/sleet.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/snow.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/sunny.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/tstorms.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/64/unknown.png mode change 100755 => 100644 piweatherrock/plugin_weather_common/icons/alt_icons/generate-dark-sky-pngs.sh mode change 100755 => 100644 scripts/pwr-ui diff --git a/install.sh b/install.sh old mode 100755 new mode 100644 diff --git a/piweatherrock/climate/__init__.py b/piweatherrock/climate/__init__.py new file mode 100644 index 0000000..318fc8d --- /dev/null +++ b/piweatherrock/climate/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2023 Carlos de Huerta +# Distributed under the MIT License (https://opensource.org/licenses/MIT) + +from .forecast import Forecast + + +def forecast(key, latitude, longitude, time=None, timeout=None, **queries): + return Forecast(key, latitude, longitude, time, timeout, **queries) diff --git a/piweatherrock/climate/data.py b/piweatherrock/climate/data.py new file mode 100644 index 0000000..1e26725 --- /dev/null +++ b/piweatherrock/climate/data.py @@ -0,0 +1,62 @@ +# data.py + + +class DataPoint(object): + def __init__(self, data): + self._data = data + + if isinstance(self._data, dict): + for name, val in self._data.items(): + setattr(self, name, val) + + if isinstance(self._data, list): + setattr(self, 'data', self._data) + + def __setattr__(self, name, val): + def setval(new_val=None): + return object.__setattr__(self, name, new_val if new_val else val) + + # regular value + if not isinstance(val, (list, dict)) or name == '_data': + return setval() + + # set specific data handlers + if name in ('alerts', 'flags'): + return setval(eval(name.capitalize())(val)) + + # data + if isinstance(val, list): + val = [DataPoint(v) if isinstance(v, dict) else v for v in val] + return setval(val) + + # set general data handlers + setval(DataBlock(val) if 'data' in val.keys() else DataPoint(val)) + + def __getitem__(self, key): + return self._data[key] + + def __len__(self): + return len(self._data) + + +class DataBlock(DataPoint): + def __iter__(self): + return self.data.__iter__() + + def __getitem__(self, index): + # keys in darksky API datablocks are always str + if isinstance(index, str): + return self._data[index] + return self.data.__getitem__(index) + + def __len__(self): + return self.data.__len__() + + +class Flags(DataPoint): + def __setattr__(self, name, value): + return object.__setattr__(self, name.replace('-', '_'), value) + + +class Alerts(DataBlock): + pass diff --git a/piweatherrock/climate/data/example.json b/piweatherrock/climate/data/example.json new file mode 100644 index 0000000..47d4a1a --- /dev/null +++ b/piweatherrock/climate/data/example.json @@ -0,0 +1,283 @@ +{ + "latitude": 40.3, + "longitude": -3.7399998, + "timezone": "Europe/Madrid", + "currently": { + "time": 1682848800, + "summary": "Nublado", + "icon": "cloudy", + "nearestStormDistance": 0, + "precipIntensity": 3, + "precipIntensityError": 0, + "precipProbability": 3, + "precipType": "rain", + "temperature": 17.0, + "apparentTemperature": 17.0, + "dewPoint": 0, + "humidity": 0, + "pressure": 0, + "windSpeed": 9.0, + "windGust": 46.1, + "windBearing": 61.0, + "cloudCover": 0, + "uvIndex": 6.2, + "visibility": 0, + "ozone": 0 + }, + "daily": { + "summary": null, + "icon": null, + "data": [ + { + "time": 1682812800, + "summary": "Nublado", + "icon": "cloudy", + "sunriseTime": 1682838840, + "sunsetTime": 1682889000, + "temperatureHigh": 25.0, + "temperatureLow": 13.7, + "moonPhase": 0, + "precipIntensity": 3, + "precipIntensityMax": 3, + "precipIntensityMaxTime": 0, + "precipProbability": 3, + "precipType": "rain", + "temperatureHighTime": 0, + "temperatureLowTime": 0, + "apparentTemperatureHigh": 23.5, + "apparentTemperatureHighTime": 0, + "apparentTemperatureLow": 12.0, + "apparentTemperatureLowTime": 0, + "dewPoint": 0, + "humidity": 0, + "pressure": 0, + "windSpeed": 12.2, + "windGust": 46.1, + "windGustTime": 0, + "windBearing": 38, + "cloudCover": 0, + "uvIndex": 6.2, + "uvIndexTime": 0, + "visibility": 0, + "ozone": 0, + "temperatureMin": 13.7, + "temperatureMinTime": 0, + "temperatureMax": 25.0, + "temperatureMaxTime": 0, + "apparentTemperatureMin": 12.0, + "apparentTemperatureMinTime": 0, + "apparentTemperatureMax": 23.5, + "apparentTemperatureMaxTime": 0 + }, + { + "time": 1682899200, + "summary": "Nublado", + "icon": "cloudy", + "sunriseTime": 1682925180, + "sunsetTime": 1682975460, + "temperatureHigh": 26.5, + "temperatureLow": 13.5, + "moonPhase": 0, + "precipIntensity": 3, + "precipIntensityMax": 3, + "precipIntensityMaxTime": 0, + "precipProbability": 3, + "precipType": "rain", + "temperatureHighTime": 0, + "temperatureLowTime": 0, + "apparentTemperatureHigh": 24.1, + "apparentTemperatureHighTime": 0, + "apparentTemperatureLow": 10.7, + "apparentTemperatureLowTime": 0, + "dewPoint": 0, + "humidity": 0, + "pressure": 0, + "windSpeed": 18.3, + "windGust": 35.6, + "windGustTime": 0, + "windBearing": 34, + "cloudCover": 0, + "uvIndex": 7.55, + "uvIndexTime": 0, + "visibility": 0, + "ozone": 0, + "temperatureMin": 13.5, + "temperatureMinTime": 0, + "temperatureMax": 26.5, + "temperatureMaxTime": 0, + "apparentTemperatureMin": 10.7, + "apparentTemperatureMinTime": 0, + "apparentTemperatureMax": 24.1, + "apparentTemperatureMaxTime": 0 + }, + { + "time": 1682985600, + "summary": "Nublado", + "icon": "cloudy", + "sunriseTime": 1683011460, + "sunsetTime": 1683061920, + "temperatureHigh": 28.6, + "temperatureLow": 16.0, + "moonPhase": 0, + "precipIntensity": 0, + "precipIntensityMax": 0, + "precipIntensityMaxTime": 0, + "precipProbability": 0, + "precipType": "rain", + "temperatureHighTime": 0, + "temperatureLowTime": 0, + "apparentTemperatureHigh": 28.8, + "apparentTemperatureHighTime": 0, + "apparentTemperatureLow": 11.8, + "apparentTemperatureLowTime": 0, + "dewPoint": 0, + "humidity": 0, + "pressure": 0, + "windSpeed": 15.4, + "windGust": 25.9, + "windGustTime": 0, + "windBearing": 35, + "cloudCover": 0, + "uvIndex": 7.65, + "uvIndexTime": 0, + "visibility": 0, + "ozone": 0, + "temperatureMin": 16.0, + "temperatureMinTime": 0, + "temperatureMax": 28.6, + "temperatureMaxTime": 0, + "apparentTemperatureMin": 11.8, + "apparentTemperatureMinTime": 0, + "apparentTemperatureMax": 28.8, + "apparentTemperatureMaxTime": 0 + }, + { + "time": 1683072000, + "summary": "Nublado", + "icon": "cloudy", + "sunriseTime": 1683097800, + "sunsetTime": 1683148380, + "temperatureHigh": 31.3, + "temperatureLow": 18.2, + "moonPhase": 0, + "precipIntensity": 0, + "precipIntensityMax": 0, + "precipIntensityMaxTime": 0, + "precipProbability": 0, + "precipType": "rain", + "temperatureHighTime": 0, + "temperatureLowTime": 0, + "apparentTemperatureHigh": 29.8, + "apparentTemperatureHighTime": 0, + "apparentTemperatureLow": 15.2, + "apparentTemperatureLowTime": 0, + "dewPoint": 0, + "humidity": 0, + "pressure": 0, + "windSpeed": 40.1, + "windGust": 64.1, + "windGustTime": 0, + "windBearing": 263, + "cloudCover": 0, + "uvIndex": 7.7, + "uvIndexTime": 0, + "visibility": 0, + "ozone": 0, + "temperatureMin": 18.2, + "temperatureMinTime": 0, + "temperatureMax": 31.3, + "temperatureMaxTime": 0, + "apparentTemperatureMin": 15.2, + "apparentTemperatureMinTime": 0, + "apparentTemperatureMax": 29.8, + "apparentTemperatureMaxTime": 0 + } + ] + }, + "hourly": { + "summary": null, + "icon": null, + "data": [ + { + "time": 1682852400, + "summary": "Nublado", + "icon": "cloudy", + "precipIntensity": 0, + "precipProbability": 0, + "precipType": "rain", + "temperature": 18.6, + "apparentTemperature": 16.3, + "dewPoint": 8.2, + "humidity": 51, + "pressure": 945.1, + "windSpeed": 12.2, + "windGust": 24.8, + "windBearing": 62, + "cloudCover": 0, + "uvIndex": 456.3, + "visibility": 24140.0, + "ozone": 0 + }, + { + "time": 1682856000, + "summary": "Nublado", + "icon": "cloudy", + "precipIntensity": 0, + "precipProbability": 0, + "precipType": "rain", + "temperature": 20.3, + "apparentTemperature": 18.6, + "dewPoint": 8.3, + "humidity": 46, + "pressure": 945.4, + "windSpeed": 8.2, + "windGust": 25.2, + "windBearing": 61, + "cloudCover": 0, + "uvIndex": 640.9, + "visibility": 24140.0, + "ozone": 0 + }, + { + "time": 1682859600, + "summary": "Nublado", + "icon": "cloudy", + "precipIntensity": 0, + "precipProbability": 0, + "precipType": "rain", + "temperature": 21.5, + "apparentTemperature": 20.4, + "dewPoint": 8.1, + "humidity": 42, + "pressure": 945.0, + "windSpeed": 4.2, + "windGust": 21.2, + "windBearing": 70, + "cloudCover": 0, + "uvIndex": 670.2, + "visibility": 24140.0, + "ozone": 0 + }, + { + "time": 1682863200, + "summary": "Nublado", + "icon": "cloudy", + "precipIntensity": 0, + "precipProbability": 0, + "precipType": "rain", + "temperature": 22.7, + "apparentTemperature": 21.2, + "dewPoint": 7.7, + "humidity": 38, + "pressure": 944.4, + "windSpeed": 6.4, + "windGust": 22.3, + "windBearing": 43, + "cloudCover": 0, + "uvIndex": 684.2, + "visibility": 24140.0, + "ozone": 0 + } + ] + } +} \ No newline at end of file diff --git a/piweatherrock/climate/forecast.py b/piweatherrock/climate/forecast.py new file mode 100644 index 0000000..d0bed03 --- /dev/null +++ b/piweatherrock/climate/forecast.py @@ -0,0 +1,97 @@ +# forecast.py +from __future__ import print_function +from builtins import super + +import json +import sys +import requests +from os import path + +from .data import DataPoint +from .openmeteo import * + +# format from: +# https://open-meteo.com/en/docs#latitude=40.31&longitude=-3.73&hourly=temperature_2m +# info for mapping: https://openweathermap.org/darksky-openweather-3 +_API_URL = "https://api.open-meteo.com/v1/forecast" +_LOAD_FROM_FILE_ = False # Set this to True to load JSON from a file, or False to make an HTTP GET request + +class Forecast(DataPoint): + def __init__(self, key, latitude, longitude, time=None, timeout=None, **queries): + self._parameters = dict(key=key, latitude=latitude, longitude=longitude, time=time) + self.refresh(timeout, **queries) + + def __setattr__(self, key, value): + if key in ('_queries', '_parameters', '_data'): + return object.__setattr__(self, key, value) + return super().__setattr__(key, value) + + def __getattr__(self, key): + if key in self.currently._data.keys(): + return self.currently._data[key] + return object.__getattribute__(self, key) + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + del self + + def load_json_file(self, file_path): + with open(file_path, 'r') as file: + data = json.load(file) + return data + + @property + def url(self): + time = self._parameters['time'] + timestr = ',{}'.format(time) if time else '' + config = { + "forecast_days": 4, + "models": "best_match", + "current_weather": "true", + "temperature_unit": "celsius", + "windspeed_unit": "kmh", + "precipitation_unit": "mm", + "timeformat": "iso8601", + "hourly":"visibility,weathercode,temperature_2m,relativehumidity_2m,apparent_temperature,surface_pressure,cloudcover,windspeed_80m,precipitation,precipitation_probability,dewpoint_2m,windspeed_10m,windgusts_10m,winddirection_10m,cloudcover_low,direct_radiation", + "daily":"sunrise,sunset,uv_index_max,weathercode,temperature_2m_max,temperature_2m_min,apparent_temperature_max,apparent_temperature_min,precipitation_sum,precipitation_probability_mean,precipitation_probability_min,windgusts_10m_max,precipitation_probability_max,windspeed_10m_max,winddirection_10m_dominant" + } + + uri_format = '{url}?latitude={latitude}&longitude={longitude}&appid={key}&timezone={timezone}&models={models}&forecast_days={forecast_days}¤t_weather={current_weather}&temperature_unit={temperature_unit}&windspeed_unit={windspeed_unit}&precipitation_unit={precipitation_unit}&timeformat={timeformat}&hourly={hourly}&daily={daily}' + return uri_format.format( + url=_API_URL, + timestr=timestr, + timezone = self._queries["timezone"], + forecast_days = config["forecast_days"], + current_weather = config["current_weather"], + models = config["models"], + temperature_unit = config["temperature_unit"], + windspeed_unit = config["windspeed_unit"], + precipitation_unit = config["precipitation_unit"], + timeformat = config["timeformat"], + hourly = config["hourly"], + daily = config["daily"], + **self._parameters) + + def refresh(self, timeout=None, **queries): + self._queries = queries + self.timeout = timeout + request_params = { + 'params': self._queries, + 'headers': {'Accept-Encoding': 'gzip'}, + 'timeout': timeout + } + + if _LOAD_FROM_FILE_: + file_path = path.join(path.dirname(__file__),'data','example.json') + data = self.load_json_file(file_path) + + return super().__init__(data) + else: + response = requests.get(self.url, **request_params) + self.response_headers = response.headers + if response.status_code != 200: + raise requests.exceptions.HTTPError('Bad response') + + return super().__init__(openmeteo_to_darksky(response.text, queries["lang"])) \ No newline at end of file diff --git a/piweatherrock/climate/openmeteo.py b/piweatherrock/climate/openmeteo.py new file mode 100644 index 0000000..7c6d5ad --- /dev/null +++ b/piweatherrock/climate/openmeteo.py @@ -0,0 +1,236 @@ +# openmeteo.py + +import json +import datetime +import time +from pytz import timezone + +def get_weather_translations(lang, wmocode): + weather_translations = { + 0: {"en": "Clear sky", "es": "Cielo despejado"}, + 1: {"en": "Mainly clear", "es": "Mayormente despejado"}, + 2: {"en": "Partly cloudy", "es": "Parcialmente nublado"}, + 3: {"en": "Overcast", "es": "Nublado"}, + 45: {"en": "Fog", "es": "Niebla"}, + 48: {"en": "Depositing rime fog", "es": "Niebla depositada"}, + 51: {"en": "Drizzle: Light intensity", "es": "Llovizna: Intensidad ligera"}, + 53: {"en": "Drizzle: Moderate intensity", "es": "Llovizna: Intensidad moderada"}, + 55: {"en": "Drizzle: Dense intensity", "es": "Llovizna: Intensidad densa"}, + 56: {"en": "Freezing Drizzle: Light intensity", "es": "Llovizna helada: Intensidad ligera"}, + 57: {"en": "Freezing Drizzle: Dense intensity", "es": "Llovizna helada: Intensidad densa"}, + 61: {"en": "Rain: Slight intensity", "es": "Lluvia: Intensidad ligera"}, + 63: {"en": "Rain: Moderate intensity", "es": "Lluvia: Intensidad moderada"}, + 65: {"en": "Rain: Heavy intensity", "es": "Lluvia: Intensidad fuerte"}, + 66: {"en": "Freezing Rain: Light intensity", "es": "Lluvia helada: Intensidad ligera"}, + 67: {"en": "Freezing Rain: Heavy intensity", "es": "Lluvia helada: Intensidad fuerte"}, + 71: {"en": "Snow fall: Slight intensity", "es": "Nevada: Intensidad ligera"}, + 73: {"en": "Snow fall: Moderate intensity", "es": "Nevada: Intensidad moderada"}, + 75: {"en": "Snow fall: Heavy intensity", "es": "Nevada: Intensidad fuerte"}, + 77: {"en": "Snow grains", "es": "Granos de nieve"}, + 80: {"en": "Rain showers: Slight intensity", "es": "Lluvias: Intensidad ligera"}, + 81: {"en": "Rain showers: Moderate intensity", "es": "Lluvias: Intensidad moderada"}, + 82: {"en": "Rain showers: Violent intensity", "es": "Lluvias: Intensidad fuerte"}, + 85: {"en": "Snow showers: Slight intensity", "es": "Nevadas: Intensidad ligera"}, + 86: {"en": "Snow showers: Heavy intensity", "es": "Nevadas: Intensidad fuerte"}, + 95: {"en": "Thunderstorm: Slight or moderate", "es": "Tormenta eléctrica: Ligera o moderada"}, + 96: {"en": "Thunderstorm with slight hail", "es": "Tormenta eléctrica con granizo ligero"}, + 99: {"en": "Thunderstorm with heavy hail", "es": "Tormenta eléctrica con granizo fuerte"} + } + return weather_translations.get(wmocode, {}).get(lang, "Unknown" if lang == "en" else "Desconocido") + +def get_darksky_icon(wmocode): + icon_map = { + 0: 'clear', + 1: 'mostlysunny', + 2: 'partlycloudy', + 3: 'cloudy', + 45: 'fog', + 48: 'hazy', + 51: 'chancerain', + 53: 'rain', + 55: 'rain', + 56: 'chainsleet', + 57: 'sleet', + 61: 'chancerain', + 63: 'rain', + 65: 'rain', + 66: 'chainsleet', + 67: 'sleet', + 71: 'chancesnow', + 73: 'chancesnow', + 75: 'snow', + 77: 'snow', + 80: 'rain', + 81: 'rain', + 82: 'rain', + 85: 'chanceflurries', + 86: 'flurries', + 95: 'tstorm', + 96: 'chancetstorms', + 99: 'tstorms' + } + return icon_map.get(wmocode, 'unknown') + +def openmeteo_to_darksky(data, lang): + darksky_data = {} + json_data = json.loads(data) + + # Latitude, Longitude and Timezone + darksky_data["latitude"] = json_data["latitude"] + darksky_data["longitude"] = json_data["longitude"] + darksky_data["timezone"] = json_data["timezone"] + + # Current weather data + current_date_obj = datetime.datetime.fromisoformat(json_data["current_weather"]["time"]) + current_unix_timestamp = int(time.mktime(current_date_obj.timetuple())) + + # Get the first day for the current weather, and set the variable dor daily and hourly + daily_data = json_data["daily"] + hourly_data = json_data["hourly"] + + # Hourly weather data + darksky_data["hourly"] = { + "summary": "", + "icon": "", + "data": [] + } + + # Filter time array to get only the 4 next records based on current time + time_zone_str = json_data["timezone"] + tz = timezone(time_zone_str) + current_datetime = datetime.datetime.now(tz) + upper_limit = current_datetime + datetime.timedelta(hours=4) + + filtered_hourly_data = {} + indexes = [] + + for key in hourly_data.keys(): + if key == 'time': + filtered_hourly_data[key] = [] + for i, date_value in enumerate(hourly_data[key]): + date_obj = tz.localize(datetime.datetime.fromisoformat(date_value)) + if current_datetime <= date_obj < upper_limit: + filtered_hourly_data[key].append(hourly_data[key][i]) + indexes.append(i) + + for key in hourly_data.keys(): + if key != 'time': + filtered_hourly_data[key] = [] + for i in indexes: + filtered_hourly_data[key].append(hourly_data[key][i]) + + filtered_num_hours = len(filtered_hourly_data["time"]) + for i in range(filtered_num_hours): + time_date_obj = datetime.datetime.fromisoformat(filtered_hourly_data["time"][i]) + time_unix_timestamp = int(time.mktime(time_date_obj.timetuple())) + + darksky_hour_data = { + "time": time_unix_timestamp, + "summary": get_weather_translations(lang, filtered_hourly_data["weathercode"][i]), + "icon": get_darksky_icon(filtered_hourly_data["weathercode"][i]), + "precipIntensity": filtered_hourly_data["precipitation_probability"][i], + "precipProbability": filtered_hourly_data["precipitation_probability"][i] / 100, + "precipType": "rain", + "temperature": filtered_hourly_data["temperature_2m"][i], + "apparentTemperature": filtered_hourly_data["apparent_temperature"][i], + "dewPoint": filtered_hourly_data["dewpoint_2m"][i], + "humidity": filtered_hourly_data["relativehumidity_2m"][i] / 100, + "pressure": filtered_hourly_data["surface_pressure"][i], + "windSpeed": filtered_hourly_data["windspeed_10m"][i], + "windGust": filtered_hourly_data["windgusts_10m"][i], + "windBearing": filtered_hourly_data["winddirection_10m"][i], + "cloudCover": filtered_hourly_data["cloudcover_low"][i], + "uvIndex": filtered_hourly_data["direct_radiation"][i], + "visibility": filtered_hourly_data["visibility"][i], + "ozone": 0, + } + darksky_data["hourly"]["data"].append(darksky_hour_data) + darksky_data["hourly"]["summary"] = get_weather_translations(lang, filtered_hourly_data["weathercode"][0]) + darksky_data["hourly"]["icon"] = get_darksky_icon(filtered_hourly_data["weathercode"][0]) + + # Daily weather data + darksky_data["daily"] = { + "summary": get_weather_translations(lang, daily_data["weathercode"][0]), + "icon": get_darksky_icon(daily_data["weathercode"][0]), + "data": [] + } + + num_days = len(daily_data['time']) + + for i in range(num_days): + time_date_obj = datetime.datetime.fromisoformat(daily_data["time"][i]) + time_unix_timestamp = int(time.mktime(time_date_obj.timetuple())) + + sunset_date_obj = datetime.datetime.fromisoformat(daily_data["sunset"][i]) + sunset_unix_timestamp = int(time.mktime(sunset_date_obj.timetuple())) + + sunrise_date_obj = datetime.datetime.fromisoformat(daily_data["sunrise"][i]) + sunrise_unix_timestamp = int(time.mktime(sunrise_date_obj.timetuple())) + + darksky_day_data = { + "time": time_unix_timestamp, + "summary": get_weather_translations(lang, daily_data["weathercode"][i]), + "icon": get_darksky_icon(daily_data["weathercode"][i]), + "sunriseTime": sunrise_unix_timestamp, + "sunsetTime": sunset_unix_timestamp, + "temperatureHigh": daily_data["temperature_2m_max"][i], + "temperatureLow": daily_data["temperature_2m_min"][i], + "moonPhase": 0, + "precipIntensity": daily_data["precipitation_probability_min"][i], + "precipIntensityMax": daily_data["precipitation_probability_max"][i], + "precipIntensityMaxTime": 0, + "precipProbability": daily_data["precipitation_probability_mean"][i] / 100, + "precipType": "rain", + "temperatureHighTime": 0, + "temperatureLowTime": 0, + "apparentTemperatureHigh": daily_data["apparent_temperature_max"][i], + "apparentTemperatureHighTime": 0, + "apparentTemperatureLow": daily_data["apparent_temperature_min"][i], + "apparentTemperatureLowTime": 0, + "dewPoint": filtered_hourly_data["dewpoint_2m"][0], + "humidity": filtered_hourly_data["relativehumidity_2m"][0] / 100, + "pressure": filtered_hourly_data["surface_pressure"][0], + "windSpeed": daily_data["windspeed_10m_max"][i], + "windGust": daily_data["windgusts_10m_max"][i], + "windGustTime": 0, + "windBearing": daily_data["winddirection_10m_dominant"][i], + "cloudCover": filtered_hourly_data["cloudcover_low"][0], + "uvIndex": daily_data["uv_index_max"][i], + "uvIndexTime": 0, + "visibility": filtered_hourly_data["visibility"][0], + "ozone": 0, + "temperatureMin": daily_data["temperature_2m_min"][i], + "temperatureMinTime": 0, + "temperatureMax": daily_data["temperature_2m_max"][i], + "temperatureMaxTime": 0, + "apparentTemperatureMin": daily_data["apparent_temperature_min"][i], + "apparentTemperatureMinTime": 0, + "apparentTemperatureMax": daily_data["apparent_temperature_max"][i], + "apparentTemperatureMaxTime": 0, + } + darksky_data["daily"]["data"].append(darksky_day_data) + + darksky_data["currently"] = { + "time": current_unix_timestamp, + "summary": get_weather_translations(lang, daily_data["weathercode"][0]), + "icon": get_darksky_icon(daily_data["weathercode"][0]), + "nearestStormDistance": 0, + "precipIntensity": daily_data["precipitation_probability_min"][0], + "precipIntensityError": 0, + "precipProbability": daily_data["precipitation_probability_mean"][0] /, + "precipType": "rain", + "temperature": json_data["current_weather"]["temperature"], + "apparentTemperature": json_data["current_weather"]["temperature"], + "dewPoint": filtered_hourly_data["dewpoint_2m"][0], + "humidity": filtered_hourly_data["relativehumidity_2m"][0] / 100, + "pressure": filtered_hourly_data["surface_pressure"][0], + "windSpeed": json_data["current_weather"]["windspeed"], + "windGust": daily_data["windgusts_10m_max"][0], + "windBearing": json_data["current_weather"]["winddirection"], + "cloudCover": filtered_hourly_data["cloudcover_low"][0], + "uvIndex": daily_data["uv_index_max"][0], + "visibility": filtered_hourly_data["visibility"][0], + "ozone": 0 + } + + return darksky_data \ No newline at end of file diff --git a/piweatherrock/plugin_weather_common/icons/256/_nt_spritesheet.png b/piweatherrock/plugin_weather_common/icons/256/_nt_spritesheet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/_spritesheet.png b/piweatherrock/plugin_weather_common/icons/256/_spritesheet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/chanceflurries.png b/piweatherrock/plugin_weather_common/icons/256/chanceflurries.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/chancerain.png b/piweatherrock/plugin_weather_common/icons/256/chancerain.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/chancesleet.png b/piweatherrock/plugin_weather_common/icons/256/chancesleet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/chancesnow.png b/piweatherrock/plugin_weather_common/icons/256/chancesnow.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/chancetstorms.png b/piweatherrock/plugin_weather_common/icons/256/chancetstorms.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/clear.png b/piweatherrock/plugin_weather_common/icons/256/clear.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/cloudy.png b/piweatherrock/plugin_weather_common/icons/256/cloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/flurries.png b/piweatherrock/plugin_weather_common/icons/256/flurries.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/fog.png b/piweatherrock/plugin_weather_common/icons/256/fog.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/hazy.png b/piweatherrock/plugin_weather_common/icons/256/hazy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/mostlycloudy.png b/piweatherrock/plugin_weather_common/icons/256/mostlycloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/mostlysunny.png b/piweatherrock/plugin_weather_common/icons/256/mostlysunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_chanceflurries.png b/piweatherrock/plugin_weather_common/icons/256/nt_chanceflurries.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_chancerain.png b/piweatherrock/plugin_weather_common/icons/256/nt_chancerain.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_chancesleet.png b/piweatherrock/plugin_weather_common/icons/256/nt_chancesleet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_chancesnow.png b/piweatherrock/plugin_weather_common/icons/256/nt_chancesnow.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_chancetstorms.png b/piweatherrock/plugin_weather_common/icons/256/nt_chancetstorms.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_clear.png b/piweatherrock/plugin_weather_common/icons/256/nt_clear.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_cloudy.png b/piweatherrock/plugin_weather_common/icons/256/nt_cloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_flurries.png b/piweatherrock/plugin_weather_common/icons/256/nt_flurries.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_fog.png b/piweatherrock/plugin_weather_common/icons/256/nt_fog.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_hazy.png b/piweatherrock/plugin_weather_common/icons/256/nt_hazy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_mostlycloudy.png b/piweatherrock/plugin_weather_common/icons/256/nt_mostlycloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_mostlysunny.png b/piweatherrock/plugin_weather_common/icons/256/nt_mostlysunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_partlycloudy.png b/piweatherrock/plugin_weather_common/icons/256/nt_partlycloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_partlysunny.png b/piweatherrock/plugin_weather_common/icons/256/nt_partlysunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_rain.png b/piweatherrock/plugin_weather_common/icons/256/nt_rain.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_sleet.png b/piweatherrock/plugin_weather_common/icons/256/nt_sleet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_snow.png b/piweatherrock/plugin_weather_common/icons/256/nt_snow.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_sunny.png b/piweatherrock/plugin_weather_common/icons/256/nt_sunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_tstorms.png b/piweatherrock/plugin_weather_common/icons/256/nt_tstorms.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/nt_unknown.png b/piweatherrock/plugin_weather_common/icons/256/nt_unknown.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/partlycloudy.png b/piweatherrock/plugin_weather_common/icons/256/partlycloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/partlysunny.png b/piweatherrock/plugin_weather_common/icons/256/partlysunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/rain.png b/piweatherrock/plugin_weather_common/icons/256/rain.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/sleet.png b/piweatherrock/plugin_weather_common/icons/256/sleet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/snow.png b/piweatherrock/plugin_weather_common/icons/256/snow.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/sunny.png b/piweatherrock/plugin_weather_common/icons/256/sunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/tstorms.png b/piweatherrock/plugin_weather_common/icons/256/tstorms.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/256/unknown.png b/piweatherrock/plugin_weather_common/icons/256/unknown.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/_nt_spritesheet.png b/piweatherrock/plugin_weather_common/icons/64/_nt_spritesheet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/_spritesheet.png b/piweatherrock/plugin_weather_common/icons/64/_spritesheet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/chanceflurries.png b/piweatherrock/plugin_weather_common/icons/64/chanceflurries.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/chancerain.png b/piweatherrock/plugin_weather_common/icons/64/chancerain.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/chancesleet.png b/piweatherrock/plugin_weather_common/icons/64/chancesleet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/chancesnow.png b/piweatherrock/plugin_weather_common/icons/64/chancesnow.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/chancetstorms.png b/piweatherrock/plugin_weather_common/icons/64/chancetstorms.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/clear.png b/piweatherrock/plugin_weather_common/icons/64/clear.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/cloudy.png b/piweatherrock/plugin_weather_common/icons/64/cloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/flurries.png b/piweatherrock/plugin_weather_common/icons/64/flurries.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/fog.png b/piweatherrock/plugin_weather_common/icons/64/fog.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/hazy.png b/piweatherrock/plugin_weather_common/icons/64/hazy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/mostlycloudy.png b/piweatherrock/plugin_weather_common/icons/64/mostlycloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/mostlysunny.png b/piweatherrock/plugin_weather_common/icons/64/mostlysunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_chanceflurries.png b/piweatherrock/plugin_weather_common/icons/64/nt_chanceflurries.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_chancerain.png b/piweatherrock/plugin_weather_common/icons/64/nt_chancerain.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_chancesleet.png b/piweatherrock/plugin_weather_common/icons/64/nt_chancesleet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_chancesnow.png b/piweatherrock/plugin_weather_common/icons/64/nt_chancesnow.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_chancetstorms.png b/piweatherrock/plugin_weather_common/icons/64/nt_chancetstorms.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_clear.png b/piweatherrock/plugin_weather_common/icons/64/nt_clear.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_cloudy.png b/piweatherrock/plugin_weather_common/icons/64/nt_cloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_flurries.png b/piweatherrock/plugin_weather_common/icons/64/nt_flurries.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_fog.png b/piweatherrock/plugin_weather_common/icons/64/nt_fog.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_hazy.png b/piweatherrock/plugin_weather_common/icons/64/nt_hazy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_mostlycloudy.png b/piweatherrock/plugin_weather_common/icons/64/nt_mostlycloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_mostlysunny.png b/piweatherrock/plugin_weather_common/icons/64/nt_mostlysunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_partlycloudy.png b/piweatherrock/plugin_weather_common/icons/64/nt_partlycloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_partlysunny.png b/piweatherrock/plugin_weather_common/icons/64/nt_partlysunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_rain.png b/piweatherrock/plugin_weather_common/icons/64/nt_rain.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_sleet.png b/piweatherrock/plugin_weather_common/icons/64/nt_sleet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_snow.png b/piweatherrock/plugin_weather_common/icons/64/nt_snow.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_sunny.png b/piweatherrock/plugin_weather_common/icons/64/nt_sunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_tstorms.png b/piweatherrock/plugin_weather_common/icons/64/nt_tstorms.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/nt_unknown.png b/piweatherrock/plugin_weather_common/icons/64/nt_unknown.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/partlycloudy.png b/piweatherrock/plugin_weather_common/icons/64/partlycloudy.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/partlysunny.png b/piweatherrock/plugin_weather_common/icons/64/partlysunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/rain.png b/piweatherrock/plugin_weather_common/icons/64/rain.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/sleet.png b/piweatherrock/plugin_weather_common/icons/64/sleet.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/snow.png b/piweatherrock/plugin_weather_common/icons/64/snow.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/sunny.png b/piweatherrock/plugin_weather_common/icons/64/sunny.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/tstorms.png b/piweatherrock/plugin_weather_common/icons/64/tstorms.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/64/unknown.png b/piweatherrock/plugin_weather_common/icons/64/unknown.png old mode 100755 new mode 100644 diff --git a/piweatherrock/plugin_weather_common/icons/alt_icons/generate-dark-sky-pngs.sh b/piweatherrock/plugin_weather_common/icons/alt_icons/generate-dark-sky-pngs.sh old mode 100755 new mode 100644 diff --git a/piweatherrock/runner.py b/piweatherrock/runner.py index 508a50f..b4a76ca 100644 --- a/piweatherrock/runner.py +++ b/piweatherrock/runner.py @@ -41,6 +41,7 @@ def main(self, config_file): with open(config_file, "r") as f: self.config = json.load(f) + pygame.init() # Create an instance of the main application class self.my_weather_rock = Weather(config_file) diff --git a/piweatherrock/weather.py b/piweatherrock/weather.py index 2e299cb..7bf8ce5 100644 --- a/piweatherrock/weather.py +++ b/piweatherrock/weather.py @@ -15,7 +15,7 @@ import logging.handlers # third party imports -from darksky import forecast +from piweatherrock.climate import forecast import pygame import requests @@ -45,12 +45,13 @@ def __init__(self, config_file): #Initialize locale intl self.intl = intl() self.ui_lang = self.config["ui_lang"] - + + # Initialize logger + self.log = self.get_logger() + self.last_update_check = 0 self.weather = {} self.get_forecast() - # Initialize logger - self.log = self.get_logger() if platform.system() == 'Darwin': pygame.display.init() @@ -161,7 +162,8 @@ def get_forecast(self): self.config["lon"], exclude='minutely', units=self.config["units"], - lang=self.config["lang"]) + lang=self.config["lang"], + timezone=self.config["timezone"]) sunset_today = datetime.datetime.fromtimestamp( self.weather.daily[0].sunsetTime) diff --git a/requirements.txt b/requirements.txt index 4bd1cdf..bb73cb8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,9 @@ -darkskylib pygame pyserial requests cherrypy babel python-i18n +pytz piweatherrock-webconfig==1.5.0 diff --git a/scripts/pwr-ui b/scripts/pwr-ui old mode 100755 new mode 100644 From 4c9553d0bae8b9ee2e0b2951613b3b4e88dfc8db Mon Sep 17 00:00:00 2001 From: Carlos de Huerta Date: Sun, 30 Apr 2023 14:02:27 +0200 Subject: [PATCH 14/38] fix typo --- piweatherrock/climate/openmeteo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/piweatherrock/climate/openmeteo.py b/piweatherrock/climate/openmeteo.py index 7c6d5ad..b3846b6 100644 --- a/piweatherrock/climate/openmeteo.py +++ b/piweatherrock/climate/openmeteo.py @@ -217,7 +217,7 @@ def openmeteo_to_darksky(data, lang): "nearestStormDistance": 0, "precipIntensity": daily_data["precipitation_probability_min"][0], "precipIntensityError": 0, - "precipProbability": daily_data["precipitation_probability_mean"][0] /, + "precipProbability": daily_data["precipitation_probability_mean"][0] / 100, "precipType": "rain", "temperature": json_data["current_weather"]["temperature"], "apparentTemperature": json_data["current_weather"]["temperature"], From b64707421d4267c3d1cb7aa4d69a87b0f5bfe427 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 7 Nov 2023 21:27:21 +0100 Subject: [PATCH 15/38] Update forecast.py --- piweatherrock/climate/forecast.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/piweatherrock/climate/forecast.py b/piweatherrock/climate/forecast.py index d0bed03..6826888 100644 --- a/piweatherrock/climate/forecast.py +++ b/piweatherrock/climate/forecast.py @@ -89,9 +89,10 @@ def refresh(self, timeout=None, **queries): return super().__init__(data) else: - response = requests.get(self.url, **request_params) + response = requests.get(self.url) self.response_headers = response.headers if response.status_code != 200: + print(response.text) raise requests.exceptions.HTTPError('Bad response') - return super().__init__(openmeteo_to_darksky(response.text, queries["lang"])) \ No newline at end of file + return super().__init__(openmeteo_to_darksky(response.text, queries["lang"])) From f8f76f909674730faf09bd59c876e6225828d38a Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 7 Nov 2023 21:29:26 +0100 Subject: [PATCH 16/38] Update forecast.py --- piweatherrock/climate/forecast.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/piweatherrock/climate/forecast.py b/piweatherrock/climate/forecast.py index 6826888..e455994 100644 --- a/piweatherrock/climate/forecast.py +++ b/piweatherrock/climate/forecast.py @@ -7,6 +7,15 @@ import requests from os import path +import logging +from http.client import HTTPConnection + +# Enable HTTPConnection debug logging to stdout. +log = logging.getLogger('urllib3') +log.setLevel(logging.DEBUG) +stream_handler = logging.StreamHandler(sys.stdout) +log.addHandler(stream_handler) + from .data import DataPoint from .openmeteo import * From 8f0a13dd98d200f63bd4668fb65defd07d3346c6 Mon Sep 17 00:00:00 2001 From: Chubascos1 <78501130+Chubascos1@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:04:27 +0200 Subject: [PATCH 17/38] Update openmeteo.py --- piweatherrock/climate/openmeteo.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/piweatherrock/climate/openmeteo.py b/piweatherrock/climate/openmeteo.py index b3846b6..c5e6be5 100644 --- a/piweatherrock/climate/openmeteo.py +++ b/piweatherrock/climate/openmeteo.py @@ -12,14 +12,14 @@ def get_weather_translations(lang, wmocode): 2: {"en": "Partly cloudy", "es": "Parcialmente nublado"}, 3: {"en": "Overcast", "es": "Nublado"}, 45: {"en": "Fog", "es": "Niebla"}, - 48: {"en": "Depositing rime fog", "es": "Niebla depositada"}, - 51: {"en": "Drizzle: Light intensity", "es": "Llovizna: Intensidad ligera"}, - 53: {"en": "Drizzle: Moderate intensity", "es": "Llovizna: Intensidad moderada"}, - 55: {"en": "Drizzle: Dense intensity", "es": "Llovizna: Intensidad densa"}, - 56: {"en": "Freezing Drizzle: Light intensity", "es": "Llovizna helada: Intensidad ligera"}, - 57: {"en": "Freezing Drizzle: Dense intensity", "es": "Llovizna helada: Intensidad densa"}, - 61: {"en": "Rain: Slight intensity", "es": "Lluvia: Intensidad ligera"}, - 63: {"en": "Rain: Moderate intensity", "es": "Lluvia: Intensidad moderada"}, + 48: {"en": "Depositing rime fog", "es": "Niebla de escarcha"}, + 51: {"en": "Drizzle: Light intensity", "es": "Chispeo ligero"}, + 53: {"en": "Drizzle: Moderate intensity", "es": "Chispeo moderado"}, + 55: {"en": "Drizzle: Dense intensity", "es": "Chispeo intenso"}, + 56: {"en": "Freezing Drizzle: Light intensity", "es": "Lluvia engelante"}, + 57: {"en": "Freezing Drizzle: Dense intensity", "es": "Lluvia engelante intensa"}, + 61: {"en": "Rain: Slight intensity", "es": "Chubascos"}, + 63: {"en": "Rain: Moderate intensity", "es": "Chubascos"}, 65: {"en": "Rain: Heavy intensity", "es": "Lluvia: Intensidad fuerte"}, 66: {"en": "Freezing Rain: Light intensity", "es": "Lluvia helada: Intensidad ligera"}, 67: {"en": "Freezing Rain: Heavy intensity", "es": "Lluvia helada: Intensidad fuerte"}, @@ -233,4 +233,4 @@ def openmeteo_to_darksky(data, lang): "ozone": 0 } - return darksky_data \ No newline at end of file + return darksky_data From 41c59a63102a78611eb373a2ffe434cd7b6b1504 Mon Sep 17 00:00:00 2001 From: Chubascos1 <78501130+Chubascos1@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:07:25 +0200 Subject: [PATCH 18/38] Update openmeteo.py --- piweatherrock/climate/openmeteo.py | 34 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/piweatherrock/climate/openmeteo.py b/piweatherrock/climate/openmeteo.py index c5e6be5..4ecb1e1 100644 --- a/piweatherrock/climate/openmeteo.py +++ b/piweatherrock/climate/openmeteo.py @@ -11,30 +11,30 @@ def get_weather_translations(lang, wmocode): 1: {"en": "Mainly clear", "es": "Mayormente despejado"}, 2: {"en": "Partly cloudy", "es": "Parcialmente nublado"}, 3: {"en": "Overcast", "es": "Nublado"}, - 45: {"en": "Fog", "es": "Niebla"}, + 45: {"en": "Fog", "es": "Neblina"}, 48: {"en": "Depositing rime fog", "es": "Niebla de escarcha"}, 51: {"en": "Drizzle: Light intensity", "es": "Chispeo ligero"}, 53: {"en": "Drizzle: Moderate intensity", "es": "Chispeo moderado"}, 55: {"en": "Drizzle: Dense intensity", "es": "Chispeo intenso"}, - 56: {"en": "Freezing Drizzle: Light intensity", "es": "Lluvia engelante"}, - 57: {"en": "Freezing Drizzle: Dense intensity", "es": "Lluvia engelante intensa"}, + 56: {"en": "Freezing Drizzle: Light intensity", "es": "Llovizna gélida"}, + 57: {"en": "Freezing Drizzle: Dense intensity", "es": "Llovizna gélida intensa"}, 61: {"en": "Rain: Slight intensity", "es": "Chubascos"}, 63: {"en": "Rain: Moderate intensity", "es": "Chubascos"}, - 65: {"en": "Rain: Heavy intensity", "es": "Lluvia: Intensidad fuerte"}, - 66: {"en": "Freezing Rain: Light intensity", "es": "Lluvia helada: Intensidad ligera"}, - 67: {"en": "Freezing Rain: Heavy intensity", "es": "Lluvia helada: Intensidad fuerte"}, - 71: {"en": "Snow fall: Slight intensity", "es": "Nevada: Intensidad ligera"}, - 73: {"en": "Snow fall: Moderate intensity", "es": "Nevada: Intensidad moderada"}, - 75: {"en": "Snow fall: Heavy intensity", "es": "Nevada: Intensidad fuerte"}, + 65: {"en": "Rain: Heavy intensity", "es": "Lluvia intensa"}, + 66: {"en": "Freezing Rain: Light intensity", "es": "Lluvia engelante"}, + 67: {"en": "Freezing Rain: Heavy intensity", "es": "Lluvia engelante intensa"}, + 71: {"en": "Snow fall: Slight intensity", "es": "Nevada"}, + 73: {"en": "Snow fall: Moderate intensity", "es": "Nevada densa"}, + 75: {"en": "Snow fall: Heavy intensity", "es": "Nevada intensa"}, 77: {"en": "Snow grains", "es": "Granos de nieve"}, - 80: {"en": "Rain showers: Slight intensity", "es": "Lluvias: Intensidad ligera"}, - 81: {"en": "Rain showers: Moderate intensity", "es": "Lluvias: Intensidad moderada"}, - 82: {"en": "Rain showers: Violent intensity", "es": "Lluvias: Intensidad fuerte"}, - 85: {"en": "Snow showers: Slight intensity", "es": "Nevadas: Intensidad ligera"}, - 86: {"en": "Snow showers: Heavy intensity", "es": "Nevadas: Intensidad fuerte"}, - 95: {"en": "Thunderstorm: Slight or moderate", "es": "Tormenta eléctrica: Ligera o moderada"}, - 96: {"en": "Thunderstorm with slight hail", "es": "Tormenta eléctrica con granizo ligero"}, - 99: {"en": "Thunderstorm with heavy hail", "es": "Tormenta eléctrica con granizo fuerte"} + 80: {"en": "Rain showers: Slight intensity", "es": "Chubascos"}, + 81: {"en": "Rain showers: Moderate intensity", "es": "Lluvia moderada"}, + 82: {"en": "Rain showers: Violent intensity", "es": "Lluvia fuerte"}, + 85: {"en": "Snow showers: Slight intensity", "es": "Nevadas"}, + 86: {"en": "Snow showers: Heavy intensity", "es": "Nevadas intensa"}, + 95: {"en": "Thunderstorm: Slight or moderate", "es": "Tormenta eléctrica"}, + 96: {"en": "Thunderstorm with slight hail", "es": "Tormenta eléctrica con granizo"}, + 99: {"en": "Thunderstorm with heavy hail", "es": "Tormenta eléctrica con granizado intenso"} } return weather_translations.get(wmocode, {}).get(lang, "Unknown" if lang == "en" else "Desconocido") From 247afca0f8bfdc562d12b74bfd71953db7adcc40 Mon Sep 17 00:00:00 2001 From: Chubascos1 <78501130+Chubascos1@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:12:17 +0200 Subject: [PATCH 19/38] Update piweatherrock.es.json --- piweatherrock/intl/data/piweatherrock.es.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/piweatherrock/intl/data/piweatherrock.es.json b/piweatherrock/intl/data/piweatherrock.es.json index 0eac6bd..e612829 100644 --- a/piweatherrock/intl/data/piweatherrock.es.json +++ b/piweatherrock/intl/data/piweatherrock.es.json @@ -2,9 +2,9 @@ "es": { "feels_like": "Sensación térmica:", "wind":"Viento:", - "humidity":"Humedad:", - "umbrella":"¡Coge el paraguas!", - "no_umbrella":"Hoy no cojas el paraguas", + "humidity":"Humedad absoluta:", + "umbrella":"¡Rayos y centellas!", + "no_umbrella":"Hoy no cojas el paraguas, coge la sombrilla", "today":"hoy", "powered_by":"Weather rock gracias a Dark Sky", "tonight":"esta noche", From ef3a3b88b7ddf4d76c5a962a1ead1703ff075183 Mon Sep 17 00:00:00 2001 From: Chubascos1 <78501130+Chubascos1@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:12:46 +0200 Subject: [PATCH 20/38] Update openmeteo.py --- piweatherrock/climate/openmeteo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/piweatherrock/climate/openmeteo.py b/piweatherrock/climate/openmeteo.py index 4ecb1e1..f652f8d 100644 --- a/piweatherrock/climate/openmeteo.py +++ b/piweatherrock/climate/openmeteo.py @@ -16,8 +16,8 @@ def get_weather_translations(lang, wmocode): 51: {"en": "Drizzle: Light intensity", "es": "Chispeo ligero"}, 53: {"en": "Drizzle: Moderate intensity", "es": "Chispeo moderado"}, 55: {"en": "Drizzle: Dense intensity", "es": "Chispeo intenso"}, - 56: {"en": "Freezing Drizzle: Light intensity", "es": "Llovizna gélida"}, - 57: {"en": "Freezing Drizzle: Dense intensity", "es": "Llovizna gélida intensa"}, + 56: {"en": "Freezing Drizzle: Light intensity", "es": "Llovizna engelante"}, + 57: {"en": "Freezing Drizzle: Dense intensity", "es": "Llovizna engelante intensa"}, 61: {"en": "Rain: Slight intensity", "es": "Chubascos"}, 63: {"en": "Rain: Moderate intensity", "es": "Chubascos"}, 65: {"en": "Rain: Heavy intensity", "es": "Lluvia intensa"}, From ad6ad87faf49ee6921f8b78cad221ef110343e9e Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 10:23:09 +0200 Subject: [PATCH 21/38] Create piweatherrock-config.json --- piweatherrock/piweatherrock-config.json | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 piweatherrock/piweatherrock-config.json diff --git a/piweatherrock/piweatherrock-config.json b/piweatherrock/piweatherrock-config.json new file mode 100644 index 0000000..20a6a4b --- /dev/null +++ b/piweatherrock/piweatherrock-config.json @@ -0,0 +1,26 @@ +{ + "ds_api_key": "openmeteo-request-piweatherrock", + "lat": 40.299457, + "lon": -3.743399, + "units": "si", + "lang": "es", + "ui_lang":"es", + "timezone":"Europe/Madrid", + "fullscreen": true, + "12hour_disp": false, + "icon_offset": -23.5, + "update_freq": 900, + "info_pause": 60, + "info_delay": 900, + "plugins": { + "daily": { + "pause": 60, + "enabled": false + }, + "hourly": { + "pause": 60, + "enabled": false + } + }, + "log_level": "INFO" +} From e506603722e6f390a1bae619a80ef4abbae069ed Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 10:32:50 +0200 Subject: [PATCH 22/38] Update README.md --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index bcc1683..828c618 100644 --- a/README.md +++ b/README.md @@ -17,3 +17,22 @@ More information about the project and full documentation can be found at https: - [optional] `twine upload --repository-url https://test.pypi.org/legacy/ dist/*` - `twine upload dist/*` - Create a git tag and push it + +## Local Development process + +- git clone https://github.com/carloshm/PiWeatherRock.git +- git pull (for any additional external change after a while) +- cd PiWeatherRock +- Make changes +- git add . +- git commit -m "changes description" +- git push origin main + +## Run changes + +- python3 setup.py install --user +- python3 ./scripts/pwr-ui -c /home/pi/Desktop/piweatherrock-config.json + +## Validate Service Data + +https://api.open-meteo.com:443 "GET /v1/forecast?latitude=40.299457&longitude=-3.743399&appid=openmeteo-request-piweatherrock&timezone=Europe/Madrid&models=best_match&forecast_days=4¤t_weather=true&temperature_unit=celsius&windspeed_unit=kmh&precipitation_unit=mm&timeformat=iso8601&hourly=visibility,weathercode,temperature_2m,relativehumidity_2m,apparent_temperature,surface_pressure,cloudcover,windspeed_80m,precipitation,precipitation_probability,dewpoint_2m,windspeed_10m,windgusts_10m,winddirection_10m,cloudcover_low,direct_radiation&daily=sunrise,sunset,uv_index_max,weathercode,temperature_2m_max,temperature_2m_min,apparent_temperature_max,apparent_temperature_min,precipitation_sum,precipitation_probability_mean,precipitation_probability_min,windgusts_10m_max,precipitation_probability_max,windspeed_10m_max,winddirection_10m_dominant HTTP/1.1" From a91abc72a1c4f7e279e5116c906a3c214ead2b4f Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 10:33:51 +0200 Subject: [PATCH 23/38] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 828c618..cc64d25 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,8 @@ More information about the project and full documentation can be found at https: ## Local Development process - git clone https://github.com/carloshm/PiWeatherRock.git -- git pull (for any additional external change after a while) - cd PiWeatherRock +- git pull (for any additional external change after a while) - Make changes - git add . - git commit -m "changes description" From c63fc5028e7e560a8030400e9838234d192e37f5 Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 10:38:55 +0200 Subject: [PATCH 24/38] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cc64d25..ba3eaee 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,9 @@ More information about the project and full documentation can be found at https: - git commit -m "changes description" - git push origin main -## Run changes +## Run changes https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html -- python3 setup.py install --user +- pip install -r requirements.txt - python3 ./scripts/pwr-ui -c /home/pi/Desktop/piweatherrock-config.json ## Validate Service Data From dd7c5078f39465fb6264c028217d7cbe1b963a30 Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 10:40:25 +0200 Subject: [PATCH 25/38] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ba3eaee..7d8f845 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ More information about the project and full documentation can be found at https: ## Run changes https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html - pip install -r requirements.txt -- python3 ./scripts/pwr-ui -c /home/pi/Desktop/piweatherrock-config.json +- python3 ./scripts/pwr-ui -c ./piweatherrock/piweatherrock-config.json ## Validate Service Data From 82c024c6c336f721d26c896aeaa2a17fc4a4f3d6 Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 10:47:21 +0200 Subject: [PATCH 26/38] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7d8f845..8b8d1c0 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,11 @@ More information about the project and full documentation can be found at https: ## Local Development process +- python3 -m venv env_name +- source env_name/bin/activate + - git clone https://github.com/carloshm/PiWeatherRock.git -- cd PiWeatherRock +- cd PiWeatherRock - git pull (for any additional external change after a while) - Make changes - git add . From c704e40af5b710feb6737b6539f962abc0d93def Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 10:52:55 +0200 Subject: [PATCH 27/38] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8b8d1c0..4e61e6c 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ More information about the project and full documentation can be found at https: ## Run changes https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html +- python3 -m pip install --upgrade setuptools wheel - pip install -r requirements.txt - python3 ./scripts/pwr-ui -c ./piweatherrock/piweatherrock-config.json From be4a97158449946097dab3afc560b70b89d06687 Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 10:54:50 +0200 Subject: [PATCH 28/38] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e61e6c..85c174b 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ More information about the project and full documentation can be found at https: ## Run changes https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html - python3 -m pip install --upgrade setuptools wheel -- pip install -r requirements.txt +- python3 -m pip install . - python3 ./scripts/pwr-ui -c ./piweatherrock/piweatherrock-config.json ## Validate Service Data From ad9bd63434f04305a2f54bdff513519095a7a470 Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 10:56:58 +0200 Subject: [PATCH 29/38] Update README.md --- README.md | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 85c174b..a5f382d 100644 --- a/README.md +++ b/README.md @@ -20,22 +20,32 @@ More information about the project and full documentation can be found at https: ## Local Development process -- python3 -m venv env_name -- source env_name/bin/activate - -- git clone https://github.com/carloshm/PiWeatherRock.git -- cd PiWeatherRock -- git pull (for any additional external change after a while) -- Make changes -- git add . -- git commit -m "changes description" -- git push origin main +```python +python3 -m venv env_name +source env_name/bin/activate +``` + +```python +git clone https://github.com/carloshm/PiWeatherRock.git +cd PiWeatherRock +git pull (for any additional external change after a while) +``` + +Make changes + +```python +git add . +git commit -m "changes description" +git push origin main +``` ## Run changes https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html -- python3 -m pip install --upgrade setuptools wheel -- python3 -m pip install . -- python3 ./scripts/pwr-ui -c ./piweatherrock/piweatherrock-config.json +```python +python3 -m pip install --upgrade setuptools wheel +python3 -m pip install . +python3 ./scripts/pwr-ui -c ./piweatherrock/piweatherrock-config.json +``` ## Validate Service Data From dec50dd6b817651f806d31a85fca6831ea37280c Mon Sep 17 00:00:00 2001 From: Fortunata-bit <78501130+Fortunata-bit@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:57:59 +0200 Subject: [PATCH 30/38] Update piweatherrock.es.json --- piweatherrock/intl/data/piweatherrock.es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/piweatherrock/intl/data/piweatherrock.es.json b/piweatherrock/intl/data/piweatherrock.es.json index e612829..5b5fdda 100644 --- a/piweatherrock/intl/data/piweatherrock.es.json +++ b/piweatherrock/intl/data/piweatherrock.es.json @@ -4,7 +4,7 @@ "wind":"Viento:", "humidity":"Humedad absoluta:", "umbrella":"¡Rayos y centellas!", - "no_umbrella":"Hoy no cojas el paraguas, coge la sombrilla", + "no_umbrella":"Hoy no cojas el paraguas!", "today":"hoy", "powered_by":"Weather rock gracias a Dark Sky", "tonight":"esta noche", From 2ae4f0214e3388b3687b6be3cba11e5fb675c095 Mon Sep 17 00:00:00 2001 From: Fortunata-bit <78501130+Fortunata-bit@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:58:07 +0200 Subject: [PATCH 31/38] Update piweatherrock.es.json --- piweatherrock/intl/data/piweatherrock.es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/piweatherrock/intl/data/piweatherrock.es.json b/piweatherrock/intl/data/piweatherrock.es.json index 5b5fdda..cd4be14 100644 --- a/piweatherrock/intl/data/piweatherrock.es.json +++ b/piweatherrock/intl/data/piweatherrock.es.json @@ -4,7 +4,7 @@ "wind":"Viento:", "humidity":"Humedad absoluta:", "umbrella":"¡Rayos y centellas!", - "no_umbrella":"Hoy no cojas el paraguas!", + "no_umbrella":"Hoy no cojas el paraguas", "today":"hoy", "powered_by":"Weather rock gracias a Dark Sky", "tonight":"esta noche", From d4bd30682c8f4cc0f2f109f2c13d0f960cc3b394 Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 11:31:01 +0200 Subject: [PATCH 32/38] Update __init__.py --- piweatherrock/plugin_weather_common/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/piweatherrock/plugin_weather_common/__init__.py b/piweatherrock/plugin_weather_common/__init__.py index a13531f..ca2f567 100644 --- a/piweatherrock/plugin_weather_common/__init__.py +++ b/piweatherrock/plugin_weather_common/__init__.py @@ -462,7 +462,7 @@ def icon_mapping(self, icon, size): Based on that, this method will map the Dark Sky icon name to the name of an icon in this project. """ - if icon == 'clear-day': + if icon == 'clear-day' or icon == 'clear': icon_path = 'icons/{}/clear.png'.format(size) elif icon == 'clear-night': icon_path = 'icons/{}/nt_clear.png'.format(size) From dfb5d448547b91bea778f413fcb7a7680a9b5e83 Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 12:17:05 +0200 Subject: [PATCH 33/38] Update __init__.py --- piweatherrock/plugin_weather_common/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/piweatherrock/plugin_weather_common/__init__.py b/piweatherrock/plugin_weather_common/__init__.py index ca2f567..b79c4c2 100644 --- a/piweatherrock/plugin_weather_common/__init__.py +++ b/piweatherrock/plugin_weather_common/__init__.py @@ -468,6 +468,8 @@ def icon_mapping(self, icon, size): icon_path = 'icons/{}/nt_clear.png'.format(size) elif icon == 'rain': icon_path = 'icons/{}/rain.png'.format(size) + elif icon == 'chancerain': + icon_path = 'icons/{}/chancerain.png'.format(size) elif icon == 'snow': icon_path = 'icons/{}/snow.png'.format(size) elif icon == 'sleet': @@ -478,9 +480,9 @@ def icon_mapping(self, icon, size): icon_path = 'icons/{}/fog.png'.format(size) elif icon == 'cloudy': icon_path = 'icons/{}/cloudy.png'.format(size) - elif icon == 'partly-cloudy-day': + elif icon == 'partly-cloudy-day' or icon == 'partlycloudy': icon_path = 'icons/{}/partlycloudy.png'.format(size) - elif icon == 'partly-cloudy-night': + elif icon == 'partly-cloudy-night' or icon == 'nt_partlycloudy': icon_path = 'icons/{}/nt_partlycloudy.png'.format(size) else: icon_path = 'icons/{}/unknown.png'.format(size) From b06fe1a3b2f9d41983b03cd905b2f4c1a210522c Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 12 Aug 2024 12:37:58 +0200 Subject: [PATCH 34/38] Update __init__.py --- .../plugin_weather_common/__init__.py | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/piweatherrock/plugin_weather_common/__init__.py b/piweatherrock/plugin_weather_common/__init__.py index b79c4c2..9627726 100644 --- a/piweatherrock/plugin_weather_common/__init__.py +++ b/piweatherrock/plugin_weather_common/__init__.py @@ -462,28 +462,40 @@ def icon_mapping(self, icon, size): Based on that, this method will map the Dark Sky icon name to the name of an icon in this project. """ - if icon == 'clear-day' or icon == 'clear': + if icon == 'clear': icon_path = 'icons/{}/clear.png'.format(size) - elif icon == 'clear-night': - icon_path = 'icons/{}/nt_clear.png'.format(size) + elif icon == 'mostlysunny': + icon_path = 'icons/{}/mostlysunny.png'.format(size) + elif icon == 'partlycloudy': + icon_path = 'icons/{}/partlycloudy.png'.format(size) + elif icon == 'cloudy': + icon_path = 'icons/{}/cloudy.png'.format(size) + elif icon == 'fog': + icon_path = 'icons/{}/fog.png'.format(size) + elif icon == 'hazy': + icon_path = 'icons/{}/hazy.png'.format(size) elif icon == 'rain': icon_path = 'icons/{}/rain.png'.format(size) elif icon == 'chancerain': icon_path = 'icons/{}/chancerain.png'.format(size) + elif icon == 'chainsleet': + icon_path = 'icons/{}/chainsleet.png'.format(size) elif icon == 'snow': icon_path = 'icons/{}/snow.png'.format(size) elif icon == 'sleet': icon_path = 'icons/{}/sleet.png'.format(size) elif icon == 'wind': icon_path = 'icons/alt_icons/{}/wind.png'.format(size) - elif icon == 'fog': - icon_path = 'icons/{}/fog.png'.format(size) - elif icon == 'cloudy': - icon_path = 'icons/{}/cloudy.png'.format(size) - elif icon == 'partly-cloudy-day' or icon == 'partlycloudy': - icon_path = 'icons/{}/partlycloudy.png'.format(size) - elif icon == 'partly-cloudy-night' or icon == 'nt_partlycloudy': - icon_path = 'icons/{}/nt_partlycloudy.png'.format(size) + elif icon == 'chancesnow': + icon_path = 'icons/alt_icons/{}/chancesnow.png'.format(size) + elif icon == 'tstorms' or icon == 'tstorm': + icon_path = 'icons/alt_icons/{}/tstorm.png'.format(size) + elif icon == 'chanceflurries': + icon_path = 'icons/alt_icons/{}/chanceflurries.png'.format(size) + elif icon == 'flurries': + icon_path = 'icons/alt_icons/{}/flurries.png'.format(size) + elif icon == 'chancetstorms': + icon_path = 'icons/alt_icons/{}/chancetstorms.png'.format(size) else: icon_path = 'icons/{}/unknown.png'.format(size) From bd0da1f827235e5a34af912cc0193322b0237a60 Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 28 Aug 2024 16:21:01 +0200 Subject: [PATCH 35/38] Add files via upload --- .../icons/alt_icons/64/tstorm.png | Bin 0 -> 1231 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 piweatherrock/plugin_weather_common/icons/alt_icons/64/tstorm.png diff --git a/piweatherrock/plugin_weather_common/icons/alt_icons/64/tstorm.png b/piweatherrock/plugin_weather_common/icons/alt_icons/64/tstorm.png new file mode 100644 index 0000000000000000000000000000000000000000..285f9608301326abfd981cd41710253dd6bde89e GIT binary patch literal 1231 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz?c`{6XFWw{>K1v^+zCL-l{+#UW}SR)1Y4FIavMYF!J+Z4mQ+uMh3xf4G?rxgsqnBpzIx{P zu}yROnnD~b%?&lB1$kMRfBn3B`_S&KTi33dGP$laCoVA1-^t!kS6z|w-|ZXMuU$R3 zf5U>=Q@T1kI@;=LYbr{L^HY-(!<~$Db#!!;<@xz|j-TK4pMimCj;D)bNW|f{SJTUH z8Az}`;6AIA;=s`;U^Hv5`)rfkG~?Sn@AiJb_jc-n|NDewl0OIt*nOR26VI~gZ;@&w z)AE1(dmpNq9a;aVg=xzb*#%X1b;R7aChd&(TPi3cpS{4SdDWK5JconU@Aq4%^s?VN z_W;99gKnk6Dz^i!oiW%tAx~zy&?=Qvk_*@J^J#^cpRw}PV++a`{<3GfO3y2gzG(S} z*IeHnSTHq3fNlRtZ-X7K*A90q`B}t~R+!vaRm7bpeT+%?iObK>w)HE|Z3=E+{2#tj z-|dy9nextwpJE-&dgnD>lzg`5gWlc1e>WtPthcIKm`-%o@XtT?IB@P&*|YDo;@h5R zd9}nupYKUozj(2*+q)yNec>N$S3R;&2>1N|^|#HA*E`oAPgrd%D&SNh_oH;_Yz0>N zW+#)wsy=F7?Iq0jzS%G@I6TqPg{_vo;K|0qIj6s!e1D*i>*ERShV1)#6AgFR3M;*; z{kE-I=gp$m20t`gA`0^F%=oKxt8Zm#E*n$h#zV`(&gUN%;$WY0wt&6%pUUGcPpiYa z!VMgwSBS>(xp{H>h}rk+MztM#m|tcl!Lw}QWYMJD->F73Yc?%XU!*G=5>*|za)n06 zBbI9}2jfF>{xVNF-2VB%yNh@3+*!|hN91O$Mt{6>W=wv|!BkEDP-SDmh;OYs*4>_V zW~*GSrO@Jx!<52uOr`Vri{FKUN{NYrUc<7g(F%2D-2V%38 zWRE`#*ZlpNaoNLsyZuh@pUAFW9@+8yMCX&PZ#&Ws9=Ht%T-kr>mdKI;Vst05tTR@Bjb+ literal 0 HcmV?d00001 From e6f52c2ca76dd8409f0ae3596b98e3d4e1f773b0 Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 28 Aug 2024 16:22:11 +0200 Subject: [PATCH 36/38] Add files via upload --- .../icons/alt_icons/256/tstorm.png | Bin 0 -> 4543 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 piweatherrock/plugin_weather_common/icons/alt_icons/256/tstorm.png diff --git a/piweatherrock/plugin_weather_common/icons/alt_icons/256/tstorm.png b/piweatherrock/plugin_weather_common/icons/alt_icons/256/tstorm.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd3111175e26f8644bd9e403e2e90a2994500d2 GIT binary patch literal 4543 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 Date: Wed, 28 Aug 2024 16:22:40 +0200 Subject: [PATCH 37/38] Add files via upload --- .../plugin_weather_common/icons/256/tstorm.png | Bin 0 -> 4543 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 piweatherrock/plugin_weather_common/icons/256/tstorm.png diff --git a/piweatherrock/plugin_weather_common/icons/256/tstorm.png b/piweatherrock/plugin_weather_common/icons/256/tstorm.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd3111175e26f8644bd9e403e2e90a2994500d2 GIT binary patch literal 4543 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 Date: Wed, 28 Aug 2024 16:23:27 +0200 Subject: [PATCH 38/38] Add files via upload --- .../plugin_weather_common/icons/64/tstorm.png | Bin 0 -> 1231 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 piweatherrock/plugin_weather_common/icons/64/tstorm.png diff --git a/piweatherrock/plugin_weather_common/icons/64/tstorm.png b/piweatherrock/plugin_weather_common/icons/64/tstorm.png new file mode 100644 index 0000000000000000000000000000000000000000..285f9608301326abfd981cd41710253dd6bde89e GIT binary patch literal 1231 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz?c`{6XFWw{>K1v^+zCL-l{+#UW}SR)1Y4FIavMYF!J+Z4mQ+uMh3xf4G?rxgsqnBpzIx{P zu}yROnnD~b%?&lB1$kMRfBn3B`_S&KTi33dGP$laCoVA1-^t!kS6z|w-|ZXMuU$R3 zf5U>=Q@T1kI@;=LYbr{L^HY-(!<~$Db#!!;<@xz|j-TK4pMimCj;D)bNW|f{SJTUH z8Az}`;6AIA;=s`;U^Hv5`)rfkG~?Sn@AiJb_jc-n|NDewl0OIt*nOR26VI~gZ;@&w z)AE1(dmpNq9a;aVg=xzb*#%X1b;R7aChd&(TPi3cpS{4SdDWK5JconU@Aq4%^s?VN z_W;99gKnk6Dz^i!oiW%tAx~zy&?=Qvk_*@J^J#^cpRw}PV++a`{<3GfO3y2gzG(S} z*IeHnSTHq3fNlRtZ-X7K*A90q`B}t~R+!vaRm7bpeT+%?iObK>w)HE|Z3=E+{2#tj z-|dy9nextwpJE-&dgnD>lzg`5gWlc1e>WtPthcIKm`-%o@XtT?IB@P&*|YDo;@h5R zd9}nupYKUozj(2*+q)yNec>N$S3R;&2>1N|^|#HA*E`oAPgrd%D&SNh_oH;_Yz0>N zW+#)wsy=F7?Iq0jzS%G@I6TqPg{_vo;K|0qIj6s!e1D*i>*ERShV1)#6AgFR3M;*; z{kE-I=gp$m20t`gA`0^F%=oKxt8Zm#E*n$h#zV`(&gUN%;$WY0wt&6%pUUGcPpiYa z!VMgwSBS>(xp{H>h}rk+MztM#m|tcl!Lw}QWYMJD->F73Yc?%XU!*G=5>*|za)n06 zBbI9}2jfF>{xVNF-2VB%yNh@3+*!|hN91O$Mt{6>W=wv|!BkEDP-SDmh;OYs*4>_V zW~*GSrO@Jx!<52uOr`Vri{FKUN{NYrUc<7g(F%2D-2V%38 zWRE`#*ZlpNaoNLsyZuh@pUAFW9@+8yMCX&PZ#&Ws9=Ht%T-kr>mdKI;Vst05tTR@Bjb+ literal 0 HcmV?d00001