Skip to content

Testing on Solarbank 2 E1600 Pro #28

Description

@jul1an-s

Hi,

first off: Amazing project, thank you so much for your work! 🎉

I'm trying to get the Solarbank 2 E1600 Pro working with this project. Ultimate goal would be to control the output power through the schedule like @smariacher did with the Solarbank 1 #21

I got some first telemetry dumps, but apparently it can't decrypt the telemetry data properly.


DEBUG:bleak_retry_connector:F4:9D:8A:13:CE:82 - F4:9D:8A:13:CE:82: Connected after 1 attempts
DEBUG:SolixBLE.device:Established initial connection to 'Solarbank 2 E1600 Pro' on attempt 1!
DEBUG:SolixBLE.device:Subscribing to notifications from device 'Solarbank 2 E1600 Pro'!
DEBUG:bleak.backends.bluezdbus.client:using "AcquireNotify" for notifications on characteristic 17
DEBUG:bleak.backends.bluezdbus.manager:received D-Bus signal: org.freedesktop.DBus.Properties.PropertiesChanged (/org/bluez/hci0/dev_F4_9D_8A_13_CE_82/service000e/char0011): ['org.bluez.GattCharacteristic1', {'NotifyAcquired': <dbus_fast.signature.Variant ('b', True)>}, []]
DEBUG:SolixBLE.device:Sending negotiation initiation request to 'Solarbank 2 E1600 Pro'...
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82
DEBUG:SolixBLE.device:Received notification from 'Solarbank 2 E1600 Pro'. length: 14, packet: 'ff090e00030001080100a1010152'
DEBUG:SolixBLE.device:Pattern: 030001
DEBUG:SolixBLE.device:CMD: 0801
DEBUG:SolixBLE.device:Payload: 00a10101
DEBUG:SolixBLE.device:Payload length: 4
DEBUG:SolixBLE.device:Received encryption negotiation message!
DEBUG:SolixBLE.device:Entered negotiation stage 1 due to response from device!
DEBUG:SolixBLE.device:Parameters: {'a1': '01'}
DEBUG:SolixBLE.device:Sending stage 1 response message...
DEBUG:bleak.backends.bluezdbus.client:Write Characteristic 8c850002-0302-41c5-b46e-cf057c562025 | /org/bluez/hci0/dev_F4_9D_8A_13_CE_82/service000e/char000f: b'\xff\t6\x00\x03\x00\x01\x00\x01\xa1\x04B\xad\x8ci\xa2$b2dc0b17-b75d-4abf-ba6e-ec7c997c23e7\xb9'
DEBUG:bleak.backends.bluezdbus.client:Write Characteristic 8c850002-0302-41c5-b46e-cf057c562025 | /org/bluez/hci0/dev_F4_9D_8A_13_CE_82/service000e/char000f: b'\xff\t=\x00\x03\x00\x01\x00\x03\xa1\x04B\xad\x8ci\xa2$b2dc0b17-b75d-4abf-ba6e-ec7c997c23e7\xa3\x01 \xa4\x02\x00\xf0d'
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82
DEBUG:SolixBLE.device:Received notification from 'Solarbank 2 E1600 Pro'. length: 27, packet: 'ff091b00030001080300a10102a202fd00a30144a40101a50102ff'
DEBUG:SolixBLE.device:Pattern: 030001
DEBUG:SolixBLE.device:CMD: 0803
DEBUG:SolixBLE.device:Payload: 00a10102a202fd00a30144a40101a50102
DEBUG:SolixBLE.device:Payload length: 17
DEBUG:SolixBLE.device:Received encryption negotiation message!
DEBUG:SolixBLE.device:Entered negotiation stage 2 due to response from device!
DEBUG:SolixBLE.device:Parameters: {'a1': '02', 'a2': 'fd00', 'a3': '44', 'a4': '01', 'a5': '02'}
DEBUG:SolixBLE.device:Sending stage 2 response message...
DEBUG:bleak.backends.bluezdbus.client:Write Characteristic 8c850002-0302-41c5-b46e-cf057c562025 | /org/bluez/hci0/dev_F4_9D_8A_13_CE_82/service000e/char000f: b'\xff\t6\x00\x03\x00\x01\x00)\xa1\x04B\xad\x8ci\xa2$b2dc0b17-b75d-4abf-ba6e-ec7c997c23e7\x91'
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82
DEBUG:SolixBLE.device:Received notification from 'Solarbank 2 E1600 Pro'. length: 56, packet: 'ff093800030001082900a10103a2054553503332a307302e302e302e33a41041504347513830453233373030343134a506f49d8a13ce8282'
DEBUG:SolixBLE.device:Pattern: 030001
DEBUG:SolixBLE.device:CMD: 0829
DEBUG:SolixBLE.device:Payload: 00a10103a2054553503332a307302e302e302e33a41041504347513830453233373030343134a506f49d8a13ce82
DEBUG:SolixBLE.device:Payload length: 46
DEBUG:SolixBLE.device:Received encryption negotiation message!
DEBUG:SolixBLE.device:Entered negotiation stage 3 due to response from device!
DEBUG:SolixBLE.device:Parameters: {'a1': '03', 'a2': '4553503332', 'a3': '302e302e302e33', 'a4': '41504347513830453233373030343134', 'a5': 'f49d8a13ce82'}
DEBUG:SolixBLE.device:Sending stage 3 response message...
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82
DEBUG:SolixBLE.device:Received notification from 'Solarbank 2 E1600 Pro'. length: 11, packet: 'ff090b00030001080500f2'
DEBUG:SolixBLE.device:Pattern: 030001
DEBUG:SolixBLE.device:CMD: 0805
DEBUG:SolixBLE.device:Payload: 00
DEBUG:SolixBLE.device:Payload length: 1
DEBUG:SolixBLE.device:Received encryption negotiation message!
DEBUG:SolixBLE.device:Entered negotiation stage 4 due to response from device!
DEBUG:SolixBLE.device:Parameters: {}
DEBUG:SolixBLE.device:Sending stage 4 response message...
DEBUG:bleak.backends.bluezdbus.client:Write Characteristic 8c850002-0302-41c5-b46e-cf057c562025 | /org/bluez/hci0/dev_F4_9D_8A_13_CE_82/service000e/char000f: b'\xff\t@\x00\x03\x00\x01\x00\x05\xa1\x04C\xad\x8ci\xa2$b2dc0b17-b75d-4abf-ba6e-ec7c997c23e7\xa3\x01 \xa4\x02\x00\xf0\xa5\x01@\xfa'
DEBUG:bleak.backends.bluezdbus.client:Write Characteristic 8c850002-0302-41c5-b46e-cf057c562025 | /org/bluez/hci0/dev_F4_9D_8A_13_CE_82/service000e/char000f: b'\xff\tL\x00\x03\x00\x01\x00!\xa1@\x06\x0e\xa1h\xf22\xae\xdb7\xfb-\x12\x0cI\x18\x03)\xacr\xab^\xc3\xeb\x8f\xd3\n/%-\xc5\xe1Q\xda\xbc\xcd\x9b\x1d\xc1\xe2\x88pL\xa7`\xa0\xd8\xc9\x18\xe5\xc9H#\xa1\xf6\t\xa4\xbf\x07\xfbL3\xee!\x90\x85'
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82
DEBUG:SolixBLE.device:Received notification from 'Solarbank 2 E1600 Pro'. length: 77, packet: 'ff094d00030001082100a1401e8d3088e84e1e902688aea10302f93fe637c26003a82aeff639cfbebaf5c604fc11508c6874e2101ba07b339ad393eef8c1c9935148c8141a18cd0e8f7dfa6d20'
DEBUG:SolixBLE.device:Pattern: 030001
DEBUG:SolixBLE.device:CMD: 0821
DEBUG:SolixBLE.device:Payload: 00a1401e8d3088e84e1e902688aea10302f93fe637c26003a82aeff639cfbebaf5c604fc11508c6874e2101ba07b339ad393eef8c1c9935148c8141a18cd0e8f7dfa6d
DEBUG:SolixBLE.device:Payload length: 67
DEBUG:SolixBLE.device:Received encryption negotiation message!
DEBUG:SolixBLE.device:Entered negotiation stage 5 due to response from device!
DEBUG:SolixBLE.device:Parameters: {'a1': '1e8d3088e84e1e902688aea10302f93fe637c26003a82aeff639cfbebaf5c604fc11508c6874e2101ba07b339ad393eef8c1c9935148c8141a18cd0e8f7dfa6d'}
DEBUG:SolixBLE.device:Public key of device: 041e8d3088e84e1e902688aea10302f93fe637c26003a82aeff639cfbebaf5c604fc11508c6874e2101ba07b339ad393eef8c1c9935148c8141a18cd0e8f7dfa6d
DEBUG:SolixBLE.device:Shared secret: 4a30f523082b0a652869fa7e89202f78fe7581d7e5502009a7c343f8a2e82008
DEBUG:SolixBLE.device:AES key: 4a30f523082b0a652869fa7e89202f78
DEBUG:SolixBLE.device:AES IV: fe7581d7e5502009a7c343f8a2e82008
DEBUG:SolixBLE.device:Sending stage 5 response message...
DEBUG:bleak.backends.bluezdbus.client:Write Characteristic 8c850002-0302-41c5-b46e-cf057c562025 | /org/bluez/hci0/dev_F4_9D_8A_13_CE_82/service000e/char000f: b'\xff\tZ\x00\x03\x00\x01@"X\x0b\xc0S*S\xc79\xad\xf3\xda{\x99J{_"\x1b\xcc\x16\xba\xb69,!\\\xb4\xfa\xafA\xd9\xd5\x8e,\x81\xc0\x16\xe4t\xc7\x8e\xedUi\x14|\xb7J\x1f"\xca+?\xad. \x9d\xbb\xcf\xbd\xac\xa3R\x03JlG\x9f\x05_hX\x1b_\x1e"4\x88\t\xf5&'
DEBUG:SolixBLE.device:Negotiations with 'Solarbank 2 E1600 Pro' succeeded!
DEBUG:SolixBLE.device:Automatic reconnect task ready and waiting for disconnect event from 'Solarbank 2 E1600 Pro'!
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82
DEBUG:SolixBLE.device:Received notification from 'Solarbank 2 E1600 Pro'. length: 253, packet: 'ff09fd0003010fc40513c854310cabf9a3aa16623be7bb2d51a0beb5d64ab8e6cd1f04958220e0af32c8b223f78215e4bd45feeac9c6af62b3ae1a6e36b1a9d6a60c6936525ca0fc322f12caf31db71dc75f46e95093150b4f67a37b97c55678eccc6ab2ed99546e2a00f80956e4d516234eb9e990212bec91e1939eb785c4fa3bb759f743b741dd899d4e137e7394a76eb9c7e2223ecebfc8d65fdad14ecbd1d3684d5b6a9159ce682622f41a58036aa633c2b0513314fddd524bd119739075f26cc7a79e70cb2a4bf9a19e145d23259ec53882aa2487496c198fef089339e241818281c69538a8b33ffa8e49864f5e028fd11ce5c1af6aeef0631bae'
DEBUG:SolixBLE.device:Pattern: 03010f
DEBUG:SolixBLE.device:CMD: c405
DEBUG:SolixBLE.device:Payload: 13c854310cabf9a3aa16623be7bb2d51a0beb5d64ab8e6cd1f04958220e0af32c8b223f78215e4bd45feeac9c6af62b3ae1a6e36b1a9d6a60c6936525ca0fc322f12caf31db71dc75f46e95093150b4f67a37b97c55678eccc6ab2ed99546e2a00f80956e4d516234eb9e990212bec91e1939eb785c4fa3bb759f743b741dd899d4e137e7394a76eb9c7e2223ecebfc8d65fdad14ecbd1d3684d5b6a9159ce682622f41a58036aa633c2b0513314fddd524bd119739075f26cc7a79e70cb2a4bf9a19e145d23259ec53882aa2487496c198fef089339e241818281c69538a8b33ffa8e49864f5e028fd11ce5c1af6aeef0631b
DEBUG:SolixBLE.device:Payload length: 243
DEBUG:SolixBLE.device:Received unknown message of type: c405
ERROR:SolixBLE.device:Exception decrypting unknown message type
Traceback (most recent call last):
  File "/home/julian/projects/SolixBLE/SolixBLE/device.py", line 586, in _process_notification
    decrypted_payload = self._decrypt_payload(payload)
  File "/home/julian/projects/SolixBLE/SolixBLE/device.py", line 448, in _decrypt_payload
    return cipher.decrypt(payload)
           ~~~~~~~~~~~~~~^^^^^^^^^
  File "/home/julian/projects/SolixBLE/.venv/lib64/python3.13/site-packages/Crypto/Cipher/_mode_cbc.py", line 246, in decrypt
    raise ValueError("Data must be padded to %d byte boundary in CBC mode" % self.block_size)
ValueError: Data must be padded to 16 byte boundary in CBC mode
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82
DEBUG:SolixBLE.device:Received notification from 'Solarbank 2 E1600 Pro'. length: 253, packet: 'ff09fd0003010fc40523ec71b88dfe159cc39a620c8c910b449efb09d5601b0c0fb7f1681b0a422f57a3880a35ad488277280f10c28bc4b419413513dcc3c53b972f5a22e3697d289a811d5119936dbc6a462bca208c9e17253e714a6ae0b4945acb4d2412f7ade88f993178d0c9fe1ce93f05074012e7aa6d39b9e53d9c35e7e5aaf5d06457bff3fb842b99af5ac9d596f2133d0b71d6cd9ae5d6cbe7cc555c34e6569e3aacd9cbdd20b2bc29e40ffa5d40849389d033e4138dc6815591d804fd5d5b3b00f48d149c2dc1c83ce01acc580fe2b1df261785efd1ba04ce34a7afd9df2cecb9d717d7c9ee245955dc80215d771bc0de8def84e4d8aa350a'
DEBUG:SolixBLE.device:Pattern: 03010f
DEBUG:SolixBLE.device:CMD: c405
DEBUG:SolixBLE.device:Payload: 23ec71b88dfe159cc39a620c8c910b449efb09d5601b0c0fb7f1681b0a422f57a3880a35ad488277280f10c28bc4b419413513dcc3c53b972f5a22e3697d289a811d5119936dbc6a462bca208c9e17253e714a6ae0b4945acb4d2412f7ade88f993178d0c9fe1ce93f05074012e7aa6d39b9e53d9c35e7e5aaf5d06457bff3fb842b99af5ac9d596f2133d0b71d6cd9ae5d6cbe7cc555c34e6569e3aacd9cbdd20b2bc29e40ffa5d40849389d033e4138dc6815591d804fd5d5b3b00f48d149c2dc1c83ce01acc580fe2b1df261785efd1ba04ce34a7afd9df2cecb9d717d7c9ee245955dc80215d771bc0de8def84e4d8aa35
DEBUG:SolixBLE.device:Payload length: 243
DEBUG:SolixBLE.device:Received unknown message of type: c405
ERROR:SolixBLE.device:Exception decrypting unknown message type
Traceback (most recent call last):
  File "/home/julian/projects/SolixBLE/SolixBLE/device.py", line 586, in _process_notification
    decrypted_payload = self._decrypt_payload(payload)
  File "/home/julian/projects/SolixBLE/SolixBLE/device.py", line 448, in _decrypt_payload
    return cipher.decrypt(payload)
           ~~~~~~~~~~~~~~^^^^^^^^^
  File "/home/julian/projects/SolixBLE/.venv/lib64/python3.13/site-packages/Crypto/Cipher/_mode_cbc.py", line 246, in decrypt
    raise ValueError("Data must be padded to %d byte boundary in CBC mode" % self.block_size)
ValueError: Data must be padded to 16 byte boundary in CBC mode
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82
DEBUG:SolixBLE.device:Received notification from 'Solarbank 2 E1600 Pro'. length: 39, packet: 'ff09270003010fc40533ecea1c09301d956378241b6d6eccbe078a8fcc1322b732e6ab4d75c31c'
DEBUG:SolixBLE.device:Pattern: 03010f
DEBUG:SolixBLE.device:CMD: c405
DEBUG:SolixBLE.device:Payload: 33ecea1c09301d956378241b6d6eccbe078a8fcc1322b732e6ab4d75c3
DEBUG:SolixBLE.device:Payload length: 29
DEBUG:SolixBLE.device:Received unknown message of type: c405
ERROR:SolixBLE.device:Exception decrypting unknown message type
Traceback (most recent call last):
  File "/home/julian/projects/SolixBLE/SolixBLE/device.py", line 586, in _process_notification
    decrypted_payload = self._decrypt_payload(payload)
  File "/home/julian/projects/SolixBLE/SolixBLE/device.py", line 448, in _decrypt_payload
    return cipher.decrypt(payload)
           ~~~~~~~~~~~~~~^^^^^^^^^
  File "/home/julian/projects/SolixBLE/.venv/lib64/python3.13/site-packages/Crypto/Cipher/_mode_cbc.py", line 246, in decrypt
    raise ValueError("Data must be padded to %d byte boundary in CBC mode" % self.block_size)
ValueError: Data must be padded to 16 byte boundary in CBC mode
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82
DEBUG:SolixBLE.device:Received notification from 'Solarbank 2 E1600 Pro'. length: 26, packet: 'ff091a0003010f440940b347438cbedb04133c595cd4261d394a'
DEBUG:SolixBLE.device:Pattern: 03010f
DEBUG:SolixBLE.device:CMD: 4409
DEBUG:SolixBLE.device:Payload: 40b347438cbedb04133c595cd4261d39
DEBUG:SolixBLE.device:Payload length: 16
DEBUG:SolixBLE.device:Received unknown message of type: 4409
DEBUG:SolixBLE.device:Decrypted payload: a10131a2020100a302012f0505050505
DEBUG:SolixBLE.device:Parameters: {
    "a1": {
        "bytes": "b'1'",
        "hex": "31",
        "int": "0",
        "uint": "0"
    },
    "a2": {
        "bytes": "b'\\x01\\x00'",
        "hex": "0100",
        "int": "0",
        "uint": "0"
    },
    "a3": {
        "bytes": "b'\\x01/'",
        "hex": "012f",
        "int": "47",
        "uint": "47"
    }
}
DEBUG:SolixBLE.device:The client the notification is from is: BleakClient, F4:9D:8A:13:CE:82

Is this really just a padding issue or is it using a different encryption mechanism? I've read GCM might be used by some models.
Sorry I'm not very familiar with the Anker devices and these protocols. I'm willing to help but I need some guidance

Edit: Included encryption secrets

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions