From eedc7792c8126bd02744a1c7cf656b18d831c515 Mon Sep 17 00:00:00 2001 From: "alexei.dolgolyov" Date: Fri, 30 Jan 2026 15:41:58 +0300 Subject: [PATCH] Add album id sensor that has primary share link url attribute --- .../immich_album_watcher/sensor.py | 40 +++++++++++++++++++ .../immich_album_watcher/strings.json | 3 ++ 2 files changed, 43 insertions(+) diff --git a/custom_components/immich_album_watcher/sensor.py b/custom_components/immich_album_watcher/sensor.py index cfd3484..c2da8d5 100644 --- a/custom_components/immich_album_watcher/sensor.py +++ b/custom_components/immich_album_watcher/sensor.py @@ -63,6 +63,7 @@ async def async_setup_entry( coordinator = subentry_data.coordinator entities: list[SensorEntity] = [ + ImmichAlbumIdSensor(coordinator, entry, subentry), ImmichAlbumAssetCountSensor(coordinator, entry, subentry), ImmichAlbumPhotoCountSensor(coordinator, entry, subentry), ImmichAlbumVideoCountSensor(coordinator, entry, subentry), @@ -160,6 +161,45 @@ class ImmichAlbumBaseSensor(CoordinatorEntity[ImmichAlbumWatcherCoordinator], Se return {"assets": assets} +class ImmichAlbumIdSensor(ImmichAlbumBaseSensor): + """Sensor exposing the Immich album ID.""" + + _attr_icon = "mdi:identifier" + _attr_translation_key = "album_id" + + def __init__( + self, + coordinator: ImmichAlbumWatcherCoordinator, + entry: ConfigEntry, + subentry: ConfigSubentry, + ) -> None: + """Initialize the sensor.""" + super().__init__(coordinator, entry, subentry) + self._attr_unique_id = f"{self._unique_id_prefix}_album_id" + + @property + def native_value(self) -> str | None: + """Return the album ID.""" + if self._album_data: + return self._album_data.id + return None + + @property + def extra_state_attributes(self) -> dict[str, Any]: + """Return extra state attributes.""" + if not self._album_data: + return {} + + attrs: dict[str, Any] = {} + + # Primary share URL (prefers public, falls back to protected) + share_url = self.coordinator.get_any_url() + if share_url: + attrs["share_url"] = share_url + + return attrs + + class ImmichAlbumAssetCountSensor(ImmichAlbumBaseSensor): """Sensor representing an Immich album asset count.""" diff --git a/custom_components/immich_album_watcher/strings.json b/custom_components/immich_album_watcher/strings.json index bc1102c..7615f51 100644 --- a/custom_components/immich_album_watcher/strings.json +++ b/custom_components/immich_album_watcher/strings.json @@ -1,6 +1,9 @@ { "entity": { "sensor": { + "album_id": { + "name": "{album_name}: Album ID" + }, "album_asset_count": { "name": "{album_name}: Asset Count" },