55. Оповещения об отключении электричества для Home Assistant.
Отключения электричества являются большой пролемой для всех владельцев любых электроприборов. И хочется иметь возможность отслеживать такие случаи, чтобы предпринять те или иные действия в связи с этим. В данной статье рассмотрим подробнее что нужно для подобного решения.Для начала конечно же необходим источник бесперебойного питания (ИБП, он же UPS). Чем он более энергоёмкий, на тем большее время хватит его заряда для поддержания работы сервера управления умным домом и его инфраструтуры. Либо можно использовать несколько ЮПСов, по одному для каждого из ключевых узлов всей сети.
Что обязательно должно иметь источник резервного питания?
- Сервер с умным домом.
- Устройство обеспечивающее выход в интернет (как правило это раутер).
- Другое сетевое оборудование необходимое для работы инфраструктуры, включая шлюз зигби.
В данной статье не рассматриваются способы обеспечения резервным питанием этих узлов.
Немаловажным условием так же является работоспособность внешнего оборудования провайдера интернета в моменты отключения электричества. Говоря проще, интернет должен продолжать работать если с вашей стороны вы можете обеспечить работу раутера.
Итак, shit happened и дома нет электричества. Как об этом можно узнать? И как узнать что электричество вернулось?
- Во первых, все датчики, выключатели и прочие устройства работающие от батареек продолжат работать и передавать данные. Они нас не интересуют в данном контексте.
- Во вторых все устройства работающие от электрической сети и не подключенные к ИБП перестанут отвечать на запросы системы. Это уже более интересный показатель, особенно когда речь идёт о zigbee устройствах.
главная страница устройства в дополнении Zigbee2MQTT
Дело в том, что у любого зигби устройства есть такой показатель как last seen. Это время когда устройство в последний раз "разговаривало" с системой управления. Хотя бы на уровне простого обмена сообщениями, из разряда "Привет, я тут!". Именно этот параметр и поможет определить отключение электричества.
тот же самый сенсор того же устройства в интеграции MQTT
Параметр, при котором каждое устройство сообщает о себе какую либо информацию, у каждого устройства может быть разный. Но его можно изменить. Однако стоит учесть очень важную деталь:
- Чем чаще устройство сообщает о себе, тем больше информации пишется в базу данных ХА, и тем больше ресурсов может требовать под себя вся система в целом. (частота записи данных помножить на количество таких устройств)
- Чем реже устройство сообщает о себе, тем больше промежуток времени который необходим для определения статуса устройства.
Исходя из этого, каждый может подобрать для себя оптимальное значение. Для примера выберем пол минуты. Т.е. если устройство не вышло на связь через 30 секунд после предыдущего сеанса, оно должно считаться отключенным.
значения временных интервалов оповещения устройством в в дополнении Zigbee2MQTT
Допустим дома имеется несколько розеток или выключателей работающих от сети. Для всех или нескольких из них, необходимо создать бинарный сенсор отвечающий условию: взять значение параметра last seen этого устройства и вычесть его из значения текущего времени, если разница получилась меньше 30, то бинарный сенсор принимает значение ВКЛ, если разница больше 30 то сенсор принимает значение ВЫКЛ. Такой бинарный сенсор удобнее всего строить с помощью домена шаблонов - template.
Основываясь на предыдущих материалах этого сайта, можно вспомнить, что конфигурация используемая в нашей системе имеет следующий вид: все сущности построенные на домене шаблонов находятся в отдельном файле. Именно в него и будем добавлять код сенсора.
- binary_sensor:- name: "Электричество Бойлер"unique_id: 'bla-bla-bla'state: >{% set time_diff = (as_timestamp(now()) - as_timestamp(states('sensor.boiler_last_seen'))) | int %}{% if time_diff > 30 %}off{% else %}on{% endif %}
Здесь мы задаём:
- Имя сенсора.
- Присваиваем сенсору уникальный идентификатор в формате UUID* (Universally Unique Identifier).
- Указываем шаблон вычитания из текущего времени значения last seen устройства.
- Прописываем условие в каком состоянии быть сенсору, если разница больше или меньше 30.
*уникальный идентификатор в формате UUID указывается для того, чтобы иметь возможность редактировать некоторые свойства этой сущности прямо в интерфейсе ХА. Такой идентификатор может быть у каждого устройства в системе, но они не должны повторяться.
Для удобства можно воспользоваться кодом на языке Python который генерирует 10 таких рандомных кодов.
import uuidfor i in range(10):unique_id = str(uuid.uuid4()).replace('-', '')[:28]device_id = '-'.join([unique_id[:8], unique_id[8:14], unique_id[14:18], unique_id[18:26], unique_id[26:]])print(device_id)
Не забываем о перезагрузке конфигурации системы после внесения изменений.
После чего можно убедиться что необходимый сенсор создан и работает.
везде в системе видно что сенсор работает
Итак, после создания бинарного сенсора хотя бы для одного устройства из каждой комнаты, можно создать группу объединяющую в себе эти сенсоры, которая будет работать как один отдельный бинарный сенсор. Так же, её можно настроить на переключение в положение ВЫКЛ когда хотя бы один из членов в этом состоянии, или только когда все. То же самое касается и состояния ВКЛ.
Группу можно создать как спомощью кодинга, так и в графическом интерфейсе. Второй вариант выглядит чуть более дружелюбным.
Для этого воспользуемся одноимённым помощником (helper).
Выберем соответствующий тип группы
Добавим в эту группу созданные ранее сенсоры, не забыв дать название этой группе, и жмём готово.
Теперь у нас есть глобальный бинарный сенсор электричество.
Осталось только сделать автоматизацию с оповещением.
В качестве триггера выберем состояние толькочто созданного глобального бинарного сенсора. Так же стоит задать идентификатор для этого триггера.
По аналогии добавим ещё один триггер, но уже с обратным действием, когда значение сенсора меняется с ВЫКЛ на ВКЛ. Ему тоже стоит прописать идентификатор.
Осталось выбрать действие. В данном примере воспользуемся уведомлением на все клиентские устройства, как это было рассмотрено в предыдущей статье.
Для этого выберем вариант действия choose и для каждого из триггеров создадим оповещение. Текст оповещения оставим на усмотрение каждого. Первое сообщает об отключении электричества, второе о восстановлении.
Несмотря на то, что объяснение вышло слегка растянутым, на всю работу необходимо не более 10-15 минут.
Комментарии
Отправить комментарий