Nobody’s home

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

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

Косвенный.

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

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

Плюсы. Не требует аппаратных вложений.

Параметрический.

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

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

Плюсы. Интересная тема для дипломной работы.

Сопутствующий.

Определение ведется основываясь на сверке присутствия носимой электроники принадлежащей домочадцам в радиусе действия домашней wifi сети.

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

Плюсы. Не требует аппаратных вложений. Можно определить кто именно присутствует. Очень простое развертывание.

Принудительный.

Определение присутствия за счет ручной отметки своего статуса в системе. В качестве способов отметится можно использовать NFC/RFID метки, web интерфейсы, Zigbee (и другие) кнопки.

Минусы. Необходимость ручных действий.

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

Вариант здорового человека.

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

Минусы. Требует покупки меток. В метках используются батарейки за зарядом которых необходимо следить.

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

Теория закончена.

В качестве меток лично я выбрал таковые на чипе NRF51822 в корпусе-брелке на ключи. Покупал тут.

Так же в качестве маяков можно использовать многие фитнес браслеты. Например всенародные Xiaomi Mi Band замечательно светятся в BLE эфир. Вполне можно сделать из Android телефона такой маяк, решения с этим неплохо гуглятся.

Приступим к реализации механизма отслеживания с использованием BLE-меток. Возьмем за базу что у нас есть homebridge установленный в linux среде, Bluetooth модуль с поддержкой BLE (Bluetooth установленный в Raspberry подходит прекрасно), подключенный к железу на котором стоит homebridge, в homebridge установлен плагин homebridge-mqttthing, установлен mqtt брокер (рекомендую mosquitto mqtt). Статьи по установке этих компонентов можно найти на нашем ресурсе.

Дело осталось за малым – добавить программную прослойку, которая сможет получать и адаптировать данные из BLE эфира в привычные события в MQTT. Одним из вариантов таких прослоек является EspruinoHub.

Установка.

cd /home/pi
sudo apt-get update
sudo apt-get install git-core build-essential mosquitto-clients bluetooth bluez libbluetooth-dev libudev-dev
git clone https://github.com/espruino/EspruinoHub
cd EspruinoHub
npm install
mkdir log
sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)

Установка завершена. Демонизируем через systemd запуск пакета.

sudo cp systemd-EspruinoHub.service /etc/systemd/system/EspruinoHub.service

Стартуем и смотрим лог

sudo systemctl start EspruinoHub.service && sudo journalctl -f -u EspruinoHub

Если все выглядит хорошо – выходим из журнала нажав ctrl+x. И даем добро на дальнейший автозапуск.

sudo systemctl enable EspruinoHub.service

На github проекта находится полная инструкция по установке.

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

Настройка

Переходим к финальной части – добавлению наших BLE меток. Для удобства работы с MQTT в визуальной среде я рекомендую использовать mqtt explorer, отличный софт автор которого явно увлекается строительством умного дома. Устанавливаем, запускаем, подключаемся. И видим топик /ble/advertise со всеми устройствами которые нашлись в эфире

Устройств будет немало. Надо найти свои. Если вы, как и я, приобели метки на NRF51822 то эти устройства будет достаточно легко найти по имени который отдается в виде json в топик устройства. Запоминаем адреса этих устройств.

И переходим к конфигурации EspruinoHub

nano /home/pi/EspruinoHub/config.json

В блоке known_devices записываем в формате «ИД:ЕН:ТИ:ФИ:КА:ТО:РР» : «Человекочитаемое имя» данные о каждой из ваших меток.

Первые две это моя и жены метка. О третье и далее метках расскажу несколько позднее. Это решение одного из минусов продукта EspruinoHub.
В конфигурационном файле есть пареметр ble_timeout, который отвечает за время через которое устройство будет признано EspruinoHub покинувшим периметр. Я остановился на 15 секундах. Вам рекомендую подобрать самостоятельно. Не стоит ставить маленькие значения.
Отредактировали. Сохраняем и выходим из редактора ctrl+x, вводим Y и Enter. Перезапускаем EspruinoHub.

sudo service EspruinoHub restart

В mqtt explorer видим что теперь вместо малопонятных устройств появились наши имена.

Исследуем что еще в mqtt поступает от EspruinoHub. Особое внимание на топик /ble/presence в нем появились бинарные значения – это и есть признаки присутствия.

Переходим к конфигурации mqttthing для включения наших меток в качестве датчиков присутствия. Добавляем аксессуар и конфигурируем используя свои данные.

        {
            "accessory": "mqttthing",
            "type": "occupancySensor",
            "name": "BLE Паша",
            "url": "mqtt://localhost",
            "topics": {
                "getOccupancyDetected": "/ble/presence/BLE_Pasha_FF"
            },
            "integerValue": "1|0"
        }

Как видите, имя которое мы давали устройству в конфиге EspruinoHub сильно упрощает составление и восприятие конфига. Проверяем корректность, сохраняем, перезапускаем Homebridge. Смотрим что у нас появилось в web интерфейсе и приложении дом.

Чтобы проверить «уход из дома не выходя из дома» плотно оберните метку фольгой.

Прекрасно. На этом, в общем то все…

Финал.

Однако, хочу рассказать о небольшом и немного неприятном баге EspruinoHub. В конфигурационном файле существует параметр only_known_devices призванный, что логично, отслеживать только известные устройства, то есть только те, которые мы перечислим в блоке known_devices конфигурационного файла. Казалось бы, прекрасная вещь.

Увы, существует плавающий баг, который заключается в том, что последнее устройство, покидающее периметр покрытия BLE сети не поменяет статус в топике presence на 0. Тем самым «останется дома». Чтобы купировать эту болячку я лично прописал в известные устройства некоторое их количество которое обнаружил в BLE эфире. Весьма интересным оказался соседский телевизор фирмы Samsung, который истерит в эфир с частотой сильно превышающей 1 событие в секунду. Тем самым подталкивает сканирование устройств. Если в вашем окружении не так много BLE устройств (загородный дом, например) и нет устройств которые бы, словно телевизор Samsung, толкали BLE хаб за обновлением данных – скорее всего вам придет приобрести фиктивную метку, которая будет оставаться дома. Существуют в продаже на Aliexpress метки без корпуса, цена которых еще ниже.

У портала есть уютный telegram чат https://t.me/indahomekit_chat в котором я и многие другие обсуждают решения для организации своего умного дома. Заходите.

Вот теперь все.

Подписывайтесь на канал InDaHomeKit в Telegram и Яндекс.Дзен, чтобы у вас всегда было что почитать: новости мира умного дома, обзоры новых устройств, инструкции по подключению.

Приходите в наш чат в Telegram

Так же у нас отличные паблики VK, Facebook, Instagram и Twitter.

Добавить комментарий