Handled Ctrl C gracefully... I hope.
This commit is contained in:
parent
ef12927410
commit
f3c2529394
@ -4,6 +4,9 @@ from bleak import BleakScanner, BleakClient
|
|||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
|
import sys
|
||||||
|
import signal
|
||||||
|
import os
|
||||||
|
|
||||||
# =================================================================================================
|
# =================================================================================================
|
||||||
# APP CONFIGURATION
|
# APP CONFIGURATION
|
||||||
@ -125,7 +128,8 @@ async def connect_to_ble_device():
|
|||||||
await ble_client.connect()
|
await ble_client.connect()
|
||||||
if ble_client.is_connected:
|
if ble_client.is_connected:
|
||||||
print(f"Connected to {target_device.name}")
|
print(f"Connected to {target_device.name}")
|
||||||
services = ble_client.services
|
services = [service for service in ble_client.services if service.handle != 1]
|
||||||
|
|
||||||
# The previous logic for filtering services seems incorrect; let's grab all characteristics
|
# The previous logic for filtering services seems incorrect; let's grab all characteristics
|
||||||
characteristics = [
|
characteristics = [
|
||||||
char for service in services for char in service.characteristics
|
char for service in services for char in service.characteristics
|
||||||
@ -247,7 +251,32 @@ def set_matrix():
|
|||||||
# APP STARTUP
|
# APP STARTUP
|
||||||
# =================================================================================================
|
# =================================================================================================
|
||||||
|
|
||||||
|
def signal_handler(signum, frame):
|
||||||
|
print("Received shutdown signal, gracefully shutting down...")
|
||||||
|
if not DEBUG_MODE and ble_client and ble_client.is_connected:
|
||||||
|
print("Disconnecting BLE client...")
|
||||||
|
disconnect_future = asyncio.run_coroutine_threadsafe(ble_client.disconnect(), ble_event_loop)
|
||||||
|
try:
|
||||||
|
# Wait for the disconnect to complete with a timeout
|
||||||
|
disconnect_future.result(timeout=5)
|
||||||
|
print("BLE client disconnected successfully.")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error during BLE disconnect: {e}")
|
||||||
|
|
||||||
|
if not DEBUG_MODE and ble_event_loop and ble_event_loop.is_running():
|
||||||
|
print("Stopping BLE event loop...")
|
||||||
|
# Schedule a stop and wait for the thread to finish
|
||||||
|
ble_event_loop.call_soon_threadsafe(ble_event_loop.stop)
|
||||||
|
ble_thread.join(timeout=1)
|
||||||
|
print("BLE event loop stopped.")
|
||||||
|
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
# Register the signal handler before running the app
|
||||||
|
signal.signal(signal.SIGINT, signal_handler)
|
||||||
|
signal.signal(signal.SIGTERM, signal_handler)
|
||||||
|
|
||||||
if not DEBUG_MODE:
|
if not DEBUG_MODE:
|
||||||
print("Starting BLE event loop in background thread...")
|
print("Starting BLE event loop in background thread...")
|
||||||
ble_event_loop = asyncio.new_event_loop()
|
ble_event_loop = asyncio.new_event_loop()
|
||||||
@ -258,4 +287,4 @@ if __name__ == '__main__':
|
|||||||
future = asyncio.run_coroutine_threadsafe(connect_to_ble_device(), ble_event_loop)
|
future = asyncio.run_coroutine_threadsafe(connect_to_ble_device(), ble_event_loop)
|
||||||
future.result(timeout=10) # Wait up to 10 seconds for connection
|
future.result(timeout=10) # Wait up to 10 seconds for connection
|
||||||
|
|
||||||
app.run(debug=True, use_reloader=False)
|
app.run(debug=True, use_reloader=False, host="0.0.0.0")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user