Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 13 additions & 12 deletions .github/workflows/autoassign.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
name: Auto Assign
# pull_request_target (not pull_request) so assignment works on
# fork-submitted PRs; fork pull_request runs get a read-only token.
# Safe because this workflow never checks out or executes PR code.
# The assignee comes from the AUTO_ASSIGNEE organization variable.
on:
issues:
types: [opened]
pull_request_target:
types: [opened]

permissions:
issues: write
pull-requests: write

jobs:
run:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- name: 'Auto-assign issue'
uses: pozil/auto-assign-issue@v4
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
assignees: bharvey88
numOfAssignee: 1
auto-assign:
uses: ApolloAutomation/Workflows/.github/workflows/autoassign.yml@main
76 changes: 76 additions & 0 deletions STYLE_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,82 @@ homeassistant:
![AIR-1 boot button highlighted on the underside of the case](/assets/air1-boot-button.jpg)
```

### My Home Assistant buttons

My Home Assistant buttons are the official badges from
[my.home-assistant.io](https://my.home-assistant.io/). Each one opens a
screen in the reader's own Home Assistant, whatever address they reach
it on, so "go to **Settings → Devices & services → ESPHome**" becomes
one click. Add one wherever a step sends the reader to a Home Assistant
screen:

- **Installing or adding something**: a HACS repository
(`hacs_repository`), an integration's setup dialog
(`config_flow_start`), a Home Assistant app (`supervisor_app`), an
app from another repository (`supervisor_app` with `repository_url`,
which offers to add the repository), or a blueprint
(`blueprint_import`).
- **Opening the screen a step works in**: an integration's page
(`integration`), a Settings page (`integrations`, `automations`,
`helpers`, `lovelace_dashboards`, `logs`, and so on), or
**Settings → Tools** (`tools_actions`, `tools_states`,
`tools_perform_action`). Home Assistant 2026.8 moved these from
Developer tools, and the same buttons open them in older versions.
- **Restarting Home Assistant**: `system_dashboard` opens
**Settings → System**, where the power icon is.

Put the button on its own line right after the step it helps, as its
own paragraph:

```markdown
1. Go to **Settings → Devices & services** and click **Add integration**.

[![Open your Home Assistant instance and start setting up a new integration.](https://my.home-assistant.io/badges/config_flow_start.svg)](https://my.home-assistant.io/redirect/config_flow_start/?domain=esphome)

2. Search for **ESPHome** and select it.
```

- **Indent it with the step.** Inside a numbered or bulleted list,
indent the button 4 spaces so it stays inside the step and the
numbering continues. Inside an admonition or a content tab, add 4
more. Steps written as `1\.` are plain paragraphs, so their buttons
start at the left margin.
- **One button for several steps.** When one button replaces several
steps, put it under the first of them and say which steps it covers,
for example "The button under step 1 covers steps 1 to 5."
- **Alt text** is "Open your Home Assistant instance and" followed by
the redirect's description from the
[redirect list](https://github.com/home-assistant/my.home-assistant.io/blob/main/redirect.json)
and a period, as in the example above.
- **Use current redirect names**: `supervisor_app` with `app=`, not
`supervisor_addon` with `addon=`, and `tools_actions`, not
`developer_services`. Current names work on every Home Assistant
version. Build links with the
[My Home Assistant link creator](https://my.home-assistant.io/create-link/),
URL-encode parameter values, and skip hidden redirects such as
`supervisor_ingress`. Confirm the redirect is also in the Home
Assistant frontend's list (`src/panels/my/ha-panel-my.ts` in the
frontend repository), because a few names in the redirect list are
missing there, such as `activity`.
- **Check every parameter**: the integration domain from its
`manifest.json`, the HACS owner and repository (category `plugin`
for a dashboard card), the app slug from its `config.yaml` with the
repository prefix (ESPHome Device Builder is `5c53de3b_esphome`), and
a blueprint URL that serves the raw YAML.
- **Keep the written path** in the step. The button is a shortcut, and
some readers reach Home Assistant through an address My Home
Assistant doesn't know.
- **One button per destination per section.** Don't turn every mention
of **Settings** into a button; add one where a step sends the reader
there.
- **Home Assistant only.** No buttons for Homey, phone apps, a device's
own web page, or a screen the reader is already on. Snippets and
included pages carry their buttons to every page that includes them,
so check the includers with `git grep -- '--8<--'` first. Content
that a Homey page includes gets no Home Assistant buttons.
- **No `homeassistant.local:8123` links.** They only work for readers
on that address. Use the button and the written path instead.

### Screen recordings and animations

Use short MP4 clips instead of GIFs. A looping MP4 is a fraction of the
Expand Down
4 changes: 2 additions & 2 deletions docs/_snippets/bluetooth-proxy/method1-finish.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
![ESPHome Device Builder editor with the packages line replaced by the Bluetooth proxy package](/assets/esphome-device-builder-add-ble-proxy-method-1-edit-yaml.gif)

5\. Click **Save** then **Install** in the bottom right. Click **On the network** when prompted.
4\. Click **Save** then **Install** in the bottom right. Click **On the network** when prompted.

![ESPHome Device Builder Save and Install buttons in the bottom right of the editor](/assets/esphome-device-builder-add-ble-proxy-save-install.gif)

6\. When you see the purple lines the device has booted successfully and the logs will show the **Bluetooth Proxy** section. Click **Stop** in the bottom right and you're finished!
5\. When you see the purple lines the device has booted successfully and the logs will show the **Bluetooth Proxy** section. Click **Stop** in the bottom right and you're finished!

![ESPHome Device Builder logs with the Bluetooth Proxy section boxed and an arrow to Stop](/assets/ble-proxy-install-completed.png)

Expand Down
12 changes: 4 additions & 8 deletions docs/_snippets/bluetooth-proxy/method1-steps.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
1\. Open ESPHome Device Builder. The button below opens the app right in your Home Assistant.
1\. Open the **ESPHome Device Builder** app from your Home Assistant sidebar. The button below opens the app's page, or offers to install it if you don't have it yet. Click **Open Web UI** there to reach your devices.

<a href="http://homeassistant.local:8123/5c53de3b_esphome" target="_blank" rel="noreferrer nofollow noopener" class="md-button md-button--primary"><img alt="ESPHome logo" src="/assets/esphome-logo.svg" /> Open ESPHome Device Builder</a>
[![Open your Home Assistant instance and show the dashboard of an app.](https://my.home-assistant.io/badges/supervisor_app.svg)](https://my.home-assistant.io/redirect/supervisor_app/?app=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon)

2\. Don't have it installed yet? Add it from the App Store with the badge below, then move on to step 3.

[![Open your Home Assistant instance and show the dashboard of the ESPHome Device Builder app.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon)

3\. Find your device and click **Edit**.
2\. Find your device and click **Edit**.

![ESPHome Device Builder device list with an Edit button on each device card](/assets/esphome-device-builder-edit-device.gif)

4\. Replace the `packages:` line and the line directly below it with the code below.
3\. Replace the `packages:` line and the line directly below it with the code below.
8 changes: 2 additions & 6 deletions docs/_snippets/bluetooth-proxy/method2.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
The easiest way is to let ESPHome Device Builder add the component for you. You can also paste the single line by hand.

1\. Open ESPHome Device Builder and click **Edit** on your device. The button below opens the app right in your Home Assistant.
1\. Open the **ESPHome Device Builder** app from your Home Assistant sidebar and click **Edit** on your device. The button below opens the app's page, or offers to install it if you don't have it yet. Click **Open Web UI** there to reach your devices.

<a href="http://homeassistant.local:8123/5c53de3b_esphome" target="_blank" rel="noreferrer nofollow noopener" class="md-button md-button--primary"><img alt="ESPHome logo" src="/assets/esphome-logo.svg" /> Open ESPHome Device Builder</a>

Don't have it installed yet? Add it from the App Store with the badge below first.

[![Open your Home Assistant instance and show the dashboard of the ESPHome Device Builder app.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon)
[![Open your Home Assistant instance and show the dashboard of an app.](https://my.home-assistant.io/badges/supervisor_app.svg)](https://my.home-assistant.io/redirect/supervisor_app/?app=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon)

2\. Click **Add Component** in the editor toolbar, search for **Bluetooth Proxy**, and click **Add**.

Expand Down
4 changes: 3 additions & 1 deletion docs/_snippets/bluetooth-proxy/verify.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
!!! success "Verify it works"

Once the device reboots, Home Assistant picks it up as a Bluetooth proxy automatically. Open the [Bluetooth advertisement monitor](https://my.home-assistant.io/redirect/bluetooth_advertisement_monitor/) to watch nearby BLE devices roll in through it. Anything that shows up is ready to add under **Settings → Devices & Services → Bluetooth** like any other device.
Once the device reboots, Home Assistant picks it up as a Bluetooth proxy automatically. Open the **Bluetooth advertisement monitor** with the button below to watch nearby BLE devices roll in through it. Anything that shows up is ready to add under **Settings → Devices & Services → Bluetooth** like any other device.

[![Open your Home Assistant instance and show your Bluetooth Advertisements.](https://my.home-assistant.io/badges/bluetooth_advertisement_monitor.svg)](https://my.home-assistant.io/redirect/bluetooth_advertisement_monitor/)
20 changes: 18 additions & 2 deletions docs/_snippets/zone-mapper-tool.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,23 @@ MostlyChris covers the full setup, from installation to drawing your first zones

HACS is a community store for Home Assistant that handles installing and updating custom integrations and cards. If you don't have it yet, follow the [HACS download guide](https://hacs.xyz/docs/use/download/download/) and [initial configuration guide](https://hacs.xyz/docs/configuration/basic).

With HACS in place, both Zone Mapper parts install in one pass:
With HACS in place, both Zone Mapper parts install in one pass. The two buttons under step 1 cover steps 1 to 5: the first opens the integration and the second opens the card. Each one adds its repository, after HACS asks you to confirm, and opens it so you can click **Download** right there. Use both, then go on at step 6.

1. Open **HACS** from your Home Assistant sidebar.

[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=ApolloAutomation&repository=zone-mapper&category=integration)

[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=ApolloAutomation&repository=zone-mapper-card&category=plugin)

2. Click the three-dot menu in the upper right corner and choose **Custom repositories**.
3. Add `https://github.com/ApolloAutomation/zone-mapper` with type **Integration**.
4. Add `https://github.com/ApolloAutomation/zone-mapper-card` with type **Dashboard**.
5. Search HACS for **Zone Mapper** and download both the integration and the card.
6. Restart Home Assistant when prompted.
7. Go to **Settings → Devices & services → Add integration**, search for **Zone Mapper**, and add it.

[![Open your Home Assistant instance and start setting up a new integration.](https://my.home-assistant.io/badges/config_flow_start.svg)](https://my.home-assistant.io/redirect/config_flow_start/?domain=zone_mapper)

The integration adds a "Zone Mapper" view with the card to your default dashboard the first time it is set up, so you don't have to place the card yourself (storage-mode dashboards only; you can opt out in the integration options). Open the new view and you're ready to pick your device and start drawing.

### Manual installation
Expand All @@ -38,6 +45,9 @@ If you'd rather install without HACS:
1. Copy the contents of the integration's `custom_components` folder to `/config/custom_components/zone_mapper`.
2. Download `zone-mapper-card.js` from the card repository to `/config/www`.
3. Add the card as a resource under **Settings → Dashboards → Resources** with URL `/local/zone-mapper-card.js` and type **JavaScript Module**.

[![Open your Home Assistant instance and show your dashboard resources.](https://my.home-assistant.io/badges/lovelace_resources.svg)](https://my.home-assistant.io/redirect/lovelace_resources/)

4. Restart Home Assistant, then hard-refresh your browser to clear the cached resource list.

## Configure the card
Expand Down Expand Up @@ -88,6 +98,9 @@ The card needs to know which X/Y coordinate sensors to track:
Home Assistant shows the Target X and Y sensors in inches (in) when your system uses US units, while the card reads them in millimeters (mm). When the units don't match, your target dots never appear on the grid. Metric users can skip this; everyone else, convert the sensors before drawing zones:

1. Open your device's page under **Settings → Devices & services → ESPHome**.

[![Open your Home Assistant instance and show an integration.](https://my.home-assistant.io/badges/integration.svg)](https://my.home-assistant.io/redirect/integration/?domain=esphome)

2. Under **Sensors**, click **Target 1 X**, open its settings with the gear icon, and change **Unit of Measurement** to **mm**.
3. Repeat for the X and Y sensors of all three targets (six entities in total).

Expand Down Expand Up @@ -161,7 +174,10 @@ actions:

- Click **Apply** and **Save** after setting up the card or making changes. Most "nothing happens" reports come down to a missed **Apply**.
- **Resource not found**: confirm the resource URL is `/local/zone-mapper-card.js`, the file is under `/config/www`, and clear your browser cache.
- **Zones don't persist**: check the coordinate sensor's attributes for `shape`, `data`, and `rotation_deg` under **Developer Tools → States**, and confirm the `zone_mapper.update_zone` service is being called.
- **Zones don't persist**: check the coordinate sensor's attributes for `shape`, `data`, and `rotation_deg` under **Developer Tools → States** (**Settings → Tools → States** in Home Assistant 2026.8 and newer), and confirm the `zone_mapper.update_zone` service is being called.

[![Open your Home Assistant instance and show your state tools.](https://my.home-assistant.io/badges/tools_states.svg)](https://my.home-assistant.io/redirect/tools_states/)

- **Coordinate entity not found**: draw a zone once to create the entities for that location.
- **No target dots appear when you move**: your Target X/Y sensors are most likely reporting in inches while the card reads millimeters. Switch the six target sensors to mm as described under [Set target entities](#set-target-entities).
- **Presence never turns on**: verify the tracked X/Y entities have numeric states (not `unknown` or `unavailable`) and that the target actually sits inside the drawn zone.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ This is an alternative way to use the Starter Kit's button. Instead of toggling

## Build the automation

1. Open [Settings → Automations & scenes](https://my.home-assistant.io/redirect/automations/) in Home Assistant.
1. Open **Settings → Automations & scenes** in Home Assistant.

[![Open your Home Assistant instance and show your automations.](https://my.home-assistant.io/badges/automations.svg)](https://my.home-assistant.io/redirect/automations/)

2. Click **+ Create automation** in the bottom right, then choose **Create new automation**.
3. Under **Triggers**, click **+ Add trigger**, type `state`, and choose **State**.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,20 @@ A blueprint is a fill-in-the-blanks automation. Home Assistant ships one called

<div class="annotate" markdown>

1. Open [Settings → Automations & scenes → Blueprints](https://my.home-assistant.io/redirect/blueprints/) and look for **Motion-activated Light**. If it's there, skip to step 3. (1)
1. Open **Settings → Automations & scenes → Blueprints** and look for **Motion-activated Light**. If it's there, skip to step 3. (1)

[![Open your Home Assistant instance and show your blueprints.](https://my.home-assistant.io/badges/blueprints.svg)](https://my.home-assistant.io/redirect/blueprints/)

![Home Assistant Blueprints list with Motion-activated Light selected, showing its Motion Sensor, Light, and Wait time fields](../../../assets/motion-activated-lights-select-blueprint.gif)

2. If it's missing, click **Import Blueprint** in the bottom right, paste the URL below, then click **Preview** and **Import Blueprint**.
2. If it's missing, click **Import Blueprint** in the bottom right, paste the URL below, then click **Preview** and **Import Blueprint**. The button under the URL opens the import dialog with it filled in.

```text
https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml
```

[![Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fraw.githubusercontent.com%2Fhome-assistant%2Fcore%2Fdev%2Fhomeassistant%2Fcomponents%2Fautomation%2Fblueprints%2Fmotion_light.yaml)

3. Click **Create Automation** on the blueprint, then fill in the three fields:
* **Motion Sensor** → your kit's **Motion Module** sensor.
* **Light Target** → the light you want to control.
Expand All @@ -76,7 +80,10 @@ You could make two automations, one to turn the light on and one to turn it off.

<div class="annotate" markdown>

1. Open [Settings → Automations & scenes](https://my.home-assistant.io/redirect/automations/), click **Create Automation**, then **Create new automation**.
1. Open **Settings → Automations & scenes**, click **Create Automation**, then **Create new automation**.

[![Open your Home Assistant instance and show your automations.](https://my.home-assistant.io/badges/automations.svg)](https://my.home-assistant.io/redirect/automations/)

2. Click **Add Trigger**, search **motion**, and click **Motion detected**. Set its target to your **Motion Module** sensor. Open the trigger's menu (the three dots), choose **Rename**, and set the **Trigger ID** to `Detected`. (1)

![Adding a Motion detected trigger in Home Assistant, setting its Trigger ID to Detected, and targeting Motion Module](../../../assets/motion-activated-lights-detected.gif)
Expand Down
Loading
Loading