Fixes according to review from @MartinHjelmare Thank you. (#12171)

This commit is contained in:
kennedyshead 2018-02-06 21:27:35 +01:00 committed by Martin Hjelmare
parent cee57aab24
commit bd29cd2ba2
4 changed files with 68 additions and 80 deletions

View File

@ -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."""

View File

@ -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

View File

@ -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):

View File

@ -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)