Make mqtt topic configurable

This commit is contained in:
Marijn Koesen committed 2020-06-04 21:34:54 +02:00
1 parent e6196b91cf
commit 69abaee5e2
2 files changed
+17 -16

No files matched your search

+2
View File
@@ -9,5 +9,7 @@ mqtt:
port: 1883 port: 1883
user: ~ user: ~
pass: ~ pass: ~
auto_discovery_topic: homeassistant/sensor/solaredge_inverter
state_topic: my_home/garage/sensor/solaredge_inverter
poll_interval: 3 poll_interval: 3
+15 -16
View File
@@ -11,9 +11,9 @@ import yaml
from solaredge_modbus_mqtt import SolarData from solaredge_modbus_mqtt import SolarData
from pymodbus.exceptions import ConnectionException from pymodbus.exceptions import ConnectionException
if __name__ == "__main__": if __name__ == '__main__':
argparser = argparse.ArgumentParser() 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() args = argparser.parse_args()
with open(args.config, 'r') as stream: with open(args.config, 'r') as stream:
@@ -23,11 +23,11 @@ if __name__ == "__main__":
print(exc) print(exc)
try: 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.username_pw_set(config['mqtt']['user'], config['mqtt']['pass'])
mqtt.connect(config['mqtt']['host'], config['mqtt']['port'], 60) mqtt.connect(config['mqtt']['host'], config['mqtt']['port'], 60)
except OSError as err: 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) sys.exit(1)
inverter = solaredge_modbus.Inverter( inverter = solaredge_modbus.Inverter(
@@ -43,7 +43,7 @@ if __name__ == "__main__":
try: try:
solar_data = SolarData(inverter.read_all()) solar_data = SolarData(inverter.read_all())
except ConnectionException as err: 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) sys.exit(2)
mqtt.loop() mqtt.loop()
@@ -51,18 +51,18 @@ if __name__ == "__main__":
if (publishedAutoDiscovery == False): if (publishedAutoDiscovery == False):
for k, v in solar_data.data.items(): for k, v in solar_data.data.items():
message = { message = {
"name": "SolarEdge " + k.replace("_", " ").title(), 'name': 'SolarEdge ' + k.replace('_', ' ').title(),
"unique_id": "solaredge_" + k, 'unique_id': 'solaredge_' + k,
"unit_of_measurement": SolarData.fields[k]['unit'] if 'unit' in SolarData.fields[k] else '', 'unit_of_measurement': SolarData.fields[k]['unit'] if 'unit' in SolarData.fields[k] else '',
"state_topic": "home/hal_beneden/sensor/solaredge_inverter/" + k, 'state_topic': config['mqtt']['state_topic'] + '/' + k,
"force_update": "True", 'force_update': 'True',
"device": { 'device': {
"identifiers": ["solaredge_inverter"], 'identifiers': ['solaredge_inverter'],
"name": "SolarEdge Inverter" 'name': 'SolarEdge Inverter'
} }
} }
mqtt.publish( mqtt.publish(
'test/homeassistant/sensor/solaredge_inverter/' + str(k) + '/config', config['mqtt']['auto_discovery_topic'] + '/' + str(k) + '/config',
json.dumps(message), json.dumps(message),
qos=0, qos=0,
retain=True retain=True
@@ -70,8 +70,7 @@ if __name__ == "__main__":
publishedAutoDiscovery = True publishedAutoDiscovery = True
for k, v in solar_data.data.items(): 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) time.sleep(args.poll_interval)