Closed jmck82 closed 2 years ago
Me too.
jkbms -p C8:47:8C:F5:5C:37 -c getCellData -D
2021-10-23 23:35:13,631:INFO:__init__:main@236: Solar Device Command Utility, version: 0.7.76, remove brackets in ved protocol
2021-10-23 23:35:13,631:INFO:__init__:main@340: Creating device "unnamed" (type: "jkbms") on port "C8:47:8C:F5:5C:37 (porttype=None)" using protocol "JK04"
2021-10-23 23:35:13,635:DEBUG:__init__:main@343: device_class <class 'mppsolar.devices.jkbms.jkbms'>
2021-10-23 23:35:13,636:DEBUG:device:__init__@31: __init__ args ()
2021-10-23 23:35:13,636:DEBUG:device:__init__@32: __init__ kwargs {'name': 'unnamed', 'port': 'C8:47:8C:F5:5C:37', 'protocol': 'JK04', 'baud': 2400, 'porttype': None, 'mqtt_broker': 'localhost', 'mqtt_port': 1883, 'mqtt_user': None, 'mqtt_pass': None}
2021-10-23 23:35:13,636:DEBUG:device:get_port_type@71: port matches jkble ':'
2021-10-23 23:35:13,637:INFO:device:set_port@154: Using jkbleio for communications
2021-10-23 23:35:13,721:DEBUG:device:set_protocol@96: Protocol JK04
2021-10-23 23:35:13,745:DEBUG:device:__init__@36: __init__ name unnamed, port <mppsolar.io.jkbleio.JkBleIO object at 0x76532430>, protocol <mppsolar.protocols.jk04.jk04 object at 0x76532bf0>
2021-10-23 23:35:13,745:DEBUG:__init__:main@390: Commands [(<mppsolar.devices.jkbms.jkbms object at 0x765323b0>, 'getCellData', 'getCellData', 'screen', None, None)]
2021-10-23 23:35:13,746:INFO:__init__:main@395: Looping 1 commands
2021-10-23 23:35:13,746:INFO:__init__:main@406: Getting results from device: jkbms device - name: unnamed, port: <mppsolar.io.jkbleio.JkBleIO object at 0x76532430>, protocol: <mppsolar.protocols.jk04.jk04 object at 0x76532bf0> for command: getCellData, tag: getCellData, outputs: screen
2021-10-23 23:35:13,746:INFO:device:run_command@270: Running command getCellData
2021-10-23 23:35:13,747:INFO:jkabstractprotocol:get_full_command@70: Using protocol b'JK04' with 2 commands
2021-10-23 23:35:13,747:DEBUG:jkabstractprotocol:get_command_defn@95: get_command_defn for: getCellData
2021-10-23 23:35:13,747:DEBUG:abstractprotocol:get_command_defn@42: Processing command 'getCellData'
2021-10-23 23:35:13,747:DEBUG:abstractprotocol:get_command_defn@44: Found command getCellData in protocol b'JK04'
2021-10-23 23:35:13,748:DEBUG:jkabstractprotocol:get_full_command@74: self._command = getCellData, self._command_defn = {'name': 'getCellData', 'command_code': '96', 'record_type': '2', 'description': 'BLE Cell Data inquiry', 'help': ' -- queries the ble device for the cell data', 'type': 'QUERY', 'response_type': 'POSITIONAL', 'response': [['Hex2Str', 4, 'Header', ''], ['Hex2Str', 1, 'Record Type', ''], ['Hex2Int', 1, 'Record Counter', ''], ['LittleHex2Float', 4, 'Voltage Cell01', 'V'], ['LittleHex2Float', 4, 'Voltage Cell02', 'V'], ['LittleHex2Float', 4, 'Voltage Cell03', 'V'], ['LittleHex2Float', 4, 'Voltage Cell04', 'V'], ['LittleHex2Float', 4, 'Voltage Cell05', 'V'], ['LittleHex2Float', 4, 'Voltage Cell06', 'V'], ['LittleHex2Float', 4, 'Voltage Cell07', 'V'], ['LittleHex2Float', 4, 'Voltage Cell08', 'V'], ['LittleHex2Float', 4, 'Voltage Cell09', 'V'], ['LittleHex2Float', 4, 'Voltage Cell10', 'V'], ['LittleHex2Float', 4, 'Voltage Cell11', 'V'], ['LittleHex2Float', 4, 'Voltage Cell12', 'V'], ['LittleHex2Float', 4, 'Voltage Cell13', 'V'], ['LittleHex2Float', 4, 'Voltage Cell14', 'V'], ['LittleHex2Float', 4, 'Voltage Cell15', 'V'], ['LittleHex2Float', 4, 'Voltage Cell16', 'V'], ['LittleHex2Float', 4, 'Voltage Cell17', 'V'], ['LittleHex2Float', 4, 'Voltage Cell18', 'V'], ['LittleHex2Float', 4, 'Voltage Cell19', 'V'], ['LittleHex2Float', 4, 'Voltage Cell20', 'V'], ['LittleHex2Float', 4, 'Voltage Cell21', 'V'], ['LittleHex2Float', 4, 'Voltage Cell22', 'V'], ['LittleHex2Float', 4, 'Voltage Cell23', 'V'], ['LittleHex2Float', 4, 'Voltage Cell24', 'V'], ['LittleHex2Float', 4, 'Resistance Cell01', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell02', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell03', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell04', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell05', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell06', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell07', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell08', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell09', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell10', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell11', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell12', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell13', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell14', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell15', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell16', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell17', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell18', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell19', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell20', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell21', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell22', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell23', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell24', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell25', 'Ohm'], ['LittleHex2Float', 4, 'Average Cell Voltage', 'V'], ['LittleHex2Float', 4, 'Delta Cell Voltage', 'V'], ['discard', 4, '', ''], ['discard', 4, '', ''], ['Hex2Int:r+1', 1, 'Highest Cell', ''], ['Hex2Int:r+1', 1, 'Lowest Cell', ''], ['Hex2Str', 2, 'Flags', ''], ['discard', 4, '', ''], ['discard', 7, '', ''], ['discard', 4, '', ''], ['discard', 4, '', ''], ['discard', 45, '', ''], ['uptime', 3, 'uptime', ''], ['discard', 5, '', ''], ['discard', 4, '', ''], ['discard', 1, '', ''], ['Hex2Str', 1, 'Checksum', ''], ["lookup:'Voltage Cell{:02d}'.format(m['Highest Cell'][0])", 0, 'Highest Cell Voltage', 'V'], ["lookup:'Voltage Cell{:02d}'.format(m['Lowest Cell'][0])", 0, 'Lowest Cell Voltage', 'V']], 'test_responses': [b'U\xaa\xeb\x90\x02\xff[Vb@\xe3Nb@njb@JPb@\xac\xd7b@\x11\xd2b@\xbd\xddb@\x9a\xd1b@D\xc8b@\xce\xdcb@\xcc\xc7b@y\xe1b@W\xdcb@s\xa2b@_\x80b@\x88\xc4b@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x131\\=\x066\x14=&\xe0\x11=\x80!\xf0<\x11S6=\x89\x80\x12=~|\x03=\xacA#=\x1a\xd8<=\x9doO=\x8e\xb5\x1e=j,)=\xeb(e=\x18\x9cR=\xa3rN=\xeb\x94I=\x9a\xb2\xc2=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\xadb@\x00\x84\x05<\x00\x00\x00\x00\xff\xff\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x006\xa3UL@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x0bT\x00\x14V\xa4?\xb8v\xa4?\x00\xa2', b'U\xaa\xeb\x90\x02\xfd\x01\x04\x13@\x81\xbc\x16@E\xd2\x10@\xed\xd4\x16@\xed\xd4\x16@2\x1e\x17@\xa8\x10\x14@\xe3\x7f\x17@\x15\xa4\x16@\xf7)\x16@2\x1e\x17@\xb1\xf4\x0b@2\xa3\x14@\x9eJ\r@\x9e\xc5\x0f@\xa8\x8b\x16@\x9e6\x17@\xc6\x05\x17@\xe3\x7f\x17@Y\xed\x16@\xe3\x7f\x17@\xcf\xdf\x13@Y\xed\x16@2\xa3\x14@\xab\xe5p>Yk2>&\xef\xf6=>\xb84>p\xfc~>\xab9\xbc>\xde\xd3\xb6>25\x80>672>\xaeG\xf7=\x86\xc4\xfa=g,\x02>\xf6&\x02>\x97S\x01>\xd8\x1d\x01>\x94%\x05>JF\x00>\x8f\xd83>\xe0a\x92>\x05\xf2\xaa>\xd2\xbaU>\xad\xc0\xf8=\xee\x88\xf7=\xd5\xa2@>\x00\x00\x00\x00\x92\xf2\x14@P,7>\x00\x00\x00\x00\xff\xff\xff\x00\x07\x0b\x01\x01\x00X\xb6?\x00\x00\x00\x00\x00\x00\x00Z{\xedK@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0/\x00\x00\x00\x00\x00\x00\x00X*@\x00\x0b', b'U\xaa\xeb\x90\x02\x12O\xa2\x12@\xa8\x8b\x16@\x94p\x10@\xed\xd4\x16@<s\x16@\xed\xd4\x16@\xf7\xae\x13@\xb2\xe0\x15@\x0bO\x17@wg\x17@\x0bO\x17@\x00\x93\x0b@Yr\x14@\xec\xe8\x0c@\xedc\x0f@2\x1e\x17@\xc6\x05\x17@\x81\xbc\x16@\xbc\xb0\x17@\xa8\x8b\x16@\xbc\xb0\x17@\x8a\x96\x13@\x81\xbc\x16@Yr\x14@\xab\xe5p>Yk2>&\xef\xf6=>\xb84>p\xfc~>\xab9\xbc>\xde\xd3\xb6>25\x80>672>\xaeG\xf7=\x86\xc4\xfa=g,\x02>\xf6&\x02>\x97S\x01>\xd8\x1d\x01>\x94%\x05>JF\x00>\x8f\xd83>\xe0a\x92>\x05\xf2\xaa>\xd2\xbaU>\xad\xc0\xf8=\xee\x88\xf7=\xd5\xa2@>\x00\x00\x00\x00\n\xd4\x14@@\xce>>\x00\x00\x00\x00\xff\xff\xff\x00\x07\x0b\x02\x01\x004\x00\xc0\x00\x00\x00\x00\x00\x00\x00\xf6\xc1\xe7K@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd08\x00\x00\x00\x00\x00\x00\x00(*@\x00\xea']}
2021-10-23 23:35:13,749:DEBUG:jkabstractprotocol:get_full_command@85: cmd with SOR: bytearray(b'\xaaU\x90\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2021-10-23 23:35:13,749:DEBUG:jkabstractprotocol:get_full_command@88: cmd with command code: bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2021-10-23 23:35:13,749:DEBUG:jkabstractprotocol:get_full_command@90: cmd with crc: bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10')
2021-10-23 23:35:13,750:INFO:device:run_command@296: full command bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10') for command getCellData
2021-10-23 23:35:13,750:DEBUG:jkabstractprotocol:get_command_defn@95: get_command_defn for: getCellData
2021-10-23 23:35:13,750:DEBUG:abstractprotocol:get_command_defn@42: Processing command 'getCellData'
2021-10-23 23:35:13,750:DEBUG:abstractprotocol:get_command_defn@44: Found command getCellData in protocol b'JK04'
2021-10-23 23:35:13,751:INFO:jkabstractprotocol:get_full_command@70: Using protocol b'JK04' with 2 commands
2021-10-23 23:35:13,751:DEBUG:jkabstractprotocol:get_command_defn@95: get_command_defn for: getCellData
2021-10-23 23:35:13,751:DEBUG:abstractprotocol:get_command_defn@42: Processing command 'getCellData'
2021-10-23 23:35:13,751:DEBUG:abstractprotocol:get_command_defn@44: Found command getCellData in protocol b'JK04'
2021-10-23 23:35:13,752:DEBUG:jkabstractprotocol:get_full_command@74: self._command = getCellData, self._command_defn = {'name': 'getCellData', 'command_code': '96', 'record_type': '2', 'description': 'BLE Cell Data inquiry', 'help': ' -- queries the ble device for the cell data', 'type': 'QUERY', 'response_type': 'POSITIONAL', 'response': [['Hex2Str', 4, 'Header', ''], ['Hex2Str', 1, 'Record Type', ''], ['Hex2Int', 1, 'Record Counter', ''], ['LittleHex2Float', 4, 'Voltage Cell01', 'V'], ['LittleHex2Float', 4, 'Voltage Cell02', 'V'], ['LittleHex2Float', 4, 'Voltage Cell03', 'V'], ['LittleHex2Float', 4, 'Voltage Cell04', 'V'], ['LittleHex2Float', 4, 'Voltage Cell05', 'V'], ['LittleHex2Float', 4, 'Voltage Cell06', 'V'], ['LittleHex2Float', 4, 'Voltage Cell07', 'V'], ['LittleHex2Float', 4, 'Voltage Cell08', 'V'], ['LittleHex2Float', 4, 'Voltage Cell09', 'V'], ['LittleHex2Float', 4, 'Voltage Cell10', 'V'], ['LittleHex2Float', 4, 'Voltage Cell11', 'V'], ['LittleHex2Float', 4, 'Voltage Cell12', 'V'], ['LittleHex2Float', 4, 'Voltage Cell13', 'V'], ['LittleHex2Float', 4, 'Voltage Cell14', 'V'], ['LittleHex2Float', 4, 'Voltage Cell15', 'V'], ['LittleHex2Float', 4, 'Voltage Cell16', 'V'], ['LittleHex2Float', 4, 'Voltage Cell17', 'V'], ['LittleHex2Float', 4, 'Voltage Cell18', 'V'], ['LittleHex2Float', 4, 'Voltage Cell19', 'V'], ['LittleHex2Float', 4, 'Voltage Cell20', 'V'], ['LittleHex2Float', 4, 'Voltage Cell21', 'V'], ['LittleHex2Float', 4, 'Voltage Cell22', 'V'], ['LittleHex2Float', 4, 'Voltage Cell23', 'V'], ['LittleHex2Float', 4, 'Voltage Cell24', 'V'], ['LittleHex2Float', 4, 'Resistance Cell01', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell02', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell03', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell04', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell05', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell06', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell07', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell08', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell09', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell10', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell11', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell12', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell13', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell14', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell15', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell16', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell17', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell18', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell19', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell20', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell21', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell22', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell23', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell24', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell25', 'Ohm'], ['LittleHex2Float', 4, 'Average Cell Voltage', 'V'], ['LittleHex2Float', 4, 'Delta Cell Voltage', 'V'], ['discard', 4, '', ''], ['discard', 4, '', ''], ['Hex2Int:r+1', 1, 'Highest Cell', ''], ['Hex2Int:r+1', 1, 'Lowest Cell', ''], ['Hex2Str', 2, 'Flags', ''], ['discard', 4, '', ''], ['discard', 7, '', ''], ['discard', 4, '', ''], ['discard', 4, '', ''], ['discard', 45, '', ''], ['uptime', 3, 'uptime', ''], ['discard', 5, '', ''], ['discard', 4, '', ''], ['discard', 1, '', ''], ['Hex2Str', 1, 'Checksum', ''], ["lookup:'Voltage Cell{:02d}'.format(m['Highest Cell'][0])", 0, 'Highest Cell Voltage', 'V'], ["lookup:'Voltage Cell{:02d}'.format(m['Lowest Cell'][0])", 0, 'Lowest Cell Voltage', 'V']], 'test_responses': [b'U\xaa\xeb\x90\x02\xff[Vb@\xe3Nb@njb@JPb@\xac\xd7b@\x11\xd2b@\xbd\xddb@\x9a\xd1b@D\xc8b@\xce\xdcb@\xcc\xc7b@y\xe1b@W\xdcb@s\xa2b@_\x80b@\x88\xc4b@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x131\\=\x066\x14=&\xe0\x11=\x80!\xf0<\x11S6=\x89\x80\x12=~|\x03=\xacA#=\x1a\xd8<=\x9doO=\x8e\xb5\x1e=j,)=\xeb(e=\x18\x9cR=\xa3rN=\xeb\x94I=\x9a\xb2\xc2=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\xadb@\x00\x84\x05<\x00\x00\x00\x00\xff\xff\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x006\xa3UL@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x0bT\x00\x14V\xa4?\xb8v\xa4?\x00\xa2', b'U\xaa\xeb\x90\x02\xfd\x01\x04\x13@\x81\xbc\x16@E\xd2\x10@\xed\xd4\x16@\xed\xd4\x16@2\x1e\x17@\xa8\x10\x14@\xe3\x7f\x17@\x15\xa4\x16@\xf7)\x16@2\x1e\x17@\xb1\xf4\x0b@2\xa3\x14@\x9eJ\r@\x9e\xc5\x0f@\xa8\x8b\x16@\x9e6\x17@\xc6\x05\x17@\xe3\x7f\x17@Y\xed\x16@\xe3\x7f\x17@\xcf\xdf\x13@Y\xed\x16@2\xa3\x14@\xab\xe5p>Yk2>&\xef\xf6=>\xb84>p\xfc~>\xab9\xbc>\xde\xd3\xb6>25\x80>672>\xaeG\xf7=\x86\xc4\xfa=g,\x02>\xf6&\x02>\x97S\x01>\xd8\x1d\x01>\x94%\x05>JF\x00>\x8f\xd83>\xe0a\x92>\x05\xf2\xaa>\xd2\xbaU>\xad\xc0\xf8=\xee\x88\xf7=\xd5\xa2@>\x00\x00\x00\x00\x92\xf2\x14@P,7>\x00\x00\x00\x00\xff\xff\xff\x00\x07\x0b\x01\x01\x00X\xb6?\x00\x00\x00\x00\x00\x00\x00Z{\xedK@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0/\x00\x00\x00\x00\x00\x00\x00X*@\x00\x0b', b'U\xaa\xeb\x90\x02\x12O\xa2\x12@\xa8\x8b\x16@\x94p\x10@\xed\xd4\x16@<s\x16@\xed\xd4\x16@\xf7\xae\x13@\xb2\xe0\x15@\x0bO\x17@wg\x17@\x0bO\x17@\x00\x93\x0b@Yr\x14@\xec\xe8\x0c@\xedc\x0f@2\x1e\x17@\xc6\x05\x17@\x81\xbc\x16@\xbc\xb0\x17@\xa8\x8b\x16@\xbc\xb0\x17@\x8a\x96\x13@\x81\xbc\x16@Yr\x14@\xab\xe5p>Yk2>&\xef\xf6=>\xb84>p\xfc~>\xab9\xbc>\xde\xd3\xb6>25\x80>672>\xaeG\xf7=\x86\xc4\xfa=g,\x02>\xf6&\x02>\x97S\x01>\xd8\x1d\x01>\x94%\x05>JF\x00>\x8f\xd83>\xe0a\x92>\x05\xf2\xaa>\xd2\xbaU>\xad\xc0\xf8=\xee\x88\xf7=\xd5\xa2@>\x00\x00\x00\x00\n\xd4\x14@@\xce>>\x00\x00\x00\x00\xff\xff\xff\x00\x07\x0b\x02\x01\x004\x00\xc0\x00\x00\x00\x00\x00\x00\x00\xf6\xc1\xe7K@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd08\x00\x00\x00\x00\x00\x00\x00(*@\x00\xea']}
2021-10-23 23:35:13,753:DEBUG:jkabstractprotocol:get_full_command@85: cmd with SOR: bytearray(b'\xaaU\x90\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2021-10-23 23:35:13,753:DEBUG:jkabstractprotocol:get_full_command@88: cmd with command code: bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2021-10-23 23:35:13,753:DEBUG:jkabstractprotocol:get_full_command@90: cmd with crc: bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10')
2021-10-23 23:35:13,754:INFO:jkbleio:send_and_receive@26: full command bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10') for command getCellData
2021-10-23 23:35:13,754:DEBUG:jkabstractprotocol:get_command_defn@95: get_command_defn for: getCellData
2021-10-23 23:35:13,754:DEBUG:abstractprotocol:get_command_defn@42: Processing command 'getCellData'
2021-10-23 23:35:13,754:DEBUG:abstractprotocol:get_command_defn@44: Found command getCellData in protocol b'JK04'
2021-10-23 23:35:13,755:DEBUG:jkbleio:send_and_receive@30: expected record type 2 for command getCellData
2021-10-23 23:35:13,755:INFO:jkbleio:ble_connect@54: Attempting to connect to C8:47:8C:F5:5C:37
2021-10-23 23:35:14,529:INFO:jkbleio:ble_get_data@82: Connected to b''
Traceback (most recent call last):
File "/usr/local/bin/jkbms", line 10, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/dist-packages/mppsolar/__init__.py", line 408, in main
results = _device.run_command(command=_command)
File "/usr/local/lib/python3.7/dist-packages/mppsolar/devices/device.py", line 313, in run_command
command_defn=self._protocol.get_command_defn(command),
File "/usr/local/lib/python3.7/dist-packages/mppsolar/io/jkbleio.py", line 34, in send_and_receive
response = self.ble_get_data(full_command)
File "/usr/local/lib/python3.7/dist-packages/mppsolar/io/jkbleio.py", line 91, in ble_get_data
characteristicRead = serviceNotify.getCharacteristics(characteristicReadUuid)[0]
IndexError: list index out of range
I am not certain if this is normal, but I cannot "pair" with this BMS. Even on my phone, it works through the app but when you try to connect it will just auto disconnect.
I don't think you need to pair to the JK BMS
it does look like it is not connecting - let me have a look through the code and see if i can come up with some debug or test code to check what is happening Any chance of doing a a bluettooth log of connecting via the app?
Unless @jmck82 responds first, I'm happy to collect whatever logs you need, but I'll need some pointers on how.
It depends on Android version (it was easier in old versions) I think this works: https://medium.com/@charlie.d.anderson/how-to-get-the-bluetooth-host-controller-interface-logs-from-a-modern-android-phone-d23bde00b9fa
Just to confirm, are we capturing from Andoid App to BMS or are we using the phone to snoop bluetooth traffic with this process?
Android app to BMS (to compare with what the mppsolar code is trying to do)
Hopefully this contains what you need
yup that looks right (it will take a bit to decifer though)
No worries. Good luck!
@jmck82 @spoonwzd Could you provide the model name, software version and hardware version of your JK BMS?
I'm trying to get a better understanding which hardware/software version is affected. It looks like my model is affected:
[...]
File "/home/sebastian/.local/lib/python3.9/site-packages/mppsolar/io/jkbleio.py", line 91, in ble_get_data
characteristicRead = serviceNotify.getCharacteristics(characteristicReadUuid)[0]
IndexError: list index out of range
Ah yes. Good question!
Mine are all JK-BD6A24S10P, hardware 8.X, software 8.0.6G and another version listed as 3.7.1
@jblance May be this analysis (of the btsnoop above) helps a bit:
1. Register notifications: Write Request (0x12) to 0xffe0, 0xffe1, 0x2902: 0x0001
2. Request device info: Write Command (0x52) to 0xffe0, 0xffe1: aa5590eb9700df5288679d0a096b9af6709a17fd
Device info response (received as notification):
55aaeb90030a4a4b2d42443641323453313050000000382e580000000000382e302e364700003ca3110002000000424d532
023310000000000000000000031323334000000000000000000000000323131303130000031303930373035343035003030
303000496e707574205573657264617461000031323334353600000000 (128 bytes)
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000 (128 bytes)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000043aa5590ebc80
10100000000000000000000000044 (44 bytes)
3. Wait a second between the write commands
4. Request status: Write Command (0x52) to 0xffe0, 0xffe1: aa5590eb9600f45fe2036dfbe038aabc441234b8
Status response (will be pushed every second as notification):
55aaeb90010a58020000280a0000540b0000420e0000ac0d00000a00000000000000000000000000000000000000c409000
0a86100001e0000003c00000050c300002c0100003c0000003c00000058020000c20100005e01000026020000c201000032
0000006400000084030000bc0200001000000001000000010000000100 (128 bytes)
0000a8610000dc050000ac0d000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000 (128 bytes)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000063aa5590ebc80
10100000000000000000000000044 (44 bytes)
I have been out of town for work, thanks for responding so quickly though. I will work on this a bit tonight as well. Honestly, I was just hoping that I missed something on my side. Spoonwzd I am not sure about yours, but my readings are very sporadic anyway, I am considering just building an ESP32 with 4 ADS1115 modules to get my info, if you guys would like the schematic I don't mind sharing. I will say the MPPSOLAR portion works great, minus my stupid usb/rs232 adapter messing up every 2 hours, but I can work around that :)
Sporadic? My cell voltage readings seem pretty stable - during charge / discharge cycles all cells stay within 0.05v of each other and no voltage bouncing is apparent.
If you're seeing a specific cell voltage bouncing around then it's more likely a connection issue with the BMS cables.
I purchased an RS485 adapter and no luck with that either. I am going to monitor the Bluetooth from my phone and see if there is a protocol change this weekend. I think they did something different on the newer models.
Same issue here:
rolf@backup:~$ sudo hcitool lescan
LE Scan ...
C8:47:8C:F5:74:50 (unknown)
C8:47:8C:F5:74:50 JK-B2A24S20P
rolf@backup:~jkbms -p C8:47:8C:F5:74:50 -c getCellData -D
2021-11-13 13:25:04,850:INFO:__init__:main@236: Solar Device Command Utility, version: 0.7.76, remove brackets in ved protocol
2021-11-13 13:25:04,850:INFO:__init__:main@339: Creating device "unnamed" (type: "jkbms") on port "C8:47:8C:F5:74:50 (porttype=None)" using protocol "JK04"
2021-11-13 13:25:04,851:DEBUG:__init__:main@343: device_class <class 'mppsolar.devices.jkbms.jkbms'>
2021-11-13 13:25:04,851:DEBUG:device:__init__@31: __init__ args ()
2021-11-13 13:25:04,851:DEBUG:device:__init__@32: __init__ kwargs {'name': 'unnamed', 'port': 'C8:47:8C:F5:74:50', 'protocol': 'JK04', 'baud': 2400, 'porttype': None, 'mqtt_broker': 'localhost', 'mqtt_port': 1883, 'mqtt_user': None, 'mqtt_pass': None}
2021-11-13 13:25:04,851:DEBUG:device:get_port_type@71: port matches jkble ':'
2021-11-13 13:25:04,851:INFO:device:set_port@154: Using jkbleio for communications
2021-11-13 13:25:04,870:DEBUG:device:set_protocol@96: Protocol JK04
2021-11-13 13:25:04,876:DEBUG:device:__init__@36: __init__ name unnamed, port <mppsolar.io.jkbleio.JkBleIO object at 0x7f1cdcf3dfd0>, protocol <mppsolar.protocols.jk04.jk04 object at 0x7f1cdcf3dee0>
2021-11-13 13:25:04,876:DEBUG:__init__:main@390: Commands [(<mppsolar.devices.jkbms.jkbms object at 0x7f1cdcf3dfa0>, 'getCellData', 'getCellData', 'screen', None, None)]
2021-11-13 13:25:04,876:INFO:__init__:main@395: Looping 1 commands
2021-11-13 13:25:04,877:INFO:__init__:main@405: Getting results from device: jkbms device - name: unnamed, port: <mppsolar.io.jkbleio.JkBleIO object at 0x7f1cdcf3dfd0>, protocol: <mppsolar.protocols.jk04.jk04 object at 0x7f1cdcf3dee0> for command: getCellData, tag: getCellData, outputs: screen
2021-11-13 13:25:04,877:INFO:device:run_command@270: Running command getCellData
2021-11-13 13:25:04,877:INFO:jkabstractprotocol:get_full_command@70: Using protocol b'JK04' with 2 commands
2021-11-13 13:25:04,877:DEBUG:jkabstractprotocol:get_command_defn@95: get_command_defn for: getCellData
2021-11-13 13:25:04,877:DEBUG:abstractprotocol:get_command_defn@42: Processing command 'getCellData'
2021-11-13 13:25:04,877:DEBUG:abstractprotocol:get_command_defn@44: Found command getCellData in protocol b'JK04'
2021-11-13 13:25:04,877:DEBUG:jkabstractprotocol:get_full_command@74: self._command = getCellData, self._command_defn = {'name': 'getCellData', 'command_code': '96', 'record_type': '2', 'description': 'BLE Cell Data inquiry', 'help': ' -- queries the ble device for the cell data', 'type': 'QUERY', 'response_type': 'POSITIONAL', 'response': [['Hex2Str', 4, 'Header', ''], ['Hex2Str', 1, 'Record Type', ''], ['Hex2Int', 1, 'Record Counter', ''], ['LittleHex2Float', 4, 'Voltage Cell01', 'V'], ['LittleHex2Float', 4, 'Voltage Cell02', 'V'], ['LittleHex2Float', 4, 'Voltage Cell03', 'V'], ['LittleHex2Float', 4, 'Voltage Cell04', 'V'], ['LittleHex2Float', 4, 'Voltage Cell05', 'V'], ['LittleHex2Float', 4, 'Voltage Cell06', 'V'], ['LittleHex2Float', 4, 'Voltage Cell07', 'V'], ['LittleHex2Float', 4, 'Voltage Cell08', 'V'], ['LittleHex2Float', 4, 'Voltage Cell09', 'V'], ['LittleHex2Float', 4, 'Voltage Cell10', 'V'], ['LittleHex2Float', 4, 'Voltage Cell11', 'V'], ['LittleHex2Float', 4, 'Voltage Cell12', 'V'], ['LittleHex2Float', 4, 'Voltage Cell13', 'V'], ['LittleHex2Float', 4, 'Voltage Cell14', 'V'], ['LittleHex2Float', 4, 'Voltage Cell15', 'V'], ['LittleHex2Float', 4, 'Voltage Cell16', 'V'], ['LittleHex2Float', 4, 'Voltage Cell17', 'V'], ['LittleHex2Float', 4, 'Voltage Cell18', 'V'], ['LittleHex2Float', 4, 'Voltage Cell19', 'V'], ['LittleHex2Float', 4, 'Voltage Cell20', 'V'], ['LittleHex2Float', 4, 'Voltage Cell21', 'V'], ['LittleHex2Float', 4, 'Voltage Cell22', 'V'], ['LittleHex2Float', 4, 'Voltage Cell23', 'V'], ['LittleHex2Float', 4, 'Voltage Cell24', 'V'], ['LittleHex2Float', 4, 'Resistance Cell01', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell02', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell03', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell04', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell05', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell06', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell07', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell08', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell09', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell10', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell11', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell12', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell13', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell14', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell15', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell16', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell17', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell18', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell19', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell20', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell21', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell22', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell23', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell24', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell25', 'Ohm'], ['LittleHex2Float', 4, 'Average Cell Voltage', 'V'], ['LittleHex2Float', 4, 'Delta Cell Voltage', 'V'], ['discard', 4, '', ''], ['discard', 4, '', ''], ['Hex2Int:r+1', 1, 'Highest Cell', ''], ['Hex2Int:r+1', 1, 'Lowest Cell', ''], ['Hex2Str', 2, 'Flags', ''], ['discard', 4, '', ''], ['discard', 7, '', ''], ['discard', 4, '', ''], ['discard', 4, '', ''], ['discard', 45, '', ''], ['uptime', 3, 'uptime', ''], ['discard', 5, '', ''], ['discard', 4, '', ''], ['discard', 1, '', ''], ['Hex2Str', 1, 'Checksum', ''], ["lookup:'Voltage Cell{:02d}'.format(m['Highest Cell'][0])", 0, 'Highest Cell Voltage', 'V'], ["lookup:'Voltage Cell{:02d}'.format(m['Lowest Cell'][0])", 0, 'Lowest Cell Voltage', 'V']], 'test_responses': [b'U\xaa\xeb\x90\x02\xff[Vb@\xe3Nb@njb@JPb@\xac\xd7b@\x11\xd2b@\xbd\xddb@\x9a\xd1b@D\xc8b@\xce\xdcb@\xcc\xc7b@y\xe1b@W\xdcb@s\xa2b@_\x80b@\x88\xc4b@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x131\\=\x066\x14=&\xe0\x11=\x80!\xf0<\x11S6=\x89\x80\x12=~|\x03=\xacA#=\x1a\xd8<=\x9doO=\x8e\xb5\x1e=j,)=\xeb(e=\x18\x9cR=\xa3rN=\xeb\x94I=\x9a\xb2\xc2=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\xadb@\x00\x84\x05<\x00\x00\x00\x00\xff\xff\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x006\xa3UL@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x0bT\x00\x14V\xa4?\xb8v\xa4?\x00\xa2', b'U\xaa\xeb\x90\x02\xfd\x01\x04\x13@\x81\xbc\x16@E\xd2\x10@\xed\xd4\x16@\xed\xd4\x16@2\x1e\x17@\xa8\x10\x14@\xe3\x7f\x17@\x15\xa4\x16@\xf7)\x16@2\x1e\x17@\xb1\xf4\x0b@2\xa3\x14@\x9eJ\r@\x9e\xc5\x0f@\xa8\x8b\x16@\x9e6\x17@\xc6\x05\x17@\xe3\x7f\x17@Y\xed\x16@\xe3\x7f\x17@\xcf\xdf\x13@Y\xed\x16@2\xa3\x14@\xab\xe5p>Yk2>&\xef\xf6=>\xb84>p\xfc~>\xab9\xbc>\xde\xd3\xb6>25\x80>672>\xaeG\xf7=\x86\xc4\xfa=g,\x02>\xf6&\x02>\x97S\x01>\xd8\x1d\x01>\x94%\x05>JF\x00>\x8f\xd83>\xe0a\x92>\x05\xf2\xaa>\xd2\xbaU>\xad\xc0\xf8=\xee\x88\xf7=\xd5\xa2@>\x00\x00\x00\x00\x92\xf2\x14@P,7>\x00\x00\x00\x00\xff\xff\xff\x00\x07\x0b\x01\x01\x00X\xb6?\x00\x00\x00\x00\x00\x00\x00Z{\xedK@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0/\x00\x00\x00\x00\x00\x00\x00X*@\x00\x0b', b'U\xaa\xeb\x90\x02\x12O\xa2\x12@\xa8\x8b\x16@\x94p\x10@\xed\xd4\x16@<s\x16@\xed\xd4\x16@\xf7\xae\x13@\xb2\xe0\x15@\x0bO\x17@wg\x17@\x0bO\x17@\x00\x93\x0b@Yr\x14@\xec\xe8\x0c@\xedc\x0f@2\x1e\x17@\xc6\x05\x17@\x81\xbc\x16@\xbc\xb0\x17@\xa8\x8b\x16@\xbc\xb0\x17@\x8a\x96\x13@\x81\xbc\x16@Yr\x14@\xab\xe5p>Yk2>&\xef\xf6=>\xb84>p\xfc~>\xab9\xbc>\xde\xd3\xb6>25\x80>672>\xaeG\xf7=\x86\xc4\xfa=g,\x02>\xf6&\x02>\x97S\x01>\xd8\x1d\x01>\x94%\x05>JF\x00>\x8f\xd83>\xe0a\x92>\x05\xf2\xaa>\xd2\xbaU>\xad\xc0\xf8=\xee\x88\xf7=\xd5\xa2@>\x00\x00\x00\x00\n\xd4\x14@@\xce>>\x00\x00\x00\x00\xff\xff\xff\x00\x07\x0b\x02\x01\x004\x00\xc0\x00\x00\x00\x00\x00\x00\x00\xf6\xc1\xe7K@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd08\x00\x00\x00\x00\x00\x00\x00(*@\x00\xea']}
2021-11-13 13:25:04,877:DEBUG:jkabstractprotocol:get_full_command@85: cmd with SOR: bytearray(b'\xaaU\x90\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2021-11-13 13:25:04,877:DEBUG:jkabstractprotocol:get_full_command@88: cmd with command code: bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2021-11-13 13:25:04,877:DEBUG:jkabstractprotocol:get_full_command@90: cmd with crc: bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10')
2021-11-13 13:25:04,877:INFO:device:run_command@296: full command bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10') for command getCellData
2021-11-13 13:25:04,878:DEBUG:jkabstractprotocol:get_command_defn@95: get_command_defn for: getCellData
2021-11-13 13:25:04,878:DEBUG:abstractprotocol:get_command_defn@42: Processing command 'getCellData'
2021-11-13 13:25:04,878:DEBUG:abstractprotocol:get_command_defn@44: Found command getCellData in protocol b'JK04'
2021-11-13 13:25:04,878:INFO:jkabstractprotocol:get_full_command@70: Using protocol b'JK04' with 2 commands
2021-11-13 13:25:04,878:DEBUG:jkabstractprotocol:get_command_defn@95: get_command_defn for: getCellData
2021-11-13 13:25:04,878:DEBUG:abstractprotocol:get_command_defn@42: Processing command 'getCellData'
2021-11-13 13:25:04,878:DEBUG:abstractprotocol:get_command_defn@44: Found command getCellData in protocol b'JK04'
2021-11-13 13:25:04,878:DEBUG:jkabstractprotocol:get_full_command@74: self._command = getCellData, self._command_defn = {'name': 'getCellData', 'command_code': '96', 'record_type': '2', 'description': 'BLE Cell Data inquiry', 'help': ' -- queries the ble device for the cell data', 'type': 'QUERY', 'response_type': 'POSITIONAL', 'response': [['Hex2Str', 4, 'Header', ''], ['Hex2Str', 1, 'Record Type', ''], ['Hex2Int', 1, 'Record Counter', ''], ['LittleHex2Float', 4, 'Voltage Cell01', 'V'], ['LittleHex2Float', 4, 'Voltage Cell02', 'V'], ['LittleHex2Float', 4, 'Voltage Cell03', 'V'], ['LittleHex2Float', 4, 'Voltage Cell04', 'V'], ['LittleHex2Float', 4, 'Voltage Cell05', 'V'], ['LittleHex2Float', 4, 'Voltage Cell06', 'V'], ['LittleHex2Float', 4, 'Voltage Cell07', 'V'], ['LittleHex2Float', 4, 'Voltage Cell08', 'V'], ['LittleHex2Float', 4, 'Voltage Cell09', 'V'], ['LittleHex2Float', 4, 'Voltage Cell10', 'V'], ['LittleHex2Float', 4, 'Voltage Cell11', 'V'], ['LittleHex2Float', 4, 'Voltage Cell12', 'V'], ['LittleHex2Float', 4, 'Voltage Cell13', 'V'], ['LittleHex2Float', 4, 'Voltage Cell14', 'V'], ['LittleHex2Float', 4, 'Voltage Cell15', 'V'], ['LittleHex2Float', 4, 'Voltage Cell16', 'V'], ['LittleHex2Float', 4, 'Voltage Cell17', 'V'], ['LittleHex2Float', 4, 'Voltage Cell18', 'V'], ['LittleHex2Float', 4, 'Voltage Cell19', 'V'], ['LittleHex2Float', 4, 'Voltage Cell20', 'V'], ['LittleHex2Float', 4, 'Voltage Cell21', 'V'], ['LittleHex2Float', 4, 'Voltage Cell22', 'V'], ['LittleHex2Float', 4, 'Voltage Cell23', 'V'], ['LittleHex2Float', 4, 'Voltage Cell24', 'V'], ['LittleHex2Float', 4, 'Resistance Cell01', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell02', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell03', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell04', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell05', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell06', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell07', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell08', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell09', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell10', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell11', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell12', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell13', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell14', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell15', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell16', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell17', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell18', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell19', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell20', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell21', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell22', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell23', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell24', 'Ohm'], ['LittleHex2Float', 4, 'Resistance Cell25', 'Ohm'], ['LittleHex2Float', 4, 'Average Cell Voltage', 'V'], ['LittleHex2Float', 4, 'Delta Cell Voltage', 'V'], ['discard', 4, '', ''], ['discard', 4, '', ''], ['Hex2Int:r+1', 1, 'Highest Cell', ''], ['Hex2Int:r+1', 1, 'Lowest Cell', ''], ['Hex2Str', 2, 'Flags', ''], ['discard', 4, '', ''], ['discard', 7, '', ''], ['discard', 4, '', ''], ['discard', 4, '', ''], ['discard', 45, '', ''], ['uptime', 3, 'uptime', ''], ['discard', 5, '', ''], ['discard', 4, '', ''], ['discard', 1, '', ''], ['Hex2Str', 1, 'Checksum', ''], ["lookup:'Voltage Cell{:02d}'.format(m['Highest Cell'][0])", 0, 'Highest Cell Voltage', 'V'], ["lookup:'Voltage Cell{:02d}'.format(m['Lowest Cell'][0])", 0, 'Lowest Cell Voltage', 'V']], 'test_responses': [b'U\xaa\xeb\x90\x02\xff[Vb@\xe3Nb@njb@JPb@\xac\xd7b@\x11\xd2b@\xbd\xddb@\x9a\xd1b@D\xc8b@\xce\xdcb@\xcc\xc7b@y\xe1b@W\xdcb@s\xa2b@_\x80b@\x88\xc4b@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x131\\=\x066\x14=&\xe0\x11=\x80!\xf0<\x11S6=\x89\x80\x12=~|\x03=\xacA#=\x1a\xd8<=\x9doO=\x8e\xb5\x1e=j,)=\xeb(e=\x18\x9cR=\xa3rN=\xeb\x94I=\x9a\xb2\xc2=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\xadb@\x00\x84\x05<\x00\x00\x00\x00\xff\xff\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x006\xa3UL@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x0bT\x00\x14V\xa4?\xb8v\xa4?\x00\xa2', b'U\xaa\xeb\x90\x02\xfd\x01\x04\x13@\x81\xbc\x16@E\xd2\x10@\xed\xd4\x16@\xed\xd4\x16@2\x1e\x17@\xa8\x10\x14@\xe3\x7f\x17@\x15\xa4\x16@\xf7)\x16@2\x1e\x17@\xb1\xf4\x0b@2\xa3\x14@\x9eJ\r@\x9e\xc5\x0f@\xa8\x8b\x16@\x9e6\x17@\xc6\x05\x17@\xe3\x7f\x17@Y\xed\x16@\xe3\x7f\x17@\xcf\xdf\x13@Y\xed\x16@2\xa3\x14@\xab\xe5p>Yk2>&\xef\xf6=>\xb84>p\xfc~>\xab9\xbc>\xde\xd3\xb6>25\x80>672>\xaeG\xf7=\x86\xc4\xfa=g,\x02>\xf6&\x02>\x97S\x01>\xd8\x1d\x01>\x94%\x05>JF\x00>\x8f\xd83>\xe0a\x92>\x05\xf2\xaa>\xd2\xbaU>\xad\xc0\xf8=\xee\x88\xf7=\xd5\xa2@>\x00\x00\x00\x00\x92\xf2\x14@P,7>\x00\x00\x00\x00\xff\xff\xff\x00\x07\x0b\x01\x01\x00X\xb6?\x00\x00\x00\x00\x00\x00\x00Z{\xedK@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0/\x00\x00\x00\x00\x00\x00\x00X*@\x00\x0b', b'U\xaa\xeb\x90\x02\x12O\xa2\x12@\xa8\x8b\x16@\x94p\x10@\xed\xd4\x16@<s\x16@\xed\xd4\x16@\xf7\xae\x13@\xb2\xe0\x15@\x0bO\x17@wg\x17@\x0bO\x17@\x00\x93\x0b@Yr\x14@\xec\xe8\x0c@\xedc\x0f@2\x1e\x17@\xc6\x05\x17@\x81\xbc\x16@\xbc\xb0\x17@\xa8\x8b\x16@\xbc\xb0\x17@\x8a\x96\x13@\x81\xbc\x16@Yr\x14@\xab\xe5p>Yk2>&\xef\xf6=>\xb84>p\xfc~>\xab9\xbc>\xde\xd3\xb6>25\x80>672>\xaeG\xf7=\x86\xc4\xfa=g,\x02>\xf6&\x02>\x97S\x01>\xd8\x1d\x01>\x94%\x05>JF\x00>\x8f\xd83>\xe0a\x92>\x05\xf2\xaa>\xd2\xbaU>\xad\xc0\xf8=\xee\x88\xf7=\xd5\xa2@>\x00\x00\x00\x00\n\xd4\x14@@\xce>>\x00\x00\x00\x00\xff\xff\xff\x00\x07\x0b\x02\x01\x004\x00\xc0\x00\x00\x00\x00\x00\x00\x00\xf6\xc1\xe7K@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd08\x00\x00\x00\x00\x00\x00\x00(*@\x00\xea']}
2021-11-13 13:25:04,878:DEBUG:jkabstractprotocol:get_full_command@85: cmd with SOR: bytearray(b'\xaaU\x90\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2021-11-13 13:25:04,878:DEBUG:jkabstractprotocol:get_full_command@88: cmd with command code: bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2021-11-13 13:25:04,878:DEBUG:jkabstractprotocol:get_full_command@90: cmd with crc: bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10')
2021-11-13 13:25:04,879:INFO:jkbleio:send_and_receive@26: full command bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10') for command getCellData
2021-11-13 13:25:04,879:DEBUG:jkabstractprotocol:get_command_defn@95: get_command_defn for: getCellData
2021-11-13 13:25:04,879:DEBUG:abstractprotocol:get_command_defn@42: Processing command 'getCellData'
2021-11-13 13:25:04,879:DEBUG:abstractprotocol:get_command_defn@44: Found command getCellData in protocol b'JK04'
2021-11-13 13:25:04,879:DEBUG:jkbleio:send_and_receive@30: expected record type 2 for command getCellData
2021-11-13 13:25:04,879:INFO:jkbleio:ble_connect@54: Attempting to connect to C8:47:8C:F5:74:50
2021-11-13 13:25:06,022:INFO:jkbleio:ble_get_data@82: Connected to b''
Traceback (most recent call last):
File "/usr/local/bin/jkbms", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.8/dist-packages/mppsolar/__init__.py", line 408, in main
results = _device.run_command(command=_command)
File "/usr/local/lib/python3.8/dist-packages/mppsolar/devices/device.py", line 309, in run_command
raw_response = self._port.send_and_receive(
File "/usr/local/lib/python3.8/dist-packages/mppsolar/io/jkbleio.py", line 34, in send_and_receive
response = self.ble_get_data(full_command)
File "/usr/local/lib/python3.8/dist-packages/mppsolar/io/jkbleio.py", line 91, in ble_get_data
characteristicRead = serviceNotify.getCharacteristics(characteristicReadUuid)[0]
IndexError: list index out of range
Just wondering if you've managed to make any progress with this @jblance ?
I have same problem with newest firmware 10.02. (Unfortunately this new HW version also has no RS485/CAN connection that can be used. The components are not assembled. Therefore BT is the only way left to access...) Does someone have any idea where to dig in?
You could try to capture the traffic between the BT module and the BMS. The traffic here should be very similar to the BT protocol. One idea is to remove the bluetooth module later on and attach another device (ESP f.e.).
I captured the traffic between BT module and the CPU (STM32F103). Indeed it looks very similar to the BT protocol. If connecting via BT to App the following frames can be seen: The BT module send two 20bytes frames (command code 0x97 and 0x96) and gets the corresponding 300bytes + 20bytes back. Looks reasonable...
If I connect to the BT module (with BLUETILITY on OSX) and send same command sequence:
UUID FFE1 Write Value: 0xAA5590EB970003A32BC9940E5A91E84414051C99
UUID FFE1 Read Value: 0x55AAEB90033B4A4B2D4232413234533230500000000031302E582D57000031302E303200000034530000090000004A4B2D4232413234533230500000000031323334000000000000000000000000323230313132000031313230333033313737003030303000496E707574205573657264617461000031323334353600000000
UUID FFE1 Read Value: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
UUID FFE1 Read Value: 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000B1AA5590EBC8010100000000000000000000000044
I get the same values as captured.
One difference to the JKBMS script: I have to use characteristic FFE1
instead of non existing FFE3
.
Patching jkbleio.py
(FFE3 -> FFE1) solves the reported index problem but still fail to get the cell data.
Here the debug output (called by jkbms -p C8:47:8C:F7:BA:29 -P JK02 -D
)
... 2022-01-17 10:58:20,129:DEBUG:jkabstractprotocol:get_command_defn@95: get_command_defn for: getCellData 2022-01-17 10:58:20,130:DEBUG:abstractprotocol:get_command_defn@42: Processing command 'getCellData' 2022-01-17 10:58:20,130:DEBUG:abstractprotocol:get_command_defn@44: Found command getCellData in protocol b'JK02' 2022-01-17 10:58:20,131:DEBUG:jkbleio:send_and_receive@30: expected record type 2 for command getCellData 2022-01-17 10:58:20,131:INFO:jkbleio:ble_connect@54: Attempting to connect to C8:47:8C:F7:BA:29 2022-01-17 10:58:20,481:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:20,482:DEBUG:jkbledelegate:handleNotification@30: Not valid start of record - wiping data bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:20,483:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'') 2022-01-17 10:58:20,483:DEBUG:jkabstractprotocol:is_record_complete@149: No SOR found in record looking for completeness 2022-01-17 10:58:20,967:INFO:jkbleio:ble_get_data@82: Connected to b'' 2022-01-17 10:58:21,358:INFO:jkbleio:ble_get_data@93: Read characteristic: Characteristic <ffe1>, handle 12 2022-01-17 10:58:21,359:INFO:jkbleio:ble_get_data@97: Enable 0x0b handle 2022-01-17 10:58:21,360:INFO:jkbleio:ble_get_data@98: Enable read handle 2022-01-17 10:58:21,361:INFO:jkbleio:ble_get_data@99: Write getInfo to read handle 2022-01-17 10:58:21,504:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:21,505:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:21,505:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00') 2022-01-17 10:58:21,506:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:21,506:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:21,507:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:21,507:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:21,508:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:21,602:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:21,603:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:21,603:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:21,604:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:27,612:INFO:jkbleio:ble_get_data@110: Write command to read handle 2022-01-17 10:58:27,612:INFO:jkbleio:ble_get_data@116: Grabbing 1 records (after inital response) 2022-01-17 10:58:27,659:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:27,660:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:27,661:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e') 2022-01-17 10:58:27,661:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:27,678:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:27,679:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:27,679:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:27,680:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:27,734:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:27,735:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:27,736:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:27,736:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,091:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:28,091:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,092:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:28,093:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,110:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:28,110:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,111:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:28,111:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,166:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:28,166:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,167:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:28,167:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,522:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:28,523:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,523:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:28,524:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,541:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:28,542:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,542:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:28,543:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,578:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:28,579:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,579:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:28,580:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,953:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:28,954:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,954:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:28,955:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,972:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:28,973:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:28,973:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:28,974:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,010:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:29,010:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,011:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:29,011:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,385:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:29,385:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,386:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:29,386:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,403:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:29,404:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,404:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:29,405:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,441:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:29,441:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,442:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:29,442:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,816:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:29,816:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,817:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:29,817:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,834:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:29,835:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,836:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:29,836:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,872:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:29,873:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:29,873:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:29,874:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,247:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:30,248:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,248:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:30,249:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,266:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:30,266:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,267:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:30,267:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,303:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:30,304:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,304:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:30,305:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,678:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:30,679:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,680:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:30,680:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,697:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:30,698:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,698:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:30,699:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,735:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:30,735:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:30,736:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:30,736:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,109:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:31,110:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,110:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:31,111:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,112:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:31,112:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,113:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:31,113:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,166:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:31,166:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,167:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:31,168:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,540:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:31,541:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,541:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:31,542:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,543:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:31,543:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,544:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:31,544:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,597:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:31,598:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,598:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:31,599:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,971:DEBUG:jkbledelegate:handleNotification@27: From handle: 0x12 Got 20 bytes of data 2022-01-17 10:58:31,972:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,973:DEBUG:jkbledelegate:handleNotification@33: Not expected type of record - wiping data bytearray(b'U\xaa\xeb\x90\x03;JK-B2A24S20P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x01;X\x02\x00\x00(\n\x00\x00\xb8\x0b\x00\x00\x10\x0e\x00\x00\xf0\xba\x04\x00\xdc\x05\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01;\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x01:\x01E\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa\xeb\x90\x02D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 2022-01-17 10:58:31,973:DEBUG:jkabstractprotocol:is_record_start@133: SOR found in record 2022-01-17 10:58:31,974:INFO:jkbleio:ble_get_data@121: jkbleio: ble_get_dataa: Got 1 records Traceback (most recent call last): File "/usr/local/bin/jkbms", line 8, in <module> sys.exit(main()) File "/usr/local/lib/python3.9/dist-packages/mppsolar/__init__.py", line 408, in main results = _device.run_command(command=_command) File "/usr/local/lib/python3.9/dist-packages/mppsolar/devices/device.py", line 309, in run_command raw_response = self._port.send_and_receive( File "/usr/local/lib/python3.9/dist-packages/mppsolar/io/jkbleio.py", line 34, in send_and_receive response = self.ble_get_data(full_command) File "/usr/local/lib/python3.9/dist-packages/mppsolar/io/jkbleio.py", line 126, in ble_get_data log.debug(f"Record now {self.record} len {len(self.record)}") TypeError: object of type 'NoneType' has no len()
Looks like a parsing issue as the data can be partly seen. I am neither a BLE nor a Python expert but may be some one has an idea what is different in the protocol of newest FW version...
I have this issue as well. The error suggests the data return is empty.
Edit: BMS model is JK-B2A8S20P.
Using a raspi3, which can connect to the JKBMS via bluetoothctl
and see characteristics.
Here is the error that's similar to OP. Also tried protocol JK02 with same result.
pi@harpocrates:~ $ jkbms -p C8:47:8C:F7:85:DB -P JK04 -c getInfo
Traceback (most recent call last):
File "/usr/local/bin/jkbms", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.9/dist-packages/mppsolar/__init__.py", line 408, in main
results = _device.run_command(command=_command)
File "/usr/local/lib/python3.9/dist-packages/mppsolar/devices/device.py", line 309, in run_command
raw_response = self._port.send_and_receive(
File "/usr/local/lib/python3.9/dist-packages/mppsolar/io/jkbleio.py", line 34, in send_and_receive
response = self.ble_get_data(full_command)
File "/usr/local/lib/python3.9/dist-packages/mppsolar/io/jkbleio.py", line 91, in ble_get_data
characteristicRead = serviceNotify.getCharacteristics(characteristicReadUuid)[0]
IndexError: list index out of range
Adding myself in as a "me too" so I can follow the discussion...
localadmin@rpi4-d5865d:~ $ jkbms -p C8:47:8C:F3:7F:BE -c getInfo
Traceback (most recent call last):
File "/usr/local/bin/jkbms", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.9/dist-packages/mppsolar/__init__.py", line 408, in main
results = _device.run_command(command=_command)
File "/usr/local/lib/python3.9/dist-packages/mppsolar/devices/device.py", line 309, in run_command
raw_response = self._port.send_and_receive(
File "/usr/local/lib/python3.9/dist-packages/mppsolar/io/jkbleio.py", line 34, in send_and_receive
response = self.ble_get_data(full_command)
File "/usr/local/lib/python3.9/dist-packages/mppsolar/io/jkbleio.py", line 91, in ble_get_data
characteristicRead = serviceNotify.getCharacteristics(characteristicReadUuid)[0]
IndexError: list index out of range
I have a spare BMS now @jblance if it'll help things along ;)
I continued the investigation and could succeed to get info and cell data via BT on FW version 10.02. The commands of JK02 protocol are still valid. The UUID to be used is FFE0
and characteristic FFE1
. This characteristic has write and notify capability. Therefore we have to subscribe to. After the command is written the BMS response with 3 notification packages of total 320 bytes (128, 128 and 64 bytes). The response includes the well known 300 bytes and another (static?) frame of 20 bytes. This frame is also used as response in case of changing values.
CAUTION: The bluetooth specification < 4.2 only support 20 bytes per notification. So you will get only 60 bytes (3 x first 20 bytes). (Took me a while to find it out on my RPI 3B+). In order to get full notification data BT version 4.2 is minimum.
I switched to Bluesee tool on OS X (BT 5.0) to investigate the protocol. It allows LUA scripts to parse through the notification data. jk_bms.lua.zip
There are still some unknowns in the data stream but the most important infos are available. In order to debug the connection I prepared also a very easy connection script in python that receives the raw notification streams.
jkbms_test.py.zip
Here a the full notification example for:
cmdInfo
55aaeb9003614a4b2d4232413234533230500000000031302e582d57000031302e303200000080e20600180000004a4b2d4232413234533230500000000031323334000000000000000000000000323230313132000031313230333033313737003030303000496e707574205573657264617461000031323334353600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7aa5590ebc8010100000000000000000000000044
cmdCall:
55aaeb9002e23d0d3f0d3f0d3f0d3f0d2d0d320d390d3d0d3d0d3f0d3a0d3f0d3f0d2d0d3f0d00000000000000000000000000000000ffff00003b0d12000105380038003800380037003800380038003800380037003700370038003900380000000000000000000000000000000000000000000000b0d30000fd5d000044feffff590151016f0100005607016312ba0400f0ba040000000000e200000064004d0aa3d806000101a206000000000000000000000000070001000000570400000200e9c640400000ce01e204d4300000000100050000b8ac0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af
Btw, once initiated cmdCell the notification response will be send periodically every 400ms.
My next steps are to build a BT<->MQTT node as BT range of the BMS is not enough. If someone has a good implementation idea please let me know...
Thanks @bullar for pointing out the packet length vs BT version issue. I wrote a small bash script on my raspberry pi zero, using gattttool and the built in bluetooh of raspberry pi zero and wondered why I get the voltages only for the first 7 cells... This was the resulted of packets cut down to 20 bytes. But at least the commands reported by btsnoop work with my 8.x firmware. I will have to move to ESP32 instead, as it has BT5.0 stack. I could use rpi zero 2w as it is bt4.2, but ESP32 will be cheaper choice. Thanks again! Ps. if someone could sniff commands used to enable/disable charging, output and balance I would be more than thankfull. Do not have proper hardware equipment and vendor does not like to publish BT protocol :/
Another implementation using FFE0
and char FFE1
: https://github.com/syssi/esphome-jk-bms/pull/10/files
I implemented a JKBMS Emulator based on a JDY-23 BLE module. The commands to change values are always based on a 20 byte frame with following format: Set Command:
aa5590eb 1d 04 01000000 000000000000000000 9c --> Set Charge ON (example)
| | | | | |
| | | | | +--> LSB of SUM
| | | | +---------------------> Dummy Data (usually random data)
| | | +------------------------------> Value (little endian)
| | +---------------------------------> Size of value in byte
| +------------------------------------> Register address to be modified
+---------------------------------------------> Header (fixed to 0xAA5590EB)
The register addresses (AD) are as follows:
AD # VALUE
================
1d 04 01000000 Set Charge on (off = 00000000)
1e 04 01000000 Set Disharge on (off = 00000000)
1f 04 01000000 Set Balance on (off = 00000000)
06 04 03000000 Set balance trig voltage to 0.003
21 04 42d10000 Set cal voltage to 53.57
24 04 64000000 Set cal current to 0.100
1c 04 10000000 Set cell count to 16
20 04 f0ba0400 Set battery cap to 310
04 04 420e0000 Set Cell OVP to 3.65
05 04 b0040000 Set Cell OVPR to 1.2
03 04 b0040000 Set Cell UVPR to 1.2
02 04 b0040000 Set Cell UVP to 1.2
0b 04 b0040000 Set Power Off value to 1.2
9f 04 54657374 Set User Private Data (4 bytes) to TEST
9f 0d 30313233343536373839303132 c6 Set User Private Data (4 bytes) to 0123456789012
26 04 b0040000 Set Start Balance voltage to 1.2
13 04 2c010000 Set max Balance current to 0.3
0c 04 e8030000 Set Max charge Current to 1.0
0d 04 02000000 Set Charge OCP delay to 2
0e 04 02000000 Set Charge OCPR Time to 2
0f 04 e8030000 Set Max discharge Current to 1.0
10 04 02000000 Set Discharge OCP delay to 2
11 04 02000000 Set Discharge OCPR Time to 2
25 04 0a000000 Set to SCP Delay to 10.000
12 04 02000000 Set SCPR Time to 2
14 04 2c010000 Set Charge OTP to 30
15 04 2c010000 Set Charge OTPR to 30
16 04 2c010000 Set Discharge OTP to 30
17 04 2c010000 Set Discharge OTPR to 30
18 04 00000000 Set Charge UTP to 0
19 04 00000000 Set Charge UTPR to 0
27 04 00000000 Set Con. Wire Res.01 to 0.00
...
3e 04 00000000 Set Con. Wire Res.24 to 0.00
Btw, the first response on CMDINFO is a record type 0x01 that contains all setup data, then JKBMS continues periodically with record type 0x02 (Cell data). Based on this information one is able cover almost the whole functionality as the JKBMS App. Here the record structure (record type 0x01) with real data from my LiPoFe4 battery block:
I could also find some more useful data in the Cell info frame (record type 0x02). At position 0x88 the possible 16 different System Alarms are shown and at 0x3E/3F the actual min and max cell number is distributed. Here the screenshot of the grammar:
Finally the data analysis function I am using to convert the data on an ESP32: DATA_ANALYSIS.ino.zip
I didn't feel like breaking this code down as work has been busy but I did get this working with an esp32 that sends the data to an MQTT server if anyone needs help. Honestly, that was an easier solution anyway as all I needed was USB power and it connected to my wifi.
@jmck82 I'd love a copy of the code you are running on your esp32 as I would like to do the same thing. Thanks.
So I'm new here, and don't have much coding experience. I was wondering if any of you had an easy fix for the problem I've recently found with the JK BMS app. My phone recently updated to Android 12, and unfortunately Samsung doesn't really like making it easy to revert back to Android 11. Is there any easy way to get the app to see and connect with the JK BMS? I have verified that on an older phone with Android 10-11, the app connects and is programmable so I know the BMS bluetooth is working, just not with Android 12.
Thanks!
To get things working on HW Ver 8.x and Software Ver 8.20G
I had to switch to a Raspberry Pi 4 with bluetooth 5.0 and change the following code:
def ble_connect(self, mac=None, protocol=None, record_type=0x02): """ Connect to a BLE device with 'mac' address """ self._device = None
self._device = btle.Peripheral(None)
self._device.withDelegate(jkBleDelegate(self, protocol, record_type))
# Connect to BLE Device
connected = False
attempts = 0
log.info(f"Attempting to connect to {mac}")
while not connected:
attempts += 1
if attempts > self.maxConnectionAttempts:
log.warning(f"Cannot connect to mac {mac} - exceeded {attempts - 1} attempts")
return connected
try:
self._device.connect(mac)
self._device.setMTU(244) #this must be added to receive more than 20 bytes in a single message 120, 120, 64 = 320 total
connected = True
except Exception:
continue
return connected
I also had to tweak the FFE3 to FFE1 and here's the new format for the info:
SOR = bytes.fromhex("55aaeb90")
COMMANDS = { "getInfo": { "name": "getInfo", "command_code": "97", "record_type": "3", "description": "BLE Device Information inquiry", "help": " -- queries the ble device information", "type": "QUERY", "response_type": "POSITIONAL", "response": [ ["Hex2Str", 4, "Header", ""], ["Hex2Str", 1, "Record Type", ""], ["Hex2Int", 1, "Record Counter", ""], ["Hex2Ascii", 12, "Device Model", ""], ["Hex2Ascii", 10, "Hardware Version", ""], ["Hex2Ascii", 10, "Software Version", ""], ["uptime", 3, "Up Time", ""], ["Hex2Str", 2, "Power-on Times", ""], ["Hex2Ascii", 13, "Device Name", ""], ["Hex2Ascii", 22, "Device Passcode", ""], ["Hex2Ascii", 6, "Manufacturing Date", ""], ["Hex2Ascii", 12, "Serial Number", ""], ["discard", 5, "", ""], ["Hex2Ascii", 17, "User Data", ""], ["Hex2Ascii", 16, "Settings Passcode?", ""], ["discard", 672, "unknown", ""], ], "test_responses": [ bytes.fromhex( "55aaeb9003f14a4b2d42324132345300000000000000332e300000000000332e322e330000000876450004000000506f7765722057616c6c203100000000313233340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2" ), bytes.fromhex( "55aaeb9003b54a4b2d42443641323053313050000000342e300000000000342e312e37000000541d1600040000004e6f7468696e67204a4b31000000000031323334000000000000000000000000323030373038000032303036323834303735000000000000496e707574205573657264617461000031323334353600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4" ), ], }, }
Also the crc is broken so I skipped those lines. log.debug(f"Record Length:{len(record)}") if len(record) == 300 or len(record) == 320:
crc = ord(record[-1:])
calcCrc = crc8(record[:-1])
log.debug(f"crc {crc} calcCrc {calcCrc}")# print (crc, calcCrc)
return True
if crc == calcCrc:
log.debug("Record CRC is valid")
return True
return False
@bullar Do you know how to calculate the checksum of a status notification?
Oh, it's still the sum of all bytes. :-)
I can confirm that the hack from LMMKnight works for my new JK-B5A24S HW 8.X-W, SW 8.06 on a RPi3 running latest debian 11.3.
@LMMKnight This checksum should work for your device:
if len(record) == 300 or len(record) == 320:
# check the crc/checksum is correct for the record data
crc = ord(record[299])
calcCrc = crc8(record[:299])
# print (crc, calcCrc)
if crc == calcCrc:
log.debug("Record CRC is valid")
return True
return False
The checksum is always at position 300 even if the frame is 320 bytes long.
if len(record) == 300 or len(record) == 320: # check the crc/checksum is correct for the record data crc = ord(record[299]) calcCrc = crc8(record[:299]) # print (crc, calcCrc) if crc == calcCrc: log.debug("Record CRC is valid") return True return False
The checksum is always at position 300 even if the frame is 320 bytes long.
Thanks syssi. I got it to work by removing the ord() function from the line crc = ord(record[299])
I can confirm that following LMMKnight and syssi's solutions I also now have a Bluetooth link working for my JK-B5A24S with HW 8.X and SW 8.0.3M.
My unit has a pin block on the rear (it was ordered with RS485), which I am trying to get the pinout for, and then I can test if the same fix's also work when connected over RS485.
@bullar Do you like to share the code of your JK-BMS emulator? There is a new BMS model (B2A8S20P, hardware version 11) and some registers has been changed.
Tried both JK02/04. I am sure its something simple I am missing here. Using RPI4 4gb
jkbms -p C8:47:8C:F3:75:92 -P JK02 -D