Поскольку управление светом в первую очередь затевалось ради экономии (кто не забывал выключить свет, уходя из дома, например?), то для полноценной автоматизации, причём не только света, неплохо бы настроить обнаружение людей дома.
Первым делом на ум приходят датчик открытия двери, чтобы понимать что кто-то пришёл или ушёл, и датчики движения, которые фиксируют, есть кто живой или нет. Но как на таких датчиках сделать гарантированную автоматизацию? Чтобы свет не включался и не выключался тогда, когда просто выглянул в коридор? Или чтобы не было ложных срабатываний от колыхания занавески? Такое было у меня, когда на кухне был установлен выключатель со встроенным датчиком движения, который либо срабатывал на занавески, либо не срабатывал на движения человека, который моет посуду.
Альтернативы в виде bluetooth- или nfc-меток я тоже не рассматривал - всех домашних не обяжешь "чекиниться" при входе-выходе, нужно что-то надёжное и стопроцентное: либо дома, либо нет. Вариант с GPS (всё равно у всех телефоны) - я тоже всерьёз не рассматривал, поскольку сам я включаю навигацию только в случае необходимости. Да и точность в городе так себе.
Элегантное решение я подсмотрел, когда только начинал баловаться с Majordomo, и именно это решение я реализовал в первую очередь на HomeAssistant. Решение простое: мониторить телефоны в домашней сети. Расчёт такой: телефон в сети - человек дома, не в сети - не дома. Редкие моменты, когда человек дома, но не подключен к домашнему Wi-Fi в расчёт не берём (в наше-то время).
Персоны в HomeAssistant
Для работы с пользователями как элементом автоматизаиции в HomeAssistant есть специальные объекты - person. Одна персона уже автоматически создана при первом входе - для админской учётной записи. Напомню, что при установке сервера мы создали учётную запись hass:
Для этой пользователи автоматически создался объект, который можно посмотреть в Настройках - Люди:
Можно дополнительно создать учётные записи для всех, кто будет пользоваться системой. Тут нам сразу говорят, что мы можем назначить отслеживающие устройства для человека.
Простейшим отслеживающим устройством в HomeAssistant, определяющим наличие устройства в сети, является ping. Его не надо искать на странице интеграций - оно входит в состав сервера и готово к употреблению. В первую очередь нам нужно определить список ip-адресов для сканирования и перечислить их в secrets.yaml:
stas_ip: 192.168.1.200
luda_ip: 192.168.1.201
Для удобства, чтобы адрес не менялся при каждом подключении к сети, можно в настройках телефона назначить его статическим.
Теперь настраиваем отслеживание. В configuration.yaml добавляем трекеры устройств:
device_tracker:
- platform: ping
scan_interval: 30
count: 3
consider_home: 120
hosts:
ping_stas: !secret stas_ip
ping_luda: !secret luda_ip
, здесь scan_interval - периодичность опроса (раз в 30 секунд), count - количество пакетов для отправки (чем больше пакетов, тем меньше вероятность ошибки, но дольше время получения ответа), consider_home - время, в течение которого сенсор должен находиться в выключенном состоянии, прежде чем считать устройство отсутствующим (120 секунд = 2 минуты - вполне достаточно для того, чтобы устройство вернулось в сеть в случае нестабильного домашнего Wi-Fi, можно поставить больше, но это увеличит паузу для сработки автоматизации), hosts - перечень ip-адресов для сканирования.
После перезагрузки HomeAssistant девайс-трекеры начнут свою работу и можно их привязать к существующим людям:
А можно и не назначать. Если нет необходимости создавать дополнительных пользователей - делать это необязательно, поскольку девайс-трекеры - это вполне самостоятельные объекты, которые можно использовать для автоматизации наравне с персонами. Главное отличие в том, что девайс-трекер - это один конкретный датчик отслеживания, тогда как персона может объединять в себе сразу несколько разных датчиков и менять своё состояние на основе разных показателей этих датчиков (например, кроме отслеживания по ip можно настроить дополнительное отслеживание по GPS и общий статус персоны будет меняться исходя из показаний обоих датчиков).
Для удобства просмотра информации о персонах (и для красоты) можно добавить их на свою панель в виде бейджев - значков в настройка вкладки на главной (или любой другой) панели:
Бейджи персон без настроек выглядят так:
Наведём красоты: добавим картинки-аватарки и сделаем нормальные статусы вместо "не дома". Загружаем нужные картинки в папку /home/homeassistant/.homeassistant/www в отдельную какую-нибудь папку, например images. В конфигураторе редактируем customize.yaml:
person.stas:
entity_picture: /local/images/stas.jpg
templates:
state: if (state === 'home') return 'Дома'; else return 'Ушел';
person.luda:
entity_picture: /local/images/luda.jpg
templates:
state: if (state === 'home') return 'Дома'; else return 'Ушла';
Можно картинки не загружать локально, а указывать ссылки на внешние картинки в интернете. Подгружаться они будут подольше, зато их проще менять по настроению.
После перезагрузки кастомизаций получаем (у меня ещё установлена зелёная тема):
Персоны и девайс-трекеры созданы, но перед созданием автоматизаций нужно создать ещё один объект, объединяющий всех персон в одном месте, чтобы в скриптах не прописывать ряд условий "если А ушёл и если Б ушёл и если ...". Для этого вставляем блок в groups.yaml:
family:
entities:
- person.stas
- person.luda
Теперь у нас есть объект group.family, который меняет статус на not_home, когда все перечисленные персоны отсутствуют, и на home, когда хотя бы одна персона присутствует.
Аналогично я объединил в группу все выключатели:
sonoff:
entities:
- switch.sonoff_bedroom
- switch.
- switch.sonoff_hall
- switch.sonoff_livingroom
Более подробно про выключатели - потом, в отдельных статьях про выключатели и реле.
Автоматизации на основе датчиков присутствия
Первым делом я реализовал самые, наверно, распространённые сценарии управления светом: выключить всё, когда все ушли и включить свет в прихожей, когда кто-нибудь пришёл.
1. Автоматизация выключения всех светильников, когда никого нет дома. Настраиваем триггер на объект group.family, в случае отсутствия всех дома в течение 2 минут (помним, что ещё две минуты нужно каждому девайс-трекеру для избежания ложных сработок) запускаем действие action: перевести переключатель в положение выкл для объекта group.sonoff.
- alias: Выключить свет когда все ушли
trigger:
platform: state
entity_id: group.family
to: not_home
for: 00:02:00
action:
- service: switch.turn_off
entity_id: group.sonoff
2. Включить свет в прихожей, когда кто-то пришёл. Эта автоматизация немного посложнее. Заметьте, триггер настроен не на группу family, а на два отдельных объекта, потому что нам нужно, чтобы свет включался всегда, когда любой из этих объектов сменил статус на "home". Кроме этого перечислен ряд условий, при соблюдении которых действие выполнится: во-первых, свет в гостиной выключен (зачем включать свет в коридоре, если туда попадает достаточно света из гостиной?), а во-вторых, положение солнца должно быть после заката и до рассвета, то есть в тёмное время суток.
- alias: Включить свет в прихожей, когда кто-то пришел
trigger:
- entity_id: person.luda,person.
platform: state
to: home
condition:
condition: and
conditions:
- condition: state
entity_id: switch.sonoff_1000b6a652
state: 'off'
- condition: or
conditions:
- condition:
after: sunset
- condition: sun
before:
action:
service: switch.turn_on
entity_id: switch.sonoff_1000b5b1f3
Кроме этих двух автоматизицй у меня настроено ещё несколько частных случаев: выключить свет, когда ушёл кто-то один, а другие ещё спят, или выключить телевизор, когда все ушли. Последний случай я разберу, когда буду описывать подключение приставки на Android к HomeAssistant, в том числе варианты автоматизаций, а частные случаи управления светом не сильно отличаются от приведённых выше автоматизаций и выделены в отдельные автоматизации для того, чтобы их можно было удобно отключить, в случае если они не нужны:
На этом с датчиками присутствия всё. Возможно, позже я соберусь и приделаю себе отдельный трекер GPS и расскажу о нём отдельно, но, честно говоря, особой необходимости в нём я не вижу, поскольку не могу придумать, какую именно автоматизацию на него можно повесить. Разве что просто побаловаться.
Ну а пока - лайк и шер, комментарии приветствуются.