Найти в Дзене
Smart Home 53

Резервируем серверы Home Assistant

Уже достаточно долгое время использую в своей жизни умный дом на базе одноплатника Raspberry pi и альтернативной системы управления Home Assistant. Не смотря на то, что в последнее время появился достаточно широкий список файлов конфигураций, внося исправления в которые можно не перезагружать сервер HA, перезагружаться все равно приходится, и в этот момент некоторые функции умного дома превращаются в тыкву. А еще с одним сервером жить как-то неспокойно, я привык к резервированию и всегда хочется подстелить соломку.

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

В качестве резервного сервера у меня трудится старый нетбук с установленным debian. На нем развернута полная копия рабочего сервера за некоторыми исключениями, о которых я расскажу подробнее. Также мне понадобилась и третья рабочая машинка, на которую я перенес mqtt брокер и zigbee2mqtt. Сделано это было, чтобы оба сервера могли обращаться к этому mqtt серверу, так как с резервированием mqtt и zigbee2mqtt дела обстоят куда сложнее. В качестве mqtt-сервера выступает Orange Pi Zero, о которой я уже рассказывал в предыдущих статьях.

При резервировании серверов появляется две задачи:

  1. Я не хотел, чтобы на обоих серверах одновременно выполнялись одинаковые автоматизации. Мало ли что может произойти, да и зачем лишний раз нагружать ноутбук. Поэтому автоматизации нужно было включать, только если основной сервер уже не выполняет свои функции
  2. Каким-то образом нужно определять, что основной сервер HA недоступен и только после этого запускать автоматизации на резервном.

Первое что нужно сделать на резервном сервере - отключить включение автоматизаций при загрузке. Для этого в каждой автоматизации нужно добавить параметр

initial_state: false

Если такая строка уже есть, но в ней указано значение true, измените на false.

Это нужно сделать на всех автоматизациях, которые вам не нужны на резервном сервере во время его простоя. Различные системные уведомления о состоянии сервера следует оставить. Отключенные при загрузке автоматизации мы будем включать только тогда, когда наш основной сервер уже не доступен.

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

-2

Далее на основном сервере создадим binary_sensor пингующий наш резервный сервер, выглядить в моем случае это будет вот так:

binary_sensor:
# Пинг Debian netbook
- platform: ping
host: 192.168.1.59
count: 4
name: Debian Netbook
scan_interval: 60

После чего уже на резервном сервере постараемся получить данные с этого сенсора с помощью rest-сенсора. Для чего это нужно? Как только основной сервер зависнет, выключится, уйдет в цикличный ребут - рест сенсор перестанет быть доступным. Это гораздо надежная штука чем просто пинг с резервного сервера, так как сам сервер может пинговаться, а вот Home Assistant не запустится.

Для настройки rest-сенсора нам нужно сначала получить долгосрочный токен доступа. Получать его надо на том сервере, куда вы обращаетесь за сенсором, куда направлен rest-запрос. Открываем наш основной сервер, переходим в настройки профиля по адресу http://192.168.1.59:8123/profile , где 192.168.1.59 - адрес основного сервера. и листаем в самый низ до надписи “Долгосрочные токены доступа”

-3

Нажимаем “Создать токен”

-4

Вводим любое наименование токена, чтобы понимать, что это и для чего было создано, и нажимаем ОК.

-5

Затем скопируйте ваш токен. После того как нажмете ОК, его уже нельзя будет посмотреть, только удалить или сгенерировать еще один.

Далее я поместил свой токен в файл secrets.yaml, но перед ним добавил слово Bearer через пробел.

haprodtoken: Bearer YOUR_TOKEN

Теперь создаем бинарный rest сенсор.

-6

Для удобства в интерфейс резервного сервера можно вытащить и другие необходимые сенсоры, например, включены ли автоматизации на основном сервере, время работы основного сервера и так далее.

Теперь создаем автоматизации, отслеживающие состояние этого датчика и управляющие автоматизациями.

-7
-8

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

Все созданные сущности для резервирования хранятся в отдельном package, который размещен на github. На моем основном сервере создан точно такой же файл, таким образом, что необходимые сенсоры проброшены зеркально, следовательно, оба сервера следят друг за другом и готовы в любой момент перехватить работу.

Подписывайтесь на мой канал, чтобы не пропустить новые статьи.

#умный дом #home assistant #smart home #резервирование #автоматизации #технологии #интернет вещей #iot