1
mirror of https://github.com/home-assistant/core synced 2024-08-02 23:40:32 +02:00
ha-core/homeassistant/components/onvif/base.py
2022-01-04 13:48:26 +01:00

46 lines
1.8 KiB
Python

"""Base classes for ONVIF entities."""
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC
from homeassistant.helpers.entity import DeviceInfo, Entity
from .const import DOMAIN
from .device import ONVIFDevice
from .models import Profile
class ONVIFBaseEntity(Entity):
"""Base class common to all ONVIF entities."""
def __init__(self, device: ONVIFDevice, profile: Profile = None) -> None:
"""Initialize the ONVIF entity."""
self.device: ONVIFDevice = device
self.profile: Profile = profile
@property
def available(self):
"""Return True if device is available."""
return self.device.available
@property
def device_info(self) -> DeviceInfo:
"""Return a device description for device registry."""
connections = None
if self.device.info.mac:
connections = {(CONNECTION_NETWORK_MAC, self.device.info.mac)}
return DeviceInfo(
connections=connections,
identifiers={
# MAC address is not always available, and given the number
# of non-conformant ONVIF devices we have historically supported,
# we can not guarantee serial number either. Due to this, we have
# adopted an either/or approach in the config entry setup, and can
# guarantee that one or the other will be populated.
# See: https://github.com/home-assistant/core/issues/35883
(DOMAIN, self.device.info.mac or self.device.info.serial_number)
},
manufacturer=self.device.info.manufacturer,
model=self.device.info.model,
name=self.device.name,
sw_version=self.device.info.fw_version,
configuration_url=f"http://{self.device.host}:{self.device.port}",
)