ESPHome — система для управления устройствами на базе чипа ESP32/ESP8266. С их помощью можно создавать свои собственные устройства с неограниченным функционалом.
Интеграция в свою очередь позволяет добавлять в Home Assistant различные датчики и сенсоры. А также позволяет разгрузить основные интерфейсы bluetooth и wifi вашего сервера. Взяв на себя роль небольшого шлюза, например сканнера сети для получения заряда аккумулятора bluetooth.
Большим преимуществом плат является компактность мощность. А также большая расширяемость. Имея плату и набор необходимых сенсоров — вы ограничены только своей фантазией.
Установка интеграции ESPHome
В установке ESPHome нет ничего сложного. Она уже официально поддерживается Home Assistant. Нужно только зайти в магазин дополнений и добавить.
Home Assistant — Обзор Платформы Автоматизации
Если вы не можете найти дополнение, то необходимо выключить расширенный режим. Для этого кликаем в левом нижнем углу по аватару, в писке находим и ставим галочку «Расширенный режим»
После установки активируем:
- Watchdog
- Автозагрузка
- Показывать на боковой панели
И запускам интеграцию.
После того, как мы все установили можно прошивать ESP, мониторить свои сенсоры и создавать необходимые автоматизации.
Первая настройка ESPHome
Перейдите в раздел secrets, он находится в правом верхнем углу. В редактор необходимо вставить ваше соединение с wifi.
wifi_ssid: «my-wifi» wifi_password: «123456789»
Важно вводить название сети со всеми символами, если используются заглавные буквы, то их также необходимо писать заглавными.
После первичной настройки можно добавлять устройства и прошивать. Процесс прошивки мы описывали в статье — прошивка ESP32/ESP8266 через ESPHome.
Источник: io-home.ru
Использование ESPHome-устройств с контроллером Wiren Board
ESPHome — это прошивка для Wi-Fi устройств на базе контроллеров ESP. Её часто используют для изготовления самодельных беспроводных устройств: датчиков, модулей управления шторами или насосами и т.п.
Знаковство с ESPHome и интеграция его в Home Assistant
Прошивка позволяет обмениваться данными с MQTT, поэтому для подключения устройств необязательно устанавливать Home Assistant, достаточно использовать конвертер esphome2wb.
esphome2wb — это стороннее программное обеспечение, которое написано и поддерживается автором.
Конвертер выполнен в виде скрипта wb-rules, который преобразовывает MQTT-топики ESPHome-устройства в контролы виртуального устройства Wiren Board.
Настройка ESPHome-устройства
Перед тем, как использовать устройство с контроллером Wiren Board, включите в прошивке поддержку MQTT и укажите параметры подключения к MQTT-брокеру. Для этого добавьте в файл конфигурации прошивки строки:
name: «my_device» prefix: «esphome/$» # Настройки подключения к MQTT-брокеру mqtt: broker: 192.168.1.42 # укажите IP-адрес контроллера port: 1883 username: » password: » discovery: false id: mqtt_client topic_prefix: «$» # Передача статуса в MQTT birth_message: topic: «$/text_sensor/status/state» payload: online will_message: topic: «$/text_sensor/status/state» payload: offline shutdown_message : topic: «$/text_sensor/status/state» payload: shutdown
После этого устройство подключится к MQTT-брокеру контроллера и создаст топики по адресу /esphome/device-name .
Установка конвертера esphome2wb
- Скачайте из репозитория файл скрипта esphome2wb.js.
- Положите этот файл в папку контроллера /etc/wb-rules/ или создайте в веб-интерфейсе контроллера новый скрипт и вставьте в него содержимое файла.
Всё, теперь все устройства с прошивкой ESPHome, которые подключаются к MQTT-брокеру контроллера автоматически появятся на вкладке Devices.
- Официальный сайт прошивки ESPHome
- Репозиторий esphome2wb на Github
- Тема на портале поддержки
- Просмотр файлов контроллера с компьютера
Источник: wirenboard.com
Сказ о том, как я Home Assistant настраивал
Home Assistant — это популярная система умного дома, которая автоматизирует привычные бытовые процессы и работает на YAML файлах. В этой статье я расскажу, как настроить Home Assistant (далее HA), и что конкретно я использую в повседневной жизни. Это поможет вам избежать ошибок и быстрее продвинуться в изучении HA.
На Хабре уже есть статьи о HA (раз, два, три), но здесь я хочу рассказать об установке и настройке системы от начала до конца. От первого запуска сервера до полноценно работающей системы, которую потом можно улучшать и дорабатывать для себя.
Основной единицей в HA является интеграция — логика, которая описывает взаимодействие с умным устройством или внешним сервисом. Большая часть полезной нагрузки HA ориентировано на связку: умное устройство + интеграция или внешнее API + интеграция.
Набор моих интеграций
Железо, участвующее в статье:
- Микроконтроллер Esp8266, а также датчик температуры и влажности DHT11;
- Лампа Xiaomi Desk Lamp;
- Raspberry Pi 4B в 2GB версии, как сервер для HA (в дальнейшем буду ее называть малинкой);
- Xiaomi Router 4A .
Сервисы, которые будем использовать:
- OpenWeatherMap для получения погоды, температуры, влажности на улице и других метеопараметров;
- Telegram для создания системы уведомлений;
- Google drive для создания бекапов;
- SpeedTest для замеров скорости;
- А также OpenUV для замеров ультрафиолетового излучения и др.
Установка
Установка HA предельно проста:
- Записать образ HA на SD карточку (подробная инструкция с ссылками на скачивание для разных версий Raspberry Pi тут).
- Подключить питание и Ethernet к малинке
- Подождать несколько минут, пока система развернется в локальной сети на :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
А теперь разберем несколько сценариев использования.
Отслеживание устройств
Начнем с отслеживания устройств, с помощью которого мы можем фиксировать вход и выход носителей из дома.
Я предлагаю 2 способа отслеживания:
- с помощью роутера (у меня в наличии Xiaomi Router Mi4A),
- с помощью GPS.
В системе доступно много производителей роутеров. Для старых и не перечисленных в списке моделей можно использовать nmap (более подробно тут).
Если установить на телефон официальное приложение, HA по умолчанию создаст интеграцию, и в системе появится дополнительное устройство, которое можно отследить.
С помощью Xiaomi Router Mi4A
- Не требует никаких действий на устройстве, отслеживает всех в локальной сети.
- Если устройство не подключено к домашней сети, то устройство пропадает в пустоту, и на картах мы его не увидим.
- Иногда может сработать триггер выхода/входа из зоны, когда фактически девайс не покидает зону (можно попробовать решить расширением зоны).
С помощью GPS
- Точность работы сравнима с GPS трекером в телефоне.
- О телефоне можно узнать: процент заряда аккумулятора, заряжается устройство или нет, а также показатель состояния аккумулятора.
- Активно тратит заряд.
- Требует подключение Интернета.
- Для точного трекинга необходимо настроить SSL, чтобы телефон мог отправлять данные о местоположении из вне локальной сети.
- Требует дополнительных прав доступа к GPS, возможна утечка данных третьей стороне в будущем.
- На бюджетных телефонах, которые имеют свойство неожиданно менять местоположение GPS, возможны проблемы с выпадением из зоны.
Создание системы отслеживания через роутер
Трекинг через локальную сеть роутера требует настройки, в отличие от GPS отслеживания. Два вида трекинга можно комбинировать для повышения точности. Ниже можно заметить, что в моем случае отслеживание через роутер работает лучше, чем через GPS. Зеленая зона значит, что телефон внутри зоны, красная — вне зоны.
Результаты работы отслеживания (сверху — роутер, снизу — GPS)
Редактирование конфигурационных файлов через VSCode
Можно подключиться через плагин SSH в VS Code, но получить доступ к проводнику в данный момент мне было удобнее. Поэтому, добавим сетевое расположение.
Нажмем обзор, найдем каталог config (мы в основном будем редактировать его) и выберем его как сетевую папку.
Дальше мы можем перейти в созданную папку и открыть ее через редактор.
router_device_tracker.yaml
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 и наши устройства в нем.
Трекинг устройств через роутер
Освещение
Теперь, когда мы умеем отслеживать пользователя, мы можем включать и выключать определенные лампочки с учетом информации о его местоположении.
Для этого необходимо произвести действие по определенному событию. В этом нам помогут автоматизации.
automation/phone_tracker
— 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 — так нам будет удобнее при написании следующих автоматизаций.
configuration.yaml
automation: !include_dir_merge_list automation
Для того, чтобы получить адаптивное освещение в зависимости от времени суток, нужно настроить цветовую температуру. Это удобно сделать внутри блока switch. Тут важно понимать, что пока данный switch включен, изменить параметры температуры будет невозможно (через interval минус время_с_прошлого_обновления лампа примет старые параметры).
Здесь вы найдете больше про динамическую цветовую температуру (flux в терминологии HA). А если вам интересна тема адаптивного освещения, на Хабре есть отличная статья по этому поводу.
configuration.yaml
- platform: polling
api_key: !secret telegram_api
allowed_chat_ids:
- !secret telegram_chat_id
Для того, чтобы не разглашать всем секретные данные, создадим еще secrets.yaml . Туда мы сложим все данные, которые не должны попасть в публичный доступ. Для использования переменных из этого файла используем !secret.
secrets.yaml
telegram_api: %api_key% telegram_chat_id: %chat_id%
configuration.yaml
telegram_bot: !include notification/telegram_bot.yaml
В итоге у нас имеется Telegram бот, готовый к отправке сообщений.
Утренние (или нет) погодные оповещения
Теперь, когда у нас есть настроенный сервис уведомлений и погодная интеграция, мы можем сделать утренние оповещения о погоде.
Создаем новый файл автоматизации, и начинаем писать логику.
Пишем переменную, которая будет отвечать за срабатывание оповещений только по будням. Если он true — то в выходные оповещений не будет.
input_boolean.yaml
alarmweekday: name: Weekdays Only initial: off icon: mdi:calendar
И подключаем в основном конфиг файле.
configuration.yaml
input_boolean: !include input_boolean.yaml
automation/morning_alarm.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: » Доброй ночи, Доброе утро, Хорошего дня, Хорошего вечера, сейчас на улице >°C. »
Добавим blueprints
Теперь небольшое лирическое отступление в виде рассказа о написании blueprints на примере уведомлений.
В данном случае я бы перевел blueprints не как чертежи, а как шаблоны или заготовки. Их удобнее использовать, если нужно написать несколько похожих автоматизаций, а основную логику оставить нетронутой.
Например, можно упростить создание уведомлений о начинающихся осадках.
blueprints/precipitation_start.yaml
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: «>» action: — service: telegram_bot.send_message data: message: !input message_start
“for” — это время, в котором должен оставаться выбранный параметр, чтобы сработал триггер на превышение уровня осадков.
input_number.yaml
minimum_time_for_stable_value: name: Minimum time for stable value initial: 1 min: 0 max: 59 step: 1
Теперь, когда есть blueprint, мы можем написать автоматизацию с меньшим количеством логики.
Создадим уведомления о начале осадков.
automation/rain_start.yaml
— alias: ‘Rainy is started’ use_blueprint: path: homeassistant/fallout_start_notification.yaml input: precipitation: sensor.openweathermap_rain message_start: «Похоже, дождь начинается. Уже накапало >мм.» automation/snow_start.yaml — alias: ‘Snow is started’ use_blueprint: path: homeassistant/fallout_start_notification.yaml input: precipitation: sensor.openweathermap_snow message_start: «Пошел снежок. Уже навалило >мм.»