diff --git a/inverter/api.py b/inverter/api.py index e4c695a..5afdaf1 100644 --- a/inverter/api.py +++ b/inverter/api.py @@ -22,7 +22,6 @@ from inverter.exceptions import ValidationError from inverter.validators import InverterValueValidator - logger = logging.getLogger(__name__) @@ -159,8 +158,13 @@ def fetch_inverter_versions( results = [] for info in infos: print(f'Fetch "{info.name}"', end='...') - response: ModbusResponse = inv_sock.read(start_register=info.register, length=1) + if info.inverter == 'deye_sg04lp3': + response: ModbusResponse = inv_sock.read(start_register=info.register, length=2) + version = '-'.join(response.data_hex[i:i + 4] for i in range(0, len(response.data_hex), 4)) + else: + response: ModbusResponse = inv_sock.read(start_register=info.register, length=1) + version = Version('.'.join(number for number in response.data_hex)) + print(f'Result (in hex): [cyan]{response.data_hex}') - version = Version('.'.join(number for number in response.data_hex)) results.append(InverterRegisterVersionResult(info=info, data_hex=response.data_hex, version=version)) return results diff --git a/inverter/cli/cli_app.py b/inverter/cli/cli_app.py index 8a34d18..1d46e1a 100644 --- a/inverter/cli/cli_app.py +++ b/inverter/cli/cli_app.py @@ -533,12 +533,18 @@ def inverter_version(ip, port, verbosity: int): except ReadInverterError as err: print(f'[red]{err}') sys.exit(1) + if user_settings.inverter.name == 'deye_sg04lp3': + infos = [ + InverterRegisterVersionInfo(name='MCU1', register=0x000E, inverter='deye_sg04lp3'), + InverterRegisterVersionInfo(name='MCU2', register=0x0011, inverter='deye_sg04lp3'), + ] + else: + infos = [ + InverterRegisterVersionInfo(name='Control Board Firmware', register=0x000D), + InverterRegisterVersionInfo(name='Communication Board Firmware', register=0x000E), + InverterRegisterVersionInfo(name='Communication Protocol', register=0x0012), + ] - infos = [ - InverterRegisterVersionInfo(name='Control Board Firmware', register=0x000D), - InverterRegisterVersionInfo(name='Communication Board Firmware', register=0x000E), - InverterRegisterVersionInfo(name='Communication Protocol', register=0x0012), - ] results = fetch_inverter_versions(inv_sock=inv_sock, infos=infos) print_inverter_versions(results) diff --git a/inverter/data_types.py b/inverter/data_types.py index 010af2e..de4f5b1 100644 --- a/inverter/data_types.py +++ b/inverter/data_types.py @@ -143,6 +143,7 @@ class Validators(msgspec.Struct): class InverterRegisterVersionInfo: name: str register: int + inverter: str | None = None @dataclasses.dataclass diff --git a/inverter/definitions/deye_2mppt_validations.yaml b/inverter/definitions/deye_2mppt_validations.yaml index 3558a57..4aa7152 100644 --- a/inverter/definitions/deye_2mppt_validations.yaml +++ b/inverter/definitions/deye_2mppt_validations.yaml @@ -1,7 +1,7 @@ validators: - name: "Radiator Temperature" type: "float" - min_value: -9.9 + min_value: -99.9 max_value: 100 - name: "Total AC Output Power (Active)" diff --git a/inverter/utilities/cli.py b/inverter/utilities/cli.py index efb75c4..d43e196 100644 --- a/inverter/utilities/cli.py +++ b/inverter/utilities/cli.py @@ -87,7 +87,7 @@ def print_inverter_versions(results: list[InverterRegisterVersionResult], title= hex(result.info.register + offset), # Address (hex) str(result.info.register + offset), # Address (dec) result.data_hex, # Hex value - f'v{result.version}', # Human readable version + f'{result.version}', # Human readable version ) console = get_console()