core/homeassistant/components/zha/homeassistant_hardware.py

44 lines
1.2 KiB
Python

"""Home Assistant Hardware firmware utilities."""
from __future__ import annotations
from homeassistant.components.homeassistant_hardware.util import (
ApplicationType,
FirmwareInfo,
OwningIntegration,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from .const import DOMAIN
from .helpers import get_zha_gateway
@callback
def get_firmware_info(
hass: HomeAssistant, config_entry: ConfigEntry
) -> FirmwareInfo | None:
"""Return firmware information for the ZHA instance, synchronously."""
# We only support EZSP firmware for now
if config_entry.data.get("radio_type", None) != "ezsp":
return None
if (device := config_entry.data.get("device", {}).get("path")) is None:
return None
try:
gateway = get_zha_gateway(hass)
except ValueError:
firmware_version = None
else:
firmware_version = gateway.state.node_info.version
return FirmwareInfo(
device=device,
firmware_type=ApplicationType.EZSP,
firmware_version=firmware_version,
source=DOMAIN,
owners=[OwningIntegration(config_entry_id=config_entry.entry_id)],
)