Closed EasilyBoredEngineer closed 2 years ago
As an FYI, here's a few more findings.
I think making up for the lack of a functional serial port by piggybacking the bluetooth module is just a complete fools errand at this stage -
You can successfully use it to 'intercept' data going past on its way between the app and the bms microcontroller, and grab that data and interpret it using the @jblance JK02 library, in terms of using the uart pins on the module to SEND commands to the microcontroller just doesn't seem to work at all, whatsoever. They're just ignored.
I can see the commands from the app fly past, but I can't get any commands I inject on the line listened to - neither before I start the app, nor after.
I've tried to eliminate any CRC problem by sending the string "\xaa\x55\x90\xeb\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11" directly, and also tried to send hex dumps obtained by sniffing the turn on of the BMS and its interactions with the app, but I just can't get it to answer anything.
I've double checked that my FTDI's are functional (checked on the scope, and also used a different FTDI), they are. There must be something else that tells the microcontroller when to accept commands (eg a digital pin pulled low?).
I also followed a hunch and completely disabled the bluetooth module by pulling its _RST pin low, still no dice.
I just don't know. Haven't been able to crack it - if anyone has any ideas, please let me know.
Nonetheless we do have a number of learnings:-
I'm now going to move on to sniffing and obtaining hex dumps from the screen interface for @syssi
@syssi - please find hex dump from the data that goes to the display attached.
9600 baud seems to give the most consistent, patterned data - so I think that's the baud of that port.
I've cut the dump at a logical position in the repetitive pattern of the data.
For 'investigative' purposes, on my display I'm presently showing 0.00 Amps, 13.1 Volts, error 9 and 0% SOC. Sorry I can't give you more meaningful data, the board is essentially just on the bench at the moment, it's not doing any actual work.
Do you own a logic analyzer to monitor multiple I/Os (RX, TX, P10, P11, P12, P13) of the bluetooth module in parallel?
Do you own a logic analyzer to monitor multiple I/Os (RX, TX, P10, P11, P12, P13) of the bluetooth module in parallel?
No. I unfortunately don't have a particularly well equipped lab anymore
@EasilyBoredEngineer Could you help to identify the start byte and end byte of a display frame by timing? It's hard to guess. :-)
I will provide a logic analyzer capture of my JK-B1A24S-15P-V10.1.2
later the week.
@syssi
Are you sure about the purpose of the parts between the UART of the processor and the connector? I assume the BMS can still be connected to an ESP (UART TTL) directly.
I've come to a realisation and feel like a dill. You and I are both right, kinda - but you're definitely more right than me. The key difference between this and previous versions seems to be that port marked RS485 used to be native TTL, and you'd then connect their dongle to convert it to RS485. So there's no more 'hooking up to the serial port' as it's now speaking at RS485 levels instead of TTL.
On this new board, the TTL from the BMS processor is converted to RS485 by that circuitry I pointed out - but only at the physical level. I had assumed it was a 'clever chip' that decoded the protocol, but it's not - it's just a dumb driver / receiver like a MAX232 but for RS485..
So you connect the RS485 cable directly to the port, then at the other end of your comms line you attach their RS485 dongle and it does the translation - at the BMS end, the protocol itself is handled by the firmware in the BMS microcontroller. That's something I hadn't understood until I read up more on the YD3082 - so the problem is likely to be that the RS485 isn't dead, I'm just a very big dill and I'm not speaking RS485anese to it.... so it's not answering me. Time to crack out the arduino, methinks...
The dongle they sell for this bms is at the following url
This screenshots should help a bit. Please try to pull up P11
and P12
.
No connection / idle:
Connection + 0x97 request + periodic responses
The colors and pin labels should match with the sigrok screenshot:
Raw capture (sigrok format) + sigrok UI config (labels + colors):
@syssi - legend :)
Syssi, could you please share the connection and command hex string that you are sending to receive this output?
Thankyou!
I didn't try to inject traffic. I just captured what's happening between the bluetooth module and the BMS if I connect using the app. But I'm pretty sure if we do the same (pulling P11 and P12) the BMS should respond to our requests.
The app sends to commands to the BMS.
0x97
which retrieves the device info.0x96
which enables the periodic cell info frame.Please don't copy the values from the following screenshots because my logic analyzer (~10€) isn't accurate. It's fine if you null most of the message like mpp-solar does. It's well tested:
https://github.com/syssi/esphome-jk-bms/blob/main/components/jk_bms_ble/jk_bms_ble.cpp#L1054-L1075
So you connect the RS485 cable directly to the port, then at the other end of your comms line you attach their RS485 dongle and it does the translation - at the BMS end, the protocol itself is handled by the firmware in the BMS microcontroller. That's something I hadn't understood until I read up more on the YD3082 - so the problem is likely to be that the RS485 isn't dead, I'm just a very big dill and I'm not speaking RS485anese to it.... so it's not answering me. Time to crack out the arduino, methinks...
The dongle they sell for this bms is at the following url
A cheap solution to connect a ESP8266 / Arduino to the native RS485 of your BMS is something like this:
https://de.aliexpress.com/item/1005002970555534.html
Try to avoid buying this version (called "DI DE RE RO") if you don't want to care about flow control:
https://de.aliexpress.com/item/1005003114276251.html
If you want to connect the BMS to your computer this is a good choice:
need any help to read data from bms? In my system it is working. i read data from the bms via serial.
@Smoeller0 thankyou for the offer :) we're not having problem reading, we've just noticed that the bms doesn't actually listen when you WRITE to the bms in this manner. At first it seems that it's listening, but it's not - it's just repetitively sending cell data which we're able to intercept.
@syssi - I've left the office now for the day, so I can't do any more playing... BUT.. just pondering on this and I recalled I saw two optoisolators to the right of the bluetooth module when I went looking for a clean 3.3V supply..
I've a solid hunch given your data now that we'll find these have something to do with the story... I reckon we'll find one is for TX and one is for RX and they are active only when pin P11 or pin P12 are high - with P12 being the 'send to cpu' tx direction. Looking forward to trying...
Try to avoid buying this version (called "DI DE RE RO") if you don't want to care about flow control:
Damn... that's the one I have :( Why is it problematic?
Ah well I should be able to speak directly TTL for the moment now anyway..
In my system it is working. i read data from the bms via serial.
I can see your freezer working at night at your grafana graph! ;-) Nice setup.
Oh this is not my freezer ;) this view is the Result of an misconfiguratet pip inverter. It Charge and bypass. and when charge enough bypass turn off again. I cant find the Right config.
" just noticed that the bms doesn't actually listen when you WRITE to the bms." But why? i can send command to the bms.
Damn... that's the one I have :( Why is it problematic?
This module requires flow control. Every time you want to send (TX
) something you have to pull the RE
and DE
line to enable the transceiver of the module. In other words next to the RX
and TX
line a GPIO is required to control the flow. The software must implement the flow control behavior (= pulling the GPIO).
But why? i can send command to the bms.
@Smoeller0 absolutely could be different circuitry on your BMS. In my case, I can't send anything, only receive - see this comment. That is why I could get data using 'getCellData' but not 'getInfo' - the bms is repetitively sending 02 frames, but not listening to my commands. I think it's got something to do with P12 pin and the optoisolator on my board.
@syssi Thanks for that background to the RS485 board - highly useful. Nothing is simple :) Have you any thoughts about my optocoupler hunch above?
Thanks for that background to the RS485 board - highly useful. Nothing is simple :) Have you any thoughts about my optocoupler hunch above?
I'm a software engineer. My understanding and gut feeling in electronic circuits is pretty limited / nonexistent. I've no idea.
I'm a software engineer. My understanding and gut feeling in electronic circuits is pretty limited / nonexistent. I've no idea.
You seem to be doing a pretty good job understanding electronic circuits to me :) Thankyou for both of your help.. feels like traction is occurring..
I'm just puzzled why they need the opto's there on this version in the first place (@Smoeller0 they don't look to be there on your board, judging from your earlier photo).. I would have thought both the bluetooth module and the microcontroller would be on the same power rail.. hmmm.. I'll do some sniffing around tomorrow.
FYI optocoupler idea was a dead end.
Turned out that the real reason for my issues here was that there's too much noise on the ground side of my ftdi adaptor to maintain clean error free comms at the high speed of 115,200 baud. That was the primary reason the piggy backing wouldn't listen to my commands - they were being corrupted. I also found that some styles of FTDI were better than others.
Today I've worked on filtering noise on the ground line of the FTDI and have managed to get usable output from getInfo - that command works fine with this board. getCellData - not so much - I'm getting very changeable results with that. I'm chasing the reason for that down.
The ftdi adaptor that doesn't work is the orangey coloured board, below. I had better results with the second style, below.
Ok - traction. I now have consistent comms using the 'piggyback' method and the ftdi noted above. I'm not totally happy with interfacing that ftdi directly to the board without an adum1201 (doesn't work - insufficient current available at the VCC to drive the board).
Nonetheless, connecting GND and TX/RX using my ftdi works, with the exception that every time I reboot the board the buzzer croaks like an asthmatic frog - just need to ensure I pull the usb first - other than that, highly effective.
@syssi @jblance debug dumps and hex dumps follow...
@jblance @syssi Findings:-
On this board, using your latest build, getInfo command works every single time. Works great - see below.
send the following command:-
sudo jkbms -p /dev/ttyUSB0 -P JK02 -b 115200 -c getInfo -D
get the following response:-
2022-05-13 10:58:11,228:DEBUG:__init__:main@232: MqttBroker(name='localhost', port=1883, username=None, password=None, results_topic='jkbms', mqttc=<paho.mqtt.client.Client object at 0x76581ef8>, _isConnected=False)
2022-05-13 10:58:11,228:DEBUG:__init__:main@234: udp port 5555
2022-05-13 10:58:11,228:DEBUG:__init__:main@237: Using Mongo None with mppsolar
2022-05-13 10:58:11,229:INFO:__init__:main@337: Creating device "unnamed" (type: "jkbms") on port "/dev/ttyUSB0 (porttype=None)" using protocol "JK02"
2022-05-13 10:58:11,235:DEBUG:__init__:main@341: device_class <class 'mppsolar.devices.jkbms.jkbms'>
2022-05-13 10:58:11,236:DEBUG:device:__init__@33: __init__ args ()
2022-05-13 10:58:11,236:DEBUG:device:__init__@34: __init__ kwargs {'name': 'unnamed', 'port': '/dev/ttyUSB0', 'protocol': 'JK02', 'baud': 115200, 'porttype': None, 'mqtt_broker': MqttBroker(name='localhost', port=1883, username=None, password=None, results_topic='jkbms', mqttc=<paho.mqtt.client.Client object at 0x76581ef8>, _isConnected=False), 'udp_port': '5555', 'mongo_url': None, 'mongo_db': 'mppsolar'}
2022-05-13 10:58:11,236:DEBUG:__init__:get_port_type@65: port matches ttyusb
2022-05-13 10:58:11,237:INFO:__init__:get_port@107: Using serialio for communications
2022-05-13 10:58:11,249:DEBUG:__init__:get_protocol@12: Protocol JK02
2022-05-13 10:58:11,255:DEBUG:device:__init__@38: __init__ name unnamed, port <mppsolar.inout.serialio.SerialIO object at 0x75f58238>, protocol <mppsolar.protocols.jk02.jk02 object at 0x75f495c8>
2022-05-13 10:58:11,256:DEBUG:__init__:main@390: Commands [(<mppsolar.devices.jkbms.jkbms object at 0x75f49538>, 'getInfo', 'getInfo', 'screen', None, None)]
2022-05-13 10:58:11,256:INFO:__init__:main@395: Looping 1 commands
2022-05-13 10:58:11,256:INFO:__init__:main@405: Getting results from device: jkbms device - name: unnamed, port: <mppsolar.inout.serialio.SerialIO object at 0x75f58238>, protocol: <mppsolar.protocols.jk02.jk02 object at 0x75f495c8> for command: getInfo, tag: getInfo, outputs: screen
2022-05-13 10:58:11,257:INFO:device:run_command@274: Running command getInfo
2022-05-13 10:58:11,257:INFO:jkabstractprotocol:get_full_command@73: Using protocol b'JK02' with 3 commands
2022-05-13 10:58:11,257:DEBUG:jkabstractprotocol:get_command_defn@106: get_command_defn for: getInfo
2022-05-13 10:58:11,257:DEBUG:abstractprotocol:get_command_defn@60: Processing command 'getInfo'
2022-05-13 10:58:11,258:DEBUG:abstractprotocol:get_command_defn@62: Found command getInfo in protocol b'JK02'
2022-05-13 10:58:11,258:DEBUG:jkabstractprotocol:get_full_command@80: self._command = getInfo
2022-05-13 10:58:11,258:DEBUG:jkabstractprotocol:get_full_command@91: cmd with SOR: bytearray(b'\xaaU\x90\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2022-05-13 10:58:11,259:DEBUG:jkabstractprotocol:get_full_command@99: cmd with command code: bytearray(b'\xaaU\x90\xeb\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2022-05-13 10:58:11,259:DEBUG:jkabstractprotocol:get_full_command@101: cmd with crc: bytearray(b'\xaaU\x90\xeb\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11')
2022-05-13 10:58:11,259:INFO:device:run_command@303: full command bytearray(b'\xaaU\x90\xeb\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11') for command getInfo
2022-05-13 10:58:11,259:DEBUG:jkabstractprotocol:get_command_defn@106: get_command_defn for: getInfo
2022-05-13 10:58:11,259:DEBUG:abstractprotocol:get_command_defn@60: Processing command 'getInfo'
2022-05-13 10:58:11,260:DEBUG:abstractprotocol:get_command_defn@62: Found command getInfo in protocol b'JK02'
2022-05-13 10:58:11,260:DEBUG:serialio:send_and_receive@19: port /dev/ttyUSB0, baudrate 115200
2022-05-13 10:58:11,265:DEBUG:serialio:send_and_receive@22: Executing command via serialio...
2022-05-13 10:58:12,574:DEBUG:serialio:send_and_receive@30: serial response was: b"U\xaa\xeb\x90\x03\x00JK-B2A8S20P\x00\x00\x00\x00\x009.X\x00\x00\x00\x00\x009.01M3\x00\x00L\xf5'\x00q\x00\x00\x00JK-B2A8S20P\x00\x00\x00\x00\x001234\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00211109\x00\x001091515153\x000000\x000123456789012a\x00\x00123456\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xaaU\x90\xeb\xc8\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00DU\xaa\xeb\x90\x02\x00\xd6\x0c\xd7\x0c\xd6\x0c\xd8\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe6\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00w*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bU\xaa\xeb\x90\x02\x01\xd7\x0c\xd7\x0c\xd8\x0c\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00]3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe7\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00{*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%U"
2022-05-13 10:58:12,686:DEBUG:device:run_command@322: Send and Receive Response b"U\xaa\xeb\x90\x03\x00JK-B2A8S20P\x00\x00\x00\x00\x009.X\x00\x00\x00\x00\x009.01M3\x00\x00L\xf5'\x00q\x00\x00\x00JK-B2A8S20P\x00\x00\x00\x00\x001234\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00211109\x00\x001091515153\x000000\x000123456789012a\x00\x00123456\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xaaU\x90\xeb\xc8\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00DU\xaa\xeb\x90\x02\x00\xd6\x0c\xd7\x0c\xd6\x0c\xd8\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe6\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00w*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bU\xaa\xeb\x90\x02\x01\xd7\x0c\xd7\x0c\xd8\x0c\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00]3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe7\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00{*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%U"
2022-05-13 10:58:12,687:INFO:abstractprotocol:decode@196: response passed to decode: b"U\xaa\xeb\x90\x03\x00JK-B2A8S20P\x00\x00\x00\x00\x009.X\x00\x00\x00\x00\x009.01M3\x00\x00L\xf5'\x00q\x00\x00\x00JK-B2A8S20P\x00\x00\x00\x00\x001234\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00211109\x00\x001091515153\x000000\x000123456789012a\x00\x00123456\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xaaU\x90\xeb\xc8\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00DU\xaa\xeb\x90\x02\x00\xd6\x0c\xd7\x0c\xd6\x0c\xd8\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe6\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00w*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bU\xaa\xeb\x90\x02\x01\xd7\x0c\xd7\x0c\xd8\x0c\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00]3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe7\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00{*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%U"
2022-05-13 10:58:12,692:DEBUG:jkabstractprotocol:get_command_defn@106: get_command_defn for: getInfo
2022-05-13 10:58:12,693:DEBUG:abstractprotocol:get_command_defn@60: Processing command 'getInfo'
2022-05-13 10:58:12,693:DEBUG:abstractprotocol:get_command_defn@62: Found command getInfo in protocol b'JK02'
2022-05-13 10:58:12,694:INFO:abstractprotocol:decode@236: Processing response of type POSITIONAL
2022-05-13 10:58:12,694:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Str', 4, 'Header', '']
2022-05-13 10:58:12,695:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Str', 1, 'Record Type', '']
2022-05-13 10:58:12,695:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Int', 1, 'Record Counter', '']
2022-05-13 10:58:12,696:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 16, 'Device Model', '']
2022-05-13 10:58:12,696:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 8, 'Hardware Version', '']
2022-05-13 10:58:12,697:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 8, 'Software Version', '']
2022-05-13 10:58:12,697:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['uptime', 4, 'Up Time', '']
2022-05-13 10:58:12,697:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Int', 4, 'Power-on Times', '']
2022-05-13 10:58:12,698:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 16, 'Device Name', '']
2022-05-13 10:58:12,698:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 16, 'Device Passcode', '']
2022-05-13 10:58:12,699:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 8, 'Manufacturing Date', '']
2022-05-13 10:58:12,699:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 11, 'Serial Number', '']
2022-05-13 10:58:12,700:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 5, 'Passcode', '']
2022-05-13 10:58:12,700:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 16, 'User Data', '']
2022-05-13 10:58:12,701:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Ascii', 16, 'Setup Passcode', '']
2022-05-13 10:58:12,701:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['discard', 672, 'unknown', '']
2022-05-13 10:58:12,701:DEBUG:abstractprotocol:decode@240: trimmed and split responses: [b'U\xaa\xeb\x90', b'\x03', b'\x00', b'JK-B2A8S20P\x00\x00\x00\x00\x00', b'9.X\x00\x00\x00\x00\x00', b'9.01M3\x00\x00', b"L\xf5'\x00", b'q\x00\x00\x00', b'JK-B2A8S20P\x00\x00\x00\x00\x00', b'1234\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'211109\x00\x00', b'1091515153\x00', b'0000\x00', b'0123456789012a\x00\x00', b'123456\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xaaU\x90\xeb\xc8\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00DU\xaa\xeb\x90\x02\x00\xd6\x0c\xd7\x0c\xd6\x0c\xd8\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe6\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00w*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bU\xaa\xeb\x90\x02\x01\xd7\x0c\xd7\x0c\xd8\x0c\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00]3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe7\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00", b'\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00{*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%U']
2022-05-13 10:58:12,702:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,703:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Str', 4, 'Header', '']
2022-05-13 10:58:12,703:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Str for data_name: Header, raw_value b'U\xaa\xeb\x90'
2022-05-13 10:58:12,704:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Str(raw_value)
2022-05-13 10:58:12,704:DEBUG:protocol_helpers:Hex2Str@109: Hex b'U\xaa\xeb\x90' decoded to 55aaeb90
2022-05-13 10:58:12,705:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,705:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Str', 1, 'Record Type', '']
2022-05-13 10:58:12,706:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Str for data_name: Record Type, raw_value b'\x03'
2022-05-13 10:58:12,706:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Str(raw_value)
2022-05-13 10:58:12,707:DEBUG:protocol_helpers:Hex2Str@109: Hex b'\x03' decoded to 03
2022-05-13 10:58:12,707:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,708:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Int', 1, 'Record Counter', '']
2022-05-13 10:58:12,708:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Int for data_name: Record Counter, raw_value b'\x00'
2022-05-13 10:58:12,709:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Int(raw_value)
2022-05-13 10:58:12,710:DEBUG:protocol_helpers:Hex2Int@96: Hex b'\x00' decoded to 0
2022-05-13 10:58:12,710:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,711:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 16, 'Device Model', '']
2022-05-13 10:58:12,711:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: Device Model, raw_value b'JK-B2A8S20P\x00\x00\x00\x00\x00'
2022-05-13 10:58:12,712:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,712:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'JK-B2A8S20P\x00\x00\x00\x00\x00' decoded to JK-B2A8S20P
2022-05-13 10:58:12,713:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,713:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 8, 'Hardware Version', '']
2022-05-13 10:58:12,714:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: Hardware Version, raw_value b'9.X\x00\x00\x00\x00\x00'
2022-05-13 10:58:12,714:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,715:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'9.X\x00\x00\x00\x00\x00' decoded to 9.X
2022-05-13 10:58:12,716:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,716:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 8, 'Software Version', '']
2022-05-13 10:58:12,716:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: Software Version, raw_value b'9.01M3\x00\x00'
2022-05-13 10:58:12,717:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,718:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'9.01M3\x00\x00' decoded to 9.01M3
2022-05-13 10:58:12,718:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,719:DEBUG:abstractprotocol:decode@431: Got defn ['uptime', 4, 'Up Time', '']
2022-05-13 10:58:12,719:DEBUG:abstractprotocol:process_response@103: Processing data_type: uptime for data_name: Up Time, raw_value b"L\xf5'\x00"
2022-05-13 10:58:12,720:DEBUG:abstractprotocol:process_response@175: Processing format string uptime(raw_value)
2022-05-13 10:58:12,720:DEBUG:protocol_helpers:uptime@72: uptime defn
2022-05-13 10:58:12,721:DEBUG:protocol_helpers:uptime@77: Uptime int value 76 for pos 0
2022-05-13 10:58:12,721:DEBUG:protocol_helpers:uptime@77: Uptime int value 62796 for pos 1
2022-05-13 10:58:12,722:DEBUG:protocol_helpers:uptime@77: Uptime int value 2618700 for pos 2
2022-05-13 10:58:12,722:DEBUG:protocol_helpers:uptime@77: Uptime int value 2618700 for pos 3
2022-05-13 10:58:12,722:INFO:protocol_helpers:uptime@87: Uptime result 30D7H25M0S
2022-05-13 10:58:12,723:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,723:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Int', 4, 'Power-on Times', '']
2022-05-13 10:58:12,724:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Int for data_name: Power-on Times, raw_value b'q\x00\x00\x00'
2022-05-13 10:58:12,724:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Int(raw_value)
2022-05-13 10:58:12,725:DEBUG:protocol_helpers:Hex2Int@96: Hex b'q\x00\x00\x00' decoded to 113
2022-05-13 10:58:12,725:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,726:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 16, 'Device Name', '']
2022-05-13 10:58:12,726:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: Device Name, raw_value b'JK-B2A8S20P\x00\x00\x00\x00\x00'
2022-05-13 10:58:12,727:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,728:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'JK-B2A8S20P\x00\x00\x00\x00\x00' decoded to JK-B2A8S20P
2022-05-13 10:58:12,728:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,729:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 16, 'Device Passcode', '']
2022-05-13 10:58:12,729:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: Device Passcode, raw_value b'1234\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2022-05-13 10:58:12,729:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,730:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'1234\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' decoded to 1234
2022-05-13 10:58:12,731:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,731:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 8, 'Manufacturing Date', '']
2022-05-13 10:58:12,732:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: Manufacturing Date, raw_value b'211109\x00\x00'
2022-05-13 10:58:12,732:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,733:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'211109\x00\x00' decoded to 211109
2022-05-13 10:58:12,733:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,734:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 11, 'Serial Number', '']
2022-05-13 10:58:12,734:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: Serial Number, raw_value b'1091515153\x00'
2022-05-13 10:58:12,735:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,735:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'1091515153\x00' decoded to 1091515153
2022-05-13 10:58:12,736:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,736:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 5, 'Passcode', '']
2022-05-13 10:58:12,737:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: Passcode, raw_value b'0000\x00'
2022-05-13 10:58:12,737:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,738:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'0000\x00' decoded to 0000
2022-05-13 10:58:12,739:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,739:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 16, 'User Data', '']
2022-05-13 10:58:12,739:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: User Data, raw_value b'0123456789012a\x00\x00'
2022-05-13 10:58:12,740:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,741:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'0123456789012a\x00\x00' decoded to 0123456789012a
2022-05-13 10:58:12,741:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,742:DEBUG:abstractprotocol:decode@431: Got defn ['Hex2Ascii', 16, 'Setup Passcode', '']
2022-05-13 10:58:12,742:DEBUG:abstractprotocol:process_response@103: Processing data_type: Hex2Ascii for data_name: Setup Passcode, raw_value b'123456\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2022-05-13 10:58:12,742:DEBUG:abstractprotocol:process_response@175: Processing format string Hex2Ascii(raw_value)
2022-05-13 10:58:12,743:DEBUG:protocol_helpers:Hex2Ascii@124: Hex b'123456\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' decoded to 123456
2022-05-13 10:58:12,744:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,744:DEBUG:abstractprotocol:decode@431: Got defn ['discard', 672, 'unknown', '']
2022-05-13 10:58:12,745:DEBUG:abstractprotocol:process_response@103: Processing data_type: discard for data_name: unknown, raw_value b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xaaU\x90\xeb\xc8\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00DU\xaa\xeb\x90\x02\x00\xd6\x0c\xd7\x0c\xd6\x0c\xd8\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe6\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00w*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bU\xaa\xeb\x90\x02\x01\xd7\x0c\xd7\x0c\xd8\x0c\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00]3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe7\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00"
2022-05-13 10:58:12,745:DEBUG:abstractprotocol:process_response@111: Discarding unknown:b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xaaU\x90\xeb\xc8\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00DU\xaa\xeb\x90\x02\x00\xd6\x0c\xd7\x0c\xd6\x0c\xd8\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe6\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00w*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bU\xaa\xeb\x90\x02\x01\xd7\x0c\xd7\x0c\xd8\x0c\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\xd7\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00]3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe7\x004\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\x07\xf6'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00"
2022-05-13 10:58:12,746:DEBUG:abstractprotocol:decode@409: Processing POSITIONAL type responses
2022-05-13 10:58:12,747:DEBUG:abstractprotocol:decode@431: Got defn ['str', 1, 'Unknown value in response 16', '']
2022-05-13 10:58:12,747:DEBUG:abstractprotocol:process_response@103: Processing data_type: str for data_name: Unknown value in response 16, raw_value b'\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00{*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%U'
2022-05-13 10:58:12,748:DEBUG:abstractprotocol:process_response@175: Processing format string str(raw_value)
2022-05-13 10:58:12,749:INFO:device:run_command@341: Decoded response {'raw_response': ["Uªë\x90\x03\x00JK-B2A8S20P\x00\x00\x00\x00\x009.X\x00\x00\x00\x00\x009.01M3\x00\x00Lõ'\x00q\x00\x00\x00JK-B2A8S20P\x00\x00\x00\x00\x001234\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00211109\x00\x001091515153\x000000\x000123456789012a\x00\x00123456\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00²ªU\x90ëÈ\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00DUªë\x90\x02\x00Ö\x0c×\x0cÖ\x0cØ\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00×\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00à\x00æ\x004\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\x07ö'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00»d;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00w*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bUªë\x90\x02\x01×\x0c×\x0cØ\x0c×\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00×\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00]3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00à\x00ç\x004\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\x07ö'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00»d;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00{*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%U", ''], '_command': 'getInfo', '_command_description': 'BLE Device Information inquiry', 'Header': ['55aaeb90', ''], 'Record Type': ['03', ''], 'Record Counter': [0, ''], 'Device Model': ['JK-B2A8S20P', ''], 'Hardware Version': ['9.X', ''], 'Software Version': ['9.01M3', ''], 'Up Time': ['30D7H25M0S', ''], 'Power-on Times': [113, ''], 'Device Name': ['JK-B2A8S20P', ''], 'Device Passcode': ['1234', ''], 'Manufacturing Date': ['211109', ''], 'Serial Number': ['1091515153', ''], 'Passcode': ['0000', ''], 'User Data': ['0123456789012a', ''], 'Setup Passcode': ['123456', ''], 'Unknown value in response 16': ["b'\\x00\\x00#\\x05\\x00\\x00\\x00\\x00\\xbbd;@\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x05\\x01\\x00{*\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00%U'", '']}
2022-05-13 10:58:12,750:DEBUG:__init__:main@409: results: {'raw_response': ["Uªë\x90\x03\x00JK-B2A8S20P\x00\x00\x00\x00\x009.X\x00\x00\x00\x00\x009.01M3\x00\x00Lõ'\x00q\x00\x00\x00JK-B2A8S20P\x00\x00\x00\x00\x001234\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00211109\x00\x001091515153\x000000\x000123456789012a\x00\x00123456\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00²ªU\x90ëÈ\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00DUªë\x90\x02\x00Ö\x0c×\x0cÖ\x0cØ\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00×\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00à\x00æ\x004\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\x07ö'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00»d;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00w*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bUªë\x90\x02\x01×\x0c×\x0cØ\x0c×\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00×\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00]3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00à\x00ç\x004\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\x07ö'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00»d;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00{*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%U", ''], '_command': 'getInfo', '_command_description': 'BLE Device Information inquiry', 'Header': ['55aaeb90', ''], 'Record Type': ['03', ''], 'Record Counter': [0, ''], 'Device Model': ['JK-B2A8S20P', ''], 'Hardware Version': ['9.X', ''], 'Software Version': ['9.01M3', ''], 'Up Time': ['30D7H25M0S', ''], 'Power-on Times': [113, ''], 'Device Name': ['JK-B2A8S20P', ''], 'Device Passcode': ['1234', ''], 'Manufacturing Date': ['211109', ''], 'Serial Number': ['1091515153', ''], 'Passcode': ['0000', ''], 'User Data': ['0123456789012a', ''], 'Setup Passcode': ['123456', ''], 'Unknown value in response 16': ["b'\\x00\\x00#\\x05\\x00\\x00\\x00\\x00\\xbbd;@\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x05\\x01\\x00{*\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00%U'", '']}
2022-05-13 10:58:12,750:INFO:__init__:get_output@34: attempting to create output processor: screen
2022-05-13 10:58:12,755:DEBUG:screen:__init__@16: processor.screen __init__ kwargs {}
2022-05-13 10:58:12,755:DEBUG:__init__:main@415: Using output filter: None
2022-05-13 10:58:12,756:INFO:screen:output@19: Using output processor: screen
2022-05-13 10:58:12,757:DEBUG:screen:output@20: kwargs {'data': {'raw_response': ["Uªë\x90\x03\x00JK-B2A8S20P\x00\x00\x00\x00\x009.X\x00\x00\x00\x00\x009.01M3\x00\x00Lõ'\x00q\x00\x00\x00JK-B2A8S20P\x00\x00\x00\x00\x001234\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00211109\x00\x001091515153\x000000\x000123456789012a\x00\x00123456\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00²ªU\x90ëÈ\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00DUªë\x90\x02\x00Ö\x0c×\x0cÖ\x0cØ\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00×\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00à\x00æ\x004\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\x07ö'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00»d;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00w*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bUªë\x90\x02\x01×\x0c×\x0cØ\x0c×\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00×\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00]3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00à\x00ç\x004\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\x07ö'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00#\x05\x00\x00\x00\x00»d;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00{*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%U", ''], '_command': 'getInfo', '_command_description': 'BLE Device Information inquiry', 'Header': ['55aaeb90', ''], 'Record Type': ['03', ''], 'Record Counter': [0, ''], 'Device Model': ['JK-B2A8S20P', ''], 'Hardware Version': ['9.X', ''], 'Software Version': ['9.01M3', ''], 'Up Time': ['30D7H25M0S', ''], 'Power-on Times': [113, ''], 'Device Name': ['JK-B2A8S20P', ''], 'Device Passcode': ['1234', ''], 'Manufacturing Date': ['211109', ''], 'Serial Number': ['1091515153', ''], 'Passcode': ['0000', ''], 'User Data': ['0123456789012a', ''], 'Setup Passcode': ['123456', ''], 'Unknown value in response 16': ["b'\\x00\\x00#\\x05\\x00\\x00\\x00\\x00\\xbbd;@\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x05\\x01\\x00{*\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00%U'", '']}, 'tag': 'getInfo', 'mqtt_broker': MqttBroker(name='localhost', port=1883, username=None, password=None, results_topic='jkbms', mqttc=<paho.mqtt.client.Client object at 0x76581ef8>, _isConnected=False), 'udp_port': '5555', 'mongo_url': None, 'mongo_db': 'mppsolar', 'filter': None, 'excl_filter': None, 'keep_case': False}
Command: getInfo - BLE Device Information inquiry
------------------------------------------------------------
Parameter Value Unit
header 55aaeb90
record_type 03
record_counter 0
device_model JK-B2A8S20P
hardware_version 9.X
software_version 9.01M3
up_time 30D7H25M0S
power-on_times 113
device_name JK-B2A8S20P
device_passcode 1234
manufacturing_date 211109
serial_number 1091515153
passcode 0000
user_data 0123456789012a
setup_passcode 123456
unknown_value_in_response_16 b'\x00\x00#\x05\x00\x00\x00\x00\xbbd;@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x05\x01\x00{*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%U'
2022-05-13 10:58:12,759:DEBUG:__init__:main@438: Not daemon, so not looping```
@jblance @syssi getCellData, however, isn't so joyful..
Send the following command:-
sudo jkbms -p /dev/ttyUSB0 -P JK02 -b 115200 -c getCellData -D
get the following response:-
2022-05-13 11:05:37,104:DEBUG:__init__:main@232: MqttBroker(name='localhost', port=1883, username=None, password=None, results_topic='jkbms', mqttc=<paho.mqtt.client.Client object at 0x765c7ef8>, _isConnected=False)
2022-05-13 11:05:37,105:DEBUG:__init__:main@234: udp port 5555
2022-05-13 11:05:37,105:DEBUG:__init__:main@237: Using Mongo None with mppsolar
2022-05-13 11:05:37,105:INFO:__init__:main@337: Creating device "unnamed" (type: "jkbms") on port "/dev/ttyUSB0 (porttype=None)" using protocol "JK02"
2022-05-13 11:05:37,112:DEBUG:__init__:main@341: device_class <class 'mppsolar.devices.jkbms.jkbms'>
2022-05-13 11:05:37,112:DEBUG:device:__init__@33: __init__ args ()
2022-05-13 11:05:37,113:DEBUG:device:__init__@34: __init__ kwargs {'name': 'unnamed', 'port': '/dev/ttyUSB0', 'protocol': 'JK02', 'baud': 115200, 'porttype': None, 'mqtt_broker': MqttBroker(name='localhost', port=1883, username=None, password=None, results_topic='jkbms', mqttc=<paho.mqtt.client.Client object at 0x765c7ef8>, _isConnected=False), 'udp_port': '5555', 'mongo_url': None, 'mongo_db': 'mppsolar'}
2022-05-13 11:05:37,113:DEBUG:__init__:get_port_type@65: port matches ttyusb
2022-05-13 11:05:37,113:INFO:__init__:get_port@107: Using serialio for communications
2022-05-13 11:05:37,125:DEBUG:__init__:get_protocol@12: Protocol JK02
2022-05-13 11:05:37,131:DEBUG:device:__init__@38: __init__ name unnamed, port <mppsolar.inout.serialio.SerialIO object at 0x75f9b238>, protocol <mppsolar.protocols.jk02.jk02 object at 0x75f8f5c8>
2022-05-13 11:05:37,132:DEBUG:__init__:main@390: Commands [(<mppsolar.devices.jkbms.jkbms object at 0x75f8f538>, 'getCellData', 'getCellData', 'screen', None, None)]
2022-05-13 11:05:37,132:INFO:__init__:main@395: Looping 1 commands
2022-05-13 11:05:37,132:INFO:__init__:main@405: Getting results from device: jkbms device - name: unnamed, port: <mppsolar.inout.serialio.SerialIO object at 0x75f9b238>, protocol: <mppsolar.protocols.jk02.jk02 object at 0x75f8f5c8> for command: getCellData, tag: getCellData, outputs: screen
2022-05-13 11:05:37,133:INFO:device:run_command@274: Running command getCellData
2022-05-13 11:05:37,133:INFO:jkabstractprotocol:get_full_command@73: Using protocol b'JK02' with 3 commands
2022-05-13 11:05:37,133:DEBUG:jkabstractprotocol:get_command_defn@106: get_command_defn for: getCellData
2022-05-13 11:05:37,134:DEBUG:abstractprotocol:get_command_defn@60: Processing command 'getCellData'
2022-05-13 11:05:37,134:DEBUG:abstractprotocol:get_command_defn@62: Found command getCellData in protocol b'JK02'
2022-05-13 11:05:37,134:DEBUG:jkabstractprotocol:get_full_command@80: self._command = getCellData
2022-05-13 11:05:37,134:DEBUG:jkabstractprotocol:get_full_command@91: cmd with SOR: bytearray(b'\xaaU\x90\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
2022-05-13 11:05:37,135:DEBUG:jkabstractprotocol:get_full_command@99: 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')
2022-05-13 11:05:37,135:DEBUG:jkabstractprotocol:get_full_command@101: cmd with crc: bytearray(b'\xaaU\x90\xeb\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10')
2022-05-13 11:05:37,135:INFO:device:run_command@303: 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
2022-05-13 11:05:37,135:DEBUG:jkabstractprotocol:get_command_defn@106: get_command_defn for: getCellData
2022-05-13 11:05:37,136:DEBUG:abstractprotocol:get_command_defn@60: Processing command 'getCellData'
2022-05-13 11:05:37,136:DEBUG:abstractprotocol:get_command_defn@62: Found command getCellData in protocol b'JK02'
2022-05-13 11:05:37,136:DEBUG:serialio:send_and_receive@19: port /dev/ttyUSB0, baudrate 115200
2022-05-13 11:05:37,140:DEBUG:serialio:send_and_receive@22: Executing command via serialio...
2022-05-13 11:05:37,242:DEBUG:serialio:send_and_receive@30: serial response was: b'U\xaa\xeb\x90\x01\r'
2022-05-13 11:05:37,346:DEBUG:device:run_command@322: Send and Receive Response b'U\xaa\xeb\x90\x01\r'
2022-05-13 11:05:37,347:INFO:abstractprotocol:decode@196: response passed to decode: b'U\xaa\xeb\x90\x01\r'
2022-05-13 11:05:37,347:DEBUG:jkabstractprotocol:get_command_defn@106: get_command_defn for: getCellData
2022-05-13 11:05:37,348:DEBUG:abstractprotocol:get_command_defn@60: Processing command 'getCellData'
2022-05-13 11:05:37,348:DEBUG:abstractprotocol:get_command_defn@62: Found command getCellData in protocol b'JK02'
2022-05-13 11:05:37,348:INFO:abstractprotocol:decode@236: Processing response of type POSITIONAL
2022-05-13 11:05:37,349:DEBUG:jkabstractprotocol:get_responses@131: Got defn: ['Hex2Str', 4, 'Header', '']
[...snip...]
Sending the getCellData manually through realTerm, ie sending the following hexadecimal string:-
AA5590EB96000000000000000000000000000010
returns the following string (hex file also attached for @syssi), which tends to indicate to me that the command itself works just fine, it's, as @jblance has said before, a parsing issue getCellDataChallengeAndResponse.txt :-
55AAEB90010058020000280A0000B80B0000100E 0000480D00000500000000000000000000000000000000000000C4090000A86100001E0000003C00 0000400D03002C0100003C0000003C000000D0070000BC02000058020000BC0200005802000038FF FFFF9CFFFFFF84030000BC02000008000000010000000100000001000000C0450400DC050000B80B 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000039 AA5590EBC8010100000000000000000000000044
Problem is here:
2022-05-13 11:05:37,140:DEBUG:serialio:send_and_receive@22: Executing command via serialio...
2022-05-13 11:05:37,242:DEBUG:serialio:send_and_receive@30: serial response was: b'U\xaa\xeb\x90\x01\r'
The response is way too short, the serialio code reads until \r
which isnt valid for this data
could try the dalyserialio module (reads until there is no more data), or we'll need to think of different logic for determining the end of the read stream
edit: Mind you \r
ia 0D
and the above seems to indicate its terminating on 00
?
55AAEB90010058020000280A0000B80B0000100E 0000480D00000500000000000000000000000000000000000000C4090000A86100001E0000003C00 0000400D03002C0100003C0000003C000000D0070000BC02000058020000BC0200005802000038FF FFFF9CFFFFFF84030000BC02000008000000010000000100000001000000C0450400DC050000B80B 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000039
This is the 300 byte response that were looking for
AA5590EBC8010100000000000000000000000044
And this is something else - perhaps an acknowledgement
Did you try using the dalyserialio to read? (it might hang) i.e add --porttype dalyserial
to the command
Hi @jblance - yes it is always shown as an unusually attenuated response in the debug log when reading via the jk02 command... but if manually entering the same hex string, as evidenced by the dump it's a logical looking return (I'm having merry hell trying to post the hex as text here, so a screenshot of the command (green) and response (yellow) is below.
So I suspect a parsing issue as you've pointed out.
re the dalyserialio - please what's the best way to do that? I don't have a clue where to begin
I haven't yet tried the dalyserial command, have instead been researching the reason the FTDI backfeeds the BMS when you reboot it (the 'croaking' buzzer). The backfeeding appears to occur through the TX line of the FTDI adaptor when you reboot or disconnect the power to the BMS.
I had tried to use an ADUM1201 (as discussed above) attached on one side to the VCC and GND of the bluetooth module to electronically isolate the FTDI from the board, but this configuration could only 'read' output from the bluetooth module, it could not 'accept' commands.. it also had the effect of preventing the BMS booting properly due to voltage sag on startup (which I managed to prevent by installing a decoupling capacitor between the VCC and GND on the bluetooth module).
Nonetheless, this didn't improve the 'no commands received' problem, so I had to give up and just directly connect the FTDI Tx, Rx and GND between the FTDI and the bluetooth module. My oscilloscope has gone on the blink, so I really can't troubleshoot WHY the ADUM1201 only worked in one direction, but I suspect it's because the power supply of the bluetooth module isn't really capable of maintaining the 1.5mA consumption of the ADUM1201.
Researching further, I found the following possible solutions to FTDI backfeed, the easiest of which may be to remove the voltage select jumper entirely - and power the FTDI directly from the bluetooth module - but DO THIS WITH CAUTION, as if you inadvertently end up feeding power from the ftdi to the bluetooth module or connecting VCC(module) to VCC(laptop or PC FTDI) you might release magic smoke from your laptop, the BMS or both.
I‘d like to sketch a somewhat different method to solving this problem, although it might not apply due to design requirements.
All those cheap little FTDI breakout boards have a jumper to choose if the board should pull up the target to 3.3V or 5V. However, there is a third option: leave the jumper disconnected and connect the target’s VCC to the VCC pin of the breakout board.
Thus you need 4 wires (RX, TX, VCC and GND) to connect the FTDI to the target, but you not only allow for different voltage options, but this also would solve your problem of backfeeding through protection diodes.
Unfortunately an optocoupler or optoisolation solution won't likely work, as it's very difficult to find an optocoupler that can handle these very high baud rates. Most top out at about 57,600 baud. Hence why i tried to use a magnetic type isolation board (the ADUM1201 - but on the BMS board itself, for the other serial ports, they use a pi122U31, which is similar).
It would be nice to work out why the ADUM1201 solution doesn't work well - suspect it would entail finding a more stable 3.3V power source on the BMS, but as mentioned I'm a bit limited into how much more troubleshooting I can do on that because my oscilloscope is not working at present.
Tested board using Syssi ESP32 BLE - mixed success, similar parsing errors. log file in the linked post.
successfully obtaining all data using @syssi repository - some relevant findings in following link - overall Sebastian found that very minimal changes were required compared to previous versions.
closing - moved discussion across to the esp32 repository as I'm now using an ESP32, as although we did manage to get the serial on these boards working by piggybacking the uart on the bluetooth module, I'm finding using the ESP more convenient. He has discovered an issue with the error bitmap and discusses some other associated issues which may be useful for this repository, @jblance.
Thankyou for your help here, all :)
Hi there -
@jblance thankyou for this repository.
I'm currently evaluating the JK-B2A8S20P board, hardware version 9.X, software version 9.01M3. I'm going to document my progress here so that others can benefit.
Apologies if some of this is clunky, it's my first time using github.
I've taken a video of the board, but it's still uploading, but for the moment, some insights:-
Cheers - EBE