You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mqtt-sensord/mqtt_sensord/mqtt_sensord.py

46 lines
1.3 KiB

#!/usr/bin/env python3
import argparse
import sys
import time
from . import sensorlib
from .mqttlib import MQTTClient
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-c", "--config", default="/etc/mqtt-sensord.conf")
args = parser.parse_args()
config = sensorlib.load_config(args.config)
sensorlib.Sensor.configure(config['host']['name'], sys.platform)
mcfg = config['mqtt']
if 'client_id' in config['mqtt']:
client_id = config['mqtt']['client_id']
else:
client_id = config['host']['name']
mqtt = MQTTClient(mcfg['host'], mcfg['user'], mcfg['password'], client_id)
mqtt_topic = mcfg['sensor_topic']
print("Connected to", mqtt.host, "with topic", mqtt_topic)
sensors = []
for scfg in config['sensors']:
s = sensorlib.Sensor.make_sensor(**scfg)
sensors.append(s)
last_measurement = time.time()
while True:
print("Getting values from sensors...")
for sensor in sensors:
data = sensor.gen_datapoint()
print(mqtt_topic, data)
mqtt.send_data(mqtt_topic, data)
time.sleep(max(0.0, time.time() + config['host']['interval'] - last_measurement))
last_measurement = time.time()
if __name__ == '__main__':
main()