Add availability to Scrape config flow (#105516)

This commit is contained in:
G Johansson 2024-03-21 13:13:25 +01:00 committed by GitHub
parent e5fa6f0176
commit 9289fa23a1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 69 additions and 1 deletions

View File

@ -60,6 +60,7 @@ from homeassistant.helpers.selector import (
TextSelectorConfig,
TextSelectorType,
)
from homeassistant.helpers.trigger_template_entity import CONF_AVAILABILITY
from . import COMBINED_SCHEMA
from .const import (
@ -105,6 +106,7 @@ SENSOR_SETUP = {
),
vol.Optional(CONF_ATTRIBUTE): TextSelector(),
vol.Optional(CONF_VALUE_TEMPLATE): TemplateSelector(),
vol.Optional(CONF_AVAILABILITY): TemplateSelector(),
vol.Optional(CONF_DEVICE_CLASS): SelectSelector(
SelectSelectorConfig(
options=[

View File

@ -113,10 +113,13 @@ async def async_setup_entry(
Template(value_string, hass) if value_string is not None else None
)
trigger_entity_config = {CONF_NAME: name}
trigger_entity_config: dict[str, str | Template | None] = {CONF_NAME: name}
for key in TRIGGER_ENTITY_OPTIONS:
if key not in sensor_config:
continue
if key == CONF_AVAILABILITY:
trigger_entity_config[key] = Template(sensor_config[key], hass)
continue
trigger_entity_config[key] = sensor_config[key]
entities.append(

View File

@ -5,24 +5,36 @@ from __future__ import annotations
from datetime import timedelta
from unittest.mock import patch
from freezegun.api import FrozenDateTimeFactory
import pytest
from homeassistant.components.rest.const import DEFAULT_METHOD
from homeassistant.components.rest.data import DEFAULT_TIMEOUT
from homeassistant.components.scrape.const import (
CONF_ENCODING,
CONF_INDEX,
CONF_SELECT,
DEFAULT_ENCODING,
DEFAULT_SCAN_INTERVAL,
DEFAULT_VERIFY_SSL,
)
from homeassistant.components.sensor import (
CONF_STATE_CLASS,
DOMAIN as SENSOR_DOMAIN,
SensorDeviceClass,
SensorStateClass,
)
from homeassistant.const import (
CONF_DEVICE_CLASS,
CONF_ICON,
CONF_METHOD,
CONF_NAME,
CONF_RESOURCE,
CONF_TIMEOUT,
CONF_UNIQUE_ID,
CONF_UNIT_OF_MEASUREMENT,
CONF_VALUE_TEMPLATE,
CONF_VERIFY_SSL,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
UnitOfTemperature,
@ -562,3 +574,54 @@ async def test_templates_with_yaml(hass: HomeAssistant) -> None:
assert state.state == "Current Version: 2021.12.10"
assert state.attributes[CONF_ICON] == "mdi:on"
assert state.attributes["entity_picture"] == "/local/picture1.jpg"
@pytest.mark.parametrize(
"get_config",
[
{
CONF_RESOURCE: "https://www.home-assistant.io",
CONF_METHOD: DEFAULT_METHOD,
CONF_VERIFY_SSL: DEFAULT_VERIFY_SSL,
CONF_TIMEOUT: DEFAULT_TIMEOUT,
CONF_ENCODING: DEFAULT_ENCODING,
SENSOR_DOMAIN: [
{
CONF_SELECT: ".current-version h1",
CONF_NAME: "Current version",
CONF_VALUE_TEMPLATE: "{{ value.split(':')[1] }}",
CONF_INDEX: 0,
CONF_UNIQUE_ID: "3699ef88-69e6-11ed-a1eb-0242ac120002",
CONF_AVAILABILITY: '{{ states("sensor.input1")=="on" }}',
}
],
}
],
)
async def test_availability(
hass: HomeAssistant,
loaded_entry: MockConfigEntry,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test availability when setup from config entry."""
hass.states.async_set("sensor.input1", "on")
freezer.tick(timedelta(minutes=10))
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("sensor.current_version")
assert state.state == "2021.12.10"
hass.states.async_set("sensor.input1", "off")
await hass.async_block_till_done()
with patch(
"homeassistant.components.command_line.utils.subprocess.check_output",
return_value=b"0",
):
freezer.tick(timedelta(minutes=10))
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("sensor.current_version")
assert state.state == STATE_UNAVAILABLE