jblance / mpp-solar

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

Cannot connect to JK BMS/Active Balancer #170

Closed jmck82 closed 2 years ago

jmck82 commented 3 years ago

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

2021-10-23 17:17:55,859:INFO:__init__:main@195: Solar Device Command Utility, version: 0.7.83, add missing libs
MqttBroker(name='localhost', port=1883, username=None, password=None, results_topic='jkbms')
2021-10-23 17:17:55,859:INFO:__init__:main@299: Creating device "unnamed" (type: "jkbms") on port "C8:47:8C:F3:75:92 (porttype=None)" using protocol "JK02"
2021-10-23 17:17:55,867:DEBUG:__init__:main@302: device_class <class 'mppsolar.devices.jkbms.jkbms'>
2021-10-23 17:17:55,867:DEBUG:device:__init__@31: __init__ args ()
2021-10-23 17:17:55,867:DEBUG:device:__init__@32: __init__ kwargs {'name': 'unnamed', 'port': 'C8:47:8C:F3:75:92', 'protocol': 'JK02', 'baud': 2400, 'porttype': None, 'mqtt_broker': MqttBroker(name='localhost', port=1883, username=None, password=None, results_topic='jkbms')}
2021-10-23 17:17:55,868:DEBUG:device:get_port_type@71: port matches jkble ':'
2021-10-23 17:17:55,868:INFO:device:set_port@154: Using jkbleio for communications
2021-10-23 17:17:55,902:DEBUG:device:set_protocol@96: Protocol JK02
2021-10-23 17:17:55,923:DEBUG:device:__init__@36: __init__ name unnamed, port <mppsolar.io.jkbleio.JkBleIO object at 0xb5d945b0>, protocol <mppsolar.protocols.jk02.jk02 object at 0xb5d7be70>
2021-10-23 17:17:55,923:DEBUG:__init__:main@349: Commands [(<mppsolar.devices.jkbms.jkbms object at 0xb5d7bed0>, '', '', 'screen', None, None)]
2021-10-23 17:17:55,923:INFO:__init__:main@354: Looping 1 commands
2021-10-23 17:17:55,924:INFO:__init__:main@365: Getting results from device: jkbms device - name: unnamed, port: <mppsolar.io.jkbleio.JkBleIO object at 0xb5d945b0>, protocol: <mppsolar.protocols.jk02.jk02 object at 0xb5d7be70> for command: , tag: , outputs: screen
2021-10-23 17:17:55,924:INFO:device:run_command@268: Running command
2021-10-23 17:17:55,924:INFO:jkabstractprotocol:get_full_command@71: Using protocol b'JK02' with 3 commands
2021-10-23 17:17:55,924:DEBUG:jkabstractprotocol:get_command_defn@102: get_command_defn for: getCellData
2021-10-23 17:17:55,924:DEBUG:abstractprotocol:get_command_defn@43: Processing command 'getCellData'
2021-10-23 17:17:55,924:DEBUG:abstractprotocol:get_command_defn@45: Found command getCellData in protocol b'JK02'
2021-10-23 17:17:55,924:DEBUG:jkabstractprotocol:get_full_command@76: self._command = getCellData
2021-10-23 17:17:55,924:DEBUG:jkabstractprotocol:get_full_command@87: 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 17:17:55,925:DEBUG:jkabstractprotocol:get_full_command@95: 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 17:17:55,925:DEBUG:jkabstractprotocol:get_full_command@97: 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 17:17:55,925:INFO:device:run_command@294: 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 17:17:55,925:DEBUG:jkabstractprotocol:get_command_defn@102: get_command_defn for: getCellData
2021-10-23 17:17:55,925:DEBUG:abstractprotocol:get_command_defn@43: Processing command 'getCellData'
2021-10-23 17:17:55,925:DEBUG:abstractprotocol:get_command_defn@45: Found command getCellData in protocol b'JK02'
2021-10-23 17:17:55,925:INFO:jkabstractprotocol:get_full_command@71: Using protocol b'JK02' with 3 commands
2021-10-23 17:17:55,925:DEBUG:jkabstractprotocol:get_command_defn@102: get_command_defn for: getCellData
2021-10-23 17:17:55,926:DEBUG:abstractprotocol:get_command_defn@43: Processing command 'getCellData'
2021-10-23 17:17:55,926:DEBUG:abstractprotocol:get_command_defn@45: Found command getCellData in protocol b'JK02'
2021-10-23 17:17:55,926:DEBUG:jkabstractprotocol:get_full_command@76: self._command = getCellData
2021-10-23 17:17:55,926:DEBUG:jkabstractprotocol:get_full_command@87: 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 17:17:55,926:DEBUG:jkabstractprotocol:get_full_command@95: 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 17:17:55,926:DEBUG:jkabstractprotocol:get_full_command@97: 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 17:17:55,926: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 17:17:55,926:DEBUG:jkabstractprotocol:get_command_defn@102: get_command_defn for: getCellData
2021-10-23 17:17:55,927:DEBUG:abstractprotocol:get_command_defn@43: Processing command 'getCellData'
2021-10-23 17:17:55,927:DEBUG:abstractprotocol:get_command_defn@45: Found command getCellData in protocol b'JK02'
2021-10-23 17:17:55,927:DEBUG:jkbleio:send_and_receive@30: expected record type 2 for command getCellData
2021-10-23 17:17:55,927:INFO:jkbleio:ble_connect@54: Attempting to connect to C8:47:8C:F3:75:92
2021-10-23 17:17:57,123:INFO:jkbleio:ble_get_data@82: Connected to b''
Traceback (most recent call last):
  File "/usr/local/bin/jkbms", line 33, in <module>
    sys.exit(load_entry_point('mppsolar', 'console_scripts', 'jkbms')())
  File "/home/pi/Python-3.6.9/src/mpp-solar/mppsolar/__init__.py", line 367, in main
    results = _device.run_command(command=_command)
  File "/home/pi/Python-3.6.9/src/mpp-solar/mppsolar/devices/device.py", line 311, in run_command
    command_defn=self._protocol.get_command_defn(command),
  File "/home/pi/Python-3.6.9/src/mpp-solar/mppsolar/io/jkbleio.py", line 34, in send_and_receive
    response = self.ble_get_data(full_command)
  File "/home/pi/Python-3.6.9/src/mpp-solar/mppsolar/io/jkbleio.py", line 91, in ble_get_data
    characteristicRead = serviceNotify.getCharacteristics(characteristicReadUuid)[0]
IndexError: list index out of range
spoonwzd commented 3 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
jmck82 commented 3 years ago

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.

spoonwzd commented 3 years ago

I don't think you need to pair to the JK BMS

jblance commented 3 years ago

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?

spoonwzd commented 3 years ago

Unless @jmck82 responds first, I'm happy to collect whatever logs you need, but I'll need some pointers on how.

jblance commented 3 years ago

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

spoonwzd commented 3 years ago

Just to confirm, are we capturing from Andoid App to BMS or are we using the phone to snoop bluetooth traffic with this process?

jblance commented 3 years ago

Android app to BMS (to compare with what the mppsolar code is trying to do)

spoonwzd commented 3 years ago

Hopefully this contains what you need

btsnoop_hci.log

jblance commented 3 years ago

yup that looks right (it will take a bit to decifer though)

spoonwzd commented 3 years ago

No worries. Good luck!

syssi commented 3 years ago

@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
spoonwzd commented 3 years ago

Ah yes. Good question!

Mine are all JK-BD6A24S10P, hardware 8.X, software 8.0.6G and another version listed as 3.7.1

image

syssi commented 3 years ago

@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)
jmck82 commented 3 years ago

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 :)

spoonwzd commented 3 years ago

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.

jmck82 commented 3 years ago

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.

rolfoz commented 2 years ago

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

Screenshot_20211113-132200_BMS

spoonwzd commented 2 years ago

Just wondering if you've managed to make any progress with this @jblance ?

bullar commented 2 years ago

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...) Vendor D JK-B2A24S20P Does someone have any idea where to dig in?

syssi commented 2 years ago

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.).

bullar commented 2 years ago

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: Bildschirmfoto 2022-01-17 um 18 10 22 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...

tmarkson commented 2 years ago

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
jonadis commented 2 years ago

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
spoonwzd commented 2 years ago

I have a spare BMS now @jblance if it'll help things along ;)

bullar commented 2 years ago

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...

bartowl commented 2 years ago

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 :/

syssi commented 2 years ago

Another implementation using FFE0 and char FFE1: https://github.com/syssi/esphome-jk-bms/pull/10/files

bullar commented 2 years ago

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:

Screenshot 2022-02-25 at 10 39 57

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:

JKBMS_Cell_Info

Finally the data analysis function I am using to convert the data on an ESP32: DATA_ANALYSIS.ino.zip

jmck82 commented 2 years ago

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.

rolfoz commented 2 years ago

@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.

Rexlink1 commented 2 years ago

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!

LMMKnight commented 2 years ago

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

Intialise BLE device

    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:

check the crc/checksum is correct for the record data

        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
syssi commented 2 years ago

@bullar Do you know how to calculate the checksum of a status notification?

syssi commented 2 years ago

Oh, it's still the sum of all bytes. :-)

riogrande75 commented 2 years ago

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.

syssi commented 2 years ago

@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.

LMMKnight commented 2 years ago
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])

JSladen commented 2 years ago

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.

syssi commented 1 year ago

@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.