Умный дом для начинающих

 Публичный пост
28 декабря 2021  742

Однажды я попал к своему другу в квартиру, где он помигал мне RGB-лампочкой. Диво-дивное подумал я и решил завести и себе дом дурачок.

Магия да и только🙌🏻
Магия да и только🙌🏻

TL;DR Этот пост рассчитан на новичков и рассказывает про мои первые шаги с Home Assistant(HA). Надеюсь, он уменьшит порог входа, а также немного времени и средств :)

Начало

А нужен ли мне вообще этот умный дом и готов я в него вкладываться? Стандартный вопрос в начале любого дела. Так как и я был неуверен, бюджет был фиксирован одной сотней евро.

Рекомендую придумать минимальную задачу, которую для вас будет решать умный дом. У меня это стала балконная гирлянда, которая должна включаться в момент подхода к дому. Идею честно стырил у @vas3k. Спасибо! Кстати, пост рекомендован к прочтению, так как до сих пор(декабрь 2021) хорошо описывает общую картину мира

Hardware - не так страшно

Меня очень порадовала работа с железом, просто потому-что делать там особо нечего. Я больше потратил времени на выбор компонентов на амазоне, а с установкой справится и 5-летний ребенок.

Мой сетап (67€):

  • Raspberry Pi 3B+ - основная плата. Главная особенность, что идет без кейса и блока питания (40€)
  • Блок питания Мне понравился этот, удобная кнопочка для перезагрузки. Позволяет не раздалбывать microUSB порт регулярными манипуляциями (10€)
  • MicroSD Согласно инструкции, Raspberry поддерживает от 8 до 32ГБ памяти. Я взял среднее, на 16 ГБ. На карту записывается Home Assistant OS, а также логи и, например, база данных - MariaDB (5€)
  • КардРидер Если в вашем ноутбуке нету возможности записывать microSD карты - можно купить кардридер, подойдет самый простой (6€). Вроде можно записывать с Андроид телефона, но я не пробовал. Напишите в комментах у кого есть опыт
  • Кейс (опционально) Удобная коробочка, которая закрывает вашу плату от пыли (6€)

Итого, я собрал все компоненты и подключил малинку к интернету. Ура, можно начинать.

Сама установка Home Assistant происходит очень просто. Записываете Home Assistant OS на microSD, вставляете ее в Raspberry PI и ждете минут 15-20, пока она установится. Подробная инструкция есть на официальном сайте.

Можно пойти пока сделать чайок
Можно пойти пока сделать чайок

Как достучаться к устройству?

Вариант 1 (локально, легко) Через локальную сеть, для этого подключите малинку через LAN-кабель или WiFi (UPD: c марта 2021 подключение по wifi значительно упростилось).
После вводите 192.168.x.x:8123 и попадаете на страницу. Также, если вы не знаете ip-address, можете попробовать посмотреть вкладку Clients на роутере или воспользоваться ссылкой http://homeassistant.local:8123/

Вариант 2 (извне, легко, платно) Мне захотелось проверять умный дом, находясь вне дома. Разработчики Home Assistant предоставляют платное Cloud решение.
Если вам лень разбираться самому и вы хотите поддержать проект - за 5€/месяц вы можете подключить платный сервис https://www.home-assistant.io/cloud/

Вариант 3 (извне, посложнее, бесплатно) Для тех, кто не боится сложностей - можете зарегистрировать свой домен, например на https://duckdns.org/ бесплатно. После вам требуется лишь пробросить порт 8123 наружу. Как? Смотрим тут

Лайфхак:
Если у вас айпи адрес меняется каждый день(динамический) - можно воспользоваться встроеной интеграцией либо на роутере активировать DynamicDNS. Зачем? Это позволит регулярно сообщать DuckDNS о смене вашего Ip-адресса и ваш умный дом будет доступен извне по доменному имени всегда.

HA - основы (Q&A)

Что такое Entity?
Любой сенсор или сущность, которая дает вам какую-то информацию

Где посмотреть логи?
Заходим в Configuration>Add-ons, Backups & Supervisor. Вверху меню на 3 пункта. Выбираем System. Тут вы увидите логи. Основное внимание следуюет обращать на Log Provider с именем Core

Как получить доступ к файловой системе в Home Assistant?
Можно установить File Editor Add-on либо открыть доступ через SSH

Как написать первую автоматизацию?
Можно использовать Web UI в разделе Configuration>Automations либо установить Node-Red (больше гибкости, но сложнее разобраться во всех элементах для flow-диаграмы)

Окей, а что за блоки Triggers, Conditions, Actions? HA реагирует на события. Температура изменилась - событие, Кто-то чихнул - событие и т.д. Triggers - это как раз и есть подписка на начальное событие, в случае наступления - автоматизация запустится. Conditions - дополнительные (опциональные) условия, которые должны быть правдивыми в момент работы автоматизации. Actions - действие, которое нужно сделать.
Интересным примером является закат солнца, это может быть как и Trigger так и Condition. Тригер запустится в момент заката, Condition в этом случае помогает включать лампочки, например, только после заката, когда тригером выступает другое событие, например, приход домой (человек вошел в зону Home)

Я нашел кнопку Script. Можно на нее нажать?
Да, конечно. Script - это как функция, которая содержит цепочку вызовов. Script'ы можно вызывать, как самостоятельно, так и в разделе Action

Что такое HACS?
HACS - это альтернативный установщик (а-ля Cydia на джеилбрейкнутом айфоне вместо App Store). Удобен быстрой установкой с Github'а (на ваш страх и риск конечно), вместо ручной установки через File Editor. За 2 месяца проблем со сторонними пакетами так и не было.

Как трекать геопозицию? Установите Companion App на телефон. После добавьте нового пользователя через Configuration>People & Zones. Не забудьте указать приложение в поле Pick device to track

Зачем слева Developer Tools? Эта вкладка показывает все состояния для каждого Entity. Помогает при отладке, также пользуйтесь фильтрами

Есть state, есть Attributes? В чем соль? Для примера возьмем датчик температуры. State - это основное состояние датчика, в данном случае численное значение градусов. В атрибутах записывается второстепенная информация, вроде напряжения батарейки, единица измерения, и т.д.

Как я могу добавлять свои конфигурации? Стандарт в HA - Yaml-файлы. В них описано почти всё, кнопки которые мы жмем в WebUI, просто обертка над текстовыми файлами. Советую изучить формат и посмотреть на готовые куски кода

Advanced. Мне нужно в yaml-файле получить доступ к состоянию, как? Используйте синтаксис '{{ states(''sensor.bedroom_humidity'') }}'. На остальные случаи жизни смотрим тут

Умная гирлянда

Прочитав множество форумов, оказалось, что умная гирлянда c wifi или zigbee - это оверкил. Достаточно купить самую простую без наворотов(15€) и воткнуть в умную розетку.

Мой выбор пал на Tp-Link tapo за 10€. Настроить же можно за 15 минут(читай раздел лайфхак) поместив папку из Github'a в папку custom_components и прописав пару строк в configuration.yaml.
Лайфхаки:

  • Очень странно, но интеграция заработала только когда я установил Пароль на tapo Cloud из 8(!) символов в любом регистре без спецсимволов. Типичный DIY.
  • Розетка издает негромкий щелкающий звук при включении и отключении, сравнимо с обычным выключателем света. Можно привыкнуть, но я был рад, что она стоит на балконе

Автоматизация в формате Yaml

alias: Turn on light when I come home
description: ''
trigger:
  - platform: zone
    entity_id: person.viktor
    zone: zone.home
    event: enter
    id: '1'
condition:
  - condition: sun
    after: sunset
action:
  - service: script.outdoor_light_toggle
    data:
      customMinutes: 15
mode: restart

Скрипт - outdoor_light_toggle

alias: outdoor_light_toggle
sequence:
  - service: switch.turn_on
    target:
      entity_id: switch.tapo0
  - delay:
      hours: 0
      minutes: '{{ customMinutes }}'
      seconds: 0
      milliseconds: 0
  - service: switch.turn_off
    target:
      entity_id: switch.tapo0
mode: single
icon: mdi:outdoor-lamp

Что тут происходит?
Автоматизация стартует в момент, когда я (entity_id:person.viktor) возвращаюсь (event:enter) домой (zone: zone.home). При этом должно соблюдаться условие, что закат уже наступил (condition: sun, after: sunset). После вызывается скрипт outdoor_light_toggle, который включает (service: switch.turn_on) розетку (target: entity_id: switch.tapo0), ждет n-минут, а после выключает розетку-гирляндую

  • Yaml: изначально я настроил всё через WebUI. Для того, чтобы использовать этот Yaml, создайте новую автоматизацию и сохраните. Переключение между режимами спрятано за 3мя точками в правом верхнем углу

Переключение между WebUI и YAML
Переключение между WebUI и YAML

  • Sequence: У всех скриптов есть последовательность задач, которые нужно выполнить. Они записываются в блок sequence
  • Mode: определяет, что происходит со скриптом(1), если в момент выполнения запускается еще один(2). Значения могут быть следующими: Single - 1ый скрипт продолжает выполняться, 2ой будет проигнорирован; Restart - 1ый прерывается, и начинается выполнение 2ого; Queued - скрипты становяться в очередь, 2ой будет выполнен после 1ого; Parallel - паралельно работают два
  • Аргументы: Чтобы сделать скрипт более абстрактным и включать лампочки на разное время, я ввел аргумент '{{ customMinutes }}'. Для того, чтобы передать значение, нужно использовать ключевое слово data при вызове action с указанием значения. Более подробно про tempating тут

Умный шалашик приветствует меня осенними вечерами
Умный шалашик приветствует меня осенними вечерами

Что дальше?

Понравилось? Мне - очень. Как раз был Black Friday и я купил тройку датчиков температуры + на батарею 2 термоголовки . Продолжаю развлекаться. Об этом в следующих постах :)

Есть есть вопросы - вы всегда можете задать их в Вастрик.Дом Дурачок чате

16 комментариев 👇

Пожалуйста, не выставляйте свой сервер HA голым портом в интернет!
Есть дискуссия среди параноиков, что HA инстанс одновременно видит вашу домашнюю сеть, интернет и "те самые китайские WiFi штуки", которым вашу сеть видеть не стОит. Сеть, в которой строится HA по умолчанию должна считаться недоверенной (тут была шутка про "сколько у вас дома VLANов", но я как-то получил на неё ответ "12" и это уже не так смешно).
Простите, отвлёкся.
Для того, чтобы закрыть свой сервер извне есть куча решений вроде:
VPN, ZeroTier/Tailscale, port-knocking, access-list и бОльшая часть из них вполне юзабельна.

  1. Сам очень долго пользовался port-knocking через action в Tasker (при переключении WiFi->mobile->WiFi пинговал свой WAN адрес пакетами разного размера (и mikrotik перезаписывал access-list и открывал доступ к HA).
  2. Потом перешёл на другой сценарий для которого тоже нужен роутер поддерживающий access-listы. Триггер тот-же самый - переключение состояния соедиенения через Tasker, но action - обновлять duckdns.org имя телефона. Роутер в свою очередь резолвит duckdns адрес и разрешает устанавливать соединения с адреса в который резолвится duckdns имя. Минусы очевидны - если вы за провайдеровским NAT - весь внешний ардес будет иметь доступ к вашему HA инстансу, плюсом тут то, что TTL записей очень короткое и сам сервис позволяет обновлять адрес раз в 5 минут (пожалуйста, не злоупотребляйте).
  3. Недавно открыл для себя Tailscale, который позволяет назначить одну из нод "внешней" и ходить в интернет через неё и, таким образом, держать его всегда подключённым(в Android он работает как VPN).
  4. Классический VPN всё ещё является самым надёжным способом ходить к своей инфраструктуре, но для себя не нашёл достаточно удобного, чтобы работал в плохих условиях приёма мобильной связи.
  Развернуть 1 комментарий

@sta, полностью согласен. Я не стал мудрить и сделал VPN. Вдобавок, при подключении к VPN внутренний DNS раздает домен для умного дома, тогда как снаружи его нет, очень удобно.

  Развернуть 1 комментарий

@sta, спасибо за столь развёрнутый комментарий. Уточню, а если открыт 443 порт наружу, который форвардится на 8123 через роутер это тоже самое или пойдёт? Не видел, чтобы https закрывали

  Развернуть 1 комментарий

@panvik, Любой порт торчащий наружу на белом IP будет найден и прощупан рано или попозже, вариантов не так-то и много (всего-то 65535). Любой более-менее стандартный порт простукивается на раз, вариантов найти - масса. Дальше - нужно всего-лишь ждать, пока вы будете заняты (и не вовремя обновите свой сервер) или в HA/Linux не появится следующая log4j, а ждать-то по-сути не сложно.
Я не хотел бы разворачивать дискуссию в сторону защиты HA от домашней сети и наоборот ограничившись рекоммендацией - "не надо так". Дело даже не в угрозе вторжения, сколько в потере времени на выяснение "что на этот раз пошло не так". Вы ведь соперничаете не с человеком, скорее всего, а со скриптом/машиной, у них времени - завались.
Кстати, у меня присутствие обрабатывается ещё одним событием HA - когда мак телефона появляется в домашней сети (доступ к роутеру через API).

  Развернуть 1 комментарий

@sta, с телефоном - есть нюансы, айфон например постоянно отключает\подключает вайфай в спящем режиме с интервалами, которые сам считает нужными

Это история коннекта айфона к роутеру, сидя дома.

P.S. самсунг, кстати так не делает

  Развернуть 1 комментарий

@captaincacao, ух, наслышан про то, что самое сложное в этой идее, это - presense-detection ^__^
(теперь больше понимаю - почему, мне - просто повезло)

  Развернуть 1 комментарий

@sta, у HA есть плагин, который умеет через айклауд определять геопозицию дивайсов

  Развернуть 1 комментарий

@sta, ещё простой способ пошарить дом — через эпловский homekit, из ha почти всё можно туда прокинуть и если дома есть homepod то оно будет рабоать и без локальной сети

  Развернуть 1 комментарий

@holovin, годный способ для параноиков. Осталось только найти дешёвый способ вкатиться в инфраструктуру apple (ipod touch?).

  Развернуть 1 комментарий

@sta, вот тут не знаю, я на яблочной игле уже очень давно

  Развернуть 1 комментарий

Спасибо за пост! Тоже перешла на HA после того, как закончились простые сценарии автоматизации. Тоже на малинке с SD картой.

Меня впечатляет насколько серьезный умный дом это кросс-доменная дисциплина:

  1. Чтобы запарить телек, пришлось дебажить питоновские скрипты
  2. Чтобы сделать сложный сценарий с пылесосом, пришлось изучать как получить на нем рут
  3. Чтобы HA не торчал наружу, пришлось вспоминать теорию сетей
  4. Чтобы настроить скрипт с умными шторами, пришлось узнать что такое и заказать zigbee свисток. Буду на него перевешивать все девайсы чтобы без хабов было.
  5. Чтобы были хорошие и actionable нотификации, пришлось изучить как писать ботов для телеги.
  6. Баловство с многократным нажатием неочевидных кнопок на китайских девайсах уже вызывает нервный смех
  7. Вспомнила что такое telnet, ssh и самба.
  8. Поняла что такое докер и почему для моей инсталляции HA из коробки не ранаются pip команды чертовы контейнеры.

А еще это кроличья нора и конца да края ей нет. Это очень увлекательное хобби!

Сценарий, ради которого все затевалось:
Когда включается телек, шторы автоматически опускаются и свет в гостиной принимает положение "смотрим кино". Когда телек выключается или ставится на паузу, свет чуть оживает.

P.S.: я не инженер, но за 10 лет карьеры менеджмента в ИТ понахваталась всякого. И мне весело. Хотя местами сложновато. Вон, даже на собесах стала рассказывать что потолок моих технических знаний это HA умный дом на малинке :) :) :)

  Развернуть 1 комментарий

@Covectb_cobaka, решено, женюсь!!!)))

  Развернуть 1 комментарий

@Covectb_cobaka, да, тут прям можно открывать цикл статей :) Этой же хотел понизить порог входа и оживить категорию :)

  Развернуть 1 комментарий

У многим известного демона cloudflared есть режим tunnel, который делает реверс-туннель в сторону CDN cloudflare, пробивает нат и маскирует ваш домашний IP.
ИМХО: сильно лучше, чем торчать голым портом в мир. Да ещё и для пет-проектов/тестов - бесплатно! (о том, какую инфу они собирают о вас попутно - поговорим позже)

  Развернуть 1 комментарий

Потратил кучу времени, поставил HA, натыкал датчиков температуры, CO2, поставил умные регуляторы на батарею, датчики протечки воды, RGB-ленту, итд и прикрутил все это дело к Apple HomeKit.
Очень нравилось все ровно до вчерашнего дня, когда все zigbee девайсы просто отвалились по непонятной причине 😡
В планах было управление освещением и умные краны на воду, но теперь сижу и задаюсь вопросом надо ли оно все мне :-)

  Развернуть 1 комментарий

@SergeyZwezdin, провода и промышленные решения будут рулить всегда

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб