Skip to content

Commit 55b788b

Browse files
committed
Localized name of the day in the week
1 parent 5e6bee7 commit 55b788b

File tree

4 files changed

+78
-19
lines changed

4 files changed

+78
-19
lines changed

Community/OpenWeatherMap/automation/jsr223/python/community/openweathermap/owm_daily_forecast.py

Lines changed: 51 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
Change Log
8080
==========
8181
82+
* 23/11/20: Added support for day of the week in the current local language
8283
* 01/11/19: Corrected an issue where the Items were not linking.
8384
* 01/12/19: Removed Forecast_Temperature_X, and added
8485
Forecast_Temperature_High_X and Forecast_Temperature_Low_X
@@ -105,7 +106,9 @@
105106
* -6/14/20: Only check for SCALE transformation service if using Linux OS
106107
* 06/14/20: Using System properties for HTTP/HTTPS ports, rather than hard coded 8080/8443
107108
"""
109+
from __future__ import unicode_literals
108110
from core.log import logging, LOG_PREFIX, log_traceback
111+
from core.actions import Transformation
109112

110113

111114
@log_traceback
@@ -128,6 +131,36 @@ def remove_owm_items():
128131

129132
#remove_owm_items()
130133

134+
@log_traceback
135+
def current_lang():
136+
"""
137+
Determines the current language of the openhab.
138+
You need to assure you have setup JAVA_OPTS in the start.sh to your preferred language and country, e.g.
139+
EXTRA_JAVA_OPTS="-Duser.language=pl -Duser.country=PL"
140+
"""
141+
default_locale = locale.getdefaultlocale()[0]
142+
if default_locale:
143+
return default_locale if "_" not in default_locale else default_locale.split("_")[0]
144+
return "en"
145+
146+
@log_traceback
147+
def map_day_of_week(index, last_reading):
148+
"""
149+
Method calculates the day index and maps into the day of the week for the current language
150+
151+
Args:
152+
index: Forecast group id
153+
last_reading: Forecast group id of the last reading
154+
155+
Returns:
156+
str: A name of the day in the week for current language
157+
"""
158+
day_week_idx = "TODAY" if index == 1 else str((last_reading + index - 1) % 7)
159+
return get_label(day_week_idx)
160+
161+
@log_traceback
162+
def get_label(label_key):
163+
return Transformation.transform("MAP", "weather-{}.map".format(current_lang()), label_key)
131164

132165
def add_owm_items():
133166
add_owm_items.log = logging.getLogger("{}.add_owm_items".format(LOG_PREFIX))
@@ -217,60 +250,60 @@ def add_owm_items():
217250
add_owm_items.log.warn("Scale transformation service installation failed: REST API return None")
218251
return
219252

253+
current_label = get_label("CURRENT")
220254
# create Current group and Items
221255
if itemRegistry.getItems("gOpenWeatherMap") == []:
222256
add_item("gOpenWeatherMap", item_type="Group", groups=["gWeather"], label="OpenWeatherMap", tags=["OpenWeatherMap"])
223257
if itemRegistry.getItems("gCurrent") == []:
224-
add_item("gCurrent", item_type="Group", groups=["gOpenWeatherMap"], label="Current", tags=["OpenWeatherMap"])
258+
add_item("gCurrent", item_type="Group", groups=["gOpenWeatherMap"], label=current_label, tags=["OpenWeatherMap"])
225259
if itemRegistry.getItems("Current_Timestamp") == []:
226-
add_item("Current_Timestamp", item_type="DateTime", groups=["gCurrent", "gForecast_Timestamp_1"], label="Current: Timestamp [%1$tY-%1$tm-%1$td %1$tI:%1$tM%1$tp]", category="Time", tags=["OpenWeatherMap"])
260+
add_item("Current_Timestamp", item_type="DateTime", groups=["gCurrent", "gForecast_Timestamp_1"], label=current_label+": Timestamp [%1$tY-%1$tm-%1$td %1$tI:%1$tM%1$tp]", category="Time", tags=["OpenWeatherMap"])
227261
add_link("Current_Timestamp", ChannelUID(owm_thing_uid + ":current#time-stamp"))
228262
if itemRegistry.getItems("Current_Condition") == []:
229-
add_item("Current_Condition", item_type="String", groups=["gCurrent", "gForecast_Condition_1"], label="Current: Condition [%s]", category="Sun_Clouds", tags=["OpenWeatherMap"])
263+
add_item("Current_Condition", item_type="String", groups=["gCurrent", "gForecast_Condition_1"], label=current_label+": Condition [%s]", category="Sun_Clouds", tags=["OpenWeatherMap"])
230264
add_link("Current_Condition", ChannelUID(owm_thing_uid + ":current#condition"))
231265
if itemRegistry.getItems("Current_ConditionID") == []:
232-
add_item("Current_ConditionID", item_type="String", groups=["gCurrent", "gForecast_ConditionID_1"], label="Current: Condition ID [%s]", tags=["OpenWeatherMap"])
266+
add_item("Current_ConditionID", item_type="String", groups=["gCurrent", "gForecast_ConditionID_1"], label=current_label+": Condition ID [%s]", tags=["OpenWeatherMap"])
233267
add_link("Current_ConditionID", ChannelUID(owm_thing_uid + ":current#condition-id"))
234268
if itemRegistry.getItems("Current_IconID") == []:
235-
add_item("Current_IconID", item_type="String", groups=["gCurrent", "gForecast_IconID_1"], label="Current: Icon ID [%s]", tags=["OpenWeatherMap"])
269+
add_item("Current_IconID", item_type="String", groups=["gCurrent", "gForecast_IconID_1"], label=current_label+": Icon ID [%s]", tags=["OpenWeatherMap"])
236270
add_link("Current_IconID", ChannelUID(owm_thing_uid + ":current#icon-id"))
237271
if itemRegistry.getItems("Current_Icon") == []:
238-
add_item("Current_Icon", item_type="Image", groups=["gCurrent", "gForecast_Icon_1"], label="Current: Icon", tags=["OpenWeatherMap"])
272+
add_item("Current_Icon", item_type="Image", groups=["gCurrent", "gForecast_Icon_1"], label=current_label+": Icon", tags=["OpenWeatherMap"])
239273
add_link("Current_Icon", ChannelUID(owm_thing_uid + ":current#icon"))
240274
if itemRegistry.getItems("Current_Temperature") == []:
241-
add_item("Current_Temperature", item_type="Number:Temperature", groups=["gCurrent", "gForecast_Temperature_High_1", "gForecast_Temperature_Low_1"], label="Current: Temperature [%.0f %unit%]", category="Temperature", tags=["OpenWeatherMap"])
275+
add_item("Current_Temperature", item_type="Number:Temperature", groups=["gCurrent", "gForecast_Temperature_High_1", "gForecast_Temperature_Low_1"], label=current_label+": Temperature [%.0f %unit%]", category="Temperature", tags=["OpenWeatherMap"])
242276
add_link("Current_Temperature", ChannelUID(owm_thing_uid + ":current#temperature"))
243277
if itemRegistry.getItems("Current_Pressure") == []:
244-
add_item("Current_Pressure", item_type="Number:Pressure", groups=["gCurrent", "gForecast_Pressure_1"], label="Current: Pressure [%.1f %unit%]", category="Pressure", tags=["OpenWeatherMap"])
278+
add_item("Current_Pressure", item_type="Number:Pressure", groups=["gCurrent", "gForecast_Pressure_1"], label=current_label+": Pressure [%.1f %unit%]", category="Pressure", tags=["OpenWeatherMap"])
245279
add_link("Current_Pressure", ChannelUID(owm_thing_uid + ":current#pressure"))
246280
if itemRegistry.getItems("Current_Humidity") == []:
247-
add_item("Current_Humidity", item_type="Number:Dimensionless", groups=["gCurrent", "gForecast_Humidity_1"], label="Current: Humidity [%d %%]", category="Humidity", tags=["OpenWeatherMap"])
281+
add_item("Current_Humidity", item_type="Number:Dimensionless", groups=["gCurrent", "gForecast_Humidity_1"], label=current_label+": Humidity [%d %%]", category="Humidity", tags=["OpenWeatherMap"])
248282
add_link("Current_Humidity", ChannelUID(owm_thing_uid + ":current#humidity"))
249283
if itemRegistry.getItems("Current_WindSpeed") == []:
250-
add_item("Current_WindSpeed", item_type="Number:Speed", groups=["gCurrent", "gForecast_WindSpeed_1"], label="Current: Wind speed [%.0f %unit%]", category="Wind", tags=["OpenWeatherMap"])
284+
add_item("Current_WindSpeed", item_type="Number:Speed", groups=["gCurrent", "gForecast_WindSpeed_1"], label=current_label+": Wind speed [%.0f %unit%]", category="Wind", tags=["OpenWeatherMap"])
251285
add_link("Current_WindSpeed", ChannelUID(owm_thing_uid + ":current#wind-speed"))
252286
if itemRegistry.getItems("Current_GustSpeed") == []:
253-
add_item("Current_GustSpeed", item_type="Number:Speed", groups=["gCurrent", "gForecast_GustSpeed_1"], label="Current: Gust speed [%.0f %unit%]", category="Wind", tags=["OpenWeatherMap"])
287+
add_item("Current_GustSpeed", item_type="Number:Speed", groups=["gCurrent", "gForecast_GustSpeed_1"], label=current_label+": Gust speed [%.0f %unit%]", category="Wind", tags=["OpenWeatherMap"])
254288
add_link("Current_GustSpeed", ChannelUID(owm_thing_uid + ":current#gust-speed"))
255289
if itemRegistry.getItems("Current_WindDirection") == []:
256-
add_item("Current_WindDirection", item_type="Number:Angle", groups=["gCurrent", "gForecast_WindDirection_1"], label="Current: Wind direction [SCALE(windDirection.scale):%s]", category="Wind", tags=["OpenWeatherMap"])
290+
add_item("Current_WindDirection", item_type="Number:Angle", groups=["gCurrent", "gForecast_WindDirection_1"], label=current_label+": Wind direction [SCALE(windDirection.scale):%s]", category="Wind", tags=["OpenWeatherMap"])
257291
add_link("Current_WindDirection", ChannelUID(owm_thing_uid + ":current#wind-direction"))
258292
if itemRegistry.getItems("Current_Cloudiness") == []:
259-
add_item("Current_Cloudiness", item_type="Number:Dimensionless", groups=["gCurrent", "gForecast_Cloudiness_1"], label="Current: Cloudiness [%d %%]", category="Sun_Clouds", tags=["OpenWeatherMap"])
293+
add_item("Current_Cloudiness", item_type="Number:Dimensionless", groups=["gCurrent", "gForecast_Cloudiness_1"], label=current_label+": Cloudiness [%d %%]", category="Sun_Clouds", tags=["OpenWeatherMap"])
260294
add_link("Current_Cloudiness", ChannelUID(owm_thing_uid + ":current#cloudiness"))
261295
if itemRegistry.getItems("Current_RainVolume") == []:
262-
add_item("Current_RainVolume", item_type="Number:Length", groups=["gCurrent", "gForecast_RainVolume_1"], label="Current: Rain volume [%.1f %unit%]", category="Rain", tags=["OpenWeatherMap"])
296+
add_item("Current_RainVolume", item_type="Number:Length", groups=["gCurrent", "gForecast_RainVolume_1"], label=current_label+": Rain volume [%.1f %unit%]", category="Rain", tags=["OpenWeatherMap"])
263297
add_link("Current_RainVolume", ChannelUID(owm_thing_uid + ":current#rain"))
264298
if itemRegistry.getItems("Current_SnowVolume") == []:
265-
add_item("Current_SnowVolume", item_type="Number:Length", groups=["gCurrent", "gForecast_SnowVolume_1"], label="Current: Snow volume [%.1f %unit%]", category="Snow", tags=["OpenWeatherMap"])
299+
add_item("Current_SnowVolume", item_type="Number:Length", groups=["gCurrent", "gForecast_SnowVolume_1"], label=current_label+": Snow volume [%.1f %unit%]", category="Snow", tags=["OpenWeatherMap"])
266300
add_link("Current_SnowVolume", ChannelUID(owm_thing_uid + ":current#snow"))
267301

268302
# create Forecast groups
269-
import calendar
270303
from org.joda.time import DateTime
271304
last_reading = DateTime(str(items["Current_Timestamp"])).getDayOfWeek() - 1
272305
for index in range(1, 6):
273-
day_of_the_week = "Today" if index == 1 else calendar.day_name[(last_reading + index - 1) % 7]
306+
day_of_the_week = map_day_of_week(index, last_reading)
274307
if itemRegistry.getItems("gForecast_" + str(index)) == []:
275308
add_item("gForecast_" + str(index), item_type="Group", groups=["gOpenWeatherMap"], label=day_of_the_week, tags=["OpenWeatherMap"])
276309
if itemRegistry.getItems("gForecast_Timestamp_" + str(index)) == []:
@@ -392,10 +425,9 @@ def add_owm_items_to_groups(event):
392425

393426
# update group labels to reflect week day
394427
from org.joda.time import DateTime
395-
import calendar
396428
last_reading = DateTime(str(items["Current_Timestamp"])).getDayOfWeek() - 1
397429
for index in range(1, 6):
398-
day_of_the_week = "Today" if index == 1 else calendar.day_name[(last_reading + index - 1) % 7]
430+
day_of_the_week = map_day_of_week(index, last_reading)
399431
itemRegistry.getItem("gForecast_" + str(index)).setLabel(day_of_the_week)
400432
itemRegistry.getItem("gForecast_Timestamp_" + str(index)).setLabel(day_of_the_week + ": Timestamp")
401433
itemRegistry.getItem("gForecast_Condition_" + str(index)).setLabel(day_of_the_week + ": Condition [%s]")
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
0=Montag
2+
1=Dienstag
3+
2=Dienstag
4+
3=Donnerstag
5+
4=Freitag
6+
5=Samstag
7+
6=Sonntag
8+
TODAY=Heute
9+
CURRENT=Aktuell
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
0=Monday
2+
1=Tuesday
3+
2=Wednesday
4+
3=Thursday
5+
4=Friday
6+
5=Saturday
7+
6=Sunday
8+
TODAY=Today
9+
CURRENT=Current
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
0=Poniedziałek
2+
1=Wtorek
3+
2=Śaroda
4+
3=Czwartek
5+
4=Piątek
6+
5=Sobota
7+
6=Niedziela
8+
TODAY=Dzisiaj
9+
CURRENT=Bieżąca

0 commit comments

Comments
 (0)