From 2f95f077598f7a9131de1e1d76a24ceffd6b89ae Mon Sep 17 00:00:00 2001 From: suaveolent Date: Fri, 14 Jun 2024 10:33:49 +0200 Subject: [PATCH] add serial number field to turn-on/off command --- hoymiles_wifi/__main__.py | 18 +++++++++++------- hoymiles_wifi/dtu.py | 21 +++++++++++++++++---- hoymiles_wifi/hoymiles.py | 6 ++++++ 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/hoymiles_wifi/__main__.py b/hoymiles_wifi/__main__.py index 8241103..73d013e 100644 --- a/hoymiles_wifi/__main__.py +++ b/hoymiles_wifi/__main__.py @@ -209,23 +209,27 @@ async def async_restart_dtu(dtu: DTU) -> CommandPB_pb2.CommandResDTO | None: async def async_turn_on_inverter(dtu: DTU) -> CommandPB_pb2.CommandResDTO | None: - """Turn on the irnverte asynchronously.""" + """Turn on the inverter asynchronously.""" - cont = input("Do you want to turn *ON* the DTU? (y/n): ") + inverter_serial = input("Enter the inverter serial number to turn *ON*: ") + + cont = input(f"Do you want to turn *ON* the Inverter {inverter_serial}? (y/n): ") if cont != "y": return None - return await dtu.async_turn_on_dtu() + return await dtu.async_turn_on_inverter(inverter_serial) async def async_turn_off_inverter(dtu: DTU) -> CommandPB_pb2.CommandResDTO | None: """Turn off the inverter asynchronously.""" - cont = input("Do you want to turn *OFF* the DTU? (y/n): ") + inverter_serial = input("Enter the inverter serial number to turn *OFF*: ") + + cont = input(f"Do you want to turn *OFF* the Inverter {inverter_serial}? (y/n): ") if cont != "y": return None - return await dtu.async_turn_off_dtu() + return await dtu.async_turn_off_inverter(inverter_serial) async def async_get_information_data( @@ -355,8 +359,8 @@ async def main() -> None: "set-wifi": async_set_wifi, "firmware-update": async_firmware_update, "restart-dtu": async_restart_dtu, - "turn-on": async_turn_on_inverter, - "turn-off": async_turn_off_inverter, + "turn-on-inverter": async_turn_on_inverter, + "turn-off-inverter": async_turn_off_inverter, "get-information-data": async_get_information_data, "get-version-info": async_get_version_info, "heartbeat": async_heatbeat, diff --git a/hoymiles_wifi/dtu.py b/hoymiles_wifi/dtu.py index 7c6213c..d855698 100644 --- a/hoymiles_wifi/dtu.py +++ b/hoymiles_wifi/dtu.py @@ -35,6 +35,7 @@ from hoymiles_wifi.const import ( DTU_PORT, OFFSET, ) +from hoymiles_wifi.hoymiles import convert_inverter_serial_number from hoymiles_wifi.protobuf import ( AppGetHistPower_pb2, APPHeartbeatPB_pb2, @@ -254,30 +255,42 @@ class DTU: command, request, CommandPB_pb2.CommandReqDTO ) - async def async_turn_on_inverter(self) -> CommandPB_pb2.CommandResDTO | None: - """Turn on DTU.""" + async def async_turn_on_inverter( + self, inverter_serial: str + ) -> CommandPB_pb2.CommandResDTO | None: + """Turn on Inverter.""" + + inverter_serial_int = convert_inverter_serial_number(inverter_serial) request = CommandPB_pb2.CommandResDTO() request.action = CMD_ACTION_MI_START request.package_nub = 1 request.dev_kind = DEV_DTU request.tid = int(time.time()) + request.mi_to_sn.extend([inverter_serial_int]) command = CMD_CLOUD_COMMAND_RES_DTO + return await self.async_send_request( command, request, CommandPB_pb2.CommandReqDTO ) - async def async_turn_off_inverter(self) -> CommandPB_pb2.CommandResDTO | None: - """Turn off DTU.""" + async def async_turn_off_inverter( + self, inverter_serial: str + ) -> CommandPB_pb2.CommandResDTO | None: + """Turn off Inverter.""" + + inverter_serial_int = convert_inverter_serial_number(inverter_serial) request = CommandPB_pb2.CommandResDTO() request.action = CMD_ACTION_MI_SHUTDOWN request.package_nub = 1 request.dev_kind = DEV_DTU request.tid = int(time.time()) + request.mi_to_sn.extend([inverter_serial_int]) command = CMD_CLOUD_COMMAND_RES_DTO + return await self.async_send_request( command, request, CommandPB_pb2.CommandReqDTO ) diff --git a/hoymiles_wifi/hoymiles.py b/hoymiles_wifi/hoymiles.py index 85de541..a63f406 100644 --- a/hoymiles_wifi/hoymiles.py +++ b/hoymiles_wifi/hoymiles.py @@ -183,6 +183,12 @@ def generate_inverter_serial_number(serial_number: int) -> str: return hex(serial_number)[2:] +def convert_inverter_serial_number(serial_number_str: str) -> int: + """Get inverter serial number from string.""" + + return int(serial_number_str, 16) + + def get_inverter_type(serial_bytes: bytes) -> InverterType: """Get inverter type."""