support for restart command

This commit is contained in:
suaveolent 2024-01-30 11:55:48 +01:00
parent 48f635722e
commit f57cda7e40
4 changed files with 33 additions and 7 deletions

View File

@ -89,6 +89,15 @@ def firmware_update(inverter):
return inverter.firmware_update()
def restart(inverter):
cont = input("Do you want to restart the device? (y/n): ")
if(cont != 'y'):
return
return inverter.restart()
def print_invalid_command(command):
print(f"Invalid command: {command}")
@ -111,6 +120,7 @@ def main():
"set-power-limit",
"set-wifi",
"firmware-update",
"restart"
],
help="Command to execute",
)
@ -129,7 +139,8 @@ def main():
'app-get-hist-power': app_get_hist_power,
'set-power-limit': set_power_limit,
'set-wifi': set_wifi,
'firmware-update': firmware_update
'firmware-update': firmware_update,
'restart': restart
}
command_func = switch.get(args.command, print_invalid_command)
@ -138,7 +149,7 @@ def main():
if response:
print(f"{args.command.capitalize()} Response: {response}")
else:
print(f"Unable to retrieve {args.command.replace('_', ' ')}")
print(f"No response or unable to retrieve response for {args.command.replace('_', ' ')}")
if __name__ == "__main__":

View File

@ -31,4 +31,5 @@ CMD_SET_CONFIG_RES = b'\xdb\x07'
CMD_CLOUD_COMMAND_RES_DTO = b'\x23\x05'
CMD_ACTION_FIRMWARE_UPGRADE = 2
CMD_ACTION_RESTART = 3
CMD_ACTION_POWER_LIMIT = 8

View File

@ -37,6 +37,7 @@ from hoymiles_wifi.const import (
CMD_ACTION_FIRMWARE_UPGRADE,
CMD_SET_CONFIG,
CMD_CLOUD_COMMAND_RES_DTO,
CMD_ACTION_RESTART,
)
@ -147,7 +148,7 @@ class Inverter:
request.time = int(time.time())
request.offset = 28800
request.app_page = 1
request.netmode_select = 1
request.netmode_select = NetmodeSelect.WIFI
request.wifi_ssid = ssid.encode('utf-8')
request.wifi_password = password.encode('utf-8')
@ -165,9 +166,20 @@ class Inverter:
command = CMD_CLOUD_COMMAND_RES_DTO
return self.send_request(command, request, CommandPB_pb2.CommandReqDTO)
def restart(self):
request = CommandPB_pb2.CommandResDTO()
request.action = CMD_ACTION_RESTART
request.package_nub = 1
request.tid = int(time.time())
command = CMD_CLOUD_COMMAND_RES_DTO
return self.send_request(command, request, CommandPB_pb2.CommandReqDTO)
def send_request(self, command: bytes, request: Any, response_type: Any):
def send_request(self, command: bytes, request: Any, response_type: Any, inverter_port: int = INVERTER_PORT):
self.sequence = (self.sequence + 1) & 0xFFFF
request_as_bytes = request.SerializeToString()
@ -178,7 +190,7 @@ class Inverter:
header = CMD_HEADER + command
message = header + struct.pack('>HHH', self.sequence, crc16, length) + request_as_bytes
address = (self.host, INVERTER_PORT)
address = (self.host, inverter_port)
try:
with socket.create_connection(address, timeout=0.5) as stream:
stream.settimeout(5)
@ -188,6 +200,8 @@ class Inverter:
logger.debug(f"{e}")
self.set_state(NetworkState.Offline)
return None
print(f"Hexadecimal Content of buf: {buf.hex()}")
read_length = struct.unpack('>H', buf[6:8])[0]

View File

@ -1,9 +1,9 @@
from setuptools import find_packages, setup
from setuptools import setup
setup(
name='hoymiles-wifi',
packages=['hoymiles_wifi', 'hoymiles_wifi.protobuf'],
version='0.0.8',
version='0.0.9',
description='A python library for interfacing with Hoymiles HMS-XXXXW-T2 series of micro-inverters.',
author='suaveolent',
include_package_data=True,