diff --git a/__main__.py b/__main__.py index e262489..6a4d00f 100644 --- a/__main__.py +++ b/__main__.py @@ -3,6 +3,7 @@ import time import json import typer +import requests from pyamaha import Device, System, Zone @@ -12,11 +13,14 @@ class Error(Exception): """Base class for exceptions in this module.""" pass -class ApiError(Exception): +class ApiError(Error): def __init__(self, request_url, response_code): self.request = request_url self.response_code = response_code +class ConnectionTimeout(Error): + pass + class Senario: activate = [] deactivate = [] @@ -57,8 +61,9 @@ class Spotify(Senario): class Yamaha: - def __init__(self, device: Device, mqtt_client: Client, logger: logging.Logger=None): - self._device = device + def __init__(self, ip: str, mqtt_client: Client, logger: logging.Logger=None, timeout=None): + self.timeout = timeout if timeout else 10 + self._device = Device(ip, self.timeout) self._client = mqtt_client self.logger = logger @@ -85,7 +90,10 @@ class Yamaha: self.request(action) def request(self, request): - r = self._device.request(request) + try: + r = self._device.request(request) + except requests.exceptions.ReadTimeout: + raise ConnectionTimeout() r_json = r.json() if r_json['response_code'] != 0: raise ApiResponse(r.url, r_json['response_code']) @@ -156,7 +164,7 @@ def main(\ client = Client() client.setup(mqtt_host, mqtt_port, mqtt_user, mqtt_pwd) - yamaha = Yamaha(Device(yamaha_host), client) + yamaha = Yamaha(yamaha_host, client) client.loop_forever()