Детектор присутствия на ESP32 для локальной автоматизации дома

Что такое локальное обнаружение присутствия и зачем оно нужно
Локальное обнаружение присутствия — это способ определить, находится ли конкретное Bluetooth‑устройство (смартфон, часы, метка) в пределах комнаты или рядом с узлом. В отличие от геолокации по GPS, BLE работает внутри дома и даёт точную привязку по расстоянию и силе сигнала.
Коротко: ESP32 сканирует BLE‑маяки, вычисляет расстояние/состояние и отправляет события в Home Assistant через MQTT. Затем Home Assistant использует эти данные для включения светa, предупреждений или логики энергосбережения.
Краткие определения
- BLE: Bluetooth Low Energy, энергоэффективный профиль Bluetooth для маяков и телефонов.
- MQTT: лёгкий брокер сообщений для передачи телеметрии между устройствами и Home Assistant.
- ESPresense: прошивка для ESP32, оптимизированная для BLE‑сканирования и интеграции с Home Assistant.
Основные варианты применения
- Автоматическое включение света при входе в комнату.
- Определение, кто дома (по мак‑адресам или тегам).
- Снижение ложных срабатываний датчиков движения за счёт подтверждения присутствия BLE.
Что понадобится
- Один или несколько модулей ESP32 (по количеству зон).
- Кабель micro USB и 5 В блок питания (любой зарядник от смартфона).
- Компьютер (Windows/macOS/Linux) с доступом в интернет для прошивки.
- Home Assistant с настроенным MQTT брокером (например, Mosquitto).
Важно: используйте качественное питание; нестабильный USB‑адаптер вызывает перезагрузки и проблемы с Wi‑Fi/BLE.
Как это работает (кратко технически)
ESP32 периодически сканирует BLE‑устройства и собирает их MAC, RSSI и возможные характеристики. ESPresense агрегирует данные, оценивает расстояние по RSSI и публикует события в топики MQTT (espresense/rooms и другие). Home Assistant читает эти топики и переводит маяки в состояния home/away и числовые атрибуты (distance).
Пошаговая инструкция по сборке и настройке
Ниже — подробная последовательность с советами и примерами конфигурации.
Шаг 1. Подключение ESP32 и драйверы
- Скачайте и установите драйверы USB‑UART для вашей платы:
- CP2102 (если на плате квадратный чип)
- CH341 или CH340 (часто на дешёвых платах)
- Перезагрузите компьютер после установки драйверов.
- Подключите ESP32 к компьютеру через micro USB.
Совет: в диспетчере устройств (Windows) или в /dev (Linux/macOS) вы увидите порт, например COM3 или /dev/ttyUSB0.
Шаг 2. Прошивка ESPresense через веб‑интерфейс
- Перейдите на сайт https://espresense.com/firmware (или указанную официальную страницу прошивки).
- Выберите ESP32 в выпадающем списке и нажмите Connect.
- Выберите серийный порт (веб‑интерфейс покажет имя чипа — CP2102 или CH340).
- Нажмите INSTALL ESPRESENSE. Отметьте Erase device (стереть память) и нажмите Next → Install.
- Дождитесь завершения. После прошивки откройте Logs & Console, чтобы мониторить загрузку и статус модуля.
Если веб‑способ не сработал, используйте ESPHome‑Flasher (ниже).
Шаг 3. Прошивка ESPresense через ESPHome‑Flasher
- Скачайте esp32.bin с релизов ESPresense и утилиту ESPHome‑Flasher.
- Запустите ESPHome‑Flasher, выберите COM‑порт, укажите esp32.bin и нажмите Flash ESP.
- Мониторьте логи в утилите; после успешной записи плата перезагрузится и начнёт транслировать точку доступа для конфигурации.
Шаг 4. Настройка Wi‑Fi и параметров ESPresense
- На телефоне подключитесь к Wi‑Fi сети, которую создаёт плата: espresense-xxxxxx.
- Откройте браузер и перейдите на 192.168.4.1 — откроется конфигурационный портал.
Заполните поля в порядке (кнопки/лейблы в портале могут отличаться по версии):
- SSID: имя вашей домашней Wi‑Fi сети.
- Password: пароль Wi‑Fi.
- Language: язык (если есть).
- Room: имя комнаты — короткое и понятное (Kitchen, Bedroom и т. п.).
- MQTT Broker: адрес вашего брокера (ip:порт) и, при необходимости, логин/пароль.
- Query devices for characteristics: включите для получения дополнительных атрибутов BLE.
- Calibration: значение для калибровки расстояния — введите 4 для отслеживания в пределах ~4 метров (значение зависит от вашей установки).
Оставьте остальные настройки по умолчанию и нажмите Save. Переподключите питание платы, чтобы применились изменения.
После подключения модуль начнёт сканирование и публикацию логов в разделе Logs.
Шаг 5. Настройка MQTT в Home Assistant и добавление ESPresense
- Убедитесь, что Mosquitto (или другой MQTT брокер) добавлен и запущен в Home Assistant.
- В Home Assistant зайдите в Configuration → Devices & Services, найдите Mosquitto broker и кликните Devices.
Если ESPresense подключён корректно, он будет виден среди клиентов MQTT.
Добавление отслеживаемых маяков:
- В логах ESPresense найдите MAC‑адреса и идентификаторы обнаруженных BLE‑устройств.
- Для удобства установите на телефон приложение nRF Connect (или nRF Connect/Connector). Оно покажет MAC и имя устройства; сопоставьте с логами ESPresense.
- Откройте File Editor в Home Assistant и отредактируйте configuration.yaml, добавив запись для каждого маячка. Пример:
# Одна запись для каждого маяка, который хотите отслеживать
sensor:
- platform: mqtt_room
device_id: "xx:xx:xx:xx:xx:xx"
name: 'Samsung Smartphone'
state_topic: 'espresense/rooms'
timeout: 60
away_timeout: 120Замените device_id на MAC/ID, который показан в логах (строго в кавычках). Сохраняйте файл и проверьте конфигурацию:
- Configuration → Settings → Check Configuration.
- Если всё валидно — Restart Home Assistant.
После перезапуска зайдите в Developer Tools и введите имя сенсора — он должен показывать расстояние и текущую комнату.
Шаг 6. Создание автоматизации по присутствию
- Configuration → Automations & Scenes → +Create Automation → Start with empty automation.
- Задайте имя.
- В триггерах выберите Numeric State. В Attribute укажите distance (атрибут сенсора).
- В поле Below/Above задайте порог (например, ниже 3 м — включить свет).
Пример логики: при distance < 3 м — включить свет в комнате; при distance >= 4 м — выключить через задержку.
В Actions укажите устройство (light, switch) и нужное состояние.
Калибровка и практические советы
- RSSI чувствителен к препятствиям и расположению антенны. Осуществите калибровку: физически измерьте расстояния в комнате и подберите значение Calibration.
- Разместите ESP32 в центре комнаты на высоте ~1–2 м для равномерного покрытия.
- Если нужно охватить несколько комнат, используйте несколько ESP32‑узлов и объединяйте данные в Home Assistant.
Важно: BLE‑MAC адреса на современных смартфонах могут маскироваться системой (randomized MAC) — для телефонов лучше использовать приложения, которые отправляют уникальные идентификаторы или использовать статические теги/метки.
Безопасность, конфиденциальность и GDPR заметки
- Данные о присутствии считаются персональными. Храните MQTT и Home Assistant в приватной сети и используйте пароли/TLS для MQTT, если брокер доступен извне.
- Ограничьте доступ к логам и dashboard в Home Assistant.
- Для совместимости с регуляциями избегайте передачи данных третьим сторонам без явного согласия жильцов.
Типичные ошибки и их устранение
- Устройство не появляется в веб‑портале: проверьте питание и драйверы USB.
- ESP32 не подключается к Wi‑Fi: проверьте SSID/пароль и диапазон сети (2.4 ГГц required).
- Неправильные расстояния: откалибруйте значение Calibration и проверьте препятствия.
- Множественные шумовые устройства: включите Query devices for characteristics и фильтруйте по известным MAC.
Чек‑лист отладки:
- Питание 5 В стабильное.
- Корректный COM‑порт и драйверы.
- Прошивка успешно записана (логи без ошибок).
- MQTT брокер доступен и принимает подключения.
- configuration.yaml синтаксически корректен.
Роли и краткие чек‑листы
Установка (инсталлятор):
- Проверить питание и крепление устройства.
- Обеспечить доступ к Wi‑Fi 2.4 ГГц.
- Установить ESP32 в центральной точке зоны.
Владелец дома:
- Сопоставить MAC устройств с членами семьи.
- Настроить автоматизации и пороги.
- Проверить уведомления и приватность.
Техподдержка:
- Мониторить логи ESPresense и MQTT.
- Обновлять прошивку по мере выхода релизов.
Примеры автоматизаций и сценариев
- Включение света при входе и выключение при выходе:
trigger:
- platform: numeric_state
entity_id: sensor.samsung_smartphone
attribute: distance
below: 3
action:
- service: light.turn_on
target:
entity_id: light.bedroom_mainПредотвращение ложных срабатываний датчика движения: только если BLE подтверждает отсутствие человека — выключить свет.
Уведомление о приходе ребёнка: если его метка вошла в домашнюю зону — отправить push‑уведомление родителю.
Тесты и критерии приёмки
Критерии приёмки для узла ESP32:
- Устройство стабильно подключается к Wi‑Fi и MQTT.
- Home Assistant получает сообщения espresense/rooms с атрибутом distance.
- При расстоянии < заданного порога автоматизация выполняется в течение 1–3 секунд.
Тесты:
- Перемещайтесь по комнате и проверяйте изменения distance в Developer Tools.
- Отключайте питание и включайте снова — проверяйте восстановление соединения.
Альтернативные подходы и когда ESPresense не подходит
- Wi‑Fi‑основанное присутствие (устройство подключено к роутеру) — проще, но требует поддержки на роутере и не даёт точного размещения по комнатам.
- GPS‑трекинг — пригоден для определения «дома/вне дома», но не для комнатной локализации.
- Использование BLE‑маячков с фиксированными MAC — более предсказуемо, чем случайные MAC смартфонов.
Когда этот метод не подходит:
- Если все устройства используют рандомизированные MAC и вы не можете установить статические идентификаторы.
- Если у вас политика приватности, запрещающая отслеживание членов семьи.
Потенциальные улучшения и масштабирование
- Добавление нескольких ESP32 с объединением данных по MQTT для расчёта точной позиции (triangulation).
- Интеграция с Presence groups в Home Assistant для агрегирования состояния семьи.
- Внедрение фильтров шумов и временных усреднений для устойчивости показаний.
Диаграмма выбора подхода (Mermaid)
flowchart TD
A[Нужна локальная детекция?] -->|Да| B{Устройства BLE?}
B -->|Да| C[ESP32 + ESPresense + MQTT]
B -->|Нет| D[Рассмотреть Wi‑Fi или GPS]
C --> E{Нужно несколько комнат?}
E -->|Да| F[Несколько узлов ESP32]
E -->|Нет| G[Один узел ESP32]
D --> H[Wi‑Fi presence или мобильный трекер]Часто задаваемые вопросы
Q: Будет ли это работать с iPhone?
A: Частично. iPhone иногда использует рандомизированные MAC. Лучше проверять через nRF Connect и при необходимости использовать отдельные метки или приложения.
Q: Какой радиус покрытия у ESP32?
A: Реальный радиус зависит от окружения; для надёжного локального триггера используйте порог 2–4 метра и калибруйте по месту.
Q: Требуется ли платный сервис?
A: Нет — весь стек может работать локально: ESP32, MQTT и Home Assistant.
Короткое руководство по обслуживанию
- Ежемесячно проверяйте доступность MQTT и Home Assistant.
- Раз в полгода обновляйте прошивку ESPresense и резервную копию configuration.yaml.
- Ведите простую таблицу устройств и соответствующих device_id (MAC) — это упростит администрирование.
Итог
Локальная система обнаружения присутствия на базе ESP32 и ESPresense — надёжный и недорогой способ автоматизировать свет и другие устройства в доме. Проект масштабируем: один узел на комнату обеспечивает гибкие автоматизации и повышает точность по сравнению с GPS или только Wi‑Fi. Следуйте чек‑листам, калибруйте пороги и учитывайте вопросы приватности.
Важно: перед массовым развёртыванием проверьте, не мешает ли трекинг политике приватности жильцов.
Похожие материалы
Обновить BIOS через Lenovo Vantage
Камера Samsung Galaxy — полное руководство
Тёмная тема в Калькуляторе Windows — как включить
Установка Windows 10 Creators Update на Mac
Где смотреть «A Charlie Brown Christmas»