From cdf02633e450b4300116c1b605eeed1b83bdcf38 Mon Sep 17 00:00:00 2001 From: hornet Date: Sun, 9 Oct 2022 00:40:01 -0400 Subject: [PATCH 1/8] Changed naming convention to "d" for droid --- droid.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/droid.py b/droid.py index 6603ba6..a5f815a 100644 --- a/droid.py +++ b/droid.py @@ -1,7 +1,7 @@ import asyncio from time import sleep from bleak import BleakScanner, BleakClient -import pickle + class Droid(): def __init__(self, profile): print("Initializing") @@ -103,8 +103,8 @@ def findDroid(candidate, data): async def main(): myDroid = await BleakScanner.find_device_by_filter(findDroid) print (myDroid) - arms = Droid(myDroid) - await arms.connect() + d = Droid(myDroid) + await d.connect() sleep (3) try: # await arms.run_routine("05") @@ -117,16 +117,16 @@ async def main(): # sleep(5) # await arms.play_sound("00", "00") # sleep(8) - await arms.led_disable_sound("01") - await arms.play_sound("00", "00") + await d.led_disable_sound("01") + await d.play_sound("00", "00") sleep(10) - await arms.led_on("1f") + await d.led_on("1f") sleep(10) - await arms.led_off("1f") - await arms.play_sound("00", "00") + await d.led_off("1f") + await d.play_sound("00", "00") sleep(10) finally: - await arms.disconnect() + await d.disconnect() asyncio.run(main()) \ No newline at end of file From 08ba6ebb3bc5c4bbb06ab35bf3aa0070fd5283f1 Mon Sep 17 00:00:00 2001 From: hornet Date: Sun, 9 Oct 2022 00:40:33 -0400 Subject: [PATCH 2/8] Added gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ From ee4e3227b47cfc736e73db987ed9e1a772a385d6 Mon Sep 17 00:00:00 2001 From: hornet Date: Sun, 9 Oct 2022 00:41:32 -0400 Subject: [PATCH 3/8] Added discovery improvements --- droid.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/droid.py b/droid.py index a5f815a..c880d5e 100644 --- a/droid.py +++ b/droid.py @@ -1,6 +1,6 @@ import asyncio from time import sleep -from bleak import BleakScanner, BleakClient +from bleak import BleakScanner, BleakClient, BleakError class Droid(): def __init__(self, profile): @@ -101,12 +101,24 @@ def findDroid(candidate, data): return False async def main(): - myDroid = await BleakScanner.find_device_by_filter(findDroid) - print (myDroid) + myDroid = None + + while myDroid is None or myDroid == "None": + try: + myDroid = await BleakScanner.find_device_by_filter(findDroid) + if myDroid is None: + print("Droid discovery timed out. Retrying...") + except BleakError as err: + print("Droid discovery failed. Retrying...") + continue + + print (f"Astromech successfully discovered: [ {myDroid} ]") + d = Droid(myDroid) - await d.connect() - sleep (3) + try: + await d.connect() + sleep (3) # await arms.run_routine("05") # sleep (5) # await arms.set_soundbank("05") From a0db0dd04018a0d6492aeb81577ecf8bfdd445ee Mon Sep 17 00:00:00 2001 From: hornet Date: Sun, 9 Oct 2022 00:42:16 -0400 Subject: [PATCH 4/8] Added error handling --- droid.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/droid.py b/droid.py index c880d5e..fc59ece 100644 --- a/droid.py +++ b/droid.py @@ -137,7 +137,11 @@ async def main(): await d.led_off("1f") await d.play_sound("00", "00") sleep(10) - + + except OSError as err: + print(f"Discovery failed due to operating system: {err}") + except BleakError as err: + print(f"Discovery failed due to Bleak: {err}") finally: await d.disconnect() From 25f14de8b9197f89a7d41201a9f574a86183875f Mon Sep 17 00:00:00 2001 From: hornet Date: Sun, 9 Oct 2022 00:42:40 -0400 Subject: [PATCH 5/8] Added logic for this to run only if on main --- droid.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/droid.py b/droid.py index fc59ece..f7822e8 100644 --- a/droid.py +++ b/droid.py @@ -137,7 +137,7 @@ async def main(): await d.led_off("1f") await d.play_sound("00", "00") sleep(10) - + except OSError as err: print(f"Discovery failed due to operating system: {err}") except BleakError as err: @@ -145,4 +145,7 @@ async def main(): finally: await d.disconnect() -asyncio.run(main()) \ No newline at end of file + +if __name__ == "__main__": + asyncio.run(main()) + \ No newline at end of file From 88e50245857d7f71a4eff2b71df7a97d57aa911d Mon Sep 17 00:00:00 2001 From: hornet Date: Sun, 9 Oct 2022 00:43:09 -0400 Subject: [PATCH 6/8] Added additional formatting for clarity --- droid.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/droid.py b/droid.py index f7822e8..57b8c6a 100644 --- a/droid.py +++ b/droid.py @@ -7,6 +7,7 @@ class Droid(): print("Initializing") self.disabledLeds = 0x00 self.profile = profile + async def connect(self): timeout=0.0 print("Connecting") @@ -68,6 +69,7 @@ class Droid(): def move (self ): pass + async def play_sound(self, sound_id=None, bank_id=None, cycle=False, volume=None): if volume: self.set_volume(volume) @@ -148,4 +150,3 @@ async def main(): if __name__ == "__main__": asyncio.run(main()) - \ No newline at end of file From 593a71ec7334f903d1668de4f1d0d689ab6e1b75 Mon Sep 17 00:00:00 2001 From: hornet Date: Sun, 9 Oct 2022 20:54:48 -0400 Subject: [PATCH 7/8] Droid discovery extracted to function. --- droid.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/droid.py b/droid.py index 57b8c6a..7e47f79 100644 --- a/droid.py +++ b/droid.py @@ -102,21 +102,34 @@ def findDroid(candidate, data): else: return False -async def main(): +async def discoverDroid(retry=False): myDroid = None - while myDroid is None or myDroid == "None": + while retry and myDroid is None: try: myDroid = await BleakScanner.find_device_by_filter(findDroid) if myDroid is None: - print("Droid discovery timed out. Retrying...") + if not retry: + print("Droid discovery timed out.") + return + else: + print("Droid discovery timed out. Retrying...") + continue except BleakError as err: print("Droid discovery failed. Retrying...") continue - print (f"Astromech successfully discovered: [ {myDroid} ]") + print (f"Astromech successfully discovered: [ {myDroid} ]") + d = Droid(myDroid) + return d + + + +async def main(): + + d = await discoverDroid() try: await d.connect() From a8b98d131cc3575ae16b090ec0a51f699af8fe13 Mon Sep 17 00:00:00 2001 From: hornet Date: Sun, 9 Oct 2022 21:32:14 -0400 Subject: [PATCH 8/8] We want retry logic in the main loop of this program --- droid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/droid.py b/droid.py index 7e47f79..66d62d0 100644 --- a/droid.py +++ b/droid.py @@ -129,7 +129,7 @@ async def discoverDroid(retry=False): async def main(): - d = await discoverDroid() + d = await discoverDroid(retry=True) try: await d.connect()