add serial number field to turn-on/off command

This commit is contained in:
suaveolent 2024-06-14 10:33:49 +02:00
parent 0d80ce808c
commit 2f95f07759
3 changed files with 34 additions and 11 deletions

View File

@ -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,

View File

@ -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
)

View File

@ -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."""