Устанавливаем питон:
Код: Выделить всё
sudo apt-get install python python-pip
Код: Выделить всё
pip install paho-mqtt
pip install gattlib
Код: Выделить всё
#!/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)
Код: Выделить всё
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