#!/bin/python3
"""
Get data from sensors and post it to specified mqtt channel in json-format
Requires:
Ruuvitag sensor - pip3 install --user ruuvitag-sensor
Paho MQTT - pip3 install --user paho-mqtt
Example usage:
./post_to_mqtt.py --mac [DE:AD:BE:EE:EE:FF,DE:AD:BE:EE:EE:F0] -b mqtt.ikenet
"""
import argparse
import json
import signal
import sys
import time
import paho.mqtt.client as mqtt
from paho.mqtt import publish
from ruuvitag_sensor.ruuvi import RuuviTagSensor, RunFlag
parser = argparse.ArgumentParser(
description="Program relays Ruuvitag BLE temperature and humidity" "advertisements to MQTT broker."
)
parser.add_argument("-m", "--mac", dest="mac_addresses", required=True, help="Ruuvitag MAC addresses")
parser.add_argument("-b", "--broker", dest="mqtt_broker", required=True, help="mqtt broker address, ip or fqdn")
args = parser.parse_args()
mac_address = args.mac_address
mqtt_broker = args.mqtt_broker
# let's trap ctrl-c, SIGINT and come down nicely
# pylint: disable=unused-argument,redefined-outer-name
def signal_handler(signal, frame):
print("\nterminating gracefully.")
client.disconnect()
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
# The callback for when the client receives a CONNACK response from the MQTT server.
# pylint: disable=unused-argument,redefined-outer-name
def on_connect(client, userdata, flags, rc):
# ******* print(f"Connected to MQTT broker with result code {str(rc)}")
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe("$SYS/#")
client = mqtt.Client()
client.on_connect = on_connect
client.connect(mqtt_broker, 1883, 60)
client.loop_start()
# ******** print("Start listening to Ruuvitag")
run_flag = RunFlag()
def handle_data(found_data):
mqtt_msg = json.dumps(found_data[1])
publish.single(mqtt_topic, mqtt_msg, hostname=mqtt_broker)
RuuviTagSensor.get_data(handle_data, mac_addresses, run_flag)
The above source code is a modified version of ruuvitag-sensor project (see https://pypi.org/project/ruuvitag-sensor/0.6.0/), provided under the MIT License.