Working with notifications¶
In bluepy
, notifications are processed by creating a “delegate” object and
registering it with the Peripheral
. A method in the delegate is called whenever
a notification is received from the peripheral, as shown below:
-
handleNotification
(cHandle, data)¶ Called when a notification has been received from a
Peripheral
. Normally you will call the peripheral’swaitForNotifications()
method to allow this, but note that a Bluetooth LE device may transmit notifications at any time. This means that handleNotification() can potentially be called when any BluePy call is in progress.The cHandle parameter is the GATT ‘handle’ for the characteristic which is sending the notification. If a peripheral sends notifications for more than one characteristic, this may be used to distinguish them. The ‘handle’ value can be found by calling the
getHandle()
method of aCharacteristic
object.The data parameter is a
str
(Python 2.x) orbytes
(Python 3.x) value containing the notification data. It is recommended you use Python’sstruct
module to unpack this, to allow portability between language versions.
It is recommended that the class used for the delegate object is derived from
btle.DefaultDelegate
. This will ensure that an appropriate default method
exists for any future calls which may be added to the delegate interface.
Example code¶
Code to receive notifications from a peripheral can follow the outline below:
import btle
class MyDelegate(btle.DefaultDelegate):
def __init__(self, params):
btle.DefaultDelegate.__init__(self)
# ... initialise here
def handleNotification(self, cHandle, data):
# ... perhaps check cHandle
# ... process 'data'
# Initialisation -------
p = btle.Peripheral( address )
p.setDelegate( MyDelegate(params) )
# Setup to turn notifications on, e.g.
# svc = p.getServiceByUUID( service_uuid )
# ch = svc.getCharacteristics( char_uuid )[0]
# ch.write( setup_data )
# Main loop --------
while True:
if p.waitForNotifications(1.0):
# handleNotification() was called
continue
print "Waiting..."
# Perhaps do something else here