mirror of
https://github.com/alexhopeoconnor/SunGather.git
synced 2026-10-23 19:12:11 +10:00
Add Serial detection initial start
This commit is contained in:
@@ -5,9 +5,10 @@ inverter:
|
|||||||
# retries: 3 # [Optional] Default is 3, how many times to retry if connection fails
|
# retries: 3 # [Optional] Default is 3, how many times to retry if connection fails
|
||||||
# slave: 0x01 # [Optional] Default is 0x01
|
# slave: 0x01 # [Optional] Default is 0x01
|
||||||
# scan_interval: 30 # [Optional] Default is 30
|
# scan_interval: 30 # [Optional] Default is 30
|
||||||
connection: sungrow # [Required] options: modbus, sungrow, http
|
connection: modbus # [Required] options: modbus, sungrow, http
|
||||||
# model: "SG7.0RT" # [Optional] This is autodetected on startup, only needed if detection issues or for testing
|
# model: "SG7.0RT" # [Optional] This is autodetected on startup, only needed if detection issues or for testing
|
||||||
# See model list here: https://github.com/bohdan-s/SunGather#supported
|
# See model list here: https://github.com/bohdan-s/SunGather#supported
|
||||||
|
# serial: xxxxxxxxxx # [Optional] This is autodetected on startup, only needed if detection issues or for testing, used as a unique ID
|
||||||
# smart_meter: True # [Optional] Default is False, Set to true if inverter supports reading grind / house consumption
|
# smart_meter: True # [Optional] Default is False, Set to true if inverter supports reading grind / house consumption
|
||||||
# use_local_time: False # [Optional] Default False, Uses Inventer time, if true it uses PC time when updating timestamps (e.g. PVOutput)
|
# use_local_time: False # [Optional] Default False, Uses Inventer time, if true it uses PC time when updating timestamps (e.g. PVOutput)
|
||||||
# log_console: INFO # [Optional] Default is WARNING, Options: DEBUG, INFO, WARNING, ERROR
|
# log_console: INFO # [Optional] Default is WARNING, Options: DEBUG, INFO, WARNING, ERROR
|
||||||
@@ -72,8 +73,8 @@ exports:
|
|||||||
# username: # [Optional] Username is MQTT server requires it
|
# username: # [Optional] Username is MQTT server requires it
|
||||||
# password: # [Optional] Password is MQTT server requires it
|
# password: # [Optional] Password is MQTT server requires it
|
||||||
# client_id: # [Optional] Client id for mqtt connection. Defaults to "SunGather", need to be set to different values if you want to run multiple instances of sungather.
|
# client_id: # [Optional] Client id for mqtt connection. Defaults to "SunGather", need to be set to different values if you want to run multiple instances of sungather.
|
||||||
homeassistant: True # [Optional] Default False, Publish discovery and sensors for HomeAssistant
|
homeassistant: False # [Optional] Default False, Publish discovery and sensors for HomeAssistant
|
||||||
ha_sensors: # [Optional] / [Required] ha_discovery: True, Topics to enable discovery for HA
|
ha_sensors: # [Optional] / [Required] homeassistant: True, Topics to enable discovery for HA
|
||||||
- name: "Daily Generation"
|
- name: "Daily Generation"
|
||||||
sensor_type: sensor
|
sensor_type: sensor
|
||||||
register: daily_power_yields
|
register: daily_power_yields
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ registers:
|
|||||||
datatype: "U16"
|
datatype: "U16"
|
||||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH10RT-V112","SH8.0RT","SH6.0RT","SH5.0RT"]
|
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH10RT-V112","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||||
- name: "serial_number"
|
- name: "serial_number"
|
||||||
level: 1
|
level: 3
|
||||||
address: 4990
|
address: 4990
|
||||||
datatype: "UTF-8"
|
datatype: "UTF-8"
|
||||||
- name: "device_type_code"
|
- name: "device_type_code"
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ class SungrowInverter():
|
|||||||
self.inverter_config = {
|
self.inverter_config = {
|
||||||
"slave": config_inverter.get('slave'),
|
"slave": config_inverter.get('slave'),
|
||||||
"model": config_inverter.get('model'),
|
"model": config_inverter.get('model'),
|
||||||
|
"serial": config_inverter.get('serial'),
|
||||||
"level": config_inverter.get('level'),
|
"level": config_inverter.get('level'),
|
||||||
"use_local_time": config_inverter.get('use_local_time'),
|
"use_local_time": config_inverter.get('use_local_time'),
|
||||||
"smart_meter": config_inverter.get('smart_meter'),
|
"smart_meter": config_inverter.get('smart_meter'),
|
||||||
@@ -111,6 +112,25 @@ class SungrowInverter():
|
|||||||
self.registers.pop()
|
self.registers.pop()
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if self.inverter_config.get('serial'):
|
||||||
|
logging.info(f"Bypassing Serial Detection, Using config: {self.inverter_config.get('serial')}")
|
||||||
|
else:
|
||||||
|
# Load just the register to detect model, then we can load the rest of registers based on returned model
|
||||||
|
for register in registersfile['registers'][0]['read']:
|
||||||
|
if register.get('name') == "serial":
|
||||||
|
register['type'] = "read"
|
||||||
|
self.registers.append(register)
|
||||||
|
if self.load_registers(register['type'], register['address'] -1, 5): # Needs to be address -1
|
||||||
|
if isinstance(self.latest_scrape.get('serial'),int):
|
||||||
|
logging.warning(f"Unknown Type Code Detected: {self.latest_scrape.get('serial')}")
|
||||||
|
else:
|
||||||
|
self.inverter_config['model'] = self.latest_scrape.get('serial')
|
||||||
|
logging.info(f"Detected Serial: {self.inverter_config.get('serial')}")
|
||||||
|
else:
|
||||||
|
logging.info(f'Serial detection failed, please set model in config.py')
|
||||||
|
self.registers.pop()
|
||||||
|
break
|
||||||
|
|
||||||
# Load register list based on name and value after checking model
|
# Load register list based on name and value after checking model
|
||||||
for register in registersfile['registers'][0]['read']:
|
for register in registersfile['registers'][0]['read']:
|
||||||
if register.get('level',3) <= self.inverter_config.get('level') or self.inverter_config.get('level') == 3:
|
if register.get('level',3) <= self.inverter_config.get('level') or self.inverter_config.get('level') == 3:
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
__version__ = '0.3.8'
|
__version__ = '0.3.9'
|
||||||
Reference in New Issue
Block a user