Przeglądaj źródła

Set UniFi WiFi key on check-in and add UniFi available binary sensor

ZiB 4 miesięcy temu
rodzic
commit
bde2568bd4

+ 31 - 1
custom_components/room_cal_ha/binary_sensor.py

@@ -20,6 +20,8 @@ from .const import (
 )
 from .coordinator import CoordinatorData, RoomCalCoordinator
 
+UNIFI_DOMAIN = "unifi"
+
 
 async def async_setup_entry(
   hass: HomeAssistant,
@@ -32,7 +34,10 @@ async def async_setup_entry(
     identifiers={(DOMAIN, f"{entry.entry_id}_room_state")},
     name=device_name,
   )
-  async_add_entities([StaleSensor(coordinator, entry, device_info)])
+  async_add_entities([
+    StaleSensor(coordinator, entry, device_info),
+    UnifiAvailableSensor(coordinator, entry, device_info),
+  ])
 
 
 class StaleSensor(CoordinatorEntity[RoomCalCoordinator], BinarySensorEntity):
@@ -66,3 +71,28 @@ class StaleSensor(CoordinatorEntity[RoomCalCoordinator], BinarySensorEntity):
         return True
 
     return False
+
+
+class UnifiAvailableSensor(CoordinatorEntity[RoomCalCoordinator], BinarySensorEntity):
+  _attr_has_entity_name = True
+  _attr_name = "UniFi"
+  _attr_icon = "mdi:wifi-check"
+
+  def __init__(
+    self,
+    coordinator: RoomCalCoordinator,
+    entry: ConfigEntry,
+    device_info: DeviceInfo,
+  ) -> None:
+    super().__init__(coordinator)
+    self._entry = entry
+    self._attr_unique_id = f"{entry.entry_id}_unifi_available"
+    self._attr_device_info = device_info
+
+  @property
+  def is_on(self) -> bool:
+    for config_entry in self.hass.config_entries.async_loaded_entries(UNIFI_DOMAIN):
+      hub = config_entry.runtime_data
+      if hub.available:
+        return True
+    return False

+ 7 - 0
custom_components/room_cal_ha/coordinator.py

@@ -232,6 +232,13 @@ class RoomCalCoordinator(DataUpdateCoordinator[CoordinatorData]):
 
   async def _async_do_check_in(self) -> None:
     await self.async_promote_next_to_current()
+    current = self.data.current
+    if isinstance(current.wifi_ssid, str) and isinstance(current.wifi_key, str):
+      from .wifi import async_set_wifi_key
+      try:
+        await async_set_wifi_key(self.hass, current.wifi_ssid, current.wifi_key)
+      except Exception as err:
+        _LOGGER.warning("Failed to set WiFi key on check-in: %s", err)
     if self._guest_mode_switch is not None:
       await self._guest_mode_switch.async_turn_on()