# REST sensors for homelab services (Atlantis @ 100.83.230.112 via Tailscale) # # Service ports: # sonarr 8989 /api/v3 # radarr 7878 /api/v3 # sabnzbd 8080 /sabnzbd/api (sb2 has integration — prefer it) # bazarr 6767 /api # lazylib 5299 /api # abs 13378 /api # prowlarr 9696 /api/v1 # -------- Sonarr -------- - platform: rest name: Sonarr Queue unique_id: homelab_rest_sonarr_queue resource: "http://100.83.230.112:8989/api/v3/queue" headers: X-Api-Key: !secret sonarr_api_key value_template: "{{ value_json.totalRecords | default(0) }}" unit_of_measurement: items scan_interval: 120 - platform: rest name: Sonarr Missing unique_id: homelab_rest_sonarr_missing resource: "http://100.83.230.112:8989/api/v3/wanted/missing?page=1&pageSize=1" headers: X-Api-Key: !secret sonarr_api_key value_template: "{{ value_json.totalRecords | default(0) }}" unit_of_measurement: episodes scan_interval: 600 - platform: rest name: Sonarr Series unique_id: homelab_rest_sonarr_series resource: "http://100.83.230.112:8989/api/v3/series" headers: X-Api-Key: !secret sonarr_api_key value_template: "{{ value_json | length }}" unit_of_measurement: series scan_interval: 3600 # -------- Radarr -------- - platform: rest name: Radarr Queue unique_id: homelab_rest_radarr_queue resource: "http://100.83.230.112:7878/api/v3/queue" headers: X-Api-Key: !secret radarr_api_key value_template: "{{ value_json.totalRecords | default(0) }}" unit_of_measurement: items scan_interval: 120 - platform: rest name: Radarr Missing unique_id: homelab_rest_radarr_missing resource: "http://100.83.230.112:7878/api/v3/wanted/missing?page=1&pageSize=1" headers: X-Api-Key: !secret radarr_api_key value_template: "{{ value_json.totalRecords | default(0) }}" unit_of_measurement: movies scan_interval: 600 - platform: rest name: Radarr Movies unique_id: homelab_rest_radarr_movies resource: "http://100.83.230.112:7878/api/v3/movie" headers: X-Api-Key: !secret radarr_api_key value_template: "{{ value_json | length }}" unit_of_measurement: movies scan_interval: 3600 # -------- Prowlarr -------- - platform: rest name: Prowlarr Indexers unique_id: homelab_rest_prowlarr_indexers resource: "http://100.83.230.112:9696/api/v1/indexer" headers: X-Api-Key: !secret prowlarr_api_key value_template: "{{ value_json | length }}" unit_of_measurement: indexers scan_interval: 3600 # -------- Bazarr -------- - platform: rest name: Bazarr Badges unique_id: homelab_rest_bazarr_badges resource: "http://100.83.230.112:6767/api/badges" headers: X-Api-Key: !secret bazarr_api_key value_template: "{{ (value_json.missing_subtitles_movies | default(0)) + (value_json.missing_subtitles_episodes | default(0)) }}" unit_of_measurement: missing json_attributes: - missing_subtitles_episodes - missing_subtitles_movies - throttled_providers scan_interval: 600 # -------- SABnzbd -------- - platform: rest name: SABnzbd Queue Speed unique_id: homelab_rest_sabnzbd_queue_speed resource: "http://100.83.230.112:8080/api?output=json&apikey="REDACTED_API_KEY"&mode=queue" value_template: "{{ value_json.queue.kbpersec | default(0) | float / 1024 | round(2) }}" unit_of_measurement: MB/s json_attributes_path: "$.queue" json_attributes: - status - noofslots_total - mbleft - timeleft - diskspace1 scan_interval: 60 - platform: rest name: SABnzbd Queue Size unique_id: homelab_rest_sabnzbd_queue_size resource: "http://100.83.230.112:8080/api?output=json&apikey="REDACTED_API_KEY"&mode=queue" value_template: "{{ value_json.queue.noofslots_total | default(0) }}" unit_of_measurement: jobs scan_interval: 60 # -------- LazyLibrarian -------- - platform: rest name: LazyLibrarian Version unique_id: homelab_rest_lazylibrarian_version resource: "http://100.83.230.112:5299/api?apikey=REDACTED_LL_API_KEY&cmd=getVersion" value_template: "{{ value_json.current_version | default('?') }}" scan_interval: 86400 - platform: rest name: LazyLibrarian Wanted Books unique_id: homelab_rest_lazylibrarian_wanted_books resource: "http://100.83.230.112:5299/api?apikey=REDACTED_LL_API_KEY&cmd=getWanted" value_template: "{{ value_json.data | length if value_json.data is defined else 0 }}" unit_of_measurement: books scan_interval: 600 # -------- Audiobookshelf -------- - platform: rest name: Audiobookshelf Libraries unique_id: homelab_rest_audiobookshelf_libraries resource: "http://100.83.230.112:13378/api/libraries" headers: Authorization: !secret audiobookshelf_api_key value_template: "{{ value_json.libraries | length }}" unit_of_measurement: libraries scan_interval: 3600 - platform: rest name: Audiobookshelf Ebooks unique_id: homelab_rest_audiobookshelf_ebooks resource: "http://100.83.230.112:13378/api/libraries/5af23ed3-f69d-479b-88bc-1c4911c99d2d/items?limit=1" headers: Authorization: !secret audiobookshelf_api_key value_template: "{{ value_json.total | default(0) }}" unit_of_measurement: items scan_interval: 3600 - platform: rest name: Audiobookshelf Audiobooks unique_id: homelab_rest_audiobookshelf_audiobooks resource: "http://100.83.230.112:13378/api/libraries/d36776eb-fe81-467f-8fee-19435ee2827b/items?limit=1" headers: Authorization: !secret audiobookshelf_api_key value_template: "{{ value_json.total | default(0) }}" unit_of_measurement: items scan_interval: 3600 # -------- Plex (local) -------- # Use the official HA Plex integration for full media_player entities. # This REST sensor is a fallback for library counts. - platform: rest name: Plex Sessions unique_id: homelab_rest_plex_sessions resource: "http://localhost:32400/status/sessions" headers: X-Plex-Token: !secret plex_token Accept: application/json value_template: "{{ value_json.MediaContainer.size | default(0) }}" unit_of_measurement: playing scan_interval: 30