jblance / mpp-solar

Python package to communicate to MPP Solar PIP-4048MS inverters (and similar)
MIT License
365 stars 151 forks source link

JK-BMS over TTL #389

Closed proxer05 closed 8 months ago

proxer05 commented 1 year ago

Hi, I implemented logic to read data over ttl(https://github.com/proxer05/mpp-solar/commit/666c5c69873df93a9705fd79b4cf2a9a364c0821) but i have problem with decoding. Response length depends on cell count so its not possible to use static "addresses" of data(atleast for reading all data). Tested on B1A20S15P(v11 hw)

Debug info if needed jkbms -b 115200 -P JKSERIAL -D -p /dev/ttyUSB0 2023-08-14 13:36:08,725:INFO:__init__:main@216: Solar Device Command Utility, version: 0.16.10, python version: 3.11.2 2023-08-14 13:36:08,726:DEBUG:mqttbrokerc:__init__@29: mqttbroker config: {'name': 'localhost', 'port': 1883, 'user': None, 'pass': None} 2023-08-14 13:36:08,726:DEBUG:__init__:main@251: MqttBroker name: localhost, port: 1883, user: None 2023-08-14 13:36:08,726:DEBUG:__init__:main@253: udp port 5555 2023-08-14 13:36:08,726:DEBUG:__init__:main@255: Using Postgres None 2023-08-14 13:36:08,726:DEBUG:__init__:main@258: Using Mongo None with mppsolar 2023-08-14 13:36:08,726:INFO:__init__:main@359: Creating device "unnamed" (type: "jkbms") on port "/dev/ttyUSB0 (porttype=None)" using protocol "JKSERIAL" 2023-08-14 13:36:08,729:DEBUG:__init__:main@363: device_class 2023-08-14 13:36:08,729:DEBUG:device:__init__@34: __init__ args () 2023-08-14 13:36:08,729:DEBUG:device:__init__@35: __init__ kwargs {'name': 'unnamed', 'port': '/dev/ttyUSB0', 'protocol': 'JKSERIAL', 'baud': 115200, 'porttype': None, 'mqtt_broker': , 'udp_port': '5555', 'mongo_url': None, 'mongo_db': 'mppsolar'} 2023-08-14 13:36:08,729:DEBUG:__init__:get_port_type@69: port matches ttyusb 2023-08-14 13:36:08,729:INFO:__init__:get_port@111: Using serialio for communications 2023-08-14 13:36:08,737:DEBUG:__init__:get_protocol@13: Protocol JKSERIAL 2023-08-14 13:36:08,839:DEBUG:device:__init__@39: __init__ name unnamed, port , protocol JKBMS TTL serial communication protocol handler 2023-08-14 13:36:08,840:DEBUG:__init__:main@408: Commands [(, '', '', 'screen', None, None)] 2023-08-14 13:36:08,840:INFO:__init__:main@413: Looping 1 commands 2023-08-14 13:36:08,840:INFO:__init__:main@423: Getting results from device: jkbms device - name: unnamed, port: , protocol: JKBMS TTL serial communication protocol handler for command: , tag: , outputs: screen 2023-08-14 13:36:08,840:INFO:device:run_command@51: Running command 2023-08-14 13:36:08,840:INFO:jkserial:get_full_command@49: Using protocol b'JKSERIAL' with 1 commands 2023-08-14 13:36:08,840:DEBUG:abstractprotocol:get_command_defn@71: Processing command 'getBalancerData' 2023-08-14 13:36:08,840:DEBUG:abstractprotocol:get_command_defn@73: Found command getBalancerData in protocol b'JKSERIAL' 2023-08-14 13:36:08,840:DEBUG:jkserial:get_full_command@91: cmd with crc: bytearray(b'NW\x00\x13\x00\x00\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00h\x00\x00\x01&') 2023-08-14 13:36:08,840:INFO:device:run_command@81: full command bytearray(b'NW\x00\x13\x00\x00\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00h\x00\x00\x01&') for command getBalancerData 2023-08-14 13:36:08,840:DEBUG:abstractprotocol:get_command_defn@71: Processing command 'getBalancerData' 2023-08-14 13:36:08,840:DEBUG:abstractprotocol:get_command_defn@73: Found command getBalancerData in protocol b'JKSERIAL' 2023-08-14 13:36:08,841:DEBUG:serialio:send_and_receive@19: port /dev/ttyUSB0, baudrate 115200 2023-08-14 13:36:08,842:DEBUG:serialio:send_and_receive@22: Executing command via serialio... 2023-08-14 13:36:08,944:DEBUG:serialio:send_and_receive@30: serial response was: b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r' 2023-08-14 13:36:09,059:DEBUG:device:run_command@98: Send and Receive Response b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r' 2023-08-14 13:36:09,060:INFO:abstractprotocol:decode@246: response passed to decode: b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r' 2023-08-14 13:36:09,060:DEBUG:abstractprotocol:get_command_defn@71: Processing command 'getBalancerData' 2023-08-14 13:36:09,060:DEBUG:abstractprotocol:get_command_defn@73: Found command getBalancerData in protocol b'JKSERIAL' 2023-08-14 13:36:09,060:INFO:abstractprotocol:decode@290: Processing response of type POSITIONAL 2023-08-14 13:36:09,061:DEBUG:jkserial:get_responses@119: get_responses: responses [b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r'] 2023-08-14 13:36:09,061:DEBUG:abstractprotocol:decode@294: trimmed and split responses: [b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r'] 2023-08-14 13:36:09,061:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-14 13:36:09,061:DEBUG:abstractprotocol:decode@522: Got defn ['Hex2Str', 50, 'response', ''] 2023-08-14 13:36:09,061:DEBUG:abstractprotocol:process_response@118: Processing data_type: Hex2Str for data_name: response, raw_value b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r' 2023-08-14 13:36:09,062:DEBUG:abstractprotocol:process_response@207: Processing format string Hex2Str(raw_value) 2023-08-14 13:36:09,062:DEBUG:protocol_helpers:Hex2Str@105: Hex b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r' decoded to 4e57011b00000000030001792a010f90020f92030f97040f90050f93060f93070f92080f90090f940a0f900b0f920c0f910d 2023-08-14 13:36:09,062:INFO:device:run_command@116: Decoded response {'_command': 'getBalancerData', '_command_description': 'Get Balancer Data', 'raw_response': ['NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r', ''], 'response': ['4e57011b00000000030001792a010f90020f92030f97040f90050f93060f93070f92080f90090f940a0f900b0f920c0f910d', '']} 2023-08-14 13:36:09,062:DEBUG:__init__:main@427: results: {'_command': 'getBalancerData', '_command_description': 'Get Balancer Data', 'raw_response': ['NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r', ''], 'response': ['4e57011b00000000030001792a010f90020f92030f97040f90050f93060f93070f92080f90090f940a0f900b0f920c0f910d', '']} 2023-08-14 13:36:09,063:INFO:__init__:get_output@40: attempting to create output processor: screen 2023-08-14 13:36:09,065:DEBUG:screen:__init__@15: processor.screen __init__ kwargs {} 2023-08-14 13:36:09,065:DEBUG:__init__:main@433: Using output filter: None 2023-08-14 13:36:09,065:INFO:screen:output@21: Using output processor: screen 2023-08-14 13:36:09,065:DEBUG:screen:output@22: kwargs {'data': {'_command': 'getBalancerData', '_command_description': 'Get Balancer Data', 'raw_response': ['NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x92\x03\x0f\x97\x04\x0f\x90\x05\x0f\x93\x06\x0f\x93\x07\x0f\x92\x08\x0f\x90\t\x0f\x94\n\x0f\x90\x0b\x0f\x92\x0c\x0f\x91\r', ''], 'response': ['4e57011b00000000030001792a010f90020f92030f97040f90050f93060f93070f92080f90090f940a0f900b0f920c0f910d', '']}, 'tag': '', 'name': 'unnamed', 'mqtt_broker': , 'udp_port': '5555', 'postgres_url': None, 'mongo_url': None, 'mongo_db': 'mppsolar', 'mqtt_topic': None, 'filter': None, 'excl_filter': None, 'keep_case': False} 2023-08-14 13:36:09,066:DEBUG:screen:output@74: displayData: {'response': ['4e57011b00000000030001792a010f90020f92030f97040f90050f93060f93070f92080f90090f940a0f900b0f920c0f910d', '']} Command: getBalancerData - Get Balancer Data -------------------------------------------------------------------------------- Parameter Value Unit response 4e57011b00000000030001792a010f90020f92030f97040f90050f93060f93070f92080f90090f940a0f900b0f920c0f910d -------------------------------------------------------------------------------- 2023-08-14 13:36:09,066:DEBUG:__init__:main@458: Not daemon, so not looping

Update: When trying to get read all data only part of it is fetched. Partial reads like mos temperature are not affected(23 bytes)

jblance commented 1 year ago

i think the data is including a \r so the standard serial reader is truncating the data (its a readuntil you find \r) can you try jkbms -b 115200 -P JKSERIAL -D -p /dev/ttyUSB0 --porttype daly

jblance commented 1 year ago

yep definitely a premature data termination due to the serial input read logic, cell number 13 (0d in hex) is interpreted as end of data by the serial readline logic (porttype daly doesnt do this)

partial decode below seem to work (assuming there are 14 cells in your setup)

4e57011b00000000030001792a010f90020f92030f97040f90050f93060f93070f92080f90090f940a0f900b0f920c0f910d
bytes returned = 50 

1 start (2) 4e57
2 length (2) 01 1b -> 283
3 terminal #(4) 00 00 00 00
4 command word (1) 03 -> read the data
5 frame source (1) 00 -> 0.BMS,1. Bluetooth,2.GPS,3. PC
6 transport type (1) 01 -> 0 for request frame, 1 for reply frame. 2 for active reporting 
7 data (xx) 79 2a 010f90 020f92 030f97 040f90 050f93 060f93 070f92 080f90 090f94 0a0f90 0b0f92 0c0f91 0d
8 record # (4)  
9 end of data (1 - 0x68) 
10 checksum (4)  

Data decode
79 2a 010f90 020f92 030f97 040f90 050f93 060f93 070f92 080f90 090f94 0a0f90 0b0f92 0c0f91 0d
1 0x79 'Single battery voltage'
2 2a byte length = 42 or 14 cells?
3 #cells*3 = cell#, voltage, eg
  01 0f90  02 0f92  03 0f97
  #1 3984  #2 3986  #3 3991
proxer05 commented 1 year ago

Yeh, now it works. Do you have idea how to adjust response addresses based on cell count as currently my setup will only work on 14 cells setup? Thanks anyway. https://github.com/proxer05/mpp-solar/commit/358b3589618942300adf6b1d31a52d6ff5fbc948

Logs (current and capacity needs other formula not important atm) jkbms -b 115200 -P JKSERIAL -D -p /dev/ttyUSB0 --porttype daly 2023-08-15 12:02:55,863:INFO:__init__:main@216: Solar Device Command Utility, version: 0.16.10, python version: 3.11.2 2023-08-15 12:02:55,864:DEBUG:mqttbrokerc:__init__@29: mqttbroker config: {'name': 'localhost', 'port': 1883, 'user': None, 'pass': None} 2023-08-15 12:02:55,864:DEBUG:__init__:main@251: MqttBroker name: localhost, port: 1883, user: None 2023-08-15 12:02:55,864:DEBUG:__init__:main@253: udp port 5555 2023-08-15 12:02:55,864:DEBUG:__init__:main@255: Using Postgres None 2023-08-15 12:02:55,864:DEBUG:__init__:main@258: Using Mongo None with mppsolar 2023-08-15 12:02:55,864:INFO:__init__:main@359: Creating device "unnamed" (type: "jkbms") on port "/dev/ttyUSB0 (porttype=daly)" using protocol "JKSERIAL" 2023-08-15 12:02:55,867:DEBUG:__init__:main@363: device_class 2023-08-15 12:02:55,867:DEBUG:device:__init__@34: __init__ args () 2023-08-15 12:02:55,867:DEBUG:device:__init__@35: __init__ kwargs {'name': 'unnamed', 'port': '/dev/ttyUSB0', 'protocol': 'JKSERIAL', 'baud': 115200, 'porttype': 'daly', 'mqtt_broker': , 'udp_port': '5555', 'mongo_url': None, 'mongo_db': 'mppsolar'} 2023-08-15 12:02:55,867:INFO:__init__:get_port@81: Port overide - using port 'daly' 2023-08-15 12:02:55,867:DEBUG:__init__:get_port_type@57: port matches daly 2023-08-15 12:02:55,867:INFO:__init__:get_port@117: Using dalyserialio for communications 2023-08-15 12:02:55,873:DEBUG:__init__:get_protocol@13: Protocol JKSERIAL 2023-08-15 12:02:55,978:DEBUG:device:__init__@39: __init__ name unnamed, port , protocol JKBMS TTL serial communication protocol handler 2023-08-15 12:02:55,978:DEBUG:__init__:main@408: Commands [(, '', '', 'screen', None, None)] 2023-08-15 12:02:55,978:INFO:__init__:main@413: Looping 1 commands 2023-08-15 12:02:55,978:INFO:__init__:main@423: Getting results from device: jkbms device - name: unnamed, port: , protocol: JKBMS TTL serial communication protocol handler for command: , tag: , outputs: screen 2023-08-15 12:02:55,978:INFO:device:run_command@51: Running command 2023-08-15 12:02:55,978:INFO:jkserial:get_full_command@103: Using protocol b'JKSERIAL' with 1 commands 2023-08-15 12:02:55,978:DEBUG:abstractprotocol:get_command_defn@71: Processing command 'getBalancerData' 2023-08-15 12:02:55,978:DEBUG:abstractprotocol:get_command_defn@73: Found command getBalancerData in protocol b'JKSERIAL' 2023-08-15 12:02:55,979:DEBUG:jkserial:get_full_command@145: cmd with crc: bytearray(b'NW\x00\x13\x00\x00\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00h\x00\x00\x01&') 2023-08-15 12:02:55,979:INFO:device:run_command@81: full command bytearray(b'NW\x00\x13\x00\x00\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00h\x00\x00\x01&') for command getBalancerData 2023-08-15 12:02:55,979:DEBUG:abstractprotocol:get_command_defn@71: Processing command 'getBalancerData' 2023-08-15 12:02:55,979:DEBUG:abstractprotocol:get_command_defn@73: Found command getBalancerData in protocol b'JKSERIAL' 2023-08-15 12:02:55,979:DEBUG:dalyserialio:send_and_receive@19: port /dev/ttyUSB0, baudrate 115200 2023-08-15 12:02:55,981:DEBUG:dalyserialio:send_and_receive@22: Executing command via dalyserialio... 2023-08-15 12:02:56,481:DEBUG:dalyserialio:send_and_receive@32: bytes waiting 285 2023-08-15 12:02:56,982:DEBUG:dalyserialio:send_and_receive@32: bytes waiting 0 2023-08-15 12:02:56,982:DEBUG:dalyserialio:send_and_receive@38: serial response was: b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x91\x03\x0f\x94\x04\x0f\x8e\x05\x0f\x92\x06\x0f\x91\x07\x0f\x91\x08\x0f\x91\t\x0f\x93\n\x0f\x8e\x0b\x0f\x91\x0c\x0f\x90\r\x0f\x90\x0e\x0f\x8d\x80\x00!\x81\x00\x1c\x82\x00\x1e\x83\x15\xca\x84\x81\xc5\x85d\x86\x02\x87\x00\x19\x89\x00\x00\x16\xda\x8a\x00\x0e\x8b\x00\x00\x8c\x00\x03\x8e\x16\xb2\x8f\x10\xf4\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b\xb8\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d\xa1\x00d\xa2\x00\x14\xa3\x00<\xa4\x00<\xa5\x00\x01\xa6\x00\x03\xa7\xff\xec\xa8\xff\xf6\xa9\x0e\xaa\x00\x00\x00\xea\xab\x01\xac\x01\xad\x047\xae\x01\xaf\x01\xb0\x00\n\xb1\x14\xb2123456\x00\x00\x00\x00\xb3\x00\xb4Input Us\xb52306\xb6\x00\x01\x82\xe3\xb711.XW_S11.261__\xb8\x00\xb9\x00\x00\x00\xea\xbaInput UserdaJK_B1A20S15P\xc0\x01\x00\x00\x00\x00h\x00\x00Q\xd6' 2023-08-15 12:02:57,095:DEBUG:device:run_command@98: Send and Receive Response b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x91\x03\x0f\x94\x04\x0f\x8e\x05\x0f\x92\x06\x0f\x91\x07\x0f\x91\x08\x0f\x91\t\x0f\x93\n\x0f\x8e\x0b\x0f\x91\x0c\x0f\x90\r\x0f\x90\x0e\x0f\x8d\x80\x00!\x81\x00\x1c\x82\x00\x1e\x83\x15\xca\x84\x81\xc5\x85d\x86\x02\x87\x00\x19\x89\x00\x00\x16\xda\x8a\x00\x0e\x8b\x00\x00\x8c\x00\x03\x8e\x16\xb2\x8f\x10\xf4\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b\xb8\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d\xa1\x00d\xa2\x00\x14\xa3\x00<\xa4\x00<\xa5\x00\x01\xa6\x00\x03\xa7\xff\xec\xa8\xff\xf6\xa9\x0e\xaa\x00\x00\x00\xea\xab\x01\xac\x01\xad\x047\xae\x01\xaf\x01\xb0\x00\n\xb1\x14\xb2123456\x00\x00\x00\x00\xb3\x00\xb4Input Us\xb52306\xb6\x00\x01\x82\xe3\xb711.XW_S11.261__\xb8\x00\xb9\x00\x00\x00\xea\xbaInput UserdaJK_B1A20S15P\xc0\x01\x00\x00\x00\x00h\x00\x00Q\xd6' 2023-08-15 12:02:57,096:INFO:abstractprotocol:decode@246: response passed to decode: b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x91\x03\x0f\x94\x04\x0f\x8e\x05\x0f\x92\x06\x0f\x91\x07\x0f\x91\x08\x0f\x91\t\x0f\x93\n\x0f\x8e\x0b\x0f\x91\x0c\x0f\x90\r\x0f\x90\x0e\x0f\x8d\x80\x00!\x81\x00\x1c\x82\x00\x1e\x83\x15\xca\x84\x81\xc5\x85d\x86\x02\x87\x00\x19\x89\x00\x00\x16\xda\x8a\x00\x0e\x8b\x00\x00\x8c\x00\x03\x8e\x16\xb2\x8f\x10\xf4\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b\xb8\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d\xa1\x00d\xa2\x00\x14\xa3\x00<\xa4\x00<\xa5\x00\x01\xa6\x00\x03\xa7\xff\xec\xa8\xff\xf6\xa9\x0e\xaa\x00\x00\x00\xea\xab\x01\xac\x01\xad\x047\xae\x01\xaf\x01\xb0\x00\n\xb1\x14\xb2123456\x00\x00\x00\x00\xb3\x00\xb4Input Us\xb52306\xb6\x00\x01\x82\xe3\xb711.XW_S11.261__\xb8\x00\xb9\x00\x00\x00\xea\xbaInput UserdaJK_B1A20S15P\xc0\x01\x00\x00\x00\x00h\x00\x00Q\xd6' 2023-08-15 12:02:57,096:DEBUG:abstractprotocol:get_command_defn@71: Processing command 'getBalancerData' 2023-08-15 12:02:57,096:DEBUG:abstractprotocol:get_command_defn@73: Found command getBalancerData in protocol b'JKSERIAL' 2023-08-15 12:02:57,097:INFO:abstractprotocol:decode@290: Processing response of type POSITIONAL 2023-08-15 12:02:57,097:DEBUG:jkserial:get_responses@173: get_responses: responses [b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01', b'y', b'*', b'\x01', b'\x0f\x90', b'\x02', b'\x0f\x91', b'\x03', b'\x0f\x94', b'\x04', b'\x0f\x8e', b'\x05', b'\x0f\x92', b'\x06', b'\x0f\x91', b'\x07', b'\x0f\x91', b'\x08', b'\x0f\x91', b'\t', b'\x0f\x93', b'\n', b'\x0f\x8e', b'\x0b', b'\x0f\x91', b'\x0c', b'\x0f\x90', b'\r', b'\x0f\x90', b'\x0e', b'\x0f\x8d', b'\x80', b'\x00!', b'\x81', b'\x00\x1c', b'\x82', b'\x00\x1e', b'\x83', b'\x15\xca', b'\x84', b'\x81\xc5', b'\x85', b'd', b'\x86\x02', b'\x87', b'\x00\x19', b'\x89', b'\x00\x00\x16\xda', b'\x8a', b'\x00\x0e', b'\x8b', b'\x00\x00', b'\x8c', b'\x00\x03', b'\x8e\x16\xb2\x8f\x10\xf4\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b\xb8\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d\xa1\x00d\xa2\x00\x14\xa3\x00<\xa4\x00<\xa5\x00\x01\xa6\x00\x03\xa7\xff\xec\xa8\xff\xf6\xa9\x0e\xaa\x00\x00\x00\xea\xab\x01\xac\x01\xad\x047\xae\x01\xaf\x01\xb0\x00\n\xb1\x14\xb2123456\x00\x00\x00\x00\xb3\x00\xb4Input Us\xb52306\xb6\x00\x01\x82\xe3\xb711.XW_S11.261__\xb8\x00\xb9\x00\x00\x00\xea\xbaInput UserdaJK_B1A20S15P\xc0\x01\x00\x00\x00\x00h\x00\x00Q\xd6'] 2023-08-15 12:02:57,097:DEBUG:abstractprotocol:decode@294: trimmed and split responses: [b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01', b'y', b'*', b'\x01', b'\x0f\x90', b'\x02', b'\x0f\x91', b'\x03', b'\x0f\x94', b'\x04', b'\x0f\x8e', b'\x05', b'\x0f\x92', b'\x06', b'\x0f\x91', b'\x07', b'\x0f\x91', b'\x08', b'\x0f\x91', b'\t', b'\x0f\x93', b'\n', b'\x0f\x8e', b'\x0b', b'\x0f\x91', b'\x0c', b'\x0f\x90', b'\r', b'\x0f\x90', b'\x0e', b'\x0f\x8d', b'\x80', b'\x00!', b'\x81', b'\x00\x1c', b'\x82', b'\x00\x1e', b'\x83', b'\x15\xca', b'\x84', b'\x81\xc5', b'\x85', b'd', b'\x86\x02', b'\x87', b'\x00\x19', b'\x89', b'\x00\x00\x16\xda', b'\x8a', b'\x00\x0e', b'\x8b', b'\x00\x00', b'\x8c', b'\x00\x03', b'\x8e\x16\xb2\x8f\x10\xf4\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b\xb8\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d\xa1\x00d\xa2\x00\x14\xa3\x00<\xa4\x00<\xa5\x00\x01\xa6\x00\x03\xa7\xff\xec\xa8\xff\xf6\xa9\x0e\xaa\x00\x00\x00\xea\xab\x01\xac\x01\xad\x047\xae\x01\xaf\x01\xb0\x00\n\xb1\x14\xb2123456\x00\x00\x00\x00\xb3\x00\xb4Input Us\xb52306\xb6\x00\x01\x82\xe3\xb711.XW_S11.261__\xb8\x00\xb9\x00\x00\x00\xea\xbaInput UserdaJK_B1A20S15P\xc0\x01\x00\x00\x00\x00h\x00\x00Q\xd6'] 2023-08-15 12:02:57,098:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,098:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 11, 'discard', ''] 2023-08-15 12:02:57,098:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: discard, raw_value b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01' 2023-08-15 12:02:57,098:DEBUG:abstractprotocol:process_response@124: Discarding discard:b'NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01' 2023-08-15 12:02:57,098:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,099:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'discard', ''] 2023-08-15 12:02:57,099:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: discard, raw_value b'y' 2023-08-15 12:02:57,099:DEBUG:abstractprotocol:process_response@124: Discarding discard:b'y' 2023-08-15 12:02:57,099:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,099:DEBUG:abstractprotocol:decode@522: Got defn ['Hex2Int:r/3', 1, 'Cell count', ''] 2023-08-15 12:02:57,099:DEBUG:abstractprotocol:process_response@117: Got template r/3 for Cell count b'*' 2023-08-15 12:02:57,099:DEBUG:abstractprotocol:process_response@118: Processing data_type: Hex2Int for data_name: Cell count, raw_value b'*' 2023-08-15 12:02:57,100:DEBUG:abstractprotocol:process_response@207: Processing format string Hex2Int(raw_value) 2023-08-15 12:02:57,100:DEBUG:protocol_helpers:Hex2Int@92: Hex b'*' decoded to 42 2023-08-15 12:02:57,100:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,101:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '1 cell number', ''] 2023-08-15 12:02:57,101:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 1 cell number, raw_value b'\x01' 2023-08-15 12:02:57,101:DEBUG:abstractprotocol:process_response@124: Discarding 1 cell number:b'\x01' 2023-08-15 12:02:57,101:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,101:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '1 Cell Voltage', 'V'] 2023-08-15 12:02:57,101:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 1 Cell Voltage b'\x0f\x90' 2023-08-15 12:02:57,102:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 1 Cell Voltage, raw_value b'\x0f\x90' 2023-08-15 12:02:57,102:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,102:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x90' 2 byte decoded to 3984 2023-08-15 12:02:57,102:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,103:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '2 cell number', ''] 2023-08-15 12:02:57,103:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 2 cell number, raw_value b'\x02' 2023-08-15 12:02:57,103:DEBUG:abstractprotocol:process_response@124: Discarding 2 cell number:b'\x02' 2023-08-15 12:02:57,103:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,103:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '2 Cell Voltage', 'V'] 2023-08-15 12:02:57,103:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 2 Cell Voltage b'\x0f\x91' 2023-08-15 12:02:57,104:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 2 Cell Voltage, raw_value b'\x0f\x91' 2023-08-15 12:02:57,104:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,104:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x91' 2 byte decoded to 3985 2023-08-15 12:02:57,104:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,105:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '3 cell number', ''] 2023-08-15 12:02:57,105:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 3 cell number, raw_value b'\x03' 2023-08-15 12:02:57,105:DEBUG:abstractprotocol:process_response@124: Discarding 3 cell number:b'\x03' 2023-08-15 12:02:57,105:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,105:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '3 Cell Voltage', 'V'] 2023-08-15 12:02:57,105:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 3 Cell Voltage b'\x0f\x94' 2023-08-15 12:02:57,106:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 3 Cell Voltage, raw_value b'\x0f\x94' 2023-08-15 12:02:57,106:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,106:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x94' 2 byte decoded to 3988 2023-08-15 12:02:57,106:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,106:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '4 cell number', ''] 2023-08-15 12:02:57,106:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 4 cell number, raw_value b'\x04' 2023-08-15 12:02:57,107:DEBUG:abstractprotocol:process_response@124: Discarding 4 cell number:b'\x04' 2023-08-15 12:02:57,107:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,107:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '4 Cell Voltage', 'V'] 2023-08-15 12:02:57,107:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 4 Cell Voltage b'\x0f\x8e' 2023-08-15 12:02:57,107:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 4 Cell Voltage, raw_value b'\x0f\x8e' 2023-08-15 12:02:57,107:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,108:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x8e' 2 byte decoded to 3982 2023-08-15 12:02:57,108:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,108:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '5 cell number', ''] 2023-08-15 12:02:57,108:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 5 cell number, raw_value b'\x05' 2023-08-15 12:02:57,108:DEBUG:abstractprotocol:process_response@124: Discarding 5 cell number:b'\x05' 2023-08-15 12:02:57,108:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,109:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '5 Cell Voltage', 'V'] 2023-08-15 12:02:57,109:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 5 Cell Voltage b'\x0f\x92' 2023-08-15 12:02:57,109:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 5 Cell Voltage, raw_value b'\x0f\x92' 2023-08-15 12:02:57,109:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,109:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x92' 2 byte decoded to 3986 2023-08-15 12:02:57,110:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,110:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '6 cell number', ''] 2023-08-15 12:02:57,110:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 6 cell number, raw_value b'\x06' 2023-08-15 12:02:57,110:DEBUG:abstractprotocol:process_response@124: Discarding 6 cell number:b'\x06' 2023-08-15 12:02:57,111:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,111:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '6 Cell Voltage', 'V'] 2023-08-15 12:02:57,111:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 6 Cell Voltage b'\x0f\x91' 2023-08-15 12:02:57,111:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 6 Cell Voltage, raw_value b'\x0f\x91' 2023-08-15 12:02:57,111:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,112:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x91' 2 byte decoded to 3985 2023-08-15 12:02:57,112:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,112:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '7 cell number', ''] 2023-08-15 12:02:57,112:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 7 cell number, raw_value b'\x07' 2023-08-15 12:02:57,112:DEBUG:abstractprotocol:process_response@124: Discarding 7 cell number:b'\x07' 2023-08-15 12:02:57,113:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,113:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '7 Cell Voltage', 'V'] 2023-08-15 12:02:57,113:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 7 Cell Voltage b'\x0f\x91' 2023-08-15 12:02:57,113:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 7 Cell Voltage, raw_value b'\x0f\x91' 2023-08-15 12:02:57,113:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,113:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x91' 2 byte decoded to 3985 2023-08-15 12:02:57,114:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,114:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '8 cell number', ''] 2023-08-15 12:02:57,114:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 8 cell number, raw_value b'\x08' 2023-08-15 12:02:57,114:DEBUG:abstractprotocol:process_response@124: Discarding 8 cell number:b'\x08' 2023-08-15 12:02:57,114:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,115:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '8 Cell Voltage', 'V'] 2023-08-15 12:02:57,115:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 8 Cell Voltage b'\x0f\x91' 2023-08-15 12:02:57,115:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 8 Cell Voltage, raw_value b'\x0f\x91' 2023-08-15 12:02:57,115:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,115:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x91' 2 byte decoded to 3985 2023-08-15 12:02:57,116:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,116:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '9 cell number', ''] 2023-08-15 12:02:57,116:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 9 cell number, raw_value b'\t' 2023-08-15 12:02:57,116:DEBUG:abstractprotocol:process_response@124: Discarding 9 cell number:b'\t' 2023-08-15 12:02:57,116:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,116:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '9 Cell Voltage', 'V'] 2023-08-15 12:02:57,116:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 9 Cell Voltage b'\x0f\x93' 2023-08-15 12:02:57,117:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 9 Cell Voltage, raw_value b'\x0f\x93' 2023-08-15 12:02:57,117:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,117:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x93' 2 byte decoded to 3987 2023-08-15 12:02:57,117:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,117:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '10 cell number', ''] 2023-08-15 12:02:57,118:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 10 cell number, raw_value b'\n' 2023-08-15 12:02:57,118:DEBUG:abstractprotocol:process_response@124: Discarding 10 cell number:b'\n' 2023-08-15 12:02:57,118:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,118:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '10 Cell Voltage', 'V'] 2023-08-15 12:02:57,118:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 10 Cell Voltage b'\x0f\x8e' 2023-08-15 12:02:57,118:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 10 Cell Voltage, raw_value b'\x0f\x8e' 2023-08-15 12:02:57,119:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,119:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x8e' 2 byte decoded to 3982 2023-08-15 12:02:57,119:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,119:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '11 cell number', ''] 2023-08-15 12:02:57,119:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 11 cell number, raw_value b'\x0b' 2023-08-15 12:02:57,120:DEBUG:abstractprotocol:process_response@124: Discarding 11 cell number:b'\x0b' 2023-08-15 12:02:57,120:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,120:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '11 Cell Voltage', 'V'] 2023-08-15 12:02:57,120:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 11 Cell Voltage b'\x0f\x91' 2023-08-15 12:02:57,120:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 11 Cell Voltage, raw_value b'\x0f\x91' 2023-08-15 12:02:57,120:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,121:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x91' 2 byte decoded to 3985 2023-08-15 12:02:57,121:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,121:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '12 cell number', ''] 2023-08-15 12:02:57,121:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 12 cell number, raw_value b'\x0c' 2023-08-15 12:02:57,122:DEBUG:abstractprotocol:process_response@124: Discarding 12 cell number:b'\x0c' 2023-08-15 12:02:57,122:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,122:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '12 Cell Voltage', 'V'] 2023-08-15 12:02:57,122:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 12 Cell Voltage b'\x0f\x90' 2023-08-15 12:02:57,122:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 12 Cell Voltage, raw_value b'\x0f\x90' 2023-08-15 12:02:57,122:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,123:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x90' 2 byte decoded to 3984 2023-08-15 12:02:57,123:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,123:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '13 cell number', ''] 2023-08-15 12:02:57,123:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 13 cell number, raw_value b'\r' 2023-08-15 12:02:57,124:DEBUG:abstractprotocol:process_response@124: Discarding 13 cell number:b'\r' 2023-08-15 12:02:57,124:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,124:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '13 Cell Voltage', 'V'] 2023-08-15 12:02:57,124:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 13 Cell Voltage b'\x0f\x90' 2023-08-15 12:02:57,124:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 13 Cell Voltage, raw_value b'\x0f\x90' 2023-08-15 12:02:57,125:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,125:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x90' 2 byte decoded to 3984 2023-08-15 12:02:57,125:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,125:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, '14 cell number', ''] 2023-08-15 12:02:57,125:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: 14 cell number, raw_value b'\x0e' 2023-08-15 12:02:57,126:DEBUG:abstractprotocol:process_response@124: Discarding 14 cell number:b'\x0e' 2023-08-15 12:02:57,126:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,126:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, '14 Cell Voltage', 'V'] 2023-08-15 12:02:57,126:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for 14 Cell Voltage b'\x0f\x8d' 2023-08-15 12:02:57,126:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: 14 Cell Voltage, raw_value b'\x0f\x8d' 2023-08-15 12:02:57,127:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,127:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x0f\x8d' 2 byte decoded to 3981 2023-08-15 12:02:57,127:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,127:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'MOS temp', ''] 2023-08-15 12:02:57,127:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: MOS temp, raw_value b'\x80' 2023-08-15 12:02:57,128:DEBUG:abstractprotocol:process_response@124: Discarding MOS temp:b'\x80' 2023-08-15 12:02:57,128:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,128:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short', 2, 'MOS temp', '°C'] 2023-08-15 12:02:57,128:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: MOS temp, raw_value b'\x00!' 2023-08-15 12:02:57,128:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,129:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x00!' 2 byte decoded to 33 2023-08-15 12:02:57,129:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,129:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Temp sensor 1', ''] 2023-08-15 12:02:57,129:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Temp sensor 1, raw_value b'\x81' 2023-08-15 12:02:57,129:DEBUG:abstractprotocol:process_response@124: Discarding Temp sensor 1:b'\x81' 2023-08-15 12:02:57,129:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,130:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short', 2, 'Temp sensor 1', '°C'] 2023-08-15 12:02:57,130:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: Temp sensor 1, raw_value b'\x00\x1c' 2023-08-15 12:02:57,130:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,130:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x00\x1c' 2 byte decoded to 28 2023-08-15 12:02:57,131:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,131:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Temp sensor 2', ''] 2023-08-15 12:02:57,131:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Temp sensor 2, raw_value b'\x82' 2023-08-15 12:02:57,131:DEBUG:abstractprotocol:process_response@124: Discarding Temp sensor 2:b'\x82' 2023-08-15 12:02:57,131:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,131:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short', 2, 'Temp sensor 2', '°C'] 2023-08-15 12:02:57,132:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: Temp sensor 2, raw_value b'\x00\x1e' 2023-08-15 12:02:57,132:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,132:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x00\x1e' 2 byte decoded to 30 2023-08-15 12:02:57,132:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,132:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Total battery voltage', ''] 2023-08-15 12:02:57,133:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Total battery voltage, raw_value b'\x83' 2023-08-15 12:02:57,133:DEBUG:abstractprotocol:process_response@124: Discarding Total battery voltage:b'\x83' 2023-08-15 12:02:57,133:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,133:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/100', 2, 'Total battery voltage', 'V'] 2023-08-15 12:02:57,133:DEBUG:abstractprotocol:process_response@117: Got template r/100 for Total battery voltage b'\x15\xca' 2023-08-15 12:02:57,133:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: Total battery voltage, raw_value b'\x15\xca' 2023-08-15 12:02:57,134:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,134:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x15\xca' 2 byte decoded to 5578 2023-08-15 12:02:57,134:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,134:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Balance current', ''] 2023-08-15 12:02:57,134:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Balance current, raw_value b'\x84' 2023-08-15 12:02:57,135:DEBUG:abstractprotocol:process_response@124: Discarding Balance current:b'\x84' 2023-08-15 12:02:57,135:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,135:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short:r/1000', 2, 'Balance current', 'A'] 2023-08-15 12:02:57,135:DEBUG:abstractprotocol:process_response@117: Got template r/1000 for Balance current b'\x81\xc5' 2023-08-15 12:02:57,135:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: Balance current, raw_value b'\x81\xc5' 2023-08-15 12:02:57,135:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,135:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x81\xc5' 2 byte decoded to -32315 2023-08-15 12:02:57,136:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,136:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Percent remaining', ''] 2023-08-15 12:02:57,136:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Percent remaining, raw_value b'\x85' 2023-08-15 12:02:57,136:DEBUG:abstractprotocol:process_response@124: Discarding Percent remaining:b'\x85' 2023-08-15 12:02:57,136:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,137:DEBUG:abstractprotocol:decode@522: Got defn ['Hex2Int', 1, 'Percent remaining', '%'] 2023-08-15 12:02:57,137:DEBUG:abstractprotocol:process_response@118: Processing data_type: Hex2Int for data_name: Percent remaining, raw_value b'd' 2023-08-15 12:02:57,137:DEBUG:abstractprotocol:process_response@207: Processing format string Hex2Int(raw_value) 2023-08-15 12:02:57,137:DEBUG:protocol_helpers:Hex2Int@92: Hex b'd' decoded to 100 2023-08-15 12:02:57,137:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,137:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 2, 'Number of battery sensors', ''] 2023-08-15 12:02:57,138:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Number of battery sensors, raw_value b'\x86\x02' 2023-08-15 12:02:57,138:DEBUG:abstractprotocol:process_response@124: Discarding Number of battery sensors:b'\x86\x02' 2023-08-15 12:02:57,138:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,138:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Cycle count', ''] 2023-08-15 12:02:57,138:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Cycle count, raw_value b'\x87' 2023-08-15 12:02:57,138:DEBUG:abstractprotocol:process_response@124: Discarding Cycle count:b'\x87' 2023-08-15 12:02:57,139:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,139:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short', 2, 'Cycle count', ''] 2023-08-15 12:02:57,139:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: Cycle count, raw_value b'\x00\x19' 2023-08-15 12:02:57,139:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,140:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x00\x19' 2 byte decoded to 25 2023-08-15 12:02:57,140:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,140:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Total capacity', ''] 2023-08-15 12:02:57,140:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Total capacity, raw_value b'\x89' 2023-08-15 12:02:57,140:DEBUG:abstractprotocol:process_response@124: Discarding Total capacity:b'\x89' 2023-08-15 12:02:57,141:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,141:DEBUG:abstractprotocol:decode@522: Got defn ['Hex2Str', 4, 'Total capacity', ''] 2023-08-15 12:02:57,141:DEBUG:abstractprotocol:process_response@118: Processing data_type: Hex2Str for data_name: Total capacity, raw_value b'\x00\x00\x16\xda' 2023-08-15 12:02:57,141:DEBUG:abstractprotocol:process_response@207: Processing format string Hex2Str(raw_value) 2023-08-15 12:02:57,141:DEBUG:protocol_helpers:Hex2Str@105: Hex b'\x00\x00\x16\xda' decoded to 000016da 2023-08-15 12:02:57,142:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,142:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Total number of battery strings', ''] 2023-08-15 12:02:57,142:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Total number of battery strings, raw_value b'\x8a' 2023-08-15 12:02:57,142:DEBUG:abstractprotocol:process_response@124: Discarding Total number of battery strings:b'\x8a' 2023-08-15 12:02:57,142:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,143:DEBUG:abstractprotocol:decode@522: Got defn ['BigHex2Short', 2, 'Total number of battery strings', ''] 2023-08-15 12:02:57,143:DEBUG:abstractprotocol:process_response@118: Processing data_type: BigHex2Short for data_name: Total number of battery strings, raw_value b'\x00\x0e' 2023-08-15 12:02:57,143:DEBUG:abstractprotocol:process_response@207: Processing format string BigHex2Short(raw_value) 2023-08-15 12:02:57,143:DEBUG:protocol_helpers:BigHex2Short@147: Hex b'\x00\x0e' 2 byte decoded to 14 2023-08-15 12:02:57,143:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,144:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Battery Warning Message', ''] 2023-08-15 12:02:57,144:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Battery Warning Message, raw_value b'\x8b' 2023-08-15 12:02:57,144:DEBUG:abstractprotocol:process_response@124: Discarding Battery Warning Message:b'\x8b' 2023-08-15 12:02:57,144:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,144:DEBUG:abstractprotocol:decode@522: Got defn ['Hex2Str', 2, 'Battery Warning Message', ''] 2023-08-15 12:02:57,144:DEBUG:abstractprotocol:process_response@118: Processing data_type: Hex2Str for data_name: Battery Warning Message, raw_value b'\x00\x00' 2023-08-15 12:02:57,145:DEBUG:abstractprotocol:process_response@207: Processing format string Hex2Str(raw_value) 2023-08-15 12:02:57,145:DEBUG:protocol_helpers:Hex2Str@105: Hex b'\x00\x00' decoded to 0000 2023-08-15 12:02:57,145:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,145:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 1, 'Battery status information', ''] 2023-08-15 12:02:57,145:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: Battery status information, raw_value b'\x8c' 2023-08-15 12:02:57,145:DEBUG:abstractprotocol:process_response@124: Discarding Battery status information:b'\x8c' 2023-08-15 12:02:57,146:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,146:DEBUG:abstractprotocol:decode@522: Got defn ['Hex2Str', 2, 'Battery status information', ''] 2023-08-15 12:02:57,146:DEBUG:abstractprotocol:process_response@118: Processing data_type: Hex2Str for data_name: Battery status information, raw_value b'\x00\x03' 2023-08-15 12:02:57,146:DEBUG:abstractprotocol:process_response@207: Processing format string Hex2Str(raw_value) 2023-08-15 12:02:57,146:DEBUG:protocol_helpers:Hex2Str@105: Hex b'\x00\x03' decoded to 0003 2023-08-15 12:02:57,146:DEBUG:abstractprotocol:decode@495: Processing POSITIONAL type responses 2023-08-15 12:02:57,147:DEBUG:abstractprotocol:decode@522: Got defn ['discard', 880, 'settings + header', ''] 2023-08-15 12:02:57,147:DEBUG:abstractprotocol:process_response@118: Processing data_type: discard for data_name: settings + header, raw_value b'\x8e\x16\xb2\x8f\x10\xf4\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b\xb8\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d\xa1\x00d\xa2\x00\x14\xa3\x00<\xa4\x00<\xa5\x00\x01\xa6\x00\x03\xa7\xff\xec\xa8\xff\xf6\xa9\x0e\xaa\x00\x00\x00\xea\xab\x01\xac\x01\xad\x047\xae\x01\xaf\x01\xb0\x00\n\xb1\x14\xb2123456\x00\x00\x00\x00\xb3\x00\xb4Input Us\xb52306\xb6\x00\x01\x82\xe3\xb711.XW_S11.261__\xb8\x00\xb9\x00\x00\x00\xea\xbaInput UserdaJK_B1A20S15P\xc0\x01\x00\x00\x00\x00h\x00\x00Q\xd6' 2023-08-15 12:02:57,147:DEBUG:abstractprotocol:process_response@124: Discarding settings + header:b'\x8e\x16\xb2\x8f\x10\xf4\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b\xb8\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d\xa1\x00d\xa2\x00\x14\xa3\x00<\xa4\x00<\xa5\x00\x01\xa6\x00\x03\xa7\xff\xec\xa8\xff\xf6\xa9\x0e\xaa\x00\x00\x00\xea\xab\x01\xac\x01\xad\x047\xae\x01\xaf\x01\xb0\x00\n\xb1\x14\xb2123456\x00\x00\x00\x00\xb3\x00\xb4Input Us\xb52306\xb6\x00\x01\x82\xe3\xb711.XW_S11.261__\xb8\x00\xb9\x00\x00\x00\xea\xbaInput UserdaJK_B1A20S15P\xc0\x01\x00\x00\x00\x00h\x00\x00Q\xd6' 2023-08-15 12:02:57,147:INFO:device:run_command@116: Decoded response {'_command': 'getBalancerData', '_command_description': 'Get Balancer Data', 'raw_response': ['NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x91\x03\x0f\x94\x04\x0f\x8e\x05\x0f\x92\x06\x0f\x91\x07\x0f\x91\x08\x0f\x91\t\x0f\x93\n\x0f\x8e\x0b\x0f\x91\x0c\x0f\x90\r\x0f\x90\x0e\x0f\x8d\x80\x00!\x81\x00\x1c\x82\x00\x1e\x83\x15Ê\x84\x81Å\x85d\x86\x02\x87\x00\x19\x89\x00\x00\x16Ú\x8a\x00\x0e\x8b\x00\x00\x8c\x00\x03\x8e\x16²\x8f\x10ô\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b¸\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d¡\x00d¢\x00\x14£\x00<¤\x00<¥\x00\x01¦\x00\x03§ÿì¨ÿö©\x0eª\x00\x00\x00ê«\x01¬\x01\xad\x047®\x01¯\x01°\x00\n±\x14²123456\x00\x00\x00\x00³\x00´Input Usµ2306¶\x00\x01\x82ã·11.XW_S11.261__¸\x00¹\x00\x00\x00êºInput UserdaJK_B1A20S15PÀ\x01\x00\x00\x00\x00h\x00\x00QÖ', ''], 'Cell count': [14.0, ''], '1 Cell Voltage': [3.984, 'V'], '2 Cell Voltage': [3.985, 'V'], '3 Cell Voltage': [3.988, 'V'], '4 Cell Voltage': [3.982, 'V'], '5 Cell Voltage': [3.986, 'V'], '6 Cell Voltage': [3.985, 'V'], '7 Cell Voltage': [3.985, 'V'], '8 Cell Voltage': [3.985, 'V'], '9 Cell Voltage': [3.987, 'V'], '10 Cell Voltage': [3.982, 'V'], '11 Cell Voltage': [3.985, 'V'], '12 Cell Voltage': [3.984, 'V'], '13 Cell Voltage': [3.984, 'V'], '14 Cell Voltage': [3.981, 'V'], 'MOS temp': [33, '°C'], 'Temp sensor 1': [28, '°C'], 'Temp sensor 2': [30, '°C'], 'Total battery voltage': [55.78, 'V'], 'Balance current': [-32.315, 'A'], 'Percent remaining': [100, '%'], 'Cycle count': [25, ''], 'Total capacity': ['000016da', ''], 'Total number of battery strings': [14, ''], 'Battery Warning Message': ['0000', ''], 'Battery status information': ['0003', '']} 2023-08-15 12:02:57,148:DEBUG:__init__:main@427: results: {'_command': 'getBalancerData', '_command_description': 'Get Balancer Data', 'raw_response': ['NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x91\x03\x0f\x94\x04\x0f\x8e\x05\x0f\x92\x06\x0f\x91\x07\x0f\x91\x08\x0f\x91\t\x0f\x93\n\x0f\x8e\x0b\x0f\x91\x0c\x0f\x90\r\x0f\x90\x0e\x0f\x8d\x80\x00!\x81\x00\x1c\x82\x00\x1e\x83\x15Ê\x84\x81Å\x85d\x86\x02\x87\x00\x19\x89\x00\x00\x16Ú\x8a\x00\x0e\x8b\x00\x00\x8c\x00\x03\x8e\x16²\x8f\x10ô\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b¸\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d¡\x00d¢\x00\x14£\x00<¤\x00<¥\x00\x01¦\x00\x03§ÿì¨ÿö©\x0eª\x00\x00\x00ê«\x01¬\x01\xad\x047®\x01¯\x01°\x00\n±\x14²123456\x00\x00\x00\x00³\x00´Input Usµ2306¶\x00\x01\x82ã·11.XW_S11.261__¸\x00¹\x00\x00\x00êºInput UserdaJK_B1A20S15PÀ\x01\x00\x00\x00\x00h\x00\x00QÖ', ''], 'Cell count': [14.0, ''], '1 Cell Voltage': [3.984, 'V'], '2 Cell Voltage': [3.985, 'V'], '3 Cell Voltage': [3.988, 'V'], '4 Cell Voltage': [3.982, 'V'], '5 Cell Voltage': [3.986, 'V'], '6 Cell Voltage': [3.985, 'V'], '7 Cell Voltage': [3.985, 'V'], '8 Cell Voltage': [3.985, 'V'], '9 Cell Voltage': [3.987, 'V'], '10 Cell Voltage': [3.982, 'V'], '11 Cell Voltage': [3.985, 'V'], '12 Cell Voltage': [3.984, 'V'], '13 Cell Voltage': [3.984, 'V'], '14 Cell Voltage': [3.981, 'V'], 'MOS temp': [33, '°C'], 'Temp sensor 1': [28, '°C'], 'Temp sensor 2': [30, '°C'], 'Total battery voltage': [55.78, 'V'], 'Balance current': [-32.315, 'A'], 'Percent remaining': [100, '%'], 'Cycle count': [25, ''], 'Total capacity': ['000016da', ''], 'Total number of battery strings': [14, ''], 'Battery Warning Message': ['0000', ''], 'Battery status information': ['0003', '']} 2023-08-15 12:02:57,148:INFO:__init__:get_output@40: attempting to create output processor: screen 2023-08-15 12:02:57,151:DEBUG:screen:__init__@15: processor.screen __init__ kwargs {} 2023-08-15 12:02:57,151:DEBUG:__init__:main@433: Using output filter: None 2023-08-15 12:02:57,151:INFO:screen:output@21: Using output processor: screen 2023-08-15 12:02:57,152:DEBUG:screen:output@22: kwargs {'data': {'_command': 'getBalancerData', '_command_description': 'Get Balancer Data', 'raw_response': ['NW\x01\x1b\x00\x00\x00\x00\x03\x00\x01y*\x01\x0f\x90\x02\x0f\x91\x03\x0f\x94\x04\x0f\x8e\x05\x0f\x92\x06\x0f\x91\x07\x0f\x91\x08\x0f\x91\t\x0f\x93\n\x0f\x8e\x0b\x0f\x91\x0c\x0f\x90\r\x0f\x90\x0e\x0f\x8d\x80\x00!\x81\x00\x1c\x82\x00\x1e\x83\x15Ê\x84\x81Å\x85d\x86\x02\x87\x00\x19\x89\x00\x00\x16Ú\x8a\x00\x0e\x8b\x00\x00\x8c\x00\x03\x8e\x16²\x8f\x10ô\x90\x106\x91\x10\x04\x92\x00\x05\x93\x0c\x1c\x94\x0c\x80\x95\x00\x05\x96\x01,\x97\x00n\x98\x01,\x99\x00U\x9a\x00\x1e\x9b\x0b¸\x9c\x002\x9d\x01\x9e\x00Z\x9f\x00F\xa0\x00d¡\x00d¢\x00\x14£\x00<¤\x00<¥\x00\x01¦\x00\x03§ÿì¨ÿö©\x0eª\x00\x00\x00ê«\x01¬\x01\xad\x047®\x01¯\x01°\x00\n±\x14²123456\x00\x00\x00\x00³\x00´Input Usµ2306¶\x00\x01\x82ã·11.XW_S11.261__¸\x00¹\x00\x00\x00êºInput UserdaJK_B1A20S15PÀ\x01\x00\x00\x00\x00h\x00\x00QÖ', ''], 'Cell count': [14.0, ''], '1 Cell Voltage': [3.984, 'V'], '2 Cell Voltage': [3.985, 'V'], '3 Cell Voltage': [3.988, 'V'], '4 Cell Voltage': [3.982, 'V'], '5 Cell Voltage': [3.986, 'V'], '6 Cell Voltage': [3.985, 'V'], '7 Cell Voltage': [3.985, 'V'], '8 Cell Voltage': [3.985, 'V'], '9 Cell Voltage': [3.987, 'V'], '10 Cell Voltage': [3.982, 'V'], '11 Cell Voltage': [3.985, 'V'], '12 Cell Voltage': [3.984, 'V'], '13 Cell Voltage': [3.984, 'V'], '14 Cell Voltage': [3.981, 'V'], 'MOS temp': [33, '°C'], 'Temp sensor 1': [28, '°C'], 'Temp sensor 2': [30, '°C'], 'Total battery voltage': [55.78, 'V'], 'Balance current': [-32.315, 'A'], 'Percent remaining': [100, '%'], 'Cycle count': [25, ''], 'Total capacity': ['000016da', ''], 'Total number of battery strings': [14, ''], 'Battery Warning Message': ['0000', ''], 'Battery status information': ['0003', '']}, 'tag': '', 'name': 'unnamed', 'mqtt_broker': , 'udp_port': '5555', 'postgres_url': None, 'mongo_url': None, 'mongo_db': 'mppsolar', 'mqtt_topic': None, 'filter': None, 'excl_filter': None, 'keep_case': False} 2023-08-15 12:02:57,152:DEBUG:screen:output@74: displayData: {'cell_count': [14.0, ''], '1_cell_voltage': [3.984, 'V'], '2_cell_voltage': [3.985, 'V'], '3_cell_voltage': [3.988, 'V'], '4_cell_voltage': [3.982, 'V'], '5_cell_voltage': [3.986, 'V'], '6_cell_voltage': [3.985, 'V'], '7_cell_voltage': [3.985, 'V'], '8_cell_voltage': [3.985, 'V'], '9_cell_voltage': [3.987, 'V'], '10_cell_voltage': [3.982, 'V'], '11_cell_voltage': [3.985, 'V'], '12_cell_voltage': [3.984, 'V'], '13_cell_voltage': [3.984, 'V'], '14_cell_voltage': [3.981, 'V'], 'mos_temp': [33, '°C'], 'temp_sensor_1': [28, '°C'], 'temp_sensor_2': [30, '°C'], 'total_battery_voltage': [55.78, 'V'], 'balance_current': [-32.315, 'A'], 'percent_remaining': [100, '%'], 'cycle_count': [25, ''], 'total_capacity': ['000016da', ''], 'total_number_of_battery_strings': [14, ''], 'battery_warning_message': ['0000', ''], 'battery_status_information': ['0003', '']} Command: getBalancerData - Get Balancer Data -------------------------------------------------------------------------------- Parameter Value Unit cell_count 14.0 1_cell_voltage 3.984 V 2_cell_voltage 3.985 V 3_cell_voltage 3.988 V 4_cell_voltage 3.982 V 5_cell_voltage 3.986 V 6_cell_voltage 3.985 V 7_cell_voltage 3.985 V 8_cell_voltage 3.985 V 9_cell_voltage 3.987 V 10_cell_voltage 3.982 V 11_cell_voltage 3.985 V 12_cell_voltage 3.984 V 13_cell_voltage 3.984 V 14_cell_voltage 3.981 V mos_temp 33 °C temp_sensor_1 28 °C temp_sensor_2 30 °C total_battery_voltage 55.78 V balance_current -32.315 A percent_remaining 100 % cycle_count 25 total_capacity 000016da total_number_of_battery_strings 14 battery_warning_message 0000 battery_status_information 0003 -------------------------------------------------------------------------------- 2023-08-15 12:02:57,154:DEBUG:__init__:main@458: Not daemon, so not looping
geofreybingachie commented 1 year ago

I am very happy with this USB TTL option .I managed to connect my JK BMS but i am getting some data that is wrong . All the data after cell voltage 08 is wrong . I cant even get the battery voltage .

Command: getBalancerData - Get Balancer Data

Parameter Value Unit cells_connected 8.0 voltage_cell01 3.412 V voltage_cell02 3.416 V voltage_cell03 3.416 V voltage_cell04 3.416 V voltage_cell05 3.414 V voltage_cell06 3.417 V voltage_cell07 3.416 V voltage_cell08 3.417 V voltage_cell09 0.029 V voltage_cell10 0.026 V voltage_cell11 0.026 V voltage_cell12 2.732 V voltage_cell13 -32.759 V voltage_cell14 25.478 V mos_temp -30976 °C battery_t1 -30464 °C battery_t2 3698 °C battery_voltage 0.08 V balance_current 0.0 A percent_remain 0 % cycle_count 26767 total_capacity d0900e42 battery_warning_message 0005 battery_status_information 09c4

proxer05 commented 1 year ago

I am very happy with this USB TTL option .I managed to connect my JK BMS but i am getting some data that is wrong .

Command: getBalancerData - Get Balancer Data

Parameter Value Unit cells_connected 8.0 voltage_cell01 3.412 V voltage_cell02 3.416 V voltage_cell03 3.416 V voltage_cell04 3.416 V voltage_cell05 3.414 V voltage_cell06 3.417 V voltage_cell07 3.416 V voltage_cell08 3.417 V voltage_cell09 0.029 V voltage_cell10 0.026 V voltage_cell11 0.026 V voltage_cell12 2.732 V voltage_cell13 -32.759 V voltage_cell14 25.478 V mos_temp -30976 °C battery_t1 -30464 °C battery_t2 3698 °C battery_voltage 0.08 V balance_current 0.0 A percent_remain 0 % cycle_count 26767 total_capacity d0900e42 battery_warning_message 0005 battery_status_information 09c4

As I mentioned previously currently there is no cell count detection. You need to adjust it manually in protocol file. Also current measurement and total capacity are not done yet. @jblance can you add comment with this information in commit?

geofreybingachie commented 1 year ago

mos_temp -30976 °C battery_t1 -30464 °C battery_t2 3698 °C battery_voltage 0.08 V balance_current 0.0 A percent_remain 0 % cycle_count 26767 total_capacity d0900e42

The above are what i am interested to get correct

proxer05 commented 1 year ago

Clone this repo and edit mppsolar/protocols/jkserial.py(delete cell9-14) then install by running pip install -e . in mpp-solar folder.

jblance commented 1 year ago

Can you post a debug run (then I'll 2 different cell count examples to work from)

On Thu, 17 Aug 2023, 10:04 pm geofreybingachie, @.***> wrote:

mos_temp -30976 °C battery_t1 -30464 °C battery_t2 3698 °C battery_voltage 0.08 V balance_current 0.0 A percent_remain 0 % cycle_count 26767 total_capacity d0900e42

The above are what i am interested to get correct

— Reply to this email directly, view it on GitHub https://github.com/jblance/mpp-solar/issues/389#issuecomment-1682003745, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAJVKNRA5PKOK3FS6PFKBODXVXUDZANCNFSM6AAAAAA3PSFCBM . You are receiving this because you were mentioned.Message ID: @.***>

Apprisco commented 1 year ago

I don't mean to hijack the channel, but is it possible to directly grab data off of the JKBMS using python code using this library, from TTL to USB? Not just solar assistant or whatever. I have the B2A24S20P

jblance commented 1 year ago

Yes. There are a variety of output methods including ones that just print the results (actually thebl default does this)

On Fri, 18 Aug 2023, 9:41 pm Apprisco, @.***> wrote:

I don't mean to hijack the channel, but is it possible to directly grab data off of the JKBMS using python code using this library, from TTL to USB? Not just solar assistant or whatever. I have the B2A24S20P

— Reply to this email directly, view it on GitHub https://github.com/jblance/mpp-solar/issues/389#issuecomment-1683647205, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAJVKNXYBDCFEBFZ7CO65OLXV42EVANCNFSM6AAAAAA3PSFCBM . You are receiving this because you were mentioned.Message ID: @.***>

proxer05 commented 1 year ago

I don't mean to hijack the channel, but is it possible to directly grab data off of the JKBMS using python code using this library, from TTL to USB? Not just solar assistant or whatever. I have the B2A24S20P

Here you have full list of output options https://github.com/jblance/mpp-solar/wiki/Detailed-Usage#list-available-output-processors

proxer05 commented 1 year ago

I don't mean to hijack the channel, but is it possible to directly grab data off of the JKBMS using python code using this library, from TTL to USB? Not just solar assistant or whatever. I have the B2A24S20P

Can you post a debug run too(add -D to command)? It would help in development as currently only 14 cell setup report correct values.

Apprisco commented 1 year ago

I should just try this out, but is mpp-solar and jkbms a python importable library now? And, is it possible to communicate over USB to TTL? Or which connection protocol do you recommend? (Clearly TTL has some issues, hence the creation of this issue.)

jblance commented 8 months ago

logic to address this is implemented in powermon jkserial