diff --git a/SunGather/config-example.yaml b/SunGather/config-example.yaml index 4b0e372..babffdc 100644 --- a/SunGather/config-example.yaml +++ b/SunGather/config-example.yaml @@ -5,9 +5,10 @@ inverter: # retries: 3 # [Optional] Default is 3, how many times to retry if connection fails # slave: 0x01 # [Optional] Default is 0x01 # 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 # 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 # 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 @@ -72,8 +73,8 @@ exports: # username: # [Optional] Username 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. - homeassistant: True # [Optional] Default False, Publish discovery and sensors for HomeAssistant - ha_sensors: # [Optional] / [Required] ha_discovery: True, Topics to enable discovery for HA + homeassistant: False # [Optional] Default False, Publish discovery and sensors for HomeAssistant + ha_sensors: # [Optional] / [Required] homeassistant: True, Topics to enable discovery for HA - name: "Daily Generation" sensor_type: sensor register: daily_power_yields diff --git a/SunGather/registers-sungrow.yaml b/SunGather/registers-sungrow.yaml index e04bc65..fba1b07 100644 --- a/SunGather/registers-sungrow.yaml +++ b/SunGather/registers-sungrow.yaml @@ -23,7 +23,7 @@ registers: 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"] - name: "serial_number" - level: 1 + level: 3 address: 4990 datatype: "UTF-8" - name: "device_type_code" diff --git a/SunGather/sungather.py b/SunGather/sungather.py index 5f5ec15..d749ebc 100644 --- a/SunGather/sungather.py +++ b/SunGather/sungather.py @@ -27,6 +27,7 @@ class SungrowInverter(): self.inverter_config = { "slave": config_inverter.get('slave'), "model": config_inverter.get('model'), + "serial": config_inverter.get('serial'), "level": config_inverter.get('level'), "use_local_time": config_inverter.get('use_local_time'), "smart_meter": config_inverter.get('smart_meter'), @@ -111,6 +112,25 @@ class SungrowInverter(): self.registers.pop() 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 for register in registersfile['registers'][0]['read']: if register.get('level',3) <= self.inverter_config.get('level') or self.inverter_config.get('level') == 3: diff --git a/SunGather/version.py b/SunGather/version.py index f0891e5..efc7796 100644 --- a/SunGather/version.py +++ b/SunGather/version.py @@ -1 +1 @@ -__version__ = '0.3.8' \ No newline at end of file +__version__ = '0.3.9' \ No newline at end of file