WIP: Don't set initial values for MQTT HVAC in non-optimistic mode (#17268)

* Don't set initial temperature in non-optimistic mode

* Fix tests

* Don't set initial values in non-optimistic mode

For fan mode, current operation and swing mode

* Fix tests again
This commit is contained in:
definitio 2018-10-10 15:06:53 +03:00 committed by Paulus Schoutsen
parent 83dd961fde
commit 7f896bfb40
2 changed files with 25 additions and 18 deletions

View File

@ -240,14 +240,21 @@ class MqttClimate(MqttAvailability, MqttDiscoveryUpdate, ClimateDevice):
self._value_templates = value_templates
self._qos = qos
self._retain = retain
# set to None in non-optimistic mode
self._target_temperature = self._current_fan_mode = \
self._current_operation = self._current_swing_mode = None
if self._topic[CONF_TEMPERATURE_STATE_TOPIC] is None:
self._target_temperature = target_temperature
self._unit_of_measurement = hass.config.units.temperature_unit
self._away = away
self._hold = hold
self._current_temperature = None
if self._topic[CONF_FAN_MODE_STATE_TOPIC] is None:
self._current_fan_mode = current_fan_mode
if self._topic[CONF_MODE_STATE_TOPIC] is None:
self._current_operation = current_operation
self._aux = aux
if self._topic[CONF_SWING_MODE_STATE_TOPIC] is None:
self._current_swing_mode = current_swing_mode
self._fan_list = fan_mode_list
self._operation_list = mode_list

View File

@ -119,14 +119,14 @@ class TestMQTTClimate(unittest.TestCase):
assert setup_component(self.hass, climate.DOMAIN, config)
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual("off", state.attributes.get('operation_mode'))
self.assertEqual("off", state.state)
self.assertEqual(None, state.attributes.get('operation_mode'))
self.assertEqual("unknown", state.state)
common.set_operation_mode(self.hass, "cool", ENTITY_CLIMATE)
self.hass.block_till_done()
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual("off", state.attributes.get('operation_mode'))
self.assertEqual("off", state.state)
self.assertEqual(None, state.attributes.get('operation_mode'))
self.assertEqual("unknown", state.state)
fire_mqtt_message(self.hass, 'mode-state', 'cool')
self.hass.block_till_done()
@ -189,12 +189,12 @@ class TestMQTTClimate(unittest.TestCase):
assert setup_component(self.hass, climate.DOMAIN, config)
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual("low", state.attributes.get('fan_mode'))
self.assertEqual(None, state.attributes.get('fan_mode'))
common.set_fan_mode(self.hass, 'high', ENTITY_CLIMATE)
self.hass.block_till_done()
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual("low", state.attributes.get('fan_mode'))
self.assertEqual(None, state.attributes.get('fan_mode'))
fire_mqtt_message(self.hass, 'fan-state', 'high')
self.hass.block_till_done()
@ -237,12 +237,12 @@ class TestMQTTClimate(unittest.TestCase):
assert setup_component(self.hass, climate.DOMAIN, config)
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual("off", state.attributes.get('swing_mode'))
self.assertEqual(None, state.attributes.get('swing_mode'))
common.set_swing_mode(self.hass, 'on', ENTITY_CLIMATE)
self.hass.block_till_done()
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual("off", state.attributes.get('swing_mode'))
self.assertEqual(None, state.attributes.get('swing_mode'))
fire_mqtt_message(self.hass, 'swing-state', 'on')
self.hass.block_till_done()
@ -310,14 +310,14 @@ class TestMQTTClimate(unittest.TestCase):
assert setup_component(self.hass, climate.DOMAIN, config)
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual(21, state.attributes.get('temperature'))
self.assertEqual(None, state.attributes.get('temperature'))
common.set_operation_mode(self.hass, 'heat', ENTITY_CLIMATE)
self.hass.block_till_done()
common.set_temperature(self.hass, temperature=47,
entity_id=ENTITY_CLIMATE)
self.hass.block_till_done()
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual(21, state.attributes.get('temperature'))
self.assertEqual(None, state.attributes.get('temperature'))
fire_mqtt_message(self.hass, 'temperature-state', '1701')
self.hass.block_till_done()
@ -539,28 +539,28 @@ class TestMQTTClimate(unittest.TestCase):
# Operation Mode
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual("off", state.attributes.get('operation_mode'))
self.assertEqual(None, state.attributes.get('operation_mode'))
fire_mqtt_message(self.hass, 'mode-state', '"cool"')
self.hass.block_till_done()
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual("cool", state.attributes.get('operation_mode'))
# Fan Mode
self.assertEqual("low", state.attributes.get('fan_mode'))
self.assertEqual(None, state.attributes.get('fan_mode'))
fire_mqtt_message(self.hass, 'fan-state', '"high"')
self.hass.block_till_done()
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual('high', state.attributes.get('fan_mode'))
# Swing Mode
self.assertEqual("off", state.attributes.get('swing_mode'))
self.assertEqual(None, state.attributes.get('swing_mode'))
fire_mqtt_message(self.hass, 'swing-state', '"on"')
self.hass.block_till_done()
state = self.hass.states.get(ENTITY_CLIMATE)
self.assertEqual("on", state.attributes.get('swing_mode'))
# Temperature - with valid value
self.assertEqual(21, state.attributes.get('temperature'))
self.assertEqual(None, state.attributes.get('temperature'))
fire_mqtt_message(self.hass, 'temperature-state', '"1031"')
self.hass.block_till_done()
state = self.hass.states.get(ENTITY_CLIMATE)