Ruuvi Code

#!/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.