Недавно прикупил себе такое детище. Для интереса.
Но облажался – с 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
Профит! 🙂
похоже, 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
очень грустно, давно мечтал их уже подключить наконец-то (