33from typing import Callable
44
55from bluepy import btle
6+ from bluepy .btle import DefaultDelegate
67
78_LOGGER = logging .getLogger (__name__ )
89
910
11+ class TionDelegation (DefaultDelegate ):
12+ def __init__ (self ):
13+ self ._data = None
14+ DefaultDelegate .__init__ (self )
15+
16+ def handleNotification (self , cHandle , data ):
17+ self ._data = data
18+ _LOGGER .debug ("%s" , data )
19+
20+ def handleDiscovery (self , dev , isNewDev , isNewData ):
21+ if isNewDev :
22+ _LOGGER .debug ("Discovered device %s" , dev .addr )
23+ elif isNewData :
24+ _LOGGER .debug ("Received new data from %s" , dev .addr )
25+ @property
26+ def data (self ):
27+ return self ._data
28+
1029class TionException (Exception ):
1130 def __init__ (self , expression , message ):
1231 self .expression = expression
@@ -21,6 +40,7 @@ class tion:
2140 def __init__ (self , mac : str ):
2241 self ._mac = mac
2342 self ._btle : btle .Peripheral = btle .Peripheral (None )
43+ self ._delegation = TionDelegation ()
2444
2545 @abc .abstractmethod
2646 def _send_request (self , request : bytearray ) -> bytearray :
@@ -148,3 +168,17 @@ def _do_action(self, action: Callable, max_tries: int = 3, *args, **kwargs):
148168 raise TionException (action .__name__ , message )
149169
150170 return response
171+
172+ def _enable_notifications (self ):
173+ _LOGGER .debug ("Enabling notification" )
174+ setup_data = b"\x01 \x00 "
175+
176+ _LOGGER .debug ("Notify handler is %s" , self .notify .getHandle ())
177+ notify_handle = self .notify .getHandle () + 1
178+
179+ _LOGGER .debug ("Will write %s to %s handle" , setup_data , notify_handle )
180+ result = self ._btle .writeCharacteristic (notify_handle , setup_data , withResponse = True )
181+ _LOGGER .debug ("Result is %s" , result )
182+ self ._btle .withDelegate (self ._delegation )
183+ self .notify .read ()
184+ return result
0 commit comments