Add cover support to control4#169417
Conversation
|
Please take a look at the requested changes, and use the Ready for review button when you are done, thanks 👍 |
|
Hey there @lawtancool, @davidrecordon, mind taking a look at this pull request as it has been labeled with an integration ( Code owner commandsCode owners of
|
There was a problem hiding this comment.
Pull request overview
Adds initial Cover platform support to the existing control4 integration, enabling Control4 blinds/shades to appear as Home Assistant cover entities and be controlled via standard cover services.
Changes:
- Introduces a new
coverplatform (Control4Cover) backed by aDataUpdateCoordinatorthat polls Control4 blind/shade variables. - Extends the integration’s forwarded platforms to include
Platform.COVER. - Adds Control4 cover test coverage and updates the director items fixture with a representative blind/shade item.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
homeassistant/components/control4/__init__.py |
Adds Platform.COVER to forwarded platforms so the new cover platform is loaded. |
homeassistant/components/control4/cover.py |
Implements Control4 cover entity setup, polling, and service methods (open/close/stop/set position). |
tests/components/control4/test_cover.py |
Adds tests for entity creation, state mapping, and service calls. |
tests/components/control4/fixtures/director_all_items.json |
Extends the fixture data with a blinds/shades item and its parent device. |
| from . import Control4ConfigEntry, Control4RuntimeData, get_items_of_category | ||
| from .const import CONTROL4_ENTITY_TYPE | ||
| from .director_utils import update_variables_for_config_entry | ||
| from .entity import Control4Entity | ||
|
|
There was a problem hiding this comment.
Remove the unused Control4RuntimeData import (or use it in type hints) to avoid failing Ruff's unused-import checks.
| await coordinator.async_refresh() | ||
|
|
||
| items_of_category = await get_items_of_category(hass, entry, CONTROL4_CATEGORY) | ||
| entity_list = [] | ||
| for item in items_of_category: | ||
| try: | ||
| if item["type"] != CONTROL4_ENTITY_TYPE: | ||
| continue | ||
| item_name = item["name"] | ||
| item_id = item["id"] | ||
| item_parent_id = item["parentId"] | ||
| item_manufacturer = None | ||
| item_device_name = None | ||
| item_model = None | ||
|
|
||
| for parent_item in items_of_category: | ||
| if parent_item["id"] == item_parent_id: | ||
| item_manufacturer = parent_item.get("manufacturer") | ||
| item_device_name = parent_item.get("roomName") | ||
| item_model = parent_item.get("model") | ||
| except KeyError: | ||
| _LOGGER.exception( | ||
| "Unknown device properties received from Control4: %s", | ||
| item, | ||
| ) | ||
| continue | ||
|
|
||
| if item_id not in coordinator.data: | ||
| _LOGGER.warning( | ||
| "Couldn't get cover state data for %s (ID: %s), skipping setup", | ||
| item_name, | ||
| item_id, | ||
| ) | ||
| continue |
There was a problem hiding this comment.
Use coordinator.async_config_entry_first_refresh() (or otherwise guard coordinator.data being None) so setup doesn't crash when the initial refresh fails.
| """Control4 cover entity.""" | ||
|
|
||
| _attr_has_entity_name = True | ||
| _attr_translation_key = "blind" |
There was a problem hiding this comment.
Either add the cover.blind translation key to strings.json/icons.json or drop _attr_translation_key to avoid missing-translation warnings at runtime.
| _attr_translation_key = "blind" |
| """Test cover entities are set up correctly with proper attributes.""" | ||
| await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id) |
There was a problem hiding this comment.
Add the Syrupy snapshot file for test_cover_entities (or switch this test to explicit assertions) so CI doesn't fail due to missing snapshots.
| """Test cover entities are set up correctly with proper attributes.""" | ||
| await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id) | ||
|
|
| config_entry=entry, | ||
| ) | ||
|
|
||
| await coordinator.async_refresh() |
| items_of_category = await get_items_of_category(hass, entry, CONTROL4_CATEGORY) | ||
| entity_list = [] | ||
| for item in items_of_category: | ||
| try: | ||
| if item["type"] != CONTROL4_ENTITY_TYPE: | ||
| continue | ||
| item_name = item["name"] | ||
| item_id = item["id"] | ||
| item_parent_id = item["parentId"] | ||
| item_manufacturer = None | ||
| item_device_name = None | ||
| item_model = None | ||
|
|
||
| for parent_item in items_of_category: | ||
| if parent_item["id"] == item_parent_id: | ||
| item_manufacturer = parent_item.get("manufacturer") | ||
| item_device_name = parent_item.get("roomName") | ||
| item_model = parent_item.get("model") |
| """Control4 cover entity.""" | ||
|
|
||
| _attr_has_entity_name = True | ||
| _attr_translation_key = "blind" |
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
docs PR is home-assistant/home-assistant.io#45066 |
| @pytest.mark.parametrize( | ||
| ("mock_cover_variables", "expected_state", "expected_position"), | ||
| [ | ||
| pytest.param( | ||
| _make_cover_data(level=0, fully_closed=True), | ||
| CoverState.CLOSED, | ||
| 0, | ||
| id="closed", | ||
| ), | ||
| pytest.param( | ||
| _make_cover_data(level=100, fully_open=True), | ||
| CoverState.OPEN, | ||
| 100, | ||
| id="open", | ||
| ), | ||
| pytest.param( | ||
| _make_cover_data(level=42), | ||
| CoverState.OPEN, | ||
| 42, | ||
| id="partial", | ||
| ), | ||
| pytest.param( | ||
| _make_cover_data(level=70, opening=True), | ||
| CoverState.OPENING, | ||
| 70, | ||
| id="opening", | ||
| ), | ||
| pytest.param( | ||
| _make_cover_data(level=30, closing=True), | ||
| CoverState.CLOSING, | ||
| 30, | ||
| id="closing", | ||
| ), | ||
| ], | ||
| ) |
| async def test_cover_states( | ||
| hass: HomeAssistant, | ||
| expected_state: str, | ||
| expected_position: int, | ||
| ) -> None: |
| config_entry=entry, | ||
| ) | ||
|
|
||
| await coordinator.async_refresh() |
| if item_id not in coordinator.data: | ||
| _LOGGER.warning( | ||
| "Couldn't get cover state data for %s (ID: %s), skipping setup", | ||
| item_name, | ||
| item_id, | ||
| ) | ||
| continue |
| def _cover_data(self) -> dict[str, Any] | None: | ||
| """Return the cover data from the coordinator.""" | ||
| return self.coordinator.data.get(self._idx) |
| items_of_category = await get_items_of_category(hass, entry, CONTROL4_CATEGORY) | ||
| entity_list = [] | ||
| for item in items_of_category: | ||
| try: | ||
| if item["type"] != CONTROL4_ENTITY_TYPE: | ||
| continue | ||
| item_name = item["name"] | ||
| item_id = item["id"] | ||
| item_parent_id = item["parentId"] | ||
| item_manufacturer = None | ||
| item_device_name = None | ||
| item_model = None | ||
|
|
||
| for parent_item in items_of_category: | ||
| if parent_item["id"] == item_parent_id: | ||
| item_manufacturer = parent_item.get("manufacturer") | ||
| item_device_name = parent_item.get("roomName") | ||
| item_model = parent_item.get("model") |
| items_of_category = await get_items_of_category(hass, entry, CONTROL4_CATEGORY) | ||
| entity_list = [] | ||
| for item in items_of_category: |
| for parent_item in items_of_category: | ||
| if parent_item["id"] == item_parent_id: | ||
| item_manufacturer = parent_item.get("manufacturer") | ||
| item_device_name = parent_item.get("roomName") | ||
| item_model = parent_item.get("model") |
|
I felt really good when I was able to take my changed code into custom components, restart HA, and control my blinds from my home-assistant. But MAN the experience has been shit since then.
I'm giving up now. Please understand - I am fully capable of doing an interactive git rebase to fix the state the web-ui put my PR into ... But I literally can't right now, - because too many AI slop agents took github down. I totally understand the challenge of big upstream projects getting inundated by slop PRs that were generated with AI. But please consider - if you employ more AI to defend against AI slop ... you're putting a barrier up that will keep competent developers - those who write code for a living - to decide to say "It's not worth the time to try and commit to the AI slop machine". |
|
|
||
| state = hass.states.get(ENTITY_ID) | ||
| assert state is not None | ||
| assert state.state == STATE_UNAVAILABLE |
There was a problem hiding this comment.
We shouldn't touch entity component. Instead we should have the mock return what we expect and have the coordinator trigger a "natural" refresh (either by freezing and skipping time)
|
When looking at this PR it looked quite good though! We're still looking how we can use AI correctly, also because we have like 250 more open PRs than we used to have and that's why we try to make sure the code is at a good point when the first human reviewer comes by. I think a lot of things are still taken with a bit of salt and I'd still recommend to trust your gut. In any case, I think this could be ready to be merged, happy to help out :) |
|
Thanks, I'll take a look next weekend. |
this is an attempt to avoid pushing data into the component, instead, clear the mocked variables and advance the freezer, so it gets the empty data naturally.
| await coordinator.async_refresh() | ||
|
|
| """Control4 cover entity.""" | ||
|
|
||
| _attr_has_entity_name = True | ||
| _attr_translation_key = "blind" |
| """Control4 cover entity.""" | ||
|
|
||
| _attr_has_entity_name = True | ||
| _attr_translation_key = "blind" |
| for parent_item in items_of_category: | ||
| if parent_item["id"] == item_parent_id: | ||
| item_manufacturer = parent_item.get("manufacturer") | ||
| item_device_name = parent_item.get("roomName") | ||
| item_model = parent_item.get("model") |
| coordinator = DataUpdateCoordinator[dict[int, dict[str, Any]]]( | ||
| hass, | ||
| _LOGGER, | ||
| name="cover", | ||
| update_method=async_update_data, | ||
| update_interval=timedelta(seconds=runtime_data.scan_interval), | ||
| config_entry=entry, | ||
| ) | ||
|
|
||
| await coordinator.async_refresh() | ||
|
|
| if data is None: | ||
| return None | ||
| if (fully_closed := data.get(CONTROL4_FULLY_CLOSED)) is not None: | ||
| return bool(fully_closed) |
| 80, | ||
| CoverState.OPEN, | ||
| id="level_only_open", | ||
| ), |
|
Thanks for the feedback, I think I've got something that will work. Is there a comprehensive 'HOWTO set up your dev environment' for HA? Unfortunately the AI removed the previous comments in this PR, but at the very end before it was all passing, prek was failing. I could tell it was ruff from the prek logs, but I just eyeballed that I had a newline and removed it. This was a candidate for automatic reformatting ruff, and I'm quite used to pre-commit rejecting but reformatting these sort of errors so i just repeat the last commit with the fixed file. It would be a lot less friction of HA were to use a precommit hook that would do this on commit. I've probably not set things up correctly on my end. Anyway - if you're happy with how I avoided pushing data into the component, I think this is ready to merge. |
joostlek
left a comment
There was a problem hiding this comment.
In our dev docs is a guide on how to do that
Bump aiotankerkoenig to 0.5.3 (home-assistant#170224) Fix entities refresh for UptimeRobot (home-assistant#170217) Update easyEnergy exception and icon translations (home-assistant#170218) Add more Gen1 sensors to indevolt (home-assistant#170191) Bump letpot to 0.7.0 (home-assistant#169868) Migrate Thermo Beacon to config entry runtime data (home-assistant#170226) Migrate Sensirion BLE to config entry runtime data (home-assistant#170227) Co-authored-by: Josef Zweck <josef@zweck.dev> Bump imgw-pib to 2.1.2 (home-assistant#170274) Bump serialx to 1.7.2 (home-assistant#170272) Bump aioamazondevices to 13.5.0 (home-assistant#170258) Update upb-lib to 0.7.0 (home-assistant#170051) Bump qbittorrent-api to 2026.5.1 (home-assistant#170181) Use VERSION from PrusaLinkConfigFlow in prusalink (home-assistant#170200) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Migrate Duco to python-duco-connectivity and remove temperature sensors (home-assistant#170237) fix: Do not forget segments from state when a new config arrives (home-assistant#170265) Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete icon translations for Indevolt (home-assistant#170292) Align Indevolt quality scale with documentation (home-assistant#170289) Apply strict typing to Indevolt integration (home-assistant#170288) iaqualink: set system specific polling interval (home-assistant#170279) Use standby for HDMI-CEC turn off (home-assistant#170206) prusalink: add continue-job button for ATTENTION state (home-assistant#170193) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> data grand lyon: implement diagnostics (home-assistant#170184) Set serial port description from `description`, not `product` (home-assistant#170160) Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Update infrared-protocols to 4.0.0 (home-assistant#170297) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> data grand lyon: use test fixture instead of manual patching (home-assistant#170294) Handle empty BSB-LAN heating circuits (home-assistant#170249) Add diagnostics platform to Home Assistant Connect ZBT-2 (home-assistant#170158) Fix deprecated_class to work with inheritance (home-assistant#170137) Skip offline devices instead of aborting ViCare diagnostics (home-assistant#170106) Fix local API incorrectly marking devices as unavailable in Overkiz (home-assistant#170118) Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io> Add RepairsFlowResult TypeAlias (home-assistant#170263) Fix flaky diagnostics test for Novy Cooker Hood (home-assistant#170299) Fix spelling of RS-232 in Denon RS-232 integration (home-assistant#170298) data grand lyon: implement reconfiguration flow (home-assistant#170210) Add shared test mocks for the Infrared integration (home-assistant#170296) Co-authored-by: Claude <noreply@anthropic.com> Bump renault-api to 0.5.8 (home-assistant#170309) Bump indevolt api to 1.7.2 (home-assistant#170310) Update IQS to platinum for UptimeRobot (home-assistant#170260) Add player specific sensor to nintendo_parental_controls (home-assistant#155786) Co-authored-by: Joshua Peisach (ItzSwirlz) <itzswirlz2020@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Erik Montnemery <erik@montnemery.com> Fix hassio.backup_partial AttributeError when folders are specified (home-assistant#170312) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add backoff to forbidden packages (home-assistant#170242) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add tuya water timer data points (home-assistant#170314) Add more entities for Tuya camera (home-assistant#169966) Co-authored-by: mik-laj <12058428+mik-laj@users.noreply.github.com> Co-authored-by: Norbert Rittel <norbert@rittel.de> Add Tuya DLQ fixture (home-assistant#169585) Update rf-protocols to 3.0.0 (home-assistant#170301) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add Message Expire Interval option to MQTT publish service (home-assistant#169317) Co-authored-by: Copilot <copilot@github.com> Add new CentriConnect component (home-assistant#166933) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Watts: add HVAC action + preset mode (home-assistant#169546) Co-authored-by: Copilot <copilot@github.com> Co-authored-by: Joostlek <joostlek@outlook.com> Add quality scale for airnow integration (home-assistant#169709) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Fix nobo_hub NoboProfileSelector class-level mutable defaults (home-assistant#170119) Add cover support to control4 (home-assistant#169417) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Add Mitsubishi brand (home-assistant#169924) Co-authored-by: Nikolai Rahimi <nikolairahimi@users.noreply.github.com> Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Fix coordinator data mutation in YouTube diagnostics (home-assistant#170300) Co-authored-by: FIls0010 <a1867444@adelaide.edu.au> Bump aiovodafone to 3.2.0 (home-assistant#170322) Add countdown number for Tuya sfkzq single-valve timers (home-assistant#170318) Allow setting hvac_mode in generic_thermostat.set_temperature (home-assistant#168062) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Z-Wave.me: Allow updating entities (home-assistant#167839) Fix MQTT device discovery not using shared QoS and encoding options (home-assistant#170195) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Google assistant temperature setting active thermostat mode (home-assistant#166448) Co-authored-by: Lucas Sanchez Sagrado <lucas.sansag@educa.jcyl.es> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale to Tesla Fleet integration (home-assistant#160475) Co-authored-by: Claude <noreply@anthropic.com> Only use SmartThings switch for light if it should (home-assistant#166424) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale file to Ness Alarm (home-assistant#163425) Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Fix Shelly media player availability (home-assistant#170319) Update discovery description wording (home-assistant#170325) Bump teltasync to 0.3.0, fix discovery for older devices (home-assistant#169660) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete exception translations for Indevolt (home-assistant#170291) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add Kiosker switch platform (home-assistant#168858) Add `ZWaveNodeBaseEntity` for Z-Wave node-level entities (home-assistant#170124) Add number platform to eurotronic_cometblue (home-assistant#168119) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Bump aiotankerkoenig to 0.5.3 (home-assistant#170224) Fix entities refresh for UptimeRobot (home-assistant#170217) Update easyEnergy exception and icon translations (home-assistant#170218) Add more Gen1 sensors to indevolt (home-assistant#170191) Bump letpot to 0.7.0 (home-assistant#169868) Migrate Thermo Beacon to config entry runtime data (home-assistant#170226) Migrate Sensirion BLE to config entry runtime data (home-assistant#170227) Co-authored-by: Josef Zweck <josef@zweck.dev> Bump imgw-pib to 2.1.2 (home-assistant#170274) Bump serialx to 1.7.2 (home-assistant#170272) Bump aioamazondevices to 13.5.0 (home-assistant#170258) Update upb-lib to 0.7.0 (home-assistant#170051) Bump qbittorrent-api to 2026.5.1 (home-assistant#170181) Use VERSION from PrusaLinkConfigFlow in prusalink (home-assistant#170200) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Migrate Duco to python-duco-connectivity and remove temperature sensors (home-assistant#170237) fix: Do not forget segments from state when a new config arrives (home-assistant#170265) Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete icon translations for Indevolt (home-assistant#170292) Align Indevolt quality scale with documentation (home-assistant#170289) Apply strict typing to Indevolt integration (home-assistant#170288) iaqualink: set system specific polling interval (home-assistant#170279) Use standby for HDMI-CEC turn off (home-assistant#170206) prusalink: add continue-job button for ATTENTION state (home-assistant#170193) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> data grand lyon: implement diagnostics (home-assistant#170184) Set serial port description from `description`, not `product` (home-assistant#170160) Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Update infrared-protocols to 4.0.0 (home-assistant#170297) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> data grand lyon: use test fixture instead of manual patching (home-assistant#170294) Handle empty BSB-LAN heating circuits (home-assistant#170249) Add diagnostics platform to Home Assistant Connect ZBT-2 (home-assistant#170158) Fix deprecated_class to work with inheritance (home-assistant#170137) Skip offline devices instead of aborting ViCare diagnostics (home-assistant#170106) Fix local API incorrectly marking devices as unavailable in Overkiz (home-assistant#170118) Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io> Add RepairsFlowResult TypeAlias (home-assistant#170263) Fix flaky diagnostics test for Novy Cooker Hood (home-assistant#170299) Fix spelling of RS-232 in Denon RS-232 integration (home-assistant#170298) data grand lyon: implement reconfiguration flow (home-assistant#170210) Add shared test mocks for the Infrared integration (home-assistant#170296) Co-authored-by: Claude <noreply@anthropic.com> Bump renault-api to 0.5.8 (home-assistant#170309) Bump indevolt api to 1.7.2 (home-assistant#170310) Update IQS to platinum for UptimeRobot (home-assistant#170260) Add player specific sensor to nintendo_parental_controls (home-assistant#155786) Co-authored-by: Joshua Peisach (ItzSwirlz) <itzswirlz2020@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Erik Montnemery <erik@montnemery.com> Fix hassio.backup_partial AttributeError when folders are specified (home-assistant#170312) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add backoff to forbidden packages (home-assistant#170242) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add tuya water timer data points (home-assistant#170314) Add more entities for Tuya camera (home-assistant#169966) Co-authored-by: mik-laj <12058428+mik-laj@users.noreply.github.com> Co-authored-by: Norbert Rittel <norbert@rittel.de> Add Tuya DLQ fixture (home-assistant#169585) Update rf-protocols to 3.0.0 (home-assistant#170301) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add Message Expire Interval option to MQTT publish service (home-assistant#169317) Co-authored-by: Copilot <copilot@github.com> Add new CentriConnect component (home-assistant#166933) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Watts: add HVAC action + preset mode (home-assistant#169546) Co-authored-by: Copilot <copilot@github.com> Co-authored-by: Joostlek <joostlek@outlook.com> Add quality scale for airnow integration (home-assistant#169709) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Fix nobo_hub NoboProfileSelector class-level mutable defaults (home-assistant#170119) Add cover support to control4 (home-assistant#169417) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Add Mitsubishi brand (home-assistant#169924) Co-authored-by: Nikolai Rahimi <nikolairahimi@users.noreply.github.com> Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Fix coordinator data mutation in YouTube diagnostics (home-assistant#170300) Co-authored-by: FIls0010 <a1867444@adelaide.edu.au> Bump aiovodafone to 3.2.0 (home-assistant#170322) Add countdown number for Tuya sfkzq single-valve timers (home-assistant#170318) Allow setting hvac_mode in generic_thermostat.set_temperature (home-assistant#168062) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Z-Wave.me: Allow updating entities (home-assistant#167839) Fix MQTT device discovery not using shared QoS and encoding options (home-assistant#170195) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Google assistant temperature setting active thermostat mode (home-assistant#166448) Co-authored-by: Lucas Sanchez Sagrado <lucas.sansag@educa.jcyl.es> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale to Tesla Fleet integration (home-assistant#160475) Co-authored-by: Claude <noreply@anthropic.com> Only use SmartThings switch for light if it should (home-assistant#166424) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale file to Ness Alarm (home-assistant#163425) Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Fix Shelly media player availability (home-assistant#170319) Update discovery description wording (home-assistant#170325) Bump teltasync to 0.3.0, fix discovery for older devices (home-assistant#169660) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete exception translations for Indevolt (home-assistant#170291) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add Kiosker switch platform (home-assistant#168858) Add `ZWaveNodeBaseEntity` for Z-Wave node-level entities (home-assistant#170124) Add number platform to eurotronic_cometblue (home-assistant#168119) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Bump aiotankerkoenig to 0.5.3 (home-assistant#170224) Fix entities refresh for UptimeRobot (home-assistant#170217) Update easyEnergy exception and icon translations (home-assistant#170218) Add more Gen1 sensors to indevolt (home-assistant#170191) Bump letpot to 0.7.0 (home-assistant#169868) Migrate Thermo Beacon to config entry runtime data (home-assistant#170226) Migrate Sensirion BLE to config entry runtime data (home-assistant#170227) Co-authored-by: Josef Zweck <josef@zweck.dev> Bump imgw-pib to 2.1.2 (home-assistant#170274) Bump serialx to 1.7.2 (home-assistant#170272) Bump aioamazondevices to 13.5.0 (home-assistant#170258) Update upb-lib to 0.7.0 (home-assistant#170051) Bump qbittorrent-api to 2026.5.1 (home-assistant#170181) Use VERSION from PrusaLinkConfigFlow in prusalink (home-assistant#170200) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Migrate Duco to python-duco-connectivity and remove temperature sensors (home-assistant#170237) fix: Do not forget segments from state when a new config arrives (home-assistant#170265) Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete icon translations for Indevolt (home-assistant#170292) Align Indevolt quality scale with documentation (home-assistant#170289) Apply strict typing to Indevolt integration (home-assistant#170288) iaqualink: set system specific polling interval (home-assistant#170279) Use standby for HDMI-CEC turn off (home-assistant#170206) prusalink: add continue-job button for ATTENTION state (home-assistant#170193) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> data grand lyon: implement diagnostics (home-assistant#170184) Set serial port description from `description`, not `product` (home-assistant#170160) Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Update infrared-protocols to 4.0.0 (home-assistant#170297) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> data grand lyon: use test fixture instead of manual patching (home-assistant#170294) Handle empty BSB-LAN heating circuits (home-assistant#170249) Add diagnostics platform to Home Assistant Connect ZBT-2 (home-assistant#170158) Fix deprecated_class to work with inheritance (home-assistant#170137) Skip offline devices instead of aborting ViCare diagnostics (home-assistant#170106) Fix local API incorrectly marking devices as unavailable in Overkiz (home-assistant#170118) Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io> Add RepairsFlowResult TypeAlias (home-assistant#170263) Fix flaky diagnostics test for Novy Cooker Hood (home-assistant#170299) Fix spelling of RS-232 in Denon RS-232 integration (home-assistant#170298) data grand lyon: implement reconfiguration flow (home-assistant#170210) Add shared test mocks for the Infrared integration (home-assistant#170296) Co-authored-by: Claude <noreply@anthropic.com> Bump renault-api to 0.5.8 (home-assistant#170309) Bump indevolt api to 1.7.2 (home-assistant#170310) Update IQS to platinum for UptimeRobot (home-assistant#170260) Add player specific sensor to nintendo_parental_controls (home-assistant#155786) Co-authored-by: Joshua Peisach (ItzSwirlz) <itzswirlz2020@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Erik Montnemery <erik@montnemery.com> Fix hassio.backup_partial AttributeError when folders are specified (home-assistant#170312) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add backoff to forbidden packages (home-assistant#170242) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add tuya water timer data points (home-assistant#170314) Add more entities for Tuya camera (home-assistant#169966) Co-authored-by: mik-laj <12058428+mik-laj@users.noreply.github.com> Co-authored-by: Norbert Rittel <norbert@rittel.de> Add Tuya DLQ fixture (home-assistant#169585) Update rf-protocols to 3.0.0 (home-assistant#170301) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add Message Expire Interval option to MQTT publish service (home-assistant#169317) Co-authored-by: Copilot <copilot@github.com> Add new CentriConnect component (home-assistant#166933) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Watts: add HVAC action + preset mode (home-assistant#169546) Co-authored-by: Copilot <copilot@github.com> Co-authored-by: Joostlek <joostlek@outlook.com> Add quality scale for airnow integration (home-assistant#169709) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Fix nobo_hub NoboProfileSelector class-level mutable defaults (home-assistant#170119) Add cover support to control4 (home-assistant#169417) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Add Mitsubishi brand (home-assistant#169924) Co-authored-by: Nikolai Rahimi <nikolairahimi@users.noreply.github.com> Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Fix coordinator data mutation in YouTube diagnostics (home-assistant#170300) Co-authored-by: FIls0010 <a1867444@adelaide.edu.au> Bump aiovodafone to 3.2.0 (home-assistant#170322) Add countdown number for Tuya sfkzq single-valve timers (home-assistant#170318) Allow setting hvac_mode in generic_thermostat.set_temperature (home-assistant#168062) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Z-Wave.me: Allow updating entities (home-assistant#167839) Fix MQTT device discovery not using shared QoS and encoding options (home-assistant#170195) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Google assistant temperature setting active thermostat mode (home-assistant#166448) Co-authored-by: Lucas Sanchez Sagrado <lucas.sansag@educa.jcyl.es> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale to Tesla Fleet integration (home-assistant#160475) Co-authored-by: Claude <noreply@anthropic.com> Only use SmartThings switch for light if it should (home-assistant#166424) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale file to Ness Alarm (home-assistant#163425) Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Fix Shelly media player availability (home-assistant#170319) Update discovery description wording (home-assistant#170325) Bump teltasync to 0.3.0, fix discovery for older devices (home-assistant#169660) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete exception translations for Indevolt (home-assistant#170291) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add Kiosker switch platform (home-assistant#168858) Add `ZWaveNodeBaseEntity` for Z-Wave node-level entities (home-assistant#170124) Add number platform to eurotronic_cometblue (home-assistant#168119) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Bump aiotankerkoenig to 0.5.3 (home-assistant#170224) Fix entities refresh for UptimeRobot (home-assistant#170217) Update easyEnergy exception and icon translations (home-assistant#170218) Add more Gen1 sensors to indevolt (home-assistant#170191) Bump letpot to 0.7.0 (home-assistant#169868) Migrate Thermo Beacon to config entry runtime data (home-assistant#170226) Migrate Sensirion BLE to config entry runtime data (home-assistant#170227) Co-authored-by: Josef Zweck <josef@zweck.dev> Bump imgw-pib to 2.1.2 (home-assistant#170274) Bump serialx to 1.7.2 (home-assistant#170272) Bump aioamazondevices to 13.5.0 (home-assistant#170258) Update upb-lib to 0.7.0 (home-assistant#170051) Bump qbittorrent-api to 2026.5.1 (home-assistant#170181) Use VERSION from PrusaLinkConfigFlow in prusalink (home-assistant#170200) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Migrate Duco to python-duco-connectivity and remove temperature sensors (home-assistant#170237) fix: Do not forget segments from state when a new config arrives (home-assistant#170265) Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete icon translations for Indevolt (home-assistant#170292) Align Indevolt quality scale with documentation (home-assistant#170289) Apply strict typing to Indevolt integration (home-assistant#170288) iaqualink: set system specific polling interval (home-assistant#170279) Use standby for HDMI-CEC turn off (home-assistant#170206) prusalink: add continue-job button for ATTENTION state (home-assistant#170193) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> data grand lyon: implement diagnostics (home-assistant#170184) Set serial port description from `description`, not `product` (home-assistant#170160) Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Update infrared-protocols to 4.0.0 (home-assistant#170297) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> data grand lyon: use test fixture instead of manual patching (home-assistant#170294) Handle empty BSB-LAN heating circuits (home-assistant#170249) Add diagnostics platform to Home Assistant Connect ZBT-2 (home-assistant#170158) Fix deprecated_class to work with inheritance (home-assistant#170137) Skip offline devices instead of aborting ViCare diagnostics (home-assistant#170106) Fix local API incorrectly marking devices as unavailable in Overkiz (home-assistant#170118) Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io> Add RepairsFlowResult TypeAlias (home-assistant#170263) Fix flaky diagnostics test for Novy Cooker Hood (home-assistant#170299) Fix spelling of RS-232 in Denon RS-232 integration (home-assistant#170298) data grand lyon: implement reconfiguration flow (home-assistant#170210) Add shared test mocks for the Infrared integration (home-assistant#170296) Co-authored-by: Claude <noreply@anthropic.com> Bump renault-api to 0.5.8 (home-assistant#170309) Bump indevolt api to 1.7.2 (home-assistant#170310) Update IQS to platinum for UptimeRobot (home-assistant#170260) Add player specific sensor to nintendo_parental_controls (home-assistant#155786) Co-authored-by: Joshua Peisach (ItzSwirlz) <itzswirlz2020@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Erik Montnemery <erik@montnemery.com> Fix hassio.backup_partial AttributeError when folders are specified (home-assistant#170312) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add backoff to forbidden packages (home-assistant#170242) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add tuya water timer data points (home-assistant#170314) Add more entities for Tuya camera (home-assistant#169966) Co-authored-by: mik-laj <12058428+mik-laj@users.noreply.github.com> Co-authored-by: Norbert Rittel <norbert@rittel.de> Add Tuya DLQ fixture (home-assistant#169585) Update rf-protocols to 3.0.0 (home-assistant#170301) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add Message Expire Interval option to MQTT publish service (home-assistant#169317) Co-authored-by: Copilot <copilot@github.com> Add new CentriConnect component (home-assistant#166933) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Watts: add HVAC action + preset mode (home-assistant#169546) Co-authored-by: Copilot <copilot@github.com> Co-authored-by: Joostlek <joostlek@outlook.com> Add quality scale for airnow integration (home-assistant#169709) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Fix nobo_hub NoboProfileSelector class-level mutable defaults (home-assistant#170119) Add cover support to control4 (home-assistant#169417) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Add Mitsubishi brand (home-assistant#169924) Co-authored-by: Nikolai Rahimi <nikolairahimi@users.noreply.github.com> Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Fix coordinator data mutation in YouTube diagnostics (home-assistant#170300) Co-authored-by: FIls0010 <a1867444@adelaide.edu.au> Bump aiovodafone to 3.2.0 (home-assistant#170322) Add countdown number for Tuya sfkzq single-valve timers (home-assistant#170318) Allow setting hvac_mode in generic_thermostat.set_temperature (home-assistant#168062) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Z-Wave.me: Allow updating entities (home-assistant#167839) Fix MQTT device discovery not using shared QoS and encoding options (home-assistant#170195) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Google assistant temperature setting active thermostat mode (home-assistant#166448) Co-authored-by: Lucas Sanchez Sagrado <lucas.sansag@educa.jcyl.es> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale to Tesla Fleet integration (home-assistant#160475) Co-authored-by: Claude <noreply@anthropic.com> Only use SmartThings switch for light if it should (home-assistant#166424) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale file to Ness Alarm (home-assistant#163425) Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Fix Shelly media player availability (home-assistant#170319) Update discovery description wording (home-assistant#170325) Bump teltasync to 0.3.0, fix discovery for older devices (home-assistant#169660) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete exception translations for Indevolt (home-assistant#170291) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add Kiosker switch platform (home-assistant#168858) Add `ZWaveNodeBaseEntity` for Z-Wave node-level entities (home-assistant#170124) Add number platform to eurotronic_cometblue (home-assistant#168119) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Bump aiotankerkoenig to 0.5.3 (home-assistant#170224) Fix entities refresh for UptimeRobot (home-assistant#170217) Update easyEnergy exception and icon translations (home-assistant#170218) Add more Gen1 sensors to indevolt (home-assistant#170191) Bump letpot to 0.7.0 (home-assistant#169868) Migrate Thermo Beacon to config entry runtime data (home-assistant#170226) Migrate Sensirion BLE to config entry runtime data (home-assistant#170227) Co-authored-by: Josef Zweck <josef@zweck.dev> Bump imgw-pib to 2.1.2 (home-assistant#170274) Bump serialx to 1.7.2 (home-assistant#170272) Bump aioamazondevices to 13.5.0 (home-assistant#170258) Update upb-lib to 0.7.0 (home-assistant#170051) Bump qbittorrent-api to 2026.5.1 (home-assistant#170181) Use VERSION from PrusaLinkConfigFlow in prusalink (home-assistant#170200) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Migrate Duco to python-duco-connectivity and remove temperature sensors (home-assistant#170237) fix: Do not forget segments from state when a new config arrives (home-assistant#170265) Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete icon translations for Indevolt (home-assistant#170292) Align Indevolt quality scale with documentation (home-assistant#170289) Apply strict typing to Indevolt integration (home-assistant#170288) iaqualink: set system specific polling interval (home-assistant#170279) Use standby for HDMI-CEC turn off (home-assistant#170206) prusalink: add continue-job button for ATTENTION state (home-assistant#170193) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> data grand lyon: implement diagnostics (home-assistant#170184) Set serial port description from `description`, not `product` (home-assistant#170160) Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Update infrared-protocols to 4.0.0 (home-assistant#170297) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> data grand lyon: use test fixture instead of manual patching (home-assistant#170294) Handle empty BSB-LAN heating circuits (home-assistant#170249) Add diagnostics platform to Home Assistant Connect ZBT-2 (home-assistant#170158) Fix deprecated_class to work with inheritance (home-assistant#170137) Skip offline devices instead of aborting ViCare diagnostics (home-assistant#170106) Fix local API incorrectly marking devices as unavailable in Overkiz (home-assistant#170118) Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io> Add RepairsFlowResult TypeAlias (home-assistant#170263) Fix flaky diagnostics test for Novy Cooker Hood (home-assistant#170299) Fix spelling of RS-232 in Denon RS-232 integration (home-assistant#170298) data grand lyon: implement reconfiguration flow (home-assistant#170210) Add shared test mocks for the Infrared integration (home-assistant#170296) Co-authored-by: Claude <noreply@anthropic.com> Bump renault-api to 0.5.8 (home-assistant#170309) Bump indevolt api to 1.7.2 (home-assistant#170310) Update IQS to platinum for UptimeRobot (home-assistant#170260) Add player specific sensor to nintendo_parental_controls (home-assistant#155786) Co-authored-by: Joshua Peisach (ItzSwirlz) <itzswirlz2020@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Erik Montnemery <erik@montnemery.com> Fix hassio.backup_partial AttributeError when folders are specified (home-assistant#170312) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add backoff to forbidden packages (home-assistant#170242) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add tuya water timer data points (home-assistant#170314) Add more entities for Tuya camera (home-assistant#169966) Co-authored-by: mik-laj <12058428+mik-laj@users.noreply.github.com> Co-authored-by: Norbert Rittel <norbert@rittel.de> Add Tuya DLQ fixture (home-assistant#169585) Update rf-protocols to 3.0.0 (home-assistant#170301) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Add Message Expire Interval option to MQTT publish service (home-assistant#169317) Co-authored-by: Copilot <copilot@github.com> Add new CentriConnect component (home-assistant#166933) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Watts: add HVAC action + preset mode (home-assistant#169546) Co-authored-by: Copilot <copilot@github.com> Co-authored-by: Joostlek <joostlek@outlook.com> Add quality scale for airnow integration (home-assistant#169709) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Fix nobo_hub NoboProfileSelector class-level mutable defaults (home-assistant#170119) Add cover support to control4 (home-assistant#169417) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Add Mitsubishi brand (home-assistant#169924) Co-authored-by: Nikolai Rahimi <nikolairahimi@users.noreply.github.com> Co-authored-by: Paulus Schoutsen <balloob@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Fix coordinator data mutation in YouTube diagnostics (home-assistant#170300) Co-authored-by: FIls0010 <a1867444@adelaide.edu.au> Bump aiovodafone to 3.2.0 (home-assistant#170322) Add countdown number for Tuya sfkzq single-valve timers (home-assistant#170318) Allow setting hvac_mode in generic_thermostat.set_temperature (home-assistant#168062) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Z-Wave.me: Allow updating entities (home-assistant#167839) Fix MQTT device discovery not using shared QoS and encoding options (home-assistant#170195) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Google assistant temperature setting active thermostat mode (home-assistant#166448) Co-authored-by: Lucas Sanchez Sagrado <lucas.sansag@educa.jcyl.es> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale to Tesla Fleet integration (home-assistant#160475) Co-authored-by: Claude <noreply@anthropic.com> Only use SmartThings switch for light if it should (home-assistant#166424) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Add quality scale file to Ness Alarm (home-assistant#163425) Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Fix Shelly media player availability (home-assistant#170319) Update discovery description wording (home-assistant#170325) Bump teltasync to 0.3.0, fix discovery for older devices (home-assistant#169660) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Complete exception translations for Indevolt (home-assistant#170291) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Add Kiosker switch platform (home-assistant#168858) Add `ZWaveNodeBaseEntity` for Z-Wave node-level entities (home-assistant#170124) Add number platform to eurotronic_cometblue (home-assistant#168119) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Proposed change
Initial implementation of 'cover' support for control4
Type of change
Additional information
Checklist
ruff format homeassistant tests)If user exposed functionality or configuration variables are added/changed:
If the code communicates with devices, web services, or third-party tools:
Updated and included derived files by running:
python3 -m script.hassfest.requirements_all.txt.Updated by running
python3 -m script.gen_requirements_all.To help with the load of incoming pull requests:
I have submitted a doc PR at home-assistant/home-assistant.io#45066