1 """Axis network device abstraction."""
3 from __future__
import annotations
5 from typing
import TYPE_CHECKING, Any
14 from ..const
import ATTR_MANUFACTURER, DOMAIN
as AXIS_DOMAIN
15 from .config
import AxisConfig
16 from .entity_loader
import AxisEntityLoader
17 from .event_source
import AxisEventSource
20 from ..
import AxisConfigEntry
24 """Manages a Axis device."""
27 self, hass: HomeAssistant, config_entry: AxisConfigEntry, api: axis.AxisDevice
29 """Initialize the device."""
31 self.
configconfig = AxisConfig.from_config_entry(config_entry)
40 self.additional_diagnostics: dict[str, Any] = {}
44 """Connection state to the device."""
51 """Device specific event to signal a change in connection status."""
56 """Device specific event to signal a change in device address."""
57 return f
"axis_new_address_{self.config.entry.entry_id}"
61 hass: HomeAssistant, config_entry: AxisConfigEntry
63 """Handle signals of device getting new address.
65 Called when config entry is updated.
66 This is a static method because a class method (bound method),
67 cannot be used with weak references.
69 hub = config_entry.runtime_data
70 hub.config = AxisConfig.from_config_entry(config_entry)
71 hub.event_source.config_entry = config_entry
72 hub.api.config.host = hub.config.host
76 """Update device registry."""
77 device_registry = dr.async_get(self.
hasshass)
78 device_registry.async_get_or_create(
79 config_entry_id=self.
configconfig.entry.entry_id,
80 configuration_url=self.
apiapi.config.url,
81 connections={(CONNECTION_NETWORK_MAC, self.
unique_idunique_id)},
82 identifiers={(AXIS_DOMAIN, self.
unique_idunique_id)},
83 manufacturer=ATTR_MANUFACTURER,
84 model=f
"{self.config.model} {self.product_type}",
85 name=self.
configconfig.name,
93 """Set up the device events."""
97 async
def shutdown(self, event: Event) ->
None:
98 """Stop the event stream."""
103 """Reset this device to default state."""
None __init__(self, HomeAssistant hass, AxisConfigEntry config_entry, axis.AxisDevice api)
None shutdown(self, Event event)
None async_new_address_callback(HomeAssistant hass, AxisConfigEntry config_entry)
str signal_new_address(self)
None async_update_device_registry(self)
str signal_reachable(self)
None async_dispatcher_send(HomeAssistant hass, str signal, *Any args)