jblance / mpp-solar

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

Getting the jblance respository working with JK-B2A8S20P JK-BMS Boards #224

Closed EasilyBoredEngineer closed 2 years ago

EasilyBoredEngineer commented 2 years ago

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

  1. My version of the board has three attached serial ports. One is marked RS485, the other is marked GPS and the third is a multi pin connector for the optional display.
  2. I haven't yet done much work with the GPS port, but I believe it's straight TTL.
  3. The RS485 and Display port use RS485 natively - as opposed to previous board versions which required an external OEM adaptor.
  4. The RS485 port uses a 3 pin 1.25mm pitch JST connector.
  5. Both the display and the RS485 port trace back to a YD3082 RS485 driver chip each (see at this link)
  6. The 'board side' of the RS485 chips then trace to a pi 122U31 galvanic isolator chip, which appears to be a bit similar in design to the more well known ADUM1201 IC's.
  7. In a bit of an investigative mission, I've probed the TTL side of both RS485 chips.
  8. I've found that the display RS485 is driven by a repetitive pattern of data at what seems to be 9600 baud.
  9. The 'RS485' 3 pin connector, although it has all the components necessary, doesn't seem to be 'switched on' on my board - although it's connected back to the MM32F103 processor on the board, my oscilloscope shows no data whatsoever is being fed from the processor into the associated RS485 circuit. It seems to be provisioned for but inactive.
  10. The board is also fitted with a bluetooth module, the same as other jk-bms versions. A picture of the bluetooth module has been linked by other users.
  11. My work to date has been heavily influenced by the discussion "Cannot connect to JK BMS/Active Balancer", in which @bullar points out that if your receiving device has a bluetooth stack <=4.2, this breaks the repository. As a result, given that I have only a rpi 3 B+ (bluetooth version 4.1) and a linux laptop (bluetooth version 4.2), I've soldered a YP-05 TTL to USB converter to the TTL ports on the bluetooth module while I await an ESP32. This has given me usable I/O capabilities - although I've found I do need to have the jkbms mobile phone active and connected to the board or I can't send and receive data through my ttl converter. If anyone can suggest any work arounds that would be appreciated.
  12. The baud for the ttl port on the bluetooth module is 115200. The native voltage of the board is 3.3V. The process I've used to interface in this way with the bluetooth module will be covered in an upcoming linked video.

Cheers - EBE

EasilyBoredEngineer commented 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:-

  1. The bluetooth board on the JK-B2A8S20P uses 115,200 baud.
  2. The bluetooth board can be disabled completely by pulling the _RST pin low (see a labelled picture of the board here, from another user), but it makes no difference to the ability to send data to the microcontroller - so I'm struggling to see a practical use for that finding.
  3. as @Smoeller0 pointed out, you can keep the board awake even if the bluetooth app is closed, by pulling the P11 pin high, but you must open the JK-bms app at least once to get the cell data flowing.
  4. On my crappy oscilloscope, I can see some logic on the P12 pin of the bluetooth module that seems to coincide with the module sending (or receiving?) data - it's possible that has something to do with the reason I can't get the microcontroller to listen to me.

I'm now going to move on to sniffing and obtaining hex dumps from the screen interface for @syssi

EasilyBoredEngineer commented 2 years ago

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

ScreenCapture9600.txt

syssi commented 2 years ago

Do you own a logic analyzer to monitor multiple I/Os (RX, TX, P10, P11, P12, P13) of the bluetooth module in parallel?

EasilyBoredEngineer commented 2 years ago

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

syssi commented 2 years ago

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

EasilyBoredEngineer commented 2 years ago

@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

syssi commented 2 years ago

This screenshots should help a bit. Please try to pull up P11 and P12.

No connection / idle:

sigrok-ble-no-connection

Connection + 0x97 request + periodic responses

sigrok-ble-connected-capture

The colors and pin labels should match with the sigrok screenshot:

connections

Raw capture (sigrok format) + sigrok UI config (labels + colors):

jkbms-ble-connected-capture.zip

EasilyBoredEngineer commented 2 years ago

@syssi - legend :)

Syssi, could you please share the connection and command hex string that you are sending to receive this output?

Thankyou!

syssi commented 2 years ago

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.

  1. The first command is the 0x97 which retrieves the device info.
  2. The second command is the 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 first-request-0x97 second-request-0x96

syssi commented 2 years ago

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:

https://de.aliexpress.com/item/1005003032516569.html

Smoeller0 commented 2 years ago

need any help to read data from bms? In my system it is working. i read data from the bms via serial. bms

EasilyBoredEngineer commented 2 years ago

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

IMG_3031

EasilyBoredEngineer commented 2 years ago

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

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

syssi commented 2 years ago

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.

Smoeller0 commented 2 years ago

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.

syssi commented 2 years ago

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

EasilyBoredEngineer commented 2 years ago

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?

syssi commented 2 years ago

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.

EasilyBoredEngineer commented 2 years ago

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.

EasilyBoredEngineer commented 2 years ago

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.

ftdi2 ftdi1

EasilyBoredEngineer commented 2 years ago

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

EasilyBoredEngineer commented 2 years ago

@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```
EasilyBoredEngineer commented 2 years ago

@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...]
EasilyBoredEngineer commented 2 years ago

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

jblance commented 2 years ago

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?

jblance commented 2 years ago

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

EasilyBoredEngineer commented 2 years ago

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 Screenshot 2022-05-13 113813

EasilyBoredEngineer commented 2 years ago

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.

EasilyBoredEngineer commented 2 years ago

Tested board using Syssi ESP32 BLE - mixed success, similar parsing errors. log file in the linked post.

EasilyBoredEngineer commented 2 years ago

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.

EasilyBoredEngineer commented 2 years ago

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