From 69abaee5e2f7e00c51d5f78b121f13f356e3eb40 Mon Sep 17 00:00:00 2001 From: Marijn Koesen Date: Thu, 4 Jun 2020 21:34:54 +0200 Subject: [PATCH] Make mqtt topic configurable --- config.yaml-dist | 2 ++ solaredge_modbus_mqtt.py | 31 +++++++++++++++---------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/config.yaml-dist b/config.yaml-dist index 852fe31..3776f86 100644 --- a/config.yaml-dist +++ b/config.yaml-dist @@ -9,5 +9,7 @@ mqtt: port: 1883 user: ~ pass: ~ + auto_discovery_topic: homeassistant/sensor/solaredge_inverter + state_topic: my_home/garage/sensor/solaredge_inverter poll_interval: 3 \ No newline at end of file diff --git a/solaredge_modbus_mqtt.py b/solaredge_modbus_mqtt.py index 85adc01..4bf3647 100755 --- a/solaredge_modbus_mqtt.py +++ b/solaredge_modbus_mqtt.py @@ -11,9 +11,9 @@ import yaml from solaredge_modbus_mqtt import SolarData from pymodbus.exceptions import ConnectionException -if __name__ == "__main__": +if __name__ == '__main__': argparser = argparse.ArgumentParser() - argparser.add_argument("--config", type=str, default=os.environ.get('CONFIG_FILE', 'config.yaml'), help="Path to the config.yaml") + argparser.add_argument('--config', type=str, default=os.environ.get('CONFIG_FILE', 'config.yaml'), help='Path to the config.yaml') args = argparser.parse_args() with open(args.config, 'r') as stream: @@ -23,11 +23,11 @@ if __name__ == "__main__": print(exc) try: - mqtt = mqtt.Client(client_id="", clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp") + mqtt = mqtt.Client(client_id='', clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport='tcp') mqtt.username_pw_set(config['mqtt']['user'], config['mqtt']['pass']) mqtt.connect(config['mqtt']['host'], config['mqtt']['port'], 60) except OSError as err: - print("Cannot connect to MQTT on {0}:{1}, error: {2}".format(config['mqtt']['host'], config['mqtt']['port'], err)) + print('Cannot connect to MQTT on {0}:{1}, error: {2}'.format(config['mqtt']['host'], config['mqtt']['port'], err)) sys.exit(1) inverter = solaredge_modbus.Inverter( @@ -43,7 +43,7 @@ if __name__ == "__main__": try: solar_data = SolarData(inverter.read_all()) except ConnectionException as err: - print("Cannot connect to SolarEdge Modbus server on {0}:{1}, error: {2}".format(config['modbus']['host'], config['modbus']['port'], err)) + print('Cannot connect to SolarEdge Modbus server on {0}:{1}, error: {2}'.format(config['modbus']['host'], config['modbus']['port'], err)) sys.exit(2) mqtt.loop() @@ -51,18 +51,18 @@ if __name__ == "__main__": if (publishedAutoDiscovery == False): for k, v in solar_data.data.items(): message = { - "name": "SolarEdge " + k.replace("_", " ").title(), - "unique_id": "solaredge_" + k, - "unit_of_measurement": SolarData.fields[k]['unit'] if 'unit' in SolarData.fields[k] else '', - "state_topic": "home/hal_beneden/sensor/solaredge_inverter/" + k, - "force_update": "True", - "device": { - "identifiers": ["solaredge_inverter"], - "name": "SolarEdge Inverter" + 'name': 'SolarEdge ' + k.replace('_', ' ').title(), + 'unique_id': 'solaredge_' + k, + 'unit_of_measurement': SolarData.fields[k]['unit'] if 'unit' in SolarData.fields[k] else '', + 'state_topic': config['mqtt']['state_topic'] + '/' + k, + 'force_update': 'True', + 'device': { + 'identifiers': ['solaredge_inverter'], + 'name': 'SolarEdge Inverter' } } mqtt.publish( - 'test/homeassistant/sensor/solaredge_inverter/' + str(k) + '/config', + config['mqtt']['auto_discovery_topic'] + '/' + str(k) + '/config', json.dumps(message), qos=0, retain=True @@ -70,8 +70,7 @@ if __name__ == "__main__": publishedAutoDiscovery = True - for k, v in solar_data.data.items(): - mqtt.publish('test/home/hal_beneden/sensor/solaredge_inverter/' + k, payload=str(v), qos=0, retain=False) + mqtt.publish(config['mqtt']['state_topic'] + '/' + k, payload=str(v), qos=0, retain=False) time.sleep(args.poll_interval) \ No newline at end of file