Parcourir la source

Drop guest script dispatch; arrived/departed tracked via native HA automations

ZiB il y a 3 mois
Parent
commit
06205901fc

+ 2 - 20
custom_components/room_cal_ha/config_flow.py

@@ -26,8 +26,7 @@ from .const import (
   CONF_API_TOKEN,
   CONF_CALDAV_URL,
   CONF_CALENDAR_NAME,
-  CONF_GUEST_SCRIPT,
-  CONF_PASSWORD,
+CONF_PASSWORD,
   CONF_REFRESH_INTERVAL,
   CONF_RESERVATION_DEFAULTS,
   CONF_ROOM_NAME,
@@ -166,7 +165,7 @@ class RoomCalOptionsFlow(OptionsFlow):
   ) -> ConfigFlowResult:
     return self.async_show_menu(
       step_id="configure",
-      menu_options=["sync_mode", "defaults", "locks", "scripts"],
+      menu_options=["sync_mode", "defaults", "locks"],
     )
 
   async def async_step_sync_mode(
@@ -365,23 +364,6 @@ class RoomCalOptionsFlow(OptionsFlow):
     )
 
 
-  async def async_step_scripts(
-    self, user_input: dict[str, Any] | None = None
-  ) -> ConfigFlowResult:
-    if user_input is not None:
-      self._pending_options[CONF_GUEST_SCRIPT] = (user_input.get(CONF_GUEST_SCRIPT) or "").strip() or None
-      return self.async_create_entry(data=self._pending_options)
-
-    self._pending_options = {**self.config_entry.options}
-    opts = self.config_entry.options
-    return self.async_show_form(
-      step_id="scripts",
-      data_schema=vol.Schema({
-        vol.Optional(CONF_GUEST_SCRIPT, default=opts.get(CONF_GUEST_SCRIPT) or ""): str,
-      }),
-    )
-
-
 class _ApiAuthError(Exception):
   pass
 

+ 0 - 2
custom_components/room_cal_ha/const.py

@@ -52,5 +52,3 @@ STORE_NEXT = "next"
 STORE_ARRIVED = "current_arrived"
 STORE_DEPARTED = "current_departed"
 
-# Script config
-CONF_GUEST_SCRIPT = "guest_script"

+ 0 - 24
custom_components/room_cal_ha/coordinator.py

@@ -13,7 +13,6 @@ from homeassistant.util import dt as dt_util
 
 from .backends import BackendAuthError, BackendConnectError, CalDavBackend, RoomCalApiBackend
 from .const import (
-  CONF_GUEST_SCRIPT,
   CONF_REFRESH_INTERVAL,
   CONF_RESERVATION_DEFAULTS,
   CONF_SYNC_MODE,
@@ -714,38 +713,15 @@ class RoomCalCoordinator(DataUpdateCoordinator[CoordinatorData]):
   async def async_set_arrived(self, arrived: bool) -> None:
     self._current_arrived = arrived
     await self.store.async_set_arrived(arrived)
-    if arrived:
-      await self._async_run_guest_script("arrived")
     if self.data is not None:
       self.async_set_updated_data(dataclass_replace(self.data, current_arrived=arrived))
 
   async def async_set_departed(self, departed: bool) -> None:
     self._current_departed = departed
     await self.store.async_set_departed(departed)
-    if departed:
-      await self._async_run_guest_script("departed")
     if self.data is not None:
       self.async_set_updated_data(dataclass_replace(self.data, current_departed=departed))
 
-  async def _async_run_guest_script(self, event_type: str) -> None:
-    script_id = self.entry.options.get(CONF_GUEST_SCRIPT)
-    if not script_id:
-      return
-    try:
-      await self.hass.services.async_call(
-        "script", "turn_on",
-        {
-          "entity_id": script_id,
-          "variables": {
-            "event_type": event_type,
-            "entry_id": self.entry.entry_id,
-          },
-        },
-        blocking=False,
-      )
-    except Exception as err:
-      _LOGGER.warning("Failed to run guest script '%s': %s", script_id, err)
-
   def cancel_mode_sync(self) -> None:
     for cancel in self._mode_sync_handles:
       cancel()

+ 1 - 9
custom_components/room_cal_ha/strings.json

@@ -38,8 +38,7 @@
         "menu_options": {
           "sync_mode": "Sync Mode & Connection",
           "defaults": "Reservation Defaults",
-          "locks": "zLock Slots",
-          "scripts": "Scripts"
+          "locks": "zLock Slots"
         }
       },
       "sync_mode": {
@@ -85,13 +84,6 @@
           "zlock_entries": "zLock Slots Integrations",
           "zwave_slot": "Code Slot"
         }
-      },
-      "scripts": {
-        "title": "Scripts",
-        "description": "Configure a script to call when a guest arrives or departs. The script is called with a variable 'event_type' set to 'arrived' or 'departed'. Leave blank to disable.",
-        "data": {
-          "guest_script": "Guest Event Script"
-        }
       }
     },
     "error": {

+ 1 - 9
custom_components/room_cal_ha/translations/en.json

@@ -38,8 +38,7 @@
         "menu_options": {
           "sync_mode": "Sync Mode & Connection",
           "defaults": "Reservation Defaults",
-          "locks": "zLock Slots",
-          "scripts": "Scripts"
+          "locks": "zLock Slots"
         }
       },
       "sync_mode": {
@@ -85,13 +84,6 @@
           "zlock_entries": "zLock Slots Integrations",
           "zwave_slot": "Code Slot"
         }
-      },
-      "scripts": {
-        "title": "Scripts",
-        "description": "Configure a script to call when a guest arrives or departs. The script is called with a variable 'event_type' set to 'arrived' or 'departed'. Leave blank to disable.",
-        "data": {
-          "guest_script": "Guest Event Script"
-        }
       }
     },
     "error": {

+ 0 - 57
tests/test_arrived_departed.py

@@ -13,7 +13,6 @@ from pytest_homeassistant_custom_component.common import MockConfigEntry
 from custom_components.room_cal_ha.binary_sensor import ArrivedSensor, DepartedSensor
 from custom_components.room_cal_ha.button import GuestArrivedButton, GuestDepartedButton
 from custom_components.room_cal_ha.const import (
-  CONF_GUEST_SCRIPT,
   CONF_SYNC_MODE,
   DOMAIN,
   STORE_CURRENT,
@@ -254,59 +253,3 @@ async def test_flags_reset_on_checkout(coord: RoomCalCoordinator):
   assert coord.data.current_arrived is False
 
 
-# ---------------------------------------------------------------------------
-# Script dispatch
-# ---------------------------------------------------------------------------
-
-async def test_set_arrived_dispatches_script(hass: HomeAssistant):
-  entry = _make_entry(hass, {CONF_SYNC_MODE: SYNC_MODE_MANUAL, CONF_GUEST_SCRIPT: "script.guest_event"})
-  c = RoomCalCoordinator(hass, entry)
-  await c.async_setup()
-  await c.async_refresh()
-
-  with patch.object(c, "_async_run_guest_script", new=AsyncMock()) as mock_script:
-    await c.async_set_arrived(True)
-
-  mock_script.assert_awaited_once_with("arrived")
-
-
-async def test_set_departed_dispatches_script(hass: HomeAssistant):
-  entry = _make_entry(hass, {CONF_SYNC_MODE: SYNC_MODE_MANUAL, CONF_GUEST_SCRIPT: "script.guest_event"})
-  c = RoomCalCoordinator(hass, entry)
-  await c.async_setup()
-  await c.async_refresh()
-
-  with patch.object(c, "_async_run_guest_script", new=AsyncMock()) as mock_script:
-    await c.async_set_departed(True)
-
-  mock_script.assert_awaited_once_with("departed")
-
-
-async def test_guest_script_includes_entry_id(hass: HomeAssistant):
-  entry = _make_entry(hass, {CONF_SYNC_MODE: SYNC_MODE_MANUAL, CONF_GUEST_SCRIPT: "script.guest_event"})
-  c = RoomCalCoordinator(hass, entry)
-  await c.async_setup()
-
-  with patch("homeassistant.core.ServiceRegistry.async_call", new=AsyncMock()) as mock_call:
-    await c._async_run_guest_script("arrived")
-
-  mock_call.assert_awaited_once()
-  _domain, _service, data = mock_call.call_args.args  # (domain, service, data)
-  assert data["variables"]["event_type"] == "arrived"
-  assert data["variables"]["entry_id"] == entry.entry_id
-
-
-async def test_no_script_dispatched_when_setting_false(hass: HomeAssistant):
-  entry = _make_entry(hass, {CONF_SYNC_MODE: SYNC_MODE_MANUAL, CONF_GUEST_SCRIPT: "script.guest_event"})
-  c = RoomCalCoordinator(hass, entry)
-  await c.async_setup()
-  await c.async_refresh()
-
-  with patch.object(c, "_async_run_guest_script", new=AsyncMock()) as mock_script:
-    await c.async_set_arrived(False)
-  mock_script.assert_not_awaited()
-
-
-async def test_async_run_guest_script_no_op_when_not_configured(coord: RoomCalCoordinator):
-  # coord has no CONF_GUEST_SCRIPT — should return early with no error
-  await coord._async_run_guest_script("arrived")