diff --git a/hoymiles_wifi/__init__.py b/hoymiles_wifi/__init__.py index ddb0c8c..916e9e7 100644 --- a/hoymiles_wifi/__init__.py +++ b/hoymiles_wifi/__init__.py @@ -1,7 +1,9 @@ """Init file for hoymiles_wifi package.""" import logging +import os -logging.basicConfig(level=logging.INFO) +LOGLEVEL = os.environ.get("LOGLEVEL", "INFO").upper() +logging.basicConfig(level=LOGLEVEL) logger = logging.getLogger(__name__) diff --git a/hoymiles_wifi/__main__.py b/hoymiles_wifi/__main__.py index d2cecc9..d4bd6ae 100644 --- a/hoymiles_wifi/__main__.py +++ b/hoymiles_wifi/__main__.py @@ -29,7 +29,6 @@ from hoymiles_wifi.protobuf import ( InfomationData_pb2, NetworkInfo_pb2, RealData_pb2, - RealDataHMS_pb2, RealDataNew_pb2, ) @@ -71,14 +70,6 @@ async def async_get_real_data_new( return await dtu.async_get_real_data_new() -async def async_get_real_data_hms( - dtu: DTU, -) -> RealDataHMS_pb2.RealDataHMSResDTO | None: - """Get real data from the inverter asynchronously.""" - - return await dtu.async_get_real_data_hms() - - async def async_get_real_data(dtu: DTU) -> RealData_pb2.RealDataResDTO | None: """Get real data from the inverter asynchronously.""" @@ -300,7 +291,7 @@ def print_invalid_command(command: str) -> None: async def main() -> None: """Execute the main function for the hoymiles_wifi package.""" - parser = argparse.ArgumentParser(description="Hoymiles HMS Monitoring") + parser = argparse.ArgumentParser(description="Hoymiles DTU Monitoring") parser.add_argument( "--host", type=str, required=True, help="IP address or hostname of the DTU" ) @@ -315,7 +306,6 @@ async def main() -> None: type=str, choices=[ "get-real-data-new", - "get-real-data-hms", "get-real-data", "get-config", "network-info", @@ -342,7 +332,6 @@ async def main() -> None: # Execute the specified command using a switch case switch = { "get-real-data-new": async_get_real_data_new, - "get-real-data-hms": async_get_real_data_hms, "get-real-data": async_get_real_data, "get-config": async_get_config, "network-info": async_network_info, diff --git a/hoymiles_wifi/const.py b/hoymiles_wifi/const.py index fd479d7..cc501bd 100644 --- a/hoymiles_wifi/const.py +++ b/hoymiles_wifi/const.py @@ -114,3 +114,4 @@ DTU_FIRMWARE_URL_00_01_11 = ( ) MAX_POWER_LIMIT = 100 +OFFSET = 28800 diff --git a/hoymiles_wifi/dtu.py b/hoymiles_wifi/dtu.py index 97206e3..812263d 100644 --- a/hoymiles_wifi/dtu.py +++ b/hoymiles_wifi/dtu.py @@ -32,6 +32,7 @@ from hoymiles_wifi.const import ( DEV_DTU, DTU_FIRMWARE_URL_00_01_11, DTU_PORT, + OFFSET, ) from hoymiles_wifi.protobuf import ( AppGetHistPower_pb2, @@ -88,15 +89,6 @@ class DTU: self.state = new_state logger.debug(f"DTU is {new_state}") - async def async_get_real_data_hms(self) -> RealDataHMS_pb2.HMSStateResponse | None: - """Get real data HMS.""" - - request = RealDataHMS_pb2.HMSRealDataResDTO() - command = CMD_REAL_DATA_RES_DTO - return await self.async_send_request( - command, request, RealDataHMS_pb2.HMSStateResponse - ) - async def async_get_real_data(self) -> RealData_pb2.RealDataResDTO | None: """Get real data.""" @@ -113,7 +105,7 @@ class DTU: request.time_ymd_hms = ( datetime.now().strftime("%Y-%m-%d %H:%M:%S").encode("utf-8") ) - request.offset = 28800 + request.offset = OFFSET request.time = int(time.time()) command = CMD_REAL_RES_DTO return await self.async_send_request( @@ -124,7 +116,7 @@ class DTU: """Get config.""" request = GetConfig_pb2.GetConfigResDTO() - request.offset = 28800 + request.offset = OFFSET request.time = int(time.time()) - 60 command = CMD_GET_CONFIG return await self.async_send_request( @@ -137,7 +129,7 @@ class DTU: """Get network info.""" request = NetworkInfo_pb2.NetworkInfoResDTO() - request.offset = 28800 + request.offset = OFFSET request.time = int(time.time()) command = CMD_NETWORK_INFO_RES return await self.async_send_request( @@ -152,7 +144,7 @@ class DTU: request.time_ymd_hms = ( datetime.now().strftime("%Y-%m-%d %H:%M:%S").encode("utf-8") ) - request.offset = 28800 + request.offset = OFFSET request.time = int(time.time()) command = CMD_APP_INFO_DATA_RES_DTO return await self.async_send_request( @@ -165,7 +157,7 @@ class DTU: """Get historical power.""" request = AppGetHistPower_pb2.AppGetHistPowerResDTO() - request.offset = 28800 + request.offset = OFFSET request.requested_time = int(time.time()) command = CMD_APP_GET_HIST_POWER_RES return await self.async_send_request( @@ -212,7 +204,7 @@ class DTU: request = initialize_set_config(get_config_req) request.time = int(time.time()) - request.offset = 28800 + request.offset = OFFSET request.app_page = 1 request.netmode_select = NetmodeSelect.WIFI request.wifi_ssid = ssid.encode("utf-8") @@ -290,7 +282,7 @@ class DTU: request.time_ymd_hms = ( datetime.now().strftime("%Y-%m-%d %H:%M:%S").encode("utf-8") ) - request.offset = 28800 + request.offset = OFFSET request.time = int(time.time()) command = CMD_APP_INFO_DATA_RES_DTO return await self.async_send_request( @@ -304,7 +296,7 @@ class DTU: request.time_ymd_hms = ( datetime.now().strftime("%Y-%m-%d %H:%M:%S").encode("utf-8") ) - request.offset = 28800 + request.offset = OFFSET request.time = int(time.time()) command = CMD_HB_RES_DTO @@ -364,6 +356,8 @@ class DTU: crc16_target, read_length = struct.unpack(">HH", buf[6:10]) + logger.debug(f"Read length: {read_length}") + if len(buf) != read_length: raise ValueError("Buffer is incomplete") diff --git a/hoymiles_wifi/hoymiles.py b/hoymiles_wifi/hoymiles.py index 8ebe122..41fa0d3 100644 --- a/hoymiles_wifi/hoymiles.py +++ b/hoymiles_wifi/hoymiles.py @@ -67,7 +67,7 @@ class DTUType(Enum): DTU_LITE = "DTU-Lite" DTU_PRO = "DTU-PRO" DTU_PRO_S = "DTU-PRO-S" - DTU_HMS_W = "DTU-HMS-W" + DTUBI = "DTUBI" DTU_W100_LITE_S = "DTU-W100/DTU-Lite-S" DTU_W_LITE = "DTU-WLite" @@ -94,25 +94,25 @@ type_mapping = { 0x10D6: DTUType.DTU_LITE, 0x10D7: DTUType.DTU_LITE, 0x4131: DTUType.DTU_LITE, - 0x1124: DTUType.DTU_HMS_W, - 0x1125: DTUType.DTU_HMS_W, - 0x1403: DTUType.DTU_HMS_W, - 0x1144: DTUType.DTU_HMS_W, - 0x1143: DTUType.DTU_HMS_W, - 0x1145: DTUType.DTU_HMS_W, - 0x1412: DTUType.DTU_HMS_W, - 0x1164: DTUType.DTU_HMS_W, - 0x1165: DTUType.DTU_HMS_W, - 0x1166: DTUType.DTU_HMS_W, - 0x1167: DTUType.DTU_HMS_W, - 0x1222: DTUType.DTU_HMS_W, - 0x1422: DTUType.DTU_HMS_W, - 0x1423: DTUType.DTU_HMS_W, - 0x1361: DTUType.DTU_HMS_W, - 0x1362: DTUType.DTU_HMS_W, - 0x1381: DTUType.DTU_HMS_W, - 0x1382: DTUType.DTU_HMS_W, - 0x4143: DTUType.DTU_HMS_W, + 0x1124: DTUType.DTUBI, + 0x1125: DTUType.DTUBI, + 0x1403: DTUType.DTUBI, + 0x1144: DTUType.DTUBI, + 0x1143: DTUType.DTUBI, + 0x1145: DTUType.DTUBI, + 0x1412: DTUType.DTUBI, + 0x1164: DTUType.DTUBI, + 0x1165: DTUType.DTUBI, + 0x1166: DTUType.DTUBI, + 0x1167: DTUType.DTUBI, + 0x1222: DTUType.DTUBI, + 0x1422: DTUType.DTUBI, + 0x1423: DTUType.DTUBI, + 0x1361: DTUType.DTUBI, + 0x1362: DTUType.DTUBI, + 0x1381: DTUType.DTUBI, + 0x1382: DTUType.DTUBI, + 0x4143: DTUType.DTUBI, } diff --git a/hoymiles_wifi/protobuf/RealDataHMS.proto b/hoymiles_wifi/protobuf/RealDataHMS.proto deleted file mode 100644 index e426cf0..0000000 --- a/hoymiles_wifi/protobuf/RealDataHMS.proto +++ /dev/null @@ -1,46 +0,0 @@ -syntax = "proto3"; - -message HMSRealDataResDTO { - string ymd_hms = 1; // YmdHms - int32 cp = 2; // PackageNow - int32 err_code = 3; // ErrCode - int32 offset = 4; // Offset - int32 time = 5; // Time -} - -message InverterState { - int64 inv_id = 1; - int32 port_id = 2; - int32 grid_voltage = 3; // [V], factor 0.1 - int32 grid_freq = 4; // [Hz], factor 0.1 - int32 pv_current_power = 5; // [W], factor 0.1 - int32 unknown1 = 7; - int32 unknown2 = 8; // power limit? [%], factor 0.1 - int32 temperature = 9; // [C], factor 0.1 - int32 unknown3 = 10; - int32 unknown4 = 12; - int32 bit_field = 20; // a guess -} - -message PortState { - int64 pv_sn = 1; // serial number - int32 pv_port = 2; // id of the port - int32 pv_vol = 3; // [V], factor 0.1 - int32 pv_cur = 4; // [A], factor 0.1 - int32 pv_power = 5; // [W], factor 0.1 - int32 pv_energy_total = 6; // [Wh] - int32 pv_daily_yield = 7; // [Wh] - int32 bitfield = 8; // bitfield is a guess -} - -message HMSStateResponse { - string dtu_sn = 1; // serial - int32 time = 2; // epoch - int32 device_nub = 3; - int32 pv_nub = 4; // repeats cp field from request - int32 package_nub = 5; - repeated InverterState inverter_state = 9; - repeated PortState port_state = 11; - int32 pv_current_power = 12; // [W], factor 0.1 - int32 pv_daily_yield = 13; // [Wh] -} \ No newline at end of file diff --git a/hoymiles_wifi/protobuf/RealDataHMS_pb2.py b/hoymiles_wifi/protobuf/RealDataHMS_pb2.py deleted file mode 100644 index ef0c0b5..0000000 --- a/hoymiles_wifi/protobuf/RealDataHMS_pb2.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: RealDataHMS.proto -# Protobuf Python Version: 4.25.0 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11RealDataHMS.proto\"`\n\x11HMSRealDataResDTO\x12\x0f\n\x07ymd_hms\x18\x01 \x01(\t\x12\n\n\x02\x63p\x18\x02 \x01(\x05\x12\x10\n\x08\x65rr_code\x18\x03 \x01(\x05\x12\x0e\n\x06offset\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\x05 \x01(\x05\"\xe3\x01\n\rInverterState\x12\x0e\n\x06inv_id\x18\x01 \x01(\x03\x12\x0f\n\x07port_id\x18\x02 \x01(\x05\x12\x14\n\x0cgrid_voltage\x18\x03 \x01(\x05\x12\x11\n\tgrid_freq\x18\x04 \x01(\x05\x12\x18\n\x10pv_current_power\x18\x05 \x01(\x05\x12\x10\n\x08unknown1\x18\x07 \x01(\x05\x12\x10\n\x08unknown2\x18\x08 \x01(\x05\x12\x13\n\x0btemperature\x18\t \x01(\x05\x12\x10\n\x08unknown3\x18\n \x01(\x05\x12\x10\n\x08unknown4\x18\x0c \x01(\x05\x12\x11\n\tbit_field\x18\x14 \x01(\x05\"\xa0\x01\n\tPortState\x12\r\n\x05pv_sn\x18\x01 \x01(\x03\x12\x0f\n\x07pv_port\x18\x02 \x01(\x05\x12\x0e\n\x06pv_vol\x18\x03 \x01(\x05\x12\x0e\n\x06pv_cur\x18\x04 \x01(\x05\x12\x10\n\x08pv_power\x18\x05 \x01(\x05\x12\x17\n\x0fpv_energy_total\x18\x06 \x01(\x05\x12\x16\n\x0epv_daily_yield\x18\x07 \x01(\x05\x12\x10\n\x08\x62itfield\x18\x08 \x01(\x05\"\xe3\x01\n\x10HMSStateResponse\x12\x0e\n\x06\x64tu_sn\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x05\x12\x12\n\ndevice_nub\x18\x03 \x01(\x05\x12\x0e\n\x06pv_nub\x18\x04 \x01(\x05\x12\x13\n\x0bpackage_nub\x18\x05 \x01(\x05\x12&\n\x0einverter_state\x18\t \x03(\x0b\x32\x0e.InverterState\x12\x1e\n\nport_state\x18\x0b \x03(\x0b\x32\n.PortState\x12\x18\n\x10pv_current_power\x18\x0c \x01(\x05\x12\x16\n\x0epv_daily_yield\x18\r \x01(\x05\x62\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'RealDataHMS_pb2', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - DESCRIPTOR._options = None - _globals['_HMSREALDATARESDTO']._serialized_start=21 - _globals['_HMSREALDATARESDTO']._serialized_end=117 - _globals['_INVERTERSTATE']._serialized_start=120 - _globals['_INVERTERSTATE']._serialized_end=347 - _globals['_PORTSTATE']._serialized_start=350 - _globals['_PORTSTATE']._serialized_end=510 - _globals['_HMSSTATERESPONSE']._serialized_start=513 - _globals['_HMSSTATERESPONSE']._serialized_end=740 -# @@protoc_insertion_point(module_scope) diff --git a/hoymiles_wifi/protobuf/RealDataNew.proto b/hoymiles_wifi/protobuf/RealDataNew.proto index 08b062c..69523e1 100755 --- a/hoymiles_wifi/protobuf/RealDataNew.proto +++ b/hoymiles_wifi/protobuf/RealDataNew.proto @@ -1,123 +1,123 @@ syntax = "proto3"; message MeterMO { - int32 device_type = 1; // Device type identifier - int64 serial_number = 2; // Serial number of the meter - int32 phase_total_power = 3; // Total power across all phases (Watts) - int32 phase_A_power = 4; // Power in phase A (Watts) - int32 phase_B_power = 5; // Power in phase B (Watts) - int32 phase_C_power = 6; // Power in phase C (Watts) - int32 power_factor_total = 7; // Total power factor - int32 energy_total_power = 8; // Total energy generated (Watt-hours) - int32 energy_phase_A = 9; // Energy generated in phase A (Watt-hours) - int32 energy_phase_B = 10; // Energy generated in phase B (Watt-hours) - int32 energy_phase_C = 11; // Energy generated in phase C (Watt-hours) - int32 energy_total_consumed = 12; // Total energy consumed (Watt-hours) - int32 energy_phase_A_consumed = 13; // Energy consumed in phase A (Watt-hours) - int32 energy_phase_B_consumed = 14; // Energy consumed in phase B (Watt-hours) - int32 energy_phase_C_consumed = 15; // Energy consumed in phase C (Watt-hours) - int32 fault_code = 16; // Fault code indicator - int32 voltage_phase_A = 17; // Voltage in phase A (Volts) - int32 voltage_phase_B = 18; // Voltage in phase B (Volts) - int32 voltage_phase_C = 19; // Voltage in phase C (Volts) - int32 current_phase_A = 20; // Current in phase A (Amperes) - int32 current_phase_B = 21; // Current in phase B (Amperes) - int32 current_phase_C = 22; // Current in phase C (Amperes) - int32 power_factor_phase_A = 23; // Power factor in phase A - int32 power_factor_phase_B = 24; // Power factor in phase B - int32 power_factor_phase_C = 25; // Power factor in phase C + int32 device_type = 1; // Device type identifier + int64 serial_number = 2; // Serial number of the meter + int32 phase_total_power = 3; // Total power across all phases (Watts) + int32 phase_A_power = 4; // Power in phase A (Watts) + int32 phase_B_power = 5; // Power in phase B (Watts) + int32 phase_C_power = 6; // Power in phase C (Watts) + int32 power_factor_total = 7; // Total power factor + int32 energy_total_power = 8; // Total energy generated (Watt-hours) + int32 energy_phase_A = 9; // Energy generated in phase A (Watt-hours) + int32 energy_phase_B = 10; // Energy generated in phase B (Watt-hours) + int32 energy_phase_C = 11; // Energy generated in phase C (Watt-hours) + int32 energy_total_consumed = 12; // Total energy consumed (Watt-hours) + int32 energy_phase_A_consumed = 13; // Energy consumed in phase A (Watt-hours) + int32 energy_phase_B_consumed = 14; // Energy consumed in phase B (Watt-hours) + int32 energy_phase_C_consumed = 15; // Energy consumed in phase C (Watt-hours) + int32 fault_code = 16; // Fault code indicator + int32 voltage_phase_A = 17; // Voltage in phase A (Volts) + int32 voltage_phase_B = 18; // Voltage in phase B (Volts) + int32 voltage_phase_C = 19; // Voltage in phase C (Volts) + int32 current_phase_A = 20; // Current in phase A (Amperes) + int32 current_phase_B = 21; // Current in phase B (Amperes) + int32 current_phase_C = 22; // Current in phase C (Amperes) + int32 power_factor_phase_A = 23; // Power factor in phase A + int32 power_factor_phase_B = 24; // Power factor in phase B + int32 power_factor_phase_C = 25; // Power factor in phase C } message RpMO { - int64 serial_number = 1; // Serial number of the device - int32 signature = 2; // Signature value - int32 channel = 3; // Channel number - int32 pv_number = 4; // Photovoltaic (PV) number - int32 link_status = 5; // Link status indicator + int64 serial_number = 1; // Serial number of the device + int32 signature = 2; // Signature value + int32 channel = 3; // Channel number + int32 pv_number = 4; // Photovoltaic (PV) number + int32 link_status = 5; // Link status indicator } message RSDMO { - int64 serial_number = 1; // Serial number of the device - int32 firmware_version = 2; // Firmware version - int32 voltage = 3; // Voltage value - int32 power = 4; // Power value - int32 temperature = 5; // Temperature value - int32 warning_number = 6; // Warning number - int32 crc_checksum = 7; // CRC checksum - int32 link_status = 8; // Link status indicator + int64 serial_number = 1; // Serial number of the device + int32 firmware_version = 2; // Firmware version + int32 voltage = 3; // Voltage value + int32 power = 4; // Power value + int32 temperature = 5; // Temperature value + int32 warning_number = 6; // Warning number + int32 crc_checksum = 7; // CRC checksum + int32 link_status = 8; // Link status indicator } message SGSMO { - int64 serial_number = 1; // Serial number of the device - int32 firmware_version = 2; // Firmware version - int32 voltage = 3; // Grid voltage (Volts) - int32 frequency = 4; // Grid frequency (Hertz) - int32 active_power = 5; // Active power (Watts) - int32 reactive_power = 6; // Reactive power (VAR) - int32 current = 7; // Current (Amperes) - int32 power_factor = 8; // Power factor - int32 temperature = 9; // Temperature value - int32 warning_number = 10; // Warning number - int32 crc_checksum = 11; // CRC checksum - int32 link_status = 12; // Link status indicator - int32 power_limit = 13; // Power limit (Watts) - int32 modulation_index_signal = 20; // Modulation index signal + int64 serial_number = 1; // Serial number of the device + int32 firmware_version = 2; // Firmware version + int32 voltage = 3; // Grid voltage (Volts) + int32 frequency = 4; // Grid frequency (Hertz) + int32 active_power = 5; // Active power (Watts) + int32 reactive_power = 6; // Reactive power (VAR) + int32 current = 7; // Current (Amperes) + int32 power_factor = 8; // Power factor + int32 temperature = 9; // Temperature value + int32 warning_number = 10; // Warning number + int32 crc_checksum = 11; // CRC checksum + int32 link_status = 12; // Link status indicator + int32 power_limit = 13; // Power limit (Watts) + int32 modulation_index_signal = 20; // Modulation index signal } message TGSMO { - int64 serial_number = 1; // Serial number of the device - int32 firmware_version = 2; // Firmware version - int32 voltage_phase_A = 3; // Voltage in phase A (Volts) - int32 voltage_phase_B = 4; // Voltage in phase B (Volts) - int32 voltage_phase_C = 5; // Voltage in phase C (Volts) - int32 voltage_line_AB = 6; // Voltage between lines A and B (Volts) - int32 voltage_line_BC = 7; // Voltage between lines B and C (Volts) - int32 voltage_line_CA = 8; // Voltage between lines C and A (Volts) - int32 frequency = 9; // Frequency (Hertz) - int32 active_power = 10; // Active power (Watts) - int32 reactive_power = 11; // Reactive power (VAR) - int32 current_phase_A = 12; // Current in phase A (Amperes) - int32 current_phase_B = 13; // Current in phase B (Amperes) - int32 current_phase_C = 14; // Current in phase C (Amperes) - int32 power_factor = 15; // Power factor - int32 temperature = 16; // Temperature value - int32 warning_number = 17; // Warning number - int32 crc_checksum = 18; // CRC checksum - int32 link_status = 19; // Link status indicator - int32 modulation_index_signal = 20; // Modulation index signal + int64 serial_number = 1; // Serial number of the device + int32 firmware_version = 2; // Firmware version + int32 voltage_phase_A = 3; // Voltage in phase A (Volts) + int32 voltage_phase_B = 4; // Voltage in phase B (Volts) + int32 voltage_phase_C = 5; // Voltage in phase C (Volts) + int32 voltage_line_AB = 6; // Voltage between lines A and B (Volts) + int32 voltage_line_BC = 7; // Voltage between lines B and C (Volts) + int32 voltage_line_CA = 8; // Voltage between lines C and A (Volts) + int32 frequency = 9; // Frequency (Hertz) + int32 active_power = 10; // Active power (Watts) + int32 reactive_power = 11; // Reactive power (VAR) + int32 current_phase_A = 12; // Current in phase A (Amperes) + int32 current_phase_B = 13; // Current in phase B (Amperes) + int32 current_phase_C = 14; // Current in phase C (Amperes) + int32 power_factor = 15; // Power factor + int32 temperature = 16; // Temperature value + int32 warning_number = 17; // Warning number + int32 crc_checksum = 18; // CRC checksum + int32 link_status = 19; // Link status indicator + int32 modulation_index_signal = 20; // Modulation index signal } message PvMO { - int64 serial_number = 1; // Serial number of the device - int32 port_number = 2; // Port number - int32 voltage = 3; // Voltage (Volts) - int32 current = 4; // Current (Amperes) - int32 power = 5; // Power (Watts) - int32 energy_total = 6; // Total energy generated (Watt-hours) - int32 energy_daily = 7; // Daily energy generated (Watt-hours) - int32 error_code = 8; // Error code indicator + int64 serial_number = 1; // Serial number of the device + int32 port_number = 2; // Port number + int32 voltage = 3; // Voltage (Volts) + int32 current = 4; // Current (Amperes) + int32 power = 5; // Power (Watts) + int32 energy_total = 6; // Total energy generated (Watt-hours) + int32 energy_daily = 7; // Daily energy generated (Watt-hours) + int32 error_code = 8; // Error code indicator } message RealDataNewReqDTO { - string device_serial_number = 1; // Serial number of the device - int32 timestamp = 2; // Timestamp of the data - int32 active_power = 3; // Active power (Watts) - int32 cumulative_power = 4; // Cumulative power (Watt-hours) - int32 firmware_version = 5; // Firmware version - repeated MeterMO meter_data = 6; // Meter data array - repeated RpMO rp_data = 7; // RpMO data array - repeated RSDMO rsd_data = 8; // RSDMO data array - repeated SGSMO sgs_data = 9; // SGSMO data array - repeated TGSMO tgs_data = 10; // TGSMO data array - repeated PvMO pv_data = 11; // PvMO data array - uint64 dtu_power = 12; // Power of the DTU (Watts) - uint64 dtu_daily_energy = 13; // Daily energy of the DTU (Watt-hours) + string device_serial_number = 1; // Serial number of the device + int32 timestamp = 2; // Timestamp of the data + int32 active_power = 3; // Active power (Watts) + int32 cp = 4; // Control parameter? + int32 firmware_version = 5; // Firmware version + repeated MeterMO meter_data = 6; // Meter data array + repeated RpMO rp_data = 7; // RpMO data array + repeated RSDMO rsd_data = 8; // RSDMO data array + repeated SGSMO sgs_data = 9; // SGSMO data array + repeated TGSMO tgs_data = 10; // TGSMO data array + repeated PvMO pv_data = 11; // PvMO data array + uint64 dtu_power = 12; // Power of the DTU (Watts) + uint64 dtu_daily_energy = 13; // Daily energy of the DTU (Watt-hours) } message RealDataNewResDTO { - string time_ymd_hms = 1; // Timestamp in the format YMD_HMS - int32 cumulative_power = 2; // Cumulative power (Watt-hours) - int32 error_code = 3; // Error code indicator - int32 offset = 4; // Offset value - int32 time = 5; // Timestamp value + string time_ymd_hms = 1; // Timestamp in the format YMD_HMS + int32 cp = 2; // Control parameter? + int32 error_code = 3; // Error code indicator + int32 offset = 4; // Offset value + int32 time = 5; // Timestamp value } diff --git a/hoymiles_wifi/protobuf/RealDataNew_pb2.py b/hoymiles_wifi/protobuf/RealDataNew_pb2.py index d26fa5a..b491c3e 100644 --- a/hoymiles_wifi/protobuf/RealDataNew_pb2.py +++ b/hoymiles_wifi/protobuf/RealDataNew_pb2.py @@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11RealDataNew.proto\"\x9b\x05\n\x07MeterMO\x12\x13\n\x0b\x64\x65vice_type\x18\x01 \x01(\x05\x12\x15\n\rserial_number\x18\x02 \x01(\x03\x12\x19\n\x11phase_total_power\x18\x03 \x01(\x05\x12\x15\n\rphase_A_power\x18\x04 \x01(\x05\x12\x15\n\rphase_B_power\x18\x05 \x01(\x05\x12\x15\n\rphase_C_power\x18\x06 \x01(\x05\x12\x1a\n\x12power_factor_total\x18\x07 \x01(\x05\x12\x1a\n\x12\x65nergy_total_power\x18\x08 \x01(\x05\x12\x16\n\x0e\x65nergy_phase_A\x18\t \x01(\x05\x12\x16\n\x0e\x65nergy_phase_B\x18\n \x01(\x05\x12\x16\n\x0e\x65nergy_phase_C\x18\x0b \x01(\x05\x12\x1d\n\x15\x65nergy_total_consumed\x18\x0c \x01(\x05\x12\x1f\n\x17\x65nergy_phase_A_consumed\x18\r \x01(\x05\x12\x1f\n\x17\x65nergy_phase_B_consumed\x18\x0e \x01(\x05\x12\x1f\n\x17\x65nergy_phase_C_consumed\x18\x0f \x01(\x05\x12\x12\n\nfault_code\x18\x10 \x01(\x05\x12\x17\n\x0fvoltage_phase_A\x18\x11 \x01(\x05\x12\x17\n\x0fvoltage_phase_B\x18\x12 \x01(\x05\x12\x17\n\x0fvoltage_phase_C\x18\x13 \x01(\x05\x12\x17\n\x0f\x63urrent_phase_A\x18\x14 \x01(\x05\x12\x17\n\x0f\x63urrent_phase_B\x18\x15 \x01(\x05\x12\x17\n\x0f\x63urrent_phase_C\x18\x16 \x01(\x05\x12\x1c\n\x14power_factor_phase_A\x18\x17 \x01(\x05\x12\x1c\n\x14power_factor_phase_B\x18\x18 \x01(\x05\x12\x1c\n\x14power_factor_phase_C\x18\x19 \x01(\x05\"i\n\x04RpMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x11\n\tsignature\x18\x02 \x01(\x05\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x05\x12\x11\n\tpv_number\x18\x04 \x01(\x05\x12\x13\n\x0blink_status\x18\x05 \x01(\x05\"\xb0\x01\n\x05RSDMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x18\n\x10\x66irmware_version\x18\x02 \x01(\x05\x12\x0f\n\x07voltage\x18\x03 \x01(\x05\x12\r\n\x05power\x18\x04 \x01(\x05\x12\x13\n\x0btemperature\x18\x05 \x01(\x05\x12\x16\n\x0ewarning_number\x18\x06 \x01(\x05\x12\x14\n\x0c\x63rc_checksum\x18\x07 \x01(\x05\x12\x13\n\x0blink_status\x18\x08 \x01(\x05\"\xbf\x02\n\x05SGSMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x18\n\x10\x66irmware_version\x18\x02 \x01(\x05\x12\x0f\n\x07voltage\x18\x03 \x01(\x05\x12\x11\n\tfrequency\x18\x04 \x01(\x05\x12\x14\n\x0c\x61\x63tive_power\x18\x05 \x01(\x05\x12\x16\n\x0ereactive_power\x18\x06 \x01(\x05\x12\x0f\n\x07\x63urrent\x18\x07 \x01(\x05\x12\x14\n\x0cpower_factor\x18\x08 \x01(\x05\x12\x13\n\x0btemperature\x18\t \x01(\x05\x12\x16\n\x0ewarning_number\x18\n \x01(\x05\x12\x14\n\x0c\x63rc_checksum\x18\x0b \x01(\x05\x12\x13\n\x0blink_status\x18\x0c \x01(\x05\x12\x13\n\x0bpower_limit\x18\r \x01(\x05\x12\x1f\n\x17modulation_index_signal\x18\x14 \x01(\x05\"\xe9\x03\n\x05TGSMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x18\n\x10\x66irmware_version\x18\x02 \x01(\x05\x12\x17\n\x0fvoltage_phase_A\x18\x03 \x01(\x05\x12\x17\n\x0fvoltage_phase_B\x18\x04 \x01(\x05\x12\x17\n\x0fvoltage_phase_C\x18\x05 \x01(\x05\x12\x17\n\x0fvoltage_line_AB\x18\x06 \x01(\x05\x12\x17\n\x0fvoltage_line_BC\x18\x07 \x01(\x05\x12\x17\n\x0fvoltage_line_CA\x18\x08 \x01(\x05\x12\x11\n\tfrequency\x18\t \x01(\x05\x12\x14\n\x0c\x61\x63tive_power\x18\n \x01(\x05\x12\x16\n\x0ereactive_power\x18\x0b \x01(\x05\x12\x17\n\x0f\x63urrent_phase_A\x18\x0c \x01(\x05\x12\x17\n\x0f\x63urrent_phase_B\x18\r \x01(\x05\x12\x17\n\x0f\x63urrent_phase_C\x18\x0e \x01(\x05\x12\x14\n\x0cpower_factor\x18\x0f \x01(\x05\x12\x13\n\x0btemperature\x18\x10 \x01(\x05\x12\x16\n\x0ewarning_number\x18\x11 \x01(\x05\x12\x14\n\x0c\x63rc_checksum\x18\x12 \x01(\x05\x12\x13\n\x0blink_status\x18\x13 \x01(\x05\x12\x1f\n\x17modulation_index_signal\x18\x14 \x01(\x05\"\xa3\x01\n\x04PvMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x13\n\x0bport_number\x18\x02 \x01(\x05\x12\x0f\n\x07voltage\x18\x03 \x01(\x05\x12\x0f\n\x07\x63urrent\x18\x04 \x01(\x05\x12\r\n\x05power\x18\x05 \x01(\x05\x12\x14\n\x0c\x65nergy_total\x18\x06 \x01(\x05\x12\x14\n\x0c\x65nergy_daily\x18\x07 \x01(\x05\x12\x12\n\nerror_code\x18\x08 \x01(\x05\"\xd7\x02\n\x11RealDataNewReqDTO\x12\x1c\n\x14\x64\x65vice_serial_number\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x05\x12\x14\n\x0c\x61\x63tive_power\x18\x03 \x01(\x05\x12\x18\n\x10\x63umulative_power\x18\x04 \x01(\x05\x12\x18\n\x10\x66irmware_version\x18\x05 \x01(\x05\x12\x1c\n\nmeter_data\x18\x06 \x03(\x0b\x32\x08.MeterMO\x12\x16\n\x07rp_data\x18\x07 \x03(\x0b\x32\x05.RpMO\x12\x18\n\x08rsd_data\x18\x08 \x03(\x0b\x32\x06.RSDMO\x12\x18\n\x08sgs_data\x18\t \x03(\x0b\x32\x06.SGSMO\x12\x18\n\x08tgs_data\x18\n \x03(\x0b\x32\x06.TGSMO\x12\x16\n\x07pv_data\x18\x0b \x03(\x0b\x32\x05.PvMO\x12\x11\n\tdtu_power\x18\x0c \x01(\x04\x12\x18\n\x10\x64tu_daily_energy\x18\r \x01(\x04\"u\n\x11RealDataNewResDTO\x12\x14\n\x0ctime_ymd_hms\x18\x01 \x01(\t\x12\x18\n\x10\x63umulative_power\x18\x02 \x01(\x05\x12\x12\n\nerror_code\x18\x03 \x01(\x05\x12\x0e\n\x06offset\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\x05 \x01(\x05\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11RealDataNew.proto\"\x9b\x05\n\x07MeterMO\x12\x13\n\x0b\x64\x65vice_type\x18\x01 \x01(\x05\x12\x15\n\rserial_number\x18\x02 \x01(\x03\x12\x19\n\x11phase_total_power\x18\x03 \x01(\x05\x12\x15\n\rphase_A_power\x18\x04 \x01(\x05\x12\x15\n\rphase_B_power\x18\x05 \x01(\x05\x12\x15\n\rphase_C_power\x18\x06 \x01(\x05\x12\x1a\n\x12power_factor_total\x18\x07 \x01(\x05\x12\x1a\n\x12\x65nergy_total_power\x18\x08 \x01(\x05\x12\x16\n\x0e\x65nergy_phase_A\x18\t \x01(\x05\x12\x16\n\x0e\x65nergy_phase_B\x18\n \x01(\x05\x12\x16\n\x0e\x65nergy_phase_C\x18\x0b \x01(\x05\x12\x1d\n\x15\x65nergy_total_consumed\x18\x0c \x01(\x05\x12\x1f\n\x17\x65nergy_phase_A_consumed\x18\r \x01(\x05\x12\x1f\n\x17\x65nergy_phase_B_consumed\x18\x0e \x01(\x05\x12\x1f\n\x17\x65nergy_phase_C_consumed\x18\x0f \x01(\x05\x12\x12\n\nfault_code\x18\x10 \x01(\x05\x12\x17\n\x0fvoltage_phase_A\x18\x11 \x01(\x05\x12\x17\n\x0fvoltage_phase_B\x18\x12 \x01(\x05\x12\x17\n\x0fvoltage_phase_C\x18\x13 \x01(\x05\x12\x17\n\x0f\x63urrent_phase_A\x18\x14 \x01(\x05\x12\x17\n\x0f\x63urrent_phase_B\x18\x15 \x01(\x05\x12\x17\n\x0f\x63urrent_phase_C\x18\x16 \x01(\x05\x12\x1c\n\x14power_factor_phase_A\x18\x17 \x01(\x05\x12\x1c\n\x14power_factor_phase_B\x18\x18 \x01(\x05\x12\x1c\n\x14power_factor_phase_C\x18\x19 \x01(\x05\"i\n\x04RpMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x11\n\tsignature\x18\x02 \x01(\x05\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x05\x12\x11\n\tpv_number\x18\x04 \x01(\x05\x12\x13\n\x0blink_status\x18\x05 \x01(\x05\"\xb0\x01\n\x05RSDMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x18\n\x10\x66irmware_version\x18\x02 \x01(\x05\x12\x0f\n\x07voltage\x18\x03 \x01(\x05\x12\r\n\x05power\x18\x04 \x01(\x05\x12\x13\n\x0btemperature\x18\x05 \x01(\x05\x12\x16\n\x0ewarning_number\x18\x06 \x01(\x05\x12\x14\n\x0c\x63rc_checksum\x18\x07 \x01(\x05\x12\x13\n\x0blink_status\x18\x08 \x01(\x05\"\xbf\x02\n\x05SGSMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x18\n\x10\x66irmware_version\x18\x02 \x01(\x05\x12\x0f\n\x07voltage\x18\x03 \x01(\x05\x12\x11\n\tfrequency\x18\x04 \x01(\x05\x12\x14\n\x0c\x61\x63tive_power\x18\x05 \x01(\x05\x12\x16\n\x0ereactive_power\x18\x06 \x01(\x05\x12\x0f\n\x07\x63urrent\x18\x07 \x01(\x05\x12\x14\n\x0cpower_factor\x18\x08 \x01(\x05\x12\x13\n\x0btemperature\x18\t \x01(\x05\x12\x16\n\x0ewarning_number\x18\n \x01(\x05\x12\x14\n\x0c\x63rc_checksum\x18\x0b \x01(\x05\x12\x13\n\x0blink_status\x18\x0c \x01(\x05\x12\x13\n\x0bpower_limit\x18\r \x01(\x05\x12\x1f\n\x17modulation_index_signal\x18\x14 \x01(\x05\"\xe9\x03\n\x05TGSMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x18\n\x10\x66irmware_version\x18\x02 \x01(\x05\x12\x17\n\x0fvoltage_phase_A\x18\x03 \x01(\x05\x12\x17\n\x0fvoltage_phase_B\x18\x04 \x01(\x05\x12\x17\n\x0fvoltage_phase_C\x18\x05 \x01(\x05\x12\x17\n\x0fvoltage_line_AB\x18\x06 \x01(\x05\x12\x17\n\x0fvoltage_line_BC\x18\x07 \x01(\x05\x12\x17\n\x0fvoltage_line_CA\x18\x08 \x01(\x05\x12\x11\n\tfrequency\x18\t \x01(\x05\x12\x14\n\x0c\x61\x63tive_power\x18\n \x01(\x05\x12\x16\n\x0ereactive_power\x18\x0b \x01(\x05\x12\x17\n\x0f\x63urrent_phase_A\x18\x0c \x01(\x05\x12\x17\n\x0f\x63urrent_phase_B\x18\r \x01(\x05\x12\x17\n\x0f\x63urrent_phase_C\x18\x0e \x01(\x05\x12\x14\n\x0cpower_factor\x18\x0f \x01(\x05\x12\x13\n\x0btemperature\x18\x10 \x01(\x05\x12\x16\n\x0ewarning_number\x18\x11 \x01(\x05\x12\x14\n\x0c\x63rc_checksum\x18\x12 \x01(\x05\x12\x13\n\x0blink_status\x18\x13 \x01(\x05\x12\x1f\n\x17modulation_index_signal\x18\x14 \x01(\x05\"\xa3\x01\n\x04PvMO\x12\x15\n\rserial_number\x18\x01 \x01(\x03\x12\x13\n\x0bport_number\x18\x02 \x01(\x05\x12\x0f\n\x07voltage\x18\x03 \x01(\x05\x12\x0f\n\x07\x63urrent\x18\x04 \x01(\x05\x12\r\n\x05power\x18\x05 \x01(\x05\x12\x14\n\x0c\x65nergy_total\x18\x06 \x01(\x05\x12\x14\n\x0c\x65nergy_daily\x18\x07 \x01(\x05\x12\x12\n\nerror_code\x18\x08 \x01(\x05\"\xc9\x02\n\x11RealDataNewReqDTO\x12\x1c\n\x14\x64\x65vice_serial_number\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\x05\x12\x14\n\x0c\x61\x63tive_power\x18\x03 \x01(\x05\x12\n\n\x02\x63p\x18\x04 \x01(\x05\x12\x18\n\x10\x66irmware_version\x18\x05 \x01(\x05\x12\x1c\n\nmeter_data\x18\x06 \x03(\x0b\x32\x08.MeterMO\x12\x16\n\x07rp_data\x18\x07 \x03(\x0b\x32\x05.RpMO\x12\x18\n\x08rsd_data\x18\x08 \x03(\x0b\x32\x06.RSDMO\x12\x18\n\x08sgs_data\x18\t \x03(\x0b\x32\x06.SGSMO\x12\x18\n\x08tgs_data\x18\n \x03(\x0b\x32\x06.TGSMO\x12\x16\n\x07pv_data\x18\x0b \x03(\x0b\x32\x05.PvMO\x12\x11\n\tdtu_power\x18\x0c \x01(\x04\x12\x18\n\x10\x64tu_daily_energy\x18\r \x01(\x04\"g\n\x11RealDataNewResDTO\x12\x14\n\x0ctime_ymd_hms\x18\x01 \x01(\t\x12\n\n\x02\x63p\x18\x02 \x01(\x05\x12\x12\n\nerror_code\x18\x03 \x01(\x05\x12\x0e\n\x06offset\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\x05 \x01(\x05\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -34,7 +34,7 @@ if _descriptor._USE_C_DESCRIPTORS == False: _globals['_PVMO']._serialized_start=1792 _globals['_PVMO']._serialized_end=1955 _globals['_REALDATANEWREQDTO']._serialized_start=1958 - _globals['_REALDATANEWREQDTO']._serialized_end=2301 - _globals['_REALDATANEWRESDTO']._serialized_start=2303 - _globals['_REALDATANEWRESDTO']._serialized_end=2420 + _globals['_REALDATANEWREQDTO']._serialized_end=2287 + _globals['_REALDATANEWRESDTO']._serialized_start=2289 + _globals['_REALDATANEWRESDTO']._serialized_end=2392 # @@protoc_insertion_point(module_scope) diff --git a/hoymiles_wifi/protobuf/compile_proto.sh b/hoymiles_wifi/protobuf/compile_proto.sh index 73932c0..fc92142 100755 --- a/hoymiles_wifi/protobuf/compile_proto.sh +++ b/hoymiles_wifi/protobuf/compile_proto.sh @@ -2,6 +2,6 @@ for file in $(ls *.proto) do - protoc --pyi_out=. $file + #protoc --pyi_out=. $file protoc --python_out=. $file done