|
import gatt |
|
|
|
names = {} |
|
names["00001811-0000-1000-8000-00805f9b34fb"] = "Alert Notification Service" |
|
names["0000180f-0000-1000-8000-00805f9b34fb"] = "Battery Service" |
|
names["00001810-0000-1000-8000-00805f9b34fb"] = "Blood Pressure" |
|
names["00001805-0000-1000-8000-00805f9b34fb"] = "Current Time Service" |
|
names["00001818-0000-1000-8000-00805f9b34fb"] = "Cycling Power" |
|
names["00001816-0000-1000-8000-00805f9b34fb"] = "Cycling Speed and Cadence" |
|
names["0000180a-0000-1000-8000-00805f9b34fb"] = "Device Information" |
|
names["00001800-0000-1000-8000-00805f9b34fb"] = "Generic Access" |
|
names["00001801-0000-1000-8000-00805f9b34fb"] = "Generic Attribute" |
|
names["00001808-0000-1000-8000-00805f9b34fb"] = "Glucose" |
|
names["00001809-0000-1000-8000-00805f9b34fb"] = "Health Thermometer" |
|
names["0000180d-0000-1000-8000-00805f9b34fb"] = "Heart Rate" |
|
names["00001812-0000-1000-8000-00805f9b34fb"] = "Human Interface Device" |
|
names["00001802-0000-1000-8000-00805f9b34fb"] = "Immediate Alert" |
|
names["00001803-0000-1000-8000-00805f9b34fb"] = "Link Loss" |
|
names["00001819-0000-1000-8000-00805f9b34fb"] = "Location and Navigation" |
|
names["00001807-0000-1000-8000-00805f9b34fb"] = "Next DST Change Service" |
|
names["0000180e-0000-1000-8000-00805f9b34fb"] = "Phone Alert Status Service" |
|
names["00001806-0000-1000-8000-00805f9b34fb"] = "Reference Time Update Service" |
|
names["00001814-0000-1000-8000-00805f9b34fb"] = "Running Speed and Cadence" |
|
names["00001813-0000-1000-8000-00805f9b34fb"] = "Scan Parameters" |
|
names["00001804-0000-1000-8000-00805f9b34fb"] = "Tx Power" |
|
names["00002a43-0000-1000-8000-00805f9b34fb"] = "Alert Category ID" |
|
names["00002a42-0000-1000-8000-00805f9b34fb"] = "Alert Category ID Bit Mask" |
|
names["00002a06-0000-1000-8000-00805f9b34fb"] = "Alert Level" |
|
names["00002a44-0000-1000-8000-00805f9b34fb"] = "Alert Notification Control Point" |
|
names["00002a3f-0000-1000-8000-00805f9b34fb"] = "Alert Status" |
|
names["00002a01-0000-1000-8000-00805f9b34fb"] = "Appearance" |
|
names["00002a19-0000-1000-8000-00805f9b34fb"] = "Battery Level" |
|
names["00002a49-0000-1000-8000-00805f9b34fb"] = "Blood Pressure Feature" |
|
names["00002a35-0000-1000-8000-00805f9b34fb"] = "Blood Pressure Measurement" |
|
names["00002a38-0000-1000-8000-00805f9b34fb"] = "Body Sensor Location" |
|
names["00002a22-0000-1000-8000-00805f9b34fb"] = "Boot Keyboard Input Report" |
|
names["00002a32-0000-1000-8000-00805f9b34fb"] = "Boot Keyboard Output Report" |
|
names["00002a33-0000-1000-8000-00805f9b34fb"] = "Boot Mouse Input Report" |
|
names["00002a5c-0000-1000-8000-00805f9b34fb"] = "CSC Feature" |
|
names["00002a5b-0000-1000-8000-00805f9b34fb"] = "CSC Measurement" |
|
names["00002a2b-0000-1000-8000-00805f9b34fb"] = "Current Time" |
|
names["00002a66-0000-1000-8000-00805f9b34fb"] = "Cycling Power Control Point" |
|
names["00002a65-0000-1000-8000-00805f9b34fb"] = "Cycling Power Feature" |
|
names["00002a63-0000-1000-8000-00805f9b34fb"] = "Cycling Power Measurement" |
|
names["00002a64-0000-1000-8000-00805f9b34fb"] = "Cycling Power Vector" |
|
names["00002a08-0000-1000-8000-00805f9b34fb"] = "Date Time" |
|
names["00002a0a-0000-1000-8000-00805f9b34fb"] = "Day Date Time" |
|
names["00002a09-0000-1000-8000-00805f9b34fb"] = "Day of Week" |
|
names["00002a00-0000-1000-8000-00805f9b34fb"] = "Device Name" |
|
names["00002a0d-0000-1000-8000-00805f9b34fb"] = "DST Offset" |
|
names["00002a0c-0000-1000-8000-00805f9b34fb"] = "Exact Time 256" |
|
names["00002a26-0000-1000-8000-00805f9b34fb"] = "Firmware Revision String" |
|
names["00002a51-0000-1000-8000-00805f9b34fb"] = "Glucose Feature" |
|
names["00002a18-0000-1000-8000-00805f9b34fb"] = "Glucose Measurement" |
|
names["00002a34-0000-1000-8000-00805f9b34fb"] = "Glucose Measurement Context" |
|
names["00002a27-0000-1000-8000-00805f9b34fb"] = "Hardware Revision String" |
|
names["00002a39-0000-1000-8000-00805f9b34fb"] = "Heart Rate Control Point" |
|
names["00002a37-0000-1000-8000-00805f9b34fb"] = "Heart Rate Measurement" |
|
names["00002a4c-0000-1000-8000-00805f9b34fb"] = "HID Control Point" |
|
names["00002a4a-0000-1000-8000-00805f9b34fb"] = "HID Information" |
|
names["00002a2a-0000-1000-8000-00805f9b34fb"] = "IEEE 11073-20601 Regulatory Certification Data List" |
|
names["00002a36-0000-1000-8000-00805f9b34fb"] = "Intermediate Cuff Pressure" |
|
names["00002a1e-0000-1000-8000-00805f9b34fb"] = "Intermediate Temperature" |
|
names["00002a6b-0000-1000-8000-00805f9b34fb"] = "LN Control Point" |
|
names["00002a6a-0000-1000-8000-00805f9b34fb"] = "LN Feature" |
|
names["00002a0f-0000-1000-8000-00805f9b34fb"] = "Local Time Information" |
|
names["00002a67-0000-1000-8000-00805f9b34fb"] = "Location and Speed" |
|
names["00002a29-0000-1000-8000-00805f9b34fb"] = "Manufacturer Name String" |
|
names["00002a21-0000-1000-8000-00805f9b34fb"] = "Measurement Interval" |
|
names["00002a24-0000-1000-8000-00805f9b34fb"] = "Model Number String" |
|
names["00002a68-0000-1000-8000-00805f9b34fb"] = "Navigation" |
|
names["00002a46-0000-1000-8000-00805f9b34fb"] = "New Alert" |
|
names["00002a04-0000-1000-8000-00805f9b34fb"] = "Peripheral Preferred Connection Parameters" |
|
names["00002a02-0000-1000-8000-00805f9b34fb"] = "Peripheral Privacy Flag" |
|
names["00002a50-0000-1000-8000-00805f9b34fb"] = "PnP ID" |
|
names["00002a69-0000-1000-8000-00805f9b34fb"] = "Position Quality" |
|
names["00002a4e-0000-1000-8000-00805f9b34fb"] = "Protocol Mode" |
|
names["00002a03-0000-1000-8000-00805f9b34fb"] = "Reconnection Address" |
|
names["00002a52-0000-1000-8000-00805f9b34fb"] = "Record Access Control Point" |
|
names["00002a14-0000-1000-8000-00805f9b34fb"] = "Reference Time Information" |
|
names["00002a4d-0000-1000-8000-00805f9b34fb"] = "Report" |
|
names["00002a4b-0000-1000-8000-00805f9b34fb"] = "Report Map" |
|
names["00002a40-0000-1000-8000-00805f9b34fb"] = "Ringer Control Point" |
|
names["00002a41-0000-1000-8000-00805f9b34fb"] = "Ringer Setting" |
|
names["00002a54-0000-1000-8000-00805f9b34fb"] = "RSC Feature" |
|
names["00002a53-0000-1000-8000-00805f9b34fb"] = "RSC Measurement" |
|
names["00002a55-0000-1000-8000-00805f9b34fb"] = "SC Control Point" |
|
names["00002a4f-0000-1000-8000-00805f9b34fb"] = "Scan Interval Window" |
|
names["00002a31-0000-1000-8000-00805f9b34fb"] = "Scan Refresh" |
|
names["00002a5d-0000-1000-8000-00805f9b34fb"] = "Sensor Location" |
|
names["00002a25-0000-1000-8000-00805f9b34fb"] = "Serial Number String" |
|
names["00002a05-0000-1000-8000-00805f9b34fb"] = "Service Changed" |
|
names["00002a28-0000-1000-8000-00805f9b34fb"] = "Software Revision String" |
|
names["00002a47-0000-1000-8000-00805f9b34fb"] = "Supported New Alert Category" |
|
names["00002a48-0000-1000-8000-00805f9b34fb"] = "Supported Unread Alert Category" |
|
names["00002a23-0000-1000-8000-00805f9b34fb"] = "System ID" |
|
names["00002a1c-0000-1000-8000-00805f9b34fb"] = "Temperature Measurement" |
|
names["00002a1d-0000-1000-8000-00805f9b34fb"] = "Temperature Type" |
|
names["00002a12-0000-1000-8000-00805f9b34fb"] = "Time Accuracy" |
|
names["00002a13-0000-1000-8000-00805f9b34fb"] = "Time Source" |
|
names["00002a16-0000-1000-8000-00805f9b34fb"] = "Time Update Control Point" |
|
names["00002a17-0000-1000-8000-00805f9b34fb"] = "Time Update State" |
|
names["00002a11-0000-1000-8000-00805f9b34fb"] = "Time with DST" |
|
names["00002a0e-0000-1000-8000-00805f9b34fb"] = "Time Zone" |
|
names["00002a07-0000-1000-8000-00805f9b34fb"] = "Tx Power Level" |
|
names["00002a45-0000-1000-8000-00805f9b34fb"] = "Unread Alert Status" |
|
|
|
|
|
report_uuid = "00002a4d-0000-1000-8000-00805f9b34fb" |
|
manager = gatt.DeviceManager(adapter_name='hci0') |
|
|
|
class AnyDevice(gatt.Device): |
|
|
|
def connect_succeeded(self): |
|
super().connect_succeeded() |
|
print("[%s] Connected" % (self.mac_address)) |
|
|
|
def connect_failed(self, error): |
|
super().connect_failed(error) |
|
print("[%s] Connection failed: %s" % (self.mac_address, str(error))) |
|
|
|
def disconnect_succeeded(self): |
|
super().disconnect_succeeded() |
|
print("[%s] Disconnected" % (self.mac_address)) |
|
|
|
def characteristic_value_updated(self, characteristic, value): |
|
print("Updated", characteristic, value) |
|
|
|
def characteristic_enable_notification_succeeded(self): |
|
print("notification happend") |
|
|
|
def characteristic_enable_notification_failed(self): |
|
print("notification failed") |
|
|
|
def services_resolved(self): |
|
super().services_resolved() |
|
|
|
print("[%s] Resolved services" % (self.mac_address)) |
|
for service in self.services: |
|
print("[%s] Service [%s]" % (self.mac_address, service.uuid)) |
|
for characteristic in service.characteristics: |
|
characteristic.enable_notifications() |
|
print("[%s] Characteristic [%s]" % (self.mac_address, names.get(characteristic.uuid, characteristic.uuid ))) |
|
|
|
|
|
device = AnyDevice(mac_address='AA:BB:CC:DD:EE:FF', manager=manager) |
|
device.auto_reconnect = True |
|
device.connect() |
|
|
|
manager.run() |
|
|