diff --git a/homeassistant/components/climate/melissa.py b/homeassistant/components/climate/melissa.py index 1e4ceac0edf..2b3b3bfbab1 100644 --- a/homeassistant/components/climate/melissa.py +++ b/homeassistant/components/climate/melissa.py @@ -6,21 +6,32 @@ https://home-assistant.io/components/climate.melissa/ """ import logging -from homeassistant.components.climate import ClimateDevice, \ - SUPPORT_OPERATION_MODE, SUPPORT_TARGET_TEMPERATURE, SUPPORT_ON_OFF, \ - STATE_AUTO, STATE_HEAT, STATE_COOL, STATE_DRY, STATE_FAN_ONLY, \ - SUPPORT_FAN_MODE +from homeassistant.components.climate import ( + ClimateDevice, SUPPORT_OPERATION_MODE, SUPPORT_TARGET_TEMPERATURE, + SUPPORT_ON_OFF, STATE_AUTO, STATE_HEAT, STATE_COOL, STATE_DRY, + STATE_FAN_ONLY, SUPPORT_FAN_MODE +) from homeassistant.components.fan import SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH -from homeassistant.components.melissa import DATA_MELISSA, DOMAIN -from homeassistant.const import TEMP_CELSIUS, STATE_ON, STATE_OFF, \ - STATE_UNKNOWN, STATE_IDLE, ATTR_TEMPERATURE, PRECISION_WHOLE +from homeassistant.components.melissa import DATA_MELISSA +from homeassistant.const import ( + TEMP_CELSIUS, STATE_ON, STATE_OFF, STATE_IDLE, ATTR_TEMPERATURE, + PRECISION_WHOLE +) -DEPENDENCIES = [DOMAIN] +DEPENDENCIES = ['melissa'] _LOGGER = logging.getLogger(__name__) -SUPPORT_FLAGS = (SUPPORT_TARGET_TEMPERATURE | SUPPORT_OPERATION_MODE | - SUPPORT_ON_OFF | SUPPORT_FAN_MODE) +SUPPORT_FLAGS = (SUPPORT_FAN_MODE | SUPPORT_OPERATION_MODE | + SUPPORT_ON_OFF | SUPPORT_TARGET_TEMPERATURE) + +OP_MODES = [ + STATE_AUTO, STATE_COOL, STATE_DRY, STATE_FAN_ONLY, STATE_HEAT +] + +FAN_MODES = [ + STATE_AUTO, SPEED_HIGH, SPEED_LOW, SPEED_MEDIUM +] def setup_platform(hass, config, add_devices, discovery_info=None): @@ -60,9 +71,7 @@ class MelissaClimate(ClimateDevice): if self._cur_settings is not None: return self._cur_settings[self._api.STATE] in ( self._api.STATE_ON, self._api.STATE_IDLE) - else: - _LOGGER.info("Can't determine state of %s", self.entity_id) - return STATE_UNKNOWN + return None @property def current_fan_mode(self): @@ -70,20 +79,12 @@ class MelissaClimate(ClimateDevice): if self._cur_settings is not None: return self.melissa_fan_to_hass( self._cur_settings[self._api.FAN]) - else: - _LOGGER.info( - "Can't determine current fan mode for %s", self.entity_id) - return STATE_UNKNOWN @property def current_temperature(self): """Return the current temperature.""" if self._data: return self._data[self._api.TEMP] - else: - _LOGGER.info( - "Can't determine current temperature for %s", self.entity_id) - return None @property def target_temperature_step(self): @@ -96,35 +97,22 @@ class MelissaClimate(ClimateDevice): if self._cur_settings is not None: return self.melissa_op_to_hass( self._cur_settings[self._api.MODE]) - else: - _LOGGER.info( - "Can't determine current operation mode of %s", self.entity_id) - return STATE_UNKNOWN @property def operation_list(self): """Return the list of available operation modes.""" - return [ - STATE_AUTO, STATE_HEAT, STATE_COOL, STATE_DRY, STATE_FAN_ONLY - ] + return OP_MODES @property def fan_list(self): """List of available fan modes.""" - return [ - STATE_AUTO, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH - ] + return FAN_MODES @property def target_temperature(self): """Return the temperature we try to reach.""" if self._cur_settings is not None: return self._cur_settings[self._api.TEMP] - else: - _LOGGER.info( - "Can not determine current target temperature for %s", - self.entity_id) - return STATE_UNKNOWN @property def state(self): @@ -132,9 +120,6 @@ class MelissaClimate(ClimateDevice): if self._cur_settings is not None: return self.melissa_state_to_hass( self._cur_settings[self._api.STATE]) - else: - _LOGGER.info("Cant determine current state for %s", self.entity_id) - return STATE_UNKNOWN @property def temperature_unit(self): @@ -159,25 +144,25 @@ class MelissaClimate(ClimateDevice): def set_temperature(self, **kwargs): """Set new target temperature.""" temp = kwargs.get(ATTR_TEMPERATURE) - return self.send({self._api.TEMP: temp}) + self.send({self._api.TEMP: temp}) def set_fan_mode(self, fan): """Set fan mode.""" fan_mode = self.hass_fan_to_melissa(fan) - return self.send({self._api.FAN: fan_mode}) + self.send({self._api.FAN: fan_mode}) def set_operation_mode(self, operation_mode): """Set operation mode.""" mode = self.hass_mode_to_melissa(operation_mode) - return self.send({self._api.MODE: mode}) + self.send({self._api.MODE: mode}) def turn_on(self): """Turn on device.""" - return self.send({self._api.STATE: self._api.STATE_ON}) + self.send({self._api.STATE: self._api.STATE_ON}) def turn_off(self): """Turn off device.""" - return self.send({self._api.STATE: self._api.STATE_OFF}) + self.send({self._api.STATE: self._api.STATE_OFF}) def send(self, value): """Sending action to service.""" @@ -201,7 +186,7 @@ class MelissaClimate(ClimateDevice): )['controller']['_relation']['command_log'] except KeyError: _LOGGER.warning( - 'Unable to update component %s', self.entity_id) + 'Unable to update entity %s', self.entity_id) def melissa_state_to_hass(self, state): """Translate Melissa states to hass states.""" @@ -212,7 +197,7 @@ class MelissaClimate(ClimateDevice): elif state == self._api.STATE_IDLE: return STATE_IDLE else: - return STATE_UNKNOWN + return None def melissa_op_to_hass(self, mode): """Translate Melissa modes to hass states.""" @@ -229,7 +214,7 @@ class MelissaClimate(ClimateDevice): else: _LOGGER.warning( "Operation mode %s could not be mapped to hass", mode) - return STATE_UNKNOWN + return None def melissa_fan_to_hass(self, fan): """Translate Melissa fan modes to hass modes.""" @@ -243,7 +228,7 @@ class MelissaClimate(ClimateDevice): return SPEED_HIGH else: _LOGGER.warning("Fan mode %s could not be mapped to hass", fan) - return STATE_UNKNOWN + return None def hass_mode_to_melissa(self, mode): """Translate hass states to melissa modes.""" diff --git a/homeassistant/components/sensor/melissa.py b/homeassistant/components/sensor/melissa.py index 97645cb9dd4..58313428861 100644 --- a/homeassistant/components/sensor/melissa.py +++ b/homeassistant/components/sensor/melissa.py @@ -6,11 +6,11 @@ https://home-assistant.io/components/sensor.melissa/ """ import logging -from homeassistant.components.melissa import DOMAIN, DATA_MELISSA -from homeassistant.const import TEMP_CELSIUS, STATE_UNKNOWN +from homeassistant.components.melissa import DATA_MELISSA +from homeassistant.const import TEMP_CELSIUS from homeassistant.helpers.entity import Entity -DEPENDENCIES = [DOMAIN] +DEPENDENCIES = ['melissa'] _LOGGER = logging.getLogger(__name__) @@ -35,7 +35,7 @@ class MelissaSensor(Entity): def __init__(self, device, api): """Initialize the sensor.""" self._api = api - self._state = STATE_UNKNOWN + self._state = None self._name = '{0} {1}'.format( device['name'], self._type diff --git a/tests/components/climate/test_melissa.py b/tests/components/climate/test_melissa.py index ef5cbff5087..f8a044c2f4b 100644 --- a/tests/components/climate/test_melissa.py +++ b/tests/components/climate/test_melissa.py @@ -5,14 +5,16 @@ import json from asynctest import mock -from homeassistant.components.climate import melissa, \ - SUPPORT_TARGET_TEMPERATURE, SUPPORT_OPERATION_MODE, SUPPORT_ON_OFF, \ - SUPPORT_FAN_MODE, STATE_HEAT, STATE_FAN_ONLY, STATE_DRY, STATE_COOL, \ - STATE_AUTO +from homeassistant.components.climate import ( + melissa, SUPPORT_TARGET_TEMPERATURE, SUPPORT_OPERATION_MODE, + SUPPORT_ON_OFF, SUPPORT_FAN_MODE, STATE_HEAT, STATE_FAN_ONLY, STATE_DRY, + STATE_COOL, STATE_AUTO +) from homeassistant.components.fan import SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH from homeassistant.components.melissa import DATA_MELISSA -from homeassistant.const import TEMP_CELSIUS, STATE_ON, ATTR_TEMPERATURE, \ - STATE_OFF, STATE_IDLE, STATE_UNKNOWN +from homeassistant.const import ( + TEMP_CELSIUS, STATE_ON, ATTR_TEMPERATURE, STATE_OFF, STATE_IDLE +) from tests.common import get_test_home_assistant, load_fixture @@ -86,16 +88,16 @@ class TestMelissa(unittest.TestCase): def test_is_on(self): """Test name property.""" - self.assertEqual(self.thermostat.is_on, True) + self.assertTrue(self.thermostat.is_on) self.thermostat._cur_settings = None - self.assertEqual(STATE_UNKNOWN, self.thermostat.is_on) + self.assertFalse(self.thermostat.is_on) def test_current_fan_mode(self): """Test current_fan_mode property.""" self.thermostat.update() self.assertEqual(SPEED_LOW, self.thermostat.current_fan_mode) self.thermostat._cur_settings = None - self.assertEqual(STATE_UNKNOWN, self.thermostat.current_fan_mode) + self.assertEqual(None, self.thermostat.current_fan_mode) def test_current_temperature(self): """Test current temperature.""" @@ -115,19 +117,19 @@ class TestMelissa(unittest.TestCase): self.thermostat.update() self.assertEqual(self.thermostat.current_operation, STATE_HEAT) self.thermostat._cur_settings = None - self.assertEqual(STATE_UNKNOWN, self.thermostat.current_operation) + self.assertEqual(None, self.thermostat.current_operation) def test_operation_list(self): """Test the operation list.""" self.assertEqual( - [STATE_AUTO, STATE_HEAT, STATE_COOL, STATE_DRY, STATE_FAN_ONLY], + [STATE_AUTO, STATE_COOL, STATE_DRY, STATE_FAN_ONLY, STATE_HEAT], self.thermostat.operation_list ) def test_fan_list(self): """Test the fan list.""" self.assertEqual( - [STATE_AUTO, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH], + [STATE_AUTO, SPEED_HIGH, SPEED_LOW, SPEED_MEDIUM], self.thermostat.fan_list ) @@ -135,13 +137,13 @@ class TestMelissa(unittest.TestCase): """Test target temperature.""" self.assertEqual(16, self.thermostat.target_temperature) self.thermostat._cur_settings = None - self.assertEqual(STATE_UNKNOWN, self.thermostat.target_temperature) + self.assertEqual(None, self.thermostat.target_temperature) def test_state(self): """Test state.""" self.assertEqual(STATE_ON, self.thermostat.state) self.thermostat._cur_settings = None - self.assertEqual(STATE_UNKNOWN, self.thermostat.state) + self.assertEqual(None, self.thermostat.state) def test_temperature_unit(self): """Test temperature unit.""" @@ -165,29 +167,30 @@ class TestMelissa(unittest.TestCase): """Test set_temperature.""" self.api.send.return_value = True self.thermostat.update() - self.assertTrue(self.thermostat.set_temperature( - **{ATTR_TEMPERATURE: 25})) + self.thermostat.set_temperature(**{ATTR_TEMPERATURE: 25}) self.assertEqual(25, self.thermostat.target_temperature) def test_fan_mode(self): """Test set_fan_mode.""" self.api.send.return_value = True - self.assertTrue(self.thermostat.set_fan_mode(SPEED_LOW)) - self.assertEqual(SPEED_LOW, self.thermostat.current_fan_mode) + self.thermostat.set_fan_mode(SPEED_HIGH) + self.assertEqual(SPEED_HIGH, self.thermostat.current_fan_mode) def test_set_operation_mode(self): """Test set_operation_mode.""" self.api.send.return_value = True - self.assertTrue(self.thermostat.set_operation_mode(STATE_COOL)) + self.thermostat.set_operation_mode(STATE_COOL) self.assertEqual(STATE_COOL, self.thermostat.current_operation) def test_turn_on(self): """Test turn_on.""" - self.assertTrue(self.thermostat.turn_on()) + self.thermostat.turn_on() + self.assertTrue(self.thermostat.state) def test_turn_off(self): """Test turn_off.""" - self.assertTrue(self.thermostat.turn_off()) + self.thermostat.turn_off() + self.assertEqual(STATE_OFF, self.thermostat.state) def test_send(self): """Test send.""" @@ -211,14 +214,14 @@ class TestMelissa(unittest.TestCase): self.thermostat._api.status.side_effect = KeyError('boom') self.thermostat.update() mocked_warning.assert_called_once_with( - 'Unable to update component %s', self.thermostat.entity_id) + 'Unable to update entity %s', self.thermostat.entity_id) def test_melissa_state_to_hass(self): """Test for translate melissa states to hass.""" self.assertEqual(STATE_OFF, self.thermostat.melissa_state_to_hass(0)) self.assertEqual(STATE_ON, self.thermostat.melissa_state_to_hass(1)) self.assertEqual(STATE_IDLE, self.thermostat.melissa_state_to_hass(2)) - self.assertEqual(STATE_UNKNOWN, + self.assertEqual(None, self.thermostat.melissa_state_to_hass(3)) def test_melissa_op_to_hass(self): @@ -229,7 +232,7 @@ class TestMelissa(unittest.TestCase): self.assertEqual(STATE_COOL, self.thermostat.melissa_op_to_hass(3)) self.assertEqual(STATE_DRY, self.thermostat.melissa_op_to_hass(4)) self.assertEqual( - STATE_UNKNOWN, self.thermostat.melissa_op_to_hass(5)) + None, self.thermostat.melissa_op_to_hass(5)) def test_melissa_fan_to_hass(self): """Test for translate melissa fan state to hass.""" @@ -237,7 +240,7 @@ class TestMelissa(unittest.TestCase): self.assertEqual(SPEED_LOW, self.thermostat.melissa_fan_to_hass(1)) self.assertEqual(SPEED_MEDIUM, self.thermostat.melissa_fan_to_hass(2)) self.assertEqual(SPEED_HIGH, self.thermostat.melissa_fan_to_hass(3)) - self.assertEqual(STATE_UNKNOWN, self.thermostat.melissa_fan_to_hass(4)) + self.assertEqual(None, self.thermostat.melissa_fan_to_hass(4)) @mock.patch('homeassistant.components.climate.melissa._LOGGER.warning') def test_hass_mode_to_melissa(self, mocked_warning): diff --git a/tests/components/sensor/test_melissa.py b/tests/components/sensor/test_melissa.py index 3a13020438f..55b3e7f70f4 100644 --- a/tests/components/sensor/test_melissa.py +++ b/tests/components/sensor/test_melissa.py @@ -7,7 +7,7 @@ from homeassistant.components.melissa import DATA_MELISSA from homeassistant.components.sensor import melissa from homeassistant.components.sensor.melissa import MelissaTemperatureSensor, \ MelissaHumiditySensor -from homeassistant.const import TEMP_CELSIUS, STATE_UNKNOWN +from homeassistant.const import TEMP_CELSIUS from tests.common import get_test_home_assistant, load_fixture @@ -83,7 +83,7 @@ class TestMelissa(unittest.TestCase): """Test for faulty update.""" self.temp._api.status.return_value = {} self.temp.update() - self.assertEqual(STATE_UNKNOWN, self.temp.state) + self.assertEqual(None, self.temp.state) self.hum._api.status.return_value = {} self.hum.update() - self.assertEqual(STATE_UNKNOWN, self.hum.state) + self.assertEqual(None, self.hum.state)