def test_set_only_target_temp_bad_attr(self): """Test setting the target temperature without required attribute.""" state = self.hass.states.get(ENTITY_CLIMATE) assert 21 == state.attributes.get('temperature') common.set_temperature(self.hass, None, ENTITY_CLIMATE) self.hass.block_till_done() assert 21 == state.attributes.get('temperature')
def test_set_target_temperature(self): """Test setting the target temperature.""" assert setup_component(self.hass, climate.DOMAIN, DEFAULT_CONFIG) state = self.hass.states.get(ENTITY_CLIMATE) assert 21 == state.attributes.get('temperature') common.set_operation_mode(self.hass, 'heat', ENTITY_CLIMATE) self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 'heat' == state.attributes.get('operation_mode') self.mock_publish.async_publish.assert_called_once_with( 'mode-topic', 'heat', 0, False) self.mock_publish.async_publish.reset_mock() common.set_temperature(self.hass, temperature=47, entity_id=ENTITY_CLIMATE) self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 47 == state.attributes.get('temperature') self.mock_publish.async_publish.assert_called_once_with( 'temperature-topic', 47, 0, False) # also test directly supplying the operation mode to set_temperature self.mock_publish.async_publish.reset_mock() common.set_temperature(self.hass, temperature=21, operation_mode="cool", entity_id=ENTITY_CLIMATE) self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 'cool' == state.attributes.get('operation_mode') assert 21 == state.attributes.get('temperature') self.mock_publish.async_publish.assert_has_calls([ unittest.mock.call('mode-topic', 'cool', 0, False), unittest.mock.call('temperature-topic', 21, 0, False) ]) self.mock_publish.async_publish.reset_mock()
def test_set_target_temperature_pessimistic(self): """Test setting the target temperature.""" config = copy.deepcopy(DEFAULT_CONFIG) config['climate']['temperature_state_topic'] = 'temperature-state' assert setup_component(self.hass, climate.DOMAIN, config) state = self.hass.states.get(ENTITY_CLIMATE) assert state.attributes.get('temperature') is None 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) assert state.attributes.get('temperature') is None fire_mqtt_message(self.hass, 'temperature-state', '1701') self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 1701 == state.attributes.get('temperature') fire_mqtt_message(self.hass, 'temperature-state', 'not a number') self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 1701 == state.attributes.get('temperature')
def test_set_target_temperature_pessimistic(self): """Test setting the target temperature.""" config = copy.deepcopy(DEFAULT_CONFIG) config['climate']['temperature_state_topic'] = 'temperature-state' assert setup_component(self.hass, CLIMATE_DOMAIN, config) state = self.hass.states.get(ENTITY_CLIMATE) assert state.attributes.get('temperature') is None 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) assert state.attributes.get('temperature') is None fire_mqtt_message(self.hass, 'temperature-state', '1701') self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 1701 == state.attributes.get('temperature') fire_mqtt_message(self.hass, 'temperature-state', 'not a number') self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 1701 == state.attributes.get('temperature')
def test_heater_switch(self): """Test heater switching test switch.""" platform = loader.get_component(self.hass, 'switch.test') platform.init() self.switch_1 = platform.DEVICES[1] assert setup_component(self.hass, switch.DOMAIN, {'switch': { 'platform': 'test'}}) heater_switch = self.switch_1.entity_id assert setup_component(self.hass, climate.DOMAIN, {'climate': { 'platform': 'generic_thermostat', 'name': 'test', 'heater': heater_switch, 'target_sensor': ENT_SENSOR }}) self.assertEqual(STATE_OFF, self.hass.states.get(heater_switch).state) self._setup_sensor(18) self.hass.block_till_done() common.set_temperature(self.hass, 23) self.hass.block_till_done() self.assertEqual(STATE_ON, self.hass.states.get(heater_switch).state)
def test_set_only_target_temp_bad_attr(self): """Test setting the target temperature without required attribute.""" state = self.hass.states.get(ENTITY_CLIMATE) assert 21 == state.attributes.get('temperature') common.set_temperature(self.hass, None, ENTITY_CLIMATE) self.hass.block_till_done() assert 21 == state.attributes.get('temperature')
def test_set_only_target_temp_with_convert(self): """Test the setting of the target temperature.""" state = self.hass.states.get(ENTITY_HEATPUMP) assert 20 == state.attributes.get('temperature') common.set_temperature(self.hass, 21, ENTITY_HEATPUMP) self.hass.block_till_done() state = self.hass.states.get(ENTITY_HEATPUMP) assert 21.0 == state.attributes.get('temperature')
def test_temp_change_ac_on_within_tolerance(self): """Test if temperature change doesn't turn ac on within tolerance.""" self._setup_switch(False) common.set_temperature(self.hass, 25) self.hass.block_till_done() self._setup_sensor(25.2) self.hass.block_till_done() self.assertEqual(0, len(self.calls))
def test_temp_change_ac_off_within_tolerance(self): """Test if temperature change doesn't turn ac off within tolerance.""" self._setup_switch(True) common.set_temperature(self.hass, 30) self.hass.block_till_done() self._setup_sensor(29.8) self.hass.block_till_done() self.assertEqual(0, len(self.calls))
def test_temp_change_heater_trigger_on_not_long_enough(self): """Test if temp change doesn't turn heater on because of time.""" self._setup_switch(False) common.set_temperature(self.hass, 30) self.hass.block_till_done() self._setup_sensor(25) self.hass.block_till_done() self.assertEqual(0, len(self.calls))
def test_set_away_mode(self): """Test the setting away mode.""" common.set_temperature(self.hass, 23) self.hass.block_till_done() common.set_away_mode(self.hass, True) self.hass.block_till_done() state = self.hass.states.get(ENTITY) self.assertEqual(16, state.attributes.get('temperature'))
def test_set_only_target_temp(self): """Test the setting of the target temperature.""" state = self.hass.states.get(ENTITY_CLIMATE) assert 21 == state.attributes.get('temperature') common.set_temperature(self.hass, 30, ENTITY_CLIMATE) self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 30.0 == state.attributes.get('temperature')
def test_set_only_target_temp_with_convert(self): """Test the setting of the target temperature.""" state = self.hass.states.get(ENTITY_HEATPUMP) assert 20 == state.attributes.get('temperature') common.set_temperature(self.hass, 21, ENTITY_HEATPUMP) self.hass.block_till_done() state = self.hass.states.get(ENTITY_HEATPUMP) assert 21.0 == state.attributes.get('temperature')
def test_set_only_target_temp(self): """Test the setting of the target temperature.""" state = self.hass.states.get(ENTITY_CLIMATE) assert 21 == state.attributes.get('temperature') common.set_temperature(self.hass, 30, ENTITY_CLIMATE) self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 30.0 == state.attributes.get('temperature')
def test_temp_change_ac_trigger_off_not_long_enough(self): """Test if temperature change turn ac on.""" self._setup_switch(True) common.set_temperature(self.hass, 30) self.hass.block_till_done() self._setup_sensor(25) self.hass.block_till_done() self.assertEqual(0, len(self.calls))
def test_turn_away_mode_on_cooling(self): """Test the setting away mode when cooling.""" self._setup_sensor(25) self.hass.block_till_done() common.set_temperature(self.hass, 19) self.hass.block_till_done() common.set_away_mode(self.hass, True) self.hass.block_till_done() state = self.hass.states.get(ENTITY) self.assertEqual(30, state.attributes.get('temperature'))
def test_set_target_temp(self): """Test the setting of the target temperature.""" common.set_temperature(self.hass, 30) self.hass.block_till_done() state = self.hass.states.get(ENTITY) self.assertEqual(30.0, state.attributes.get('temperature')) common.set_temperature(self.hass, None) self.hass.block_till_done() state = self.hass.states.get(ENTITY) self.assertEqual(30.0, state.attributes.get('temperature'))
def test_no_state_change_when_operation_mode_off(self): """Test that the switch doesn't turn on when enabled is False.""" self._setup_switch(False) common.set_temperature(self.hass, 30) self.hass.block_till_done() common.set_operation_mode(self.hass, STATE_OFF) self.hass.block_till_done() self._setup_sensor(35) self.hass.block_till_done() self.assertEqual(0, len(self.calls))
def test_temp_change_heater_off_outside_tolerance(self): """Test if temperature change turn heater off outside hot tolerance.""" self._setup_switch(True) common.set_temperature(self.hass, 30) self.hass.block_till_done() self._setup_sensor(35) self.hass.block_till_done() self.assertEqual(1, len(self.calls)) call = self.calls[0] self.assertEqual('homeassistant', call.domain) self.assertEqual(SERVICE_TURN_OFF, call.service) self.assertEqual(ENT_SWITCH, call.data['entity_id'])
def test_set_target_temp_ac_off(self): """Test if target temperature turn ac off.""" self._setup_switch(True) self._setup_sensor(25) self.hass.block_till_done() common.set_temperature(self.hass, 30) self.hass.block_till_done() self.assertEqual(2, len(self.calls)) call = self.calls[0] self.assertEqual('homeassistant', call.domain) self.assertEqual(SERVICE_TURN_OFF, call.service) self.assertEqual(ENT_SWITCH, call.data['entity_id'])
def test_running_when_operating_mode_is_off(self): """Test that the switch turns off when enabled is set False.""" self._setup_switch(True) common.set_temperature(self.hass, 30) self.hass.block_till_done() common.set_operation_mode(self.hass, STATE_OFF) self.hass.block_till_done() self.assertEqual(1, len(self.calls)) call = self.calls[0] self.assertEqual('homeassistant', call.domain) self.assertEqual(SERVICE_TURN_OFF, call.service) self.assertEqual(ENT_SWITCH, call.data['entity_id'])
def test_temp_change_ac_on_outside_tolerance(self): """Test if temperature change turn ac on.""" self._setup_switch(False) common.set_temperature(self.hass, 25) self.hass.block_till_done() self._setup_sensor(30) self.hass.block_till_done() self.assertEqual(1, len(self.calls)) call = self.calls[0] self.assertEqual('homeassistant', call.domain) self.assertEqual(SERVICE_TURN_ON, call.service) self.assertEqual(ENT_SWITCH, call.data['entity_id'])
def test_set_target_temp_range(self): """Test the setting of the target temperature with range.""" state = self.hass.states.get(ENTITY_ECOBEE) assert state.attributes.get('temperature') is None assert 21.0 == state.attributes.get('target_temp_low') assert 24.0 == state.attributes.get('target_temp_high') common.set_temperature(self.hass, target_temp_high=25, target_temp_low=20, entity_id=ENTITY_ECOBEE) self.hass.block_till_done() state = self.hass.states.get(ENTITY_ECOBEE) assert state.attributes.get('temperature') is None assert 20.0 == state.attributes.get('target_temp_low') assert 25.0 == state.attributes.get('target_temp_high')
def test_set_target_temp_range_bad_attr(self): """Test setting the target temperature range without attribute.""" state = self.hass.states.get(ENTITY_ECOBEE) assert state.attributes.get('temperature') is None assert 21.0 == state.attributes.get('target_temp_low') assert 24.0 == state.attributes.get('target_temp_high') common.set_temperature(self.hass, temperature=None, entity_id=ENTITY_ECOBEE, target_temp_low=None, target_temp_high=None) self.hass.block_till_done() state = self.hass.states.get(ENTITY_ECOBEE) assert state.attributes.get('temperature') is None assert 21.0 == state.attributes.get('target_temp_low') assert 24.0 == state.attributes.get('target_temp_high')
def test_set_target_temp_range(self): """Test the setting of the target temperature with range.""" state = self.hass.states.get(ENTITY_ECOBEE) assert state.attributes.get('temperature') is None assert 21.0 == state.attributes.get('target_temp_low') assert 24.0 == state.attributes.get('target_temp_high') common.set_temperature(self.hass, target_temp_high=25, target_temp_low=20, entity_id=ENTITY_ECOBEE) self.hass.block_till_done() state = self.hass.states.get(ENTITY_ECOBEE) assert state.attributes.get('temperature') is None assert 20.0 == state.attributes.get('target_temp_low') assert 25.0 == state.attributes.get('target_temp_high')
def test_set_away_mode_and_restore_prev_temp(self): """Test the setting and removing away mode. Verify original temperature is restored. """ common.set_temperature(self.hass, 23) self.hass.block_till_done() common.set_away_mode(self.hass, True) self.hass.block_till_done() state = self.hass.states.get(ENTITY) self.assertEqual(16, state.attributes.get('temperature')) common.set_away_mode(self.hass, False) self.hass.block_till_done() state = self.hass.states.get(ENTITY) self.assertEqual(23, state.attributes.get('temperature'))
def test_set_target_temp_range_bad_attr(self): """Test setting the target temperature range without attribute.""" state = self.hass.states.get(ENTITY_ECOBEE) assert state.attributes.get('temperature') is None assert 21.0 == state.attributes.get('target_temp_low') assert 24.0 == state.attributes.get('target_temp_high') common.set_temperature(self.hass, temperature=None, entity_id=ENTITY_ECOBEE, target_temp_low=None, target_temp_high=None) self.hass.block_till_done() state = self.hass.states.get(ENTITY_ECOBEE) assert state.attributes.get('temperature') is None assert 21.0 == state.attributes.get('target_temp_low') assert 24.0 == state.attributes.get('target_temp_high')
def test_temp_change_heater_trigger_off_long_enough(self): """Test if temperature change turn heater off after min cycle.""" fake_changed = datetime.datetime(1918, 11, 11, 11, 11, 11, tzinfo=datetime.timezone.utc) with mock.patch('homeassistant.helpers.condition.dt_util.utcnow', return_value=fake_changed): self._setup_switch(True) common.set_temperature(self.hass, 25) self.hass.block_till_done() self._setup_sensor(30) self.hass.block_till_done() self.assertEqual(1, len(self.calls)) call = self.calls[0] self.assertEqual('homeassistant', call.domain) self.assertEqual(SERVICE_TURN_OFF, call.service) self.assertEqual(ENT_SWITCH, call.data['entity_id'])
def test_set_target_temperature_low_high(self): """Test setting the low/high target temperature.""" assert setup_component(self.hass, CLIMATE_DOMAIN, DEFAULT_CONFIG) common.set_temperature(self.hass, target_temp_low=20, target_temp_high=23, entity_id=ENTITY_CLIMATE) self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) print(state.attributes) assert 20 == state.attributes.get('target_temp_low') assert 23 == state.attributes.get('target_temp_high') self.mock_publish.async_publish.assert_any_call( 'temperature-low-topic', 20, 0, False) self.mock_publish.async_publish.assert_any_call( 'temperature-high-topic', 23, 0, False)
def test_operating_mode_cool(self): """Test change mode from OFF to COOL. Switch turns on when temp below setpoint and mode changes. """ common.set_operation_mode(self.hass, STATE_OFF) common.set_temperature(self.hass, 25) self._setup_sensor(30) self.hass.block_till_done() self._setup_switch(False) common.set_operation_mode(self.hass, climate.STATE_COOL) self.hass.block_till_done() self.assertEqual(1, len(self.calls)) call = self.calls[0] self.assertEqual('homeassistant', call.domain) self.assertEqual(SERVICE_TURN_ON, call.service) self.assertEqual(ENT_SWITCH, call.data['entity_id'])
def test_set_target_temperature_low_highpessimistic(self): """Test setting the low/high target temperature.""" config = copy.deepcopy(DEFAULT_CONFIG) config['climate']['temperature_low_state_topic'] = \ 'temperature-low-state' config['climate']['temperature_high_state_topic'] = \ 'temperature-high-state' assert setup_component(self.hass, CLIMATE_DOMAIN, config) state = self.hass.states.get(ENTITY_CLIMATE) assert state.attributes.get('target_temp_low') is None assert state.attributes.get('target_temp_high') is None self.hass.block_till_done() common.set_temperature(self.hass, target_temp_low=20, target_temp_high=23, entity_id=ENTITY_CLIMATE) self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert state.attributes.get('target_temp_low') is None assert state.attributes.get('target_temp_high') is None fire_mqtt_message(self.hass, 'temperature-low-state', '1701') self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 1701 == state.attributes.get('target_temp_low') assert state.attributes.get('target_temp_high') is None fire_mqtt_message(self.hass, 'temperature-high-state', '1703') self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 1701 == state.attributes.get('target_temp_low') assert 1703 == state.attributes.get('target_temp_high') fire_mqtt_message(self.hass, 'temperature-low-state', 'not a number') self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 1701 == state.attributes.get('target_temp_low') fire_mqtt_message(self.hass, 'temperature-high-state', 'not a number') self.hass.block_till_done() state = self.hass.states.get(ENTITY_CLIMATE) assert 1703 == state.attributes.get('target_temp_high')
def test_temp_change_heater_trigger_off_long_enough(self): """Test if turn on signal is sent at keep-alive intervals.""" self._setup_switch(False) self.hass.block_till_done() self._setup_sensor(30) self.hass.block_till_done() common.set_temperature(self.hass, 25) self.hass.block_till_done() test_time = datetime.datetime.now(pytz.UTC) self._send_time_changed(test_time) self.hass.block_till_done() self.assertEqual(0, len(self.calls)) self._send_time_changed(test_time + datetime.timedelta(minutes=5)) self.hass.block_till_done() self.assertEqual(0, len(self.calls)) self._send_time_changed(test_time + datetime.timedelta(minutes=10)) self.hass.block_till_done() self.assertEqual(1, len(self.calls)) call = self.calls[0] self.assertEqual('homeassistant', call.domain) self.assertEqual(SERVICE_TURN_OFF, call.service) self.assertEqual(ENT_SWITCH, call.data['entity_id'])
def test_heater_input_boolean(self): """Test heater switching input_boolean.""" heater_switch = 'input_boolean.test' assert setup_component(self.hass, input_boolean.DOMAIN, {'input_boolean': {'test': None}}) assert setup_component(self.hass, climate.DOMAIN, {'climate': { 'platform': 'generic_thermostat', 'name': 'test', 'heater': heater_switch, 'target_sensor': ENT_SENSOR }}) self.assertEqual(STATE_OFF, self.hass.states.get(heater_switch).state) self._setup_sensor(18) self.hass.block_till_done() common.set_temperature(self.hass, 23) self.hass.block_till_done() self.assertEqual(STATE_ON, self.hass.states.get(heater_switch).state)