Home Assistant

Your Home Assistant entities, services and areas in the panel, over the REST API.

palv0.1.0Integrationbundled

Install in pal

Ships inside pal. Installing puts an editable copy ahead of the bundled one.

Home Assistant: Entities with their state and when it last changed, favourites first
Entities with their state and when it last changed, favourites first
Home Assistant: What a light can do: toggle, on, off, brightness, and the rows every entity has
What a light can do: toggle, on, off, brightness, and the rows every entity has
Home Assistant: The detail pane: the entity, its state and its attributes
The detail pane: the entity, its state and its attributes
Home Assistant: A service as a form: the target entity, then the fields Home Assistant describes
A service as a form: the target entity, then the fields Home Assistant describes
1 of 4

What it does

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) shows the entity, its state, when it changed and its first attributes.

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, Brightness (cmd+b: presets of 10 / 25 / 50 / 75 / 100 %, the current one tagged)
switch, fan, input_boolean, humidifier Toggle, Turn on, Turn off
climate Set temperature (a form: the temperature with the entity's range, the mode from its hvac_modes), 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, Volume (cmd+u: presets), 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+i 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.
  • No arbitrary brightness or volume: the presets are the five steps; the service form (light.turn_on with brightness_pct) takes any value.
  • 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.

Palettes 3

  • Entitiesentitieslive

    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
    • CCopy the entity id
    • IShow the attributes
    • OOpen in Home Assistant
  • Servicesserviceslist

    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
  • Areasareaslist

    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
  • BrightnessPresets of 10, 25, 50, 75 and 100 % for a light.B
  • Set temperatureA form with the temperature and the mode of a thermostat.
  • Open / Close / StopCovers.
  • Lock / UnlockBoth ask first.
  • Play / Pause, Next track, Previous track, Turn offMedia players.
  • VolumePresets for a media player.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 idC
  • Show attributesA level with the state and every attribute; each row copies its value.I
  • 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 idC
  • 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.