Python SDK does not robustly handle BLE connection failures / drops
Note! This ticket will capture any and all issues relating to Python SDK BLE:
- recovery from failures to establish connection
- recovery from connection drops
- closing and re-opening Wired / Wireless GoPro objecvts
In general, these use cases have not yet been designed for / tested against and I'm not sure much of this is even solvable in the Python SDK due to the lack of robustness in Bleak and the OS's BLE stack. But it needs a major investigation on each operating system.
Component In the Python SDK.
Describe the bug If the connection to a GoPro fails, the WirelessGoPro._periodic_keep_alive coroutine is left open.
To Reproduce Start connection to a GoPro and have it fail (stop ble adapter or remove GoPro battery) Then we can observe _periodic_keep_alive by checking the running coroutines:
tasks = asyncio.all_tasks() coroutine_name = task.get_coro().qualname
Expected behavior I would expect the keepalive to be stopped once the Connection fails.
Hardware Hero 11 Linux 6
Additional context I'll try to investigate later if this can be solved by initiating connection within a contextlib.AsyncExitStack().
I've made some changes to this in the last release. However the bigger issue here is that the Wire(less)GoPro objects are not designed to persist through subsequent connections. I haven't spent much time on this because I don't think bleak robustly manages, at least on Windows, failed / reconnections.
In any case, there is a large investigation required to improve the robustness here.
I'm going to use this ticket as the gathering location for all BLE connection-robustness issues.
Another symptom: BLE connection drops after provisioning COHN even though there is still a communication channel through COHN cause state management to break. We're going to need to rearchitect the entire connection scheme to be scalable for multiple connections / types.
Relevent bleak ticket here: https://github.com/hbldh/bleak/issues/367
@tcamise-gpsw I came from the #555 thread. I am also experiencing the same issue as in #555. I am using Python 3.9 with the HERO13 Black.
Is there any prospect of this issue being resolved? Could you please provide an update on the current status?
Best regards, shiratama820
Is there any update on this ticket? It's causing us quite a bit of pain communicating via the python SDK with the Hero 13
No and it needs a deep investigation into various bleak errors on all OS's. Can you post the errors you are seeing?
@tcamise-gpsw I get really varying results. These are logs from my Raspberry Pi trying to connect two cameras, one after the other.
2025-03-14 19:25:22,930 - EpicGoPro - INFO - Setting up GoPro cameras... Failed to find a device in 5 seconds. Retrying #1 2025-03-14 19:25:25,791 - EpicGoPro - INFO - GoPro E1:24:8C:EC:22:DF: GoPro 0532 is connected via BLE Failed to find a device in 5 seconds. Retrying #1 Failed to find a device in 5 seconds. Retrying #2 Failed to find a device in 5 seconds. Retrying #3 2025-03-14 19:25:29,061 - EpicGoPro - INFO - GoPro C0:10:30:52:ED:BD: GoPro 7983 is connected via BLE
Sometimes it connects straight away, other times it refuses to connect and jumps through all the retry methods almost instantly, even setting the timeout to 30 seconds, there is no 30 second break between checks, or not according to the logs.
Other times only one camera will connect, and one won't. Is there a way to provide you better logs?
async def setup_gopro(self, gopros: List[GoProDeviceModel]) -> list[WirelessGoPro]:
"""Set up multiple GoPro cameras with sequential operations."""
self.logger.info("Setting up GoPro cameras...")
connected_gopros = []
gopro: WirelessGoPro | None = None
for gopro in gopros:
gopro_name = self.get_gopro_name(gopro.serialNumber)
try:
gopro = WirelessGoPro(gopro_name, enable_wifi=False)
await gopro.open(timeout=5, retries=5)
if gopro.is_ble_connected:
self.logger.info(f"GoPro {gopro.identifier} is connected via BLE")
assert await gopro.ble_command.set_camera_control(
camera_control_status=proto.EnumCameraControlStatus.CAMERA_EXTERNAL_CONTROL
)
connected_gopros.append(gopro)
else:
self.logger.error(f"GoPro {gopro.identifier} is not connected via BLE")
except Exception as e:
self.logger.error(f"Error setting up GoPro: {e}")
return connected_gopros
When I run this from my mac, I cannot get the GoPro Hero 13's to connect at all, unless I am in the Pairing mode screen, and then it's a 50/50 chance if they connect or not.
The logs are quite detailed already. But it sounds like you're only looking at the CLI log. There should be an extremely detailed .log file next to wherever you are calling the script from. So let's start with those.
This is assuming you're setting up logging the same as the demo scripts, i.e. photo.py
@tcamise-gpsw here are the logs for trying to connect to two devices on my macbook where only one successfully connected.
INFO 09:34:21.610 Scanning for GoPro 0532 bluetooth devices... bleak_wrapper.py:121
INFO 09:34:24.190 Discovered: 2952AF0B-53BD-C556-64F9-D95DAF0069E7: GoPro 7983 bleak_wrapper.py:134
WARNING 09:34:24.199 Failed to find a device in 5 seconds. Retrying #1 client.py:86
INFO 09:34:24.203 Scanning for GoPro 0532 bluetooth devices... bleak_wrapper.py:121
INFO 09:34:24.308 Discovered: 0C8C3694-332B-9A80-7103-9AD3CE3F3B0C: GoPro 0532 bleak_wrapper.py:134
INFO 09:34:24.312 Found 1 matching devices. bleak_wrapper.py:147
INFO 09:34:24.314 Establishing the BLE connection client.py:107
INFO 09:34:24.316 Establishing BLE connection to 0C8C3694-332B-9A80-7103-9AD3CE3F3B0C: GoPro 0532... bleak_wrapper.py:214
INFO 09:34:25.247 Discovering characteristics... bleak_wrapper.py:359
INFO 09:34:25.842 Done discovering characteristics! bleak_wrapper.py:404
INFO 09:34:25.847 Enabling notifications... bleak_wrapper.py:322
INFO 09:34:26.377 Done enabling notifications bleak_wrapper.py:328
INFO 09:34:26.384 gopro_wireless.py:726
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.ENCODING",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 09:34:26.440 gopro_wireless.py:659
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
-------------->>>>>>>>
INFO 09:34:26.449 gopro_wireless.py:726
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.SYSTEM_BUSY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 09:34:26.498 gopro_wireless.py:659
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.SYSTEM_BUSY" : "False",
},
-------------->>>>>>>>
INFO 09:34:26.505 BLE is ready! gopro_wireless.py:599
INFO 09:34:26.559 gopro_wireless.py:726
<<<<<<<<--------------
"id" : "CmdId.SET_DATE_TIME_DST",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"date_time" : "2025-03-15 09:34:26.558968+13:00",
"tz_offset" : "780",
"is_dst" : "True",
<<<<<<<<--------------
INFO 09:34:26.617 gopro_wireless.py:659
-------------->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 09:34:26.621 gopro_wireless.py:726
<<<<<<<<--------------
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
<<<<<<<<--------------
INFO 09:34:26.677 gopro_wireless.py:659
-------------->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
-------------->>>>>>>>
INFO 09:34:26.683 Using Open GoPro API version 2.0 gopro_wireless.py:313
INFO 09:34:26.686 Turning off the camera's Wifi radio gopro_wireless.py:320
INFO 09:34:26.688 gopro_wireless.py:726
<<<<<<<<--------------
"id" : "CmdId.SET_WIFI",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"enable" : "False",
<<<<<<<<--------------
INFO 09:34:26.738 gopro_wireless.py:659
-------------->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
2025-03-15 09:34:26,743 - EpicGoPro - INFO - GoPro 0C8C3694-332B-9A80-7103-9AD3CE3F3B0C: GoPro 0532 is connected via BLE
INFO 09:34:26.744 gopro_wireless.py:726
<<<<<<<<--------------
"id" : "ActionId.SET_CAMERA_CONTROL",
"feature_id" : "FeatureId.COMMAND",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"camera_control_status" : "2",
<<<<<<<<--------------
INFO 09:34:26.800 gopro_wireless.py:659
-------------->>>>>>>>
"id" : "ActionId.SET_CAMERA_CONTROL_RSP",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"result" : "EnumResultGeneric.RESULT_SUCCESS",
},
-------------->>>>>>>>
INFO 09:34:26.816 Scanning for GoPro 7983 bluetooth devices... bleak_wrapper.py:121
INFO 09:34:26.860 gopro_wireless.py:665
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.STATUS_VAL_PUSH",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.SYSTEM_BUSY" : "False",
"StatusId.ENCODING" : "False",
},
----ASYNC----->>>>>>>>
INFO 09:34:26.919 Discovered: 0C8C3694-332B-9A80-7103-9AD3CE3F3B0C: GoPro 0532 bleak_wrapper.py:134
WARNING 09:34:26.922 Failed to find a device in 5 seconds. Retrying #1 client.py:86
INFO 09:34:26.924 Scanning for GoPro 7983 bluetooth devices... bleak_wrapper.py:121
INFO 09:34:27.075 Discovered: 0C8C3694-332B-9A80-7103-9AD3CE3F3B0C: GoPro 0532 bleak_wrapper.py:134
WARNING 09:34:27.080 Failed to find a device in 5 seconds. Retrying #2 client.py:86
INFO 09:34:27.083 Scanning for GoPro 7983 bluetooth devices... bleak_wrapper.py:121
INFO 09:34:27.233 Discovered: 0C8C3694-332B-9A80-7103-9AD3CE3F3B0C: GoPro 0532 bleak_wrapper.py:134
WARNING 09:34:27.238 Failed to find a device in 5 seconds. Retrying #3 client.py:86
INFO 09:34:27.241 Scanning for GoPro 7983 bluetooth devices... bleak_wrapper.py:121
INFO 09:34:28.985 Discovered: 0C8C3694-332B-9A80-7103-9AD3CE3F3B0C: GoPro 0532 bleak_wrapper.py:134
WARNING 09:34:28.994 Failed to find a device in 5 seconds. Retrying #4 client.py:86
ERROR 09:34:29.001 Error while opening: A scan timed out without finding a device gopro_wireless.py:325
2025-03-15 09:34:29,005 - EpicGoPro - ERROR - Error setting up GoPro: A scan timed out without finding a device
ERROR 09:34:29.005 FailedToFindDevice('A scan timed out without finding a device')
@tcamise-gpsw Here are the logs for my Raspberry PI where the devices both connected fine but failed to connect via COHN/WiFi
2025-03-14 20:38:51,268 - EpicGoPro - INFO - Setting up GoPro cameras...
INFO 20:38:51.275 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
INFO 20:38:51.387 Discovered: CD:71:8A:99:00:AD: bleak_wrapper.py:134
GoPro 7983
WARNING 20:38:51.392 Failed to find a device in 5 seconds. client.py:86
Retrying #1
INFO 20:38:51.394 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
INFO 20:38:51.544 Discovered: CD:71:8A:99:00:AD: bleak_wrapper.py:134
GoPro 7983
WARNING 20:38:51.549 Failed to find a device in 5 seconds. client.py:86
Retrying #2
INFO 20:38:51.550 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
INFO 20:38:51.578 Discovered: C6:37:2E:00:CD:31: bleak_wrapper.py:134
GoPro 0532
INFO 20:38:51.582 Found 1 matching devices. bleak_wrapper.py:147
INFO 20:38:51.583 Establishing the BLE connection client.py:107
INFO 20:38:51.584 Establishing BLE connection to bleak_wrapper.py:214
C6:37:2E:00:CD:31: GoPro 0532...
INFO 20:38:53.772 Pairing with bluetoothctl bleak_wrapper.py:263
INFO 20:38:54.003 Discovering characteristics... bleak_wrapper.py:359
INFO 20:38:55.027 Done discovering characteristics! bleak_wrapper.py:404
INFO 20:38:55.029 Enabling notifications... bleak_wrapper.py:322
INFO 20:38:55.953 Done enabling notifications bleak_wrapper.py:328
INFO 20:38:55.955 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.ENCODING",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:38:56.100 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
-------------->>>>>>>>
INFO 20:38:56.103 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.BUSY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:38:56.197 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
-------------->>>>>>>>
INFO 20:38:56.200 BLE is ready! gopro_wireless.py:596
INFO 20:38:56.224 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_DATE_TIME_DST",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"date_time" : "2025-03-14
20:38:56.224516+00:00",
"tz_offset" : "0",
"is_dst" : "False",
<<<<<<<<--------------
INFO 20:38:56.295 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:38:56.297 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
<<<<<<<<--------------
INFO 20:38:56.392 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
-------------->>>>>>>>
INFO 20:38:56.394 Using Open GoPro API version 2.0 gopro_wireless.py:310
INFO 20:38:56.395 Turning off the camera's Wifi radio gopro_wireless.py:317
INFO 20:38:56.397 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_WIFI",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"enable" : "False",
<<<<<<<<--------------
INFO 20:38:56.490 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
2025-03-14 20:38:56,492 - EpicGoPro - INFO - GoPro C6:37:2E:00:CD:31: GoPro 0532 is connected via BLE
INFO 20:38:56.492 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.SET_CAMERA_CONTROL",
"feature_id" : "FeatureId.COMMAND",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"camera_control_status" : "2",
<<<<<<<<--------------
INFO 20:38:56.588 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.SET_CAMERA_CONTROL_RSP",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"result" :
"EnumResultGeneric.RESULT_SUCCESS",
},
-------------->>>>>>>>
INFO 20:38:56.598 Scanning for GoPro 7983 bluetooth bleak_wrapper.py:121
devices...
INFO 20:38:56.621 Discovered: CD:71:8A:99:00:AD: bleak_wrapper.py:134
GoPro 7983
INFO 20:38:56.627 Found 1 matching devices. bleak_wrapper.py:147
INFO 20:38:56.628 Establishing the BLE connection client.py:107
INFO 20:38:56.630 Establishing BLE connection to bleak_wrapper.py:214
CD:71:8A:99:00:AD: GoPro 7983...
INFO 20:38:56.636 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.STATUS_VAL_PUSH",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
"StatusId.ENCODING" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:38:58.857 Pairing with bluetoothctl bleak_wrapper.py:263
INFO 20:38:59.098 Discovering characteristics... bleak_wrapper.py:359
INFO 20:39:00.052 Done discovering characteristics! bleak_wrapper.py:404
INFO 20:39:00.053 Enabling notifications... bleak_wrapper.py:322
INFO 20:39:00.929 Done enabling notifications bleak_wrapper.py:328
INFO 20:39:00.931 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.ENCODING",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:01.027 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
-------------->>>>>>>>
INFO 20:39:01.031 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.BUSY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:01.125 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
-------------->>>>>>>>
INFO 20:39:01.127 BLE is ready! gopro_wireless.py:596
INFO 20:39:01.129 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_DATE_TIME_DST",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"date_time" : "2025-03-14
20:39:01.128965+00:00",
"tz_offset" : "0",
"is_dst" : "False",
<<<<<<<<--------------
INFO 20:39:01.222 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:39:01.224 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
<<<<<<<<--------------
INFO 20:39:01.320 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
-------------->>>>>>>>
INFO 20:39:01.322 Using Open GoPro API version 2.0 gopro_wireless.py:310
INFO 20:39:01.323 Turning off the camera's Wifi radio gopro_wireless.py:317
INFO 20:39:01.325 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_WIFI",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"enable" : "False",
<<<<<<<<--------------
INFO 20:39:01.417 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
2025-03-14 20:39:01,420 - EpicGoPro - INFO - GoPro CD:71:8A:99:00:AD: GoPro 7983 is connected via BLE
INFO 20:39:01.420 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.SET_CAMERA_CONTROL",
"feature_id" : "FeatureId.COMMAND",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"camera_control_status" : "2",
<<<<<<<<--------------
INFO 20:39:01.515 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.SET_CAMERA_CONTROL_RSP",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"result" :
"EnumResultGeneric.RESULT_SUCCESS",
},
-------------->>>>>>>>
INFO 20:39:01.563 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.STATUS_VAL_PUSH",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
"StatusId.ENCODING" : "False",
},
----ASYNC----->>>>>>>>
2025-03-14 20:39:06,524 - EpicGoPro - INFO - Attempt 1/5: Connecting GoPro 0532 to network MRLTTL
INFO 20:39:06.532 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
2025-03-14 20:39:06,534 - EpicGoPro - INFO - Attempt 1/5: Connecting GoPro 7983 to network MRLTTL
INFO 20:39:06.541 Scanning for GoPro 7983 bluetooth bleak_wrapper.py:121
devices...
ERROR 20:39:06.547 Error while opening: gopro_wireless.py:322
[org.bluez.Error.InProgress] Operation already in
progress
2025-03-14 20:39:06,549 - EpicGoPro - ERROR - Error in COHN setup for GoPro 7983 (attempt 1/5): [org.bluez.Error.InProgress] Operation already in progress
INFO 20:39:06.594 Discovered: CD:71:8A:99:00:AD: bleak_wrapper.py:134
GoPro 7983
WARNING 20:39:06.599 Failed to find a device in 15 seconds. client.py:86
Retrying #1
INFO 20:39:06.601 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
INFO 20:39:06.747 Discovered: CD:71:8A:99:00:AD: bleak_wrapper.py:134
GoPro 7983
WARNING 20:39:06.751 Failed to find a device in 15 seconds. client.py:86
Retrying #2
INFO 20:39:06.753 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
INFO 20:39:06.792 Discovered: C6:37:2E:00:CD:31: bleak_wrapper.py:134
GoPro 0532
INFO 20:39:06.798 Found 1 matching devices. bleak_wrapper.py:147
INFO 20:39:06.799 Establishing the BLE connection client.py:107
INFO 20:39:06.800 Establishing BLE connection to bleak_wrapper.py:214
C6:37:2E:00:CD:31: GoPro 0532...
INFO 20:39:06.804 Pairing with bluetoothctl bleak_wrapper.py:263
INFO 20:39:07.038 Discovering characteristics... bleak_wrapper.py:359
INFO 20:39:07.994 Done discovering characteristics! bleak_wrapper.py:404
INFO 20:39:07.996 Enabling notifications... bleak_wrapper.py:322
INFO 20:39:08.000 Done enabling notifications bleak_wrapper.py:328
INFO 20:39:08.002 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.ENCODING",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:08.093 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:08.095 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
-------------->>>>>>>>
INFO 20:39:08.098 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.BUSY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:08.101 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:08.103 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
-------------->>>>>>>>
INFO 20:39:08.189 BLE is ready! gopro_wireless.py:596
INFO 20:39:08.190 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_DATE_TIME_DST",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"date_time" : "2025-03-14
20:39:08.190590+00:00",
"tz_offset" : "0",
"is_dst" : "False",
<<<<<<<<--------------
INFO 20:39:08.194 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:08.197 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:08.199 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:08.202 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:08.287 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:08.289 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:39:08.292 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
<<<<<<<<--------------
INFO 20:39:08.294 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:08.296 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:08.385 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
----ASYNC----->>>>>>>>
INFO 20:39:08.387 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
-------------->>>>>>>>
INFO 20:39:08.390 Using Open GoPro API version 2.0 gopro_wireless.py:310
INFO 20:39:08.391 Turning off the camera's Wifi radio gopro_wireless.py:317
INFO 20:39:08.392 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_WIFI",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"enable" : "False",
<<<<<<<<--------------
INFO 20:39:08.395 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
----ASYNC----->>>>>>>>
INFO 20:39:08.397 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
----ASYNC----->>>>>>>>
INFO 20:39:08.482 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:08.484 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:39:08.487 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_GET_COHN_STATUS",
"feature_id" : "FeatureId.QUERY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
"register_cohn_status" : "0",
<<<<<<<<--------------
INFO 20:39:08.491 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:08.493 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
ERROR 20:39:08.581 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:08.583 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:08.585 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:08.586 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:08.628 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:08.629 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:08.631 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:08.632 received too much data. parsing is in response.py:382
unknown state
2025-03-14 20:39:11,553 - EpicGoPro - INFO - Attempt 2/5: Connecting GoPro 7983 to network MRLTTL
INFO 20:39:11.560 Scanning for GoPro 7983 bluetooth bleak_wrapper.py:121
devices...
INFO 20:39:11.665 Discovered: CD:71:8A:99:00:AD: bleak_wrapper.py:134
GoPro 7983
INFO 20:39:11.670 Found 1 matching devices. bleak_wrapper.py:147
INFO 20:39:11.672 Establishing the BLE connection client.py:107
INFO 20:39:11.673 Establishing BLE connection to bleak_wrapper.py:214
CD:71:8A:99:00:AD: GoPro 7983...
INFO 20:39:11.676 Pairing with bluetoothctl bleak_wrapper.py:263
INFO 20:39:11.918 Discovering characteristics... bleak_wrapper.py:359
INFO 20:39:12.922 Done discovering characteristics! bleak_wrapper.py:404
INFO 20:39:12.923 Enabling notifications... bleak_wrapper.py:322
INFO 20:39:12.928 Done enabling notifications bleak_wrapper.py:328
INFO 20:39:12.930 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.ENCODING",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:13.020 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
-------------->>>>>>>>
INFO 20:39:13.023 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:13.025 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.BUSY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:13.028 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
-------------->>>>>>>>
INFO 20:39:13.031 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:13.116 BLE is ready! gopro_wireless.py:596
INFO 20:39:13.118 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_DATE_TIME_DST",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"date_time" : "2025-03-14
20:39:13.118181+00:00",
"tz_offset" : "0",
"is_dst" : "False",
<<<<<<<<--------------
INFO 20:39:13.122 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:13.124 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:13.127 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:13.129 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:13.215 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:39:13.217 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:13.219 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
<<<<<<<<--------------
INFO 20:39:13.222 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:13.224 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:13.312 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
-------------->>>>>>>>
INFO 20:39:13.315 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
----ASYNC----->>>>>>>>
INFO 20:39:13.317 Using Open GoPro API version 2.0 gopro_wireless.py:310
INFO 20:39:13.318 Turning off the camera's Wifi radio gopro_wireless.py:317
INFO 20:39:13.320 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_WIFI",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"enable" : "False",
<<<<<<<<--------------
INFO 20:39:13.323 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
----ASYNC----->>>>>>>>
INFO 20:39:13.325 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
----ASYNC----->>>>>>>>
INFO 20:39:13.410 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:39:13.412 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:13.414 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
INFO 20:39:13.416 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
----ASYNC----->>>>>>>>
2025-03-14 20:39:13,579 - EpicGoPro - WARNING - Initial setup error for GoPro 0532:
INFO 20:39:18.585 Terminating the BLE connection client.py:131
INFO 20:39:18.587 Disconnecting... bleak_wrapper.py:414
INFO 20:39:18.588 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_GET_COHN_STATUS",
"feature_id" : "FeatureId.QUERY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
"register_cohn_status" : "0",
<<<<<<<<--------------
ERROR 20:39:18.677 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:18.679 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:18.680 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:18.682 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:18.723 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:18.725 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:18.726 received too much data. parsing is in response.py:382
unknown state
ERROR 20:39:18.728 received too much data. parsing is in response.py:382
unknown state
INFO 20:39:21.304 Device disconnected! bleak_wrapper.py:417
2025-03-14 20:39:21,306 - EpicGoPro - INFO - Attempt 2/5: Connecting GoPro 0532 to network MRLTTL
INFO 20:39:21.314 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
INFO 20:39:21.445 Discovered: CD:71:8A:99:00:AD: bleak_wrapper.py:134
GoPro 7983
WARNING 20:39:21.450 Failed to find a device in 15 seconds. client.py:86
Retrying #1
INFO 20:39:21.452 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
INFO 20:39:21.598 Discovered: CD:71:8A:99:00:AD: bleak_wrapper.py:134
GoPro 7983
WARNING 20:39:21.603 Failed to find a device in 15 seconds. client.py:86
Retrying #2
INFO 20:39:21.605 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
INFO 20:39:21.613 Discovered: C6:37:2E:00:CD:31: bleak_wrapper.py:134
GoPro 0532
INFO 20:39:21.618 Found 1 matching devices. bleak_wrapper.py:147
INFO 20:39:21.619 Establishing the BLE connection client.py:107
INFO 20:39:21.621 Establishing BLE connection to bleak_wrapper.py:214
C6:37:2E:00:CD:31: GoPro 0532...
2025-03-14 20:39:23,676 - EpicGoPro - WARNING - Initial setup error for GoPro 7983:
INFO 20:39:24.899 Pairing with bluetoothctl bleak_wrapper.py:263
INFO 20:39:25.137 Discovering characteristics... bleak_wrapper.py:359
INFO 20:39:26.088 Done discovering characteristics! bleak_wrapper.py:404
INFO 20:39:26.090 Enabling notifications... bleak_wrapper.py:322
INFO 20:39:27.014 Done enabling notifications bleak_wrapper.py:328
INFO 20:39:27.016 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.ENCODING",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:27.113 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
-------------->>>>>>>>
INFO 20:39:27.118 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.BUSY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:27.210 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
-------------->>>>>>>>
INFO 20:39:27.213 BLE is ready! gopro_wireless.py:596
INFO 20:39:27.214 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_DATE_TIME_DST",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"date_time" : "2025-03-14
20:39:27.214557+00:00",
"tz_offset" : "0",
"is_dst" : "False",
<<<<<<<<--------------
INFO 20:39:27.307 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:39:27.310 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
<<<<<<<<--------------
INFO 20:39:27.405 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
-------------->>>>>>>>
INFO 20:39:27.408 Using Open GoPro API version 2.0 gopro_wireless.py:310
INFO 20:39:27.409 Turning off the camera's Wifi radio gopro_wireless.py:317
INFO 20:39:27.411 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_WIFI",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"enable" : "False",
<<<<<<<<--------------
INFO 20:39:27.502 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:39:28.678 Terminating the BLE connection client.py:131
INFO 20:39:28.680 Disconnecting... bleak_wrapper.py:414
INFO 20:39:28.682 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_GET_COHN_STATUS",
"feature_id" : "FeatureId.QUERY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
"register_cohn_status" : "0",
<<<<<<<<--------------
INFO 20:39:28.819 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_GET_COHN_STATUS",
"status" : "ErrorCode.UNKNOWN",
"protocol" : "Protocol.BLE",
"data" : {
"status" :
"EnumCOHNStatus.COHN_PROVISIONED",
"state" :
"EnumCOHNNetworkState.COHN_STATE_NetworkConnected
",
"username" : "gopro",
"password" : "pJk6Lw4ZfI!m",
"ipaddress" : "192.168.1.211",
"enabled" : "True",
"ssid" : "MRLTTL",
"macaddress" : "0457474941af",
},
-------------->>>>>>>>
2025-03-14 20:39:28,823 - EpicGoPro - INFO - Clearing existing certificate for GoPro 0532
INFO 20:39:28.824 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_CLEAR_COHN_CERT",
"feature_id" : "FeatureId.COMMAND",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
<<<<<<<<--------------
INFO 20:39:29.160 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_CLEAR_COHN_CERT",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"result" :
"EnumResultGeneric.RESULT_SUCCESS",
},
-------------->>>>>>>>
2025-03-14 20:39:29,163 - EpicGoPro - INFO - Configuring COHN for GoPro 0532
INFO 20:39:29.163 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_GET_COHN_STATUS",
"feature_id" : "FeatureId.QUERY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
"register_cohn_status" : "0",
<<<<<<<<--------------
INFO 20:39:29.258 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_GET_COHN_STATUS",
"status" : "ErrorCode.UNKNOWN",
"protocol" : "Protocol.BLE",
"data" : {
"status" :
"EnumCOHNStatus.COHN_UNPROVISIONED",
"state" :
"EnumCOHNNetworkState.COHN_STATE_Idle",
"username" : "None",
"password" : "None",
"ipaddress" : "None",
"enabled" : "None",
"ssid" : "None",
"macaddress" : "None",
},
-------------->>>>>>>>
INFO 20:39:29.262 Provisioning COHN gopro_wireless.py:400
INFO 20:39:29.264 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_CREATE_COHN_CERT",
"feature_id" : "FeatureId.COMMAND",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"override" : "1",
<<<<<<<<--------------
INFO 20:39:31.110 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_CREATE_COHN_CERT",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"result" :
"EnumResultGeneric.RESULT_SUCCESS",
},
-------------->>>>>>>>
INFO 20:39:31.114 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_GET_COHN_STATUS",
"feature_id" : "FeatureId.QUERY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
"register_cohn_status" : "1",
<<<<<<<<--------------
INFO 20:39:31.118 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "QueryCmdId.STATUS_VAL_PUSH",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
"StatusId.ENCODING" : "False",
},
----ASYNC----->>>>>>>>
INFO 20:39:31.257 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_GET_COHN_STATUS",
"status" : "ErrorCode.UNKNOWN",
"protocol" : "Protocol.BLE",
"data" : {
"status" :
"EnumCOHNStatus.COHN_PROVISIONED",
"state" :
"EnumCOHNNetworkState.COHN_STATE_ConnectingToNetw
ork",
"username" : "gopro",
"password" : "qOSNqNuxoK6s",
"enabled" : "True",
"ipaddress" : "None",
"ssid" : "None",
"macaddress" : "None",
},
-------------->>>>>>>>
INFO 20:39:31.261 COHN is provisioned!! gopro_wireless.py:414
INFO 20:39:31.263 Waiting for COHN to be connected gopro_wireless.py:448
INFO 20:39:31.264 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_GET_COHN_STATUS",
"feature_id" : "FeatureId.QUERY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
"register_cohn_status" : "1",
<<<<<<<<--------------
INFO 20:39:31.301 Device disconnected! bleak_wrapper.py:417
2025-03-14 20:39:31,303 - EpicGoPro - INFO - Attempt 3/5: Connecting GoPro 7983 to network MRLTTL
INFO 20:39:31.311 Scanning for GoPro 7983 bluetooth bleak_wrapper.py:121
devices...
INFO 20:39:31.403 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_GET_COHN_STATUS",
"status" : "ErrorCode.UNKNOWN",
"protocol" : "Protocol.BLE",
"data" : {
"status" :
"EnumCOHNStatus.COHN_PROVISIONED",
"state" :
"EnumCOHNNetworkState.COHN_STATE_ConnectingToNetw
ork",
"username" : "gopro",
"password" : "qOSNqNuxoK6s",
"enabled" : "True",
"ipaddress" : "None",
"ssid" : "None",
"macaddress" : "None",
},
-------------->>>>>>>>
INFO 20:39:31.493 Discovered: CD:71:8A:99:00:AD: bleak_wrapper.py:134
GoPro 7983
INFO 20:39:31.497 Found 1 matching devices. bleak_wrapper.py:147
INFO 20:39:31.499 Establishing the BLE connection client.py:107
INFO 20:39:31.500 Establishing BLE connection to bleak_wrapper.py:214
CD:71:8A:99:00:AD: GoPro 7983...
INFO 20:39:33.760 Pairing with bluetoothctl bleak_wrapper.py:263
INFO 20:39:33.998 Discovering characteristics... bleak_wrapper.py:359
INFO 20:39:34.957 Done discovering characteristics! bleak_wrapper.py:404
INFO 20:39:34.959 Enabling notifications... bleak_wrapper.py:322
INFO 20:39:35.834 Done enabling notifications bleak_wrapper.py:328
INFO 20:39:35.836 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.ENCODING",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:35.933 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.ENCODING" : "False",
},
-------------->>>>>>>>
INFO 20:39:35.936 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status_id" : "StatusId.BUSY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:36.030 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "QueryCmdId.REG_STATUS_VAL_UPDATE",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"StatusId.BUSY" : "False",
},
-------------->>>>>>>>
INFO 20:39:36.033 BLE is ready! gopro_wireless.py:596
INFO 20:39:36.035 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_DATE_TIME_DST",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"date_time" : "2025-03-14
20:39:36.034836+00:00",
"tz_offset" : "0",
"is_dst" : "False",
<<<<<<<<--------------
INFO 20:39:36.176 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_DATE_TIME_DST",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:39:36.179 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
<<<<<<<<--------------
INFO 20:39:36.230 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "ActionId.RESPONSE_GET_COHN_STATUS",
"status" : "ErrorCode.UNKNOWN",
"protocol" : "Protocol.BLE",
"data" : {
"status" :
"EnumCOHNStatus.COHN_PROVISIONED",
"state" :
"EnumCOHNNetworkState.COHN_STATE_ConnectingToNetw
ork",
"username" : "gopro",
"password" : "qOSNqNuxoK6s",
"ipaddress" : "",
"enabled" : "True",
"ssid" : "",
"macaddress" : "",
},
----ASYNC----->>>>>>>>
INFO 20:39:36.274 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.GET_THIRD_PARTY_API_VERSION",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : "2.0",
-------------->>>>>>>>
INFO 20:39:36.276 Using Open GoPro API version 2.0 gopro_wireless.py:310
INFO 20:39:36.278 Turning off the camera's Wifi radio gopro_wireless.py:317
INFO 20:39:36.280 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "CmdId.SET_WIFI",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"enable" : "False",
<<<<<<<<--------------
INFO 20:39:36.284 gopro_wireless.py:662
----ASYNC----->>>>>>>>
"id" : "ActionId.RESPONSE_GET_COHN_STATUS",
"status" : "ErrorCode.UNKNOWN",
"protocol" : "Protocol.BLE",
"data" : {
"status" :
"EnumCOHNStatus.COHN_PROVISIONED",
"state" :
"EnumCOHNNetworkState.COHN_STATE_NetworkConnected
",
"username" : "gopro",
"password" : "qOSNqNuxoK6s",
"ipaddress" : "192.168.1.211",
"enabled" : "True",
"ssid" : "MRLTTL",
"macaddress" : "0457474941af",
},
----ASYNC----->>>>>>>>
INFO 20:39:36.288 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_GET_COHN_CERT",
"feature_id" : "FeatureId.QUERY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
<<<<<<<<--------------
INFO 20:39:36.371 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "CmdId.SET_WIFI",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
-------------->>>>>>>>
INFO 20:39:37.253 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_GET_COHN_CERT",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"result" :
"EnumResultGeneric.RESULT_SUCCESS",
"cert" : "-----BEGIN CERTIFICATE-----
MIIDnzCCAoegAwIBAgIUFOhI65Cj54y0WnwHDZl3gS5OlkgwD
QYJKoZIhvcNAQEL
BQAwaTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDV
QQHDAlTYW4gTWF0
ZW8xDjAMBgNVBAoMBUdvUHJvMQ0wCwYDVQQLDARIZXJvMRowG
AYDVQQDDBFHb1By
byBDYW1lcmEgUm9vdDAeFw0yNTAzMTQyMDM5MzBaFw0zNTAzM
TIyMDM5MzBaMGkx
CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU
2FuIE1hdGVvMQ4w
DAYDVQQKDAVHb1BybzENMAsGA1UECwwESGVybzEaMBgGA1UEA
wwRR29Qcm8gQ2Ft
ZXJhIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKA
oIBAQDjostyLIjZ
4FS14V1Po7LaHYjdpRKKANBCnormMzgpkYAvAt8pJHdgEjYqa
l6bOVVN+KB7+fQH
EZW1sJScuUKShLRVgWtqhPjsTDS9PmgVjFy6FJCibnarH4uyD
fQ8yTs4hZbDVr36
kS03mkiawpVRZE6qVhZG3v/omb9Q7z0gVwt/MAjs
AmXmiuDvP5aRVgW
DO9kGJWmoREzypoKtaOACXxYB5Dkai1nNao546sUidVE6kDWt
M+l9PLlFRHApbAr
Mn4z/0A1KvFn6INY24S41E70EzULlN2sdezV09g40viisyseh
VP4U44B+vAXvipJ
a2/+XsDVyQcBAgMBAAGjPzA9MA8GA1UdEwQIMAYBAf8CAQAwC
wYDVR0PBAQDAgGG
MB0GA1UdDgQWBBT0pB/xS9a+ZuZ3ElMYQ+1AkZoyiTANBgkqh
kiG9w0BAQsFAAOC
AQEAavdkeKsmYLPbsXDrAtPuj1YnHlIdblfKd+HjlUaNtsQqT
4pprcX9NQmPVq3O
hfLTJZHSyXAgzWzWHJQClD7wj65Z3sNVBnsBW2YCa5mkb0UW7
LomSRkeK6dz+apQ
Bdk/+tP3NzBlzak/yVY4K2AGdlOjuMqMEcw6YsL3rTNb7d1aL
35T6q6qNvRTEWyl
eZF345Wmg+OuV5HmGTjs01J/972AF9S8gkYNSL5KhKVxM5sgu
oK4X4qHD1ardBXi
T8J27aidtUoZZ2vaPe67Gb6ZoaU6gyzYFw8f4rM1FIE3Cr19O
hlbkKoHkE4B+WUR
k0r0dojW+0kTmxMuirtlTXFnqQ==
-----END CERTIFICATE-----
",
},
-------------->>>>>>>>
INFO 20:39:37.264 Using COHN Credentials: gopro_wireless.py:453
CohnInfo(ip_address='192.168.1.211',
username='gopro', password='qOSNqNuxoK6s',
certificate='-----BEGIN
CERTIFICATE-----\nMIIDnzCCAoegAwIBAgIUFOhI65Cj54y
0WnwHDZl3gS5OlkgwDQYJKoZIhvcNAQEL\nBQAwaTELMAkGA1
UEBhMCVVMxCzAJBgNVBAgMAkNBMRIwEAYDVQQHDAlTYW4gTWF
0\nZW8xDjAMBgNVBAoMBUdvUHJvMQ0wCwYDVQQLDARIZXJvMR
owGAYDVQQDDBFHb1By\cmEgUm9vdDAeFw0yNTAzM
TQyMDM5MzBaFw0zNTAzMTIyMDM5MzBaMGkx\nCzAJBgNVBAYT
AlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJU2FuIE1hdGVvM
Q4w\nDAYDVQQKDAVHb1BybzENMAsGA1UECwwESGVybzEaMBgG
A1UEAwwRR29Qcm8gQ2Ft\nZXJhIFJvb3QwggEiMA0GCSqGSIb
3DQEBAQUAA4IBDwAwggEKAoIBAQDjostyLIjZ\n4FS14V1Po7
LaHYjdpRKKANBCnormMzgpkYAvAt8pJHdgEjYqal6bOVVN+KB
7+fQH\nEZW1sJScuUKShLRVgWtqhPjsTDS9PmgVjFy6FJCibn
arH4uyDfQ8yTs4hZbDVr36\nkS03mkiawpVRZEZyEvwgzL76q
VhZG3v/omb9Q7z0gVwt/MAjsAmXmiuDvP5aRVgW\nDO9kGJWm
oREzypoKtaOACXxYB5Dko546sUidVE6kDWtM+l9PLlF
RHApbAr\nMn4z/0A1KvFn6INY24S41E70EzULlN2sdezV09g4
0viisysehVP4U44B+vAXvipJ\na2/+XsDVyQcBAgMBAAGjPzA
9MA8GA1UdEwQIMAYBAf8CAQAwCwYDVR0PBAQDAgGG\nMB0GA1
UdDgQWBBT0pB/xS9a+ZuZ3ElMYQ+1AkZoyiTANBgkqhkiG9w0
BAQsFAAOC\nAQEAavdkeKsmYLPbsXDrAtPuj1YnHlIdblfKd+
HjlUaNtsQqT4pprcX9NQmPVq3O\nhfLTJZHSyXAgzWzWHJQCl
D7wj65Z3sNVBnsBW2YCa5mkb0UW7LomSRkeK6dz+apQ\nBdk/
+tP3NzBlzak/yVY4K2AGdlOjuMqMEcw6YsL3rTNb7d1aL35T6
q6qNvRTEWyl\neZF345Wmg+OuV5HmGTjs01J/972AF9S8gkYN
SL5KhKVxM5sguoK4X4qHD1ardBXi\nT8J27aidtUoZZ2vaPe6
7Gb6ZoaU6gyzYFw8f4rM1FIE3Cr19OhlbkKoHkE4B+WUR\nk0
r0dojW+0kTmxMuirtlTXFnqQ==\n-----END
CERTIFICATE-----\n',
cert_path=PosixPath('cohn.crt'))
2025-03-14 20:39:37,269 - EpicGoPro - INFO - Verifying camera state for GoPro 0532
INFO 20:39:37.270 gopro_base.py:380
<<<<<<<<--------------
"id" : "Camera State",
"protocol" : "Protocol.HTTP",
"endpoint" : "gopro/camera/state",
<<<<<<<<--------------
WARNING 20:39:37.604 gopro_base.py:391
SSLError(MaxRetryError("HTTPSConnectionPool(host='192
.168.1.211', port=443): Max retries exceeded with
url: /gopro/camera/state (Caused by
SSLError(SSLCertVerificationError(1, '[SSL:
CERTIFICATE_VERIFY_FAILED] certificate verify failed:
self-signed certificate (_ssl.c:1010)')))"))
WARNING 20:39:39.609 Retrying #1 to send the command... gopro_base.py:396
CRITICAL 20:39:39.763 Unexpected error: gopro_base.py:395
FormatFieldError("Error in path (building)\nstruct
'>B' error during building, given value 128859")
WARNING 20:39:39.765 Retrying #2 to send the command... gopro_base.py:396
CRITICAL 20:39:39.883 Unexpected error: gopro_base.py:395
FormatFieldError("Error in path (building)\nstruct
'>B' error during building, given value 128859")
WARNING 20:39:39.885 Retrying #3 to send the command... gopro_base.py:396
CRITICAL 20:39:39.990 Unexpected error: gopro_base.py:395
FormatFieldError("Error in path (building)\nstruct
'>B' error during building, given value 128859")
WARNING 20:39:39.992 Retrying #4 to send the command... gopro_base.py:396
CRITICAL 20:39:40.122 Unexpected error: gopro_base.py:395
FormatFieldError("Error in path (building)\nstruct
'>B' error during building, given value 128859")
WARNING 20:39:40.124 Retrying #5 to send the command... gopro_base.py:396
2025-03-14 20:39:40,126 - EpicGoPro - WARNING - Configuration error for GoPro 0532: Response timeout occurred of 5 seconds
INFO 20:39:45.131 Terminating the BLE connection client.py:131
INFO 20:39:45.133 Disconnecting... bleak_wrapper.py:414
INFO 20:39:45.134 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_GET_COHN_STATUS",
"feature_id" : "FeatureId.QUERY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
"register_cohn_status" : "0",
<<<<<<<<--------------
INFO 20:39:45.244 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_GET_COHN_STATUS",
"status" : "ErrorCode.UNKNOWN",
"protocol" : "Protocol.BLE",
"data" : {
"status" :
"EnumCOHNStatus.COHN_PROVISIONED",
"state" :
"EnumCOHNNetworkState.COHN_STATE_NetworkConnected
",
"username" : "gopro",
"password" : "OfY5q7T!Wkkn",
"ipaddress" : "192.168.1.139",
"enabled" : "True",
"ssid" : "MRLTTL",
"macaddress" : "04574748ece7",
},
-------------->>>>>>>>
2025-03-14 20:39:45,248 - EpicGoPro - INFO - Clearing existing certificate for GoPro 7983
INFO 20:39:45.249 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_CLEAR_COHN_CERT",
"feature_id" : "FeatureId.COMMAND",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
<<<<<<<<--------------
INFO 20:39:45.634 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_CLEAR_COHN_CERT",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"result" :
"EnumResultGeneric.RESULT_SUCCESS",
},
-------------->>>>>>>>
2025-03-14 20:39:45,637 - EpicGoPro - INFO - Configuring COHN for GoPro 7983
INFO 20:39:45.637 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_GET_COHN_STATUS",
"feature_id" : "FeatureId.QUERY",
"protocol" : "Protocol.BLE",
"uuid" : "Query",
"register_cohn_status" : "0",
<<<<<<<<--------------
INFO 20:39:45.732 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_GET_COHN_STATUS",
"status" : "ErrorCode.UNKNOWN",
"protocol" : "Protocol.BLE",
"data" : {
"status" :
"EnumCOHNStatus.COHN_UNPROVISIONED",
"state" :
"EnumCOHNNetworkState.COHN_STATE_Idle",
"username" : "None",
"password" : "None",
"ipaddress" : "None",
"enabled" : "None",
"ssid" : "None",
"macaddress" : "None",
},
-------------->>>>>>>>
INFO 20:39:45.736 Provisioning COHN gopro_wireless.py:400
INFO 20:39:45.737 gopro_wireless.py:723
<<<<<<<<--------------
"id" : "ActionId.REQUEST_CREATE_COHN_CERT",
"feature_id" : "FeatureId.COMMAND",
"protocol" : "Protocol.BLE",
"uuid" : "Command",
"override" : "1",
<<<<<<<<--------------
INFO 20:39:47.295 Device disconnected! bleak_wrapper.py:417
2025-03-14 20:39:47,297 - EpicGoPro - INFO - Attempt 3/5: Connecting GoPro 0532 to network MRLTTL
INFO 20:39:47.305 Scanning for GoPro 0532 bluetooth bleak_wrapper.py:121
devices...
INFO 20:39:47.340 gopro_wireless.py:656
-------------->>>>>>>>
"id" : "ActionId.RESPONSE_CREATE_COHN_CERT",
"status" : "ErrorCode.SUCCESS",
"protocol" : "Protocol.BLE",
"data" : {
"result" :
"EnumResultGeneric.RESULT_SUCCESS",
},
-------------->>>>>>>>
Here's a fair warning that none of the following is going to help you unfortunately but anyway...
Yeah there are certainly a lot of errors there. This is also probably the most complicated use case I could imagine. You have the following, all of which are either not supported or not stable:
- multiple connections
- multiple simultaneous connections
- reconnects, recovery, etc
- COHN
- raspberry PI which seems to randomly throw BLE when connecting to GoPro's
This needs to be split out for debugging and tracking. Like this ticket specifically is only considering reconnects and recovery for one connection. If we're going to solve this problem, we need a simple test to continuously connect and reconnect for:
- Windows
- Mac
- RPI
The other topics also need separate investigation. Specifically this error you are seeing:
received too much data. parsing is in unknown state
is almost certainly because the SDK does not support simultaneous connections
Unfortunately, the bigger issue here is that there is no plan (at least for me) to perform any of these investigations any time soon. So basically the SDK still currently only supports serialized individual connections with very limited testing on RPI. ☹
@tcamise-gpsw messaging here as #645 is closed now. You mention that this is possibly an issue with the BLEAK library but I have seen this issue running in Kotlin as well as writing our own SDK. There are lots of strange intermittent issues where the GoPros do not connect again to BLE after being off for extended periods of time or the battery disconnected. Would be great if someone from GoPro could put some time into researching it. We see the same with COHN where sometimes it just refuses to connect where the day prior the device was connected and running perfectly with COHN.