1- ''' works in principle with async
2- could look at running wifi from core1 - doesn't seem to work
3- look at running ble collection on core1
4- nearly at __version__ 1.0.0
5- requires some code tidying - remove comments & old commented out code that is not used
1+ ''' central handler holds most coros & passes data between
62'''
73import logging
84import gc
@@ -56,13 +52,13 @@ def __init__(self):
5652 def initialised (self ):
5753 return self .rtc
5854
59- async def bridge_main (self , onboard_led , providers , simulate_beacons : bool = False ):
55+ async def bridge_main (self , onboard_led , simulate_beacons : bool = False ):
6056 gc .collect ()
6157 self .onboard_led = onboard_led
62- if providers is None :
63- self .providers = self .get_providers ()
64- else :
65- self .providers = providers
58+ # if providers is None:
59+ # self.providers = self.set_providers ()
60+ # else:
61+ # self.providers = providers
6662 # add any webhooks defined in config
6763 # todo !! not currently implemented/tested
6864 self .webhook_providers = self ._get_webhook_providers ()
@@ -80,7 +76,7 @@ async def bridge_main(self, onboard_led, providers, simulate_beacons: bool = Fal
8076 provider__start_message = provider .start () #todo look into this
8177 if not provider__start_message :
8278 provider__start_message = ''
83- self .logger .info ("...started: {} {}" . format ( provider , provider__start_message ) )
79+ self .logger .info (f "...started: { provider } { provider__start_message } " )
8480 # find configured colours
8581 for colour in provider .col_dest .keys ():
8682 if colour not in self .enabled_colours :
@@ -125,7 +121,7 @@ async def bridge_main(self, onboard_led, providers, simulate_beacons: bool = Fal
125121 print ('Trapped cancelled error.' )
126122 raise
127123 except KeyboardInterrupt :
128- # todo: is this actioned here? investigate
124+ # this is not usually actioned here, calling async coro captures the KB interrupt
129125 print ("cancelling tasks..." )
130126 self .handler .cancel ()
131127 self .scanner .cancel ()
@@ -165,9 +161,9 @@ async def _scan_for_ibeacons(self, simulate=False):
165161 await task # then wait for task to complete
166162 #res = await asyncio.gather(t1,t2, return_exceptions=True)
167163 except asyncio .TimeoutError : # These only happen if return_exceptions is False
168- print ( ' Timeout' ) # With the default times, cancellation occurs first
164+ logger . warning ( 'scanner Timeout' ) # With the default times, cancellation occurs first
169165 except asyncio .CancelledError :
170- print ( ' Cancelled' )
166+ logger . warning ( 'scanner Cancelled' )
171167 #asyncio.sleep_ms(randrange(100, 750))
172168 #pckt_complete = True
173169 else :
@@ -179,9 +175,10 @@ async def _scan_for_ibeacons(self, simulate=False):
179175 async for result in scanner :
180176 if result .adv_data and result .adv_data [5 :11 ] == iBeacon_prefix :
181177 #print("match")
182- rssi = result .rssi
178+ # rssi = result.rssi
183179 # Extract and process iBeacon data
184180 #await _beacon_callback(iBeacon_data, rssi, simulate)
181+ #print(f"RSSI:{result.rssi}")
185182 iBeacon_data = iBeaconStatus (result .adv_data , result .rssi , result .device .addr_hex ())
186183 #print(iBeacon_data)
187184 await self ._beacon_callback (iBeacon_data , simulate )
@@ -322,8 +319,7 @@ def _get_webhook_providers(self):
322319 webhook_providers .append (WebhookCloudProvider (url , self .config ))
323320 return webhook_providers
324321
325- def get_providers (self , network = False ):
326- #
322+ def set_providers (self , network = False ):
327323 if network :
328324 normal_providers = [
329325 #PrometheusCloudProvider(self.config),
@@ -342,7 +338,7 @@ def get_providers(self, network=False):
342338 CSVFileProvider (self .config ),
343339 ]
344340 self .logger .warning ('No network credentials specified. Enabling local CSV logging only.' )
345- return normal_providers
341+ self . providers = normal_providers
346342
347343 def get_time (self ):
348344 result = False
@@ -361,24 +357,28 @@ def max_av_period(providers, colours):
361357 # this is how many records from each tilt that will be saved
362358 # called once per colour?
363359 col_max = {}
364- max_av = 0
360+ max_av = 30
365361 try :
366362 for provider in providers :
367363 #print(f"*** colours {colours}")
368364 for colour in colours :
369- #print(f"*** test {provider}: {colour}, {provider.col_dest.keys()}")
370- if colour in provider .col_dest .keys () and provider .averaging_period >= max_av - 1 :
371- #print(f"*** colour match: {colour}")
372- max_av = provider .averaging_period + 1 # so if passed 0 then this will still work
373- col_max [colour ] = max_av
365+ # print(f"*** test {provider}: {colour}, {provider.col_dest.keys()}")
366+ if colour in provider .col_dest .keys () and provider .averaging_period > max_av :
367+ # print(f"*** colour match: {colour}")
368+ #max_av = provider.averaging_period + 1 # so if passed 0 then this will still work
369+ # keep a minimum of 30 secs worth or readings
370+ #max_av = provider.averaging_period + 1 if max_av < 30 else max_av
371+ #col_max[colour] = max_av
372+ max_av = provider .averaging_period
374373 #print(f"*** {col_max}")
375374 else :
376375 #print(f"*** no match {colour} av_period {provider.averaging_period}")
377376 pass
377+ col_max .update ({colour : max_av })
378378 except Exception as e :
379379 self .logger .error (f"max_av_period error: { e } " )
380380 raise
381- #logger.debug (f"col_max: {col_max}")
381+ #print (f"col_max: {col_max}")
382382 return col_max
383383
384384async def debug_memory (logger ):
0 commit comments