97c1784ad4
Aligns the integration with the four wire-level changes shipped in
media-server v0.3.0/0.3.1 without breaking back-compat with older
server versions or pre-existing config entries.
- WebSocket auth via Sec-WebSocket-Protocol: media-server.token.<T>
(preferred by server v0.3.0+). The ?token= query is still sent so
older servers and unauthenticated mode both keep working — aiohttp
completes the handshake even when the server doesn't echo the
subprotocol back.
- 429 Too Many Requests surfaced as MediaServerRateLimitError with
Retry-After parsed; execute_script() sleeps min(retry_after, 30)
and retries once before falling through to the caller.
- Optional HTTPS/WSS (CONF_USE_SSL) + optional certificate verification
toggle (CONF_VERIFY_SSL) wired through the config flow, client, and
WebSocket. Defaults preserve http+verified behaviour, so existing
config entries are unchanged.
- X-Request-ID header (uuid4 hex) on every HTTP call so HA-side issues
can be cross-referenced with the server's access/audit logs. The
format matches the server's ^[A-Za-z0-9._-]{1,128}\$ allow-list so
the id is preserved verbatim instead of being replaced server-side.
Bumps manifest version to 0.3.3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
"""Constants for the Remote Media Player integration."""
|
|
|
|
DOMAIN = "remote_media_player"
|
|
|
|
# Configuration keys
|
|
CONF_HOST = "host"
|
|
CONF_PORT = "port"
|
|
CONF_TOKEN = "token"
|
|
CONF_POLL_INTERVAL = "poll_interval"
|
|
CONF_NAME = "name"
|
|
CONF_USE_WEBSOCKET = "use_websocket"
|
|
CONF_USE_SSL = "use_ssl"
|
|
CONF_VERIFY_SSL = "verify_ssl"
|
|
|
|
# Default values
|
|
DEFAULT_PORT = 8765
|
|
DEFAULT_POLL_INTERVAL = 5
|
|
DEFAULT_NAME = "Remote Media Player"
|
|
DEFAULT_USE_WEBSOCKET = True
|
|
DEFAULT_RECONNECT_INTERVAL = 5
|
|
DEFAULT_USE_SSL = False
|
|
DEFAULT_VERIFY_SSL = True
|
|
# Displays change rarely (brightness/contrast/input source via physical buttons
|
|
# or external automations), so a slow shared poll is plenty. The previous
|
|
# per-entity polling produced ~9 calls every 30 s for a single monitor.
|
|
DEFAULT_DISPLAY_POLL_INTERVAL = 30
|
|
|
|
# API endpoints
|
|
API_HEALTH = "/api/health"
|
|
API_STATUS = "/api/media/status"
|
|
API_PLAY = "/api/media/play"
|
|
API_PAUSE = "/api/media/pause"
|
|
API_STOP = "/api/media/stop"
|
|
API_NEXT = "/api/media/next"
|
|
API_PREVIOUS = "/api/media/previous"
|
|
API_VOLUME = "/api/media/volume"
|
|
API_MUTE = "/api/media/mute"
|
|
API_SEEK = "/api/media/seek"
|
|
API_TURN_ON = "/api/media/turn_on"
|
|
API_TURN_OFF = "/api/media/turn_off"
|
|
API_TOGGLE = "/api/media/toggle"
|
|
API_SCRIPTS_LIST = "/api/scripts/list"
|
|
API_SCRIPTS_EXECUTE = "/api/scripts/execute"
|
|
API_WEBSOCKET = "/api/media/ws"
|
|
API_BROWSER_FOLDERS = "/api/browser/folders"
|
|
API_BROWSER_BROWSE = "/api/browser/browse"
|
|
API_BROWSER_PLAY = "/api/browser/play"
|
|
API_FOREGROUND = "/api/foreground"
|
|
API_DISPLAY_MONITORS = "/api/display/monitors"
|
|
API_DISPLAY_BRIGHTNESS = "/api/display/brightness"
|
|
API_DISPLAY_POWER = "/api/display/power"
|
|
API_DISPLAY_CONTRAST = "/api/display/contrast"
|
|
API_DISPLAY_INPUT_SOURCE = "/api/display/input_source"
|
|
API_DISPLAY_COLOR_PRESET = "/api/display/color_preset"
|
|
API_DISPLAY_PICTURE_MODE = "/api/display/picture_mode"
|
|
|
|
# Service names
|
|
SERVICE_EXECUTE_SCRIPT = "execute_script"
|
|
SERVICE_PLAY_MEDIA_FILE = "play_media_file"
|
|
|
|
# Service attributes
|
|
ATTR_SCRIPT_NAME = "script_name"
|
|
ATTR_SCRIPT_PARAMS = "params"
|
|
ATTR_FILE_PATH = "file_path"
|