Блог

Уведомление о погоде в Telegram с Emoji (OpenWeatherMap)+видео

Не так давно, в прошлом году, я уже делал запись в блоге на эту тему, правда тогда речь шла о Яндекс Погоде. В сегодняшнем видео я покажу как проделать тоже самое но с интеграцией Open Weather Map, заодно покажу как можно настраивать шаблоны перед этим немного поковырявшись в исходном коде интеграции.

В видео я постарался рассказать обо всём процессе максимально подробно

Листинг шаблона

Доброе утро! За окном: {%- set current = states('sensor.openweathermap_weather_code')|int %} {%- set conditions = { 'Туман \U0001F32B': [701, 741], 'Гроза \U0001F329': [210, 211, 212, 221], 'Дождь/Гроза \U000026C8': [200, 201, 202, 230, 231, 232], 'Облачно \U000026C5': [801, 802, 803, 804], 'Дождь \U00002614': [504, 314, 502, 503, 522, 300, 301, 302, 310, 311, 312, 313, 500, 501, 520, 521, 906], 'Снег \U00002744': [600, 601, 602, 611, 612, 620, 621, 622], 'Снег с дождём \U00002614\U00002744': [511, 615, 616], 'Ясно \U00002600': [800], 'Ветер \U0001F4A8': [905, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961], 'Внимание \U000026A0': [711, 721, 731, 751, 761, 762, 771, 900, 901, 962, 903, 904] } %} {%- for condition, value in conditions.items() %} {%- if current in value %} {{- " " condition}} {%- endif %} {%- endfor %} Температура: {{- " " state_attr('weather.openweathermap', 'temperature')|string }} Скорость ветра: {{- " " state_attr('weather.openweathermap', 'wind_speed')|string }}

UPD

ВНИМАНИЕ!

По какой-то причине, пропадают символы конкатенации (плюсы), правильно строки должны быть записаны так(без пробелов):

{{- " " плюс condition}}

Температура:{{- " " плюс state_attr('weather.openweathermap', 'temperature')|string }}

Скорость ветра:{{- " " плюс state_attr('weather.openweathermap', 'wind_speed')|string }}


Чтото не получается в панели разработчика шаблоны вставляю такой код

{%- set current = states('sensor.openweathermap_weather_code')|int %}
{%- set conditions = {
'Туман \U0001F32B': [701, 741],
'Гроза \U0001F329': [210, 211, 212, 221],
'Дождь/Гроза \U000026C8': [200, 201, 202, 230, 231, 232],
'Облачно \U000026C5': [801, 802, 803, 804],
'Дождь \U00002614': [504, 314, 502, 503, 522, 300, 301, 302, 310, 311, 312, 313, 500, 501, 520, 521, 906],
'Снег \U00002744': [600, 601, 602, 611, 612, 620, 621, 622],
'Снег с дождём \U00002614\U00002744': [511, 615, 616],
'Ясно \U00002600': [800],
'Ветер \U0001F4A8': [905, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961],
'Внимание \U000026A0': [711, 721, 731, 751, 761, 762, 771, 900, 901, 962, 903, 904]
} %}
{%- for condition, value in conditions.items() %}
{%- if current in value %}
{{- " " condition}}
{%- endif %}
{%- endfor %}

И ругается 

TemplateSyntaxError: expected token 'end of print statement', got 'condition'

У вас «+» пропущен и здесь и во втором случае. Посмотрите видео, там подробно всё. 

Хм, в коде тут он тоже пропал, странно. 

И еще ругается на шаблон {{- " " state_attr('weather.openweathermap', 'temperature')|string }}

TemplateSyntaxError: expected token 'end of print statement', got 'state_attr'

Видео не доступно

Странно. У меня показывает. 
А так? 
и вот https://youtu.be/3fvCF724JAI">ссылкой

Так работает. Спасибо

мне видео доступно 

супер, спасибо


единственное, мне непонятно такое большое значение wind_speed


для последующих периодов в прогнозе оно кратно меньше, даже в примере на видео - текущее 14, считать, что это в м/с (как привычно всем воспринимать этот показатель) - это чересчур сильный ветер


мне показалось, что в ответе на запрос интеграции openweathermap используются единицы измерения Imperial - там как раз miles/h, но это может касаться только текущей погоды - дальше, вроде привычные нам м/с


проверил у себя в автоматизации - то же самое - показывает действующую скорость 18 сейчас - но за окном (и в других прогнозах и сервисах погоды - скорость 3-4 м/с), дальнейшие прогнозы в openweathermap тоже 3-4 м/с


можете уточнить, нужно ли использовать доп.коэффициент в автоматизации к этому показателю?

Я, честно говоря, не обратил на это внимания ) 
Но в целом, можно прямо в шаблоне перевести в нужные единицы измерения, операции не сложные, особых проблем не вызовет.

а не подскажете, как?

я пробовал 



Скорость ветра:
{{- " " state_attr('weather.openweathermap', 'wind_speed'/2,237)|string }

но, видимо, в лоб не получилось - ошибка

а как правильно закрывать, как то не догадался

Во-первых, вместо запятой всегда точка. 
Во-вторых, шаблон выполняется слева направо, просто запомните, будет легче. Ну и действия в скобках всегда первыми.
Вот так должно выглядеть:
{{- " "плюс*(state_attr('weather.openweathermap', 'wind_speed')/2.237)|round(2)|string}}


Давайте разберём.


Получаем значение сенсора и меняем его единицы измерения, для этого математическую операцию заключаем в скобки, после чего получившейся результат округляем до двух символов после запятой (можно больше, можно меньше, от вашего желания) и затем его переводим в строку, чтобы сработала конкатенация (объединение строк). 


Надеюсь понятно объяснил :) 


* замените на символ плюса, шаблонизатор спрута что-то не любит этот знак. 

АГА!

супер, понятно, то есть значение переменной не 

 'wind_speed',  а  ('weather.openweathermap', 'wind_speed')

спасибо, вроде как то посчиталось....теперь скорость 6,44 - надеюсь это м/с (так как коэфф-т 2,237 - это при условии, что openweathermap выдает в милях/час)

ну сам сайт сейчас показывает скорость ветра 4 м/сек...наверное выдает в фт/сек.

попробовал изменить к-т на 3.280839912

теперь скорость выдает 4,39 м/с, так как это ближе, оставлю этот коэффициент

еще раз спасибо

Всем привет! в Openweathermap при парсинге строки в Ардуино можно вытащить еще значение icon - а вот как его в home assistant вытащить? очень полезное значение для меня. был бы очень благодарен если бы посдказали как сделать...


Вернуться назад
Вернуться назад