developers.home-assistant/docs/core/entity/update.md

5.4 KiB

title sidebar_label
Update entity Update

An update entity is an entity that indicates if an update is available for a device or service. This can be any update, including update of a firmware for a device like a light bulb or router, or software updates for things like add-ons or containers.

It can be used for:

  • Providing an indicator if an update is available for a device or service.
  • An install method to allow installing an update or a specific version of the software.
  • Allow for offering backups before installing a new update.

Properties

:::tip Properties should always only return information from memory and not do I/O (like network requests). Implement update() or async_update() to fetch data. :::

Name Type Default Description
auto_update bool False The device or service that the entity represents has auto update logic. When this is set to True you can not skip updates.
in_progress bool None Update installation progress. Should return a boolean (True if in progress, False if not).
installed_version str None The currently installed and used version of the software.
latest_version str None The latest version of the software available.
release_summary str None Summary of the release notes or changelog. This is not suitable for long changelogs but merely suitable for a short excerpt update description of max 255 characters.
release_url str None URL to the full release notes of the latest version available.
title str None Title of the software. This helps to differentiate between the device or entity name versus the title of the software installed.
update_percentage int None Update installation progress. Can either return a number to indicate the progress from 0 to 100% or None.

Other properties that are common to all entities such as device_class, entity_category, icon, name etc are still applicable.

Supported features

Supported features are defined by using values in the UpdateEntityFeature enum.

Value Description
'BACKUP' A backup can be made automatically, before installing an update.
'INSTALL' The update can be installed from Home Assistant.
'PROGRESS' This integration is able to provide progress information. If omitted, Home Assistant will try to provide a progress status; although it is better if the progress can be extracted from the device or service API.
'SPECIFIC_VERSION' A specific version of an update can be installed using the update.install service action.
'RELEASE_NOTES' The entity provides methods to fetch a complete changelog.

Methods

Compare versions

This method should be implemented when needed to override the default version comparison logic. Here's an example:

def version_is_newer(self, latest_version: str, installed_version: str) -> bool:
    """Return True if latest_version is newer than installed_version."""
    return AwesomeVersion(
        latest_version,
        find_first_match=True,
        ensure_strategy=[AwesomeVersionStrategy.SEMVER],
    ) > AwesomeVersion(
        installed_version,
        find_first_match=True,
        ensure_strategy=[AwesomeVersionStrategy.SEMVER],
    )

It allows developers to specify custom logic for determining if one version is newer than another. First attempt should be based on the strategies provided by the AwesomeVersion library.

Install

This method can be implemented so users can install an offered update directly from within Home Assistant.

This method requires UpdateEntityFeature.INSTALL to be set. Additionally, if this integration supports installing specific version or is capable of backing up before starting the update installation process, UpdateEntityFeature.SPECIFIC_VERSION and UpdateEntityFeature.BACKUP can be set respectively.

class MyUpdate(UpdateEntity):
    # Implement one of these methods.

    def install(
        self, version: str | None, backup: bool, **kwargs: Any
    ) -> None:
        """Install an update."""

    async def async_install(
        self, version: str | None, backup: bool, **kwargs: Any
    ) -> None:
        """Install an update.

        Version can be specified to install a specific version. When `None`, the
        latest version needs to be installed.

        The backup parameter indicates a backup should be taken before
        installing the update.
        """

Release notes

This method can be implemented so users can can get the full release notes in the more-info dialog of the Home Assistant Frontend before they install the update.

The returned string can contain markdown, and the frontend will format that correctly.

This method requires UpdateEntityFeature.RELEASE_NOTES to be set.

class MyUpdate(UpdateEntity):
    # Implement one of these methods.

    def release_notes(self) -> str | None:
        """Return the release notes."""
        return "Lorem ipsum"

    async def async_release_notes(self) -> str | None:
        """Return the release notes."""
        return "Lorem ipsum"

Available device classes

Optionally specifies what type of entity it is.

Constant Description
UpdateDeviceClass.FIRMWARE The update is a firmware update for a device.