Integrations

Home Assistant

Surface any Home Assistant sensor on an EasyBoard dashboard — temperature, humidity, power draw, presence, alarm state — using a rest_command and a one-action automation. Once configured, updates flow automatically whenever a sensor value changes.

1. Store credentials in secrets.yaml

Keep your write token out of your main config by adding it to secrets.yaml:

secrets.yaml
# secrets.yaml
easyboard_dashboard_id: "abc123xyz456"
easyboard_write_token: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

secrets.yaml is not synced

Home Assistant's secrets.yaml is excluded from most backup add-ons by default, which is exactly what you want — your write token stays off GitHub and out of cloud backups. Make sure your local backup strategy covers it.

2. Add a rest_command

This defines a reusable service you can call from any automation. Add it to configuration.yaml— the payload field lets each automation supply its own JSON body:

configuration.yaml
# configuration.yaml  (simpler — hardcoded dashboard ID)
rest_command:
  update_easyboard:
    url: "https://easyboard.live/api/d/!secret easyboard_dashboard_id/tiles"
    method: PATCH
    headers:
      Authorization: "Bearer !secret easyboard_write_token"
      Content-Type: application/json
    payload: "{{ payload }}"

3. Create an automation

Trigger on a sensor state change and call the REST command with a batch body. This example pushes indoor temperature whenever the sensor updates:

automations.yaml
# automations.yaml
- alias: "Push indoor temperature to EasyBoard"
  trigger:
    - platform: state
      entity_id: sensor.indoor_temperature
  condition:
    - condition: template
      value_template: "{{ trigger.to_state.state != 'unavailable' }}"
  action:
    - service: rest_command.update_easyboard
      data:
        payload: >-
          {
            "updates": [
              {
                "target": { "alternateId": "indoor-temp" },
                "patch": { "value": "{{ states('sensor.indoor_temperature') | round(1) }}" }
              }
            ]
          }

Push multiple sensors at once

One API call can update many tiles — and it counts as a single call against your rate limit. This automation runs every 5 minutes and pushes four different sensors:

automations.yaml
- alias: "Push home stats to EasyBoard every 5 minutes"
  trigger:
    - platform: time_pattern
      minutes: "/5"
  action:
    - service: rest_command.update_easyboard
      data:
        payload: >-
          {
            "updates": [
              {
                "target": { "alternateId": "indoor-temp" },
                "patch": { "value": "{{ states('sensor.indoor_temperature') | round(1) }}" }
              },
              {
                "target": { "alternateId": "humidity" },
                "patch": { "value": "{{ states('sensor.indoor_humidity') | round(0) }}" }
              },
              {
                "target": { "alternateId": "power-draw" },
                "patch": { "value": "{{ states('sensor.total_power') | round(0) }}" }
              },
              {
                "target": { "alternateId": "home-status" },
                "patch": { "value": "{{ 'Home' if is_state('group.all_persons', 'home') else 'Away' }}" }
              }
            ]
          }

Use a time-based trigger to avoid rate limits

If you have many fast-changing sensors (power draw, for example), use a time_pattern trigger every 1–5 minutes rather than a state trigger. One batched call per minute is much cleaner than hundreds of individual calls per hour.

Common use cases

Temperature & humidity

Metric tiles for each room; progress tile for humidity %

Power draw

Metric tile with kW unit; update on state change or every minute

Presence / home/away

Toggle tile with Home / Away options

Alarm state

Toggle tile with Armed / Disarmed / Triggered options and matching colors

Solar production

Metric tile updated every 5 minutes with current kW output

Door & window sensors

Counter tile for open windows; text tile for last opened