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