Страница 1 из 1

Xiaomi FlowerMonitor

Добавлено: Вт апр 04, 2017 6:30 pm
Dark_Veter
Сегодня удалось прикрутить 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 ставил как написано тут(Для малинки обязательно нужен патч).

Re: Xiaomi FlowerMonitor

Добавлено: Ср апр 05, 2017 8:53 am
woow
ай как интересно, вчера как раз пришла Raspberry Pi ZeroW, надеюсь подойдёт для перекачки данных на МД сервер.

Re: Xiaomi FlowerMonitor

Добавлено: Пн апр 17, 2017 12:26 pm
Alex77
Очень интересно, а виде модуля для MDM не планируете сделать? а то я не селен в установке на линукс (( боюсь все сломать.

Re: Xiaomi FlowerMonitor

Добавлено: Вт апр 18, 2017 10:35 am
Dark_Veter
Модуля пока не планируется, т.к. на данном этапе нету смысла) Все равно придется ставить все, что тут написано. Если разберусь (или кто-то разберется)) как это все на php реализовать, тогда будет смысл написать модуль.