Найти в Дзене
HASSStas: Рецепты HomeAssistant

В поисках идеального датчика движения: Qingping Motion&Ambient sensor

Про датчики движения я уже писал тут и тут. Казалось бы, зачем нужен ещё один датчик движения? Ну, во-первых, неостановима тяга к новому, а во-вторых, все предыдущие датчики работают не так, как бы мне хотелось. И тут мне на глаза попался интересный датчик на Bluetooth от одной из дочерних/партнёрских компаний Xiaomi - Qingping Motion & Ambient sensor. Как видно из названия - датчик улавливает не только движение, но и замеряет освещённность. Напомню, что до постройки умного дома я пользовался встраиваемым в подрозетник выключателем с датчиком света и освещённости и его работа - это примерно то, чего я бы хотел от датчиков в HomeAssistant. Ну, можно, конечно, и лучше, поскольку у того чувствительность тоже была не ахти и ложные выключения присутствовали, пока, например, моешь посуду спиной к датчику. Раскрывая заранее карты, могу сообщить, что датчик от Qingping тоже таким страдает, но если в подрозетном я добивался более-менее приемлемого поведения подкручивая регуляторы "на глаз", то
Оглавление

Про датчики движения я уже писал тут и тут. Казалось бы, зачем нужен ещё один датчик движения? Ну, во-первых, неостановима тяга к новому, а во-вторых, все предыдущие датчики работают не так, как бы мне хотелось. И тут мне на глаза попался интересный датчик на Bluetooth от одной из дочерних/партнёрских компаний Xiaomi - Qingping Motion & Ambient sensor.

Картинка со странциы товара в AliExpress
Картинка со странциы товара в AliExpress

Как видно из названия - датчик улавливает не только движение, но и замеряет освещённность. Напомню, что до постройки умного дома я пользовался встраиваемым в подрозетник выключателем с датчиком света и освещённости и его работа - это примерно то, чего я бы хотел от датчиков в HomeAssistant. Ну, можно, конечно, и лучше, поскольку у того чувствительность тоже была не ахти и ложные выключения присутствовали, пока, например, моешь посуду спиной к датчику. Раскрывая заранее карты, могу сообщить, что датчик от Qingping тоже таким страдает, но если в подрозетном я добивался более-менее приемлемого поведения подкручивая регуляторы "на глаз", то прокинутый в HomeAssistant умный датчик позволяет больше гибкости в манипуляциях.

У датчика интересное крепление - магнитное. В комплекте идут круглые наклейки двустороннего скотча: одна сплошная, для приклеивания держателя с магнитной полусферой, к которой примагничивается датчик под разными углами, а вторая - пустая посередине, для крепления самого датчика без "ножки". Есть ещё незадокументированный третий вариант крепления - просто положить на горизонтальную поверхность в нужном направлении, благо датчик гранёный и не скатится. Я воспользовался на кухне именно этим вариантом, положив на бра:

-2

Добавление датчика в MiHome

Итак, первое, что нужно сделать - это добавить новый датчик в MiHome. Я пользовался модификацией от vevs, чтобы удобно получать ключи, поэтому сначала мне пришлось скачать последнюю версию, поскольку в моём достаточно старом приложении такой датчик не был предусмотрен.

В остальном же добавление датчика в MiHome никаких затруднений не вызвало. Что вызвало затруднения - так это то, что ключ в логах я так найти и не смог. Зато нашёл более удобный (для меня) способ получения ключей - непосредственно из учётной записи MiHome (из облака).

Получение ключей

Получить ключи напрямую из облака можно с помощью скрипта Xiaomi Cloud Tokens Extractor. В репозитории есть ссылки на приложение для Windows. У меня такой операционной системы под рукой нет, поэтому я ставил скрипт на сервер HomeAssistant, на котором, напомню, у меня Ubuntu 18.04.

В оригинальной инструкции рекомендуется установить библиотеку requests через pip (pip3 install requests), но у меня почему-то не получилось, поэтому я устанавливал с помощью команды:

python3 -m pip install requests

Затем скачивал архив со скриптом:

wget https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor/raw/master/token_extractor.py

И запускал

python3 token_extractor.py

Будет предложено ввести логин (e-mail) и пароль от учётной записи MiHome, а также выбрать регион. Часть моих устройств нашлась в регионе cn, но полный список доступен в регионе ru. Впрочем, регион можно не указывать, тогда сканирование будет выполняться дольше, но в итоге покажет все подключенные куда бы то ни было устройства в формате:

---------
NAME: Название датчика
ID: blt.6.16b3iih9osc00
BLE KEY: [ble key для HomeAssistant]
TOKEN: [token]
MODEL: miaomiaoce.sensor_ht.t2
---------

Здесь нас интересует только BLE KEY, который и надо подставить в интеграции Passive BLE monitor integration, который, к слову, в последних версиях приобрёл возможность конфигурации из интерфейса HomeAssistant.

Подключение датчика в HomeAssistant

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

Идём в Настройки - Интеграции и находим наш компонент:

-3

Нажимаем кнопку Настроить:

-4

В открывшемся окне - настройки самого компонента. Если они ещё не настроены или их надо донастроить - это можно сделать сразу либо потом. Для подключения датчика нас интересует только самый нижний раздел - Devices. В выпадающем меню перечислены все уже добавленные датчики, и самый первый пункт, Add device, позволяет добавить новый. Этим и займёмся, выбираем Add devices и нажимаем кнопку Подтвердить (если так просто не сработало, то выше, над Devices, где Report unknown, нужно выбрать производителя датчика, в нашем случае Qingping):

-5

Тут всё просто. Мак-адрес находится в MiHome, Encryption key мы достали с помощью приложения vevs или скрипта Token Extractor, для датчика движения нас интересует ещё только Motion sensor reset timer. Этот параметр отвечает за сброс состояния "движение" по истечении некоторого количества секунд. Говорится, что если поставить 0, то состояние датчика будет меняться непосредственно с устройства, но для Qingping Motion&Ambient sensor так не заработало, поэтому я оставил дефолтные 35 секунд. Этим значением можно будет поиграться отдельно.

Указав данные, нажимаем Подтвердить и готово, у нас новый датчик (помним, что это bluetooth, поэтому для первого обнаружения может потребоваться некоторое время), который имеет три отдельных параметра: собственно, состояние движения, уровень освещённости (в люксах) и состояние батарейки:

Выведенные на отдельную панель датчики. Пишу ночью, поэтому освещённость - 0.
Выведенные на отдельную панель датчики. Пишу ночью, поэтому освещённость - 0.

На этом можно строить свои автоматизации.

Автоматизации и подстройка

В обзоре первых датчиков движения я приводил пример автоматизации включения света по движению, где в качестве примерного уровня освещённости использовал положение солнца над уровнем горизонта:

- alias: Свет в прихожей при движении
  trigger:
  - entity_id: binary_sensor.ping_tuya_pir_hall
    platform: state
    to: 'on'
  condition:
  - condition: template
    value_template: '{{ states.sun.sun.attributes.elevation < 15 }}'
  action:
  - service: light.turn_on
    entity_id: light.sonoff_1000abc123

Здесь конструкцию

condition:
- condition: template
value_template: '{{ states.sun.sun.attributes.elevation < 15 }}'

я изменил на

  condition:
  - condition: numeric_state
    entity_id: sensor.ble_illuminance_kitchenpir
    below: 40

, где 40 - значение освещённости в lux, которое я для себя определил пороговым для включения света.

В целом вся эта конструкция работает, но - так себе, потому что дефолтный период опроса датчиков BLE в кастомной интеграции - 60 секунд, что не позволяет отлавливать движения в режиме on-line. Чтобы повысить отзывчивость системы, я установил period =10 и на текущий момент скорость реакции датчика движения меня вполне устраивает.

Что, впрочем, вряд ли помешает мне позже прикупить ещё какой-нибудь на пробу, на замену другим датчикам движения.