Initial commit
This commit is contained in:
7 files changed
+247
No files matched your search
Executable
+81
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import solaredge_modbus
|
||||
import sys
|
||||
import time
|
||||
import paho.mqtt.client as mqtt
|
||||
from solaredge_modbus_mqtt import SolarData
|
||||
from pymodbus.exceptions import ConnectionException
|
||||
|
||||
if __name__ == "__main__":
|
||||
argparser = argparse.ArgumentParser()
|
||||
argparser.add_argument("--modbus-host", type=str, default=os.environ.get('MODBUS_HOST', '127.0.0.1'), help="ModbusTCP address")
|
||||
argparser.add_argument("--modbus-port", type=int, default=os.environ.get('MODBUS_PORT', 1502), help="ModbusTCP port")
|
||||
argparser.add_argument("--modbus-timeout", type=int, default=os.environ.get('MODBUS_TIMEOUT', 1), help="Connection timeout")
|
||||
argparser.add_argument("--modbus-unit", type=int, default=os.environ.get('MODBUS_UNIT', 1), help="Modbus unit")
|
||||
|
||||
argparser.add_argument("--mqtt-host", type=str, default=os.environ.get('MQTT_HOST', '127.0.0.1'), help="MQTT Host")
|
||||
argparser.add_argument("--mqtt-port", type=int, default=os.environ.get('MQTT_PORT', 1883), help="MQTT port")
|
||||
argparser.add_argument("--mqtt-user", type=str, default=os.environ.get('MQTT_USER', None), help="MQTT Username")
|
||||
argparser.add_argument("--mqtt-pass", type=str, default=os.environ.get('MQTT_PASS', None), help="MQTT Password")
|
||||
|
||||
argparser.add_argument("--poll-interval", type=int, default=os.environ.get('POLL_INTERVAL', 3), help="Waiting time between each poll")
|
||||
|
||||
args = argparser.parse_args()
|
||||
|
||||
try:
|
||||
mqtt = mqtt.Client(client_id="", clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp")
|
||||
mqtt.username_pw_set(args.mqtt_user, args.mqtt_pass)
|
||||
mqtt.connect(args.mqtt_host, args.mqtt_port, 60)
|
||||
except OSError as err:
|
||||
print("Cannot connect to MQTT on {0}:{1}, error: {2}".format(args.mqtt_host, args.mqtt_port, err))
|
||||
sys.exit(1)
|
||||
|
||||
inverter = solaredge_modbus.Inverter(
|
||||
host=args.modbus_host,
|
||||
port=args.modbus_port,
|
||||
timeout=args.modbus_timeout,
|
||||
unit=args.modbus_unit
|
||||
)
|
||||
|
||||
run = True
|
||||
publishedAutoDiscovery = False
|
||||
while run:
|
||||
try:
|
||||
solar_data = SolarData(inverter.read_all())
|
||||
except ConnectionException as err:
|
||||
print("Cannot connect to SolarEdge Modbus server on {0}:{1}, error: {2}".format(args.modbus_host, args.modbus_port, err))
|
||||
sys.exit(2)
|
||||
|
||||
mqtt.loop()
|
||||
|
||||
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"
|
||||
}
|
||||
}
|
||||
mqtt.publish(
|
||||
'test/homeassistant/sensor/solaredge_inverter/' + str(k) + '/config',
|
||||
json.dumps(message),
|
||||
qos=0,
|
||||
retain=True
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
time.sleep(args.poll_interval)
|
||||
Reference in new issue
Block a user