Files

67 lines
2.1 KiB
Python

from miflora.miflora_poller import MiFloraPoller
from btlewrap.bluepy import BluepyBackend
from miflora import miflora_scanner
from miflora.miflora_poller import (MI_BATTERY, MI_CONDUCTIVITY, MI_LIGHT, MI_MOISTURE, MI_TEMPERATURE)
import time
import paho.mqtt.client as mqtt
import json
devices = []
this_client = "test_client"
def poll_miflora(address):
poller = MiFloraPoller(address, BluepyBackend)
miflora_device = {}
miflora_device["name"] = poller.name()
miflora_device["conductivity"] = poller.parameter_value(MI_CONDUCTIVITY)
miflora_device["moisture"] = poller.parameter_value(MI_MOISTURE)
miflora_device["temperature"] = poller.parameter_value(MI_TEMPERATURE)
miflora_device["light"] = poller.parameter_value(MI_LIGHT)
miflora_device["battery"] = poller.parameter_value(MI_BATTERY)
return miflora_device
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("dev/mqtt-miflora/device-configuration")
def on_message(client, userdata, msg):
devices_all = json.loads(msg.payload.decode("utf-8"))
try:
for device in devices_all["devices"]:
try:
if device["client"] == this_client:
devices.append(device)
except KeyError as err:
print("Skipping device. Key not found: '{0}'".format(err))
except Exception as err:
print("Error decoding json configuration: {0}".format(err))
if __name__ == "__main__":
sleep_minutes = 1
backend = BluepyBackend
#devices = miflora_scanner.scan(BluepyBackend, 10)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("chimaera", 1883, 60)
client.loop_start()
while True:
if len(devices) == 0:
time.sleep(1)
else:
for device in devices:
polled_dev = poll_miflora(device["mac"])
print("MIFlora {0}, -- {1}".format(device["name"], polled_dev))
time.sleep(sleep_minutes * 60)
client.loop_stop()