Home Assistant

Toggle, dim and run Home Assistant entities from the panel

palupdated 2026-10-27IntegrationIn pal's registry󰀐Several accounts

Open in pal

In pal's registry: the button shows it in pal, which asks before installing; the command does the same from a terminal. This page can't see what your pal has installed.

Home Assistant: Every entity with its state as a tag and when it last changed, the favourites leading; Enter toggles the light under the cursor
Every entity with its state as a tag and when it last changed, the favourites leading; Enter toggles the light under the cursor
Home Assistant: What a light can do: toggle, on, off, set brightness, and the rows every entity has
What a light can do: toggle, on, off, set brightness, and the rows every entity has
Home Assistant: Show attributes (cmd+shift+A): the thermostat's state and every attribute as a row, Enter copies the value
Show attributes (cmd+shift+A): the thermostat's state and every attribute as a row, Enter copies the value
Home Assistant: A service as a form: the target entity, then the fields Home Assistant describes for it, called with Enter
A service as a form: the target entity, then the fields Home Assistant describes for it, called with Enter
Home Assistant: An entity in the detail pane (cmd+I): where it lives, its state as a chip, the reading and the target large, then its attributes
An entity in the detail pane (cmd+I): where it lives, its state as a chip, the reading and the target large, then its attributes
1 of 5

What it does

Your Home Assistant entities in the panel with their state: toggle lights, dim, set a temperature, lock a door, run a scene. Every service is a form, and areas list their own entities.

  • Every entity at the root with its state (on, locked, playing); favourites first, a filter per domain
  • The right actions per kind: toggle and dim a light, set a thermostat, open a cover, lock a door, run a scene
  • Brightness, temperature and volume typed straight into the search bar
  • Every service as a form, its fields taken from Home Assistant
  • Areas as lists of their entities; cmd+o opens an entity in Home Assistant
  • A hotkey on any entity toggles it without showing the panel

Palettes 3

  • Home Assistantentitieslive

    Every entity of the chosen domains with its state, favourites first; the domain filters scope it. Actions per domain: toggle, on, off, brightness, temperature, open, close, lock, play, activate, run, trigger, copy value; every row copies its id, shows its attributes, opens in HA.

    • ↵The domain's first action: toggle, activate, run, copy value
    • ⌘↵The second: turn on or off, set, pause
    • ⌘BSet a light's brightness to the percent typed in the bar
    • ⌘USet a media player's volume to the percent typed in the bar
    • ⌘CCopy the entity id
    • ⌘⇧AShow the attributes
    • ⌘OOpen in Home Assistant
    • ⇥All entities, Every domain, one domain
  • Home Assistant Servicesserviceslistrefreshes every 1h

    Every service Home Assistant offers, by domain; Enter opens a form with the target entity and the service's fields, submit calls it.

    • ↵Open the form, then call
    • ⌘CCopy the service id
  • Home Assistant Areasareaslistrefreshes every 1h

    Every area with an entity in it; Enter lists those entities.

    • ↵List the area's entities

Actions

  • ToggleLights, switches, fans, input booleans.↵
  • Turn on / Turn off⌘↵
  • Set brightnessA light: the percent typed in the bar, light.turn_on with brightness_pct.⌘B
  • Set temperatureThe bar takes a thermostat's temperature (the current one prefilled, its range as the hint) and mode, then climate.set_temperature.↵
  • Open / Close / StopCovers.
  • Lock / UnlockBoth ask first.
  • Play / Pause, Next track, Previous track, Turn offMedia players.
  • Set volumeA media player: the percent typed in the bar, media_player.volume_set.⌘U
  • Activate / Run / TriggerScenes, scripts, automations; Enable or Disable for an automation.
  • PressButtons.
  • Start / Return to dockVacuums.
  • Copy valueSensors, people and every other domain.↵
  • Copy entity id⌘C
  • Show attributesA level with the state and every attribute; each row copies its value.⌘⇧A
  • Open in Home AssistantThe automation or script editor, the history page for the rest.⌘O
  • CallOn a service: the form, then the call.↵
  • Copy service id⌘C
  • Show entitiesOn an area.↵

Settings

Extension, [extensions.home-assistant]

url
empty text

Where Home Assistant answers, scheme included; no trailing slash needed.

token
empty secret

A long-lived access token (your profile in HA, Security, Long-lived access tokens). Stored as a keychain: or env: reference.

domains
lightswitchclimatemedia_playercoverlockfanscenescriptautomationsensorbinary_sensorpersoninput_boolean list

Entity domains listed at the root, in this order. A domain filter shows its domain regardless; favourites are listed regardless.

favorites
none list

Entity ids pinned to the top, in this order.

timeout
5s number

How long one request may take before the row says Home Assistant did not answer.

Defaults shown. Change them in pal's settings window or in the config file.

The README

Everything Home Assistant does, key by key, from the extension's own README.md

Home Assistant

Home Assistant over its REST API (/api/states, /api/services, one /api/template render for areas), with a long-lived access token. Three palettes: the entities, the services, the areas.

Palettes

Home Assistant (entities) is live: every entity of the domains setting, listed again whenever the panel shows, so a light's state at the root is the current one and kitchen light finds it from the root. Favourites come first in their order, then the domains in the setting's order, names sorted within. A row is the friendly name; the subtitle is the domain and the area (when the entity has one); the entity id, domain and area are keywords; the accessories are the state (a coloured tag for on, off, open, locked, playing and the other known states, the value with its unit otherwise) and when it last changed. The icon is the domain's glyph; a light that is on is a dot in its colour (rgb_color, else warm white). The filter dropdown scopes it: All entities (the domains setting), Every domain, then Lights, Switches, Sensors, Binary sensors, Climate, Media players, People, Scripts, Automations, Scenes. The detail pane (lazy, asked when the cursor rests) leads with the domain and area, the name and a known state as a chip, and the numbers that matter large (a sensor's value, a light's brightness, a thermostat's reading and target, a player's volume); the entity id, when it changed and the other attributes follow.

Home Assistant Services (services) is every service from /api/services, by domain then name, the id (light.turn_on) as an accessory and a keyword, HA's name and description when it gives them. enter opens a form: the target as a select of the entities the service takes (no field for a service without a target), then the service's fields from its description (a select selector is a select, a boolean one a checkbox, the rest text with the example as placeholder and a number's range in the help line). The submit calls the service with the values coerced by selector and toasts what changed; a number field that is not one comes back on the form. Listed once an hour.

Home Assistant Areas (areas) is every area that has an entity, with the count; enter lists those entities. Listed once an hour.

Keyboard

The first action of a row is enter, the second cmd+enter; cmd+k has them all. By domain on an entity row:

domain actions
light Toggle, Turn on, Turn off, Set brightness (cmd+b: argument brightness, a percent typed in the bar, light.turn_on with brightness_pct; a pick without it asks in a form)
switch, fan, input_boolean, humidifier Toggle, Turn on, Turn off
climate Set temperature (arguments in the bar: temperature, the current one prefilled and the entity's range as the hint; hvac_mode, a select from its hvac_modes; a pick without them asks in a form), Turn on, Turn off
cover Open, Close, Stop (Close first while open)
lock Lock, Unlock (both ask first; the one that changes the state comes first)
media_player Play or Pause, Next track, Previous track, Set volume (cmd+u: argument volume, a percent typed in the bar, media_player.volume_set), Turn off
scene Activate
script Run
automation Trigger, Enable or Disable
button, input_button Press
vacuum Start, Return to dock
anything else (sensor, binary_sensor, person, ...) Copy value

On every entity row:

keys action
cmd+c Copy entity id
cmd+shift+a Show attributes: a level with the state and every attribute as rows, each copying its value (cmd+c its name)
cmd+o Open in Home Assistant: the automation or script editor, the history page for the rest

On a service row: enter Call (the form, then the call), cmd+c Copy service id. On an area row: enter Show entities.

A service call keeps the panel open and lists again, so the row shows the new state, with a toast naming it; a call that fails is a failure toast with HA's answer. Entity ids are the row ids, so an item hotkey toggles one entity without showing pal:

[palettes.home-assistant-entities.item_hotkeys]
"light.kitchen" = "ctrl+alt+k"

Setup

In Home Assistant, your profile, Security, create a long-lived access token. In pal, Settings › Extensions › Home Assistant: the URL with its scheme (http://homeassistant.local:8123) and the token, which the config file keeps as a keychain: or env: reference, never the value.

Settings, [extensions.home-assistant]:

key type default what
url text unset Where Home Assistant answers, scheme included.
token secret unset A long-lived access token. A keychain: or env: reference in the file.
domains list light, switch, climate, media_player, cover, lock, fan, scene, script, automation, sensor, binary_sensor, person, input_boolean The domains listed at the root, in this order.
favorites list [] Entity ids pinned to the top, in this order, whatever their domain.
timeout number (s) 5 How long one request may take.

When something is wrong every palette is one inert hint row that says what and where to fix it: no URL, a URL without a scheme, no token, a keychain: or env: token that did not resolve, a rejected token (401), a host that did not answer within the timeout, or one that could not be reached. A URL that redirects (an http:// one behind a proxy answering 301 to https://) is followed with the token kept, and the log says which URL to set. An HA that refuses the template API leaves the rows without areas and the Areas palette with a hint row.

Needs the network: every request goes to the URL you set, nothing else.

What it does not do

  • No WebSocket: states are read on each show, not pushed, so a change made elsewhere shows on the next show or cmd+r.
  • No entity editing, no dashboards, no history graphs: cmd+o opens the right page in Home Assistant for those.
  • A collapsed group in a service's description (HA's "advanced" section) is left out of the form.

Platforms

macOS and Linux, the same on both: everything is HTTP.