Xiaomi FlowerMonitor

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Ответить
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Xiaomi FlowerMonitor

Сообщение Dark_Veter » Вт апр 04, 2017 6:30 pm

Сегодня удалось прикрутить Xiaomi FlowerMonitor с помощью mqtt бриджа. На малинке обновил версию bluez до 5.43, т.к. на 5.23 не завелось.
Устанавливаем питон:

Код: Выделить всё

sudo apt-get install python python-pip
Ставим необходимые модули:

Код: Выделить всё

pip install paho-mqtt
pip install gattlib
И сам скрипт miflora.py:

Код: Выделить всё

#!/usr/bin/python
# -*- mode: python; coding: utf-8 -*-
# Scans for and reads data from Xiaomi flower monitor and publish via MQTT

import sys
from struct import unpack
import paho.mqtt.publish as publish
from gattlib import DiscoveryService, GATTRequester, GATTResponse

verbose = True

service = DiscoveryService("hci0")
devices = service.discover(10)

baseTopic = "miflower/"
msgs=[]

for address, name in list(devices.items()):
    try:    
    if (name == "Flower care"):
        topic= baseTopic + address.replace(':', '') + '/'
        requester = GATTRequester(address, True)
        #Read battery and firmware version attribute
        data=requester.read_by_handle(0x0038)[0]
        battery, firmware = unpack('<B6s',data)
        msgs.append({'topic': topic + 'battery', 'payload':battery})
        msgs.append({'topic': topic + 'firmware', 'payload':firmware})
        #Enable real-time data reading
        requester.write_by_handle(0x0033, str(bytearray([0xa0, 0x1f])))
        #Read plant data
        data=requester.read_by_handle(0x0035)[0]
        temperature, sunlight, moisture, fertility = unpack('<hxIBHxxxxxx',data)
        msgs.append({'topic': topic + 'temperature', 'payload':temperature/10.})
        msgs.append({'topic': topic + 'sunlight', 'payload':sunlight})
        msgs.append({'topic': topic + 'moisture', 'payload':moisture})
        msgs.append({'topic': topic + 'fertility', 'payload':fertility})
        if (verbose):
            print("name: {}, address: {}".format(name, address))
            print "Battery level:",battery,"%"
            print "Firmware version:",firmware
            print "Light intensity:",sunlight,"lux"
            print "Temperature:",temperature/10.," C"
            print "Soil moisture:",moisture,"%"
            print "Soil fertility:",fertility,"uS/cm"
    except:
        print "Error during reafing:", sys.exc_info()[0]

if (len(msgs) > 0):
    publish.multiple(msgs, hostname="MQTT_IP", port=1883, client_id="miflower", keepalive=60, will=None, auth=None, tls=None)
 
Засунул его в крон на каждые 2 часа:

Код: Выделить всё

sudo crontab -e
0 */2 * * * /usr/bin/sudo hciconfig hci0 reset; /usr/bin/sudo /usr/bin/python /usr/src/miflora.py >/dev/null 2>&1
Долго промучился с обновлением bluez, после чего все завелось. Bluez ставил как написано тут(Для малинки обязательно нужен патч).
За это сообщение автора Dark_Veter поблагодарил:
woow (Ср апр 05, 2017 8:53 am)
Рейтинг: 1.16%
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Аватара пользователя
woow
Сообщения: 821
Зарегистрирован: Пн июл 04, 2016 8:46 am
Откуда: Mazeikiai
Благодарил (а): 125 раз
Поблагодарили: 46 раз

Re: Xiaomi FlowerMonitor

Сообщение woow » Ср апр 05, 2017 8:53 am

ай как интересно, вчера как раз пришла Raspberry Pi ZeroW, надеюсь подойдёт для перекачки данных на МД сервер.
Raspberry Pi 3B+
Alex77
Сообщения: 215
Зарегистрирован: Вс мар 05, 2017 2:18 pm
Благодарил (а): 21 раз
Поблагодарили: 6 раз

Re: Xiaomi FlowerMonitor

Сообщение Alex77 » Пн апр 17, 2017 12:26 pm

Очень интересно, а виде модуля для MDM не планируете сделать? а то я не селен в установке на линукс (( боюсь все сломать.
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Xiaomi FlowerMonitor

Сообщение Dark_Veter » Вт апр 18, 2017 10:35 am

Модуля пока не планируется, т.к. на данном этапе нету смысла) Все равно придется ставить все, что тут написано. Если разберусь (или кто-то разберется)) как это все на php реализовать, тогда будет смысл написать модуль.
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Ответить