diff --git a/main.py b/main.py index 0ce0c50..6a32a87 100644 --- a/main.py +++ b/main.py @@ -17,6 +17,7 @@ from aiohttp import ClientSession, CookieJar import settings from pyunifiprotect.unifi_protect_server import UpvServer +from pyunifiprotect.exceptions import NvrError RELAY_ON = False RELAY_OFF = True @@ -44,10 +45,10 @@ def ring_bell(mac): except KeyError: logging.error('Doorbell %s not found!', mac) -def subscriber(updated): - logging.debug('Subscription: updated=%s', updated) +def subscriber(updates): + logging.debug('Subscription: updates=%s', updates) - for _, data in updated.items(): + for _, data in updates.items(): if data['event_type'] == 'ring' and data['event_ring_on']: logging.info('%s: %s is ringing!', data['mac'], data['name']) ring_bell(data['mac']) @@ -57,28 +58,46 @@ def feed_watchdog(): wdt.write('1') async def ws_listener(): - session = ClientSession(cookie_jar=CookieJar(unsafe=True)) - - unifiprotect = UpvServer( - session, - settings.UFP_ADDRESS, - settings.UFP_PORT, - settings.UFP_USERNAME, - settings.UFP_PASSWORD, - ) - - await unifiprotect.check_unifi_os() - await unifiprotect.update() - - unsub = unifiprotect.subscribe_websocket(subscriber) - while True: - if allow_watchdog and not DEBUG: - feed_watchdog() - await asyncio.sleep(1) + session = ClientSession(cookie_jar=CookieJar(unsafe=True)) - await session.close() - unsub() + unifiprotect = UpvServer( + session, + settings.UFP_ADDRESS, + settings.UFP_PORT, + settings.UFP_USERNAME, + settings.UFP_PASSWORD, + ) + + await unifiprotect.check_unifi_os() + await unifiprotect.update() + + unsub = unifiprotect.subscribe_websocket(subscriber) + + while True: + try: + updates = await unifiprotect.update() + logging.debug('Updates: %s', str(updates)) + except NvrError: + logging.error('Problem connecting to Unifi Protect. Reconnecting...') + break + + logging.debug('unifiprotect: %s', unifiprotect.__dict__) + logging.debug('ws_session %s', unifiprotect.ws_session.__dict__) + + breakpoint() + + #active_ws = await unifiprotect.check_ws() + #if not active_ws: + # logging.error('Websocket unactive. Reconnecting...') + + if allow_watchdog and not DEBUG: + feed_watchdog() + + await asyncio.sleep(1) + + await session.close() + unsub() def disable_relays_on_exit(*args): logging.info('Exiting, disabling relays...') @@ -93,7 +112,7 @@ def init(): for _, doorbell in settings.DOORBELLS.items(): GPIO.setup(doorbell['gpio'], GPIO.OUT) - pulse_relay(doorbell['gpio']) + #pulse_relay(doorbell['gpio']) time.sleep(1) logging.info('GPIO initialized')