Среда, 24.04.2024, 10:52
| RSS
Поиск
Главная |
Защита, контроль, управление
Форма входа
Логин:
Пароль:

Меню

Авторские проекты

Статьи

Raspberry Pi

Полезная информация

Обратная связь

Ссылки

Форум

Чат

Канал YouTube

Группа в Facebook


Календарь
«  Октябрь 2020  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031

Наш опрос

Ссылки


Яндекс.Метрика





.
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Подключение датчика Xiaomi Mijia cleargrass к Raspberry Pi

Подключение датчика Xiaomi Mijia cleargrass к Raspberry Pi

Наш канал в YouTube


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

Все устройства Xiaomi подключаются посредством беспроводных интерфейсов Wi-Fi и Bluetooth. В большинстве случаев на протокольном уровне применяется протокол ZigBee. Данный протокол использует так называемую технологию «Mesh», с помощью которой устройства могут ретранслировать друг от друга информацию, что позволяет строить довольно разветвленные сети.

Вместе с тем, у Xiaomi присутствует ряд датчиков и устройств, работающих по протоколу Bluetooth Low Energy (BLE). В отличие от ZigBee, в этом случае возможно построение только сети по принципу «звезды» (star), т.е. когда все периферийные устройства общаются напрямую только с одним центральным устройством. Использование BLE не позволяет создавать сети, покрывающие большую площадь, однако это в определенной степени компенсируется очень низким энергопотреблением периферийных устройств. Топология построения сетей ZigBee и BLE приведена на рис.1 (по клику все изображения открываются в реальном разрешении).

 

Temperature and Humidity Xiaomi

Рис. 1

 

Относительно недавно на рынке появилась модифицированная версия датчика температуры и влажности Xiaomi Mijia cleargrass с протоколом BLE. В отличие от предыдущей модели с LCD-дисплеем, в ней используется дисплей на электронных чернилах e-link, к тому же имеющий больший размер. Сравнение внешнего вида этих двух моделей приведено на рис.2

 

Temperature and Humidity Xiaomi

Рис. 2

 

Я заказал на Aliexpress пару таких датчиков и к ним простейший шлюз Cleargrass Bluetooth Wi-Fi Gateway. Шлюз сразу был немного конструктивно доработан – для питания от 12В и установки на DIN-рейку. Более подробно о доработке этого шлюза можно почитать здесь – http://lock.3dn.ru/news/dorabotka_shljuza_xiaomi_cgspr1_bluetooth_wi_fi_gateway/2020-08-23-192

После подключения датчиков к шлюзу и их отображение в приложении MiHome, возник закономерный вопрос – как интегрировать эти датчики в уже существую систему автоматизации дома? Т.е. вообще отказаться от шлюза и выводить данные с датчиков, получаемых через Bluetooth не в приложение MiHome, а в сервер домашней автоматизации, построенной на Raspberry Pi. Действительно, какой смысл использовать параллельно дополнительное приложение, тем более с использованием внешнего «облака», если можно собрать все устройства в одном интерфейсе и создать абсолютно автономную систему?

Начнем с аппаратной части. Учитывая, что шлюз использовать не планируется, необходимо, что бы Raspberry Pi имел возможность подключения через Bluetooth. Модели, начиная с Raspberry Pi3 и ZeroW, уже имеют его непосредственно «на борту», поэтому для них этот вопрос сразу отпадает. А вот для моделей Raspberry Pi2 и ниже, необходимо применить отдельный адаптер Bluetooth, подключаемый к порту USB. Хотя порядок подключения таких устройств уже неоднократно рассматривался на различных ресурсах, все-таки немного остановимся на данном вопросе.

Итак, после подключения Bluetooth USB-адаптера к порту Raspberry Pi, необходимо проверить его работоспособность. Через терминальную программу Putty подключается к Raspberry Pi и вводим команду:

lsusb

в ответе терминальной программы одна из строк должна выглядеть примерно так:

Bus 001 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

Однако, это говорит только о том, что адаптер обнаружен как USB-устройство. Следующая команда позволит убедиться, что устройство действительно смонтировано в системе и готово к работе:

hcitool dev

терминальная должна вернуть сообщение с МАС-адресом адаптера (рис.3). Если сообщение вернулось пустым (только строка Devices: без hci0(1) и МАС), то, к сожалению, это говорит о том, что адаптер в системе не смонтирован.

 

Temperature and Humidity Xiaomi

Рис. 3

 

Необходимо отметить, что порекомендовать какую-то конкретную модель адаптера довольно сложно. Например, сначала я взял относительно дорогой адаптер, на упаковке которого, однако, кроме надписи USB Donge и кучи пиктограмм, говорящих о том, что он поддерживает буквально все, больше никаких сведений о производителе не было. Адаптер определялся на USB порту Raspberry Pi как Cambridge Silicon Radio, но упорно не хотел определяться как host controller interface (hci) командой hcitool dev. Промучившись с ним и пересмотрев все возможные русско- и англоязычные форумы, пришлось констатировать, что заставить его работать вряд ли получится – многие писали о проблеме совместимости с ядром процессора, которая, похоже, не сих пор не устранена. Пришлось искать другой адаптер. В результате приобрел значительно более дешевый вариант, который поставлялся вообще без упаковки, тем не менее, без проблем заработал. Самое интересно, что он также определяется как Cambridge Silicon Radio, но, учитывая, что начальные цифры MAC-адресов у обоих моделей отличались, похоже, что сделаны они разными производителями.

Более подробно вопросы по подключению USB-адаптера к Raspberry Pi рассмотрены в этой статье – https://rasspberrypi.wordpress.com/2012/09/03/install-bluetooth-dongle-on-raspberry-pi

Переходим к программной части. Все далее сказанное будет справедливо как для использования внешнего USB-адаптера, так и для версии Raspberry Pi3/Zero W и выше со встроенным Bluetooth. Поэтому, дальнейшие эксперименты продолжим с помощью Raspberry Pi Zero W (т.е. со встроенным Bluetooth, рис.4)

 

Temperature and Humidity Xiaomi

Рис. 4

 

Сначала попробуем получить данные температуры и влажности с датчика в «ручном режиме» с помощью команд в терминальной программе Putty. Датчик температуры и влажности, с включенным режимом Bluetooth, должен находиться рядом с Raspberry Pi. Запускаем в операционной системе Raspbian сервис bluetoothctl:

sudo bluetoothctl

Затем сканируем окружение на наличие устройств Bluetooth:

scan on

В окне терминальной программы будут показаны все обнаруженные Bluetooth-устройства с указанием их МАС-адресов (рис.5)

 

Temperature and Humidity Xiaomi

Рис. 5

 

Останавливаем процесс сканирования:

scan off

На приведенном выше скриншоте показаны обнаруженные шлюз Oringping Bluetooth Gateway и датчик температуры и влажности Originping Temp & RH M. Теперь попробуем подключиться к датчику температуры и влажности, указав его МАС-адрес:

connect 58:2D:34:xx:xx:xx

В случае удачного подключения, терминальная программа вернет кучу различных атрибутов – характеристик, дескрипторов и сервисов (рис.6).

 

Temperature and Humidity Xiaomi

Рис. 6

 

Во всем этом массиве нас интересует атрибут char001d, который нам необходимо прочитать. Сначала выбираем этот атрибут командой в Putty, введя его полное имя:

select-attribute /org/bluez/hci1/dev_58_2D_34_xx_xx_xx/service0012/char001d

и затем выполняем чтение атрибута:

read

Терминальная программа должна возвратить шесть байт, из которых третий и четвертый – это показания температуры, а пятый и шестой – показания влажности (рис.7)

 

Temperature and Humidity Xiaomi

Рис. 7

 

Переводим полученные значения температуры и влажности в десятичную систему. Единицы в младшем байте каждого значения – это его десятичная (дробная) часть:

Температура: 00 da = 218 = 21,8 °С

Влажность: 01 bc = 444 = 44,4 %

Убедившись, что Raspberry Pi получает реальные показания с датчика температуры и влажности, можно написать несложный скрипт на Python, с помощью которого мы сможем получать данные в систему домашней автоматизации для их визуализации и записи в базу данных. Но сначала необходимо установить на Raspberry Pi пакет bluepy. Сделать это можно следующей командой в терминальной программе:

sudo pip3 install bluepy

Код скрипта для работы с датчиком температуры и влажности Xiaomi Mijia cleargrass приведен на рис. 8.

 

Temperature and Humidity Xiaomi

Рис. 8

 

Вам необходимо организовать процедуру циклического вызова данного скрипта и записи показаний температуры и влажности в базу данных для последующей визуализации и построения графиков. Реализовать в Linux это, можно через демона cron. Но возможны и другие варианты. Например, в WebHomePi я выполнил вызов скрипта через процедуру loop и запись показаний в базу данных SQLite. Вывод данных температуры и влажности в web-интерфейс показан на рис.9.

 

Temperature and Humidity Xiaomi

Рис. 9

 

Пару слов, какие могут у вас возникнуть проблемы при подключении. В принципе, если использовать только подключение датчика температуры и влажности к Raspberry Pi, то проблем никаких быть не должно. Другое дело, когда необходимо организовать «параллельную» работу датчика с Raspberry Pi и шлюзом или телефоном – для вывода данных в MiHome. Обычно шлюз общается с датчиком через Bluetooth с довольно большими тайм-аутами. А вот телефон, как выяснилось, при соединении «напрямую» (т.е без шлюза) «долбит» в датчик постоянно. Поэтому, вполне вероятна ситуация, что скрипт не сможет сразу подключиться к датчику. Соответственно, в таком случае необходимо в скрипте делать проверку на подключение и в случае неудачного соединения, выполнять повторное подключение.

В заключение хотелось бы отметить, что буквально менее месяца назад, в продажу поступили датчики Xiaomi для контроля положения окон и дверей со встроенным датчиком освещенности, также работающие по протоколу Bluetooth Low Energy (рис.10).

 

Temperature and Humidity Xiaomi

Рис. 10

 

К сожалению, ни один продавец на Aliexpress не подтвердил, что эти датчики будут работать со шлюзом Cleargrass Bluetooth Wi-Fi Gateway, о котором упоминалось выше. Возможно из-за того, что эти датчики пока официально не внесены в список поддерживаемых им устройств. Но на свой страх и риск, я заказал три таких датчика, которые уже буквально на подходе. Так что надеюсь, тема с подключением различных девайсов от Xiaomi к Raspberry Pi, еще найдет свое продолжение.




Категория: | Просмотров: 3386 | Добавил: Admin | Теги: | Рейтинг: 4.3/6 |
Всего комментариев: 0






T2M © 2024
Сайт управляется системой uCoz