#!/usr/bin/env python import argparse import yaml import paho.mqtt.publish def read_config(config_dict, base_topic=''): ret = {} for elem in config_dict: if 'topic' not in elem: raise Exception("Invalid config") sep = '/' if base_topic else '' topic = '{}{}{}'.format(base_topic.rstrip("/"), sep, elem["topic"].lstrip("/")) if 'children' in elem: ret.update(read_config(elem['children'], base_topic=topic)) if 'value' in elem: ret[topic] = elem['value'] return ret def main(): options = argparse.ArgumentParser() options.add_argument('--broker', '-b', default='localhost') options.add_argument('--port', '-p', default='1883', type=int) options.add_argument('config') args = options.parse_args() with open(args.config, 'r') as f: config_dict = yaml.load(f, Loader=yaml.Loader) topics = read_config(config_dict) msgs = [(topic, value, 1, True) for topic, value in topics.items()] paho.mqtt.publish.multiple(msgs, hostname=args.broker, port=args.port, client_id='configuration') if __name__ == '__main__': main()