droidDepotPythonControl/droid.py

88 lines
3.1 KiB
Python
Raw Normal View History

2022-09-26 16:43:31 +00:00
import asyncio
from time import sleep
from bleak import BleakScanner, BleakClient
2022-09-27 03:23:17 +00:00
class Droid():
def __init__(self, profile):
print("Initializing")
self.profile = profile
2022-09-26 16:43:31 +00:00
async def connect(self):
2022-09-26 23:25:13 +00:00
timeout=0.0
print("Connecting")
2022-09-27 03:23:17 +00:00
self.droid = BleakClient(self.profile)
await self.droid.connect()
while not self.droid.is_connected and timeout < 10:
sleep (.1)
timeout += .1
print ("Connected!")
connectCode = bytearray.fromhex("222001")
await self.droid.write_gatt_char(0x000d, connectCode, False)
await self.droid.write_gatt_char(0x000d, connectCode, False)
print("Locked")
2022-09-27 03:56:10 +00:00
light_blink = bytearray.fromhex("2C000449020001ff01ff0aff00")
await self.droid.write_gatt_char(0x000d, light_blink)
connect_sound = bytearray.fromhex("25000c421102")
await self.droid.write_gatt_char(0x000d, connect_sound)
2022-09-27 22:07:56 +00:00
sleep(3)
2022-09-27 03:23:17 +00:00
async def disconnect(self):
print ("Disconnecting")
try:
2022-09-27 22:07:56 +00:00
soundBank = bytearray.fromhex("27420f4444001f09")
2022-09-27 03:23:17 +00:00
await self.droid.write_gatt_char(0x000d, soundBank)
2022-09-27 22:07:56 +00:00
soundSelection = bytearray.fromhex("27420f4444001800")
2022-09-27 03:23:17 +00:00
await self.droid.write_gatt_char(0x000d, soundSelection)
2022-09-27 22:07:56 +00:00
sleep(3)
2022-09-27 03:23:17 +00:00
finally:
await self.droid.disconnect()
print("Disconnected")
2022-09-27 03:39:20 +00:00
2022-09-27 22:07:56 +00:00
async def play_sound(self, sound_id=None, bank_id=None, cycle=False):
if bank_id and self.soundbank != bank_id:
self.set_soundbank(bank_id)
if sound_id:
soundSelection = bytearray.fromhex("27420f44440018{}".format(sound_id))
elif cycle:
soundSelection = bytearray.fromhex("26420f4344001c")
else:
soundSelection = bytearray.fromhex("27420f44440010{}".format(self.bank_id))
await self.droid.write_gatt_char(0x000d, soundSelection)
2022-09-27 03:39:20 +00:00
async def run_routine(self, routineId):
full_id = bytearray.fromhex("25000c42{}02".format(routineId))
await self.droid.write_gatt_char(0x000d, full_id)
2022-09-27 22:07:56 +00:00
async def set_soundbank(self, bank_id):
self.soundbank = bank_id
soundBank = bytearray.fromhex("27420f4444001f{}".format(bank_id))
await self.droid.write_gatt_char(0x000d, soundBank)
async def set_volume(self, volume):
volume_command = bytearray.fromhex("27420f4444000e{}".format(volume))
await self.droid.write_gatt_char(0x000d, volume_command)
2022-09-26 23:25:13 +00:00
def findDroid(candidate, data):
if candidate.name == "DROID":
return True
else:
return False
2022-09-26 16:43:31 +00:00
2022-09-26 23:25:13 +00:00
async def main():
myDroid = await BleakScanner.find_device_by_filter(findDroid)
print (myDroid)
2022-09-27 03:23:17 +00:00
arms = Droid(myDroid)
2022-09-26 23:25:13 +00:00
await arms.connect()
2022-09-27 03:23:17 +00:00
sleep (3)
2022-09-27 03:39:20 +00:00
try:
await arms.run_routine("05")
2022-09-27 03:56:10 +00:00
sleep (5)
2022-09-27 22:07:56 +00:00
await arms.set_soundbank("05")
await arms.play_sound("00")
sleep (5)
for i in range(5):
await arms.play_sound(cycle=True)
sleep(5)
await arms.play_sound("00", "00")
2022-09-27 03:39:20 +00:00
finally:
await arms.disconnect()
2022-09-26 23:25:13 +00:00
asyncio.run(main())