Мониторинг работы интернета в Home Assistant

У меня установлено два сервера Home Assistant. Один в квартире, второй на даче. По тому как они устроены они очень похожи друг на друга. Железка Raspberry Pi 3B+, операционная система Raspbian и Home Assistant установленный в виде набора докер контейнеров Hassio.

Дома интернет работает исключительно стабильно. Я вот сейчас попытался вспомнить когда он в последний раз ломался и мне это не удалось. Кажется, вообще не было одного сбоя. А вот на даче ситуация похуже. Все-таки иногда что-то там ломается у провайдера и интернет бывает что пропадает. Но в общем и целом, то как работает интернет на даче меня устраивает.

Но все-таки мне хочется как-то следить за тем работает ли интернет или нет. Если сейчас интернет не работает, то я хочу знать когда он в последний раз работал. И еще я хочу видеть когда были проблемы с работой интернета. И я хочу это знать про обе точки.

Как проверить что интернет работает? Я обычно захожу в терминал и пишу что-то вроде

ping google.com

Пакеты пошли — работает. Не пошли — скорее всего интернета нет, но я на всякий случай еще делаю ping yandex.ru Вдруг это Google лежит. Если уж и Яндекс не отвечает, что точно интернет не работает.

Вот ровно такую логику и я запихнул в Home Assistant:

binary_sensor:
  - platform: ping
    host: google.com
    count: 2
    scan_interval: 60
    name: google_is_available
  - platform: ping
    host: ya.ru
    count: 2
    scan_interval: 60
    name: yandex_is_available
  - platform: template
    sensors:
      internet_is_available:
        value_template: "{{ states('binary_sensor.google_is_available') == 'on' or states('binary_sensor.yandex_is_available') == 'on' }}"
        device_class: connectivity

Каждую минуту пингуется и Google, и Яндекс. Считаю что интернет работает если отвечает хотя бы один из них.

Эти настройки я поместил в оба своих инстанса Home Assistant. И отобразил в интерфейсе Home Assistant карточку history-graph с данными этих сенсоров.

Стало уже лучше, но пока еще не совсем. Вот я нахожусь дома. Интернет дома пропадает. Я из дома могу локально зайти на свой домашний инстанс Home Assistant и проверить когда в последний раз интернет работал.

Но если я сейчас дома, а интернет пропадает на даче, то я никак не могу узнать как давно на даче нет интернета (я не могу зайти на сервер HA на котором есть эти данные).

Так что я добавил еще два сенсора:

binary_sensor:
  - platform: command_line
    command: 'curl --silent -XGET --max-time 1 -I https://my-dacha.ru/|head -1|grep -q "HTTP/1.1 200 OK" && (echo "ON") || (echo "OFF")'
    name: dacha_is_working
    scan_interval: 60
    command_timeout: 1
  - platform: command_line
    command: 'curl --silent -XGET --max-time 1 -I https://my-home.ru/|head -1|grep -q "HTTP/1.1 200 OK" && (echo "ON") || (echo "OFF")'
    name: home_is_working
    scan_interval: 60
    command_timeout: 1

Оба моих инстанса Home Assistant доступны извне. Эти сенсоры каждую минуту проверяют что мои сайты HA работают.

Для простоты на обоих инстансах Home Assistant у меня абсолютно одинаковые настройки (в теории из дома можно проверять только дачу, а с дачи только дом, но мне удобнее чтобы везде все было одинаково)

Вот только что у меня был кратковременный сбой в работе интернета на даче. Вот что видно на history-graph

На графиках хорошо виден момент когда на даче не было интернета, и еще виден кратковременный сбой дома — это я перезагружал Home Assistant после изменения конфигов.

В любой момент, где бы я не находился я могу с телефона зайти на один или второй сервер HA и узнать статус работы интернета на всех моих серверах Home Assistant.

Иван Бессарабов
ivan@bessarabov.ru

8 апреля 2020

Кстати, у меня есть телеграм канал про Home Assistant: https://t.me/bessarabov_ha