Умный дом - теперь и у геккона
Недавно при странных обстоятельствах у меня появился вот такой зверь:
В целом он довольно неприхотлив, но хотелось обеспечить ему самые приятные условия для его хладнокровного существования. Не то чтобы это были какие-то нетривиальные задачи, мне просто показалось интересным, что у технологий есть ещё и такое внезапное применение.
Что нужно было сделать:
Поддерживать ему минимальную температуру ночью, но так, чтобы он не перегрелся
Поддерживать минимальную влажность
Включать ему ультрафиолетовую лампу в 5 утра, когда он любит выползать поваляться на камушке.
Вроде бы несложно. У меня был мешок реле, датчиков, Home Assistant и Arduino. Но если ты начал собирать умный дом, становится трудно остановиться. Единственное, что у меня вызывало опасение - это Arduino. Нет ничего более беспомощного, безответственного и испорченного, чем Arduino. Я знал, что рано или поздно я перейду и на эту дрянь.
Казалось бы, всё просто - засунь туда датчиков, подключи к ESP, да щёлкай релешками. Но хотелось точных датчиков, маленьких и автономных, и достаточно стабильной работы, чтобы не сварить и не заморозить животное. И тут оказался прям большой простор для разных вопросов и работы.
Дисклеймер
Прежде, чем читать дальше, давайте уточню, что я не герпетолог и не электрик. Я простой бекенд разработчик. И ни за что бы не доверил жизнь животного автоматике, если бы не мог её постоянно контролировать глазами. Пожалуйста, будьте осторожны, и не копируйте бездумно то, что я здесь написал. Я предупредил, и не буду чувствовать себя виноватым, если вы, например, сварите своих аквариумных рыбок.
Датчики
Итак, вернёмся к теме. Для измерения температуры и влажности я выбрал Aqara Temperature and Humidity Sensor на Zigbee - они маленькие, красивые, и автономно работают от батареек-таблеток. Да, именно “они” - поскольку температуру нужно мерять и в холодном и в горячем углу. Кроме этого у меня ещё был похожий датчик Mija, только с LCD и работающий по BLE, а не Zigbee. Он висел сверху, и я его там и оставил, как дублирующий - много датчиков не бывает!
Для того, чтобы всё это прокинуть в Home Assistant, я использовал Xiaomi Gateway 3, специально прикупленный для этих целей. Привязываем к нему датчики, ставим нужный custom component в Home Assistant, и получаем все нужные данные! Прям сказка.
Обогрев
Для обогрева мне приглянулась керамическая лампочка. Она не производит лишнего света и по идее живёт вечно. Правда, я погорячился и взял её на 100Вт. Даже через диммер она выдаёт слишком много тепла, так что сейчас я жду, пока мне придёт такая же на 50.
Увлажнение
Для этого я поставил обычный ультразвуковой увлажнитель, направив его носиком в террариум.
Ультрафиолет
Для этого ставят специальные лампы для рептилий. Не знаю, насколько это маркетинг, но несколько герпетологов порекомендовали поставить, и я решил поверить им на слово.
Реле
Девайсы подготовлены, датчики тоже. Теперь надо всё это чем-то включать. Навскидку у меня не получилось найти трёхканальных умных реле за вменяемые деньги, так что я просто взял стандартные пятивольтовые реле для ардуинок с али. Немного неудобно тем, что я не знаю, как с них снимать ток, а так же я подумываю о замене их на твердотельные… Но пока это не вызвало каких-то проблем, и я стараюсь вкладывать усилия по мере необходимости.
Контроллер
Дома лежит мешок NodeMCU, Wemos D1 R1 и Wemos 32, так что я взял старый добрый D1 R1 на ESP8266 и решил наконец пощупать ESPHome. До этого я прошивал контроллеры через Arduino IDE по USB и использовал руками настроенные MQTT топики, а тут решил, что хватит это терпеть - есть подходящий повод разобраться.
В общем, ESPHome оказался просто волшебной штукой. Пишешь простой YAML, всё прошивается по воздуху, все топики и прочее добро создаются за тебя, и девайс сам обнаруживается в Home Assistant. Просто магия! Фактически вся настойка реле выглядела вот так:
1 | switch: |
Триггеры
Отлично, теперь есть всё железо и софт, можно включать и выключать всё через Home Assistant, однако… Ничего ещё не автоматизировано.
И в этом помогают Automations от Home Assistant. В целом они вышли довольно тривиальные:
- Если температура ниже x, то включить обогрев
- если температура выше x, то выключить обогрев
- то же самое для влажности
- в 5 утра включить лампу, в 17 выключить
- если температура критически низкая или высокая, то послать уведомление в телеграмм
Ура, кажется, на этом наш MVP готов. Всё работает и рисует красивые полезные графики:
Но есть нюанс! Пока это не выглядит достаточно безопасным. Что, если реле залипнет, пока я сплю и не услышу уведомление в телеграмм? Я совсем не хочу получить на завтрак жареного геккона!
Тогда я понял, что нужен дополнительный способ алертинга. Можно было бы для этого переиспользовать умные колонки с Алисой, но они стоят только у детей (жаба давит ставить в каждую комнату), и не хотелось бы их пугать по ночам, если что.
Ну что же. Если у тебя в руках ардуина, то всё вокруг кажется гвоздём. Берём её, втыкаем в неё пищалку, и настраиваем её как включаемую сирену с полифонической мелодией. Добавляем включение этой сирены как переключатель в Home Assistant. Попутно ещё я закинул туда сервис для Home Assistant, который даёт играть на ней любую мелодию. Ну, потому что мог. Наверное, это единственная штука, которая была не совсем тривиальной, поэтому даже закину код:
1 | esphome: |
Вот так в 40 строчек программирования на ямлах получается вполне сносная сирена, которую слышно по всему дому.
Помимо этого, я подумал про случай, когда реле включилось, и на этом мой сервер Home Assistant умер и не выключил его. Я по прежнему не хочу жареного геккона, так что добавил туда простую проверку - реле обогревателя выключается через 20 минут после включения. А если вокруг правда мороз и оно всё ещё должно быть включено - не беда, Home Assistant включит его обратно!
Код такой проверки на ямлах написать у меня не получилось, и я запользовал так называемую лямбду в ESPHome:
1 | on_loop: |
Вот теперь, кажется, всё. Возникает мысль добавить перед реле ещё яндекс розетку (которая у меня тоже управляется локально, поскольку она туя), чтобы через неё перезапустить контроллер, если что… Но не хочется добавлять точек отказа без необходимости. Да и на крайний случай всегда можно призвать соседку проверить зверя. В конце концов, мне не нужны пять девяток в стабильности, я не Яндекс.геккона делаю.
Вопросики
В процессе я задавал себе вопросы, какие у меня могут выйти сценарии, и как их избежать. Возможно, это тоже будет интересно, так как помогает понять, как у меня в голове выстраивалась модель.
Q: А что если пропадёт интернет?
A: Ничего. Всё будет продолжать работать как работало. Только извне показания датчиков нельзя будет узнать и получить уведомления в телеграмм. Если бы интернет падал часто и это было бы супер критично, можно было бы настроить резервный канал. Но… И так сойдёт.
Q: А если пропадёт электричество?
A: Хуже, чем без умного дома, не будет. Как только электричество появится - всё восстановится. В целом дома тепло, но если бы хотелось гарантий обогрева - можно было бы поставить бесперебойник на роутер, сервер HA и реле с потребителями.
Q: А если сдохнет батарейка в датчике?
A: Триггеры опираются на показания трёх датчиков. Три одновременно - не сдохнут.
Q: И всё же. Что если залипнет реле или повиснет микроконтроллер?
A: Залипание реле можно пролечить удалённой перезагрузкой микроконтроллера. Зависание микроконтроллера - вариантом с внешней умной розеткой. Но вообще это кажется пренебрежимо редким кейсом, с которым справится уведомление, сирена, и на худой конец - визит друга.
Итоги
Мне определённо понравилось то, что получилось. Умный дом для геккона сделал жизнь приятнее и комфортнее и мне и ему.
Вся эта машинерия определённо не стоит свеч, если у вас ничего дома нет из умного дома. Наверняка проще поставить готовое решение для террариума. Но если у вас уже есть экосистема - то получается хорошее решение по цене пары датчиков, одного-двух контроллеров и пищалки.
Безусловно, ничего технически сложного в проделанной работе нет, и я предвижу вопросы “зачем это тут?”. Однако, мне кажется интересным именно синергетический эффект простых вещей, которые вместе дают сделать довольно прикольные штуки. Раньше я уже описывал открытие ворот, полив цветочков, управление ёлкой и детские игры на умном доме. Кажется, что со временем будет появляться всё больше таких решений, причём не для бородатых нердов, а для нормальных людей, и они будут классно и красиво работать из коробки.
Можно ли было сделать лучше и проще? Возможно, я что-то не учёл? Да наверняка. Надеюсь, вы подскажете мне в комментариях.