Skip to content
Closed
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
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ group :development do
gem 'stringex', '2.8.6'
gem 'sass-embedded', '1.98.0'
gem 'rubocop', '1.86.0'
gem 'ruby-lsp', '0.26.8'
gem 'ruby-lsp', '0.26.9'
gem 'rackup', '2.3.1'
end

Expand Down
14 changes: 7 additions & 7 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ GEM
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
ffi (1.17.3-aarch64-linux-gnu)
ffi (1.17.3-arm64-darwin)
ffi (1.17.3-x86_64-linux-gnu)
ffi (1.17.4-aarch64-linux-gnu)
ffi (1.17.4-arm64-darwin)
ffi (1.17.4-x86_64-linux-gnu)
forwardable-extended (2.6.0)
google-protobuf (4.34.1-aarch64-linux-gnu)
bigdecimal
Expand Down Expand Up @@ -61,7 +61,7 @@ GEM
nokogiri (~> 1.12)
jekyll-watch (2.2.1)
listen (~> 3.0)
json (2.19.2)
json (2.19.3)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
Expand Down Expand Up @@ -108,7 +108,7 @@ GEM
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rbs (4.0.1)
rbs (4.0.2)
logger
prism (>= 1.6.0)
tsort
Expand All @@ -129,7 +129,7 @@ GEM
rubocop-ast (1.49.1)
parser (>= 3.3.7.2)
prism (~> 1.7)
ruby-lsp (0.26.8)
ruby-lsp (0.26.9)
language_server-protocol (~> 3.17.0)
prism (>= 1.2, < 2.0)
rbs (>= 3, < 5)
Expand Down Expand Up @@ -178,7 +178,7 @@ DEPENDENCIES
rackup (= 2.3.1)
rake (= 13.3.1)
rubocop (= 1.86.0)
ruby-lsp (= 0.26.8)
ruby-lsp (= 0.26.9)
sass-embedded (= 1.98.0)
sinatra (= 4.2.1)
stringex (= 2.8.6)
Expand Down
7 changes: 4 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions source/_data/people.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ Stefan Agner:
name: Stefan Agner
github: agners

Erik Montnémery:
name: Erik Montnémery
github: emontnemery

Bruno Pantaleão:
name: Bruno Pantaleão
github: bgoncal
Expand Down
19 changes: 13 additions & 6 deletions source/_includes/post/author.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,19 @@
{% assign author = site.author %}
{% endif %}
{% if author %}
{% assign person = site.data.people[author] %}
{% if person %}
<span class="byline author vcard">
<a href="https://github.com/{{ person.github }}" target="_blank"><img class="author-avatar" src="https://avatars.githubusercontent.com/{{ person.github }}?size=64" alt="{{ person.name }}"/>{{ person.name }}</a>
</span>
{% if author.first %}
{% assign authors = author %}
{% else %}
<span class="byline author vcard">{% icon "mdi:person" %} {{ author }}</span>
{% assign authors = author | split: "<<<NOSPLIT>>>" %}
{% endif %}
{% for a in authors %}
{% assign person = site.data.people[a] %}
{% if person %}
<span class="byline author vcard">
<a href="https://github.com/{{ person.github }}" target="_blank"><img class="author-avatar" src="https://avatars.githubusercontent.com/{{ person.github }}?size=64" alt="{{ person.name }}"/>{{ person.name }}</a>
</span>
{% else %}
<span class="byline author vcard">{% icon "mdi:person" %} {{ a }}</span>
{% endif %}
{% endfor %}
{% endif %}
2 changes: 1 addition & 1 deletion source/_includes/site/head.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>{% if page.title %}{{ page.title }} - {% endif %}{{ site.title }}</title>
<meta name="author" content="{% if page.author %}{{ page.author }}{% else %}{{ site.author }}{% endif %}">
<meta name="author" content="{% if page.author %}{% if page.author.first %}{{ page.author | join: ", " }}{% else %}{{ page.author }}{% endif %}{% else %}{{ site.author }}{% endif %}">
<meta name="description" content="{{ page.description | default: site.description | strip_html | truncate: 160 }}">
{% if page.keywords %}<meta name="keywords" content="{{ page.keywords }}">{% endif %}
<meta name="viewport" content="width=device-width">
Expand Down
2 changes: 1 addition & 1 deletion source/_includes/site/social_meta.html
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
<meta name="twitter:label1" value="Reading time">
<meta name="twitter:data1" value="~{{ reading_time }} minute{% if reading_time > 1 %}s{% endif %}">
<meta name="twitter:label2" value="Written by">
<meta name="twitter:data2" value="{{ page.author | default: site.author | escape_once }}">
<meta name="twitter:data2" value="{% if page.author.first %}{{ page.author | join: ", " | escape_once }}{% else %}{{ page.author | default: site.author | escape_once }}{% endif %}">
{% endif %}

{% if site.social.mastodon.account %}<link rel="me" href="{{ site.social.mastodon.account | escape_once }}">{% endif %}
7 changes: 6 additions & 1 deletion source/_integrations/broadlink.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ The `remote` {% term entities %} allow you to learn and send codes with universa

### Learning commands

Use `remote.learn_command` to learn IR and RF codes. These codes are grouped by device and stored as commands in the [storage folder](#learned-codes-storage-location). They can be sent with the `remote.send_command` action later.
Use `remote.learn_command` to learn IR and RF codes. These codes are grouped by device and stored as commands in the [storage folder](#learned-codes-storage-location). They can be sent with the `remote.send_command` action later. A convenient interface to learn, send, and delete codes can be found in web interface under `/developer-tools/service`.
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/developer-tools/service is not used elsewhere in the docs, and the UI path is usually referenced via a My link (for example, {% my developer_services title="**Settings** > **Developer tools** > **Actions**" %} in source/_docs/automation/basics.markdown:47). Consider replacing the raw URL/path reference with the My link to avoid drifting UI paths and improve readability.

Suggested change
Use `remote.learn_command` to learn IR and RF codes. These codes are grouped by device and stored as commands in the [storage folder](#learned-codes-storage-location). They can be sent with the `remote.send_command` action later. A convenient interface to learn, send, and delete codes can be found in web interface under `/developer-tools/service`.
Use `remote.learn_command` to learn IR and RF codes. These codes are grouped by device and stored as commands in the [storage folder](#learned-codes-storage-location). They can be sent with the `remote.send_command` action later. A convenient interface to learn, send, and delete codes is available under {% my developer_services title="**Settings** > **Developer tools** > **Actions**" %}.

Copilot uses AI. Check for mistakes.

| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------- |
Expand Down Expand Up @@ -428,6 +428,7 @@ The above example creates `switch.philips_tv` and `switch.lg_tv`, which are rela

__IMPORTANT__: Always use unique names for your switches. A good choice is to prefix the name with the area in which the device is located, e.g. Bedroom TV.

## Managing codes for remotes
Comment on lines 429 to +431
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There’s an extra space after the ## marker (## Managing...), which can trip markdown linters and is inconsistent with other headings in this file. Please use a single space after ##.

Suggested change
__IMPORTANT__: Always use unique names for your switches. A good choice is to prefix the name with the area in which the device is located, e.g. Bedroom TV.
## Managing codes for remotes
__IMPORTANT__: Always use unique names for your switches. A good choice is to prefix the name with the area in which the device is located, like Bedroom TV.
## Managing codes for remotes

Copilot uses AI. Check for mistakes.
### Using e-Control remotes

If you already have your remotes learned on e-Control app you can use this method to "copy" them to Home Assistant.
Expand Down Expand Up @@ -698,3 +699,7 @@ Assuming that your (or similar) device is in one of these databases:
- <https://github.com/probonopd/irdb/tree/master/>

You can grab `irdb2broadlinkha.sh` from [irdb2broadlinkha](https://github.com/molexx/irdb2broadlinkha) project and try to convert codes to format suitable for Home Assistant.

### Managig codes with Broadlink Manager
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spelling: Managig should be Managing in this heading.

Suggested change
### Managig codes with Broadlink Manager
### Managing codes with Broadlink Manager

Copilot uses AI. Check for mistakes.

A Docker based GUI to learn, send, and generate IR and RF codes is available through the [Broadlink Manager project](https://github.com/t0mer/broadlinkmanager-docker)
104 changes: 104 additions & 0 deletions source/_integrations/homecast.markdown
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
---
title: Homecast
description: Instructions on setting up Homecast within Home Assistant.
ha_category:
Comment on lines +1 to +4
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR title/description focus on adding Homecast integration documentation, but this PR also introduces mobile app landing/redirect pages, a new blog post (with image), author template changes, a Discord redirect change, and dependency lockfile updates. Please either split these into separate PRs or update the PR title/description so reviewers can scope the changes accurately.

Copilot uses AI. Check for mistakes.
- Alarm
- Binary sensor
- Climate
- Cover
- Fan
- Hub
- Light
- Lock
- Sensor
- Switch
ha_release: "2025.12"
ha_iot_class: Cloud Polling
ha_config_flow: true
ha_domain: homecast
ha_platforms:
- alarm_control_panel
- binary_sensor
- climate
- cover
- fan
- light
- lock
- sensor
- switch
ha_integration_type: hub
ha_codeowners:
- '@parob'
ha_quality_scale: bronze
---

[Homecast](https://homecast.cloud) bridges Apple HomeKit smart home devices to open standards, enabling remote control, API access, and AI assistant integration. The Homecast Mac or iOS app runs on your home network as a relay between HomeKit and the Homecast cloud.

This integration connects Home Assistant to the Homecast cloud API, exposing your HomeKit devices as native Home Assistant entities.

Comment on lines +35 to +38
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The intro for integration docs typically starts with the pattern The **<name>** {% term integration %} ... (see source/_integrations/_integration_docs_template.markdown:25 and source/_integrations/acaia.markdown:24). Updating the first sentence to follow that convention improves consistency and makes it clearer you're describing the Home Assistant integration (not only the product).

Suggested change
[Homecast](https://homecast.cloud) bridges Apple HomeKit smart home devices to open standards, enabling remote control, API access, and AI assistant integration. The Homecast Mac or iOS app runs on your home network as a relay between HomeKit and the Homecast cloud.
This integration connects Home Assistant to the Homecast cloud API, exposing your HomeKit devices as native Home Assistant entities.
The **Homecast** {% term integration %} connects Home Assistant to the Homecast cloud API so you can use your Apple HomeKit smart home devices as native Home Assistant entities. [Homecast](https://homecast.cloud) bridges Apple HomeKit devices to open standards, enabling remote control, API access, and AI assistant integration. The Homecast Mac or iOS app runs on your home network as a relay between HomeKit and the Homecast cloud.

Copilot uses AI. Check for mistakes.
{% include integrations/config_flow.md %}

## Prerequisites

- A [Homecast](https://homecast.cloud) account
- The Homecast Mac or iOS app running on your home network as a relay
- At least one HomeKit home with devices

## Setup

1. Go to **{% my integrations title="Settings > Devices & services" %}** and click **Add integration**.
2. Search for **Homecast** and select it.
3. You will be redirected to the Homecast OAuth consent screen.
4. Log in with your Homecast account.
5. Select which homes to share and the permission level (view or control).
6. Confirm — your HomeKit devices will appear in Home Assistant within seconds.
Comment on lines +49 to +54
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The My link title should contain the bold breadcrumbs (for example, {% my integrations title="**Settings** > **Devices & services**" %}), and the surrounding text should avoid “click” (prefer “select”). Current step 1 uses **{% my integrations title="Settings > Devices & services" %}** and “click”, which diverges from the convention used across the docs (for example, source/_includes/common-tasks/define_custom_polling.md:7).

Copilot uses AI. Check for mistakes.

No manual OAuth client registration is needed — the integration handles this automatically using PKCE.

## Supported devices

| HomeKit device | Home Assistant platform | What you can control |
| --- | --- | --- |
| Lightbulb | Light | On/off, brightness, color, color temperature |
| Switch / Outlet | Switch | On/off |
| Thermostat / Heater-Cooler | Climate | HVAC mode, temperature targets |
| Lock | Lock | Lock / unlock |
| Window Covering | Cover | Position (0–100%), open/close |
| Fan | Fan | On/off, speed |
| Security System | Alarm control panel | Arm home/away/night, disarm |
| Motion Sensor | Binary sensor | Motion detected |
| Contact Sensor | Binary sensor | Open/closed |
| Temperature Sensor | Sensor | Temperature (°C) |
| Light Sensor | Sensor | Illuminance (lux) |

Devices with batteries automatically get battery level and low battery entities.

## How it works

The integration polls the Homecast REST API (`GET /rest/state`) every 30 seconds to fetch device state. When you control a device through Home Assistant, it sends the command via `POST /rest/state` and triggers an immediate refresh.

Devices are automatically organized into Home Assistant areas based on their HomeKit room names. If you have multiple homes, room names are prefixed with the home name (for example, "County Hall - Living Room").

## Data updates

The integration polls the Homecast cloud API every 30 seconds. After sending a control command, an additional refresh is triggered for faster feedback.

## Removing the integration

This integration follows standard integration removal. No extra steps are required.

{% include integrations/remove_device_service.md %}

## Troubleshooting

### Devices not appearing

Make sure the Homecast relay app (Mac or iOS) is running and connected. The relay must be online for the API to return device state.

### Stale or delayed state

State updates every 30 seconds via polling. WebSocket-based real-time updates are planned for a future release.

### Re-authentication

If your OAuth token expires, Home Assistant will show a notification prompting you to re-authenticate. Go to **{% my integrations title="Settings > Devices & services" %}** > **Homecast** and follow the re-auth flow.
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This uses the same My link formatting issue as in the Setup steps: the breadcrumbs should be bold inside the My link title (for example, {% my integrations title="**Settings** > **Devices & services**" %}) rather than wrapping the whole tag in **...**.

Suggested change
If your OAuth token expires, Home Assistant will show a notification prompting you to re-authenticate. Go to **{% my integrations title="Settings > Devices & services" %}** > **Homecast** and follow the re-auth flow.
If your OAuth token expires, Home Assistant will show a notification prompting you to re-authenticate. Go to {% my integrations title="**Settings** > **Devices & services**" %} > **Homecast** and follow the re-auth flow.

Copilot uses AI. Check for mistakes.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ title: "Set up encryption using Let's Encrypt"
description: "Tutorial how to encrypt your connection with Home Assistant."
date: 2015-12-13 10:05:00 -0800
date_formatted: "December 13, 2015"
author: Paulus Schoutsen & Martin Hjelmare
author:
- Paulus Schoutsen
- Martin Hjelmare
author_twitter: balloob
categories: How-To
og_image: /images/blog/2015-12-lets-encrypt/letsencrypt-secured-fb.png
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ title: "Smarter SmartThings with MQTT and Home Assistant"
description: "Jer and St. John describe how they connected SmartThings with Home Assistant."
date: 2016-02-09 0:44 -0700
date_formatted: "February 09, 2016"
author: Jeremiah Wuenschel and St. John Johnson
author:
- Jeremiah Wuenschel
- St. John Johnson
categories: How-To MQTT
og_image: /images/blog/2016-02-smartthings/social.png
---
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ title: "0.25: Custom frontend panels, Jupyter notebooks, DirecTV."
description: "Frontend became blazing fast and extensible. DirecTV support added."
date: 2016-07-30 12:00:00 +0000
date_formatted: "July 30, 2016"
author: Fabian Affolter & Paulus Schoutsen
author:
- Fabian Affolter
- Paulus Schoutsen
author_twitter: fabaff
categories:
- Release-Notes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ title: "0.29: 🎈 Async, SleepIQ, OpenALPR, EmonCMS, stocks, and plants"
description: "Move to asynchronous, Support for SleepIQ, OpenALPR, and EmonCMS, and other goodies."
date: 2016-09-29 03:04:05 +0000
date_formatted: "September 29, 2016"
author: Paulus Schoutsen & Fabian Affolter
author:
- Paulus Schoutsen
- Fabian Affolter
author_twitter: balloob
categories:
- Release-Notes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ title: "0.38: Alert, AppleTV, MQTT discovery, and Yeelight"
description: "Faster and more configurable frontend, configuration check, and complete move to async for core"
date: 2017-02-11 08:04:05 +0000
date_formatted: "February 11, 2017"
author: Robbie Trencheny, Fabian Affolter
author:
- Robbie Trencheny
- Fabian Affolter
author_twitter: robbie
categories:
- Release-Notes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ title: "Home Assistant 0.45: Automation editor, Z-Wave panel, OCR"
description: "AXIS and Keene support, PiFace, Raspihats, and Datadog integration"
date: 2017-05-20 13:00:00 +0000
date_formatted: "May 20, 2017"
author: Paulus Schoutsen & Fabian Affolter
author:
- Paulus Schoutsen
- Fabian Affolter
author_twitter: balloob
categories:
- Release-Notes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ title: "[Update: fixed] A frank and serious warning about X"
description: "The picture painted is not as great as it seems."
date: 2017-06-20 01:04:05 +0000
date_formatted: "June 20, 2017"
author: Paulus Schoutsen & Robbie Trencheny
author:
- Paulus Schoutsen
- Robbie Trencheny
author_twitter: balloob
categories: Public-Service-Announcement
---
Expand Down
4 changes: 3 additions & 1 deletion source/_posts/2017-11-12-tor.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ title: "Secure remote access to Home Assistant using Tor"
description: "Using Tor with Home Assistant and Hass.io."
date: 2017-11-12 10:00:00 +0200
date_formatted: "November 12, 2017"
author: Franck Nijhof & Fabian Affolter
author:
- Franck Nijhof
- Fabian Affolter
author_twitter: frenck
categories: How-To
og_image: /images/blog/2017-11-tor/social.png
Expand Down
4 changes: 3 additions & 1 deletion source/_posts/2020-08-05-mobile-apps-new-features.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ description: "What's new and what's in the works with the companion apps"
date: 2020-08-05 00:00:00
date_formatted: "August 5, 2020"
comments: true
author: Daniel Shokouhi & Tom Brien
author:
- Daniel Shokouhi
- Tom Brien
author_twitter: tbrien88
categories: Release-Notes
og_image: /images/blog/2020-08-05-mobile-apps-new-features/Companion-new-upcoming.png
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ title: "Security audits of Home Assistant"
description: "Home Assistant hired Cure53 to do a security audit as part of our regular security assessments. You are safe. No authentication bypasses have been found."
date: 2023-10-19 00:00:00
date_formatted: "October 19, 2023"
author: Paulus Schoutsen & Franck Nijhof
author:
- Paulus Schoutsen
- Franck Nijhof
comments: true
categories:
- Announcements
Expand Down
Loading
Loading