78. Обнаружение присутствия. Часть 3. Bluetooth
В предыдущих статьях (1 и 2) было рассказано о теории обнаружения присутствия в умном доме, и рассмотрен вариант с использованием Wi-Fi для смартфонов. В этом материале разберём более технологичное решение позволяющее определять в какой именно комнате находится тот или иной человек (член семьи).
Зачем это надо?
Такой способ позволяет точно определить, в какой именно комнате находится конкретный человек, а значит знать, что в принципе кто-то из членов семьи находится дома. Это открывает новые возможности для автоматизации и делает жизнь в умном доме ещё более комфортной и удобной.
Такой способ позволяет точно определить, в какой именно комнате находится конкретный человек, а значит знать, что в принципе кто-то из членов семьи находится дома. Это открывает новые возможности для автоматизации и делает жизнь в умном доме ещё более комфортной и удобной.
В первой статье уже были упомянуты Bluetooth-proxy. Наведём небольшой порядок в использовании технологий и их наименованиях.
Терминология.
Bluetooth.
На многих современных компьютерах может быть установлен блютус модуль, позволяющий компьютеру соединяться с другими устройствами блютус для передачи информации или сканирования окружающих Bluetooth-устройств. Иногда такие модули могут быть установлены и в мини-пк используемые в качестве серверов для умного дома. Если такого модуля нет, то его можно приобрести и подключить, например к юсб порту того же сервера.
Т.к. речь идёт о беспроводной технологии передачи данных, то качество сигнала может ухудшаться с увеличением расстояния и препятствий между двумя устройствами, или полностью теряться.
Также, два устройства блютус могут обмениваться данными после того как произведён процесс сопряжения (pairing) между ними. Однако для определения присутствия (нахождения в радиусе действия сигнала) сопряжение не требуется.
Bluetooth-proxy.
Это устройство (часто на базе платы ESP32), по сути тот же самый встроенный или подключаемый по юсб к компьютеру модуль Bluetooth, но который физически подключен не к компьютеру, а в ту же сеть (по кабелю или через вай-фай), в которой находится нужный компьютер. Этот модуль сканирует Bluetooth-устройства и передает данные через сеть на сервер.
Bluetooth-token.
Токены (или BLE-маячки) - это небольшие автономные устройства, которые постоянно передают свой уникальный идентификатор через Bluetooth Low Energy (BLE). Их основное назначение - быть обнаруженными другими устройствами для определения местоположения или идентификации.
Важно отметить что технология BLE (Bluetooth Low Energy) отличается от обычного Bluetooth своей энергоэффективностью и меньшим радиусом действия. Такие токены непрерывно транслируют свой сигнал, в то время как смартфоны и часы обычно делают это только при активном соединении или поиске устройств. Они разработаны для максимально долгой работы от батареи (месяцы или даже годы), тогда как постоянно включенный Bluetooth на смартфоне значительно сократит время его работы. Bluetooth-токены обычно очень маленькие, их можно прикрепить к ключам, спрятать в одежду или разместить на домашних животных. Многие маячки позволяют регулировать мощность передачи, что помогает точнее определять расстояние до них. Современные смартфоны и умные часы также могут выступать в роли Bluetooth-токенов, особенно если на них установлено специальное приложение.
Промежуточный итог.
Имея на руках смартфон со включенным блютус или умные часы, можно определить их наличие в некоем радиусе действия домашнего блютус. Сам этот радиус может быть увеличен за счёт использования блютус-прокси. Однако опознавать наличие устройства (смартфона/часов) в можно либо с помощью сканирования сигналов блютус, либо с помощью поиска нужного токена.
По аналогии с компьютерными сетевыми картами, у каждого блютус адаптера также имеется свой уникальный МАК-адрес. Иногда, в целях безопасности, операционная система смартфона может менять этот адрес раз в какое-то время, чтобы избежать блокировки или предотвратить атаки на устройство.
Поэтому, даже зная МАК-адрес своего смартфона, если запустить сканирование сигналов блютус у себя дома, есть шанс его не найти в эфире, т.к. он будет заменён самим же телефоном на какой-то другой. Но даже узнав новый МАК-адрес не получится с ним ничего сделать т.к. через какой-то промежуток времени он опять сменится.
Однако есть способы обойти это, например, используя токены или фиксируя устройства по их уникальным статическим BLE-идентификаторам. Для этого на смартфоне или часах должно быть установлено соответствующее программное обеспечение, "превращающее" устройство в такой маячок.
ESPresense
Это открытый проект, который позволяет создать систему точного позиционирования внутри помещений на основе Bluetooth Low Energy (BLE). Система использует небольшие устройства на базе ESP32, которые выступают в роли "маяков" или "узлов", расположенных в разных комнатах дома.
Это работает следующим образом:
- В каждой комнате (или зоне) где нужно отслеживать присутствие, устанавливается устройство ESP32 с прошивкой ESPresense.
Эти устройства постоянно сканируют эфир на наличие Bluetooth-сигналов от различных устройств (смартфоны, умные часы, специальные BLE-маячки).
- На основе силы принимаемого сигнала (RSSI) от каждого Bluetooth-устройства, система может определить, к какому "узлу" оно находится ближе всего.
- Данные о обнаруженных устройствах передаются через сеть и протокол MQTT на сервер.
Основным недостатком использования определения присутствия с помощью любой из технологий связанных с блютус, является повышенное энергопотребление на конечном устройстве (часы, смартфон).
- Bluetooth Low Energy (BLE): Создан специально для минимального энергопотребления, что делает его идеальным для задач, требующих постоянного соединения или периодической передачи данных.
- Классический Bluetooth: Потребляет больше энергии, чем BLE, но все равно значительно меньше, чем GPS.
- GPS требует активного подключения к спутникам и частого обновления данных о местоположении, что значительно разряжает батарею. GPS особенно "тяжелый" для батареи, когда устройство постоянно отслеживает местоположение или когда сигнал слабый, и требуется больше усилий для поддержания точности.
Исходя из всего вышеперечисленного, самым оптимальным для определения присутствия является использование BLE токенов в связке с ESPresense.
Практическая часть.
Для начала работы стоит определиться с количеством узловых станций, каждая из которых будет расположена в помещении, в котором необходимо отслеживать присутствие.
Так же стоит учесть тип подключения такой станции к сети.
- Если будет использовано беспроводное соединение, то можно использовать модуль с вайфай на борту, но без кабельного интерфейса.
- При использовании проводного подключения, можно подумать о преимуществах технологии PoE (Power over Ethernet), позволяющей подключить к устройству только сетевой кабель, по которому будет подаваться и питание.
Перечень совместимых станций можно найти на соответствующей страничке проекта.
В частности при подготовке этого материала была использована пара модулей ESP32-POE-ISO-EA от Olimex с поддержкой как PoE так и Wi-Fi. Они хоть и отсутствуют в списке, но тем не менее прекрасно работают и могут быть так же перепрошиты для использования в качестве полноценных Bluetooth-proxy.
Установка прошивки.
Возможно, дальнейшие шаги выполнить не получится т.к. в вашей системе могут отсутствовать драйверы для работы с такими платами. тогда рекомендуется их установить заранее. Скачать можно по этой ссылке.
CP2102 drivers: Windows & Mac.
Подключаем ЕСП плату к обычному компьютеру (не к серверу) через юсб кабель и заходим на страничку установки прошивки - https://espresense.com/firmware
Очень важно выбрать тип прошивки согласно своему устройству
И конечно же максимально новую версию. Бета версии, как известно, можно использовать на собственный страх и риск.
Если драйверы установлены, и нет никаких других проблем в системе, то при нажатии кнопки Connect отобразится окно с выбором эмуляции порта, на котором распознано подключенное устройство.
После подключения к устройству
Выбираем установку прошивки
Подтверждаем что согласны с удалением всех данных с устройства в процессе
Переходим непосредственно к началу процесса прошивки/установки
Скачать программу-прошивальщик (флэшер).
Скачать необходимую прошивку ESPresence.
И подключив устройство к компу, так же прошить его
Кстати с помощью этого флэшера можно записывать и другие прошивки от ESP32 локально на своём компе.
Настройка.
По окончании процесса прошивки есть 2 варианта развития событий, в зависимости от выбранной платы, а следовательно технологии подключения к сети.
- В случае с кабельным/РоЕ подключением узнаём адрес устройства из DHCP сервера раутера и заходим на него для дальнейших настроек.
- В случае использования вайфай версии, необходимо будет указать параметры своей 2.4GHz сети, и проверяя логи в окне терминала убедиться что устройство успешно подключилось. Только после этого можно будет зайти в него для продолжения настроек.
После попадания в интерфейс устройства, указываем в нём адрес и порт своего MQTT брокера, имя пользователя и пароль к нему. Важно так же указать имя комнаты/помещения или зоны, за которой будет следить это устройство.
Все пункты настроек подробно указаны и расписаны на соответствующей странице проекта.
Убедиться что устройство работает и передаёт данные можно с помощью уже упомянутого здесь
Настройка в Home Assistant.
Для успешной работы необходимо создать сенсор для каждого устройства КОТОРОЕ будем отслеживать. Этот сенсор будет создан на платформе MQTT room presence так, как это описано в документации.
Чтобы точно указать в конфигурации всё что требуется, необходимо включить на телефоне режим BLE токена (т.е. маячка). Для этого заходим в приложение Home Assistant -> Settings-> Companion App.
Переходим в раздел управления сенсорами и найдя в поиске "Передатчик BLE" включаем его.
Прокрутив в самый низ убеждаемся что мощность передатчика выставлена на самую низкую, и сохраняем/копируем в сторону идентификатор токена. Он будет написан под заголовком id примерно в середине страницы.
Теперь можно воспользоваться примером из документации платформы:
sensor:
- platform: mqtt_room
unique_id: any_data_you_want
device_id: 123testid
name: 'YOUR DEVICE NAME'
state_topic: "espresense/devices/123testid"
timeout: 3
away_timeout: 10
С помощью MQTT Explorer находим топик нужного телефона, на котором только что включили маячок. id маячка будет указан вместо 123testid внутри espresense/devices/. Копируем эту строчку в код сенсора.
Для других устройств повторяем процедуру по определению маячка и так же записываем в файл его идентификатор под новым именем.
После всех манипуляций можно перезагрузить ХА. и если всё сделано без ошибок, то появятся новые сущности с их местоположением согласно именам комнат указанным в настройках станций.
Вишенка на торте.
Как известно, в Home Assistant существует следующая иерархия сущностей:
Зона - Персона - отслеживающее устройство.
Т.е. если к персоне не привязано устройство домена device_tracker, то статус этой персоны не может корректно отображаться в домашней зоне.
Допустим в данный момент дома установлено 3 блютус станции для отслеживания людей в разных комнатах. И система "видит" что некое устройство сейчас в комнате Х, а мы знаем что это устройство принадлежит определённому человеку, и значит этот человек сейчас дома.
Более того, если устройство принадлежащее конкретному человеку, находится в любой из комнат, это значит что человек дома (случаи с забытым случайно или намеренно устройством не рассматриваем). И соответственно если устройство не обнаружено ни в одной из комнат, то человека дома нет.
Проблема в том, что созданные сенсоры не являются сущностями домена device_tracker. А значит надо создать такой для каждого созданного устройства, чтобы впоследствии его можно было привязать к персоне.
Ищем\создаём в основной директории файл known_devices.yaml
Содержимое этого файла заполняем следующим образом:
имя_устройства_с_маяком:
name: устройство с маяком
icon: mdi:какой_хотим
track: true
После чего конечно же перезапускаем систему.
Крайне желательно все названия указывать латинскими буквами. если надо, то повторяем код через строку с параметрами для другого устройства.
В итоге создаём столько же фиктивных отслеживающих устройств, сколько смартфонов собираемся отслеживать.
Теперь осталось создать автоматизацию, которая будет обновлять статус фиктивного устройства домена device_tracker в соответствии с тем, находится ли физическое устройство в одной из комнат или нет. Для этого необходимо вызвать службу device_tracker.see и передать ей имя фиктивной сущности созданной на предыдущем шаге, с указанием параметра home или not_home соответственно.
action: device_tracker.see
data:
dev_id: устройство с маяком
location_name: home
Ну и последний шаг, в настройках нужной персоны выбрать соответствующее фиктивное устройство слежения, и сохранить настройки.
Итог.
После всех манипуляций имеем возможность определять дома ли определённый пользователь или нет. А так же в какой комнате он находится. На основе этих данных можно строить персональные автоматизации учитывая разные личные потребности того или иного человека.
Комментарии
Отправить комментарий