Koden som jeg kjørende på en Raspberry PI som videresender over MQTT:
import paho.mqtt.client as mqtt
from ruuvitag_sensor.ruuvi_rx import RuuviTagReactive
mqtt_broker = 'mqtt-server'
mqtt_port = 1883
def on_mqtt_disconnect(client, userdata, rc=0):
time.sleep(2)
sys.exit(1)
mqttclient = mqtt.Client()
mqttclient.on_disconnect = on_mqtt_disconnect
mqttclient.connect(mqtt_broker, mqtt_port)
ruuvi_rx = RuuviTagReactive()
def publish(sensordata):
mac = sensordata[0]
datadict = sensordata[1]
# print("mac: {}, temp={}, rh={}".format(mac, datadict['temperature'], datadict['humidity']))
mqttclient.publish('ruuvi/' + mac, str(datadict))
# Process data for each sensor only every 10 second
ruuvi_rx.get_subject().\
buffer_with_time(10000).\
map(lambda datas: datas[-1]).\
subscribe(lambda x: publish(x))
Item-definisjon i OpenHAB kobler blåtann-mac-adresse mot hvor sensoren står (hva den måler) og plukker også det den trenger av JSON-dataene som blir sendt:
Number Sensor_Kjoleskap_temperatur "Temperatur kjøleskap" (Temperatur, Ruuvi, gResetExpire) {mqtt="<[mqtt-server:ruuvi/DA\\:10\\:13\\:C5\\:13\\:92:state:JSONPATH($.temperature):.*temperature.*]", expire="60m"}
(ja, dette er legacy mqtt-binding, har ikke kommet lenger..)