2023-11-17 12:20:23 +00:00
import argparse
2023-12-19 08:28:47 +00:00
from hoymiles_wifi . inverter import Inverter
2023-11-17 11:10:33 +00:00
import time
2023-12-20 08:32:26 +00:00
def get_real_data_new ( inverter ) :
return inverter . get_real_data_new ( )
def get_real_data_hms ( inverter ) :
return inverter . get_real_data_hms ( )
def get_real_data ( inverter ) :
return inverter . get_real_data ( )
def get_config ( inverter ) :
return inverter . get_config ( )
def network_info ( inverter ) :
return inverter . network_info ( )
def app_information_data ( inverter ) :
return inverter . app_information_data ( )
def app_get_hist_power ( inverter ) :
return inverter . app_get_hist_power ( )
2024-01-11 13:04:38 +00:00
def set_power_limit ( inverter ) :
RED = ' \033 [91m '
END = ' \033 [0m '
print ( RED + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " + END )
print ( RED + " !!! Danger zone! This will change the power limit of the inverter. !!! " + END )
print ( RED + " !!! Please be careful and make sure you know what you are doing. !!! " + END )
print ( RED + " !!! Only proceed if you know what you are doing. !!! " + END )
print ( RED + " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " + END )
print ( " " )
cont = input ( " Do you want to continue? (y/n): " )
if ( cont != ' y ' ) :
return
power_limit = int ( input ( " Enter the new power limit (0-100): " ) )
if ( power_limit < 0 or power_limit > 100 ) :
print ( " Error. Invalid power limit! " )
return
print ( f " Setting power limit to { power_limit } % " )
cont = input ( " Are you sure? (y/n): " )
if ( cont != ' y ' ) :
return
return inverter . set_power_limit ( power_limit )
2023-12-20 08:32:26 +00:00
def print_invalid_command ( command ) :
print ( f " Invalid command: { command } " )
2023-11-17 11:10:33 +00:00
def main ( ) :
2023-11-17 12:20:23 +00:00
parser = argparse . ArgumentParser ( description = " Hoymiles HMS Monitoring " )
2023-12-19 11:15:08 +00:00
parser . add_argument ( " --host " , type = str , required = True , help = " IP address or hostname of the inverter " )
2024-01-11 13:04:38 +00:00
parser . add_argument ( " command " , type = str , choices = [ ' get-real-data-new ' , ' get-real-data-hms ' , ' get-real-data ' , ' get-config ' , ' network-info ' , ' app-information-data ' , ' app-get-hist-power ' , ' set-power-limit ' ] , help = " Command to execute " )
2023-11-17 12:20:23 +00:00
args = parser . parse_args ( )
2023-12-19 11:15:08 +00:00
inverter = Inverter ( args . host )
2023-11-17 11:10:33 +00:00
2023-12-20 08:32:26 +00:00
# Execute the specified command using a switch case
switch = {
' get-real-data-new ' : get_real_data_new ,
' get-real-data-hms ' : get_real_data_hms ,
' get-real-data ' : get_real_data ,
' get-config ' : get_config ,
' network-info ' : network_info ,
' app-information-data ' : app_information_data ,
' app-get-hist-power ' : app_get_hist_power ,
2024-01-11 13:04:38 +00:00
' set-power-limit ' : set_power_limit ,
2023-12-20 08:32:26 +00:00
}
command_func = switch . get ( args . command , print_invalid_command )
response = command_func ( inverter )
if response :
print ( f " { args . command . capitalize ( ) } Response: { response } " )
else :
print ( f " Unable to retrieve { args . command . replace ( ' _ ' , ' ' ) } " )
2023-11-17 11:10:33 +00:00
if __name__ == " __main__ " :
2023-11-17 11:45:17 +00:00
main ( )