Подключаем датчик Xiaomi Flora Monitor к Domoticz. Детальное руководство.

Недавно прикупил себе такое детище. Для интереса.

Но облажался – с aliexpress мне прислали бракованный датчик. Как только не шаманил … заставить работать его не удалось. Продавец отбивался – типо я тебе выслал рабочий. Вообщем этот мудак подпортил себе не только репутацию моим длинным отрицательным отзывов, но и испортил настроение мне и мое время. Ибо камней в сторону Xiaomi улетело немало с моей стороны 🙂 Деньги вернул через диспут с тонной доказательств. Но интерес аднака остался и я заказал еще такой же датчик (тоже international version). И мне повезло. Заработало! (c)  .. в связи с этим и родился пост. И так поехали …. что он о умеет:

 

 

 

 

 

Датчик у нас на руках. В MiHome подключается с полпинка, поэтому останавливаться на этом не буду. Теперь заставим его работать в domoticz. Для начала нам необходимо: 

  • установить необходимые библиотеки для работы с датчиком (заставить работать bluetooth на pi3)
  • найти его Bluetooth MAC: адрес датчика
  • переконфигурировать пару скриптов и добавить автоматизацию в crontab

Для работы в первую очередь необходимо установить следующие библиотеки и модули работы Bluetooth на Raspberry Pi3 (Install Python3 and the required Python3 libraries that let Python script talk to Bluetooth)

sudo aptitude install python3 python3-pip
sudo pip3 install pygatt
sudo pip3 install requests

далее сам bluetooth модуль работающий с терминальном режиме

sudo apt-get install pi-bluetooth
sudo apt-get install raspberrypi-sys-mods

PS: для работы с bluetooth также еще можно установить пакет bluez. 

sudo apt-get install bluez bluez-firmware

Далее  я наткнулся на проблему. При запуске была вот такая картина (или что-то ей подобное). Ни в какую не хотел работать bluetooth на Raspberry Pi3. 

pi@raspberrypi:~ $ bluetoothctl
Wait ............................

Побороть я это сразу не смог. Пару часов поискал в инете решение и нашел все таки. Если у вас возникла эта проблема, то делаем следующее :

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y
sudo rpi-update  
sudo reboot

Здесь скорее roi-update помог. У нас должен после перезагрузки стартовать автоматически сервис bluetooth (/etc/init.d/bluetooth). Смотрим так ли это:

service bluetooth status
● bluetooth.service - Bluetooth service
 Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
 Active: active (running) since Wed 2018-02-21 16:40:13 MSK; 5h 16min ago
 Docs: man:bluetoothd(8)
 Main PID: 551 (bluetoothd)
 Status: "Running"
 CGroup: /system.slice/bluetooth.service
 └─551 /usr/lib/bluetooth/bluetoothd

Далее повторим выполнение команды bluetoothctl получим уже что-то вида

root@rb1:/# bluetoothctl
Controller B8:27:EB:0B:01:06 rb1 [default]
[bluetooth]# scan on
Discovery started
[NEW] Device C4:7C:8D:66:28:95 Flower care
[NEW] Device EA:9A:C9:F8:28:F2 SMI-X3
[NEW] Device 88:0F:10:9B:C5:01 MI_SCALE

Controller B8:27:EB:0B:01:06 rb1 [default] это MAC адрес нашего контроллера на Pi3. Он всегда первым в списке идет. Далее видим наш датчик как Device C4:7C:8D:66:28:95 Flower care и его MAC. Записываем.

вот вам в помощь еще 

root@rb1:/# bluetoothctl
help
list Получить список доступных котролерів
show [ctrl] Информацию о контроллер
select <ctrl> Выбрать контроллер по умолчанию
devices Получить список доступных устройств
paired-devices Список подключенных устройств
power <on/off> Включить/отключить питание контроллера
pairable <on/off> Включить/отключить режим подключения (сопряжения)
discoverable <on/off> Включить/отключить режим видимости контроллера
agent <on/off/capability> Разрешить/запретить агента с заданным параметром
default-agent Установить агента по умолчанию
scan <on/off> Включить/отключить сканирование для устройства
info <dev> Информация об устройстве
pair <dev> Соединиться (совокупиться) с устройством
trust <dev> Доверенный устройство
untrust <dev> Ненадежным устройство
block <dev> Блокировать устройство
unblock <dev> Разблокировать устройство
remove <dev> Удалить устройство
connect <dev> Подключить устройство
disconnect <dev> Отключить устройство
version Показать версию
quit Выход из программы

Устанавливаем библиотеку miflore из github

cd ~/domoticz/devices 
git clone https://github.com/Tristan79/miflora.git
cd miflora

Отредактируем тестовый в нем скрипт demo.py. В него мы внесем наш MAC адрес датчика. Красным цветом я пометил места где мы меняем данные на наши

from miflora.miflora_poller import MiFloraPoller, \
    MI_CONDUCTIVITY, MI_MOISTURE, MI_LIGHT, MI_TEMPERATURE, MI_BATTERY

poller = MiFloraPoller("C4:7C:8D:66:28:95")

print("Mi Flora: C4:7C:8D:66:28:95")
print("Firmware: {}".format(poller.firmware_version()))
print("Name: {}".format(poller.name()))
print("Temperature: {}°C".format(poller.parameter_value("temperature")))
print("Moisture: {}%".format(poller.parameter_value(MI_MOISTURE)))
print("Light: {} lux".format(poller.parameter_value(MI_LIGHT)))
print("Fertility: {} uS/cm".format(poller.parameter_value(MI_CONDUCTIVITY)))
print("Battery: {}%".format(poller.parameter_value(MI_BATTERY)))

и выполним команду тест

python3 demo.py

если все правильно сделали то получим данные вида

root@rb1:/home/pi/domoticz/devices/miflora# python3 demo.py
Mi Flora: C4:7C:8D:66:28:95
Firmware: 3.1.8
Name: Flower care
Temperature: 24.2°C
Moisture: 15%
Light: 97 lux
Fertility: 457 uS/cm
Battery: 100%

Приступаем теперь к работам на domoticz. Нам необходимо создать 4 виртуальных датчика для сбора : освещение, влага, температура, удобрения. Для этого идем : Domoticz -> Setup -> Hardware и создадим новый Dummy с именем MiFlower для виртуальных переключателей

 

 

 

 

 

Далее в нем создадим наши 4 датчика

 

 

 

 

 

 

 

 

 

 

 

 

в итоге в Domoticz -> Utility у нас появится 3 датчика и 1 датчик во вкладке Domoticz -> Temperature

 

 

 

 

 

 

Отлично. Теперь нам нужно найти их номера (IDX) во вкладке Domoticz -> Devices, сортируем по последним добавляемым и видим : 253 – 254 -255 -256. Записываем.

 

 

 

 

Теперь мы идем обратно в папку cd  ~/domoticz/devices/miflora и видим там второй скрипт domoticz.py. Вот его сейчас мы и будем править. Заменяем на эти строки (вы же заменяете на свои: это Bluetooth MAC адрес датчика, MiFlower – название наших датчиков начинающихся на это имя, далее 253-256 это по порядку IDX виртуальных датчиков (показаний)

domoticzserver   = "127.0.0.1:8080"
domoticzusername = "admin"
domoticzpassword = "admin123"

# format address, moist (%), temp (°C), lux, fertility

print("\n1: MiFlower")
update("C4:7C:8D:66:28:95","253","254","255","256")

добаляем в crontab для получения показаний в удобные вам периоды, например каждый час

0    *  *  *  *    python3 /home/pi/domoticz/devices/miflora/domoticz.py

Профит! 🙂

 

 

 

 

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

3 комментариев
Популярные
Новые Старые
Межтекстовые Отзывы
Посмотреть все комментарии
александр
02.05.2020 20:36

похоже, xiaomi всё сломали
у меня ни одна библиотека не работает Ж(

репозиторий, который испльзуется тут сообщает в readme тоже что всё сломано

у меня вот такая ошибка:
Mi Flora: C4:7C:8D:6A:66:FC
connect: No route to host (113)

другой https://github.com/open-homeautomation/miflora уже давно не обновлялся
там такое:

File “/usr/local/lib/python3.7/dist-packages/miflora/miflora_poller.py”, line 127, in firmware_version
with self._bt_interface.connect(self._mac) as connection:
File “/usr/local/lib/python3.7/dist-packages/btlewrap/base.py”, line 47, in __enter__
self._backend.connect(self._mac)
File “/usr/local/lib/python3.7/dist-packages/btlewrap/bluepy.py”, line 33, in _func_wrapper
raise BluetoothBackendException() from last_error
btlewrap.base.BluetoothBackendException

очень грустно, давно мечтал их уже подключить наконец-то (

Kirill
Kirill
12.05.2020 15:42
Ответить на  александр

я давно подключил, но то работает, а потом нет, только перегрузка убунту с домотикзом помогала, а сейчас 1 датчик работает (переодически слетает, только перезагрузка лечит), второй выдает таймаут, ошибка такая:
/domoticz/devices/miflora# sudo python3 domoticz1.py

1: MiFlower BF:FA
Patched: Error reading value retry after 5 seconds…
connect: Device or resource busy (16)
connect: Device or resource busy (16)
connect: Device or resource busy (16)
connect: Device or resource busy (16)
Patched: Error reading value retry after 5 seconds…
connect: Device or resource busy (16)
connect: Device or resource busy (16)
Patched: Error reading value

3
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x