1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import pygatt import time import binascii from pygatt.backends.gatttool.gatttool import GATTToolBackend # 電子鎖的MAC地址 LOCK_MAC_ADDRESS = "C7:B5:2A:9A:D3:7D" # 電子鎖的UUID (轉換為標準格式) LOCK_SERVICE_UUID = "00000000-0000-0000-0000-000000000000" # 假設這是控制鎖的特性UUID (您需要從電子鎖的文檔中獲取實際的特性UUID) # 通常製造商會提供控制特性的UUID LOCK_CONTROL_CHAR_UUID = None # 需要填入實際的控制特性UUID def connect_to_lock(): """連接到電子鎖並執行基本操作""" try: # 初始化BLE後端 adapter = GATTToolBackend() adapter.start() print(f"嘗試連接到鎖: {LOCK_MAC_ADDRESS}") device = adapter.connect(LOCK_MAC_ADDRESS, timeout=10) print("成功連接!") # 發現服務 (可選,但建議用於檢查可用服務) print("發現服務...") services = device.discover_characteristics() print("找到以下特性:") for uuid, properties in services.items(): print(f"UUID: {uuid}, 屬性: {properties}") # 如果您知道控制特性的UUID,可以直接操作 if LOCK_CONTROL_CHAR_UUID: # 假設 0x01 是開鎖命令 (根據電子鎖協議進行調整) print("發送開鎖命令...") device.char_write(LOCK_CONTROL_CHAR_UUID, bytearray([0x01])) print("命令已發送!") # 讀取鎖狀態 (如果支援) try: response = device.char_read(LOCK_CONTROL_CHAR_UUID) print(f"鎖狀態: {binascii.hexlify(response)}") except: print("無法讀取鎖狀態") else: print("尚未指定控制特性UUID,無法發送命令") print("請查看印出的特性列表,確定正確的控制特性UUID") # 斷開連接 adapter.disconnect(device) print("已斷開連接") except Exception as e: print(f"發生錯誤: {e}") finally: adapter.stop() if __name__ == "__main__": connect_to_lock() |
Direct link: https://paste.plurk.com/show/R3B2c55eTJlowpM0EyXG