Сервер работает на МиниПК: https://alii.pub/75csno?erid=2SDnjdoJ2kU
Прогнозы погоды обычно нас не оповещают о том, что скоро может начаться дождь. Понятно, что всегда можно “взглянуть на небо и посмотреть как плывут облака”, но в городе, где здания высокие – не всегда видно это самое небо. Тучка может подкрасться незаметно.
Да и вообще, если дождь начнётся только через 2 часа, вы еще на небе ничего ужасного не увидите, но за 2 часа возможно не успеете управиться со своими делами на открытом воздухе.
Так вот, в этой статье, хочется показать, как можно брать прогноз погоды с сайта Яндекс погоды и в случае того, как прогноз погоды в яндексе поменяется на статус “через 2 часа пойдёт дождь”, нам придёт оповещение об этом в Telegram.
Автоматизация:
Автоматизация выглядит следующим образом:
weather_telegram:
command_line:
- sensor:
name: Прогноз дождя
command: |
wget -q --user-agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36' "https://yandex.ru/pogoda?lat={{states.zone.home.attributes.latitude}}&lon={{states.zone.home.attributes.longitude}}" -O /dev/stdout | sed 's/>/>\n/g' | grep ".maps-widget-fact__title" -A1 | tail -1 | sed 's/<\/div>//g' | sed 's|.*\. ||' | sed 's|||'
scan_interval: 1200
automation:
- id: "weather_telegramm"
alias: "Телеграмм: прогноз дождя по расписанию и кнопке"
description: ""
trigger:
- platform: event
event_type: telegram_command
event_data:
command: /weather
- platform: template
value_template:
'{{ states("sensor.time") == "08:30" }}'
- platform: state
entity_id: sensor.prognoz_dozhdia
to:
condition:
- condition: template
value_template: "{{ states('sensor.prognoz_dozhdia')!= ''}}"
- condition: template
value_template: "{{ states('sensor.prognoz_dozhdia')!= 'Открыть карту осадков' }}"
- condition: template
value_template: "{{ states('sensor.prognoz_dozhdia') in ['В течение 2 часов ожидается дождь', 'В течение часа ожидается дождь'] }}"
action:
- action: telegram_bot.send_message
data:
message: |
{{ states('sensor.prognoz_dozhdia') }}
Эта автоматизация для packege. Следовательно там файлик и нужно создавать.
В этой автоматизации длинное выражение начинающееся с wget. Тянет с сайта яндекс погоду и парсит её, выбирая оттуда нужные параметры и записывает в сенсор sensor.prognoz_dozhdia.
В этот сенсор записываются значения: “В ближайшие 2 часа осадков не ожидается” “В течение часа ожидается дождь” “В течение 30 минут ожидается дождь” и так далее.
Погода проверяется каждые 20 минут. И как только в сенсоре изменяется значение (показание), он её отправляет в telegram. И получалось довольно много всего. Это видно по сообщениям в чате:
И вот чтоб такого не было, я решил оставить только 2 прогноза погоды, это
'В течение 2 часов ожидается дождь', 'В течение часа ожидается дождь'
Так как мне важно, чтоб оповещало до того, как дождь начнётся и не особо важно, что дождь не начнётся или закончится через какое-то время.
Если хотите получать все уведомления, то закомментируйте эту строчки:
- condition: template
value_template: "{{ states('sensor.prognoz_dozhdia') in ['В течение 2 часов ожидается дождь', 'В течение часа ожидается дождь'] }}"
И еще один момент, в виде кода у меня не добавлялось корректно выражение начинающееся с wget. пришлось его немного изменить, по этому прикладываю полную версию строчки сюда. По этому её надо копировать отсюда и в автоматизацию вставить:
wget -q –user-agent=’Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36′ “https://yandex.ru/pogoda?lat={{states.zone.home.attributes.latitude}}&lon={{states.zone.home.attributes.longitude}}” -O /dev/stdout | sed ‘s/>/>\n/g’ | grep “.maps-widget-fact__title” -A1 | tail -1 | sed ‘s/<\/div>//g’ | sed ‘s|.*\. ||’ | sed ‘s|</p>||’
Ну или файл автоматизации на всякий случай еще прикладываю сюда, чтоб наверняка копировалось правильно: https://disk.yandex.ru/d/Z6kcUStu4NA33Q
Так-же еще автоматизация сама пришлёт прогноз в 8:30 утра, но если у Вас стоит фильтр на дождь, то не пришлёт ничего, если не будет дождя.
И самому можно запросить прогноз по кнопке /weather.
Вывод:
Тема с прогнозом дождя весьма любопытна в реализации. Я эту автоматизацию стырил у знакомого. И то как прогноз дождя делается, путём запроса сайта яндекс и распарсивая его – это прям весьма находчиво и не требует каких-то дополнительных интеграций. Все делается с штатными средствами linux, программой wget.