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()