Обнаружение присутствия с ESP32 для умного дома
Обнаружение присутствия — удобная функция для умного дома: система или датчик определяет, находится ли кто‑то рядом, и выполняет заранее настроенные действия. Например, при входе в комнату автоматически включается свет, а при выходе — выключается. Также можно получать уведомления о возвращении домочадцев, отслеживать наполняемость помещений или просто видеть, кто и где находится.
В этом руководстве вы соберёте локальный датчик присутствия на базе ESP32 для работы с Home Assistant, используя прошивку ESPresense и MQTT. Подробно разберём установку, варианты настройки, проверку и сценарии использования.
Как работает обнаружение присутствия
Существует несколько подходов к определению присутствия. Краткое описание основных методов:
- Wi‑Fi‑presence: устройство определяется роутером по подключению к сети. Надёжно для определения нахождения в сети, но зависит от возможностей роутера и не всегда даёт точную локализацию по комнате.
- Геолокация (мобильные приложения): полезна для зон «дома/вне дома», но плохо работает внутри помещений из‑за точности GPS.
- Bluetooth Low Energy (BLE): ESP32 сканирует BLE‑маячки (телефоны, часы, метки) и по силе сигнала оценивает расстояние. Это подходит для локализованного определения присутствия в пределах комнаты.
Технически ESP32 в режиме BLE‑сканирования получает RSSI (уровень сигнала) от устройств и использует калибровку для преобразования RSSI в приблизительную дистанцию. ESPresense собирает эти данные и публикует их в MQTT, откуда Home Assistant может прочитать состояние и атрибуты (расстояние, уровень сигнала, время последнего обнаружения).
Преимущества BLE‑подхода
- Локализация по комнатам с точностью в метрах.
- Локальная обработка (можно работать без облака).
- Низкая стоимость: ESP32 стоит недорого и имеет встроенный BLE и Wi‑Fi.
Ограничения
- RSSI зависит от препятствий и позиции устройства в кармане или сумке.
- Не все устройства стабильно транслируют BLE‑маячки.
Что понадобится
- Один или несколько модулей ESP32 (по количеству зон/комнат).
- Блок питания 5 V с Micro‑USB (например, старое зарядное от смартфона).
- Компьютер с Windows, macOS или Linux с доступом в интернет для прошивки.
- Установленный Home Assistant с MQTT‑брокером (например, Mosquitto).
Полезные приложения:
- nRF Connect (мобильное приложение) — для проверки MAC‑адресов и рекламы BLE.
- ESPHome‑Flasher или веб‑интерфейс ESPresense — для прошивки ESP32.
Подготовка и шаги сборки датчика присутствия
Ниже — детальная последовательность действий от подключения платы до создания автоматизации в Home Assistant.
Шаг 1: Подключите ESP32 к компьютеру
Установите драйвер USB‑Serial для вашей платы ESP32, затем перезагрузите компьютер.
- CP2102 (если на плате квадратный чип)
- CH341 (альтернативный чип)
После установки драйверов подключите плату ESP32 к компьютеру через micro‑USB кабель.
Шаг 2: Скачивание и прошивка ESPresense через веб‑интерфейс
Откройте веб‑страницу Espresense.com/firmware, выберите модель ESP32 и нажмите Connect. Выберите COM‑порт (обычно в списке виден чип CP2102 или CH340 или Ser! (COMxx)).
Нажмите INSTALL ESPRESENSE. Отметьте Erase device, далее Next, выберите Install и дождитесь окончания процесса.
После прошивки откройте LOGS & CONSOLE, чтобы отслеживать процесс и убедиться, что модуль стартовал корректно.
Шаг 3: Прошивка через ESPHome‑Flasher (альтернативный метод)
Скачайте последнюю прошивку ESPresense и ESPHome‑Flasher. Запустите ESPHome‑Flasher, выберите COM‑порт, укажите файл esp32.bin и нажмите Flash ESP.
После завершения вы увидите логи и состояние устройства.
Шаг 4: Подключите ESP32 к Wi‑Fi и настройте параметры
На телефоне подключитесь к Wi‑Fi сети espresense‑xxxxxx и перейдите в браузере по адресу 192.168.4.1.
Заполните форму:
- Имя вашей домашней Wi‑Fi сети (SSID) и пароль.
- Язык интерфейса.
- Название комнаты (Room).
- Данные MQTT‑брокера (адрес, порт, логин/пароль, если требуется).
- Включите Query devices for characteristics (рекомендуется для детальной информации).
- Калибровка: введите 4 для отслеживания устройств в пределах ~4 метров (значение подбирается экспериментально).
Оставшиеся параметры можно оставить по умолчанию. Нажмите Save, затем переподключите USB кабель для перезагрузки ESP32.
В логах вы увидите, что ESP32 подключился к Wi‑Fi и начал сканирование BLE‑устройств.
Шаг 5: Добавление ESPresense в Home Assistant
В Home Assistant откройте Configuration → Devices & Services. Найдите Mosquitto broker и щёлкните по связанным устройствам.
Если ESPResense подключён, можно добавлять отдельные BLE‑устройства для отслеживания. Для этого нужно узнать BLE beacon ID (MAC‑адрес), который отображается в логах ESPresense.
Для проверки используйте приложение nRF Connect: оно покажет MAC‑адреса и рекламные пакеты рядом находящихся Bluetooth‑устройств. Сопоставьте MAC‑адрес из nRF Connect с тем, что в логах ESPresense.
Откройте File Editor в Home Assistant и отредактируйте configuration.yaml. Добавьте одну запись sensor для каждого устройства, которое хотите отслеживать. Пример:
sensor:
# Одна запись для каждого маячка, который хотите отслеживать
- platform: mqtt_room
device_id: "xxxxxx"
name: 'Samsung Smartphone'
state_topic: 'espresense/rooms'
timeout: 60
away_timeout: 120 # количество секунд, после которого entity получит статус not_homeСохраните файл.
Перейдите в Configuration → Settings и нажмите Check Configuration. При отсутствии ошибок перезапустите Home Assistant.
После перезапуска в Developer Tools можно найти добавленный entity и увидеть расстояние до устройства и другие атрибуты.
Также entity можно добавить на панель управления (dashboard).
Шаг 6: Автоматизация включения/выключения устройств по присутствию
В Home Assistant перейдите Configuration → Automations & Scenes → Create Automation → Start with an empty automation.
Дайте имя автоматизации. В разделе Triggers выберите Numeric State. В Attribute укажите Distance. В поле Below/Above задайте порог расстояния, при достижении которого сработает триггер (например, меньше 3 м — включить свет).
В Actions укажите включение или выключение нужных устройств (ламп, розеток и пр.).
Примеры использования и сценарии
- Автоматическое включение света при входе в комнату для конкретного телефона.
- Отключение кондиционера при уходе последнего человека из квартиры.
- Оповещение о возвращении ребёнка домой.
- Управление мультирумной подсветкой в зависимости от нахождения человека в зоне.
Когда этот метод не подходит
- Для определения точного положения нескольких человек в одной комнате (BLE даёт приблизительную дистанцию, но не точную позицию).
- Если устройство не транслирует BLE‑маячки (некоторые телефоны/аксессуары могут ограничивать рекламу).
- В помещениях с плотными металлическими преградами или сильной радиопомехой, где RSSI нестабилен.
Альтернативные подходы
- Роутер‑based presence (определение по подключению к Wi‑Fi) — проще в настройке, но хуже локализует по комнатам.
- GPS/Geofencing (через мобильное приложение) — хорош для «вне/дома», но бесполезен внутри здания.
- UWB (Ultra Wideband) — обеспечивает высокую точность, но дороже и требует соответствующих устройств.
Ментальные модели и эвристики
- RSSI → дистанция: RSSI меняется в зависимости от окружения. Считайте значение как «приблизительную дистанцию», а не абсолютную истину.
- Надёжность = несколько источников: комбинируйте BLE с датчиками движения или контактными датчиками для снижения ложных срабатываний.
- Калибровка: начните с базовой калибровки (4 м) и уточняйте значение экспериментально.
Чек‑лист по ролям
Установщик/энтузиаст:
- Купить ESP32 и блок питания.
- Установить драйверы USB‑Serial на ПК.
- Прошить ESPresense (веб/ESPHome‑Flasher).
- Настроить Wi‑Fi и MQTT.
- Расположить ESP32 в зоне покрытия BLE.
Администратор Home Assistant:
- Проверить соединение с Mosquitto/другим MQTT‑брокером.
- Добавить sensor: mqtt_room в configuration.yaml.
- Проверить корректность entity в Developer Tools.
- Настроить автоматизации и тестовые сценарии.
Пользователь/владелец:
- Проверить работу автоматизаций в быту несколько дней.
- Сообщать об ошибках и нестабильных срабатываниях для донастройки порогов.
Мини‑методология развёртывания (SOP)
- Подготовка: собрать платы и кабели, установить ПО.
- Прошивка: выбрать метод (веб/Flasher) и прошить ESP32.
- Конфигурация: ввести Wi‑Fi, MQTT, калибровку и имя комнаты.
- Тестирование: убедиться, что ESP32 публикует сообщения в MQTT и логах видно устройства.
- Интеграция: добавить sensor: mqtt_room в Home Assistant.
- Автоматизация: создать и протестировать автоматизации.
- Оценка и корректировка порогов по фактическим результатам.
Критерии приёмки
- ESP32 успешно подключается к Wi‑Fi и MQTT.
- В логах ESPresense отображаются обнаруженные BLE‑устройства.
- Home Assistant видит sensor с атрибутом distance и временем последнего обнаружения.
- Автоматизация срабатывает корректно при достижении порога distance и не срабатывает при отсутствии устройства.
Тестовые случаи и приёмка
- Тест «вход в комнату»: поднести телефон к центру комнаты, проверить, что distance уменьшается и автоматизация включается.
- Тест «выход из комнаты»: уйти за пределы порога, дождаться away_timeout, убедиться, что состояние изменилось на not_home.
- Тест устойчивости: оставить телефон в кармане и пройти по комнате — проверить, нет ли ложных срабатываний.
- Тест завышенной нагрузки: включить несколько телефонов — проверить, что каждый tracked entity корректно обновляется.
Безопасность и приватность
- MQTT: используйте аутентификацию и, при возможности, TLS для шифрования трафика.
- Минимизируйте логирование персональных данных: храните только необходимые идентификаторы.
- Уведомляйте членов семьи о функционировании системы и возможностях трекинга.
Риски и способы их смягчения
- Ложные срабатывания из‑за помех — комбинируйте с датчиками движения.
- Потеря связи с MQTT — настроить оповещения о недоступности устройства.
- Постоянное отслеживание — уважайте приватность: используйте короткие тайм‑ауты и давайте выбор пользователям.
Примеры конфигурации автоматизации (идея)
- Включение света при обнаружении устройства ближе 3 м и отключение через 2 минуты после ухода.
- Переключение музыкальной зоны при появлении хозяина в гостиной.
Часто задаваемые вопросы
Q: Нужен ли постоянный интернет для работы ESPresense?
A: Для локального сканирования BLE интернет не обязателен, но для интеграции с Home Assistant через MQTT нужен доступ к MQTT‑брокеру. Брокер может находиться локально.
Q: Можно ли отслеживать несколько устройств?
A: Да — добавляйте по одному sensor: mqtt_room для каждого MAC‑адреса.
Q: Как улучшить точность определения комнаты?
A: Используйте несколько ESP32‑узлов в соседних комнатах и объединяйте данные по самым сильным уровням сигнала или временем обнаружения.
Краткое резюме
Локальное BLE‑обнаружение на ESP32 — недорогой, гибкий и приватный способ добавить присутствие в умный дом. Оно не заменяет все другие методы, но хорошо дополняет их, особенно для управления освещением и местными сценариями.
Внедряйте по шагам: прошивка → подключение к Wi‑Fi и MQTT → добавление устройств в Home Assistant → настройка автоматизаций → тестирование и калибровка.
Важно: тестируйте в реальных условиях и комбинируйте источники данных для повышения надёжности.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone