Some checks failed
Validate / Hassfest (push) Has been cancelled
Enable the HAOS integration to optionally connect to the standalone Immich Watcher server for config sync and event reporting. Server-side: - New /api/sync/* endpoints: GET trackers, POST template render, POST event report - API key auth via X-API-Key header (accepts JWT access tokens) Integration-side: - New sync.py: ServerSyncClient with graceful error handling (all methods return defaults on connection failure) - Options flow: optional server_url and server_api_key fields with connection validation - Coordinator: fire-and-forget event reporting to server when album changes are detected - Translations: en.json and ru.json updated with new fields The connection is fully additive -- the integration works identically without a server URL configured. Server failures never break HA. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
269 lines
11 KiB
JSON
269 lines
11 KiB
JSON
{
|
|
"entity": {
|
|
"sensor": {
|
|
"album_id": {
|
|
"name": "Album ID"
|
|
},
|
|
"album_asset_count": {
|
|
"name": "Asset Count"
|
|
},
|
|
"album_photo_count": {
|
|
"name": "Photo Count"
|
|
},
|
|
"album_video_count": {
|
|
"name": "Video Count"
|
|
},
|
|
"album_last_updated": {
|
|
"name": "Last Updated"
|
|
},
|
|
"album_created": {
|
|
"name": "Created"
|
|
},
|
|
"album_public_url": {
|
|
"name": "Public URL"
|
|
},
|
|
"album_protected_url": {
|
|
"name": "Protected URL"
|
|
},
|
|
"album_protected_password": {
|
|
"name": "Protected Password"
|
|
}
|
|
},
|
|
"binary_sensor": {
|
|
"album_new_assets": {
|
|
"name": "New Assets"
|
|
}
|
|
},
|
|
"camera": {
|
|
"album_thumbnail": {
|
|
"name": "Thumbnail"
|
|
}
|
|
},
|
|
"text": {
|
|
"album_protected_password_edit": {
|
|
"name": "Share Password"
|
|
}
|
|
},
|
|
"button": {
|
|
"create_share_link": {
|
|
"name": "Create Share Link"
|
|
},
|
|
"delete_share_link": {
|
|
"name": "Delete Share Link"
|
|
},
|
|
"create_protected_link": {
|
|
"name": "Create Protected Link"
|
|
},
|
|
"delete_protected_link": {
|
|
"name": "Delete Protected Link"
|
|
}
|
|
}
|
|
},
|
|
"config": {
|
|
"step": {
|
|
"user": {
|
|
"title": "Connect to Immich",
|
|
"description": "Enter your Immich server details. You can get an API key from Immich → User Settings → API Keys.",
|
|
"data": {
|
|
"hub_name": "Hub Name",
|
|
"immich_url": "Immich URL",
|
|
"api_key": "API Key"
|
|
},
|
|
"data_description": {
|
|
"hub_name": "A name for this Immich server (used in entity IDs)",
|
|
"immich_url": "The URL of your Immich server (e.g., http://192.168.1.100:2283)",
|
|
"api_key": "Your Immich API key"
|
|
}
|
|
}
|
|
},
|
|
"error": {
|
|
"cannot_connect": "Failed to connect to Immich server",
|
|
"invalid_auth": "Invalid API key",
|
|
"no_albums": "No albums found on the server",
|
|
"unknown": "Unexpected error occurred",
|
|
"server_connect_failed": "Failed to connect to Immich Watcher server"
|
|
},
|
|
"abort": {
|
|
"already_configured": "This Immich server is already configured"
|
|
}
|
|
},
|
|
"config_subentries": {
|
|
"album": {
|
|
"initiate_flow": {
|
|
"user": "Add Album"
|
|
},
|
|
"entry_type": "Album",
|
|
"step": {
|
|
"user": {
|
|
"title": "Add Album to Watch",
|
|
"description": "Select an album from your Immich server to monitor for changes.",
|
|
"data": {
|
|
"album_id": "Album"
|
|
}
|
|
}
|
|
},
|
|
"error": {
|
|
"cannot_connect": "Failed to connect to Immich server"
|
|
},
|
|
"abort": {
|
|
"parent_not_found": "Hub configuration not found",
|
|
"no_albums": "No albums found on the server",
|
|
"all_albums_configured": "All albums are already configured",
|
|
"album_already_configured": "This album is already being watched"
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"step": {
|
|
"init": {
|
|
"title": "Immich Album Watcher Options",
|
|
"description": "Configure the polling interval and Telegram settings for all albums.",
|
|
"data": {
|
|
"scan_interval": "Scan interval (seconds)",
|
|
"telegram_bot_token": "Telegram Bot Token",
|
|
"telegram_cache_ttl": "Telegram Cache TTL (hours)",
|
|
"server_url": "Watcher Server URL (optional)",
|
|
"server_api_key": "Watcher Server API Key (optional)"
|
|
},
|
|
"data_description": {
|
|
"scan_interval": "How often to check for album changes (10-3600 seconds)",
|
|
"telegram_bot_token": "Bot token for sending notifications to Telegram",
|
|
"telegram_cache_ttl": "How long to cache uploaded file IDs to avoid re-uploading (1-168 hours, default: 48)",
|
|
"server_url": "URL of the standalone Immich Watcher server for config sync and event reporting (leave empty to disable)",
|
|
"server_api_key": "API key (JWT access token) for authenticating with the Watcher server"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"services": {
|
|
"refresh": {
|
|
"name": "Refresh",
|
|
"description": "Force an immediate refresh of album data from Immich."
|
|
},
|
|
"get_assets": {
|
|
"name": "Get Assets",
|
|
"description": "Get assets from the targeted album with optional filtering and ordering.",
|
|
"fields": {
|
|
"limit": {
|
|
"name": "Limit",
|
|
"description": "Maximum number of assets to return (1-100)."
|
|
},
|
|
"offset": {
|
|
"name": "Offset",
|
|
"description": "Number of assets to skip (for pagination)."
|
|
},
|
|
"favorite_only": {
|
|
"name": "Favorite Only",
|
|
"description": "Filter to show only favorite assets."
|
|
},
|
|
"filter_min_rating": {
|
|
"name": "Minimum Rating",
|
|
"description": "Minimum rating for assets (1-5)."
|
|
},
|
|
"order_by": {
|
|
"name": "Order By",
|
|
"description": "Field to sort assets by (date, rating, name, or random)."
|
|
},
|
|
"order": {
|
|
"name": "Order",
|
|
"description": "Sort direction (ascending or descending)."
|
|
},
|
|
"asset_type": {
|
|
"name": "Asset Type",
|
|
"description": "Filter assets by type (all, photo, or video)."
|
|
},
|
|
"min_date": {
|
|
"name": "Minimum Date",
|
|
"description": "Filter assets created on or after this date (ISO 8601 format)."
|
|
},
|
|
"max_date": {
|
|
"name": "Maximum Date",
|
|
"description": "Filter assets created on or before this date (ISO 8601 format)."
|
|
},
|
|
"memory_date": {
|
|
"name": "Memory Date",
|
|
"description": "Filter assets by matching month and day, excluding the same year (memories filter)."
|
|
},
|
|
"city": {
|
|
"name": "City",
|
|
"description": "Filter assets by city name (case-insensitive)."
|
|
},
|
|
"state": {
|
|
"name": "State",
|
|
"description": "Filter assets by state/region name (case-insensitive)."
|
|
},
|
|
"country": {
|
|
"name": "Country",
|
|
"description": "Filter assets by country name (case-insensitive)."
|
|
}
|
|
}
|
|
},
|
|
"send_telegram_notification": {
|
|
"name": "Send Telegram Notification",
|
|
"description": "Send a notification to Telegram (text, photo, video, document, or media group).",
|
|
"fields": {
|
|
"bot_token": {
|
|
"name": "Bot Token",
|
|
"description": "Telegram bot token (optional if configured in integration options)."
|
|
},
|
|
"chat_id": {
|
|
"name": "Chat ID",
|
|
"description": "Telegram chat ID to send to."
|
|
},
|
|
"assets": {
|
|
"name": "Assets",
|
|
"description": "List of media assets with 'url', optional 'type' (document/photo/video, default: document), optional 'content_type' (MIME type), and optional 'cache_key' (custom key for caching instead of URL). If empty, sends a text message. Photos and videos can be grouped; documents are sent separately."
|
|
},
|
|
"caption": {
|
|
"name": "Caption",
|
|
"description": "Caption text. For media, applied to first item. For empty URLs, this is the message text."
|
|
},
|
|
"reply_to_message_id": {
|
|
"name": "Reply To",
|
|
"description": "Optional message ID to reply to."
|
|
},
|
|
"disable_web_page_preview": {
|
|
"name": "Disable Web Page Preview",
|
|
"description": "Disable link previews in text messages."
|
|
},
|
|
"parse_mode": {
|
|
"name": "Parse Mode",
|
|
"description": "How to parse the caption/text. Options are HTML, Markdown, MarkdownV2, or empty string for plain text."
|
|
},
|
|
"max_group_size": {
|
|
"name": "Max Group Size",
|
|
"description": "Maximum number of media items per media group (2-10). Large lists will be split into multiple groups."
|
|
},
|
|
"chunk_delay": {
|
|
"name": "Chunk Delay",
|
|
"description": "Delay in milliseconds between sending multiple media groups (0-60000). Useful for rate limiting."
|
|
},
|
|
"wait_for_response": {
|
|
"name": "Wait For Response",
|
|
"description": "Wait for Telegram to finish processing before returning. Set to false for fire-and-forget (automation continues immediately)."
|
|
},
|
|
"max_asset_data_size": {
|
|
"name": "Max Asset Data Size",
|
|
"description": "Maximum asset size in bytes. Assets exceeding this limit will be skipped. Leave empty for no limit."
|
|
},
|
|
"send_large_photos_as_documents": {
|
|
"name": "Send Large Photos As Documents",
|
|
"description": "How to handle photos exceeding Telegram's limits (10MB or 10000px dimension sum). If true, send as documents. If false, skip oversized photos."
|
|
},
|
|
"chat_action": {
|
|
"name": "Chat Action",
|
|
"description": "Chat action to display while processing (typing, upload_photo, upload_video, upload_document). Set to empty to disable."
|
|
},
|
|
"quiet_hours_start": {
|
|
"name": "Quiet Hours Start",
|
|
"description": "Start time for quiet hours (HH:MM format, e.g. 22:00). Notifications during this period are queued and sent when quiet hours end. Omit to send immediately."
|
|
},
|
|
"quiet_hours_end": {
|
|
"name": "Quiet Hours End",
|
|
"description": "End time for quiet hours (HH:MM format, e.g. 08:00). Queued notifications will be sent at this time."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|