diff --git a/homeassistant/components/mochad/__init__.py b/homeassistant/components/mochad/__init__.py index 77426e8ae2c..683681b50a0 100644 --- a/homeassistant/components/mochad/__init__.py +++ b/homeassistant/components/mochad/__init__.py @@ -2,11 +2,16 @@ import logging import threading +from pymochad import controller, exceptions import voluptuous as vol +from homeassistant.const import ( + CONF_HOST, + CONF_PORT, + EVENT_HOMEASSISTANT_START, + EVENT_HOMEASSISTANT_STOP, +) import homeassistant.helpers.config_validation as cv -from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP -from homeassistant.const import CONF_HOST, CONF_PORT _LOGGER = logging.getLogger(__name__) @@ -37,8 +42,6 @@ def setup(hass, config): host = conf.get(CONF_HOST) port = conf.get(CONF_PORT) - from pymochad import exceptions - global CONTROLLER try: CONTROLLER = MochadCtrl(host, port) @@ -68,8 +71,6 @@ class MochadCtrl: self._host = host self._port = port - from pymochad import controller - self.ctrl = controller.PyMochad(server=self._host, port=self._port) @property diff --git a/homeassistant/components/mochad/light.py b/homeassistant/components/mochad/light.py index 899908c34bd..871caadd95c 100644 --- a/homeassistant/components/mochad/light.py +++ b/homeassistant/components/mochad/light.py @@ -1,30 +1,32 @@ """Support for X10 dimmer over Mochad.""" import logging +from pymochad import device import voluptuous as vol from homeassistant.components.light import ( ATTR_BRIGHTNESS, + PLATFORM_SCHEMA, SUPPORT_BRIGHTNESS, Light, - PLATFORM_SCHEMA, ) -from homeassistant.components import mochad -from homeassistant.const import CONF_NAME, CONF_PLATFORM, CONF_DEVICES, CONF_ADDRESS +from homeassistant.const import CONF_ADDRESS, CONF_DEVICES, CONF_NAME, CONF_PLATFORM from homeassistant.helpers import config_validation as cv +from . import CONF_COMM_TYPE, CONTROLLER, DOMAIN, REQ_LOCK + _LOGGER = logging.getLogger(__name__) CONF_BRIGHTNESS_LEVELS = "brightness_levels" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { - vol.Required(CONF_PLATFORM): mochad.DOMAIN, + vol.Required(CONF_PLATFORM): DOMAIN, CONF_DEVICES: [ { vol.Optional(CONF_NAME): cv.string, vol.Required(CONF_ADDRESS): cv.x10_address, - vol.Optional(mochad.CONF_COMM_TYPE): cv.string, + vol.Optional(CONF_COMM_TYPE): cv.string, vol.Optional(CONF_BRIGHTNESS_LEVELS, default=32): vol.All( vol.Coerce(int), vol.In([32, 64, 256]) ), @@ -37,7 +39,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up X10 dimmers over a mochad controller.""" devs = config.get(CONF_DEVICES) - add_entities([MochadLight(hass, mochad.CONTROLLER.ctrl, dev) for dev in devs]) + add_entities([MochadLight(hass, CONTROLLER.ctrl, dev) for dev in devs]) return True @@ -46,12 +48,11 @@ class MochadLight(Light): def __init__(self, hass, ctrl, dev): """Initialize a Mochad Light Device.""" - from pymochad import device self._controller = ctrl self._address = dev[CONF_ADDRESS] self._name = dev.get(CONF_NAME, f"x10_light_dev_{self._address}") - self._comm_type = dev.get(mochad.CONF_COMM_TYPE, "pl") + self._comm_type = dev.get(CONF_COMM_TYPE, "pl") self.light = device.Device(ctrl, self._address, comm_type=self._comm_type) self._brightness = 0 self._state = self._get_device_status() @@ -64,7 +65,7 @@ class MochadLight(Light): def _get_device_status(self): """Get the status of the light from mochad.""" - with mochad.REQ_LOCK: + with REQ_LOCK: status = self.light.get_status().rstrip() return status == "on" @@ -106,7 +107,7 @@ class MochadLight(Light): def turn_on(self, **kwargs): """Send the command to turn the light on.""" brightness = kwargs.get(ATTR_BRIGHTNESS, 255) - with mochad.REQ_LOCK: + with REQ_LOCK: if self._brightness_levels > 32: out_brightness = self._calculate_brightness_value(brightness) self.light.send_cmd(f"xdim {out_brightness}") @@ -124,7 +125,7 @@ class MochadLight(Light): def turn_off(self, **kwargs): """Send the command to turn the light on.""" - with mochad.REQ_LOCK: + with REQ_LOCK: self.light.send_cmd("off") self._controller.read_data() # There is no persistence for X10 modules so we need to prepare diff --git a/homeassistant/components/mochad/switch.py b/homeassistant/components/mochad/switch.py index 0713d50eb4b..14fb601f919 100644 --- a/homeassistant/components/mochad/switch.py +++ b/homeassistant/components/mochad/switch.py @@ -1,24 +1,27 @@ """Support for X10 switch over Mochad.""" import logging +from pymochad import device +from pymochad.exceptions import MochadException import voluptuous as vol -from homeassistant.components import mochad from homeassistant.components.switch import SwitchDevice -from homeassistant.const import CONF_NAME, CONF_DEVICES, CONF_PLATFORM, CONF_ADDRESS +from homeassistant.const import CONF_ADDRESS, CONF_DEVICES, CONF_NAME, CONF_PLATFORM from homeassistant.helpers import config_validation as cv +from . import CONF_COMM_TYPE, CONTROLLER, DOMAIN, REQ_LOCK + _LOGGER = logging.getLogger(__name__) PLATFORM_SCHEMA = vol.Schema( { - vol.Required(CONF_PLATFORM): mochad.DOMAIN, + vol.Required(CONF_PLATFORM): DOMAIN, CONF_DEVICES: [ { vol.Optional(CONF_NAME): cv.string, vol.Required(CONF_ADDRESS): cv.x10_address, - vol.Optional(mochad.CONF_COMM_TYPE): cv.string, + vol.Optional(CONF_COMM_TYPE): cv.string, } ], } @@ -28,7 +31,7 @@ PLATFORM_SCHEMA = vol.Schema( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up X10 switches over a mochad controller.""" devs = config.get(CONF_DEVICES) - add_entities([MochadSwitch(hass, mochad.CONTROLLER.ctrl, dev) for dev in devs]) + add_entities([MochadSwitch(hass, CONTROLLER.ctrl, dev) for dev in devs]) return True @@ -37,12 +40,11 @@ class MochadSwitch(SwitchDevice): def __init__(self, hass, ctrl, dev): """Initialize a Mochad Switch Device.""" - from pymochad import device self._controller = ctrl self._address = dev[CONF_ADDRESS] self._name = dev.get(CONF_NAME, "x10_switch_dev_%s" % self._address) - self._comm_type = dev.get(mochad.CONF_COMM_TYPE, "pl") + self._comm_type = dev.get(CONF_COMM_TYPE, "pl") self.switch = device.Device(ctrl, self._address, comm_type=self._comm_type) # Init with false to avoid locking HA for long on CM19A (goes from rf # to pl via TM751, but not other way around) @@ -58,10 +60,9 @@ class MochadSwitch(SwitchDevice): def turn_on(self, **kwargs): """Turn the switch on.""" - from pymochad.exceptions import MochadException _LOGGER.debug("Reconnect %s:%s", self._controller.server, self._controller.port) - with mochad.REQ_LOCK: + with REQ_LOCK: try: # Recycle socket on new command to recover mochad connection self._controller.reconnect() @@ -75,10 +76,9 @@ class MochadSwitch(SwitchDevice): def turn_off(self, **kwargs): """Turn the switch off.""" - from pymochad.exceptions import MochadException _LOGGER.debug("Reconnect %s:%s", self._controller.server, self._controller.port) - with mochad.REQ_LOCK: + with REQ_LOCK: try: # Recycle socket on new command to recover mochad connection self._controller.reconnect() @@ -92,7 +92,7 @@ class MochadSwitch(SwitchDevice): def _get_device_status(self): """Get the status of the switch from mochad.""" - with mochad.REQ_LOCK: + with REQ_LOCK: status = self.switch.get_status().rstrip() return status == "on" diff --git a/tests/components/mochad/test_light.py b/tests/components/mochad/test_light.py index 7cb4ecb3cbc..631c5b40734 100644 --- a/tests/components/mochad/test_light.py +++ b/tests/components/mochad/test_light.py @@ -14,8 +14,8 @@ from tests.common import get_test_home_assistant @pytest.fixture(autouse=True) def pymochad_mock(): """Mock pymochad.""" - with mock.patch.dict("sys.modules", {"pymochad": mock.MagicMock()}): - yield + with mock.patch("homeassistant.components.mochad.light.device") as device: + yield device class TestMochadSwitchSetup(unittest.TestCase): diff --git a/tests/components/mochad/test_switch.py b/tests/components/mochad/test_switch.py index 5fc3d4ee415..8c0dc3554db 100644 --- a/tests/components/mochad/test_switch.py +++ b/tests/components/mochad/test_switch.py @@ -14,9 +14,8 @@ from tests.common import get_test_home_assistant @pytest.fixture(autouse=True) def pymochad_mock(): """Mock pymochad.""" - with mock.patch.dict( - "sys.modules", - {"pymochad": mock.MagicMock(), "pymochad.exceptions": mock.MagicMock()}, + with mock.patch("homeassistant.components.mochad.switch.device"), mock.patch( + "homeassistant.components.mochad.switch.MochadException" ): yield