1 """Support for bthome event entities."""
3 from __future__
import annotations
5 from dataclasses
import replace
10 EventEntityDescription,
17 from .
import format_discovered_event_class, format_event_dispatcher_name
26 from .types
import BTHomeConfigEntry
28 DESCRIPTIONS_BY_EVENT_CLASS = {
30 key=EVENT_CLASS_BUTTON,
31 translation_key=
"button",
40 device_class=EventDeviceClass.BUTTON,
43 key=EVENT_CLASS_DIMMER,
44 translation_key=
"dimmer",
45 event_types=[
"rotate_left",
"rotate_right"],
51 """Representation of a BTHome event entity."""
53 _attr_should_poll =
False
54 _attr_has_entity_name =
True
60 event: BTHomeBleEvent |
None,
62 """Initialise a BTHome event entity."""
67 base_event_class, _, postfix = event_class.partition(
"_")
68 base_description = DESCRIPTIONS_BY_EVENT_CLASS[base_event_class]
70 postfix_name = f
" {postfix}" if postfix
else ""
71 self.
_attr_name_attr_name = f
"{base_event_class.title()}{postfix_name}"
74 identifiers={(DOMAIN, address)},
75 connections={(dr.CONNECTION_BLUETOOTH, address)},
84 self.
_trigger_event_trigger_event(event[EVENT_TYPE], event[EVENT_PROPERTIES])
87 """Entity added to hass."""
99 self.
_trigger_event_trigger_event(event[EVENT_TYPE], event[EVENT_PROPERTIES])
105 entry: BTHomeConfigEntry,
106 async_add_entities: AddEntitiesCallback,
108 """Set up BTHome event."""
109 coordinator = entry.runtime_data
110 address = coordinator.address
111 ent_reg = er.async_get(hass)
115 for ent_reg_entry
in er.async_entries_for_config_entry(ent_reg, entry.entry_id)
116 if ent_reg_entry.domain ==
"event"
117 and (address_event_class := ent_reg_entry.unique_id.partition(
"-"))
121 def _async_discovered_event_class(event_class: str, event: BTHomeBleEvent) ->
None:
122 """Handle a newly discovered event class with or without a postfix."""
125 entry.async_on_unload(
129 _async_discovered_event_class,
None __init__(self, str address, str event_class, BTHomeBleEvent|None event)
None async_added_to_hass(self)
None _async_handle_event(self, BTHomeBleEvent event)
None _trigger_event(self, str event_type, dict[str, Any]|None event_attributes=None)
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
None async_setup_entry(HomeAssistant hass, BTHomeConfigEntry entry, AddEntitiesCallback async_add_entities)
SignalType[BTHomeBleEvent] format_event_dispatcher_name(str address, str event_class)
SignalType[str, BTHomeBleEvent] format_discovered_event_class(str address)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)