diff --git a/classes/protocol_settings.py b/classes/protocol_settings.py index f95eda3..d0fea16 100644 --- a/classes/protocol_settings.py +++ b/classes/protocol_settings.py @@ -30,6 +30,8 @@ class Data_Type(Enum): ASCII = 84 ''' 2 characters ''' + HEX = 85 + ''' HEXADECIMAL STRING ''' _1BIT = 201 _2BIT = 202 @@ -516,7 +518,7 @@ def process_row(row): value_max = strtoint(val_match.group('end')) matched = True - if data_type == Data_Type.ASCII: + if data_type == Data_Type.ASCII: #might need to apply too hex values as well? or min-max works for hex? #value_regex val_match = ascii_value_regex.search(row['values']) if val_match: @@ -885,6 +887,8 @@ def process_register_bytes(self, registry : dict[int,bytes], entry : registry_ma bit_mask = (1 << bit_size) - 1 # Create a mask for extracting X bits bit_index = entry.register_bit value = (register >> bit_index) & bit_mask + elif entry.data_type == Data_Type.HEX: + value = register.hex() #convert bytes to hex elif entry.data_type == Data_Type.ASCII: try: value = register.decode("utf-8") #convert bytes to ascii @@ -999,6 +1003,9 @@ def process_register_ushort(self, registry : dict[int, int], entry : registry_ma bit_mask = (1 << bit_size) - 1 # Create a mask for extracting X bits bit_index = entry.register_bit value = (registry[entry.register] >> bit_index) & bit_mask + elif entry.data_type == Data_Type.HEX: + value = registry[entry.register].to_bytes((16 + 7) // 8, byteorder=self.byteorder) #convert to ushort to bytes + value = value.hex() #convert bytes to hex elif entry.data_type == Data_Type.ASCII: value = registry[entry.register].to_bytes((16 + 7) // 8, byteorder=self.byteorder) #convert to ushort to bytes try: diff --git a/classes/transports/canbus.py b/classes/transports/canbus.py index 767b93d..a212070 100644 --- a/classes/transports/canbus.py +++ b/classes/transports/canbus.py @@ -62,7 +62,7 @@ def __init__(self, settings : 'SectionProxy', protocolSettings : 'protocol_setti self.linux = platform.system() != 'Windows' - self.port = settings.get(["port", "channel"], "").lower() + self.port = settings.get(["port", "channel"], "") if not self.port: raise ValueError("Port/Channel is not set") @@ -77,6 +77,7 @@ def __init__(self, settings : 'SectionProxy', protocolSettings : 'protocol_setti #setup / configure socketcan if self.interface == "socketcan": self.setup_socketcan() + self.port = self.port.lower() self.bus = can.interface.Bus(interface=self.interface, channel=self.port, bitrate=self.baudrate) self.reader = can.AsyncBufferedReader() diff --git a/classes/transports/modbus_base.py b/classes/transports/modbus_base.py index 0a1d4c9..c849b81 100644 --- a/classes/transports/modbus_base.py +++ b/classes/transports/modbus_base.py @@ -12,9 +12,20 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: from configparser import SectionProxy + try: + from pymodbus.client.sync import BaseModbusClient + except ImportError: + from pymodbus.client import BaseModbusClient + class modbus_base(transport_base): + + #this is specifically static + clients : dict[str, 'BaseModbusClient'] = {} + ''' str is identifier, dict of clients when multiple transports use the same ports ''' + + #non-static here for reference, type hinting, python bs ect... modbus_delay_increament : float = 0.05 ''' delay adjustment every error. todo: add a setting for this ''' @@ -491,6 +502,7 @@ def read_modbus_registers(self, ranges : list[tuple] = None, start : int = 0, en if retry < 0: retry = 0 + #combine registers into "registry" i = -1 while(i := i + 1 ) < range[1]: diff --git a/classes/transports/modbus_rtu.py b/classes/transports/modbus_rtu.py index 056551e..d79b808 100644 --- a/classes/transports/modbus_rtu.py +++ b/classes/transports/modbus_rtu.py @@ -9,6 +9,7 @@ except ImportError: from pymodbus.client import ModbusSerialClient + from .modbus_base import modbus_base from configparser import SectionProxy from defs.common import find_usb_serial_port, get_usb_serial_port_info, strtoint @@ -54,16 +55,26 @@ def __init__(self, settings : SectionProxy, protocolSettings : protocol_settings # Get the signature of the __init__ method init_signature = inspect.signature(ModbusSerialClient.__init__) + client_str = self.port+"("+str(self.baudrate)+")" + + if client_str in modbus_base.clients: + self.client = modbus_base.clients[client_str] + return + if 'method' in init_signature.parameters: self.client = ModbusSerialClient(method='rtu', port=self.port, baudrate=int(self.baudrate), stopbits=1, parity='N', bytesize=8, timeout=2 ) else: - self.client = ModbusSerialClient(port=self.port, + self.client = ModbusSerialClient( + port=self.port, baudrate=int(self.baudrate), stopbits=1, parity='N', bytesize=8, timeout=2 ) + + #add to clients + modbus_base.clients[client_str] = self.client def read_registers(self, start, count=1, registry_type : Registry_Type = Registry_Type.INPUT, **kwargs): @@ -75,9 +86,9 @@ def read_registers(self, start, count=1, registry_type : Registry_Type = Registr kwargs['slave'] = kwargs.pop('unit') if registry_type == Registry_Type.INPUT: - return self.client.read_input_registers(start, count, **kwargs) + return self.client.read_input_registers(address=start, count=count, **kwargs) elif registry_type == Registry_Type.HOLDING: - return self.client.read_holding_registers(start, count, **kwargs) + return self.client.read_holding_registers(address=start, count=count, **kwargs) def write_register(self, register : int, value : int, **kwargs): if not self.write_enabled: diff --git a/classes/transports/modbus_tcp.py b/classes/transports/modbus_tcp.py index e2dd8b2..bdf62d9 100644 --- a/classes/transports/modbus_tcp.py +++ b/classes/transports/modbus_tcp.py @@ -1,14 +1,23 @@ import logging +import inspect + from classes.protocol_settings import Registry_Type, protocol_settings -from pymodbus.client.sync import ModbusTcpClient -from .transport_base import transport_base + +#compatability +try: + from pymodbus.client.sync import ModbusTcpClient +except ImportError: + from pymodbus.client import ModbusTcpClient + +from .modbus_base import modbus_base from configparser import SectionProxy -class modbus_tcp(transport_base): +class modbus_tcp(modbus_base): port : str = 502 host : str = "" client : ModbusTcpClient + pymodbus_slave_arg = 'unit' def __init__(self, settings : SectionProxy, protocolSettings : protocol_settings = None): #logger = logging.getLogger(__name__) @@ -20,12 +29,34 @@ def __init__(self, settings : SectionProxy, protocolSettings : protocol_settings self.port = settings.getint("port", self.port) + # pymodbus compatability; unit was renamed to address + if 'slave' in inspect.signature(ModbusTcpClient.read_holding_registers).parameters: + self.pymodbus_slave_arg = 'slave' + + client_str = self.host+"("+str(self.port)+")" + #check if client is already initialied + if client_str in modbus_base.clients: + self.client = modbus_base.clients[client_str] + return + self.client = ModbusTcpClient(host=self.host, port=self.port, timeout=7, retries=3) + + #add to clients + modbus_base.clients[client_str] = self.client + super().__init__(settings, protocolSettings=protocolSettings) def read_registers(self, start, count=1, registry_type : Registry_Type = Registry_Type.INPUT, **kwargs): + + if 'unit' not in kwargs: + kwargs = {'unit': 1, **kwargs} + + #compatability + if self.pymodbus_slave_arg != 'unit': + kwargs['slave'] = kwargs.pop('unit') + if registry_type == Registry_Type.INPUT: - return self.client.read_input_registers(start, count, **kwargs) + return self.client.read_input_registers(start, count, **kwargs ) elif registry_type == Registry_Type.HOLDING: return self.client.read_holding_registers(start, count, **kwargs) diff --git a/classes/transports/mqtt.py b/classes/transports/mqtt.py index 2e9dbdd..5600aae 100644 --- a/classes/transports/mqtt.py +++ b/classes/transports/mqtt.py @@ -110,7 +110,7 @@ def connect(self): def exit_handler(self): '''on exit handler''' self._log.warning("MQTT Exiting...") - self.client.publish( self.base_topic + "/availability","offline") + self.client.publish( self.base_topic + '/' + self.device_identifier + "/availability","offline") return def mqtt_reconnect(self): @@ -163,7 +163,7 @@ def write_data(self, data : dict[str, str], from_transport : transport_base): self._log.info(f"write data from [{from_transport.transport_name}] to mqtt transport") self._log.info(data) #have to send this every loop, because mqtt doesnt disconnect when HA restarts. HA bug. - info = self.client.publish(self.base_topic + "/availability","online", qos=0,retain=True) + info = self.client.publish(self.base_topic + '/' + from_transport.device_identifier + "/availability","online", qos=0,retain=True) if info.rc == MQTT_ERR_NO_CONN: self.connected = False @@ -196,7 +196,7 @@ def init_bridge(self, from_transport : transport_base): for entry in from_transport.protocolSettings.get_registry_map(Registry_Type.HOLDING): if entry.write_mode == WriteMode.WRITE or entry.write_mode == WriteMode.WRITEONLY: #__write_topics - topic : str = self.base_topic + "/write/" + entry.variable_name.lower().replace(' ', '_') + topic : str = self.base_topic + '/'+ from_transport.device_identifier + "/write/" + entry.variable_name.lower().replace(' ', '_') self.__write_topics[topic] = entry self.client.subscribe(topic) @@ -207,7 +207,7 @@ def mqtt_discovery(self, from_transport : transport_base): self._log.info("Publishing HA Discovery Topics...") disc_payload = {} - disc_payload['availability_topic'] = self.base_topic + "/availability" + disc_payload['availability_topic'] = self.base_topic + '/' + from_transport.device_identifier + "/availability" device = {} device['manufacturer'] = from_transport.device_manufacturer @@ -247,7 +247,7 @@ def mqtt_discovery(self, from_transport : transport_base): #device['sw_version'] = bms_version disc_payload = {} - disc_payload['availability_topic'] = self.base_topic + "/availability" + disc_payload['availability_topic'] = self.base_topic + '/' + from_transport.device_identifier + "/availability" disc_payload['device'] = device disc_payload['name'] = clean_name disc_payload['unique_id'] = "hotnoob_" + from_transport.device_serial_number + "_"+clean_name diff --git a/defs/common.py b/defs/common.py index a66e63b..8cedea5 100644 --- a/defs/common.py +++ b/defs/common.py @@ -20,7 +20,7 @@ def strtoint(val : str) -> int: if isinstance(val, int): #is already int. return val - val = val.lower() + val = val.lower().strip() if val and val[0] == 'x': val = val[1:] diff --git a/documentation/3rdparty/protocols/growatt-bms-rs485-protocal-1xsxxp-ess-v202-1-english-translated.pdf b/documentation/3rdparty/protocols/growatt-bms-rs485-protocal-1xsxxp-ess-v202-1-english-translated.pdf new file mode 100644 index 0000000..b162d7e Binary files /dev/null and b/documentation/3rdparty/protocols/growatt-bms-rs485-protocal-1xsxxp-ess-v202-1-english-translated.pdf differ diff --git a/documentation/3rdparty/protocols/growatt-bms-rs485-protocal-1xsxxp-ess-v202-1.pdf b/documentation/3rdparty/protocols/growatt-bms-rs485-protocal-1xsxxp-ess-v202-1.pdf new file mode 100644 index 0000000..8b241a1 Binary files /dev/null and b/documentation/3rdparty/protocols/growatt-bms-rs485-protocal-1xsxxp-ess-v202-1.pdf differ diff --git a/documentation/devices/EG4.md b/documentation/devices/EG4.md index de39be6..8ab3614 100644 --- a/documentation/devices/EG4.md +++ b/documentation/devices/EG4.md @@ -15,6 +15,16 @@ 3. Connect appropriate wires to USB RS485 Adapter +## Raspberry Pi Can Hat +If using a Raspberry Pi Can Hat, The expected pinout RS485 A/B configuration maybe be reversed. + +If you get the following error while using a Raspberry Pi Can Hat swap your A/B wires: + +``` +ERROR:.transport_base[transport.0]: +``` + + ## Configuration Follow configuration example for ModBus RTU to MQTT https://github.com/HotNoob/PythonProtocolGateway/wiki/Configuration-Examples#modbus-rtu-to-mqtt diff --git a/documentation/devices/Growatt.md b/documentation/devices/Growatt.md index 1b2d4f0..c90f716 100644 --- a/documentation/devices/Growatt.md +++ b/documentation/devices/Growatt.md @@ -5,6 +5,12 @@ 2. for models with a DB9 port a DB9 RS232 adapter is required. "Before use RS232 communication, you should make sure the follow PIN1 and PIN2 are OFF" 3. Connect cable to wifi dongle port; if a alternative usb port exists, try connecting to that one first. +Optional hardware: +ADUM3160 chipset / USB isolator. The growatt inverter's usb port has a power issue that can effect reliablilty; using an isolator will help mitigate this problem. +https://www.aliexpress.com/item/1005002959825296.html?spm=a2g0o.order_list.order_list_main.5.51c618021n8SGf + +For best long term reliability, use a rs485 adapter \w rj45 ethernet cable. + ## Configuration Follow configuration example for ModBus RTU to MQTT https://github.com/HotNoob/PythonProtocolGateway/wiki/Configuration-Examples#modbus-rtu-to-mqtt @@ -13,6 +19,12 @@ https://github.com/HotNoob/PythonProtocolGateway/wiki/Configuration-Examples#mod protocol_version = v0.14 ``` +## Inverter Protocol Select +``` +spf 5000 = v0.14 +spf 12000t dvm-us mpv = v0.14 +``` + ## HomeAssistant Cards Here are some example cards. If you want to use them, you will have to change the variable names and others to reflect your configs. diff --git a/protocols/eg4/eg4_v58.input_registry_map.csv b/protocols/eg4/eg4_v58.input_registry_map.csv index b9294f4..d025de7 100644 --- a/protocols/eg4/eg4_v58.input_registry_map.csv +++ b/protocols/eg4/eg4_v58.input_registry_map.csv @@ -1,232 +1,232 @@ -variable name;data type;register;documented name;unit;values;note;;;;;;;;;;;; -;;0;State;;0-65535;For more information;;;;;;;;;;;; -PV1 Voltage;;1;Vpv1;0.1V;0-65535;PV1 voltage;;;;;;;;;;;; -PV2 Voltage;;2;Vpv2;0.1V;0-65535;PV2 voltage;;;;;;;;;;;; -PV3 Voltage;;3;Vpv3;0.1V;0-65536;PV3 voltage;;;;;;;;;;;; -;;4;Vbat;0.1V;0-65535;Battery voltage;;;;;;;;;;;; -;8bit;5;SOC;%;0-100;Battery capacity;;;;;;;;;;;; -;8bit;5.b8;SOH;%;0-100;Battery State of health;;;;;;;;;;;; -;;6;Internal Fault;;0-65535;For more information;;;;;;;;;;;; -;;7;Ppv1;W;0-65535;PV1 power/ AC enery storage Ppv;;;;;;;;;;;; -;;8;Ppv2;W;0-65535;PV2 power;;;;;;;;;;;; -;;9;Ppv3;W;0-65536;PV3 power (total PV power;;;;;;;;;;;; -;;10;Pcharge;W;0-65535;Charging power (power flowing into the battery);;;;;;;;;;;; -;;11;Pdischarge;W;0-65535;Discharging power (power flowing out of battery power);;;;;;;;;;;; -;;12;VacR;0.1V;0-65535;R-phase utility grid voltage;;;;;;;;;;;; -;;13;VacS;0.1V;0-65535;S-phase utility grid voltage;;;;;;;;;;;; -;;14;VacT;0.1V;0-65535;T-phase utility grid voltage;;;;;;;;;;;; -Grid Hz;;15;Fac;0.01Hz;0-65535;Utility grid frequency;;;;;;;;;;;; -;;16;Pinv;W;0-65535;On-gird inverter power (For three phase: R phase);;;;;;;;;;;; -;;17;Prec;W;0-65535;AC charging rectification power (For three phase: R phase);;;;;;;;;;;; -;;18;IinvRMS;0.01A;0-65535;Inverter rms current output (For three phase: R phase);;;;;;;;;;;; -;;19;PF;0.001;0-2000;Power factor x?(0;;;;;;;;;;;; -;;20;VepsR;0.1V;0-65535;R phase off-grid output voltage;;;;;;;;;;;; -;;21;VepsS;0.1V;0-65535;S phase off-grid output voltage;;;;;;;;;;;; -;;22;VepsT;0.1V;0-65535;T phase off-grid output voltage;;;;;;;;;;;; -;;23;Feps;0.01Hz;0-65535;Off-grid output frequency;;;;;;;;;;;; -;;24;Peps;W;0-65535;Off-grid inverter power (For three phase: R phase);;;;;;;;;;;; -;;25;Seps;VA;0-65535;Off-grid apparent power (For three phase: R phase);;;;;;;;;;;; -;;26;Ptogrid;W;0-65535;User on-grid power (For three phase: R phase);;;;;;;;;;;; -;;27;Ptouser;W;0-65535;Grid power capacity (For three phase: R phase);;;;;;;;;;;; -;;28;Epv1_day;0.1kWh;0-65535;PV1 power generation today / AC Energy Storage Epv_day;;;;;;;;;;;; -;;29;Epv2_day;0.1kWh;0-65535;PV2 power generation today;;;;;;;;;;;; -;;30;Epv3_day;0.1kWh;0-65535;PV3 power generation today (total PV=PV1+PV2+PV3);;;;;;;;;;;; -;;31;Einv_day;0.1kWh;0-65535;Today's on-grid inverter output energy;;;;;;;;;;;; -;;32;Erec_day;0.1kWh;0-65535;Today's AC charging rectifier energy;;;;;;;;;;;; -;;33;Echg_day;0.1kWh;0-65535;Energy Charge today;;;;;;;;;;;; -;;34;Edischg_day;0.1kWh;0-65535;Energy Discharge today;;;;;;;;;;;; -;;35;Eeps_day;0.1kWh;0-65535;Today's off-grid output energy;;;;;;;;;;;; -;;36;Etogrid_day;0.1kWh;0-65535;Today's export to gird energy;;;;;;;;;;;; -;;37;Etouser_day;0.1kWh;0-65535;Electricity supplied to user from the grid today;;;;;;;;;;;; -;;38;Vbus1;0.1V;0-65535;Voltage of Bus 1;;;;;;;;;;;; -;;39;Vbus2;0.1V;0-65535;Voltage of Bus 2;;;;;;;;;;;; -;;40;Epv1_all L;0.1kWh;0-65535;PV1 cumulative power generation/AC energy storage Epv_all Low byte;;;;;;;;;;;; -;;41;Epv1_all H;0.1kWh;0-65535;PV1 cumulative power generation/AC energy storage Epv_all high byte;;;;;;;;;;;; -;;42;Epv2_all L;0.1kWh;0-65535;PV2 cumulative power generation low byte;;;;;;;;;;;; -;;43;Epv2_all H;0.1kWh;0-65535;PV2 cumulative power generation high byte;;;;;;;;;;;; -;;44;Epv3_all L;0.1kWh;0-65535;PV3 cumulative power generation low byte (total PV=PV1+PV2+PV3);;;;;;;;;;;; -;;45;Epv3_all H;0.1kWh;0-65535;PV3 cumulative power generation high byte (total PV=PV1+PV2+PV3);;;;;;;;;;;; -;;46;Einv_all L;0.1kWh;0-65535;Inverter output accumulated power low byte;;;;;;;;;;;; -;;47;Einv_all H;0.1kWh;0-65535;Inverter output accumulates power high byte;;;;;;;;;;;; -;;48;Erec_all L;0.1kWh;0-65535;AC charging accumulates rectified power Low byte;;;;;;;;;;;; -;;49;Erec_all H;0.1kWh;0-65535;AC charging accumulates rectified power high byte;;;;;;;;;;;; -;;50;Echg_all L;0.1kWh;0-65535;Cumulative charge energy low byte;;;;;;;;;;;; -;;51;Echg_all H;0.1kWh;0-65535;Cumulative charge energy high byte;;;;;;;;;;;; -;;52;Edischg_all L;0.1kWh;0-65535;Cumulative discharge charge energy Low byte;;;;;;;;;;;; -;;53;Edischg_all H;0.1kWh;0-65535;Cumulative discharge charge energy High byte;;;;;;;;;;;; -;;54;Eeps_all L;0.1kWh;0-65535;Cumulative inverter off-grid output energy Low byte;;;;;;;;;;;; -;;55;Eeps_all H;0.1kWh;0-65535;Cumulative inverter off-grid output energy High byte;;;;;;;;;;;; -;;56;Etogrid_all L;0.1kWh;0-65535;Accumulate export energy Low byte;;;;;;;;;;;; -;;57;Etogrid_all H;0.1kWh;0-65535;Accumulate export energy High byte;;;;;;;;;;;; -;;58;Etouser_all L;0.1kWh;0-65535;Cumulative import energy Low byte;;;;;;;;;;;; -;;59;Etouser_all H;0.1kWh;0-65535;Cumulative import energy high byte;;;;;;;;;;;; -;;60;FaultCode L;;0-65535;For more information;;;;;;;;;;;; -;;61;FaultCode H;;0-65535;For more information;;;;;;;;;;;; -;;62;WarningCode L;;0-65535;For more information;;;;;;;;;;;; -;;63;WarningCode H;;0-65535;For more information;;;;;;;;;;;; -;;64;Tinner;celsius;0-65535;Internal temperature;;;;;;;;;;;; -;;65;Tradiator1;Celsius;0-65535;Radiator temperature 1;;;;;;;;;;;; -;;66;Tradiator2;celsius;0-65535;Radiator temperature 2;;;;;;;;;;;; -;;67;Tbat;celsius;0-65535;Battery temperature;;;;;;;;;;;; -;;69;RunningTime L;second;;Runtime duration;;;;;;;;;;;; -;;70;RunningTime H;second;;Runtime duration;;;;;;;;;;;; -;4bit;71;AutoTestStart;Bit0-3;;0 - not started ; 1 - started;;;;;;;;;;; -;4bit;71.b4;UbAutoTestStatus;Bit4-7;;0-waiting 1-testing 2-test fail 3-V test OK 4-F test OK 5- test pass;;;;;;;;;;;; -;4bit;71.b8;UbAutoTestStep;Bit8-11;;1-V1L test 2-V1H 3-F1L test 4-F1H test 5-V2L test 6-V2H test 7-F2L test 8-F2H test;;;;;;;;;;;; -;;72;wAutoTestLimit;0.1V/0. 01Hz;;"When ubAuto Test Step=1,2,5,6, is the voltage limit; When ubAutoTest Step=3,4,7,8, it is the frequency limit";;;;;;;;;;;; -;;73;uwAutoTestDefault Time;ms;;;;;;;;;;;;;; -;;74;uwAutoTestTripValue;0.1V/0. 01Hz;;"When ubAuto Test Step=1,2,5,6, is the voltage limit; When ubAutoTestStep=3,4,7,8, it is the frequency limit";;;;;;;;;;;; -;;75;uwAutoTestTripTime;ms;;;;;;;;;;;;;; -;1bit;77;ACInputType;Bit0;0 or 1;0-Grid 1-Generator for 12KHybrid;;;;;;;;;;;; -;1bit;77.b1;ACCoupleInverterFlow;Bit1;0 or 1;0-no flow 1-show flow;;;;;;;;;;;; -;1bit;77.b2;ACCoupleEn;Bit2;0 or 1;0-Disable 1-Enable;;;;;;;;;;;; -;4bit;80;BatTypeAndBrand;;;For more information;;;;;;;;;;;; -;4bit;80.b4;BatComType;;0 or 1;0-CAN 1-485;;;;;;;;;;;; -;;81;MaxChgCurr;0.01A;;The maximum charging current of BMS limits;;;;;;;;;;;; -;;82;MaxDischgCurr;0.01A;;The maximum discharging current of BMS limits;;;;;;;;;;;; -;;83;ChargeVoltRef;0.1V;;Recommends charging voltage by BMS;;;;;;;;;;;; -;;84;DischgCutVolt;0.1V;;Recommends a discharging cut-off voltage by BMS;;;;;;;;;;;; -;;85;BatStatus0_BMS;;;Status information of BMS;;;;;;;;;;;; -;;86;BatStatus1_BMS;;;Status information of BMS;;;;;;;;;;;; -;;87;BatStatus2_BMS;;;Status information of BMS;;;;;;;;;;;; -;;88;BatStatus3_BMS;;;Status information of BMS;;;;;;;;;;;; -;;89;BatStatus4_BMS;;;Status information of BMS;;;;;;;;;;;; -;;90;BatStatus5_BMS;;;Status information of BMS;;;;;;;;;;;; -;;91;BatStatus6_BMS;;;Status information of BMS;;;;;;;;;;;; -;;92;BatStatus7_BMS;;;Status information of BMS;;;;;;;;;;;; -;;93;BatStatus8_BMS;;;Status information of BMS;;;;;;;;;;;; -;;94;BatStatus9_BMS;;;Status information of BMS;;;;;;;;;;;; -;;95;BatStatus_INV;;;The inverter aggregates lithium battery status information;;;;;;;;;;;; -;;96;BatParallelNum;;;Number of batteries in parallel;;;;;;;;;;;; -;;97;BatCapacity;Ah;;Battery capacity;;;;;;;;;;;; -;;98;BatCurrent_BMS;0.01A;;Battery current ;;;;;;;;;;;; -;;99;FaultCode_BMS;;;;;;;;;;;;;;; -;;100;WarningCode_BMS;;;;;;;;;;;;;;; -;;101;MaxCellVolt_BMS;0.001V;;Maximum voltage of cell;;;;;;;;;;;; -;;102;MinCellVolt_BMS;0.001V;;Minimum voltage of cell;;;;;;;;;;;; -;;103;MaxCellTemp_BMS;0.1C;;Maximum temperature of cell;;;;;;;;;;;; -;;104;MinCellTemp_BMS;0.1C;;Minimum temperature of cell;;;;;;;;;;;; -;;105;BMSFWUpdateState;;1-3;1-Upgrade in process 2-Upgrade successful 3- Upgrade failed;;;;;;;;;;;; -;;106;CycleCnt_BMS;;;Number of charging/discharging cycles;;;;;;;;;;;; -;;107;BatVoltSample_INV;0.1V;;Tnverter samples the battery voltage;;;;;;;;;;;; -;;108;T1;0.1C;;BT temperature for 12k;;;;;;;;;;;; -;;109;T2;0.1C;;Reserved;;;;;;;;;;;; -;;110;T3;0.1C;;Reserved;;;;;;;;;;;; -;;111;T4;0.1C;;Reserved;;;;;;;;;;;; -;;112;T5;0.1C;;Reserved;;;;;;;;;;;; -;2bit;113;MasterOrSlave;Bit0~1;1;2;;;;;;;;;;;; -;2bit;113.b2;SingleOrThreePhase;Bit2~3;1-3;1:R; 2:S ; 3:T; Parallel phase 1:R 2:S 3:T;;;;;;;;; -;4bit;113.b4;Resvd;Bit4~7;;Reserved;;;;;;;;;;;; -;8bit;113.b8;ParallelNum;Bit8~16;1~255;Number of inverters in parallel;;;;;;;;;;;; -;;114;OnGridloadPower;W;;Load power of the 12k inverter when it is not off-grid;;;;;;;;;;;; -;8bit;115;SN_0__Year;;0'-'9' 'A'- 'Z';The serial number is a ten-digit ASCII code For example: The serial number is AB12345678 SN[0]=0x41(A) : : : : SN[9]=0x38(8);;;;;;;;;;;; -;8bit;115.b8;SN_1__week;;0'-'9' 'A'- 'Z';;;;;;;;;;;;; -;8bit;116;SN_2__week;;0'-'9' 'A'- 'Z';;;;;;;;;;;;; -;8bit;116.b8;SN_3__factory;;0'-'9' 'A'- 'Z';;;;;;;;;;;;; -;8bit;117;SN_4__product code;;0'-'9' 'A'- 'Z';;;;;;;;;;;;; -;8bit;117.b8;SN_5__product code;;0'-'9' 'A'- 'Z';;;;;;;;;;;;; -;8bit;118;SN_6__serial number;;0'-'9' 'A'- 'Z';;;;;;;;;;;;; -;8bit;118.b8;SN_7__serial number;;0'-'9' 'A'- 'Z';;;;;;;;;;;;; -;8bit;119;SN_8__serial number;;0'-'9' 'A'- 'Z';;;;;;;;;;;;; -;8bit;119.b8;SN_9__serial number;;0'-'9' 'A'- 'Z';;;;;;;;;;;;; -;;120;VBusP;0.1V;;;Half BUS voltage;Half BUS voltage;Half BUS voltage;Half BUS voltage;Half BUS voltage;Half BUS voltage;Half BUS voltage;Half BUS voltage;Half BUS voltage;Half BUS voltage;Half BUS voltage;Half BUS voltage -;;121;GenVolt;0.1V;;Generator voltage Voltage of generator for three phase: R phase;;;;;;;;;;;; -;;122;GenFreq;0.01Hz;;Generator frequency;;;;;;;;;;;; -;;123;GenPower;W;;Voltage of generator for three phase: R phase;;;;;;;;;;;; -;;124;Egen_day;0.1kWh;;Energy of generator today;;;;;;;;;;;; -;;125;Egen_all L;0.1kWh;;Low byte of total generator energy;;;;;;;;;;;; -;;126;Egen_all H;0.1kWh;;High byte of total generator energy;;;;;;;;;;;; -;;127;EPSVoltL1N;0.1V;;Voltage of EPS L1N Voltage of generator for three phase: S phase;;;;;;;;;;;; -;;128;EPSVoltL2N;0.1V;;Voltage of EPS L2N Voltage of generator for three phase: T phase;;;;;;;;;;;; -;;129;Peps_L1N;W;;Active power of EPS L1N Off-grid active power of three phase: S phase;;;;;;;;;;;; -;;130;Peps_L2N;W;;Active power of EPS L2N Off-grid active power of three phase: T phase;;;;;;;;;;;; -;;131;Seps_L1N;VA;;Apparent power of EPS L1N Off-grid apparent power of three phase: S phase;;;;;;;;;;;; -;;132;Seps_L2N;VA;;Apparent power of EPS L2N Off-grid apparent power of three phase: T phase;;;;;;;;;;;; -;;133;EepsL1N_day;0.1kWh;;Daily energy of EPSL1N Off-grid daily energy of three phase: S phase;;;;;;;;;;;; -;;134;EepsL2N_day;0.1kWh;;Daily energy of EPSL2N Off-grid daily energy of three phase: T phase;;;;;;;;;;;; -;;135;EepsL1N_all L;0.1kWh;;Low byte of total EPSL1N energy Total off-grid power of three phase: S phase;;;;;;;;;;;; -;;136;EepsL1N_all H;0.1kWh;;High byte of total EPSL1N energy Total off-grid power of three cameras: S phase;;;;;;;;;;;; -;;137;EepsL2N_all L;0.1kWh;;Low word of total EPSL2N energy Total off-grid power of three phase: T phase;;;;;;;;;;;; -;;138;EepsL2N_all H;0.1kWh;;High byte of total EPSL2N energy Total off-grid power of three byte: T phase;;;;;;;;;;;; -;;140;AFCI_CurrCH1;mA;;AFCI current;;;;;;;;;;;; -;;141;AFCI_CurrCH2;mA;;AFCI current;;;;;;;;;;;; -;;142;AFCI_CurrCH3;mA;;AFCI current;;;;;;;;;;;; -;;143;AFCI_CurrCH4;mA;;AFCI current;;;;;;;;;;;; -;1bit;144;AFCIFlag_ArcAlarmCH1;Bit0;;Arc status of CH1 0-Normal 1-Alarm;;;;;;;;;;;; -;1bit;144.b1;AFCIFlag_ArcAlarmCH2;Bit1;;Arc status of CH2 0-Normal 1-Alarm;;;;;;;;;;;; -;1bit;144.b2;AFCIFlag_ArcAlarmCH3;Bit2;;Arc status of CH3 0-Normal 1-Alarm;;;;;;;;;;;; -;1bit;144.b3;AFCIFlag_ArcAlarmCH4;Bit3;;Arc status of CH4 0-Normal 1-Alarm;;;;;;;;;;;; -;1bit;144.b4;AFCIFlag_SelfTestResultCH1;Bit4;;Test result of CH1 0-Normal 1-fail;;;;;;;;;;;; -;1bit;144.b5;AFCIFlag_SelfTestResultCH2;Bit5;;Test result of CH2 0-Normal 1-fail;;;;;;;;;;;; -;1bit;144.b6;AFCIFlag_SelfTestResultCH3;Bit6;;Test result of CH3 0-Normal 1-fail;;;;;;;;;;;; -;1bit;144.b7;AFCIFlag_SelfTestResultCH4;Bit7;;Test result of CH4 0-Normal 1-fail;;;;;;;;;;;; -;8bit;144.b8;AFCI_ArcAlarm_rsvd;Bit8-15;;;;;;;;;;;;;; -;;145;AFCI_ArcCH1;;;Real time arc of CH1;;;;;;;;;;;; -;;146;AFCI_ArcCH2;;;Real time arc of CH2;;;;;;;;;;;; -;;147;AFCI_ArcCH3;;;Real time arc of CH3;;;;;;;;;;;; -;;148;AFCI_ArcCH4;;;Real time arc of CH4;;;;;;;;;;;; -;;149;AFCI_MaxArcCH1;;;Max arc of CH1;;;;;;;;;;;; -;;150;AFCI_MaxArcCH2;;;Max arc of CH2;;;;;;;;;;;; -;;151;AFCI_MaxArcCH3;;;Max arc of CH3;;;;;;;;;;;; -;;152;AFCI_MaxArcCH4;;;Max arc of CH4;;;;;;;;;;;; -;;153;ACCouplePower;W;;AC Coupled inverter power;;;;;;;;;;;; -;;154;AutoTestTripValue_0_;0.1V/0. 01Hz;;;;;;;;;;;;;; -;;161;AutoTestTripValue_7_;0.1V/0. 01Hz;;;;;;;;;;;;;; -;;162;AutoTestTripTime _0_;ms;;;;;;;;;;;;;; -;;169;AutoTestTripTime _7_;ms;;;;;;;;;;;;;; -;;170;Pload;W;;;;;;;;;;;;;; -;;171;Eload_day;0.1kWh;;;;;;;;;;;;;; -;;172;Eload_allL;0.1kWh;;;;;;;;;;;;;; -;;173;Eload_allH;0.1kWh;;;;;;;;;;;;;; -;4bit;174;SwitchState_SafetySw;Bit0~4;0~0x1F;The status of the 5-digit safety DIP switch;;;;;;;;;;;; -;;180;Pinv_S;W;0-65535;On grid inverter power of three phase: S phase;;;;;;;;;;;; -;;181;Pinv_T;W;0-65535;On grid inverter power of three phase: T phase;;;;;;;;;;;; -;;182;Prec_S;W;0-65535;Charging rectification power of three phase: S phase;;;;;;;;;;;; -;;183;Prec_T;W;0-65535;Charging rectification power of three phase: T phase;;;;;;;;;;;; -;;184;Ptogrid_S;W;0-65535;User on-grid power of three phase: S phase;;;;;;;;;;;; -;;185;Ptogrid_T;W;0-65535;User on-grid power of three phase: T phase;;;;;;;;;;;; -;;186;Ptouser_S;W;0-65535;Grid supply power of three phase: S phase;;;;;;;;;;;; -;;187;Ptouser_T;W;0-65535;Grid supply power of three phase:T phase;;;;;;;;;;;; -;;188;GenPower_S;W;0-65535;Power of generator for three phase: S phase;;;;;;;;;;;; -;;189;GenPower_T;W;0-65535;Power of generator for three phase: T phase;;;;;;;;;;;; -;;190;IinvRMS_S;0.01;0-65535;Effective value of three phase inverter current: S phase;;;;;;;;;;;; -;;191;IinvRMS_T;0.01;0-65535;Effective value of three phase inverter current: T phase;;;;;;;;;;;; -;;192;PF_S;0.001;0-2000;Power factor of phase S in three- phase inverter x?(0;;;;;;;;;;;; -;;193;PF_T;0.001;0-2000;Power factor of phase T in three- phase inverter x? (0;;;;;;;;;;;; -;;192;PF_S;0.001;0-2000;Power factor of phase S in three- phase inverter x?(0;;;;;;;;;;;; -;;400;FaultRecord1_YAndM;;;Fault Records 1_ years & months;;;;;;;;;;;; -;;401;FaultRecord1_DAndH;;;Fault Records 1_ days & hours;;;;;;;;;;;; -;;402;FaultRecord1_MAndS;;;Fault Records 1_ minutes & seconds;;;;;;;;;;;; -;;403;FaultRecord1_Code;;;Fault Records 1_ fault code;;;;;;;;;;;; -;;404;FaultRecord1_Value;;;Fault Records 1_ fault value;;;;;;;;;;;; -;;405;FaultRecord1_SetOrClr;;0/1;Fault Records 1_Fault occurred or cleared (0-fault occurred;;;;;;;;;;;; -;;406;FaultRecord2_YAndM;;;Fault Records 2_ years & months;;;;;;;;;;;; -;;407;FaultRecord2_DAndH;;;Fault Records 2_ days & hours;;;;;;;;;;;; -;;408;FaultRecord2_MAndS;;;Fault Records 2_ minutes & seconds;;;;;;;;;;;; -;;409;FaultRecord2_Code;;;Fault Records 2_ fault code;;;;;;;;;;;; -;;410;FaultRecord2_Value;;;Fault Records 2_Fault value;;;;;;;;;;;; -;;411;FaultRecord2_SetOrClr;;0/1;Fault Records 2_Fault occurred or clear (0 - Fault Occurred;;;;;;;;;;;; -;;994;FaultRecord100_YAndM;;;Fault Records 100_ years & months;;;;;;;;;;;; -;;995;FaultRecord100_DAndH;;;Fault records 100_ days & hours;;;;;;;;;;;; -;;996;FaultRecord100_MAndS;;;Fault Records 100_minutes & seconds;;;;;;;;;;;; -;;997;FaultRecord100_Code;;;Fault Records 100_ fault code;;;;;;;;;;;; -;;998;FaultRecord100_Value;;;The fault record is 100_ fault value;;;;;;;;;;;; -;;999;FaultRecord100_SetOrClr;;0/1;Fault Records 100_Fault Occurred or Cleared (0 - Fault Occurred;;;;;;;;;;;; -;;1000;WarnRecord1_YAndM;;;Alarm Records 1_ years & months;;;;;;;;;;;; -;;1001;WarnRecord1_DAndH;;;Alarm Records 1_ days & hours;;;;;;;;;;;; -;;1002;WarnRecord1_MAndS;;;Alarm records 1_ minutes &seconds;;;;;;;;;;;; -;;1003;WarnRecord1_Code;;;Alarm Records 1_ alarm code;;;;;;;;;;;; -;;1004;WarnRecord1_Value;;;Alarm Records 1_Alarm value;;;;;;;;;;;; -;;1005;WarnRecord1_SetOrClr;;0/1;Alarm Records 1_Alarm occurred or cleared (0 - alarm occurred;;;;;;;;;;;; -;;1006;WarnRecord2_YAndM;;;Alarm records 2_ years & months;;;;;;;;;;;; -;;1007;WarnRecord2_DAndH;;;Alarm Records 2_ days & hour;;;;;;;;;;;; -;;1008;WarnRecord2_MAndS;;;Alarm Records 2_ minutes & seconds;;;;;;;;;;;; -;;1009;WarnRecord2_Code;;;Alarm Records 2_Alarm code;;;;;;;;;;;; -;;1010;WarnRecord2_Value;;;Alarm Records 2_Alarm value;;;;;;;;;;;; -;;1011;WarnRecord2_SetOrClr;;0/1;Alarm Records 2_Alarm occurred or cleared (0 - alarm occurred;;;;;;;;;;;; -;;1594;WarnRecord100_YAndM;;;Alarm Records 100_ years & months;;;;;;;;;;;; -;;1595;WarnRecord100_DAndH;;;Alarm Records for 100_ days & hours;;;;;;;;;;;; -;;1596;WarnRecord100_MAndS;;;Alarm records 100_ minutes &seconds;;;;;;;;;;;; -;;1597;WarnRecord100_Code;;;Alarm Records 100_ alarm code;;;;;;;;;;;; -;;1598;WarnRecord100_Value;;;Alarm records 100_alarm value;;;;;;;;;;;; -;;1599;WarnRecord100_SetOrClr;;0/1;Alarm Records 100_Alarm occurred or cleared (0 - alarm occurred;;;;;;;;;;;; +variable name,data type,register,documented name,unit,values,note,,,,,,,,,,,, +,,0,State,,0-65535,For more information,,,,,,,,,,,, +PV1 Voltage,,1,Vpv1,0.1V,0-65535,PV1 voltage,,,,,,,,,,,, +PV2 Voltage,,2,Vpv2,0.1V,0-65535,PV2 voltage,,,,,,,,,,,, +PV3 Voltage,,3,Vpv3,0.1V,0-65536,PV3 voltage,,,,,,,,,,,, +,,4,Vbat,0.1V,0-65535,Battery voltage,,,,,,,,,,,, +,8bit,5,SOC,%,0-100,Battery capacity,,,,,,,,,,,, +,8bit,5.b8,SOH,%,0-100,Battery State of health,,,,,,,,,,,, +,,6,Internal Fault,,0-65535,For more information,,,,,,,,,,,, +,,7,Ppv1,W,0-65535,PV1 power/ AC enery storage Ppv,,,,,,,,,,,, +,,8,Ppv2,W,0-65535,PV2 power,,,,,,,,,,,, +,,9,Ppv3,W,0-65536,PV3 power (total PV power,,,,,,,,,,,, +,,10,Pcharge,W,0-65535,Charging power (power flowing into the battery),,,,,,,,,,,, +,,11,Pdischarge,W,0-65535,Discharging power (power flowing out of battery power),,,,,,,,,,,, +,,12,VacR,0.1V,0-65535,R-phase utility grid voltage,,,,,,,,,,,, +,,13,VacS,0.1V,0-65535,S-phase utility grid voltage,,,,,,,,,,,, +,,14,VacT,0.1V,0-65535,T-phase utility grid voltage,,,,,,,,,,,, +Grid Hz,,15,Fac,0.01Hz,0-65535,Utility grid frequency,,,,,,,,,,,, +,,16,Pinv,W,0-65535,On-gird inverter power (For three phase: R phase),,,,,,,,,,,, +,,17,Prec,W,0-65535,AC charging rectification power (For three phase: R phase),,,,,,,,,,,, +,,18,IinvRMS,0.01A,0-65535,Inverter rms current output (For three phase: R phase),,,,,,,,,,,, +,,19,PF,0.001,0-2000,Power factor x?(0,,,,,,,,,,,, +,,20,VepsR,0.1V,0-65535,R phase off-grid output voltage,,,,,,,,,,,, +,,21,VepsS,0.1V,0-65535,S phase off-grid output voltage,,,,,,,,,,,, +,,22,VepsT,0.1V,0-65535,T phase off-grid output voltage,,,,,,,,,,,, +,,23,Feps,0.01Hz,0-65535,Off-grid output frequency,,,,,,,,,,,, +,,24,Peps,W,0-65535,Off-grid inverter power (For three phase: R phase),,,,,,,,,,,, +,,25,Seps,VA,0-65535,Off-grid apparent power (For three phase: R phase),,,,,,,,,,,, +,,26,Ptogrid,W,0-65535,User on-grid power (For three phase: R phase),,,,,,,,,,,, +,,27,Ptouser,W,0-65535,Grid power capacity (For three phase: R phase),,,,,,,,,,,, +,,28,Epv1_day,0.1kWh,0-65535,PV1 power generation today / AC Energy Storage Epv_day,,,,,,,,,,,, +,,29,Epv2_day,0.1kWh,0-65535,PV2 power generation today,,,,,,,,,,,, +,,30,Epv3_day,0.1kWh,0-65535,PV3 power generation today (total PV=PV1+PV2+PV3),,,,,,,,,,,, +,,31,Einv_day,0.1kWh,0-65535,Today's on-grid inverter output energy,,,,,,,,,,,, +,,32,Erec_day,0.1kWh,0-65535,Today's AC charging rectifier energy,,,,,,,,,,,, +,,33,Echg_day,0.1kWh,0-65535,Energy Charge today,,,,,,,,,,,, +,,34,Edischg_day,0.1kWh,0-65535,Energy Discharge today,,,,,,,,,,,, +,,35,Eeps_day,0.1kWh,0-65535,Today's off-grid output energy,,,,,,,,,,,, +,,36,Etogrid_day,0.1kWh,0-65535,Today's export to gird energy,,,,,,,,,,,, +,,37,Etouser_day,0.1kWh,0-65535,Electricity supplied to user from the grid today,,,,,,,,,,,, +,,38,Vbus1,0.1V,0-65535,Voltage of Bus 1,,,,,,,,,,,, +,,39,Vbus2,0.1V,0-65535,Voltage of Bus 2,,,,,,,,,,,, +,,40,Epv1_all L,0.1kWh,0-65535,PV1 cumulative power generation/AC energy storage Epv_all Low byte,,,,,,,,,,,, +,,41,Epv1_all H,0.1kWh,0-65535,PV1 cumulative power generation/AC energy storage Epv_all high byte,,,,,,,,,,,, +,,42,Epv2_all L,0.1kWh,0-65535,PV2 cumulative power generation low byte,,,,,,,,,,,, +,,43,Epv2_all H,0.1kWh,0-65535,PV2 cumulative power generation high byte,,,,,,,,,,,, +,,44,Epv3_all L,0.1kWh,0-65535,PV3 cumulative power generation low byte (total PV=PV1+PV2+PV3),,,,,,,,,,,, +,,45,Epv3_all H,0.1kWh,0-65535,PV3 cumulative power generation high byte (total PV=PV1+PV2+PV3),,,,,,,,,,,, +,,46,Einv_all L,0.1kWh,0-65535,Inverter output accumulated power low byte,,,,,,,,,,,, +,,47,Einv_all H,0.1kWh,0-65535,Inverter output accumulates power high byte,,,,,,,,,,,, +,,48,Erec_all L,0.1kWh,0-65535,AC charging accumulates rectified power Low byte,,,,,,,,,,,, +,,49,Erec_all H,0.1kWh,0-65535,AC charging accumulates rectified power high byte,,,,,,,,,,,, +,,50,Echg_all L,0.1kWh,0-65535,Cumulative charge energy low byte,,,,,,,,,,,, +,,51,Echg_all H,0.1kWh,0-65535,Cumulative charge energy high byte,,,,,,,,,,,, +,,52,Edischg_all L,0.1kWh,0-65535,Cumulative discharge charge energy Low byte,,,,,,,,,,,, +,,53,Edischg_all H,0.1kWh,0-65535,Cumulative discharge charge energy High byte,,,,,,,,,,,, +,,54,Eeps_all L,0.1kWh,0-65535,Cumulative inverter off-grid output energy Low byte,,,,,,,,,,,, +,,55,Eeps_all H,0.1kWh,0-65535,Cumulative inverter off-grid output energy High byte,,,,,,,,,,,, +,,56,Etogrid_all L,0.1kWh,0-65535,Accumulate export energy Low byte,,,,,,,,,,,, +,,57,Etogrid_all H,0.1kWh,0-65535,Accumulate export energy High byte,,,,,,,,,,,, +,,58,Etouser_all L,0.1kWh,0-65535,Cumulative import energy Low byte,,,,,,,,,,,, +,,59,Etouser_all H,0.1kWh,0-65535,Cumulative import energy high byte,,,,,,,,,,,, +,,60,FaultCode L,,0-65535,For more information,,,,,,,,,,,, +,,61,FaultCode H,,0-65535,For more information,,,,,,,,,,,, +,,62,WarningCode L,,0-65535,For more information,,,,,,,,,,,, +,,63,WarningCode H,,0-65535,For more information,,,,,,,,,,,, +,,64,Tinner,celsius,0-65535,Internal temperature,,,,,,,,,,,, +,,65,Tradiator1,Celsius,0-65535,Radiator temperature 1,,,,,,,,,,,, +,,66,Tradiator2,celsius,0-65535,Radiator temperature 2,,,,,,,,,,,, +,,67,Tbat,celsius,0-65535,Battery temperature,,,,,,,,,,,, +,,69,RunningTime L,second,,Runtime duration,,,,,,,,,,,, +,,70,RunningTime H,second,,Runtime duration,,,,,,,,,,,, +,4bit,71,AutoTestStart,Bit0-3,,0 - not started , 1 - started,,,,,,,,,,, +,4bit,71.b4,UbAutoTestStatus,Bit4-7,,0-waiting 1-testing 2-test fail 3-V test OK 4-F test OK 5- test pass,,,,,,,,,,,, +,4bit,71.b8,UbAutoTestStep,Bit8-11,,1-V1L test 2-V1H 3-F1L test 4-F1H test 5-V2L test 6-V2H test 7-F2L test 8-F2H test,,,,,,,,,,,, +,,72,wAutoTestLimit,0.1V/0. 01Hz,,"When ubAuto Test Step=1,2,5,6, is the voltage limit; When ubAutoTest Step=3,4,7,8, it is the frequency limit",,,,,,,,,,,, +,,73,uwAutoTestDefault Time,ms,,,,,,,,,,,,,, +,,74,uwAutoTestTripValue,0.1V/0. 01Hz,,"When ubAuto Test Step=1,2,5,6, is the voltage limit; When ubAutoTestStep=3,4,7,8, it is the frequency limit",,,,,,,,,,,, +,,75,uwAutoTestTripTime,ms,,,,,,,,,,,,,, +,1bit,77,ACInputType,Bit0,0 or 1,0-Grid 1-Generator for 12KHybrid,,,,,,,,,,,, +,1bit,77.b1,ACCoupleInverterFlow,Bit1,0 or 1,0-no flow 1-show flow,,,,,,,,,,,, +,1bit,77.b2,ACCoupleEn,Bit2,0 or 1,0-Disable 1-Enable,,,,,,,,,,,, +,4bit,80,BatTypeAndBrand,,,For more information,,,,,,,,,,,, +,4bit,80.b4,BatComType,,0 or 1,0-CAN 1-485,,,,,,,,,,,, +,,81,MaxChgCurr,0.01A,,The maximum charging current of BMS limits,,,,,,,,,,,, +,,82,MaxDischgCurr,0.01A,,The maximum discharging current of BMS limits,,,,,,,,,,,, +,,83,ChargeVoltRef,0.1V,,Recommends charging voltage by BMS,,,,,,,,,,,, +,,84,DischgCutVolt,0.1V,,Recommends a discharging cut-off voltage by BMS,,,,,,,,,,,, +,,85,BatStatus0_BMS,,,Status information of BMS,,,,,,,,,,,, +,,86,BatStatus1_BMS,,,Status information of BMS,,,,,,,,,,,, +,,87,BatStatus2_BMS,,,Status information of BMS,,,,,,,,,,,, +,,88,BatStatus3_BMS,,,Status information of BMS,,,,,,,,,,,, +,,89,BatStatus4_BMS,,,Status information of BMS,,,,,,,,,,,, +,,90,BatStatus5_BMS,,,Status information of BMS,,,,,,,,,,,, +,,91,BatStatus6_BMS,,,Status information of BMS,,,,,,,,,,,, +,,92,BatStatus7_BMS,,,Status information of BMS,,,,,,,,,,,, +,,93,BatStatus8_BMS,,,Status information of BMS,,,,,,,,,,,, +,,94,BatStatus9_BMS,,,Status information of BMS,,,,,,,,,,,, +,,95,BatStatus_INV,,,The inverter aggregates lithium battery status information,,,,,,,,,,,, +,,96,BatParallelNum,,,Number of batteries in parallel,,,,,,,,,,,, +,,97,BatCapacity,Ah,,Battery capacity,,,,,,,,,,,, +,SHORT,98,BatCurrent_BMS,0.1A,,Battery current ,,,,,,,,,,,, +,,99,FaultCode_BMS,,,,,,,,,,,,,,, +,,100,WarningCode_BMS,,,,,,,,,,,,,,, +,,101,MaxCellVolt_BMS,0.001V,,Maximum voltage of cell,,,,,,,,,,,, +,,102,MinCellVolt_BMS,0.001V,,Minimum voltage of cell,,,,,,,,,,,, +,SHORT,103,MaxCellTemp_BMS,0.1C,,Maximum temperature of cell,,,,,,,,,,,, +,SHORT,104,MinCellTemp_BMS,0.1C,,Minimum temperature of cell,,,,,,,,,,,, +,,105,BMSFWUpdateState,,1-3,1-Upgrade in process 2-Upgrade successful 3- Upgrade failed,,,,,,,,,,,, +,,106,CycleCnt_BMS,,,Number of charging/discharging cycles,,,,,,,,,,,, +,,107,BatVoltSample_INV,0.1V,,Tnverter samples the battery voltage,,,,,,,,,,,, +,,108,T1,0.1C,,BT temperature for 12k,,,,,,,,,,,, +,,109,T2,0.1C,,Reserved,,,,,,,,,,,, +,,110,T3,0.1C,,Reserved,,,,,,,,,,,, +,,111,T4,0.1C,,Reserved,,,,,,,,,,,, +,,112,T5,0.1C,,Reserved,,,,,,,,,,,, +,2bit,113,MasterOrSlave,Bit0~1,1,2,,,,,,,,,,,, +,2bit,113.b2,SingleOrThreePhase,Bit2~3,1-3,1:R, 2:S , 3:T, Parallel phase 1:R 2:S 3:T,,,,,,,,, +,4bit,113.b4,Resvd,Bit4~7,,Reserved,,,,,,,,,,,, +,8bit,113.b8,ParallelNum,Bit8~16,1~255,Number of inverters in parallel,,,,,,,,,,,, +,,114,OnGridloadPower,W,,Load power of the 12k inverter when it is not off-grid,,,,,,,,,,,, +,8bit,115,SN_0__Year,,0'-'9' 'A'- 'Z',The serial number is a ten-digit ASCII code For example: The serial number is AB12345678 SN[0]=0x41(A) : : : : SN[9]=0x38(8),,,,,,,,,,,, +,8bit,115.b8,SN_1__week,,0'-'9' 'A'- 'Z',,,,,,,,,,,,, +,8bit,116,SN_2__week,,0'-'9' 'A'- 'Z',,,,,,,,,,,,, +,8bit,116.b8,SN_3__factory,,0'-'9' 'A'- 'Z',,,,,,,,,,,,, +,8bit,117,SN_4__product code,,0'-'9' 'A'- 'Z',,,,,,,,,,,,, +,8bit,117.b8,SN_5__product code,,0'-'9' 'A'- 'Z',,,,,,,,,,,,, +,8bit,118,SN_6__serial number,,0'-'9' 'A'- 'Z',,,,,,,,,,,,, +,8bit,118.b8,SN_7__serial number,,0'-'9' 'A'- 'Z',,,,,,,,,,,,, +,8bit,119,SN_8__serial number,,0'-'9' 'A'- 'Z',,,,,,,,,,,,, +,8bit,119.b8,SN_9__serial number,,0'-'9' 'A'- 'Z',,,,,,,,,,,,, +,,120,VBusP,0.1V,,,Half BUS voltage,Half BUS voltage,Half BUS voltage,Half BUS voltage,Half BUS voltage,Half BUS voltage,Half BUS voltage,Half BUS voltage,Half BUS voltage,Half BUS voltage,Half BUS voltage,Half BUS voltage +,,121,GenVolt,0.1V,,Generator voltage Voltage of generator for three phase: R phase,,,,,,,,,,,, +,,122,GenFreq,0.01Hz,,Generator frequency,,,,,,,,,,,, +,,123,GenPower,W,,Voltage of generator for three phase: R phase,,,,,,,,,,,, +,,124,Egen_day,0.1kWh,,Energy of generator today,,,,,,,,,,,, +,,125,Egen_all L,0.1kWh,,Low byte of total generator energy,,,,,,,,,,,, +,,126,Egen_all H,0.1kWh,,High byte of total generator energy,,,,,,,,,,,, +,,127,EPSVoltL1N,0.1V,,Voltage of EPS L1N Voltage of generator for three phase: S phase,,,,,,,,,,,, +,,128,EPSVoltL2N,0.1V,,Voltage of EPS L2N Voltage of generator for three phase: T phase,,,,,,,,,,,, +,,129,Peps_L1N,W,,Active power of EPS L1N Off-grid active power of three phase: S phase,,,,,,,,,,,, +,,130,Peps_L2N,W,,Active power of EPS L2N Off-grid active power of three phase: T phase,,,,,,,,,,,, +,,131,Seps_L1N,VA,,Apparent power of EPS L1N Off-grid apparent power of three phase: S phase,,,,,,,,,,,, +,,132,Seps_L2N,VA,,Apparent power of EPS L2N Off-grid apparent power of three phase: T phase,,,,,,,,,,,, +,,133,EepsL1N_day,0.1kWh,,Daily energy of EPSL1N Off-grid daily energy of three phase: S phase,,,,,,,,,,,, +,,134,EepsL2N_day,0.1kWh,,Daily energy of EPSL2N Off-grid daily energy of three phase: T phase,,,,,,,,,,,, +,,135,EepsL1N_all L,0.1kWh,,Low byte of total EPSL1N energy Total off-grid power of three phase: S phase,,,,,,,,,,,, +,,136,EepsL1N_all H,0.1kWh,,High byte of total EPSL1N energy Total off-grid power of three cameras: S phase,,,,,,,,,,,, +,,137,EepsL2N_all L,0.1kWh,,Low word of total EPSL2N energy Total off-grid power of three phase: T phase,,,,,,,,,,,, +,,138,EepsL2N_all H,0.1kWh,,High byte of total EPSL2N energy Total off-grid power of three byte: T phase,,,,,,,,,,,, +,,140,AFCI_CurrCH1,mA,,AFCI current,,,,,,,,,,,, +,,141,AFCI_CurrCH2,mA,,AFCI current,,,,,,,,,,,, +,,142,AFCI_CurrCH3,mA,,AFCI current,,,,,,,,,,,, +,,143,AFCI_CurrCH4,mA,,AFCI current,,,,,,,,,,,, +,1bit,144,AFCIFlag_ArcAlarmCH1,Bit0,,Arc status of CH1 0-Normal 1-Alarm,,,,,,,,,,,, +,1bit,144.b1,AFCIFlag_ArcAlarmCH2,Bit1,,Arc status of CH2 0-Normal 1-Alarm,,,,,,,,,,,, +,1bit,144.b2,AFCIFlag_ArcAlarmCH3,Bit2,,Arc status of CH3 0-Normal 1-Alarm,,,,,,,,,,,, +,1bit,144.b3,AFCIFlag_ArcAlarmCH4,Bit3,,Arc status of CH4 0-Normal 1-Alarm,,,,,,,,,,,, +,1bit,144.b4,AFCIFlag_SelfTestResultCH1,Bit4,,Test result of CH1 0-Normal 1-fail,,,,,,,,,,,, +,1bit,144.b5,AFCIFlag_SelfTestResultCH2,Bit5,,Test result of CH2 0-Normal 1-fail,,,,,,,,,,,, +,1bit,144.b6,AFCIFlag_SelfTestResultCH3,Bit6,,Test result of CH3 0-Normal 1-fail,,,,,,,,,,,, +,1bit,144.b7,AFCIFlag_SelfTestResultCH4,Bit7,,Test result of CH4 0-Normal 1-fail,,,,,,,,,,,, +,8bit,144.b8,AFCI_ArcAlarm_rsvd,Bit8-15,,,,,,,,,,,,,, +,,145,AFCI_ArcCH1,,,Real time arc of CH1,,,,,,,,,,,, +,,146,AFCI_ArcCH2,,,Real time arc of CH2,,,,,,,,,,,, +,,147,AFCI_ArcCH3,,,Real time arc of CH3,,,,,,,,,,,, +,,148,AFCI_ArcCH4,,,Real time arc of CH4,,,,,,,,,,,, +,,149,AFCI_MaxArcCH1,,,Max arc of CH1,,,,,,,,,,,, +,,150,AFCI_MaxArcCH2,,,Max arc of CH2,,,,,,,,,,,, +,,151,AFCI_MaxArcCH3,,,Max arc of CH3,,,,,,,,,,,, +,,152,AFCI_MaxArcCH4,,,Max arc of CH4,,,,,,,,,,,, +,,153,ACCouplePower,W,,AC Coupled inverter power,,,,,,,,,,,, +,,154,AutoTestTripValue_0_,0.1V/0. 01Hz,,,,,,,,,,,,,, +,,161,AutoTestTripValue_7_,0.1V/0. 01Hz,,,,,,,,,,,,,, +,,162,AutoTestTripTime _0_,ms,,,,,,,,,,,,,, +,,169,AutoTestTripTime _7_,ms,,,,,,,,,,,,,, +,,170,Pload,W,,,,,,,,,,,,,, +,,171,Eload_day,0.1kWh,,,,,,,,,,,,,, +,,172,Eload_allL,0.1kWh,,,,,,,,,,,,,, +,,173,Eload_allH,0.1kWh,,,,,,,,,,,,,, +,4bit,174,SwitchState_SafetySw,Bit0~4,0~0x1F,The status of the 5-digit safety DIP switch,,,,,,,,,,,, +,,180,Pinv_S,W,0-65535,On grid inverter power of three phase: S phase,,,,,,,,,,,, +,,181,Pinv_T,W,0-65535,On grid inverter power of three phase: T phase,,,,,,,,,,,, +,,182,Prec_S,W,0-65535,Charging rectification power of three phase: S phase,,,,,,,,,,,, +,,183,Prec_T,W,0-65535,Charging rectification power of three phase: T phase,,,,,,,,,,,, +,,184,Ptogrid_S,W,0-65535,User on-grid power of three phase: S phase,,,,,,,,,,,, +,,185,Ptogrid_T,W,0-65535,User on-grid power of three phase: T phase,,,,,,,,,,,, +,,186,Ptouser_S,W,0-65535,Grid supply power of three phase: S phase,,,,,,,,,,,, +,,187,Ptouser_T,W,0-65535,Grid supply power of three phase:T phase,,,,,,,,,,,, +,,188,GenPower_S,W,0-65535,Power of generator for three phase: S phase,,,,,,,,,,,, +,,189,GenPower_T,W,0-65535,Power of generator for three phase: T phase,,,,,,,,,,,, +,,190,IinvRMS_S,0.01,0-65535,Effective value of three phase inverter current: S phase,,,,,,,,,,,, +,,191,IinvRMS_T,0.01,0-65535,Effective value of three phase inverter current: T phase,,,,,,,,,,,, +,,192,PF_S,0.001,0-2000,Power factor of phase S in three- phase inverter x?(0,,,,,,,,,,,, +,,193,PF_T,0.001,0-2000,Power factor of phase T in three- phase inverter x? (0,,,,,,,,,,,, +,,192,PF_S,0.001,0-2000,Power factor of phase S in three- phase inverter x?(0,,,,,,,,,,,, +,,400,FaultRecord1_YAndM,,,Fault Records 1_ years & months,,,,,,,,,,,, +,,401,FaultRecord1_DAndH,,,Fault Records 1_ days & hours,,,,,,,,,,,, +,,402,FaultRecord1_MAndS,,,Fault Records 1_ minutes & seconds,,,,,,,,,,,, +,,403,FaultRecord1_Code,,,Fault Records 1_ fault code,,,,,,,,,,,, +,,404,FaultRecord1_Value,,,Fault Records 1_ fault value,,,,,,,,,,,, +,,405,FaultRecord1_SetOrClr,,0/1,Fault Records 1_Fault occurred or cleared (0-fault occurred,,,,,,,,,,,, +,,406,FaultRecord2_YAndM,,,Fault Records 2_ years & months,,,,,,,,,,,, +,,407,FaultRecord2_DAndH,,,Fault Records 2_ days & hours,,,,,,,,,,,, +,,408,FaultRecord2_MAndS,,,Fault Records 2_ minutes & seconds,,,,,,,,,,,, +,,409,FaultRecord2_Code,,,Fault Records 2_ fault code,,,,,,,,,,,, +,,410,FaultRecord2_Value,,,Fault Records 2_Fault value,,,,,,,,,,,, +,,411,FaultRecord2_SetOrClr,,0/1,Fault Records 2_Fault occurred or clear (0 - Fault Occurred,,,,,,,,,,,, +,,994,FaultRecord100_YAndM,,,Fault Records 100_ years & months,,,,,,,,,,,, +,,995,FaultRecord100_DAndH,,,Fault records 100_ days & hours,,,,,,,,,,,, +,,996,FaultRecord100_MAndS,,,Fault Records 100_minutes & seconds,,,,,,,,,,,, +,,997,FaultRecord100_Code,,,Fault Records 100_ fault code,,,,,,,,,,,, +,,998,FaultRecord100_Value,,,The fault record is 100_ fault value,,,,,,,,,,,, +,,999,FaultRecord100_SetOrClr,,0/1,Fault Records 100_Fault Occurred or Cleared (0 - Fault Occurred,,,,,,,,,,,, +,,1000,WarnRecord1_YAndM,,,Alarm Records 1_ years & months,,,,,,,,,,,, +,,1001,WarnRecord1_DAndH,,,Alarm Records 1_ days & hours,,,,,,,,,,,, +,,1002,WarnRecord1_MAndS,,,Alarm records 1_ minutes &seconds,,,,,,,,,,,, +,,1003,WarnRecord1_Code,,,Alarm Records 1_ alarm code,,,,,,,,,,,, +,,1004,WarnRecord1_Value,,,Alarm Records 1_Alarm value,,,,,,,,,,,, +,,1005,WarnRecord1_SetOrClr,,0/1,Alarm Records 1_Alarm occurred or cleared (0 - alarm occurred,,,,,,,,,,,, +,,1006,WarnRecord2_YAndM,,,Alarm records 2_ years & months,,,,,,,,,,,, +,,1007,WarnRecord2_DAndH,,,Alarm Records 2_ days & hour,,,,,,,,,,,, +,,1008,WarnRecord2_MAndS,,,Alarm Records 2_ minutes & seconds,,,,,,,,,,,, +,,1009,WarnRecord2_Code,,,Alarm Records 2_Alarm code,,,,,,,,,,,, +,,1010,WarnRecord2_Value,,,Alarm Records 2_Alarm value,,,,,,,,,,,, +,,1011,WarnRecord2_SetOrClr,,0/1,Alarm Records 2_Alarm occurred or cleared (0 - alarm occurred,,,,,,,,,,,, +,,1594,WarnRecord100_YAndM,,,Alarm Records 100_ years & months,,,,,,,,,,,, +,,1595,WarnRecord100_DAndH,,,Alarm Records for 100_ days & hours,,,,,,,,,,,, +,,1596,WarnRecord100_MAndS,,,Alarm records 100_ minutes &seconds,,,,,,,,,,,, +,,1597,WarnRecord100_Code,,,Alarm Records 100_ alarm code,,,,,,,,,,,, +,,1598,WarnRecord100_Value,,,Alarm records 100_alarm value,,,,,,,,,,,, +,,1599,WarnRecord100_SetOrClr,,0/1,Alarm Records 100_Alarm occurred or cleared (0 - alarm occurred,,,,,,,,,,,, diff --git a/protocols/growatt/growatt_bms_rs485_1xsxxp_ess_v2.01.holding_registry_map.csv b/protocols/growatt/growatt_bms_rs485_1xsxxp_ess_v2.01.holding_registry_map.csv new file mode 100644 index 0000000..fd6a7b2 --- /dev/null +++ b/protocols/growatt/growatt_bms_rs485_1xsxxp_ess_v2.01.holding_registry_map.csv @@ -0,0 +1,10 @@ +variable name,data type,register,documented name,description,write,values,unit +,,x0001 ,MCU Software version ,,R,, +,,x0002,Gauge Version ,,,, +,ASCII,x0003-x0004,Gauge FR Version ,,,, +,6bit,x0005,Date Second,,,, +,6bit,x0005.b6,Date Minute,,,, +,6bit,x0005.b12,Date Hour,,,, +,6bit,x0006,Date Day,,,, +,6bit,x0006.b6,Date Month,,,, +,6bit,x0006.b12,Date Year,,,, diff --git a/protocols/growatt/growatt_bms_rs485_1xsxxp_ess_v2.01.json b/protocols/growatt/growatt_bms_rs485_1xsxxp_ess_v2.01.json new file mode 100644 index 0000000..0ea68b9 --- /dev/null +++ b/protocols/growatt/growatt_bms_rs485_1xsxxp_ess_v2.01.json @@ -0,0 +1,5 @@ +{ + "NOTE" : "INCOMPLETE - WORK IN PROGRESS", + "transport" : "modbus_rtu", + "baud" : 9600 +} \ No newline at end of file diff --git a/protocols/voltronic/voltronic_bms_2020_03_25.holding_registry_map.csv b/protocols/voltronic/voltronic_bms_2020_03_25.holding_registry_map.csv index e37c41a..b5be9ed 100644 --- a/protocols/voltronic/voltronic_bms_2020_03_25.holding_registry_map.csv +++ b/protocols/voltronic/voltronic_bms_2020_03_25.holding_registry_map.csv @@ -1,8 +1,8 @@ variable name,data type,register,documented_name,description,writable,values,unit,note ,,1,Protocol_Type,,R,,,Positive: charging Negative: discharging ,,2,Protocol_Version,,R,,, -,ASCII,3~4,BMS_Firmware_Version,,,,, -,ASCII,4~5,BMS_Hardware_Version,,,,, +,HEX,3~4,BMS_Firmware_Version,,,,, +,HEX,4~5,BMS_Hardware_Version,,,,, ,,,,,,,, ,,x10,Number_of_Cells,,,,, ,,x11,Cell_Voltage_1,,,,0.1V,