# Home Assistant MQTT Dashboard for slide This guide adds a Home Assistant dashboard to control `slide` via MQTT (play/pause/next, plus Immich filters). Default MQTT topics used by `slide`: - Control: `slide/control` - Immich control: `slide/immich` If you changed topics in your `slide` config, update the YAML below to match. --- ## 1) Helpers Add these helpers in `configuration.yaml` (or your helpers include file): ```yaml input_text: slide_album_id: name: Slide Album ID slide_person_id: name: Slide Person ID slide_user_id: name: Slide User ID slide_extensions: name: Slide Extensions (csv) initial: "jpg,jpeg,png" slide_refresh_seconds: name: Slide Refresh Seconds initial: "300" input_select: slide_size: name: Slide Size options: - fullsize - preview - thumbnail - original initial: fullsize slide_order: name: Slide Order options: - desc - asc initial: desc ``` --- ## 2) Scripts Add these scripts in `scripts.yaml`: ```yaml slide_mqtt_play: alias: Slide Play sequence: - service: mqtt.publish data: topic: slide/control payload: "play" slide_mqtt_pause: alias: Slide Pause sequence: - service: mqtt.publish data: topic: slide/control payload: "pause" slide_mqtt_next: alias: Slide Next Image sequence: - service: mqtt.publish data: topic: slide/control payload: "next" slide_mqtt_next_folder: alias: Slide Next Folder sequence: - service: mqtt.publish data: topic: slide/control payload: "next-folder" slide_mqtt_restart: alias: Slide Restart sequence: - service: mqtt.publish data: topic: slide/control payload: "restart" slide_mqtt_reset_filters: alias: Slide Reset Filters sequence: - service: mqtt.publish data: topic: slide/immich payload: "reset" slide_mqtt_set_album: alias: Slide Set Album sequence: - service: mqtt.publish data: topic: slide/immich payload_template: "album:{{ states('input_text.slide_album_id') }}" slide_mqtt_set_person: alias: Slide Set Person sequence: - service: mqtt.publish data: topic: slide/immich payload_template: "person:{{ states('input_text.slide_person_id') }}" slide_mqtt_set_user: alias: Slide Set User sequence: - service: mqtt.publish data: topic: slide/immich payload_template: "user:{{ states('input_text.slide_user_id') }}" slide_mqtt_set_extensions: alias: Slide Set Extensions sequence: - service: mqtt.publish data: topic: slide/immich payload_template: "extensions:{{ states('input_text.slide_extensions') }}" slide_mqtt_set_refresh: alias: Slide Set Refresh Seconds sequence: - service: mqtt.publish data: topic: slide/immich payload_template: "refreshSeconds:{{ states('input_text.slide_refresh_seconds') }}" slide_mqtt_set_size: alias: Slide Set Size sequence: - service: mqtt.publish data: topic: slide/immich payload_template: "size:{{ states('input_select.slide_size') }}" slide_mqtt_set_order: alias: Slide Set Order sequence: - service: mqtt.publish data: topic: slide/immich payload_template: "order:{{ states('input_select.slide_order') }}" ``` --- ## 3) Lovelace Dashboard Add this view in `ui-lovelace.yaml` (or a raw YAML dashboard): ```yaml title: Slide views: - title: Slide Control path: slide icon: mdi:image-frame cards: - type: grid columns: 3 cards: - type: button name: Play icon: mdi:play tap_action: action: call-service service: script.slide_mqtt_play - type: button name: Pause icon: mdi:pause tap_action: action: call-service service: script.slide_mqtt_pause - type: button name: Next icon: mdi:skip-next tap_action: action: call-service service: script.slide_mqtt_next - type: button name: Next Folder icon: mdi:folder-arrow-right tap_action: action: call-service service: script.slide_mqtt_next_folder - type: button name: Restart icon: mdi:restart tap_action: action: call-service service: script.slide_mqtt_restart - type: button name: Reset Filters icon: mdi:filter-remove tap_action: action: call-service service: script.slide_mqtt_reset_filters - type: entities title: Immich Filters entities: - entity: input_text.slide_album_id - entity: input_text.slide_person_id - entity: input_text.slide_user_id - entity: input_text.slide_extensions - entity: input_text.slide_refresh_seconds - entity: input_select.slide_size - entity: input_select.slide_order - type: grid columns: 3 cards: - type: button name: Set Album icon: mdi:album tap_action: action: call-service service: script.slide_mqtt_set_album - type: button name: Set Person icon: mdi:account tap_action: action: call-service service: script.slide_mqtt_set_person - type: button name: Set User icon: mdi:account-cog tap_action: action: call-service service: script.slide_mqtt_set_user - type: button name: Set Extensions icon: mdi:file-image tap_action: action: call-service service: script.slide_mqtt_set_extensions - type: button name: Set Refresh icon: mdi:clock-sync tap_action: action: call-service service: script.slide_mqtt_set_refresh - type: button name: Set Size/Order icon: mdi:image-size-select-large tap_action: action: call-service service: script.slide_mqtt_set_size ``` --- ## Notes - If you changed the MQTT topics in `slide`’s config, update all `topic:` entries to match. - `extensions` filters by file extension (e.g., `jpg,jpeg,png`) to avoid RAW/HEIC if your display environment can’t decode them. - `refreshSeconds` controls how often `slide` refreshes the Immich asset list.