79
79
Change Log
80
80
==========
81
81
82
+ * 23/11/20: Added support for day of the week in the current local language
82
83
* 01/11/19: Corrected an issue where the Items were not linking.
83
84
* 01/12/19: Removed Forecast_Temperature_X, and added
84
85
Forecast_Temperature_High_X and Forecast_Temperature_Low_X
105
106
* -6/14/20: Only check for SCALE transformation service if using Linux OS
106
107
* 06/14/20: Using System properties for HTTP/HTTPS ports, rather than hard coded 8080/8443
107
108
"""
109
+ from __future__ import unicode_literals
108
110
from core .log import logging , LOG_PREFIX , log_traceback
111
+ from core .actions import Transformation
109
112
110
113
111
114
@log_traceback
@@ -128,6 +131,36 @@ def remove_owm_items():
128
131
129
132
#remove_owm_items()
130
133
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 )
131
164
132
165
def add_owm_items ():
133
166
add_owm_items .log = logging .getLogger ("{}.add_owm_items" .format (LOG_PREFIX ))
@@ -217,60 +250,60 @@ def add_owm_items():
217
250
add_owm_items .log .warn ("Scale transformation service installation failed: REST API return None" )
218
251
return
219
252
253
+ current_label = get_label ("CURRENT" )
220
254
# create Current group and Items
221
255
if itemRegistry .getItems ("gOpenWeatherMap" ) == []:
222
256
add_item ("gOpenWeatherMap" , item_type = "Group" , groups = ["gWeather" ], label = "OpenWeatherMap" , tags = ["OpenWeatherMap" ])
223
257
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" ])
225
259
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" ])
227
261
add_link ("Current_Timestamp" , ChannelUID (owm_thing_uid + ":current#time-stamp" ))
228
262
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" ])
230
264
add_link ("Current_Condition" , ChannelUID (owm_thing_uid + ":current#condition" ))
231
265
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" ])
233
267
add_link ("Current_ConditionID" , ChannelUID (owm_thing_uid + ":current#condition-id" ))
234
268
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" ])
236
270
add_link ("Current_IconID" , ChannelUID (owm_thing_uid + ":current#icon-id" ))
237
271
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" ])
239
273
add_link ("Current_Icon" , ChannelUID (owm_thing_uid + ":current#icon" ))
240
274
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" ])
242
276
add_link ("Current_Temperature" , ChannelUID (owm_thing_uid + ":current#temperature" ))
243
277
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" ])
245
279
add_link ("Current_Pressure" , ChannelUID (owm_thing_uid + ":current#pressure" ))
246
280
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" ])
248
282
add_link ("Current_Humidity" , ChannelUID (owm_thing_uid + ":current#humidity" ))
249
283
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" ])
251
285
add_link ("Current_WindSpeed" , ChannelUID (owm_thing_uid + ":current#wind-speed" ))
252
286
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" ])
254
288
add_link ("Current_GustSpeed" , ChannelUID (owm_thing_uid + ":current#gust-speed" ))
255
289
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" ])
257
291
add_link ("Current_WindDirection" , ChannelUID (owm_thing_uid + ":current#wind-direction" ))
258
292
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" ])
260
294
add_link ("Current_Cloudiness" , ChannelUID (owm_thing_uid + ":current#cloudiness" ))
261
295
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" ])
263
297
add_link ("Current_RainVolume" , ChannelUID (owm_thing_uid + ":current#rain" ))
264
298
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" ])
266
300
add_link ("Current_SnowVolume" , ChannelUID (owm_thing_uid + ":current#snow" ))
267
301
268
302
# create Forecast groups
269
- import calendar
270
303
from org .joda .time import DateTime
271
304
last_reading = DateTime (str (items ["Current_Timestamp" ])).getDayOfWeek () - 1
272
305
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 )
274
307
if itemRegistry .getItems ("gForecast_" + str (index )) == []:
275
308
add_item ("gForecast_" + str (index ), item_type = "Group" , groups = ["gOpenWeatherMap" ], label = day_of_the_week , tags = ["OpenWeatherMap" ])
276
309
if itemRegistry .getItems ("gForecast_Timestamp_" + str (index )) == []:
@@ -392,10 +425,9 @@ def add_owm_items_to_groups(event):
392
425
393
426
# update group labels to reflect week day
394
427
from org .joda .time import DateTime
395
- import calendar
396
428
last_reading = DateTime (str (items ["Current_Timestamp" ])).getDayOfWeek () - 1
397
429
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 )
399
431
itemRegistry .getItem ("gForecast_" + str (index )).setLabel (day_of_the_week )
400
432
itemRegistry .getItem ("gForecast_Timestamp_" + str (index )).setLabel (day_of_the_week + ": Timestamp" )
401
433
itemRegistry .getItem ("gForecast_Condition_" + str (index )).setLabel (day_of_the_week + ": Condition [%s]" )
0 commit comments