Add support for ESPHome update entities to be checked on demand (#123161)

This commit is contained in:
Jesse Hills 2024-08-06 20:12:31 +12:00 committed by GitHub
parent 21da79a249
commit 164cfa85da
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 26 additions and 5 deletions

View file

@ -17,7 +17,7 @@
"mqtt": ["esphome/discover/#"],
"quality_scale": "platinum",
"requirements": [
"aioesphomeapi==24.6.2",
"aioesphomeapi==25.0.0",
"esphome-dashboard-api==1.2.3",
"bleak-esphome==1.0.0"
],

View file

@ -8,6 +8,7 @@ from typing import Any
from aioesphomeapi import (
DeviceInfo as ESPHomeDeviceInfo,
EntityInfo,
UpdateCommand,
UpdateInfo,
UpdateState,
)
@ -259,9 +260,15 @@ class ESPHomeUpdateEntity(EsphomeEntity[UpdateInfo, UpdateState], UpdateEntity):
"""Return the title of the update."""
return self._state.title
@convert_api_error_ha_error
async def async_update(self) -> None:
"""Command device to check for update."""
if self.available:
self._client.update_command(key=self._key, command=UpdateCommand.CHECK)
@convert_api_error_ha_error
async def async_install(
self, version: str | None, backup: bool, **kwargs: Any
) -> None:
"""Update the current value."""
self._client.update_command(key=self._key, install=True)
"""Command device to install update."""
self._client.update_command(key=self._key, command=UpdateCommand.INSTALL)

View file

@ -237,7 +237,7 @@ aioelectricitymaps==0.4.0
aioemonitor==1.0.5
# homeassistant.components.esphome
aioesphomeapi==24.6.2
aioesphomeapi==25.0.0
# homeassistant.components.flo
aioflo==2021.11.0

View file

@ -225,7 +225,7 @@ aioelectricitymaps==0.4.0
aioemonitor==1.0.5
# homeassistant.components.esphome
aioesphomeapi==24.6.2
aioesphomeapi==25.0.0
# homeassistant.components.flo
aioflo==2021.11.0

View file

@ -8,6 +8,7 @@ from aioesphomeapi import (
APIClient,
EntityInfo,
EntityState,
UpdateCommand,
UpdateInfo,
UpdateState,
UserService,
@ -15,6 +16,10 @@ from aioesphomeapi import (
import pytest
from homeassistant.components.esphome.dashboard import async_get_dashboard
from homeassistant.components.homeassistant import (
DOMAIN as HOMEASSISTANT_DOMAIN,
SERVICE_UPDATE_ENTITY,
)
from homeassistant.components.update import (
DOMAIN as UPDATE_DOMAIN,
SERVICE_INSTALL,
@ -527,3 +532,12 @@ async def test_generic_device_update_entity_has_update(
assert state is not None
assert state.state == STATE_ON
assert state.attributes["in_progress"] == 50
await hass.services.async_call(
HOMEASSISTANT_DOMAIN,
SERVICE_UPDATE_ENTITY,
{ATTR_ENTITY_ID: "update.test_myupdate"},
blocking=True,
)
mock_client.update_command.assert_called_with(key=1, command=UpdateCommand.CHECK)