Домашний помощник как запустить почасовую автоматизацию

Уведомлении о включении

Тут, как мы видим, в уведомлении прилетает еще ip адрес. Для него мы подключили следующий сенсор. И сенсор time

Упомянутые кастомизации

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

Поэтому мы берем файл customize.yaml и вставляем туда параметры

# название автоматизации или элемента на основной странице системы automation.disable_sound_of_alarm: # то как мы хотим чтобы она называлась “по человечески” friendly_name: ‘Отключить сирену’ # а тут мы говорим хотим ли мы видеть этот элемент на основной странице # это на самом деле означает спрятать. # типа ответа на вопрос “хотим ли мы спрятать элемент ?” # ответ “true” означает “да, хотим спрятать” hidden: true automation.motion_detection: friendly_name: ‘Сигнализация на кухне’ automation.arm_disarm_alarm: friendly_name: ‘Отключить сигнализацию кнопкой’ hidden: true automation.alarm_status_sound: friendly_name: ‘Подзвучка включения/отключения сигнализации’ hidden: true script.alarm_sequence friendly_name: ‘Действия при сработке сигнализации’ hidden: true

где  hidden: true скрывает ненужные нам автоматизации и скрипты с главного экрана и все становится значительно удобней.

Создание системы отслеживания через роутер

Трекинг через локальную сеть роутера требует настройки, в отличие от GPS отслеживания. Два вида трекинга можно комбинировать для повышения точности. Ниже можно заметить, что в моем случае отслеживание через роутер работает лучше, чем через GPS. Зеленая зона значит, что телефон внутри зоны, красная — вне зоны.

Домашний помощник как запустить почасовую автоматизацию
Результаты работы отслеживания (сверху — роутер, снизу — GPS)

Редактирование конфигурационных файлов через VSCode

Можно подключиться через плагин SSH в VS Code, но получить доступ к проводнику в данный момент мне было удобнее. Поэтому, добавим сетевое расположение.

Домашний помощник как запустить почасовую автоматизацию

Нажмем обзор, найдем каталог config (мы в основном будем редактировать его) и выберем его как сетевую папку.

Домашний помощник как запустить почасовую автоматизацию

Дальше мы можем перейти в созданную папку и открыть ее через редактор.

Домашний помощник как запустить почасовую автоматизацию

platform: xiaomi
host: 192.168.31.1
password: !secret xiaomi_router_password
configuration.yaml
device_tracker: !include configs/router_device_tracker.yaml

После перезагрузки HA мы можем увидеть, что у нас появился новый глобальный объект device_tracker и наши устройства в нем.

Домашний помощник как запустить почасовую автоматизацию
Трекинг устройств через роутер

Бэкапы

В бэкап попадает весь каталог /config, а также все установленные расширения. С любого бекапа можно восстановить состояние системы на момент его создания.

Можно настроить создание резервных копий в Google Drive:

  1. Скопировать ссылку https://github.com/sabeechen/hassio-google-drive-backup и зайти в HA (также можно прочитать подробную инструкцию в ReadMe репозитория по ссылке)
  2. Добавить ссылку как кастомный репозиторий в Supervisor’е через UI.

    Домашний помощник как запустить почасовую автоматизацию

  3. Открыть его (Open Web UI) и следовать инструкциям по аутентификации с Google Drive

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

Домашний помощник как запустить почасовую автоматизацию

Версия 1

Я не пошёл по пути универсальности и под каждую точку разрабатывал отдельную плату. Все делалось дома методом лазерного утюга.

  • 0 USB шлюз – использовался для проброса шины на домашний сервер.

  • 2 контроллер настенного выключателя в комнате – обычный, двухклавишный. Был скрипт на ВКЛ/ВЫКЛ, так и на двойные нажатия.

  • 3 контроллер люстры в комнате – 5 лампочек, на каждую по реле. Ручное управление.

  • 4 контроллер света в углу коридора – датчик движения, диодная лента. Автоматическое и ручное управление.

  • 5 контроллер света возле двери – датчик открытия двери, датчик движения, диодная лента. Автоматическое и ручное управление.

  • 6 контроллер лент в комнате – ручное управление. Дополнительно еще блок из 4-х управляемых розеток в коробке из-под мороженного.

  • 7 контроллер света в коридоре – датчик движения, диодная лента. Автоматическое и ручное управление.

  • 8 контроллер света в туалете – датчик движения, диодная лента. Автоматическое и ручное управление. 

  • 9 контроллер света в ванной – так и не дошел до установки.

  • 10 контроллер клавиатуры – 10 цифровых кнопок, использовался для тестов.

  • 12 контроллер аквариума – управление мощными 3W сборками светодиодов (белый, желтый, синий, красный), управление/контроль температуры, циклы закат/рассвет, платформа для игр с I2C датчиками (BMP280, BH1750, SHT31, DS3231).

Собиралось на Atmega88. Начинал с Atmega8, но захотелось больше аппаратных ШИМ.Вся система была сделана одной шиной (проводом 3х2.5 и 3х1.5), т.к. основой был ATX блок питания на 600W.

Раньше сервером был ящик, собранный из остатков после апгрейда стационарного пк, но тут был собран мини-сервер на базе ASRock J3710-ITX. В качестве ОС я выбрал Debian, т.к. много сталкиваюсь с ним на работе. Дополнительно была проложена шина 1Wire с кучей датчиков температуры: комнаты, улица и стояки отопления (которых у меня в квартире аж целых три). Подключал через самодельный адаптер на DS2480 и FT232.

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

  • Журнал всех сообщений на шине (удобно для отладки)

  • Сбор и вывод всех датчиков (температура , влажность и т.д)

  • Обновление прошивки устройств

  • Формулы для просчета автояркости

  • Homebridge для яблок 

Бонусом ещё сделал приложение под Android/iOS с частичным функционалом. 

Т.к. Было желание передвинуть сервер, шлюз переехал вначале на роутер с OpenWRT (Linksys WRT1200AC, отличнейший аппарат), а потом уже на RaspberryPi.

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

Эта система у меня просуществовала с 2015 по 2020 г, но в итоге я решил отказаться. Причина достаточно проста: когда все делаешь сам, то все ошибки нужно исправлять самому. А отсутсвие времени/знаний растягивает этот процесс на месяцы. 

Немного фото/скриншотов

Разберем конфигурацию

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

Домашний помощник как запустить почасовую автоматизацию

а дальше уже из списка который у нас появился, мы выбираем названия элементов, которые нам нужны для работы:

Домашний помощник как запустить почасовую автоматизацию

Ну а дальше пошло самое веселье. Начинаем вставлять код в файл automations.yaml

Итак, зачем все так сложно ? 

Создавая это я столкнулся со следующими проблемами. Автоматизация Alarm Status Sound конфликтовала с автоматизацией Motion Detection когда использовалось штатное решение отработки по состоянию приведенное ниже: 

Именно поэтому в данной конфигурации ‘Alarm Status Sound’ срабатывает только при изменении состояния автоматизации ‘Motion Detection’.

Ну а то, что происходит при срабатывании самой сигнализации прописано в файле scripts.yaml и довольно скучно на фоне написанного ранее:

alarm_sequence: alias: “Действия при сработке сигнализации” sequence: – service: tts.amazon_polly_say entity_id: media_player.mpd data: message: ‘Куда ты полез мохнатая наглая сука?!’ – delay: 00:00:03 – service: xiaomi_aqara.play_ringtone data: gw_mac: МАК_АДРЕС_ШЛЮЗА ringtone_id: 6 ringtone_vol: 8 – delay: 00:00:05 – service: xiaomi_aqara.play_ringtone data: gw_mac: МАК_АДРЕС_ШЛЮЗА ringtone_id: 5 ringtone_vol: 8

Зачем нужны задержки ? Потому что автоматизация не получает от перечисленных исполнительных устройств обратной связи о завершении проигрывания текста или звука. И запускает все одновременно. 

Без задержек получается что Текст проигрывается одновременно с последним указанным рингтоном шлюза, так как на шлюз пришли сразу две одинаковых команды и он выполняет последнюю. И получается каша.

С помощью Xiaomi Router Mi4A

  • Не требует никаких действий на устройстве, отслеживает всех в локальной сети.

  • Если устройство не подключено к домашней сети, то устройство пропадает в пустоту, и на картах мы его не увидим.
  • Иногда может сработать триггер выхода/входа из зоны, когда фактически девайс не покидает зону (можно попробовать решить расширением зоны).

Исходные данные

  • Квартира, 3 комнаты, раздельный санузел, 2 балкона, примерно 82м2.

  • Советский ремонт с элементами хайтека (хай-така), дает возможность проводить эксперименты не сильно переживая за внешний вид.

  • Желание изучить что-то новое и сделать что-то необычное.

  • Собирать как можно больше данных, а потом уже разбираться, что с ними делать.

Установка

Установка HA предельно проста:

  1. Записать образ HA на SD карточку (подробная инструкция с ссылками на скачивание для разных версий Raspberry Pi тут).
  2. Подключить питание и Ethernet к малинке
  3. Подождать несколько минут, пока система развернется в локальной сети на <ip адрес малинки>:8123.

Также можно установить на уже имеющуюся систему с помощью Docker-compose:

version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: homeassistant/raspberrypi4-homeassistant:stable
    volumes:
      - /PATH_TO_YOUR_CONFIG:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    network_mode: host

А теперь разберем несколько сценариев использования.

Проверка на вшивость

После всех правок файла с автоматизациями можно очень просто их проверить. Для начала заходим в веб морде HA в “Настройки” – “Общие” – “Проверить конфигурацию”, и если ошибок в конфиге нет – жмем на кнопку “Перезагрузить автоматизации”: 

Домашний помощник как запустить почасовую автоматизацию

Далее идем на страничку с entity_id как мы делали немного выше, находим там нашу автоматизацию в списке и жмем на кнопку слева от нее, после чего жмем на кнопку “Запуск”:

Домашний помощник как запустить почасовую автоматизацию

Домашний помощник как запустить почасовую автоматизацию

Если все сделали правильно – автоматизация сработает и вы это увидите. Ура! У вас получилось!

Пример посложнее

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

# Включение света в ванной ночью и днем 
- alias: Turn on bathroom light
  trigger:
    platform: state
    entity_id: binary_sensor.motion_sensor_158d0001b177e8
    to: 'on'
  action:
    - service: light.turn_on
      data_template:
        entity_id: light.bathroom
        brightness_pct: &amp;amp;amp;amp;amp;gt;
          {% if is_state('sun.sun', 'below_horizon') and is_state('light.living_room', 'off') %}
            1
          {% else %}
            100
          {% endif %}

Это автоматизация с условием включения света в ванной на 1 процент ночью, если выключен ночник в зале (это обычно значит, что я сплю) и на 100 процентов в остальных случаях (всегда днем или вечером, если включен ночник). Разберем подробнее:

  • platform: state это значит что в тригере мы будем отслеживать значение состояния нужного нам датчика
  • entity_id: binary_sensor.motion_sensor_158d0001b177e8 это название датчика взятое из списка всех устройств на соответствующей странице, чуть ниже покажу, где его можно взять.
  • to: ‘on’ задаем значение, при котором должен сработать тригер

Теперь о entity_id и где его можно посмотреть. В веб версии необходимо найти слева раздел “Инструменты разработчика” и нажать на кнопку “состояния”:

Домашний помощник как запустить почасовую автоматизацию

Справа вы увидите таблицу со всеми вашими устройствами и не только, в первой колонке которой и будет перечень entity_id:

Домашний помощник как запустить почасовую автоматизацию

Далее разберем секцию action: более подробно:

  • service: light.turn_on указываем какое действие мы хотим сделать при срабатывании тригера
  • data_template: тут мы говорим, что будем использовать далее компонент HA “шаблон”, что это такое можно почитать в офф документации HA тут
  • entity_id: light.bathroom поясняем каким именно устройством мы хотим управлять
  • brightness_pct: > указываем, какой параметр у устройства мы хотим изменить (Внимание! В коде вместо “&gt;” надо писать именно знак >) в данном случае это яркость в процентах

Далее нам надо будет познать немного программирования.

Я каждый день рискую запустить восстание машин, но всё ещё жив

Домашний помощник как запустить почасовую автоматизацию

Я создал чудовище.  

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


Подключаем файл automations. yaml

Изначально все необходимые действия с настройками и добавлением устройств, автоматизаций, групп и прочего можно делать в стандартном файле конфигурации configuration.yaml, но для удобства, мы будем делать все действия с автоматизациями в файле automations.yaml. Для начала подключаемся к малине по ssh, идем в настройки HA:

cd /home/homeassistant/.homeassistant/
sudo nano configuration.yaml

Ищем в конфиге следующую строчку, написана она должна быть именно так, без знака # перед ней:

automation: !include automations.yaml

Если строчки по какой-то причине нет – добавляем ее, но так может быть только, если вы ее зачем-то сами удалили. Сохраняем файл и выходим из редактора. После можно уже открыть файл с автоматизациями и приступить к ее наполнению:

sudo nano automations.yaml

sudo nano automations.yaml

Вернемся немного в прошлое

Если вы читали статью 4 из оглавления в начале, то частично имеете представление об автоматизациях. Там мы рассматривали возможность отложенного запуска бриджа для интеграции в HomeKit. Рассмотрим этот пример еще раз и разберем для лучшего понимания:

- alias: 'HomeKit Delayed Start'
  trigger:
    - platform: homeassistant
      event: start
  action:
    - delay: 00:01
    - service: homekit.start
  • alias: это название автоматизации. Отсюда HA берет entity_id для нее, кириллицу лучше не использовать
  • trigger: это условие, которое заставляет автоматизацию сработать. В данном примере это событие запуска HA
  • action: это действие, которое будет совершено автоматизацией. Тут это отложенный запуск плагина HomeKit

Уведомление о доступных обновлениях

Ну и вместо заключения. Будет полезно сразу обозначить те уведомления, в которых есть кликабельные варианты выбора. Я это делаю смайликом шарика в title сообщения. А вы? 

Ну и не правда ли приятно, если у каждой категории уведомлений будет свой звук. Это делаем так:

Подключаем телефон к айтюнс (о да, я знаю, как вы это любите) 

Домашний помощник как запустить почасовую автоматизацию

Ищем приложение home-assistant и скидываем туда, предварительно запоминая имя файла.

Затем заходим в приложение на ios – настройки, notification – import sounds.

Ну все, дальше уже сами!

UPD: Подкорректировал автоматизацию об безуспешной авторизации. Спасибо acidquest 

Уведомление о выключении

Дальше пробежимся по безопасности. 

С помощью GPS

  • Точность работы сравнима с GPS трекером в телефоне.
  • О телефоне можно узнать: процент заряда аккумулятора, заряжается устройство или нет, а также показатель состояния аккумулятора.

    Домашний помощник как запустить почасовую автоматизацию

  • Можно контролировать устройства (пользователей) не только на вход домой, но и на вход в любую из кастомных зон.

  • Активно тратит заряд.
  • Требует подключение Интернета.
  • Для точного трекинга необходимо настроить SSL, чтобы телефон мог отправлять данные о местоположении из вне локальной сети.
  • Требует дополнительных прав доступа к GPS, возможна утечка данных третьей стороне в будущем.
  • На бюджетных телефонах, которые имеют свойство неожиданно менять местоположение GPS, возможны проблемы с выпадением из зоны.

Версия 2 – текущая

И тут мне попался российский контроллер MegaD ( https://ab-log.ru ). Я так понял, что проект начинался с самоделки на ATmega328,  а потом перерос в готовый продукт. По соотношению цена/функционал он был очень интересным вариантом для теста. Из минусов: отсутствие нормального p2p, нет возможности сделать расширенную логику (функционал при пропадании сервера, есть только базовые команды). Минусы закрывались тем, что разводка теперь шла звездой и я в любой момент мог  поменять контроллер на любой другой.

Раз уж менять железо, то можно и поменять мозги. Самому писать всю панель времени не хватало, решил попробовать взять готовое решение: из всех мне понравился HomeAssistant. Бонусом шло мобильное приложение. Первое время, пока у меня было старое и новое железо, clunet работал через временный MQTT шлюз, а потом я отказался от него полностью. 

Основной экран системы
Основной экран системы
Еще пару фото интерфейса

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

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

Сервер тоже обновился. Хранить кучу разных сервисов на одной системе не очень удобно, да и не очень безопасно. От знакомых наслушался про вируталки и решил попробовать: выбор был из ESXi (бесплатная версия) и Proxmox. Для дома особой разницы я не нашел, в итоге выбрал ESXi за красивую панель управления и хорошую базу знаний. Очень доволен, можно проводить различные тесты, делать разные окружения.

Далее, будут подробности обо всех частях системы.

Щит 1 (снизу) и щит 3 (сверху)
Щит 1 (снизу) и щит 3 (сверху)
Щит 2
Щит 2
Цифровизация советского выключателя
Цифровизация советского выключателя
  • Комната (пока только одна): диодные ленты, люстра. По освещённости: включаются только 1 раз в сутки. По приходу: при сработке входной двери в ближайшие 5мин и отсутсвие людей в комнате. Люстра управляется вручную или через HomePod.

  • Коридор: диодные ленты.  По датчику движения, при открытии входной двери.

  • Туалет: диодные ленты, лампочка. При открытой двери свет горит, при закрытой по датчику движения. Лампочка используется только вручную.

  • Ванна: диодные ленты, лампочка. При открытой двери, свет включается по движению на 45с. При закрытой двери – сразу на 10м. Лампочка используется только вручную.

  • Шкафы/антресоли: диодные ленты. Да-да, данных много не бывает и у меня стоит автоматика в некоторых из них.

  • Кухня: диодные ленты, лампочки. Диодные ленты расположены над рабочим столом, там же стоит и датчик движения для них. Включаются по движению на одну минуту. Лампочки управляются вручную или через HomePod.Весь свет отключается, если нет движения более 5 минут.

Для всех диодных лент я ограничил максимальную яркость в районе 80% (значение ШИМ 3008 из 4095) для продления их срока службы.

Датчик и подсветка рабочей поверхности на кухне. С помощью изоленты подбираю оптимальный радиус сработки
Датчик и подсветка рабочей поверхности на кухне. С помощью изоленты подбираю оптимальный радиус сработки
Подсветка кухонного шкафа. Белый кружок - врезной геркон
Подсветка кухонного шкафа. Белый кружок – врезной геркон
Апгрейд кладовки

В основной комнате стоит Yamaha RX-V685. Удобен тем, что в нем есть API позволяющее управлять из-вне (yamaha-nodejs https://www.npmjs.com/package/yamaha-nodejs или интеграция в Home Assistant). Есть интеграция в Spotify, позволяющая управлять через Spotify API (ранее был самописный скрипт, теперь через  home assistant). Так же, использовал в качестве TTS в связке с raspberry (через google), но raspberry понадобилась для других задач и доработки отложились. Пробовал включать интернет-радио через Yamaha (API), но как-то не прижилось.

Недавно поставил две Apple HomePod (обычный и mini) – практика английского и управление устройствами через HomeKit. В планах сделать на ней TTS ( daapd или что-то подобное).

Подключен телевизор LG, через Home Assistant на него дублируются уведомления.

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

У проекта MegaD есть интересный вариант – combo sensor. Сразу получаем температуру, влажность, освещенность (подробнее чуть ниже), ик передатчик (не использую), со2 (опция, ибо дорогой. Ставил только в комнатах и на кухне), датчик шума (опция, не использовал).

На квартиру получилось 9 датчиков. 

Осталась старая шина 1W, из нее используются: 3 датчика на стояках отопления, 1 в трубе тиона, 1 на балконе.

На улице висят 2 “Outdoor sensor” от MegaD (температура, влажность, освещенность).

Для расчета уличной температуры беру данные с 4 датчиков (2 уличных комбо, 1W улица, 1W тион) и выбираю наименьше, так же и с освещенностью. Для влажности считаю среднее по датчикам.

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

По всей квартире (и на балконах) стоят датчики освещённости. В планах сделать динамическое управление освещением всей квартиры, но пока используется только один датчик. Алгоритм достаточно простой: берем датчик в темном участке квартиры, проверяем все ближайшие лампы, если выключены, то используем полученное значение освещенности. Использую для корректировки диодных лент в коридоре, туалете, ванной. Так же, при достаточной освещенности автоматически не включится свет в комнате.

На всю квартиру стоят 3 вытяжки: 

  • Ванна: S&P SILENT-200 CZ DESIGN. Включается по влажности (минимум на 30 мин) или движении при закрытой двери (минимум на 10 мин).

  • Туалет: S&P SILENT-200 CZ. Включается по движению при закрытой двери, минимум на 10 минут.

  • Кухня: S&P SILENT-300 CZ PLUS DESIGN. Включается под датчику co2 или влажности, минимум на 10 минут.

Во всех есть возможность принудительного включения на 1 час через HomeKit/HomeAssistant. 

Для управления всеми вытяжками я начал пробовать использовать таймеры (сущность timer в home assistant). Это позволяет поставить таймер сразу на продолжительное время и не переживать, что вытяжка выключится автоматикой. Например, я ставлю вытяжку в ванной на 10 часов , когда вешаю сушиться постиранную одежду. 

Также, недавно поставил на все вытяжки регулятор оборотов, т.к. брал с запасом и  на полной мощности они шумноваты. Получился интересный алгоритм: если в помещении кто-то находится , то скидываем обороты в район 20-40%. после ухода – возвращаем обратно на 100%. 

Если планы запускать их по общему уровню со2 в квартире, но еще не придумал алгоритм. Сейчас стоит только на кухне при превышении 1400ppm.

Основа у меня Tion 3S. Начитался статей на хабре и взял – доволен. 

Была модель О2 , взял 3-ю из-за рекуперации и блютуза. Штатный пульт не о чем, да и хотелось  автоматики. Написал шлюз (висит на RPi Zero W), пробрасывающий управление с BT на MQTT. Пробовал делать разные сценарии, но в итоге пришел к тому, что он всегда включён на первой скорости. Разовые скачки CO2 не так заметны, да и нивелируются общим объёмом воздуха в квартире (плюс вытяжки).

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

Увлажнитель Redmond RHF-3310S. Работает, но редко зависает (показывает 95% влажности и отказывается работать). Управляется через общий с тион-ом BT шлюз. Воду лью из осмоса.

Кондиционер MHI SRK20ZSX-W

Хороший аппарат с очень высокой энергоэффективностью. Управление с ДУ пульта, WiFi только докупным блоком.

Нашёл проект MHI-AC-Ctrl ( https://github.com/absalom-muc/MHI-AC-Ctrl ), использую уже достаточно давно – проблем нет. Из минусов – не все функции поддерживется, но это особенность протокола самого кондиционера: штатные проводные пульты имеют те же ограничения. Например, отсутствие 3D обдува или управление горизонтальным потоком воздуха.

Недавно нашел идею “форсуночного увлажнения” (или “увлажнение водяным туманом”). Информации мало и в основном только от продающих (т.е. Заинтересованных) магазинов. Думаю, что это связано с ценой: базовые комплектации (без установки) начинаются от 100 000 RUB, а дорогие запросто могут быть от 1 000 000 RUB. Заказал себе на тест комплект у наших китайских друзей, с доставкой DHL вышло в районе 25 000 RUB (еще будет растаможка, т.к. очень вероятно, что посылка может не пройти по лимитам).

По всей квартире стоят датчики движения (PIR) в составе комбо-сенсоров и датчики на открытие дверей (включая межкомнатные и некоторые шкафы). Подключено это все к компоненту Alarm Panel, на данный момент управляется только с телефона.

Сделал режим “In-home security”: на любое изменение состояния любых датчиков дверей приходит оповещение на телефон. Полезно, когда дома строители и нет времени за ними детально следить.

Видеонаблюдение от Ubiquiti: G4 Dome + G4 Doorbell, запись на Cloud Key Gen2 Plus (5TB HDD). Подключено в home assistant через модуль Unifi Protect ( https://github.com/briis/unifiprotect )

Недавно решился на самопальный СКУД: электронный замок ATIS Lock Ch и распознавание лиц с G4 Doorbell через deepstack ( https://deepstack.cc ). Работает отлично, но хочется добавить второй фактор, что бы нельзя было открыть замок фотографией на экране смартфона.  Алгоритм:

  • Нажатие на кнопку звонка в doorbell.

  • Фотка с камеры отправляется в telegram и deepstack.

  • Результат распознавания уходит в telegram.

  • При успешном совпадении (более 80% ), открывается дверь и выводится имя на экран doorbell.

  • Иначе (или, при 2 секундном таймауте на случай подвисания deepstack), срабатывает дверной звонок (обычный советский, через реле).

Пример уведомлений от системы
Пример уведомлений от системы
Накладной электромеханический замок. Не дошли руки спрятать проводку от него
Накладной электромеханический замок. Не дошли руки спрятать проводку от него
G4 Doorbell со стандартным приветствием
G4 Doorbell со стандартным приветствием

Датчики протечки Neptun SW005. Пока только уведомление на смартфон, в дальнейшем буду ставить Neptun PROFI 12В (уже куплены) для автоматического перекрытия подачи воды.

Накопительный бойлер 50л на 2кВт. Используется только на время ежегодного отключения горячей воды. Подключен через контактор, включается только при дешевом тарифе на электроэнергию. В планах сделать полностью автоматическое управление: если температура ГВС опустилась ниже определенного порога и длится это больше определенного времени, то включаем подогрев и коммутируем подачу воды.

Счетчики стоят обычные (от ЖКХ), уже куплены БелЦЕННЕР ETК-м Ду 15 с импульсным выходом. Можно добавить алгоритм на подобии: если вода течет без остановки более N минут/часов, то это может означать утечку. На старых счетчиках пробовал делать распознавание через мини-камеры (что-то вроде “для обследования труб”), но не очень удобно позиционировать и часто ловили блики. Понравился проект AI-on-the-edge-device  ( https://github.com/jomjol/AI-on-the-edge-device ), который делает распознавание прямо на ESP32-CAM. Работает неплохо, но начался ремонт стояков водоснабжения и пришлось разобрать конструкцию.

Фото устройств из интернета

Обратный осмос. Пока без автоматики (стоит только повышающий насос), в планах добавить отдельный счетчик (для более точного подсчета литров для замены фильтров) и клапан для автоматической промывки системы (что бы не застаивалась вода).

Поставил два электронных манометра (китайский ноу-нейм). Удобно, что подключаются по i2c и отдают значения сразу в Бар-ах. Планирую использовать для контроля наличия воды в магистрали и состояния вводных фильтров (их еще нет, но обязательно будут).

Установленный манометр
Установленный манометр

Хочется сделать аварийный запас воды (управление через приводы на краны и включение по датчикам давления), но пока идей нет. Подобия расширительного бачка не нравятся тем, что там будет заставиться вода и часть полезного объема занята воздухом.

Датчик температуры на трубе отопления
Датчик температуры на трубе отопления

Учет количества и мониторинг параметров сделал через китайский счетчик DDS238 (подключен по импульсному выходу и RS485 к Megad).

Стоят два ИБП: APC Smart-UPS 1500 (только на сервера и сетевое оборудование, АКБ 4х60а/ч) и APC Smart-UPS 3000 (на всю квартиру, кроме мощных потребителей: ПММ, стиральная машина и т.д. Штатные АКБ). Оба с Network Management Card, данные уходят по MQTT в home assistant через самописный шлюз.

Каждая MegaD стоит на небольшом слаботочном щите. Для каждой выделен MeanWell DRC-100A (не всегда хватает 100W, планирую попробовать перейти на PSC-160A-C) с батареей на 26а/ч. С каждого БП снимается выход “A/C OK”, который используется для определения наличия питания 200V: при пропадании сети диодные ленты переходят в аварийный режим и светятся максимум на 40%.

В планах поставить IoTaWatt для мониторинга потребления отдельных линий питания, но пока смущает цена. 

Есть идеи копить дешевую электроэнергию и тратить ее во время дорогих тарифов (через подобие Grid Tie инвертора), но рассматриваю это больше как игрушку, т.к. не уверен в экономической выгоде от этого.

Выносные АКБ для APC 1500
Выносные АКБ для APC 1500
Вводной щит. УЗО есть, оно находится на лестничной клетке
Вводной щит. УЗО есть, оно находится на лестничной клетке

Сеть и мозги системы 

Ядро – Home Assistant (конфиг будет в конце статьи). Устройства подключаются через Mosquitto (MQTT). Данные хранятся в MySQL. Крутится это на виртуалке c Debian на ESXi.

Сеть построена на Mikrotik CCR1009-7G-1C-1S+ / CRS328-24P-4S+  и Cisco SG350-20. Wifi на Ubiquiti UniFi AC HD (2 шт) + Cloud Key Gen2 Plus.

Интернет Ethernet(основной провайдер) + GPON (резерв, коробка Huawei HG8245Hv5). GPON коробка перенастроена так, что все VLANы уходят транком в мою сеть: IPTV, PPPoE, VoIP. IPTV я не использую, PPPoE и VoIP подняты на микротике.

Телефонию поднял на бесплатной версии 3CX (да, asterisk я не осилил). Туда подключен транк от GPON (городской телефон, безлимит по городу), Zadarma и друга (такой же Кулибин с 3CX и GPON, подымали транк между квартирами ради интереса). В качестве клиентов использую софтфоны  на iOS/Android (у 3cx они очень удобные, в т.ч. Звонок приходит через PUSH, не нужно держать подключение к серверу) и трубку Gigaset CL660HX (выбирал по внешнему виду) с IP-базой от Gigaset C530A-IP (в магазине была возможность взять только базу без трубки. Запитал через активный POE сплиттер). Удобно, что можно пользоваться городским телефоном, когда находишься где-то в городе или даже за границей.

DMR HotSpot – собран на RPi ZeroW. Малоизвестная штука, используется для проброса цифровой (DMR и не только) радиосвязи в интернет. Управляется виртуалкой с HBLink. Чуть больше подробностей: http://blog.marxy.org/2019/02/pi-star-hotspot-getting-started.html https://www.pistar.uk

В Home Assistant добавлены датчики ping’a на основные сетевые устройства. При сбое отправляется уведомление на телефон (нужен будет резерв, т.к. при отказе роутера уведомление просто не дойдет).

Самосборный сервер с ESXi
Самосборный сервер с ESXi
Скрытая установка узла связи среди банок с закатками. Стоечные уши отлично развернулись на 90 градусов и стали настенным креплением
Скрытая установка узла связи среди банок с закатками. Стоечные уши отлично развернулись на 90 градусов и стали настенным креплением
Серверная на шкафу. До выбора стойки еще не дошел, так что собрана она из досок от упаковки ПММ
Серверная на шкафу. До выбора стойки еще не дошел, так что собрана она из досок от упаковки ПММ

Print-server на базе Kyocera FS-1040 и RPi ZeroW. Шаринг сделал через CUPS (удобно, что смартфоны подцепили его без настройки), а для экономии электричества сделал авто-отключение принтера через модуль tea4cups (управляет реле).

“Умное” зеркало Welt-Wasser MIRA 5070-1 (на всех фото из интернета видна эмблема, но на самом деле ее нет). Понравилось тем, что легко разбирается и внутри все собрано модульно. Подогрев вывел на свое реле, включается при нахождении в ванной более 20 секунд (при закрытой двери). Подсветка синхронизирована с освещением ванной. Сенсорная кнопка сбоку зеркала переключает подсветку на 100% яркости.

Установленная и подключенная основа зеркала. Черный провод - заводской, оставил его чтобы не потерять на случай гарантии
Установленная и подключенная основа зеркала. Черный провод – заводской, оставил его чтобы не потерять на случай гарантии
Потроха зеркала после разбора. Достаточно открутить по одному винту с каждой стороны зеркала и отсоединить разъёмы.
Потроха зеркала после разбора. Достаточно открутить по одному винту с каждой стороны зеркала и отсоединить разъёмы.

Роллеры или другие варианты закрытия окна. Живу на 5 этаже, штор в некоторых комнатах вообще нет. Иногда нужно сделать полную темноту, чтобы выспаться, посмотреть кино и т.д.

Весь штатный свет (выключатели и лампы/люстры) подключить к автоматике. Добавит возможность “выключить весь дом” и использование в сценариях.

Датчики занятости помещения. На данный момент, все алгоритмы сводятся к “датчик движения + таймаут”, что не совсем правильно. Хочется сделать более продвинутое решение, которое будет учитывать больше датчиков. Как минимум, если в закрытой комнате кто-то двигался, то не стоит убирать флаг присутствия по таймауту.

Датчик Гейгера (например, на СБМ-20) или “датчик третьей мировой”. Практической пользы минимум, разве что отправлять на narodmon. Больше для развлечения.
Домофон. Еще не решил, что с ним можно сделать, но чешутся руки добавить ему мозгов.

Робот-пылесос iclebo omega. На борту linux, даже есть доступ в консоль через UART. Хочу добавить хотя бы возможность удаленного запуска (ESP модуль, например).

Автосмыв туалета – жду сервоприводы.

Экран Waveshare, монитор на 15", OrangePi. Тестовая среда для домашнего терминала
Экран Waveshare, монитор на 15″, OrangePi. Тестовая среда для домашнего терминала

Бонусом, фото кошки, пьющей из высокотехнологичной системы увлажнения воздуха:

Домашний помощник как запустить почасовую автоматизацию

Бридж для MegaD

Бридж для BT

Бридж для APC

Ещё одна автоматизация сталинки

Основное окно Home Assistant
Основное окно Home Assistant

Очередная статья c теорией и практикой на тему домашней автоматизации.

Предисловие

Являюсь давним читателем хабра, но только сейчас созрел написать статью. 

В ней будет отображено как текущее состояние дел, так и немного истории. Конкретного финиша нет: совершенствовать можно почти до бесконечности. 

Рассчитываю как поделиться идеями и опытом, так и набраться критики и предложений. 

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

Возможно, что по итогу нужно будет сделать еще одну статью с забытыми/опущенными подробностями и ответами на вопросы.

Просьба сильно не пинать за хаос в щитах, все очень часто переделывается и быстрее выходит кинуть соплями. Потихоньку привожу все в порядок.

Более полный пример

Вообще автоматизации в основном имеют такой скелет:

  • trigger как мы ранее говорили – действе которое запускает автоматизацию
  • condition это условие, исполнение которого необходимо для автоматизации
  • action ну и действие которое выполняется автоматизацией
- alias: Temperature heater 24 on morning
  trigger:
    platform: time
    at: '06:30:00'
  condition:
    condition: state
    entity_id: group.devices
    state: home
  action:
    - service: climate.set_temperature
      data_template:
        entity_id: climate.ariston
        temperature: "24"

Trigger. В данном примере тригером является определенное значение времени, а именно 6:30 утра. Именно во столько должна сработать автоматизацияCondition. Условием выполнения автоматизации является проверка значения группы devices. Оно может принимать значение home или not_home.Action. Ну и наконец действие – установка на термостате необходимой температуры в 24 градуса.

Вместо послесловия

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

Отслеживание системных параметров

Чтобы отслеживать остаток свободной памяти, загруженность процессора или скорость Интернет соединения, мы можем добавить мониторинг показателей системы.

- platform: systemmonitor
  resources:
    - type: disk_use_percent
      arg: /
    - type: memory_free
    - type: memory_use_percent
    - type: processor_use
    - type: processor_temperature
    - type: disk_free
      arg: /

При желании можем создать автоматизацию, которая при критических показателях будет отправлять уведомление о необходимости принятия мер.

Также мы можем посмотреть Uptime сервера.

- platform: uptime
  name: Time Online

sensor: !include_dir_merge_list sensors

Вариант представления на UI

Утренние (или нет) погодные оповещения

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

Создаем новый файл автоматизации, и начинаем писать логику.

Пишем переменную, которая будет отвечать за срабатывание оповещений только по будням. Если он true — то в выходные оповещений не будет.

alarmweekday:
  name: Weekdays Only
  initial: off
  icon: mdi:calendar

И подключаем в основном конфиг файле.

input_boolean: !include input_boolean.yaml

- alias: 'Wake Me Up'
  trigger:
    platform: time
    at: input_datetime.weather_notification
  condition:
    condition: or
    conditions:
      - condition: and
        conditions:
          - condition: state
            entity_id: input_boolean.alarmweekday # оповещение в выходные
            state: 'on'
          - condition: time
            weekday:
              - mon
              - tue
              - wed
              - thu
              - fri
      - condition: and
        conditions:
          - condition: state
            entity_id: input_boolean.alarmweekday
            state: 'off'

  action:
    service: telegram_bot.send_message
    data: # тут
      message: "{% if now().strftime('%H')|int < 7 %} 
        Доброй ночи,
        {% elif now().strftime('%H')|int < 12 %}
        Доброе утро,
        {% elif now().strftime('%H')|int < 18 %}
        Хорошего дня,
        {% else %}
        Хорошего вечера,
        {% endif %}
         сейчас на улице {{states('sensor.openweathermap_temperature')}}°C. "

Домашний помощник как запустить почасовую автоматизацию

ESP

Так как умного градусника у меня нет, а температуру измерять хочется, воспользуемся ESP8266.
Сначала установим интеграцию ESPHome из официального списка интеграций.

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

esphome:
  name: home_params
  platform: ESP8266
  board: nodemcuv2

logger:
api:
ota:

Подключимся к WiFi

wifi:
  ssid: !secret xiaomi_router_ssid
  password: !secret xiaomi_router_password

По умолчанию используются секреты только от ESPHome. А для того, чтобы подгрузить секреты из HA, можно создать отдельный файл, где мы заинклудим эти секреты.

Теперь подключим data pin (обычно это средняя нога) термометра к D2 порту, дадим на него питание и землю. Потом создаём сам термометр (DHT11) и две переменные, которые будем отслеживать в HA.

sensor:
  - platform: dht
    model: DHT11
    pin: D2
    temperature:
      name: "Living Room Temperature"
    humidity:
      name: "Living Room Humidity"
    update_interval: 60s

Домашний помощник как запустить почасовую автоматизацию

Домашний помощник как запустить почасовую автоматизацию

Если все заработало, то в Developer Tools мы увидим созданные переменные.

Домашний помощник как запустить почасовую автоматизацию

Что если тогда?

Что за набор букв и символов, подумаете вы:

{% if is_state('sun.sun', 'below_horizon') and is_state('light.living_room', 'off') %}
  1
{% else %}
  100
{% endif %}

На самом деле тут все просто. 

  • {% %} этими фигурными скобками мы обозначаем, что начинаем использовать шаблон
  • if это, как можно понять с перевода на русский язык, использование логического “если”
  • is_state(‘sun.sun’, ‘below_horizon’) тут мы проверяем состояние устройства sun.sun (да есть и такое!), а точнее что оно равно below_horizon то есть “за горизонтом”
  • and а это у нас логическое “и”, указывающее что должны выполняться первое условие и второе:
  • is_state(‘light.living_room’, ‘off’) где мы проверяем, какое значение у устройства light.living_room и в нашем случае оно должно быть off или “выключено”

Ну ладно не просто, но и ничего сложного в этом нет.) 

Отслеживание устройств

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

  • с помощью роутера (у меня в наличии Xiaomi Router Mi4A),
  • с помощью GPS.

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

Добавим blueprints

Теперь небольшое лирическое отступление в виде рассказа о написании blueprints на примере уведомлений.

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

Например, можно упростить создание уведомлений о начинающихся осадках.

blueprint:
  name: Fallout start notification
  domain: automation
  input:  # аргументы шаблона
    precipitation:
      name: Precipitation level
      selector:
        entity:
          domain: sensor # только для ui, поможет создать автоматизацию, предоставляя только сенсоры в выпадающем списке
    message_start:
      name: Telegram message
      default: "No message"

trigger: # условия срабатывания
  - platform: numeric_state  
    entity_id: !input precipitation
    above: 0.9
    for: 
         minutes: "{{ states('input_number.minimum_time_for_stable_value')|int }}"

action:
  - service: telegram_bot.send_message
    data:
      message: !input message_start 

“for” — это время, в котором должен оставаться выбранный параметр, чтобы сработал триггер на превышение уровня осадков.

minimum_time_for_stable_value:
  name: Minimum time for stable value
  initial: 1
  min: 0
  max: 59
  step: 1

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

- alias: 'Rainy is started'
  use_blueprint:
    path: homeassistant/fallout_start_notification.yaml
    input:
      precipitation: sensor.openweathermap_rain
      message_start: "Похоже, дождь начинается. Уже накапало {{states('sensor.openweathermap_rain')}}мм."
automation/snow_start.yaml

- alias: 'Snow is started'
  use_blueprint:
    path: homeassistant/fallout_start_notification.yaml
    input:
      precipitation: sensor.openweathermap_snow
      message_start: "Пошел снежок. Уже навалило {{states('sensor.openweathermap_snow')}}мм."

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

Для большей полезности можно изменить шаблон и поменять action на повышение яркости для света в доме или закрытие штор.

Освещение

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

Для этого необходимо произвести действие по определенному событию. В этом нам помогут автоматизации.

- alias: Entering home
  trigger:
    platform: state
    to: home
    entity_id: device_tracker.mi9lite
  action:
    - service: light.turn_on
      data:
        entity_id: light.midesklamp1s_f86f
        brightness: 35
        color_temp: 350

- alias: Leaving home
  trigger:
    platform: state
    to: not_home
    entity_id: device_tracker.mi9lite
  action:
    - service: light.turn_off
      entity_id: light.midesklamp1s_f86f

Теперь импортируем в наш основной файл весь каталог automation — так нам будет удобнее при написании следующих автоматизаций.

automation: !include_dir_merge_list automation

Для того, чтобы получить адаптивное освещение в зависимости от времени суток, нужно настроить цветовую температуру. Это удобно сделать внутри блока switch. Тут важно понимать, что пока данный switch включен, изменить параметры температуры будет невозможно (через interval минус время_с_прошлого_обновления лампа примет старые параметры).

Здесь вы найдете больше про динамическую цветовую температуру (flux в терминологии HA). А если вам интересна тема адаптивного освещения, на Хабре есть отличная статья по этому поводу.

switch:
  - platform: flux
    lights:
      - light.midesklamp1s_f86f
    name: Fluxer
    start_time: '9:00'
    stop_time: '0:00'
    start_colortemp: 5000
    sunset_colortemp: 3200
    stop_colortemp: 2800
    brightness: 25.5
    disable_brightness_adjust: true # яркость будет константой
    mode: mired # для не rgb ламп
    transition: 30
    interval: 30```

<!--</spoiler>-->
# Погода
По умолчанию в HA уже присутствует интеграция с погодным API от [Meteorologisk institutt](https://www.home-assistant.io/integrations/met/) (Норвежский метеорологический институт), но мы можем легко создать другую прямо через UI.

## Создание новой интеграции OpenWeatherMap
Переходим в config / Integration на UI , нажимаем на Add integration, и выбираем из списка OpenWeatherMap.

![](https://habrastorage.org/webt/wk/q5/gu/wkq5guripld3x0rlvuuvrh6us-8.png)

Вводим api_key, полученный на их сайте и нажимаем Submit. В итоге получим 19 сущностей, которые можем использовать для своих целей в автоматизациях.

![](https://habrastorage.org/webt/l1/dj/ps/l1djps20zhxaghdhbfrxzcm7tac.png)
*Сущности OWM (на скриншот попали не все 19)*

Таким же образом через UI можно создать интеграции к другим сервисам вроде SpeedTest, или OpenUV.

# Уведомления
Для настройки уведомлений можно использовать стандартные оповещения HA, отображаемые в боковом меню, уведомления на конкретных устройствах (нужно установленное приложение на девайсе), а также оповещения в сторонние сервисы.

![](https://habrastorage.org/webt/vw/lo/uk/vwloukneshhkvd6sklfjojnsvrc.png)
*persistent_notification*

Альтернативный способ уведомлений - это уведомления в сторонние сервисы, например Telegram. Для начала нужно создать бота, получить его api_key (при создании отправят ключ) и chat_id, который можно найти в ответе внутри `result.chat.id` после запроса на https://api.telegram.org/bot{api_key}/getUpdates .

<!--<spoiler title="Ответ с Telegram API приходит пустой">-->

Такое иногда случается по разным причинам. 
В таких случаях подходит другой способ получения chat_id - написать @getmyid_bot  боту и скопировать себе user ID.
<br>
![](https://habrastorage.org/webt/h_/em/a_/h_ema_sk04ldd4xsfkdzdthaml4.png)

<!--</spoiler>-->
Простейшая настройка Telegram бота:

<!--<spoiler title="notification/telegram_bot.yaml">-->

  • platform: polling
    api_key: !secret telegram_api
    allowed_chat_ids:
    • !secret telegram_chat_id

Для того, чтобы не разглашать всем секретные данные, создадим еще secrets.yaml. Туда мы сложим все данные, которые не должны попасть в публичный доступ. Для использования переменных из этого файла используем !secret.

telegram_api: %api_key%
telegram_chat_id: %chat_id%

telegram_bot: !include notification/telegram_bot.yaml

В итоге у нас имеется Telegram бот, готовый к отправке сообщений.

Оцените статью
Huawei Devices
Добавить комментарий