Esempio n. 1
0
 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')
Esempio n. 2
0
    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()
Esempio n. 3
0
    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')
Esempio n. 4
0
    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')
Esempio n. 5
0
    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)
Esempio n. 6
0
 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')
Esempio n. 7
0
 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')
Esempio n. 8
0
 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))
Esempio n. 9
0
 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))
Esempio n. 10
0
 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))
Esempio n. 11
0
 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'))
Esempio n. 12
0
 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')
Esempio n. 13
0
 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')
Esempio n. 14
0
 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')
Esempio n. 15
0
 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))
Esempio n. 16
0
 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'))
Esempio n. 17
0
 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'))
Esempio n. 18
0
 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))
Esempio n. 19
0
 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'])
Esempio n. 20
0
 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'])
Esempio n. 21
0
 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'])
Esempio n. 22
0
 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'])
Esempio n. 23
0
 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')
Esempio n. 24
0
 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')
Esempio n. 25
0
 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')
Esempio n. 26
0
    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'))
Esempio n. 27
0
 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')
Esempio n. 28
0
 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'])
Esempio n. 29
0
    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)
Esempio n. 30
0
    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'])
Esempio n. 31
0
    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')
Esempio n. 32
0
 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'])
Esempio n. 33
0
    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)