diff --git a/homeassistant/components/demo/__init__.py b/homeassistant/components/demo/__init__.py index 93a34794366ddc2952495c000865a42a66c3871c..05febfad603335603b7c7445740c1a6240be1147 100644 --- a/homeassistant/components/demo/__init__.py +++ b/homeassistant/components/demo/__init__.py @@ -3,33 +3,37 @@ import asyncio import logging import time -from homeassistant import bootstrap +from homeassistant import bootstrap, config_entries import homeassistant.core as ha from homeassistant.const import ATTR_ENTITY_ID, EVENT_HOMEASSISTANT_START DOMAIN = "demo" _LOGGER = logging.getLogger(__name__) -COMPONENTS_WITH_DEMO_PLATFORM = [ + +COMPONENTS_WITH_CONFIG_ENTRY_DEMO_PLATFORM = [ "air_quality", "alarm_control_panel", "binary_sensor", - "calendar", "camera", "climate", "cover", - "device_tracker", "fan", - "image_processing", "light", "lock", "media_player", - "notify", "sensor", - "stt", "switch", + "water_heater", +] + +COMPONENTS_WITH_DEMO_PLATFORM = [ "tts", + "stt", "mailbox", - "water_heater", + "notify", + "image_processing", + "calendar", + "device_tracker", ] @@ -38,8 +42,12 @@ async def async_setup(hass, config): if DOMAIN not in config: return True - config.setdefault(ha.DOMAIN, {}) - config.setdefault(DOMAIN, {}) + if not hass.config_entries.async_entries(DOMAIN): + hass.async_create_task( + hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data={} + ) + ) # Set up demo platforms for component in COMPONENTS_WITH_DEMO_PLATFORM: @@ -47,6 +55,9 @@ async def async_setup(hass, config): hass.helpers.discovery.async_load_platform(component, DOMAIN, {}, config) ) + config.setdefault(ha.DOMAIN, {}) + config.setdefault(DOMAIN, {}) + # Set up sun if not hass.config.latitude: hass.config.latitude = 32.87336 @@ -176,6 +187,16 @@ async def async_setup(hass, config): return True +async def async_setup_entry(hass, config_entry): + """Set the config entry up.""" + # Set up demo platforms with config entry + for component in COMPONENTS_WITH_CONFIG_ENTRY_DEMO_PLATFORM: + hass.async_create_task( + hass.config_entries.async_forward_entry_setup(config_entry, component) + ) + return True + + async def finish_setup(hass, config): """Finish set up once demo platforms are set up.""" switches = None diff --git a/homeassistant/components/demo/air_quality.py b/homeassistant/components/demo/air_quality.py index 0b41d9c87e9a74388cce108543439a11fed44fb8..9fe0f675d9d033c1bb40d2bb815b81d7e0a4a938 100644 --- a/homeassistant/components/demo/air_quality.py +++ b/homeassistant/components/demo/air_quality.py @@ -2,13 +2,18 @@ from homeassistant.components.air_quality import AirQualityEntity -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Air Quality.""" - add_entities( + async_add_entities( [DemoAirQuality("Home", 14, 23, 100), DemoAirQuality("Office", 4, 16, None)] ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoAirQuality(AirQualityEntity): """Representation of Air Quality data.""" diff --git a/homeassistant/components/demo/alarm_control_panel.py b/homeassistant/components/demo/alarm_control_panel.py index 378ba3b18dd6890215cdbdb8baa7fae266c87469..d82edadf1614974258340eb7239bd94407e8d7be 100644 --- a/homeassistant/components/demo/alarm_control_panel.py +++ b/homeassistant/components/demo/alarm_control_panel.py @@ -57,3 +57,8 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= ) ] ) + + +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) diff --git a/homeassistant/components/demo/binary_sensor.py b/homeassistant/components/demo/binary_sensor.py index 96c2b66fa5be9c7a38e18022ca6ed440cf214875..c1e42807f6d3910dbb46f0ffd8fe898047bf8695 100644 --- a/homeassistant/components/demo/binary_sensor.py +++ b/homeassistant/components/demo/binary_sensor.py @@ -1,26 +1,49 @@ """Demo platform that has two fake binary sensors.""" from homeassistant.components.binary_sensor import BinarySensorDevice +from . import DOMAIN -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Demo binary sensor platform.""" - add_entities( + async_add_entities( [ - DemoBinarySensor("Basement Floor Wet", False, "moisture"), - DemoBinarySensor("Movement Backyard", True, "motion"), + DemoBinarySensor("binary_1", "Basement Floor Wet", False, "moisture"), + DemoBinarySensor("binary_2", "Movement Backyard", True, "motion"), ] ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoBinarySensor(BinarySensorDevice): """representation of a Demo binary sensor.""" - def __init__(self, name, state, device_class): + def __init__(self, unique_id, name, state, device_class): """Initialize the demo sensor.""" + self._unique_id = unique_id self._name = name self._state = state self._sensor_type = device_class + @property + def device_info(self): + """Return device info.""" + return { + "identifiers": { + # Serial numbers are unique identifiers within a specific domain + (DOMAIN, self.unique_id) + }, + "name": self.name, + } + + @property + def unique_id(self): + """Return the unique id.""" + return self._unique_id + @property def device_class(self): """Return the class of this sensor.""" diff --git a/homeassistant/components/demo/camera.py b/homeassistant/components/demo/camera.py index 0cd77b6112eca8d952ff6f8f587fc620b1f30169..f639dae9757c755334f61e0f6ea9d0c54a97a343 100644 --- a/homeassistant/components/demo/camera.py +++ b/homeassistant/components/demo/camera.py @@ -12,6 +12,11 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= async_add_entities([DemoCamera("Demo camera")]) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoCamera(Camera): """The representation of a Demo camera.""" diff --git a/homeassistant/components/demo/climate.py b/homeassistant/components/demo/climate.py index f5117b7986cc495cff8e97944f0a97fd359a8c21..f4affed7ced10cfab6754a61773a7d46d33f79cc 100644 --- a/homeassistant/components/demo/climate.py +++ b/homeassistant/components/demo/climate.py @@ -1,4 +1,5 @@ """Demo platform that offers a fake climate device.""" +import logging from homeassistant.components.climate import ClimateDevice from homeassistant.components.climate.const import ( ATTR_TARGET_TEMP_HIGH, @@ -20,15 +21,18 @@ from homeassistant.components.climate.const import ( HVAC_MODE_AUTO, ) from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT +from . import DOMAIN SUPPORT_FLAGS = 0 +_LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Demo climate devices.""" - add_entities( + async_add_entities( [ DemoClimate( + unique_id="climate_1", name="HeatPump", target_temperature=68, unit_of_measurement=TEMP_FAHRENHEIT, @@ -46,6 +50,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): hvac_modes=[HVAC_MODE_HEAT, HVAC_MODE_OFF], ), DemoClimate( + unique_id="climate_2", name="Hvac", target_temperature=21, unit_of_measurement=TEMP_CELSIUS, @@ -63,6 +68,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): hvac_modes=[mode for mode in HVAC_MODES if mode != HVAC_MODE_HEAT_COOL], ), DemoClimate( + unique_id="climate_3", name="Ecobee", target_temperature=None, unit_of_measurement=TEMP_CELSIUS, @@ -84,11 +90,17 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo climate devices config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoClimate(ClimateDevice): """Representation of a demo climate device.""" def __init__( self, + unique_id, name, target_temperature, unit_of_measurement, @@ -107,6 +119,7 @@ class DemoClimate(ClimateDevice): preset_modes=None, ): """Initialize the climate device.""" + self._unique_id = unique_id self._name = name self._support_flags = SUPPORT_FLAGS if target_temperature is not None: @@ -143,6 +156,22 @@ class DemoClimate(ClimateDevice): self._target_temperature_high = target_temp_high self._target_temperature_low = target_temp_low + @property + def device_info(self): + """Return device info.""" + return { + "identifiers": { + # Serial numbers are unique identifiers within a specific domain + (DOMAIN, self.unique_id) + }, + "name": self.name, + } + + @property + def unique_id(self): + """Return the unique id.""" + return self._unique_id + @property def supported_features(self): """Return the list of supported features.""" diff --git a/homeassistant/components/demo/config_flow.py b/homeassistant/components/demo/config_flow.py new file mode 100644 index 0000000000000000000000000000000000000000..e6b275920c8c16ea0f4dd2d3ddeadaf3fb35ce34 --- /dev/null +++ b/homeassistant/components/demo/config_flow.py @@ -0,0 +1,16 @@ +"""Config flow to configure demo component.""" + +from homeassistant import config_entries + +# pylint: disable=unused-import +from . import DOMAIN + + +class DemoConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Demo configuration flow.""" + + VERSION = 1 + + async def async_step_import(self, import_info): + """Set the config entry up from yaml.""" + return self.async_create_entry(title="Demo", data={}) diff --git a/homeassistant/components/demo/cover.py b/homeassistant/components/demo/cover.py index 180312eefa39f5b416856deb948cfee98a034464..20a8747aaa5b2d9726a0be541cdfdce5c2f69a50 100644 --- a/homeassistant/components/demo/cover.py +++ b/homeassistant/components/demo/cover.py @@ -8,17 +8,19 @@ from homeassistant.components.cover import ( SUPPORT_OPEN, CoverDevice, ) +from . import DOMAIN -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Demo covers.""" - add_entities( + async_add_entities( [ - DemoCover(hass, "Kitchen Window"), - DemoCover(hass, "Hall Window", 10), - DemoCover(hass, "Living Room Window", 70, 50), + DemoCover(hass, "cover_1", "Kitchen Window"), + DemoCover(hass, "cover_2", "Hall Window", 10), + DemoCover(hass, "cover_3", "Living Room Window", 70, 50), DemoCover( hass, + "cover_4", "Garage Door", device_class="garage", supported_features=(SUPPORT_OPEN | SUPPORT_CLOSE), @@ -27,12 +29,18 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoCover(CoverDevice): """Representation of a demo cover.""" def __init__( self, hass, + unique_id, name, position=None, tilt_position=None, @@ -41,6 +49,7 @@ class DemoCover(CoverDevice): ): """Initialize the cover.""" self.hass = hass + self._unique_id = unique_id self._name = name self._position = position self._device_class = device_class @@ -59,6 +68,22 @@ class DemoCover(CoverDevice): else: self._closed = self.current_cover_position <= 0 + @property + def device_info(self): + """Return device info.""" + return { + "identifiers": { + # Serial numbers are unique identifiers within a specific domain + (DOMAIN, self.unique_id) + }, + "name": self.name, + } + + @property + def unique_id(self): + """Return unique ID for cover.""" + return self._unique_id + @property def name(self): """Return the name of the cover.""" diff --git a/homeassistant/components/demo/fan.py b/homeassistant/components/demo/fan.py index ab8a6f3fae9dc6d62652b58f23db4b605c809bbf..500d5f6a5ce5dd67ade09189a8997165badc792c 100644 --- a/homeassistant/components/demo/fan.py +++ b/homeassistant/components/demo/fan.py @@ -15,9 +15,9 @@ FULL_SUPPORT = SUPPORT_SET_SPEED | SUPPORT_OSCILLATE | SUPPORT_DIRECTION LIMITED_SUPPORT = SUPPORT_SET_SPEED -def setup_platform(hass, config, add_entities_callback, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the demo fan platform.""" - add_entities_callback( + async_add_entities( [ DemoFan(hass, "Living Room Fan", FULL_SUPPORT), DemoFan(hass, "Ceiling Fan", LIMITED_SUPPORT), @@ -25,6 +25,11 @@ def setup_platform(hass, config, add_entities_callback, discovery_info=None): ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoFan(FanEntity): """A demonstration fan component.""" diff --git a/homeassistant/components/demo/light.py b/homeassistant/components/demo/light.py index f8b1b5115115cedbe96182a09719957a26a5a4e9..a2c06b72986e8185ba67f77cc139cfd8e9dcbfbe 100644 --- a/homeassistant/components/demo/light.py +++ b/homeassistant/components/demo/light.py @@ -15,6 +15,8 @@ from homeassistant.components.light import ( Light, ) +from . import DOMAIN + LIGHT_COLORS = [(56, 86), (345, 75)] LIGHT_EFFECT_LIST = ["rainbow", "none"] @@ -30,24 +32,33 @@ SUPPORT_DEMO = ( ) -def setup_platform(hass, config, add_entities_callback, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the demo light platform.""" - add_entities_callback( + async_add_entities( [ DemoLight( - 1, + "light_1", "Bed Light", False, True, effect_list=LIGHT_EFFECT_LIST, effect=LIGHT_EFFECT_LIST[0], ), - DemoLight(2, "Ceiling Lights", True, True, LIGHT_COLORS[0], LIGHT_TEMPS[1]), - DemoLight(3, "Kitchen Lights", True, True, LIGHT_COLORS[1], LIGHT_TEMPS[0]), + DemoLight( + "light_2", "Ceiling Lights", True, True, LIGHT_COLORS[0], LIGHT_TEMPS[1] + ), + DemoLight( + "light_3", "Kitchen Lights", True, True, LIGHT_COLORS[1], LIGHT_TEMPS[0] + ), ] ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoLight(Light): """Representation of a demo light.""" @@ -76,6 +87,17 @@ class DemoLight(Light): self._effect = effect self._available = True + @property + def device_info(self): + """Return device info.""" + return { + "identifiers": { + # Serial numbers are unique identifiers within a specific domain + (DOMAIN, self.unique_id) + }, + "name": self.name, + } + @property def should_poll(self) -> bool: """No polling needed for a demo light.""" diff --git a/homeassistant/components/demo/lock.py b/homeassistant/components/demo/lock.py index d8fb244b9bcbfd9c924bf39cb8911aea33bd5351..923469f045c4009df3c7cb52635282547858c6ed 100644 --- a/homeassistant/components/demo/lock.py +++ b/homeassistant/components/demo/lock.py @@ -4,9 +4,9 @@ from homeassistant.const import STATE_LOCKED, STATE_UNLOCKED from homeassistant.components.lock import SUPPORT_OPEN, LockDevice -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Demo lock platform.""" - add_entities( + async_add_entities( [ DemoLock("Front Door", STATE_LOCKED), DemoLock("Kitchen Door", STATE_UNLOCKED), @@ -15,6 +15,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoLock(LockDevice): """Representation of a Demo lock.""" diff --git a/homeassistant/components/demo/media_player.py b/homeassistant/components/demo/media_player.py index fb64f8015c0f4b8446d3f8f9da61c15606d7578d..9d7c3892af857434b38d363ec31508cd7754b288 100644 --- a/homeassistant/components/demo/media_player.py +++ b/homeassistant/components/demo/media_player.py @@ -24,9 +24,9 @@ from homeassistant.const import STATE_OFF, STATE_PAUSED, STATE_PLAYING import homeassistant.util.dt as dt_util -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the media player demo platform.""" - add_entities( + async_add_entities( [ DemoYoutubePlayer( "Living Room", @@ -43,6 +43,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + YOUTUBE_COVER_URL_FORMAT = "https://img.youtube.com/vi/{}/hqdefault.jpg" SOUND_MODE_LIST = ["Dummy Music", "Dummy Movie"] DEFAULT_SOUND_MODE = "Dummy Music" diff --git a/homeassistant/components/demo/remote.py b/homeassistant/components/demo/remote.py index 4a363781e2efb4a4b77d19fd2ae88dee9a08107f..70e0d3c8b6e13be7850746ff8363ad73aec14334 100644 --- a/homeassistant/components/demo/remote.py +++ b/homeassistant/components/demo/remote.py @@ -3,6 +3,11 @@ from homeassistant.components.remote import RemoteDevice from homeassistant.const import DEVICE_DEFAULT_NAME +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + setup_platform(hass, {}, async_add_entities) + + def setup_platform(hass, config, add_entities_callback, discovery_info=None): """Set up the demo remotes.""" add_entities_callback( diff --git a/homeassistant/components/demo/sensor.py b/homeassistant/components/demo/sensor.py index 78bd88b42cf5a65eee8168b3ce6ca06b7888371c..bf5df94e74c355f677a1aeda1a97aa9bdfbe1566 100644 --- a/homeassistant/components/demo/sensor.py +++ b/homeassistant/components/demo/sensor.py @@ -6,31 +6,63 @@ from homeassistant.const import ( DEVICE_CLASS_TEMPERATURE, ) from homeassistant.helpers.entity import Entity +from . import DOMAIN -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Demo sensors.""" - add_entities( + async_add_entities( [ DemoSensor( - "Outside Temperature", 15.6, DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, 12 + "sensor_1", + "Outside Temperature", + 15.6, + DEVICE_CLASS_TEMPERATURE, + TEMP_CELSIUS, + 12, + ), + DemoSensor( + "sensor_2", "Outside Humidity", 54, DEVICE_CLASS_HUMIDITY, "%", None ), - DemoSensor("Outside Humidity", 54, DEVICE_CLASS_HUMIDITY, "%", None), ] ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoSensor(Entity): """Representation of a Demo sensor.""" - def __init__(self, name, state, device_class, unit_of_measurement, battery): + def __init__( + self, unique_id, name, state, device_class, unit_of_measurement, battery + ): """Initialize the sensor.""" + self._unique_id = unique_id self._name = name self._state = state self._device_class = device_class self._unit_of_measurement = unit_of_measurement self._battery = battery + @property + def device_info(self): + """Return device info.""" + return { + "identifiers": { + # Serial numbers are unique identifiers within a specific domain + (DOMAIN, self.unique_id) + }, + "name": self.name, + } + + @property + def unique_id(self): + """Return the unique id.""" + return self._unique_id + @property def should_poll(self): """No polling needed for a demo sensor.""" diff --git a/homeassistant/components/demo/strings.json b/homeassistant/components/demo/strings.json new file mode 100644 index 0000000000000000000000000000000000000000..a2c0103280bee103bf1ca4e130cfe95a395dcde9 --- /dev/null +++ b/homeassistant/components/demo/strings.json @@ -0,0 +1,5 @@ +{ + "config": { + "title": "Demo" + } +} diff --git a/homeassistant/components/demo/switch.py b/homeassistant/components/demo/switch.py index 65860867ed63a661544f891c0be7bf7033fc7b21..23006cff875a4ded833b3f5b45dae2bc9a0063c7 100644 --- a/homeassistant/components/demo/switch.py +++ b/homeassistant/components/demo/switch.py @@ -1,29 +1,52 @@ """Demo platform that has two fake switches.""" from homeassistant.components.switch import SwitchDevice from homeassistant.const import DEVICE_DEFAULT_NAME +from . import DOMAIN -def setup_platform(hass, config, add_entities_callback, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the demo switches.""" - add_entities_callback( + async_add_entities( [ - DemoSwitch("Decorative Lights", True, None, True), - DemoSwitch("AC", False, "mdi:air-conditioner", False), + DemoSwitch("swith1", "Decorative Lights", True, None, True), + DemoSwitch("swith2", "AC", False, "mdi:air-conditioner", False), ] ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoSwitch(SwitchDevice): """Representation of a demo switch.""" - def __init__(self, name, state, icon, assumed, device_class=None): + def __init__(self, unique_id, name, state, icon, assumed, device_class=None): """Initialize the Demo switch.""" + self._unique_id = unique_id self._name = name or DEVICE_DEFAULT_NAME self._state = state self._icon = icon self._assumed = assumed self._device_class = device_class + @property + def device_info(self): + """Return device info.""" + return { + "identifiers": { + # Serial numbers are unique identifiers within a specific domain + (DOMAIN, self.unique_id) + }, + "name": self.name, + } + + @property + def unique_id(self): + """Return the unique id.""" + return self._unique_id + @property def should_poll(self): """No polling needed for a demo switch.""" diff --git a/homeassistant/components/demo/vacuum.py b/homeassistant/components/demo/vacuum.py index 2ba704d39252bc68f5ec167ff8c8dc312647a673..fb64f17a4521c06d55f1f99bc604114565907fd2 100644 --- a/homeassistant/components/demo/vacuum.py +++ b/homeassistant/components/demo/vacuum.py @@ -76,6 +76,11 @@ DEMO_VACUUM_NONE = "4_Fourth_floor" DEMO_VACUUM_STATE = "5_Fifth_floor" +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + setup_platform(hass, {}, async_add_entities) + + def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Demo vacuums.""" add_entities( diff --git a/homeassistant/components/demo/water_heater.py b/homeassistant/components/demo/water_heater.py index d1d53e058c66fc0175a917cffa97580b7aafc62f..c3fff26c9922aca16f2a7c00b972d4a96a7dbbea 100644 --- a/homeassistant/components/demo/water_heater.py +++ b/homeassistant/components/demo/water_heater.py @@ -13,9 +13,9 @@ SUPPORT_FLAGS_HEATER = ( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the Demo water_heater devices.""" - add_entities( + async_add_entities( [ DemoWaterHeater("Demo Water Heater", 119, TEMP_FAHRENHEIT, False, "eco"), DemoWaterHeater("Demo Water Heater Celsius", 45, TEMP_CELSIUS, True, "eco"), @@ -23,6 +23,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ) +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + await async_setup_platform(hass, {}, async_add_entities) + + class DemoWaterHeater(WaterHeaterDevice): """Representation of a demo water_heater device.""" diff --git a/homeassistant/components/demo/weather.py b/homeassistant/components/demo/weather.py index 2253f261ad2cef28e552bb7d863af674422761f9..8cc1b2f95fdfc45f8167bed8ce6fad4c5f31e707 100644 --- a/homeassistant/components/demo/weather.py +++ b/homeassistant/components/demo/weather.py @@ -30,6 +30,11 @@ CONDITION_CLASSES = { } +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up the Demo config entry.""" + setup_platform(hass, {}, async_add_entities) + + def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Demo weather.""" add_entities( diff --git a/tests/components/google_assistant/test_smart_home.py b/tests/components/google_assistant/test_smart_home.py index 3c3801b35c699feda2a025de7619eef8a20d4cee..250d611b60289c14b5a40fdb470602d3968dbca0 100644 --- a/tests/components/google_assistant/test_smart_home.py +++ b/tests/components/google_assistant/test_smart_home.py @@ -498,6 +498,7 @@ async def test_unavailable_state_doesnt_sync(hass): async def test_device_class_switch(hass, device_class, google_type): """Test that a cover entity syncs to the correct device type.""" sensor = DemoSwitch( + None, "Demo Sensor", state=False, icon="mdi:switch", @@ -545,7 +546,9 @@ async def test_device_class_switch(hass, device_class, google_type): ) async def test_device_class_binary_sensor(hass, device_class, google_type): """Test that a binary entity syncs to the correct device type.""" - sensor = DemoBinarySensor("Demo Sensor", state=False, device_class=device_class) + sensor = DemoBinarySensor( + None, "Demo Sensor", state=False, device_class=device_class + ) sensor.hass = hass sensor.entity_id = "binary_sensor.demo_sensor" await sensor.async_update_ha_state() @@ -585,7 +588,7 @@ async def test_device_class_binary_sensor(hass, device_class, google_type): ) async def test_device_class_cover(hass, device_class, google_type): """Test that a binary entity syncs to the correct device type.""" - sensor = DemoCover(hass, "Demo Sensor", device_class=device_class) + sensor = DemoCover(None, hass, "Demo Sensor", device_class=device_class) sensor.hass = hass sensor.entity_id = "cover.demo_sensor" await sensor.async_update_ha_state() diff --git a/tests/components/prometheus/test_init.py b/tests/components/prometheus/test_init.py index 4ec40731c5d2061154902539968645b130c19d1d..cf1ff7489f6de897beea26fb664c3591ba402002 100644 --- a/tests/components/prometheus/test_init.py +++ b/tests/components/prometheus/test_init.py @@ -24,24 +24,26 @@ async def prometheus_client(loop, hass, hass_client): hass, climate.DOMAIN, {"climate": [{"platform": "demo"}]} ) - sensor1 = DemoSensor("Television Energy", 74, None, ENERGY_KILO_WATT_HOUR, None) + sensor1 = DemoSensor( + None, "Television Energy", 74, None, ENERGY_KILO_WATT_HOUR, None + ) sensor1.hass = hass sensor1.entity_id = "sensor.television_energy" await sensor1.async_update_ha_state() sensor2 = DemoSensor( - "Radio Energy", 14, DEVICE_CLASS_POWER, ENERGY_KILO_WATT_HOUR, None + None, "Radio Energy", 14, DEVICE_CLASS_POWER, ENERGY_KILO_WATT_HOUR, None ) sensor2.hass = hass sensor2.entity_id = "sensor.radio_energy" await sensor2.async_update_ha_state() - sensor3 = DemoSensor("Electricity price", 0.123, None, "SEK/kWh", None) + sensor3 = DemoSensor(None, "Electricity price", 0.123, None, "SEK/kWh", None) sensor3.hass = hass sensor3.entity_id = "sensor.electricity_price" await sensor3.async_update_ha_state() - sensor4 = DemoSensor("Wind Direction", 25, None, "°", None) + sensor4 = DemoSensor(None, "Wind Direction", 25, None, "°", None) sensor4.hass = hass sensor4.entity_id = "sensor.wind_direction" await sensor4.async_update_ha_state()