Exemplo n.º 1
0
async def test_temperature_setting_sensor(hass):
    """Test TemperatureSetting trait support for temperature sensor."""
    assert (helpers.get_google_type(sensor.DOMAIN,
                                    sensor.DEVICE_CLASS_TEMPERATURE)
            is not None)
    assert not trait.TemperatureSettingTrait.supported(
        sensor.DOMAIN, 0, sensor.DEVICE_CLASS_HUMIDITY)
    assert trait.TemperatureSettingTrait.supported(
        sensor.DOMAIN, 0, sensor.DEVICE_CLASS_TEMPERATURE)

    hass.config.units.temperature_unit = TEMP_FAHRENHEIT

    trt = trait.TemperatureSettingTrait(
        hass,
        State("sensor.test", "70",
              {ATTR_DEVICE_CLASS: sensor.DEVICE_CLASS_TEMPERATURE}),
        BASIC_CONFIG,
    )

    assert trt.sync_attributes() == {
        "queryOnlyTemperatureSetting": True,
        "thermostatTemperatureUnit": "F",
    }

    assert trt.query_attributes() == {"thermostatTemperatureAmbient": 21.1}
    hass.config.units.temperature_unit = TEMP_CELSIUS
Exemplo n.º 2
0
async def test_temperature_setting_climate_setpoint(hass):
    """Test TemperatureSetting trait support for climate domain - setpoint."""
    assert helpers.get_google_type(climate.DOMAIN, None) is not None
    assert not trait.TemperatureSettingTrait.supported(climate.DOMAIN, 0, None)
    assert trait.TemperatureSettingTrait.supported(
        climate.DOMAIN, climate.SUPPORT_OPERATION_MODE, None)

    hass.config.units.temperature_unit = TEMP_CELSIUS

    trt = trait.TemperatureSettingTrait(
        hass,
        State(
            'climate.bla', climate.STATE_AUTO, {
                ATTR_SUPPORTED_FEATURES:
                (climate.SUPPORT_OPERATION_MODE | climate.SUPPORT_ON_OFF),
                climate.ATTR_OPERATION_MODE:
                climate.STATE_COOL,
                climate.ATTR_OPERATION_LIST: [
                    STATE_OFF,
                    climate.STATE_COOL,
                ],
                climate.ATTR_MIN_TEMP:
                10,
                climate.ATTR_MAX_TEMP:
                30,
                ATTR_TEMPERATURE:
                18,
                climate.ATTR_CURRENT_TEMPERATURE:
                20
            }), BASIC_CONFIG)
    assert trt.sync_attributes() == {
        'availableThermostatModes': 'off,on,cool',
        'thermostatTemperatureUnit': 'C',
    }
    assert trt.query_attributes() == {
        'thermostatMode': 'cool',
        'thermostatTemperatureAmbient': 20,
        'thermostatTemperatureSetpoint': 18,
    }
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT, {})
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_SET_MODE, {})

    calls = async_mock_service(hass, climate.DOMAIN,
                               climate.SERVICE_SET_TEMPERATURE)

    with pytest.raises(helpers.SmartHomeError):
        await trt.execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT,
                          BASIC_DATA, {'thermostatTemperatureSetpoint': -100},
                          {})

    await trt.execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT,
                      BASIC_DATA, {'thermostatTemperatureSetpoint': 19}, {})
    assert len(calls) == 1
    assert calls[0].data == {
        ATTR_ENTITY_ID: 'climate.bla',
        ATTR_TEMPERATURE: 19
    }
Exemplo n.º 3
0
async def test_temperature_setting_climate_setpoint_auto(hass):
    """
    Test TemperatureSetting trait support for climate domain.

    Setpoint in auto mode.
    """
    hass.config.units.temperature_unit = TEMP_CELSIUS

    trt = trait.TemperatureSettingTrait(
        hass,
        State(
            "climate.bla",
            climate.HVAC_MODE_HEAT_COOL,
            {
                climate.ATTR_HVAC_MODES: [
                    climate.HVAC_MODE_OFF,
                    climate.HVAC_MODE_HEAT_COOL,
                ],
                climate.ATTR_MIN_TEMP:
                10,
                climate.ATTR_MAX_TEMP:
                30,
                ATTR_TEMPERATURE:
                18,
                climate.ATTR_CURRENT_TEMPERATURE:
                20,
            },
        ),
        BASIC_CONFIG,
    )
    assert trt.sync_attributes() == {
        "availableThermostatModes": "off,heatcool,on",
        "thermostatTemperatureUnit": "C",
    }
    assert trt.query_attributes() == {
        "thermostatMode": "heatcool",
        "thermostatTemperatureAmbient": 20,
        "thermostatTemperatureSetpointHigh": 18,
        "thermostatTemperatureSetpointLow": 18,
    }
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT, {})
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_SET_MODE, {})

    calls = async_mock_service(hass, climate.DOMAIN,
                               climate.SERVICE_SET_TEMPERATURE)

    await trt.execute(
        trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT,
        BASIC_DATA,
        {"thermostatTemperatureSetpoint": 19},
        {},
    )
    assert len(calls) == 1
    assert calls[0].data == {
        ATTR_ENTITY_ID: "climate.bla",
        ATTR_TEMPERATURE: 19
    }
Exemplo n.º 4
0
async def test_temperature_setting_climate_setpoint(hass):
    """Test TemperatureSetting trait support for climate domain - setpoint."""
    assert not trait.TemperatureSettingTrait.supported(climate.DOMAIN, 0)
    assert trait.TemperatureSettingTrait.supported(
        climate.DOMAIN, climate.SUPPORT_OPERATION_MODE)

    trt = trait.TemperatureSettingTrait(
        State(
            'climate.bla', climate.STATE_AUTO, {
                climate.ATTR_OPERATION_MODE:
                climate.STATE_COOL,
                climate.ATTR_OPERATION_LIST: [
                    climate.STATE_OFF,
                    climate.STATE_COOL,
                ],
                climate.ATTR_MIN_TEMP:
                10,
                climate.ATTR_MAX_TEMP:
                30,
                climate.ATTR_TEMPERATURE:
                18,
                climate.ATTR_CURRENT_TEMPERATURE:
                20,
                ATTR_UNIT_OF_MEASUREMENT:
                TEMP_CELSIUS,
            }))
    assert trt.sync_attributes() == {
        'availableThermostatModes': 'off,cool',
        'thermostatTemperatureUnit': 'C',
    }
    assert trt.query_attributes() == {
        'thermostatMode': 'cool',
        'thermostatTemperatureAmbient': 20,
        'thermostatTemperatureSetpoint': 18,
    }
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT, {})
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SET_RANGE, {})
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_SET_MODE, {})

    calls = async_mock_service(hass, climate.DOMAIN,
                               climate.SERVICE_SET_TEMPERATURE)

    with pytest.raises(helpers.SmartHomeError):
        await trt.execute(hass, trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT,
                          {
                              'thermostatTemperatureSetpoint': -100,
                          })

    await trt.execute(hass, trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT, {
        'thermostatTemperatureSetpoint': 19,
    })
    assert len(calls) == 1
    assert calls[0].data == {
        ATTR_ENTITY_ID: 'climate.bla',
        climate.ATTR_TEMPERATURE: 19
    }
Exemplo n.º 5
0
async def test_temperature_setting_climate_setpoint(hass):
    """Test TemperatureSetting trait support for climate domain - setpoint."""
    assert helpers.get_google_type(climate.DOMAIN, None) is not None
    assert trait.TemperatureSettingTrait.supported(climate.DOMAIN, 0, None)

    hass.config.units.temperature_unit = TEMP_CELSIUS

    trt = trait.TemperatureSettingTrait(
        hass,
        State(
            "climate.bla",
            climate.HVAC_MODE_COOL,
            {
                climate.ATTR_HVAC_MODES: [STATE_OFF, climate.HVAC_MODE_COOL],
                climate.ATTR_MIN_TEMP: 10,
                climate.ATTR_MAX_TEMP: 30,
                ATTR_TEMPERATURE: 18,
                climate.ATTR_CURRENT_TEMPERATURE: 20,
            },
        ),
        BASIC_CONFIG,
    )
    assert trt.sync_attributes() == {
        "availableThermostatModes": "off,cool,on",
        "thermostatTemperatureUnit": "C",
    }
    assert trt.query_attributes() == {
        "thermostatMode": "cool",
        "thermostatTemperatureAmbient": 20,
        "thermostatTemperatureSetpoint": 18,
    }
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT, {})
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_SET_MODE, {})

    calls = async_mock_service(hass, climate.DOMAIN,
                               climate.SERVICE_SET_TEMPERATURE)

    with pytest.raises(helpers.SmartHomeError):
        await trt.execute(
            trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT,
            BASIC_DATA,
            {"thermostatTemperatureSetpoint": -100},
            {},
        )

    await trt.execute(
        trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT,
        BASIC_DATA,
        {"thermostatTemperatureSetpoint": 19},
        {},
    )
    assert len(calls) == 1
    assert calls[0].data == {
        ATTR_ENTITY_ID: "climate.bla",
        ATTR_TEMPERATURE: 19
    }
Exemplo n.º 6
0
async def test_temperature_setting_climate_setpoint_auto(hass):
    """
    Test TemperatureSetting trait support for climate domain.

    Setpoint in auto mode.
    """
    hass.config.units.temperature_unit = TEMP_CELSIUS

    trt = trait.TemperatureSettingTrait(
        hass,
        State(
            'climate.bla', climate.STATE_AUTO, {
                ATTR_SUPPORTED_FEATURES:
                (climate.SUPPORT_OPERATION_MODE | climate.SUPPORT_ON_OFF),
                climate.ATTR_OPERATION_MODE:
                climate.STATE_AUTO,
                climate.ATTR_OPERATION_LIST: [
                    STATE_OFF,
                    climate.STATE_AUTO,
                ],
                climate.ATTR_MIN_TEMP:
                10,
                climate.ATTR_MAX_TEMP:
                30,
                ATTR_TEMPERATURE:
                18,
                climate.ATTR_CURRENT_TEMPERATURE:
                20
            }), BASIC_CONFIG)
    assert trt.sync_attributes() == {
        'availableThermostatModes': 'off,on,heatcool',
        'thermostatTemperatureUnit': 'C',
    }
    assert trt.query_attributes() == {
        'thermostatMode': 'heatcool',
        'thermostatTemperatureAmbient': 20,
        'thermostatTemperatureSetpointHigh': 18,
        'thermostatTemperatureSetpointLow': 18,
    }
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT, {})
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_SET_MODE, {})

    calls = async_mock_service(hass, climate.DOMAIN,
                               climate.SERVICE_SET_TEMPERATURE)

    await trt.execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT,
                      BASIC_DATA, {'thermostatTemperatureSetpoint': 19}, {})
    assert len(calls) == 1
    assert calls[0].data == {
        ATTR_ENTITY_ID: 'climate.bla',
        ATTR_TEMPERATURE: 19
    }
Exemplo n.º 7
0
async def test_temperature_setting_climate_onoff(hass):
    """Test TemperatureSetting trait support for climate domain - range."""
    assert helpers.get_google_type(climate.DOMAIN, None) is not None
    assert not trait.TemperatureSettingTrait.supported(climate.DOMAIN, 0, None)
    assert trait.TemperatureSettingTrait.supported(
        climate.DOMAIN, climate.SUPPORT_OPERATION_MODE, None)

    hass.config.units.temperature_unit = TEMP_FAHRENHEIT

    trt = trait.TemperatureSettingTrait(
        hass,
        State(
            'climate.bla', climate.STATE_AUTO, {
                ATTR_SUPPORTED_FEATURES:
                (climate.SUPPORT_OPERATION_MODE | climate.SUPPORT_ON_OFF
                 | climate.SUPPORT_TARGET_TEMPERATURE_HIGH
                 | climate.SUPPORT_TARGET_TEMPERATURE_LOW),
                climate.ATTR_OPERATION_MODE:
                climate.STATE_COOL,
                climate.ATTR_OPERATION_LIST: [
                    climate.STATE_COOL,
                    climate.STATE_HEAT,
                    climate.STATE_AUTO,
                ],
                climate.ATTR_MIN_TEMP:
                None,
                climate.ATTR_MAX_TEMP:
                None,
            }), BASIC_CONFIG)
    assert trt.sync_attributes() == {
        'availableThermostatModes': 'off,on,cool,heat,heatcool',
        'thermostatTemperatureUnit': 'F',
    }
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_SET_MODE, {})

    calls = async_mock_service(hass, climate.DOMAIN, SERVICE_TURN_ON)
    await trt.execute(trait.COMMAND_THERMOSTAT_SET_MODE, BASIC_DATA, {
        'thermostatMode': 'on',
    }, {})
    assert len(calls) == 1

    calls = async_mock_service(hass, climate.DOMAIN, SERVICE_TURN_OFF)
    await trt.execute(trait.COMMAND_THERMOSTAT_SET_MODE, BASIC_DATA, {
        'thermostatMode': 'off',
    }, {})
    assert len(calls) == 1
Exemplo n.º 8
0
async def test_temperature_setting_climate_onoff(hass):
    """Test TemperatureSetting trait support for climate domain - range."""
    assert helpers.get_google_type(climate.DOMAIN, None) is not None
    assert trait.TemperatureSettingTrait.supported(climate.DOMAIN, 0, None)

    hass.config.units.temperature_unit = TEMP_FAHRENHEIT

    trt = trait.TemperatureSettingTrait(
        hass,
        State(
            "climate.bla",
            climate.HVAC_MODE_AUTO,
            {
                ATTR_SUPPORTED_FEATURES:
                climate.SUPPORT_TARGET_TEMPERATURE_RANGE,
                climate.ATTR_HVAC_MODES: [
                    climate.HVAC_MODE_OFF,
                    climate.HVAC_MODE_COOL,
                    climate.HVAC_MODE_HEAT,
                    climate.HVAC_MODE_HEAT_COOL,
                ],
                climate.ATTR_MIN_TEMP:
                None,
                climate.ATTR_MAX_TEMP:
                None,
            },
        ),
        BASIC_CONFIG,
    )
    assert trt.sync_attributes() == {
        "availableThermostatModes": "off,cool,heat,heatcool,on",
        "thermostatTemperatureUnit": "F",
    }
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_SET_MODE, {})

    calls = async_mock_service(hass, climate.DOMAIN, SERVICE_TURN_ON)
    await trt.execute(trait.COMMAND_THERMOSTAT_SET_MODE, BASIC_DATA,
                      {"thermostatMode": "on"}, {})
    assert len(calls) == 1

    calls = async_mock_service(hass, climate.DOMAIN, SERVICE_TURN_OFF)
    await trt.execute(trait.COMMAND_THERMOSTAT_SET_MODE, BASIC_DATA,
                      {"thermostatMode": "off"}, {})
    assert len(calls) == 1
Exemplo n.º 9
0
async def test_temperature_setting_climate_range(hass):
    """Test TemperatureSetting trait support for climate domain - range."""
    assert helpers.get_google_type(climate.DOMAIN, None) is not None
    assert not trait.TemperatureSettingTrait.supported(climate.DOMAIN, 0, None)
    assert trait.TemperatureSettingTrait.supported(
        climate.DOMAIN, climate.SUPPORT_OPERATION_MODE, None)

    hass.config.units.temperature_unit = TEMP_FAHRENHEIT

    trt = trait.TemperatureSettingTrait(
        hass,
        State(
            'climate.bla', climate.STATE_AUTO, {
                climate.ATTR_CURRENT_TEMPERATURE:
                70,
                climate.ATTR_CURRENT_HUMIDITY:
                25,
                ATTR_SUPPORTED_FEATURES:
                climate.SUPPORT_OPERATION_MODE
                | climate.SUPPORT_TARGET_TEMPERATURE_HIGH
                | climate.SUPPORT_TARGET_TEMPERATURE_LOW,
                climate.ATTR_OPERATION_MODE:
                climate.STATE_AUTO,
                climate.ATTR_OPERATION_LIST: [
                    STATE_OFF,
                    climate.STATE_COOL,
                    climate.STATE_HEAT,
                    climate.STATE_AUTO,
                ],
                climate.ATTR_TARGET_TEMP_HIGH:
                75,
                climate.ATTR_TARGET_TEMP_LOW:
                65,
                climate.ATTR_MIN_TEMP:
                50,
                climate.ATTR_MAX_TEMP:
                80
            }), BASIC_CONFIG)
    assert trt.sync_attributes() == {
        'availableThermostatModes': 'off,cool,heat,heatcool',
        'thermostatTemperatureUnit': 'F',
    }
    assert trt.query_attributes() == {
        'thermostatMode': 'heatcool',
        'thermostatTemperatureAmbient': 21.1,
        'thermostatHumidityAmbient': 25,
        'thermostatTemperatureSetpointLow': 18.3,
        'thermostatTemperatureSetpointHigh': 23.9,
    }
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SET_RANGE, {})
    assert trt.can_execute(trait.COMMAND_THERMOSTAT_SET_MODE, {})

    calls = async_mock_service(hass, climate.DOMAIN,
                               climate.SERVICE_SET_TEMPERATURE)
    await trt.execute(
        trait.COMMAND_THERMOSTAT_TEMPERATURE_SET_RANGE, BASIC_DATA, {
            'thermostatTemperatureSetpointHigh': 25,
            'thermostatTemperatureSetpointLow': 20,
        }, {})
    assert len(calls) == 1
    assert calls[0].data == {
        ATTR_ENTITY_ID: 'climate.bla',
        climate.ATTR_TARGET_TEMP_HIGH: 77,
        climate.ATTR_TARGET_TEMP_LOW: 68,
    }

    calls = async_mock_service(hass, climate.DOMAIN,
                               climate.SERVICE_SET_OPERATION_MODE)
    await trt.execute(trait.COMMAND_THERMOSTAT_SET_MODE, BASIC_DATA, {
        'thermostatMode': 'heatcool',
    }, {})
    assert len(calls) == 1
    assert calls[0].data == {
        ATTR_ENTITY_ID: 'climate.bla',
        climate.ATTR_OPERATION_MODE: climate.STATE_AUTO,
    }

    with pytest.raises(helpers.SmartHomeError) as err:
        await trt.execute(trait.COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT,
                          BASIC_DATA, {'thermostatTemperatureSetpoint': -100},
                          {})
    assert err.value.code == const.ERR_VALUE_OUT_OF_RANGE
    hass.config.units.temperature_unit = TEMP_CELSIUS