Merge branch 'current' into next

This commit is contained in:
Franck Nijhof 2025-09-22 11:12:26 +00:00
commit 394c790cec
No known key found for this signature in database
GPG Key ID: AB33ADACE7101952
116 changed files with 4080 additions and 295 deletions

View File

@ -11,7 +11,7 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v5.0.1
- uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5.0.1
if: ${{ github.repository_owner == 'home-assistant' }}
with:
github-token: ${{ github.token }}

View File

@ -12,7 +12,7 @@ jobs:
if: github.event.issue.type.name == 'Task'
steps:
- name: Check if user is authorized
uses: actions/github-script@v7
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const issueAuthor = context.payload.issue.user.login;

View File

@ -12,7 +12,7 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9.1.0
- uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0
if: ${{ github.repository_owner == 'home-assistant' }}
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -8,9 +8,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
uses: actions/checkout@v5.0.0
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Setting up Node.js
uses: actions/setup-node@v4.4.0
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: 20
cache: "npm"
@ -35,9 +35,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
uses: actions/checkout@v5.0.0
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Setting up Node.js
uses: actions/setup-node@v4.4.0
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: 20
cache: "npm"

2
.gitignore vendored
View File

@ -9,7 +9,9 @@ source/_data/blueprint_exchange_data.json
source/_data/version_data.json
source/_data/alerts_data.json
source/_data/language_scores.json
source/_data/codeowners.json
source/_stash
source/stylesheets/homeassistant/pages/community/index.css
source/stylesheets/screen.css
source/.jekyll-cache/
vendor

View File

@ -10,8 +10,8 @@ group :development do
gem 'stringex', '2.8.6'
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
gem 'sassc', '2.1.0'
gem 'sass-embedded', '1.91.0'
gem 'rubocop', '1.80.1'
gem 'sass-embedded', '1.93.0'
gem 'rubocop', '1.80.2'
gem 'ruby-lsp', '0.26.1'
gem 'rackup', '2.2.1'
end
@ -24,7 +24,7 @@ group :jekyll_plugins do
end
gem 'sinatra', '4.1.1'
gem 'nokogiri', '1.18.9'
gem 'nokogiri', '1.18.10'
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library

View File

@ -5,10 +5,10 @@ GEM
public_suffix (>= 2.0.2, < 7.0)
ast (2.4.3)
base64 (0.3.0)
bigdecimal (3.2.2)
bigdecimal (3.2.3)
chunky_png (1.4.0)
colorator (1.1.0)
commonmarker (0.23.11)
commonmarker (0.23.12)
compass (1.0.3)
chunky_png (~> 1.2)
compass-core (~> 1.0.2)
@ -30,10 +30,10 @@ GEM
ffi (1.17.2-arm64-darwin)
ffi (1.17.2-x86_64-linux-gnu)
forwardable-extended (2.6.0)
google-protobuf (4.32.0-arm64-darwin)
google-protobuf (4.32.1-arm64-darwin)
bigdecimal
rake (>= 13)
google-protobuf (4.32.0-x86_64-linux-gnu)
google-protobuf (4.32.1-x86_64-linux-gnu)
bigdecimal
rake (>= 13)
http_parser.rb (0.8.0)
@ -70,7 +70,7 @@ GEM
nokogiri (~> 1.12)
jekyll-watch (2.2.1)
listen (~> 3.0)
json (2.13.2)
json (2.14.1)
kramdown (2.5.1)
rexml (>= 3.3.9)
kramdown-parser-gfm (1.1.0)
@ -86,9 +86,9 @@ GEM
multi_json (1.17.0)
mustermann (3.0.4)
ruby2_keywords (~> 0.0.1)
nokogiri (1.18.9-arm64-darwin)
nokogiri (1.18.10-arm64-darwin)
racc (~> 1.4)
nokogiri (1.18.9-x86_64-linux-gnu)
nokogiri (1.18.10-x86_64-linux-gnu)
racc (~> 1.4)
parallel (1.27.0)
parser (3.3.9.0)
@ -96,7 +96,7 @@ GEM
racc
pathutil (0.16.2)
forwardable-extended (~> 2.6)
prism (1.4.0)
prism (1.5.1)
public_suffix (6.0.2)
racc (1.8.1)
rack (3.2.1)
@ -114,12 +114,12 @@ GEM
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rbs (3.9.4)
rbs (3.9.5)
logger
regexp_parser (2.11.2)
rexml (3.4.2)
regexp_parser (2.11.3)
rexml (3.4.4)
rouge (4.6.0)
rubocop (1.80.1)
rubocop (1.80.2)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@ -130,7 +130,7 @@ GEM
rubocop-ast (>= 1.46.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.46.0)
rubocop-ast (1.47.1)
parser (>= 3.3.7.2)
prism (~> 1.4)
ruby-lsp (0.26.1)
@ -141,9 +141,9 @@ GEM
ruby2_keywords (0.0.5)
safe_yaml (1.0.5)
sass (3.4.25)
sass-embedded (1.91.0-arm64-darwin)
sass-embedded (1.93.0-arm64-darwin)
google-protobuf (~> 4.31)
sass-embedded (1.91.0-x86_64-linux-gnu)
sass-embedded (1.93.0-x86_64-linux-gnu)
google-protobuf (~> 4.31)
sass-globbing (1.1.5)
sass (>= 3.1)
@ -180,12 +180,12 @@ DEPENDENCIES
jekyll-paginate (= 1.1.0)
jekyll-sitemap (= 1.4.0)
jekyll-toc (= 0.19.0)
nokogiri (= 1.18.9)
nokogiri (= 1.18.10)
rackup (= 2.2.1)
rake (= 13.3.0)
rubocop (= 1.80.1)
rubocop (= 1.80.2)
ruby-lsp (= 0.26.1)
sass-embedded (= 1.91.0)
sass-embedded (= 1.93.0)
sass-globbing (= 1.1.5)
sassc (= 2.1.0)
sinatra (= 4.1.1)

View File

@ -32,6 +32,8 @@ task :generate do
abort("Generating version data failed") unless success
success = system "rake language_scores_data"
abort("Generating language scores data failed") unless success
success = system "rake codeowners_data"
abort("Extracting codeowners") unless success
success = system "jekyll build"
abort("Generating site failed") unless success
if ENV["CONTEXT"] != 'production'
@ -71,6 +73,7 @@ task :preview, :listen do |t, args|
system "rake analytics_data"
system "rake version_data"
system "rake language_scores_data"
system "rake codeowners_data"
system "rake alerts_data"
jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build -t --watch --incremental")
compassPid = Process.spawn("compass watch")
@ -128,3 +131,25 @@ task :language_scores_data do
file.write(JSON.generate(remote_data))
end
end
desc "Extract CODEOWNERS and output to _data/codeowners.json"
task :codeowners_data do
codeowners = []
File.readlines("CODEOWNERS").each do |line|
next if line.start_with?("#") || line.strip.empty?
parts = line.split
next if parts.length < 2
owners = parts[1..-1]
owners.each do |owner|
owner = owner.delete_prefix('@')
next if owner.include?('/')
codeowners << owner unless codeowners.include?(owner)
end
end
codeowners.sort!
File.open("#{source_dir}/_data/codeowners.json", "w") do |file|
file.write(JSON.generate(codeowners))
end
end

View File

@ -108,8 +108,8 @@ social:
# Home Assistant release details
current_major_version: 2025
current_minor_version: 9
current_patch_version: 0
date_released: 2025-09-03
current_patch_version: 4
date_released: 2025-09-19
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.

View File

@ -328,6 +328,7 @@ dd {
display: flex;
align-items: center;
font-weight: normal;
@media only screen and (max-width: $menu-collapse) {
user-select: none;
}
@ -612,11 +613,11 @@ a.material-card:hover {
.links ul {
list-style: none;
margin: 0;
}
}
.links li {
display: inline;
}
}
}
.installation-survey {
@ -894,10 +895,19 @@ a.material-card:hover {
// make it blink every 1.5 seconds, no smoothing
animation: blink 1.5s infinite;
animation-timing-function: steps(1);
@keyframes blink {
0% { opacity: 1; }
50% { opacity: 0.2; }
100% { opacity: 1; }
0% {
opacity: 1;
}
50% {
opacity: 0.2;
}
100% {
opacity: 1;
}
}
}
@ -1228,12 +1238,43 @@ article.listing {
border-radius: 8px;
box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px;
vertical-align: middle;
}
img,
table,
div.contain {
&+p {
margin-top: 1.5rem;
}
}
div.contain {
display: grid;
font-size: .9rem;
font-style: italic;
gap: 16px;
text-align: center;
img {
background-color: unset;
border-radius: 20px;
border: unset;
box-shadow: unset;
display: block;
filter: drop-shadow(0 6px 16px rgba(0, 0, 0, 0.1));
margin: 0 auto;
max-width: 620px;
width: 100%;
}
&.nb {
img {
border-radius: unset;
}
}
}
img.no-shadow {
border: 0;
box-shadow: none;
@ -1275,11 +1316,20 @@ article.listing {
border-radius: 8px;
border-width: 8px;
text-align: center;
overflow: hidden;
padding-bottom: 8px;
font-size: 0.9rem;
box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px;
font-style: italic;
border: 0;
lite-youtube{
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
overflow: hidden;
margin: 0 auto 8px;
}
img {
display: block;
box-shadow: none;
@ -1308,10 +1358,10 @@ article.listing {
text-decoration: underline;
overflow-wrap: break-word;
&[rel*="external"]{
&[rel*="external"] {
position: relative;
&:after{
&:after {
content: "\00a0\00a0\00a0\00a0\00a0";
display: inline-block;
}

View File

@ -1,6 +1,10 @@
#getting_started {
.installations {
&.second {
margin-top: 50px;
}
.label {
background: #e8e6f0;
border-radius: 4px;
@ -143,7 +147,7 @@
}
iconify-icon.external-link {
padding-top: 4px;
display: none;
}
svg {
@ -285,4 +289,4 @@
}
}
}
}
}

View File

@ -0,0 +1,132 @@
.container {
display: flex;
margin: 0 auto;
max-width: calc(var(--container-max-width) + (var(--container-gutters) * 2));
padding: 12px calc(var(--container-gutters) / 2);
width: 100%;
height: 100%;
@include bp(desktop) {
padding: 12px var(--container-gutters);
}
&-full {
margin: 0 auto;
padding: 0 calc(var(--container-gutters) / 2);
max-width: calc(var(--container-full-max-width) + (var(--container-gutters) * 2));
width: 100%;
@include bp(desktop) {
padding: 0 var(--container-gutters);
}
}
}
footer{
isolation: isolate;
position: relative;
&:before{
content: '';
position: absolute;
height: 500px;
left: 0;
right: 0;
bottom: 100%;
background: linear-gradient(180deg, #F5F6FA 0%, #FFFFFF 100%);
}
}
html{
scroll-padding-top: 92px;
}
#landingpage {
background-color: #F5F6FA;
color: #002332;
height: auto;
.page-content {
overflow-x: clip;
padding-top: 68px;
}
.content {
max-width: unset;
margin: 0;
}
img {
box-shadow: unset;
vertical-align: unset;
border: unset;
}
.spacer {
display: none;
}
}
section {
padding: var(--section-spacing-y) 0;
position: relative;
z-index: 1;
}
main#page-community {
h1,
.h1 {
@include h1;
}
h2,
.h2 {
@include h2;
}
h3,
.h3 {
@include h3;
text-transform: unset;
letter-spacing: unset;
}
h4,
.h4 {
@include h4;
}
h5,
.h5 {
@include h5;
}
h6,
.h6 {
@include h6;
}
.small {
@include small;
}
.big {
@include big;
}
p {
color: var(--typography-paragraph-color);
font-size: var(--typography-paragraph-font-size);
font-weight: var(--typography-paragraph-font-weight);
line-height: var(--typography-paragraph-line-height);
margin: 0;
&:last-child {
margin-bottom: 0;
}
}
figure {
margin: 0;
}
}

View File

@ -0,0 +1,107 @@
.button {
// Reset - remove after global button refactor
border: unset;
color: initial;
height: unset;
line-height: initial;
margin: unset;
overflow: hidden;
align-items: center;
background-color: #99DFFC;
border-radius: 40px;
display: inline-flex;
font-size: 10px;
font-weight: 600;
padding: 10px 24px;
transition: color 0.2s ease, background-color 0.2s ease;
@include bp(desktop) {
font-size: 14px;
}
&:hover {
box-shadow: unset;
background-color: var(--color-primary);
color: #ffffff;
}
&:before {
content: unset;
}
&:has(.icon) {
gap: 4px;
padding: 4px 14px 4px 4px;
@include bp(desktop) {
gap: 10px;
padding: 8px 24px 8px 8px;
}
}
&.secondary {
background-color: var(--color-secondary);
&:hover {
background-color: var(--color-primary);
color: #ffffff;
}
}
&.hollow-dark {
background-color: unset;
box-shadow: inset 0 0 0 1px #fff;
color: #ffffff;
&:hover {
background-color: #ffffff;
color: #002332;
}
}
}
.buttons {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 12px;
// If DSAP is enabled
&[data-dsap] {
// Only apply if scrolling down into view
&:not([data-dsap-is="in"]):not([data-dsap-is="above"]) {
// Only if scrolling down into the element
.button {
transition-duration: 0s;
transition-delay: 0s;
opacity: 0;
transform: translateY(50px);
scale: 0.85;
}
}
.button {
transform: translateY(0);
@for $i from 1 through 10 {
&:nth-child(#{$i}) {
transition-property: transform, opacity, scale;
transition-duration: .5s;
transition-delay: #{0.1 + ($i * 0.05)}s;
transition-timing-function: cubic-bezier(0.2, 1, 0.5, 1);
}
}
}
}
@include bp(desktop) {
gap: 24px;
}
}

View File

@ -0,0 +1,21 @@
.event-card{
background-color: rgba(255,255,255,0.4);
padding: 12px;
border-radius: 12px;
border: 1px solid #ffffff;
.button{
margin-top: 20px;
}
.event-title{
@include h4;
}
.event-meta{
@include p;
color: #4F606E;
margin-top: 6px;
font-size: 12px;
}
}

View File

@ -0,0 +1,25 @@
.icon{
aspect-ratio: 1/1;
background-color: #ffffff;
border-radius: 50%;
color: #002332;
height: 100%;
padding: 4px;
display: grid;
place-items: center;
height: 24px;
width: 24px;
&:has(use[href="#facebook"]){
padding: 0;
svg{
height: 100%;
width: 100%;
}
}
svg{
width: 100%;
height: 100%;
}
}

View File

@ -0,0 +1,84 @@
@mixin bp($breakpoint) {
@if $breakpoint ==large-mobile {
@media (min-width: 500px) {
@content;
}
}
@else if $breakpoint ==tablet {
@media (min-width: 768px) {
@content;
}
}
@else if $breakpoint ==desktop {
@media (min-width: 1024px) {
@content;
}
}
@else if $breakpoint ==large-desktop {
@media (min-width: 1280px) {
@content;
}
}
// else if the breakpoint is a pixel value, use it as is
@else {
@media (min-width: $breakpoint) {
@content;
}
}
}
@mixin h1 {
font-size: var(--typography-h1-font-size);
font-weight: var(--typography-h1-font-weight);
line-height: var(--typography-h1-line-height);
letter-spacing: -1px;
}
@mixin h2 {
font-size: var(--typography-h2-font-size);
font-weight: var(--typography-h2-font-weight);
line-height: var(--typography-h2-line-height);
letter-spacing: -1px;
}
@mixin h3 {
font-size: var(--typography-h3-font-size);
font-weight: var(--typography-h3-font-weight);
line-height: var(--typography-h3-line-height);
}
@mixin h4 {
font-size: var(--typography-h4-font-size);
font-weight: var(--typography-h4-font-weight);
line-height: var(--typography-h4-line-height);
}
@mixin h5 {
font-size: var(--typography-h5-font-size);
font-weight: var(--typography-h5-font-weight);
line-height: var(--typography-h5-line-height);
}
@mixin h6 {
font-size: var(--typography-h6-font-size);
font-weight: var(--typography-h6-font-weight);
line-height: var(--typography-h6-line-height);
}
@mixin p {
font-size: var(--typography-paragraph-font-size);
font-weight: var(--typography-paragraph-font-weight);
line-height: var(--typography-paragraph-line-height);
}
@mixin small{
font-size: var(--typography-small-paragraph-font-size, var(--typography-paragraph-font-size));
font-weight: var(--typography-small-paragraph-font-weight, var(--typography-paragraph-font-weight));
line-height: var(--typography-small-paragraph-line-height, var(--typography-paragraph-line-height));
}
@mixin big {
font-size: var(--typography-big-font-size);
font-weight: var(--typography-big-font-weight);
line-height: var(--typography-big-line-height);
text-transform: uppercase;
}

View File

@ -0,0 +1,92 @@
.photos {
display: grid;
isolation: isolate;
place-items: center;
position: relative;
&[data-dsap]:not([data-dsap-is="in"]):not([data-dsap-is="above"]) { // Only if scrolling down into the element
.photo {
opacity: 0;
left: 0;
top: 0;
right: 0;
transform: rotate(0) scale(0.8);
transition-duration: 0s;
transition-delay: 0s;
&.large {
opacity: 1;
}
}
}
.photo {
background-color: #ffffff;
grid-area: 1/1;
display: flex;
flex-direction: column;
gap: 8px;
transition-property: transform, opacity, top, left, right;
transition-duration: .8s;
transition-delay: .25s;
transition-timing-function: cubic-bezier(0.2, 1, 0.5, 1);
@for $i from 1 through 3 {
&:nth-child(#{$i}) {
transition-delay: #{0.25 + ($i * 0.05)}s;
}
}
img {
aspect-ratio: 1/1;
width: 100%;
background-color: #f5f5f5;
}
figcaption {
font-size: 16px;
text-align: center;
}
&.small {
border-radius: 8px;
padding: 6px;
position: absolute;
right: -15%;
top: -10%;
width: 50%;
z-index: 1;
transform: rotate(9deg);
img {
border-radius: 4px;
}
}
&.medium {
border-radius: 12px;
left: -10%;
padding: 8px;
position: absolute;
top: -15%;
width: 70%;
z-index: 2;
transform: rotate(-15deg);
img {
border-radius: 6px;
}
}
&.large {
border-radius: 12px;
padding: 12px;
z-index: 3;
img {
border-radius: 6px;
}
}
}
}

View File

@ -0,0 +1,26 @@
.stats {
display: flex;
flex-wrap: wrap;
gap: 24px 40px;
.stat {
display: flex;
flex-direction: column;
min-width: 100px;
.stat-value {
@include h3;
color: var(--color-secondary);
display: flex;
gap: 4px;
}
.stat-label {
@include small;
max-width: 140px;
text-wrap: balance;
}
}
}

View File

@ -0,0 +1,57 @@
:root {
--color-primary: #00AEF8;
--color-secondary: #16F3BE;
// Containers and widths
--container-max-width: 1100px;
--container-full-max-width: 1400px;
--container-gutters: 24px;
--section-spacing-y: 52px;
// Typography
--typography-base-font: "Figtree", serif;
--typography-heading-line-height: 1.25;
--typography-h1-font-size: 36px;
--typography-h1-font-weight: 600;
--typography-h1-line-height: 1;
--typography-h2-font-size: 30px;
--typography-h2-font-weight: 600;
--typography-h2-line-height: 1.1;
--typography-h3-font-size: 24px;
--typography-h3-font-weight: 700;
--typography-h3-line-height: var(--typography-heading-line-height);
--typography-h4-font-size: 14px;
--typography-h4-font-weight: 700;
--typography-h4-line-height: 1.25;
--typography-paragraph-color: #4F606E;
--typography-paragraph-font-size: 16px;
--typography-paragraph-font-weight: 400;
--typography-paragraph-line-height: 1.25;
--typography-small-paragraph-font-size: 12px;
--typography-small-paragraph-line-height: 1.3;
--typography-big-font-size: 46px;
--typography-big-font-weight: 700;
--typography-big-line-height: 1;
}
@include bp(desktop) {
:root {
--section-spacing-y: 80px;
--typography-h1-font-size: 66px;
--typography-h2-font-size: 48px;
--typography-h3-font-size: 32px;
--typography-h4-font-size: 20px;
--typography-paragraph-font-size: 24px;
--typography-small-paragraph-font-size: 16px;
--typography-big-font-size: 128px;
}
}

View File

@ -0,0 +1,260 @@
section#faq {
.container{
flex-direction: column;
h2{
margin: 0;
margin-bottom: 30px;
@include bp(desktop){
margin-bottom: 60px;
}
}
}
.accordion {
.accordion-items {
display: flex;
flex-direction: column;
margin-top: 1px;
}
.accordion-item {
--open: 0;
border-bottom: 1px solid #72787E;
display: flex;
flex-direction: column;
// Checkbox-driven open state
input[type="checkbox"] {
display: none;
}
input[type="checkbox"]:checked ~ .accordion-item-heading {
// Optionally style the heading when open
}
input[type="checkbox"]:checked ~ .accordion-item-content-animation-wrapper {
grid-template-rows: 1fr;
transition: grid-template-rows 0.4s ease 0s;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
.accordion-item-content-transform-wrapper {
opacity: 1;
transform: translateY(0);
transition: transform 0.4s ease, visibility 0s 0.4s ease, margin-top 0.4s ease, opacity 0.3s ease 0.425s;
visibility: visible;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more {
background-color: var(--color-primary)
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more:before,
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more:after {
transform: translate(-50%, -50%) scale(calc(64/28));
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more:hover:before,
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more:hover:after {
transform: translate(-50%, -50%) scale(calc(56/28));
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more .plus {
transform: translate(-50%, -50%) rotate(90deg);
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more .plus:before {
opacity: 0;
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more .plus:after {
background-color: #ffffff;
}
&-heading {
cursor: pointer;
margin-bottom: -1px;
transition: background-color 0.3s, color 0.3s;
user-select: none;
isolation: isolate;
label{
display: flex;
justify-content: space-between;
padding: 20px 0;
z-index: 1;
@include bp(desktop){
padding: 40px 0;
}
}
&-title {
font-weight: 400;
font-size: 20px;
color: #002332;
@include bp(desktop){
font-size: 24px;
}
}
&-icon {
display: grid;
flex-shrink: 0;
height: 32px;
place-items: center;
position: relative;
width: 32px;
}
.button-more {
background-color: #ffffff;
border-radius: 50%;
cursor: pointer;
height: 24px;
position: relative;
transition: background-color 0.25s ease-out, box-shadow 0.25s ease-out;
width: 24px;
.plus {
height: 8px;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%) rotate(0deg);
transition: transform .25s ease-out;
width: 8px;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
.plus:before,
.plus:after {
background-color: var(--color-primary);
content: '';
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
transition: opacity .25s ease-out, background-color .25s ease-out;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
.plus:before {
height: 2px;
width: 8px;
}
.plus:after {
height: 8px;
width: 2px;
}
&:before {
-webkit-backdrop-filter: blur(2px);
backdrop-filter: blur(2px);
background-color: rgba(255, 255, 255, .25);
border-radius: 50%;
content: '';
height: 28px;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
transition: transform .25s ease-out;
width: 28px;
z-index: -1;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
&:after {
border-radius: 50%;
content: '';
height: 28px;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
width: 28px;
z-index: 1;
}
&:hover:before,
&:hover:after {
transform: translate(-50%, -50%) scale(calc(34/28));
}
// .active state now handled by input:checked selectors above
}
}
&-content {
gap: 20px;
grid-template-rows: 0fr;
justify-content: center;
padding: 0 0 20px 0;
transition: grid-template-rows 0.3s, transform, visibility 0.3s;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
&,
p {
color: #4F606E;
font-size: 16px;
line-height: 1.5;
margin: 0;
}
p:not(:last-child) {
margin-bottom: 1rem;
}
&-animation {
min-height: 0;
}
&-animation-wrapper {
display: grid;
grid-template-rows: 0fr;
overflow: hidden;
transition: grid-template-rows 0.4s ease;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
&-transform-wrapper {
margin-top: 0;
opacity: 0.875;
transform: translateY(-100%);
transition: transform 0.4s ease, margin-top 0.4s ease, opacity 0.3s ease;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
}
}
}
}

View File

@ -0,0 +1,54 @@
section#global {
padding-bottom: 0;
.container {
align-items: center;
flex-direction: column;
gap: 0 40px;
@include bp(desktop) {
flex-direction: row;
}
}
.content {
display: flex;
flex-basis: 0;
flex-direction: column;
flex-grow: 1;
gap: 24px;
@include bp(desktop) {
gap: 60px;
}
&-inner {
display: flex;
flex-direction: column;
gap: 6px;
@include bp(desktop) {
gap: 12px;
}
}
h2 {
margin: 0;
}
}
.photos-wrapper {
max-width: 424px;
padding: 100px 0 0;
@include bp(desktop) {
margin-left: 75px;
}
.photos {
flex-basis: 0;
flex-grow: 1;
}
}
}

View File

@ -0,0 +1,45 @@
section#hero {
--section-spacing-y: 0;
background-image: url('/images/community/hero-m.svg');
background-position: center;
background-size: cover;
border-radius: 12px;
display: flex;
flex-direction: column;
justify-content: flex-end;
min-height: 600px;
@include bp(tablet) {
background-image: url('/images/community/hero.svg');
background-position: center;
border-radius: 24px;
}
.container {
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 24px 12px;
@include bp(tablet) {
padding: 164px 12px 66px 12px;
}
.content {
align-items: flex-start;
display: flex;
flex-direction: column;
max-width: 670px;
.event-card {
margin-top: 24px;
@include bp(tablet) {
margin-top: 60px;
}
}
}
}
}

View File

@ -0,0 +1,106 @@
section#join {
isolation: isolate;
.container {
align-items: center;
flex-direction: column;
position: relative;
}
h2 {
align-items: center;
display: flex;
flex-direction: column;
margin: 0 auto;
text-transform: unset;
span:not(:first-child) {
margin-top: 8px;
@include bp(desktop) {
margin-top: 24px;
}
}
}
p {
//background-color: rgba(245, 246, 250, 0.6);
//backdrop-filter: blur(2px);
max-width: 650px;
text-align: center;
text-wrap: balance;
padding-top: 16px;
z-index: 1;
@include bp(desktop) {
padding-top: 40px;
}
}
.buttons {
margin-top: 52px;
z-index: 1;
@include bp(desktop) {
margin-top: 60px;
}
}
.avatars {
display: grid;
// 12 cols
grid-template-columns: repeat(6, 1fr);
position: absolute;
inset: 0;
&[data-dsap]:not([data-dsap-is="in"]):not([data-dsap-is="above"]) { // Reset after scroll up
.avatar{
opacity: 0;
}
}
@include bp(tablet) {
grid-template-columns: repeat(12, 1fr);
}
.avatar {
justify-self: center;
transition: opacity 0.25s ease-out;
&.hide{
img{
opacity: 0;
}
}
img {
height: 48px;
width: 48px;
border-radius: 50%;
transition: opacity 0.5s ease-out;
}
// hide every even avatar on desktop
&:nth-child(odd) {
display: none;
@include bp(tablet) {
display: block;
}
}
$list: 21,31,76,0,35,70,100,95,50,6,30,26;
@for $i from 1 through 12 {
&:nth-child(#{$i}) {
$offset: nth($list, $i);
transform: translateY(calc(#{$offset} * 1%));
opacity: 1;
transition-delay: #{0.2 + ($i * 0.05)}s;
}
}
}
}
}

View File

@ -0,0 +1,126 @@
section#meetups {
background-color: #CCEFFE;
border-radius: 12px;
overflow: hidden;
margin-top: 24px;
@include bp(tablet) {
border-radius: 24px;
}
.container {
gap: 60px;
flex-direction: column;
@include bp(tablet) {
flex-direction: row;
}
.content {
display: flex;
flex-direction: column;
align-items: flex-start;
h2 {
margin: 0;
margin-bottom: 20px;
@include bp(tablet) {
margin-bottom: 40px;
}
}
svg:has(use[href="#community"]) {
height: 40px;
width: 40px;
margin-bottom: 12px;
@include bp(desktop) {
margin-bottom: 40px;
height: 80px;
width: 80px;
}
}
.event-card {
margin-top: 20px;
@include bp(tablet) {
margin-top: 40px;
}
}
}
.guide {
background-color: rgba(246, 248, 251, 0.2);
border: 1px solid #ffffff;
border-radius: 12px;
padding: 40px 24px;
h3 {
margin: 0;
text-wrap: balance;
margin-bottom: 12px;
}
p {
color: #002332;
}
.buttons {
justify-content: flex-start;
}
.steps {
display: flex;
flex-direction: column;
gap: 8px;
margin: 40px 0;
.step {
@include small;
padding-left: 32px;
line-height: 1.5;
color: #4F606E;
position: relative;
&:before {
content: '';
width: 15px;
height: 15px;
border-radius: 50%;
box-shadow: inset 0 0 0 5px var(--color-primary);
left: 0;
top: 4px;
position: absolute;
}
&:not(:last-child) {
padding-bottom: 28px;
&:after {
content: '';
width: 1px;
background-color: #4F606E;
left: 7px;
bottom: -4px;
top: 26px;
position: absolute;
}
}
}
}
}
}
.content,
.guide {
@include bp(desktop) {
flex-grow: 1;
flex-basis: 50%;
width: 100%;
}
}
}

View File

@ -0,0 +1,36 @@
section#nav {
--section-spacing-y: 20px;
@include bp(tablet) {
--section-spacing-y: 40px;
}
.nav-pills{
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 12px;
.nav-pill{
background-color: #ffffff;
border-radius: 32px;
cursor: pointer;
transition: background-color 0.25s ease, color 0.25s ease;
font-size: 12px;
font-weight: 500;
padding: 6px 12px;
white-space: nowrap;
text-decoration: none;
color: #002332;
&:hover{
background-color: var(--color-primary);
color: #ffffff;
}
@include bp(tablet) {
font-size: 14px;
}
}
}
}

View File

@ -0,0 +1,157 @@
section#newsletter {
--section-spacing-y: 0;
background-color: #002332;
border-radius: 12px;
overflow: hidden;
.container {
gap: 0px 60px;
align-items: flex-end;
justify-content: center;
align-items: center;
flex-direction: column;
@include bp(tablet) {
align-items: center;
flex-direction: row;
}
@include bp(desktop) {
align-items: flex-end;
}
}
h2 {
margin-top: 0;
text-wrap: balance;
}
&,
p {
color: #ffffff;
}
@include bp(tablet) {
border-radius: 24px;
}
.content {
padding: 52px 0;
@include bp(tablet) {
padding: 100px 0;
}
}
.buttons {
justify-content: flex-start;
margin-top: 20px;
@include bp(tablet) {
margin-top: 40px;
}
}
.editions {
display: flex;
flex-direction: column;
flex-shrink: 0;
max-width: 570px;
align-items: center;
margin-bottom: -40px;
width: 100%;
order: 1;
@include bp(tablet) {
order: -1;
flex-basis: 50%;
align-self: center;
}
@include bp(desktop) {
}
@include bp(large-desktop) {
flex-basis: 570px;
align-self: flex-end;
margin-bottom: -64px;
}
&[data-dsap]:not([data-dsap-is="in"]):not([data-dsap-is="above"]) {
// Only if scrolling down into the element
.edition {
transition-duration: 0s;
transition-delay: 0s;
&:nth-child(1) {
transform: translateY(120px);
}
&:nth-child(2) {
transform: translateY(40px);
}
}
}
.edition {
aspect-ratio: 571/300;
width: 100%;
max-width: 100%;
position: relative;
border-radius: 6px;
overflow: hidden;
transition: transform 0.8s cubic-bezier(0.3, 1, 0.5, 1);
transition-delay: .25s;
@include bp(tablet) {
border-radius: 12px;
}
.label {
display: none;
}
img {
width: 100%;
height: 100%;
object-fit: cover;
position: absolute;
border-radius: 0;
inset: 0;
}
&:nth-child(1) {
max-width: 80%;
height: 45px;
transition-delay: .3s;
z-index: 1;
@include bp(tablet) {
height: 70px;
}
}
&:nth-child(2) {
max-width: 90%;
justify-self: center;
height: 50px;
transform: translateY(-20px);
z-index: 2;
@include bp(tablet) {
height: 80px;
}
}
&:nth-child(3) {
max-width: 100%;
justify-self: center;
z-index: 3;
transform: translateY(-40px);
}
}
}
}

View File

@ -0,0 +1,20 @@
// Setup
@import "homeassistant/pages/community/mixins.scss";
@import "homeassistant/pages/community/variables.scss";
// Base
@import "homeassistant/pages/community/base.scss";
@import "homeassistant/pages/community/icon.scss";
@import "homeassistant/pages/community/buttons.scss";
@import "homeassistant/pages/community/event-card.scss";
@import "homeassistant/pages/community/photos.scss";
@import "homeassistant/pages/community/stats.scss";
// Components
@import "homeassistant/pages/community/components/nav.scss";
@import "homeassistant/pages/community/components/hero.scss";
@import "homeassistant/pages/community/components/global.scss";
@import "homeassistant/pages/community/components/join.scss";
@import "homeassistant/pages/community/components/newsletter.scss";
@import "homeassistant/pages/community/components/meetups.scss";
@import "homeassistant/pages/community/components/faq.scss";

View File

@ -104,7 +104,7 @@ type: area
area: bedroom
display_type: picture
navigation_path: my_bedroom
sensor_classes:
sensor_classes:
- temperature
- humidity
alert_classes:
@ -116,4 +116,4 @@ features:
## Available colors
You want to colorize the area card? Choose one of the following colors: `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black`, and `white`.
The following colors are available to colorize the area card: `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black`, `white`, or any hex color code (for example, `#93c47d`).

View File

@ -132,7 +132,7 @@ hide_state: true
```yaml
type: tile
entity: light.living_room
state_content:
state_content:
- state
- brightness
- last-changed
@ -150,6 +150,6 @@ features:
## Available colors
You want to colorize the tile card? Choose one of the following colors: `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black` and `white`.
The following colors are available to colorize the tile card: `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black`, `white`, or any hex color code (for example, `#93c47d`).

View File

@ -0,0 +1,11 @@
items:
- question: Where do I find support?
answer: Support for Home Assistant software (and other Open Home Foundation projects) is done by community members who volunteer their time to help out fellow hobbyists. The most active communities for providing support are our <a href="https://community.home-assistant.io/">community forums</a> and the <a href="https://discord.com/invite/home-assistant">Discord server</a>. Just make sure to follow the rules about where and how to post your support query. It is also possible to ask for support in the <a href="https://www.facebook.com/groups/HomeAssistant/">Facebook group</a> and on <a href="https://www.reddit.com/r/homeassistant/">Reddit</a>.
- question: How can I contribute to the project?
answer: <p>No matter your experience, there are plenty of ways to get involved and contribute to Home Assistant! If youve got the dev skills (whether you're a beginner or expert), <a href="https://developers.home-assistant.io/docs/review-process#before-creating-your-pr">start here</a>, which shows you how to craft a PR, and then check out our extensive <a href="https://developers.home-assistant.io/docs/development_index/">Core documentation</a> to help familiarize yourself with our architecture. There you will find instructions on how to join the Developers category in our Discord server, which allows you to chat directly with other developers.</p><p>If you're knowledgeable about how to use Home Assistant, don't be afraid to hop onto one (or more) of our community platforms to share this knowledge. This is a great way to contribute if youre not a developer. Additionally, suppose you're a designer and are passionate about Home Assistant. In that case, we'd love for you to check out our <a href="https://developers.home-assistant.io/docs/development_index/">Developers category in Discord</a> (Follow the steps to join the development server, and choose I want to contribute design skills!).</p><p>If youre not able to give your time, you can also financially support the foundation, which pays passionate people to work on Home Assistant full-time. Subscribing to <a href="https://www.home-assistant.io/cloud/">Home Assistant Cloud</a> or purchasing our officially licensed Home Assistant hardware supports the development of this project and <a href="https://www.openhomefoundation.org/projects/">many others</a>. In the near future, we hope to relaunch our merch store where community members can purchase swag to support the foundation.</p>
- question: Where can I find regional communities?
answer: <p>This is not an exhaustive list of regional communities, but the ones that we are aware of. Is yours missing? Let us know!</p><ul><li><a href="https://forum.hacf.fr/">Home Assistant Communauté Francophone</a></li><li><a href="https://discord.com/invite/6PWva4TYXz">Community Smart Home</a> (German-speaking Discord Server) and <a href="https://community-smarthome.com/">their forums</a></li><li><a href="https://www.facebook.com/groups/HomeAssistantNL/">Home Assistant [DUTCH]</a> (Private FB group)</li><li><a href="https://www.facebook.com/groups/594073248777064">Home Assistant Enthusiasts - South Africa</a> (Private FB group)</li><li><a href="https://www.facebook.com/groups/homeassistantau">Home Assistant AU & NZ</a> (Australia & New Zealand - Public FB group)</li><li><a href="https://www.facebook.com/groups/homeassistant.island/">Home Assistant Ísland</a> (Iceland - Private FB group)</li></ul>
- question: Can community hosts be reimbursed for fees related to their meetups?
answer: Yes! Community is the foundation of Home Assistant, and we want to help make sure that meeting with other smart home enthusiasts is a stress-free experience. The Open Home Foundation will reimburse hosts for certain fees related to hosting a meetup. Check out our Expense Guidelines for Hosts for more information.
- question: I have a suggestion for this page!
answer: Excellent! Let Missy know by emailing <a href="mailto:community@openhomefoundation.org">community@openhomefoundation.org</a>, and we'll put it under consideration.

View File

@ -79,7 +79,7 @@
Home Assistant has built-in functionality to create files containing a copy
of your configuration. This can be used to restore your Home Assistant as
well as migrate to a new system. The backup feature is available for all
[installation types](/installation/#about-installation-methods).
[installation types](/installation/#about-installation-types).
link: /common-tasks/general/#backups
aliases:
- backups
@ -307,23 +307,23 @@
Home Assistant Container is a standalone container-based installation of
Home Assistant Core. Any [OCI](https://opencontainers.org/) compatible
runtime can be used, but the documentation focus is on Docker.
link: /installation/#about-installation-methods
link: /installation/#about-installation-types
- term: Home Assistant Core
definition: >-
Home Assistant Core is the Python program at the heart of Home Assistant. It
is part of all installation types. It can be installed standalone (without Home Assistant
Supervisor) as a container using Docker (this is typically referred to as the Home Assistant
Container installation method). For development, Core can also be run using a Virtual
Environment (previously referred as the Home Assistant Core installation method.
For production setup, the [Home Assistant Core installation method is deprecated](https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/).
Container installation type). For development, Core can also be run using a Virtual
Environment (previously referred as the Home Assistant Core installation type.
For production setup, the [Home Assistant Core installation type is deprecated](https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/).
- term: Home Assistant Supervised
definition: >-
The Home Assistant Supervised installation method is a full UI managed home automation ecosystem
The Home Assistant Supervised installation type is a full UI managed home automation ecosystem
that runs the Home Assistant Core program, the Home Assistant Supervisor and
add-ons. It comes pre-installed on Home Assistant OS, but can be installed
standalone on Debian Linux systems. It leverages Docker, which is managed by
the Home Assistant Supervisor. The
[Home Assistant Supervised installation method is deprecated](https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/).
[Home Assistant Supervised installation type is deprecated](https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/).
- term: Home Assistant Supervisor
definition: >-
The Home Assistant Supervisor is a program that manages a Home Assistant
@ -337,7 +337,7 @@
includes Home Assistant Core, the Home Assistant Supervisor, and supports
add-ons. Home Assistant Supervisor keeps it up to date, removing the need
for you to manage an operating system. Home Assistant Operating System is
the recommended installation method for most users.
the recommended installation type for most users.
- term: Host
definition: >-
A device that can communicate with other devices on a network. During setup

View File

@ -7,10 +7,10 @@ Automations support the advanced features of [templating](/docs/configuration/te
Example of variables used in templates:
```jinja
{{ this.name }} is the name of the automation executing from this trigger
{{ trigger.platform }} is the type of trigger object, like `calendar`
```
{% raw %}
- `{{ this.name }}` is the name of the automation executing from this trigger
- `{{ trigger.platform }}` is the type of trigger object, like `calendar`
{% endraw %}
## Available state data

View File

@ -86,7 +86,7 @@ If you do not want to [re-import the blueprint](/docs/automation/using_blueprint
its {% term YAML %} content to keep it up to date:
1. Navigate to the blueprints directory (`blueprints/automation/`).
The location of this directory depends on the installation method. It's
The location of this directory depends on the installation type. It's
similar to how you find [`configuration.yaml`](/docs/configuration/#editing-configurationyaml).
2. Next, you must find the blueprint to update. The path name of a blueprint consists of:
- The username of the user that created it. The name depends on the source of the blueprint:

View File

@ -1197,7 +1197,7 @@ When used without options, the selector will accept a free form object.
object:
```
When used with a `schema`, the selector will force the object to be in this format by displaying a form.
When used with `fields` specified, the selector will force the object to be in this format by displaying a form.
![Screenshot of an object selector](/images/blueprints/selector-object-schema.png)
@ -1220,7 +1220,7 @@ object:
The output of this selector is a YAML object.
{% configuration qr_code %}
{% configuration object %}
fields:
description: >
List of fields of the object.
@ -1231,6 +1231,11 @@ fields:
description: The label of the field
required: false
type: string
required:
description: If set to true, the field must be present.
required: false
default: false
type: boolean
selector:
description: The selector to use for this field. It can be any available selector.
required: true
@ -1256,7 +1261,7 @@ translation_key:
required: false
multiple:
description: >
Allows selecting multiple options. If set to `true`, the resulting value of this selector will be a list instead of a single string value. This option is only used if `fields` option set.
Allows adding multiple objects. If set to `true`, the resulting value of this selector will be a list instead of a single YAML object. This option is only used if `fields` option set.
type: boolean
required: false
default: false

View File

@ -27,7 +27,7 @@ Example of a configuration.yaml file, accessed using the File editor add-on on a
## Editing `configuration.yaml`
How you edit your `configuration.yaml` file depends on your editor preferences and the [installation method](/installation/#about-installation-methods) you used to set up Home Assistant. Follow these steps:
How you edit your `configuration.yaml` file depends on your editor preferences and the [installation type](/installation/#about-installation-types) you used to set up Home Assistant. Follow these steps:
1. [Set up file access](#to-set-up-access-to-the-files-and-prepare-an-editor).
2. [Locate the config directory](#to-find-the-configuration-directory).
@ -37,7 +37,7 @@ How you edit your `configuration.yaml` file depends on your editor preferences a
### To set up access to the files and prepare an editor
Before you can edit a file, you need to know how to access files in Home Assistant and setup an editor.
File access depends on your [installation method](/installation/#about-installation-methods). If you use {% term "Home Assistant Operating System" %}, you can use editor add-ons, for example. If you use {% term "Home Assistant Container" %}, add-ons are not available.
File access depends on your [installation type](/installation/#about-installation-types). If you use {% term "Home Assistant Operating System" %}, you can use editor add-ons, for example. If you use {% term "Home Assistant Container" %}, add-ons are not available.
To set up file access on the Home Assistant Operating System, follow these steps:
@ -70,7 +70,7 @@ If you have watched any videos about setting up Home Assistant using `configurat
After changing configuration or automation files, you can check if the configuration is valid. A configuration check is also applied automatically when you reload the configuration or when you restart Home Assistant.
The method for running a configuration check depends on your [installation type](/installation/#about-installation-methods). Check the common tasks for your installation type:
The method for running a configuration check depends on your [installation type](/installation/#about-installation-types). Check the common tasks for your installation type:
- [Configuration check on Operating System](/common-tasks/os/#configuration-check)
- [Configuration check on Container](/common-tasks/container/#configuration-check)

View File

@ -5,7 +5,7 @@ description: "Description of hass."
The command-line part of Home Assistant is `hass`.
This tool is only available to users of the Home Assistant Core installation method. It is started from the command line on the computer running Home Assistant Core (accessed perhaps via SSH).
This tool is only available to users of the Home Assistant Core installation type. It is started from the command line on the computer running Home Assistant Core (accessed perhaps via SSH).
```text
$ hass -h

View File

@ -5,7 +5,7 @@ ha_category: Installation
---
Home Assistant Core is a Python program, in simple words. It can be run on various operating systems and provide the ability to track, control and automate your devices.
When people talking about Home Assistant Core they usually refer to a standalone [installation method](/docs/installation/).
When people talking about Home Assistant Core they usually refer to a standalone [installation type](/docs/installation/).
[Home Assistant](/hassio/) is a combination of Home Assistant Core and tools which allows one to run it easily on a Raspberry Pi and other platforms without setting up an operating system first.
Home Assistant is an all-in one-solution and has a management user interface that can be used from the Home Assistant frontend. This interface is not present in a Home Assistant Core setup.

View File

@ -80,11 +80,11 @@
</ol>
</div>
<!-- Community Day 2025 - To move on/after event -->
<a href="https://lu.ma/homeassistant" class="material-card picture-promo" target="_blank" style="
background-image: url(/images/frontpage/community-meetup.webp);
<!-- Community -->
<a href="/community" class="material-card picture-promo" style="
background-image: url(/images/frontpage/community-card.webp);
aspect-ratio: 500/263;
" aria-label="State of the Open Home - Saturday April 12th 2025">
" aria-label="Join the Home Assistant community">
</a>
<!-- OHF notice -->

View File

@ -4,7 +4,7 @@
These below instructions are for an installation of {% term "Home Assistant Container" %} running in your own container environment, which you manage yourself. Any [OCI](https://opencontainers.org/) compatible runtime can be used, however this guide will focus on installing it with Docker.
{% note %}
This installation method **does not have access to add-ons**. If you want to use add-ons, you need to use another installation method. The recommended method is {% term "Home Assistant Operating System" %}. Checkout the [overview table of installation types](https://www.home-assistant.io/installation/#about-installation-methods) to see the differences.
This installation type **does not have access to add-ons**. If you want to use add-ons, you need to use another installation type. The recommended type is {% term "Home Assistant Operating System" %}. Checkout the [overview table of installation types](https://www.home-assistant.io/installation/#about-installation-types) to see the differences.
{% endnote %}
{% important %}

View File

@ -43,12 +43,7 @@ This section explains how to generate a client ID and client secret on
- For Application type, choose **Web Application** and give this client ID a name (like "Home Assistant Client").
- Add `https://my.home-assistant.io/redirect/oauth` to **Authorized redirect URIs** then select **Create**.
> **Note**: This is not a placeholder. It is the URI that must be used.
- Click **Create**.
9. Find the client you just created. Under the Actions column, choose **Download OAuth client** (download icon), which will show you the **Client ID** and **Client Secret**.
- Make a note of these (for example, copy and paste them into a text editor), as you will need them shortly.
9. From the resulting dialog take a note of **Client ID** and **Client Secret** you **can not retrieve it again** after closing the dialog.
- Once you have noted these strings, select **Close**.
- Congratulations! You are now the keeper of a client secret. Guard it in your treasure box. In most cases, your new credentials will be active within a few minutes. However, Google states that activation may take up to five hours in some circumstances.
> If you need to find these credentials again at any point, then navigate to **APIs & Services** > **Credentials**, and you will see **Home Assistant Credentials** (or whatever you named them in the previous step) under **OAuth 2.0 Client IDs**.
>
> To view the **Client ID** and **Client Secret**, click the **Download OAuth client** (download icon) under the Actions column.
{% enddetails %}

View File

@ -31,6 +31,7 @@
<li><a class="external-link" href="https://community.home-assistant.io">Community Forum {% icon "tabler:external-link" %}</a></li>
<li><a class="external-link" href="https://creators.home-assistant.io/">Creator Network {% icon "tabler:external-link" %}</a></li>
<li><a class="external-link" href="https://works-with.home-assistant.io/">Works With Home Assistant {% icon "tabler:external-link" %}</a></li>
<li><a href="/community">Our community</li>
<li><a href="/help/reporting_issues/">Reporting issues</a></li>
</ul>
<h3>System status</h3>

View File

@ -87,24 +87,22 @@ Timeframe:
## Supported functionality
### Entities
The **My integration** integration provides the following entities.
#### Buttons
### Buttons
- **Start backflush**
- **Description**: Starts the backflush process on your machine. You got 15 seconds to turn the paddle after activation.
- **Available for machines**: all
#### Numbers
### Numbers
- **Dose**
- **Description**: Dosage (in ticks) for each key
- **Available for machines**: GS3 AV, Linea Mini.
- **Remarks**: GS3 has this multiple times, one for each physical key (1-4), and the entities are disabled by default.
#### Sensors
### Sensors
- **Current coffee temperature**
- **Description**: Current temperature of the coffee boiler.
@ -116,7 +114,7 @@ The **My integration** integration provides the following entities.
- **Available for machines**: Linea Micra, GS3 AV, GS3 MP.
- **Remarks**: -
#### Selects
### Selects
- **Prebrew/-infusion mode**
- **Description**: Whether to use prebrew, preinfusion, or neither.
@ -128,7 +126,7 @@ The **My integration** integration provides the following entities.
- **Options**: 1, 2, 3
- **Available for machines**: Linea Micra
#### Updates
### Updates
- **Gateway firmware**
- **Description**: Firmware status of the gateway.
@ -174,11 +172,11 @@ The integration does not provide the ability to reboot, which can instead be don
When trying to set up the integration, the form shows the message “This device cant be reached”.
##### Description
#### Description
This means the settings on the device are incorrect, since the device needs to be enabled for local communication.
##### Resolution
#### Resolution
To resolve this issue, try the following steps:

View File

@ -74,10 +74,24 @@ Available actions: `notify.send_message`, `alexa_devices.send_sound`, `alexa_dev
Devices with appropriate functionality will have speak and announce notify entities created. These can be used as the target for the `notify.send_message` action.
| Data attribute | Optional | Description |
| -------------- | -------- | ----------------------------------------- |
| `message` | no | Text to be output (see below for advanced markup) |
{% tip %}
When sending notifications to multiple devices, you may experience delays due to rate limiting by Amazon. You can avoid this by sending notifications to speaker groups created in Alexa.
{% endtip %}
{% details "Advanced Message Markup" %}
Amazon provide markup to control not only what is said but how it is said and to add additional option such as pausing and playing certain audio clips. Details of this are covered in [Amazon's documentation](https://developer.amazon.com/en-US/docs/alexa/custom-skills/speech-synthesis-markup-language-ssml-reference.html) where there are lots of examples (just pass everything between the `<speak>` and `</speak>` elements into the `message` parameter of the action).
Audio files must meet certain criteria on size, bit and sample rates and must be served over HTTPS (see [documentation](https://developer.amazon.com/en-US/docs/alexa/custom-skills/speech-synthesis-markup-language-ssml-reference.html#audio) for full details). These restrictions make them fine for text and sound effects but you will not be able to play music this way.
Amazon provide a set of [sounds you can use](https://developer.amazon.com/en-US/docs/alexa/custom-skills/ask-soundlibrary.html) which contains the markup you will need for that clip.
{% enddetails %}
#### Action `alexa_devices.send_text_command`
This action essentially allows you to control Alexa using text commands rather than speech. You should be able to request anything you would via speech using this action.
@ -89,12 +103,11 @@ This action essentially allows you to control Alexa using text commands rather t
#### Action `alexa_devices.send_sound`
This action allows you to play one of the built-in Alexa sounds. The full list of sounds and their variants is available in [Amazon's documentation](https://developer.amazon.com/en-US/docs/alexa/custom-skills/ask-soundlibrary.html)
This action allows you to play one of the built-in Alexa sounds. The full list of sounds is available in [Amazon's documentation (needs authentication)](https://alexa.amazon.com/api/behaviors/entities?skillId=amzn1.ask.1p.sound)
| Data attribute | Optional | Description |
| -------------- | -------- | ----------------------------------------- |
| `device_id` | no | Device on which you want to play sound |
| `sound_variant` | no | The variant you want to play (generally 1) |
| `sound` | no | The name of the sound to play |
## Examples
@ -140,19 +153,37 @@ data:
```yaml
action: alexa_devices.send_sound
data:
sound_variant: 1
sound: amzn_sfx_doorbell_chime
sound: amzn_sfx_doorbell_chime_01
device_id: 037d79c1af96c67ba57ebcae560fb18e
```
### Play alternative doorbell sound
### Using advanced markup in a notification
```yaml
action: alexa_devices.send_sound
action: notify.send_message
data:
sound_variant: 2
sound: amzn_sfx_doorbell_chime
device_id: 037d79c1af96c67ba57ebcae560fb18e
message: >
Hello, lets have some examples.
<amazon:emotion name="excited" intensity="medium"> This is me being mildly excited! </amazon:emotion>
The farmer's dog was called <say-as interpret-as='spell-out'>bingo</say-as>.
<prosody pitch='high'> I can sing high </prosody> <prosody pitch='low'> and I can sing low </prosody>
target:
entity_id: notify.study_dot_speak
```
```yaml
action: notify.send_message
data:
message: >
Stop! <break time='3s'/> Hammer Time. Watch out
<audio src="soundbank://soundlibrary/scifi/amzn_sfx_scifi_laser_gun_battle_01"/>
Shields up! <audio src="soundbank://soundlibrary/scifi/amzn_sfx_scifi_shields_up_01" />
<amazon:effect name="whispered">
<prosody rate="x-slow"><prosody volume="loud">Enough now</prosody></prosody>
</amazon:effect>
target:
entity_id: notify.study_dot_speak
```
## Data updates

View File

@ -586,6 +586,11 @@ cards:
- If you can't turn on your Nvidia Shield device, go to **Settings** > **Remotes & accessories** > **Simplified wake buttons** and disable the following options: **SHIELD 2019 Remote: Wake on power and Netflix buttons only** and **Controllers: Wake on NVIDIA or logo buttons only**.
## Data updates
Android TV devices push data directly to Home Assistant, enabling immediate updates for device state changes such as power state, volume, and current active app. But the media player entity has assumed playback state since the Android TV Remote API doesn't provide playback status.
## Removing the integration
{% include integrations/remove_device_service.md %}

View File

@ -53,22 +53,50 @@ For Bluetooth to function on Linux systems:
### Additional requirements by install method
- Home Assistant Operating System: Upgrade to Home Assistant OS version 9.0 or later.
- Home Assistant Container: The host system must run BlueZ, and the D-Bus socket must be accessible to Home Assistant **inside** the container.
- Home Assistant Operating System: Upgrade to Home Assistant OS version 9.0 or later. All Bluetooth requirements are automatically configured.
- Home Assistant Container: The host system must run BlueZ, and the D-Bus socket must be accessible to Home Assistant **inside** the container. Additional configuration is required (see below).
### Additional details for Container
{% details "Making the DBus socket available in the Docker container" %}
{% details "Container configuration for Bluetooth" %}
For most systems, the Dbus socket is in `/run/dbus`. The socket must be available in the container for Home Assistant to be able to connect to Dbus and access the Bluetooth adapter. When starting with `docker run`, this can be accomplished by adding `-v /run/dbus:/run/dbus:ro` to the command. If the Dbus socket is in `/var/run/dbus` on the host system, use `-v /var/run/dbus:/run/dbus:ro` instead.
{% note %}
You only need these configuration steps for Home Assistant Container installations. Home Assistant Operating System automatically handles all Bluetooth configuration.
{% endnote %}
If you are using Docker Compose, add something like the following (adjust as necessary) to your `volumes` section:
Home Assistant Container requires specific configuration to access Bluetooth adapters.
```dockerfile
**Required capabilities:**
Add the following Linux capabilities to your container configuration to enable full Bluetooth management:
**Docker Compose:**
```yaml
cap_add:
- NET_ADMIN
- NET_RAW
volumes:
- /run/dbus:/run/dbus:ro
```
**Docker run:**
```bash
docker run --cap-add=NET_ADMIN --cap-add=NET_RAW -v /run/dbus:/run/dbus:ro ...
```
**D-Bus socket:**
For most systems, the D-Bus socket is in `/run/dbus`. You need to make the socket available in the container for Home Assistant to connect to D-Bus and access the Bluetooth adapter. If the D-Bus socket is in `/var/run/dbus` on your host system, use `-v /var/run/dbus:/run/dbus:ro` instead.
**What happens without these capabilities:**
If `NET_ADMIN` and `NET_RAW` capabilities are missing:
- Your Bluetooth will operate in a degraded mode with limited functionality
- Automatic adapter recovery is unavailable - your adapters cannot be reset when they stop responding
- Connection parameters and management API commands will fail
- Raw advertising data will be missing, causing unreliable updates for your devices
- An error will appear in your logs: "Missing required permissions for Bluetooth management"
{% enddetails %}
{% details "Switching from dbus-daemon to dbus-broker" %}

View File

@ -28,10 +28,12 @@ The integration automatically discovers all enabled zones and sources. Each zone
This integration allows you to connect the following devices:
- Cambridge Audio Evo One
- Cambridge Audio Evo 75
- Cambridge Audio Evo 150
- Cambridge Audio CXN
- Cambridge Audio CXN (v2)
- Cambridge Audio CXN100
- Cambridge Audio CXR120
- Cambridge Audio CXR200
- Cambridge Audio 851N

View File

@ -112,6 +112,7 @@ Known supported devices:
- Marantz NR1604
- Marantz NR1606
- Marantz NR1607
- Marantz NR1609
- Marantz NR1710
- Marantz NR1711
- Other Denon AVR receivers (untested)

View File

@ -28,6 +28,8 @@ The **Enphase Envoy** {% term integration %} is used to integrate with the [Enph
## Supported devices
The actual model and installed components will determine the available [capabilities](#capabilities) and which data can be provided to the [Energy dashboard](#energy-dashboard). The Envoy firmware has [known issues](#known-issues-and-limitations) that may come and go as versions change.
This integration works with:
- Older and newer <abbr title="IQ Gateway">Envoy</abbr> models that only have production metrics (such as Envoy-R (LCD), Envoy-S (not metered))
@ -236,7 +238,7 @@ For storage CT energy entities refer to [battery sensor](#aggregated-iq-battery-
### Grid sensor entities
When the Envoy Metered is equipped with a [net-consumption CT](#current-transformers), entities for Grid import and export are available.
When the Envoy Metered is equipped with a [net-consumption CT](#current-transformers), entities for Grid import and export are available. See Limitations, [Grid Import/Export values incorrect](#grid-importexport-values-incorrect) when using these.
- **Envoy <abbr title="Envoy serial number">SN</abbr> Current net power consumption**: Current power exchange from (positive) / to (negative) the grid in W, default display in kW.
- **Envoy <abbr title="Envoy serial number">SN</abbr> Lifetime net energy consumption**: Lifetime energy consumed / imported from the grid in Wh, default display in MWh.
@ -478,11 +480,11 @@ For **Solar production**, use the **Envoy <abbr title="Envoy serial number">SN</
### Electricity grid
Whether there is data available to use with the electricity grid depends on the installed <abbr title="current transformers">CT</abbr>, if any. Also, see Limitations, [Balancing grid meter](#balancing-grid-meter).
Whether there is data available to use with the electricity grid depends on the installed <abbr title="current transformers">CT</abbr>, if any. Also, see Limitations, [Grid Import/Export values incorrect](#grid-importexport-values-incorrect) and [Balancing grid meter](#balancing-grid-meter).
#### Electricity grid with net-consumption CT
With a [net-consumption CT](#grid-sensor-entities) installed, both grid consumption and return to grid data is available.
With a [net-consumption CT](#grid-sensor-entities) installed, both grid consumption and return to grid data is available. (Also, see [Limitations](#grid-importexport-values-incorrect))
- For **Grid consumption**, use the **Envoy <abbr title="Envoy serial number">SN</abbr> Lifetime net energy consumption** entity.
- For **Return to grid**, use the **Envoy <abbr title="Envoy serial number">SN</abbr> Lifetime net energy production** entity.
@ -706,7 +708,7 @@ data:
Technically `select.first`, `select.last`, `select.previous`, `select.next` are available as well, but as there's no logical sequence in the values to select, their use is not advocated.
{% endnote %}
## Know issues and limitations
## Known issues and limitations
### Firmware changes
@ -724,17 +726,15 @@ Until a resolution is found, you must use the Enphase App to control these featu
### Late reset
When using Envoy Metered with <abbr title="current transformers">CT</abbr>, not all firmware versions reset 'Energy production today' at midnight. Delays of up to 15 minutes have been reported. In this case, best use a utility meter with the `Lifetime energy production` entity for daily reporting.
Not all firmware versions reset `Energy production today` or `Energy consumption today`, `Energy production last seven days` and `Energy consumption last seven days` at midnight. A 1 hour delay is reported. In this case, best use a utility meter with the 'Lifetime' entity for daily reporting. This seems to be daylight savings time change related and surfaced in recent firmware versions. Some older firmware versions would reset up to 15 minutes late, even outside daylight saving periods.
### Energy incorrect
When using Envoy Metered with <abbr title="current transformers">CT</abbr>
- not all firmware versions report `Energy production today` and/or `Energy consumption today` correctly. Zero data and unexpected spikes have been reported. In this case, best use a utility meter with the `Lifetime energy production` or `Lifetime energy consumption` entity for daily reporting.
- not all firmware versions report `Energy production last seven days` and/or `Energy consumption last seven days` correctly. Zero and unexpected values have been reported.
- `Energy production today` and `Energy consumption today` have been reported not to reset to zero at the start of the day. Instead, it resets to a non-zero value that seems to gradually increase over time, although other values have been reported as well. This issue has also been reported as starting suddenly overnight. For daily reporting, it is recommended to use a utility meter with the `Lifetime energy production` or `Lifetime energy consumption` entity.
- `Energy production today`, `Energy consumption today`, `Energy production last seven days` and `Energy consumption last seven days` have been reported not to reset to zero at the start of the day. Instead, it resets to zero at a later time, often 1 am. This seems to be daylight savings time change related.
- not all firmware versions report `Energy production today` and/or `Energy consumption today` correctly. Zero data, changes to a lower value and unexpected spikes have been reported. Enphase reportedly indicated it is an issue in summing phase values to aggregated data. In this case, either use individual phase data or a utility meter with the `Lifetime energy production` or `Lifetime energy consumption` entity for daily reporting.
- not all firmware versions report `Energy production last seven days` and/or `Energy consumption last seven days` correctly. Zero and unexpected values have been reported. Enphase reportedly indicated it is an issue in summing phase values to aggregated data. In this case, use the individual phase data.
- `Energy production today` and `Energy consumption today` have been reported not to reset to zero. Instead, it resets to a non-zero value that seems to gradually increase over time, although other values have been reported as well. This issue has also been reported as starting suddenly overnight. For daily reporting, it is recommended to use a utility meter with the `Lifetime energy production` or `Lifetime energy consumption` entity.
{% details "History examples for Today's energy production value not resetting to zero" %}
@ -749,6 +749,14 @@ When using Envoy Metered with <abbr title="current transformers">CT</abbr>
</figure>
{% enddetails %}
These issues may result in log entries like:
```txt
Entity sensor.envoy_123456789012_energy_consumption_today from integration enphase_envoy has state class total_increasing, but its state is not strictly increasing. Triggered by state 12.345 (12.543) with last_updated set to 2025-09-05T18:00:23.432536+00:00. Please create a bug report at ...
```
If these entries occur frequently and are a nuisance then disable the entity. It's data is at best doubtful.
### Lifetime reset
Envoy Metered without installed CT, running older firmware versions, reportedly resets **Lifetime energy production** to 0 when reaching 1.2 MWh. For use with the energy dashboard, the reset is not an issue. In a recent firmware version 8.x.x the reset is solved, but results in a one-time step change to the full lifetime value. This has impact on the energy dashboard, it can be solved by setting the statistics value for that moment to 0 in [Developer Tools: Statistics](/docs/tools/dev-tools/#statistics-tab)
@ -788,6 +796,10 @@ If you are not seeing [inverters](#sensor-entities) detail data, verify if you h
The Envoy Metered in multiphase setup, sums the voltages of the phases measured on the CT for the aggregated data. This may be valid for split-phase, but for 3-phase systems, use the individual phases rather than the summed value.
### Grid Import/Export values incorrect
Envoy Metered with a net-consumption CT measures current and energy exchange between switchboard and grid. Mismatches with other grid-meters and/or the Enphase web-site have been reported. It's not clear if this is related to a recent firmware version or longer existing. When using these values best validate if they are correct in your specific case.
### Balancing grid meter
In multiphase installations with batteries, in countries with phase-balancing grid meters, the battery will export to the grid on one phase the amount it lacks on another phase. This other phase pulls the missing amount from the grid, as if it is using the grid as a 'transport' between phases. Since the grid meter will balance the amount imported and exported on the two phases, the net result is zero. The Envoy multiphase net-consumption CTs, however, will report the amounts on both phases, resulting in too high export on one and too high import on the other. One may consider using the `lifetime balanced net energy consumption` which is the sum of grid import and export to eliminate this effect. This would require some templating to split these values into import and export values. Alternatively, use the `current net power consumption` or `balanced net power consumption` with a Riemann integral sum helper.
@ -802,6 +814,14 @@ If you experience periodic connection issues, ensure the Envoy is connected to o
The **CT active flag count** value shows the number of CT status flags that are raised. In a normal state, the value of **CT active flag count** is zero. If the value is non-zero, consult the [diagnostic](#diagnostics) report of the Envoy and look for `raw_data` - `/ivp/meters` - `statusFlags` for set flags, one or more from (`production-imbalance` | `negative-production` | `power-on-unused-phase` | `negative-total-consumption`). Their somewhat descriptive names may be an indication of installation issues.
### Log entry for state is not strictly increasing
The log shows an entry like below for energy consumption today or energy production today. See the [energy incorrect](#energy-incorrect) topic for a description of this issue.
```txt
Entity sensor.envoy_123456789012_energy_consumption_today from integration enphase_envoy has state class total_increasing, but its state is not strictly increasing. Triggered by state 12.345 (12.543) with last_updated set to 2025-09-05T18:00:23.432536+00:00. Please create a bug report at ...
```
### Debug logs and diagnostics
This integration provides debug log and {% term diagnostics %} report as described in the [Home Assistant troubleshooting pages](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).

View File

@ -16,7 +16,7 @@ ha_codeowners:
ha_integration_type: integration
---
The GitHub integration allows you to monitor your favorite [GitHub](https://github.com/) repositories.
The GitHub integration allows you to monitor your favorite [GitHub](https://github.com/) public repositories.
{% include integrations/config_flow.md %}

View File

@ -17,7 +17,7 @@ ha_quality_scale: internal
go2rtc is an open source project providing a camera streaming application that supports formats such as RTSP, WebRTC, HomeKit, FFmpeg, RTMP. The **go2rtc** {% term integration %} connects to a go2rtc instance and provides a WebRTC proxy for all your cameras. To learn more about go2rtc, refer to the [project's GitHub page](https://github.com/AlexxIT/go2rtc/).
If you are using the [`default_config`](/integrations/default_config/) and run Home Assistant using one of the following installation methods, the go2rtc integration will be set up automatically and you don't need to do anything:
If you are using the [`default_config`](/integrations/default_config/) and run Home Assistant using one of the following installation types, the go2rtc integration will be set up automatically and you don't need to do anything:
- {% term "Home Assistant Operating System" %}
- {% term "Home Assistant Supervised" %}

View File

@ -256,14 +256,14 @@ Currently, the following domains are available to be used with Google Assistant,
- group (on/off)
- humidifier (humidity setting/on/off/mode)
- input_boolean (on/off)
- input_button
- input_button (scene)
- input_select (option/setting/mode/value)
- light (on/off/brightness/rgb color/color temp)
- lawn_mower (dock/start/pause)
- lock
- media_player (on/off/set volume (via set volume)/source (via set input source)/control playback)
- scene (on)
- script (on)
- scene
- script (scene)
- select
- sensor (temperature setting for temperature sensors and humidity setting for humidity sensors)
- switch (on/off)

View File

@ -2,6 +2,7 @@
title: Google Gemini
description: Instructions on how to integrate Google Gemini as a conversation agent
ha_category:
- AI
- Speech-to-text
- Text-to-speech
- Voice

View File

@ -145,8 +145,15 @@ In short, when any group member entity is `unlocked`, the group will also be `un
- The group state is combined / calculated based on `type` selected to determine the minimum, maximum, latest (last), mean, median, range, product, standard deviation, or sum of the collected states.
- Members can be any `sensor`, `number` or `input_number` holding numeric states.
- The group state is `unavailable` if all group members are `unavailable`.
- If `ignore_non_numeric` is `false` then group state will be `unavailable` if one member is `unavailable` or does not have a numeric state.
- States which are missing from the state machine do not make the state `unavailable` or `unknown`.
- The group state is `unavailable` if no group member has a numeric state.
- The configuration variable `ignore_non_numeric` controls the behavior of the group when the group is not `unavailable`:
- When set to `false` (the default), the group state is calculated as follows:
- if all members have a numeric state: calculated according to the `type`
- otherwise: set to `unknown`
- When set to `true`, the group state is calculated as follows:
- if at least one member has a numeric state: calculated according to the `type`
- otherwise: and set to `unknown`
## Managing groups
@ -321,7 +328,7 @@ type:
type: string
required: true
ignore_non_numeric:
description: Only available for `sensor` group. Set this to `true` if the group state should ignore sensors with non numeric values.
description: Only available for `sensor` group. Controls how the [state is calculated when group members have non-numeric state](#sensor-number-and-input_number-groups).
type: boolean
required: false
default: false

View File

@ -28,6 +28,7 @@ HTML5 push notifications **do not** work on iOS versions below 16.4.
The `html5` platform can only function if all of the following requirements are met:
- You are using Chrome and/or Firefox on any desktop platform, ChromeOS or Android. Or you added your Home Assistant instance to your home screen on iOS 16.4 or higher.
- On Brave desktop, you have gone into Brave Privacy Settings by going to `brave://settings/privacy` in your address bar or **Settings > Privacy and Security** and made sure the **Use Google services for push messaging** option is turned on.
- Your Home Assistant instance is accessible from outside your network over HTTPS or can perform an alternative [Domain Name Verification Method](https://support.google.com/webmasters/answer/9008080#domain_name_verification) on the domain used by Home Assistant.
- If using a proxy, HTTP basic authentication must be disabled to register or deregister push notifications. It can be re-enabled afterwards.
- You have configured SSL/TLS for your Home Assistant. It doesn't need to be configured in Home Assistant though, e.g., you can be running NGINX in front of Home Assistant and this will still work. The certificate must be trustworthy (i.e., not self-signed).
@ -191,13 +192,13 @@ During the lifespan of a single push notification, Home Assistant will emit a fe
Common event payload parameters are:
| Parameter | Description |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `action` | The `action` key that you set when sending the notification of the action clicked. Only appears in the `clicked` event. |
| Parameter | Description |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `action` | The `action` key that you set when sending the notification of the action clicked. Only appears in the `clicked` event. |
| `data` | The data dictionary you originally passed in the notify payload, minus any parameters that were added to the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `image`, `lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`, `silent`). |
| `tag` | The unique identifier of the notification. Can be overridden when sending a notification to allow for replacing existing notifications. |
| `target` | The target that this notification callback describes. |
| `type` | The type of event callback received. Can be `received`, `clicked` or `closed`. |
| `tag` | The unique identifier of the notification. Can be overridden when sending a notification to allow for replacing existing notifications. |
| `target` | The target that this notification callback describes. |
| `type` | The type of event callback received. Can be `received`, `clicked` or `closed`. |
You can use the `target` parameter to write automations against a single `target`. For more granularity, use `action` and `target` together to write automations which will do specific things based on what target clicked an action.

View File

@ -37,7 +37,7 @@ Or, when using Docker containers:
docker exec -it <containername> pylacrosse -d /dev/ttyUSB0 scan
```
If you are using the Home Assistant OS or Supervised installation method, these
If you are using the Home Assistant OS or Supervised installation types, these
methods are not available for you. The use of an additional computer to figure
out the ID is advised.

View File

@ -23,7 +23,7 @@ ha_ssdp: true
ha_integration_type: integration
---
The Nanoleaf integration allows you to control and monitor Nanoleaf Light Panels, Canvas, Shapes, Elements, and Lines.
The **Nanoleaf** {% term integration %} allows you to control and monitor Nanoleaf Light Panels, Canvas, Shapes, Elements, and Lines.
This integration does not support the Nanoleaf Remote and Essentials lights. Controlling Nanoleaf Essentials lights is possible over Thread and Bluetooth through the HomeKit Controller integration.
@ -32,3 +32,9 @@ This integration does not support the Nanoleaf Remote and Essentials lights. Con
# Transition and brightness
When using a transition in an action (such as `light.turn_on`), the transition is only applied to brightness and does not apply to color. When an action has a transition set, but no brightness is included, the light will automatically transition to 100% brightness.
## Removing the integration
This integration follows standard integration removal, no extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -226,6 +226,10 @@ The **ntfy** integration adds a device representing the service, along with vari
- **Subscription tier**: The subscription plan currently assigned to the ntfy account.
## Data updates
The integration retrieves data from **ntfy.sh** (or your own ntfy instance) every 15 minutes to update the usage statistics sensors.
## Known limitations
**ntfy** imposes various rate and usage limits. The official [ntfy.sh](https://ntfy.sh/) service allows up to **60 messages in a burst**, with a **replenishment rate of one message every 5 seconds** (i.e., the full 60-message capacity refills in 5 minutes).

View File

@ -2,6 +2,7 @@
title: Ollama
description: Instructions on how to integrate Ollama
ha_category:
- AI
- Voice
ha_release: 2024.4
ha_iot_class: Local Polling

View File

@ -2,6 +2,7 @@
title: OpenRouter
description: Instructions on how to integrate OpenRouter as a conversation agent
ha_category:
- AI
- Voice
ha_release: 2025.8
ha_iot_class: Cloud Polling

View File

@ -2,6 +2,7 @@
title: OpenAI
description: Instructions on how to integrate OpenAI as a conversation agent
ha_category:
- AI
- Voice
ha_release: 2023.2
ha_iot_class: Cloud Polling
@ -166,7 +167,7 @@ with the response from OpenAI.
- **Service data attribute**: `config_entry`
- **Description**: Integration entry ID to use.
- **Example**:
- **Example**:
- **Optional**: no
- **Service data attribute**: `prompt`
@ -189,7 +190,7 @@ data:
Very briefly describe what you see in this image from my doorbell camera.
Your message needs to be short to fit in a phone notification. Don't
describe stationary objects or buildings.
image_filename:
image_filename:
- /tmp/doorbell_snapshot.jpg
response_variable: generated_content
```

View File

@ -42,6 +42,10 @@ User with API Key requires privileges for Type:
- GUI Name: Diagnostics: ARP Table
- GUI Name: Diagnostics: Network Insight
{% important %}
OPNSense versions 25.7 and later require All Pages privilege to be granted to the API user account.
{% endimportant %}
{% configuration %}
url:
description: The URL for the OPNsense API endpoint of your router.

View File

@ -182,7 +182,9 @@ Log what is scheduled in the event loop. This can be helpful in tracking down in
Each upcoming scheduled item is logged similar to the below example:
`[homeassistant.components.profiler] Scheduled: <TimerHandle when=1528307.1818668307 async_track_point_in_utc_time.<locals>.run_action(<Job HassJobType.Coroutinefunction <bound method DataUpdateCoordinator._handle_refresh_interval of <homeassistant.components.screenlogic.ScreenlogicDataUpdateCoordinator object at 0x7f985d896d30>>>) at /usr/src/homeassistant/homeassistant/helpers/event.py:1175>`
```txt
[homeassistant.components.profiler] Scheduled: <TimerHandle when=1528307.1818668307 async_track_point_in_utc_time.<locals>.run_action(<Job HassJobType.Coroutinefunction <bound method DataUpdateCoordinator._handle_refresh_interval of <homeassistant.components.screenlogic.ScreenlogicDataUpdateCoordinator object at 0x7f985d896d30>>>) at /usr/src/homeassistant/homeassistant/helpers/event.py:1175>`
```
### Action profiler.lru_stats

View File

@ -38,6 +38,8 @@ works_with:
The integration allows you to control [Reolink](https://reolink.com/) NVRs or cameras. Reolink cameras are known for their local storage, without the need for a cloud subscription or account. Reolink cameras can operate fully locally on your network, putting privacy first. When blocking internet access for the Reolink devices, the Home Assistant integration, as well as the Reolink app/client, will continue to work as usual. Reolink cameras provide excellent day- and nighttime video clarity at an affordable price. An SD card in the camera offers local recording, while an optional Reolink NVR/Hub can offer a large recording capacity indoors. As evident by the list of entities in this documentation, Reolink cameras are highly configurable and tightly integrated into Home Assistant.
This integration is officially authorized by Reolink, with @StarkillerOG as the main developer, and it is built with the support of Reolink's official resources.
## Prerequisites
A brand new Reolink camera needs to be connected to the network and initialized. During initialization, the camera's credentials need to be set. Refer to the [Initial setup](#initial-setup) section for detailed instructions.
@ -368,12 +370,12 @@ The following models have been tested and confirmed to work with a direct link t
- C2 Pro*
- [CX410](https://reolink.com/product/cx410/)
- [CX810](https://reolink.com/product/cx810/)
- [E1 Pro](https://reolink.com/product/e1-pro/) (only hardware version IPC_NT1NA45MP)
- [E1 Pro](https://reolink.com/product/e1-pro/) (5MP models - hardware version IPC_NT1NA45MP - or newer†)
- [E1 Zoom](https://reolink.com/product/e1-zoom/)
- [E1 Outdoor](https://reolink.com/product/e1-outdoor/)
- [E1 Outdoor PoE](https://reolink.com/product/e1-outdoor-poe/)
- [E1 Outdoor Pro](https://reolink.com/product/e1-outdoor-pro/)
- [Elite Floodlight WiFi](https://reolink.com/product/elite-floodlight-wifi/)
- [Elite Floodlight WiFi](https://reolink.com/product/elite-floodlight-wifi/) (needs mains power, cannot be integrated when powered through USB)
- [FE-P](https://reolink.com/product/fe-p/) (only "fisheye" or "5-in-1" view for the streams, not "dual panoramic", "quad", "cylindrical", "defished", or "hemispheric" view)
- [FE-W](https://reolink.com/product/fe-w/) (only "fisheye" or "5-in-1" view for the streams, not "dual panoramic", "quad", "cylindrical", "defished", or "hemispheric" view)
- [Lumus Pro](https://reolink.com/product/lumus-pro/)
@ -385,7 +387,7 @@ The following models have been tested and confirmed to work with a direct link t
- [RLC-510A](https://reolink.com/product/rlc-510a/)
- RLC-511*
- RLC-511W*
- [RLC-511WA](https://reolink.com/product/rlc-511wa/)
- [RLC-511WA](https://reolink.com/product/rlc-511wa/)*
- RLC-520*
- [RLC-520A](https://reolink.com/product/rlc-520a/)
- RLC-522*
@ -426,6 +428,8 @@ The following models have been tested and confirmed to work with a direct link t
*These models are discontinued and not sold anymore, they will continue to work with Home Assistant.
†Requires a [camera hardware version](https://support.reolink.com/hc/en-us/articles/900000638583-Introduction-to-the-Hardware-Version-of-Reolink-Cameras/) that supports remote access. All 5MP or newer E1 Pro models (where the hardware version includes "5MP") meet this requirement. Most sellers (including ReoLink) do not explicitly state the hardware version, so verify the resolution is 5MP or greater to ensure compatibility.
### Tested battery-powered models
Battery-powered Reolink cameras can be used with Home Assistant with the help of a [Reolink Home Hub](https://reolink.com/product/reolink-home-hub/) or NVR. The Home Hub/NVR will act as a bridge between the battery-powered cameras and Home Assistant, conserving the battery life. All features of the battery-powered cameras will be available just like regular-powered cameras. Viewing the camera stream in Home Assistant will keep the battery camera awake during viewing, consuming battery life. Therefore, ensure you do not use the camera stream on a dashboard that is constantly being viewed, like a wall panel dashboard. You can check proper operation by ensuring that the "Sleep status" entity will go to "Sleeping" if the battery camera is not being actively used.
@ -779,6 +783,7 @@ Prerequisites:
- Wake up and start recording on other battery cameras nearby if one camera/motion sensor detects an event.
- Turn on the spotlights or sirens of other cameras nearby when one camera detects a person, vehicle, or animal.
- If a camera detects a person/vehicle/animal, then point other PTZ cameras in that direction using PTZ presets.
- Make a timelapse in different directions using PTZ presets and the snapshot service.
- Switch day night mode (Color/IR Black&White) based on sunset/sunrise times or the status of (outdoor) lights instead of relying on the internal light sensor.
- Change the camera volume based on the time and/or when you are home or not (geofencing)
- Increase the framerate and maximum bitrate of a camera when a person/vehicle/animal is detected and lower them again after 1 minute of no detection. This saves storage space, so you can record longer when recording 24/7 without compromising image clarity during events.

View File

@ -17,6 +17,12 @@ ha_quality_scale: legacy
The `sesame` {% term integration %} allows you to control your [Sesame](https://candyhouse.co/) smart locks made by CANDY HOUSE, Inc.
## Sesame Smart Lock Versions
The integration documented here should only be used with the original Sesame Lock.
Sesame Smart Lock version 5 and Hub version 3 were released in 2025 and can be integrated with Home Assistant via the Matter integration instead.
## Configuration
Your Sesame needs to be paired with a standalone [Wi-Fi Access Point](https://candyhouse.co/collections/frontpage/products/wi-fi-access-point) purchased separately.

View File

@ -36,12 +36,16 @@ alias:
type: string
{% endconfiguration %}
The commands can be dynamic, using templates to insert values for arguments. When using templates, shell_command runs in a more secure environment which doesn't allow any shell helpers like automatically expanding the home dir `~` or using pipe symbols to run multiple commands. Similarly, only content after the first space can be generated by a template. This means the command name itself cannot be generated by a template, but it must be literally provided.
The commands can be dynamic, using templates to insert values for arguments. When using templates, shell_command runs in a more secure environment which doesn't allow any shell helpers like automatically expanding the home directory character (`~`), using pipe symbols (`|`) to run multiple commands, or operators redirecting output (such as `>` and `>>`). Similarly, only content after the first space can be generated by a template. This means the command name itself cannot be generated by a template, but it must be literally provided.
Any action data passed into the action to activate the shell command will be available as a variable within the template.
`stdout` and `stderr` output from the command are both captured and will be logged by setting the [log level](/integrations/logger/) to debug.
{% note %}
After you add or edit a command, restart Home Assistant. New commands wont work until you restart, and changes to existing commands wont take effect until after a restart.
{% endnote %}
## Execution
The `command` is executed within the [configuration directory](/docs/configuration/).

View File

@ -208,13 +208,15 @@ Depending on how a device's button type is configured, the integration will crea
### Binary input sensors (generation 2+)
For generation 2+ hardware, it's possible to select if a device's input is connected to a button or a switch. Binary sensors are created only if the input mode is set to `switch`. When the input is of type `button` you need to use events for your automations.
For generation 2+ hardware, it's possible to select if a device's input is connected to a button or a switch. Binary sensors are created only if the **Input Mode** is set to `Switch`. When the **Input Mode** is set to `Button` you need to use events for your automations.
## Event entities (generation 1)
## Event entities
If the **BUTTON TYPE** of the switch connected to the device is set to `momentary` or `detached switch`, the integration creates an event entity for this switch. You can use this entity in your automations.
### Event entities (generation 1)
## Event entities (generation 2+)
If the **BUTTON TYPE** of the switch connected to the device is set to `Momentary` or `Detached Switch`, the integration creates an event entity for this switch. You can use this entity in your automations.
### Event entities (generation 2+)
If the **Input Mode** of the switch connected to the device is set to `Button`, the integration creates an event entity for this switch. You can use this entity in your automations.
@ -242,7 +244,11 @@ Shelly.addEventHandler(eventHandler);
## Events
If the **BUTTON TYPE** of the switch connected to the device is set to `momentary` or `detached switch`, integration fires events under the type `shelly.click` when the switch is used. You can use these events in your automations.
The integration fires events under the type `shelly.click` when the switch is used if:
- The **BUTTON TYPE** of the switch connected to the device is set to `Momentary` or `Detached Switch` for generation 1 devices.
- The **Input Mode** of the switch connected to the device is set to `Button` for generation 2+ devices.
You can use these events in your automations.
Also, some devices do not add an entity for the button/switch. For example, the Shelly Button1 has only one entity for the battery level. It does not have an entity for the button itself. To trigger automations based on button presses, use the `shelly.click` event.

View File

@ -187,6 +187,21 @@ mode: single
{% endraw %}
## Control Sleep as Android via Home Assistant
The **Sleep as Android** app can be automated through its [Intent API](https://sleep.urbandroid.org/docs/devs/intent_api.html), allowing you to perform actions such as:
- Enable or disable alarms
- Snooze or dismiss alarms
- Start, stop, or pause sleep tracking
- Stop lullaby playback
Thanks to the **Home Assistant Companion App for Android**, which supports [broadcasting intents](/docs/notifications/notification-commands#broadcast-intent), you can trigger these actions directly from Home Assistant.
To make this even easier, you can import the following blueprint. It supports nearly all Sleep as Android actions, so you can automate your sleep routine without writing any custom scripts:
{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/sleep-as-android-trigger-app-actions/920845" %}
## Data updates
This integration receives push updates from the Sleep as Android app whenever an event is triggered. If no events occur, the displayed data may become outdated.

View File

@ -16,7 +16,7 @@ ha_platforms:
ha_integration_type: service
---
The Spotify media player integration lets you control your Spotify
The **Spotify** {% term integration %} lets you control your Spotify
account playback and browse the [Spotify](https://www.spotify.com/) media
library from Home Assistant.
@ -156,3 +156,9 @@ The `media_content_id` value can be obtained from the Spotify desktop app by cli
## Unsupported devices
- **Sonos**: Although Sonos is a Spotify Connect device, it is not supported by the official Spotify API. One workaround to use Sonos players with Spotify is through [Music Assistant](https://www.music-assistant.io/) using the action `music_assistant.play_media`. Music Assistant creates another media_player entity named after the original media_player, which you can use to play from Spotify.
## Removing the integration
This integration follows standard integration removal, no extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -229,8 +229,10 @@ The integration provides the following entities.
### Updates
-- **Lyrion Music Server**: Update of the server software is available.
-- **Updated plugins**: Named Plugins will be updated on the next restart. For some installation types, the service will be restarted automatically after the **Install** button has been selected. Allow enough time for the service to restart. It will become briefly unavailable.
This integration will notify you when updates are available on the LMS for the LMS version or for plugins installed on the LMS
- **Lyrion Music Server**: Update of the server software is available.
- **Updated plugins**: Plugin updates are available. The list of updates can be viewed by selecting the "Read release announcement" link. On the LMS, an option is available on the Manage Plugins settings page to "Update plugins automatically". If this option is selected, plugins will be downloaded automatically by the LMS and then installed on the next restart of the LMS. For some installation types of LMS, the LMS can be restarted by selecting the **Update** button. Allow enough time for the LMS to restart as it will become briefly unavailable.
### Actions

View File

@ -626,7 +626,7 @@ Features:
### Fans
Fan entities are added for Battery Circulator Fan/Circulator Fan, Air Purifier, and Air Purifier Table
Fan entities are added for Battery Circulator Fan/Circulator Fan
#### Battery Circulator Fan/Circulator Fan
@ -638,7 +638,11 @@ Features:
- oscillate left and right
- get battery level (Battery Circulator Fan only)
#### Air Purifier
### Air Purifiers
Fan entities are added for Air Purifier, and Air Purifier Table.
Air purifier currently supports three speed levels, which you can adjust by setting the mode.
This is an encrypted device.

View File

@ -45,7 +45,7 @@ You need to configure developer credentials and host a public key file to allow
- A [Tesla](https://tesla.com) account with verified email
- A web domain to host your public key file:
- [NGINX Home Assistant SSL proxy Add-on](https://github.com/home-assistant/addons/blob/master/nginx_proxy/DOCS.md) (recommended)
- External hosting service ([FleetKey.cc](https://fleetkey.cc), [MyTeslamate.com](https://app.myteslamate.com/fleet), etc.)
- External hosting service ([FleetKey.net](https://fleetkey.net), [MyTeslamate.com](https://app.myteslamate.com/fleet), etc.)
{% warning %}
The China region is currently not supported by this {% term integration %}.

View File

@ -14,7 +14,7 @@ ha_codeowners:
ha_config_flow: true
---
The Twitch integration will allow you to monitor [Twitch](https://www.twitch.tv/) channel status from within Home Assistant and setup automation based on the information.
The **Twitch** {% term integration %} allows you to monitor [Twitch](https://www.twitch.tv/) channel status from within Home Assistant and set up automation based on the information.
## Get Twitch application credentials
@ -25,3 +25,9 @@ Create a new app at **Register Your Application** in the [Twitch developer porta
- Get the **Client ID** and **Client secret** from the new application, you need them to complete the integration setup in Home Assistant.
{% include integrations/config_flow.md %}
## Removing the integration
This integration follows standard integration removal, no extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -1,6 +1,6 @@
---
title: Velux
description: Instructions on how to integrate Velux KLF 200 integration with Home Assistant.
description: Instructions on how to integrate the Velux KLF 200 with Home Assistant.
ha_category:
- Cover
- Scene
@ -23,7 +23,7 @@ ha_dhcp: true
[Velux](https://www.velux.com/) {% term integration %} for Home Assistant allows you to connect to a Velux KLF 200 interface, to control [io-homecontrol](http://www.io-homecontrol.com) devices like windows and blinds. The module allows you to start scenes configured within KLF 200.
At least firmware version > 2.0.0.0 is required on the KLF 200 device. The firmware images may be obtained [here](https://www.velux.com/klf200) and may be imported via the webinterface of your KLF 200.
At least firmware version > 2.0.0.0 is required on the KLF 200 device. The firmware images may be obtained from the [vendor's website](https://www.velux.com/klf200) and may be imported via the web interface of your KLF 200.
There is currently support for the following device types within Home Assistant:
@ -47,21 +47,9 @@ You must complete the configuration within 5 minutes of rebooting the KLF 200 ga
### Action `velux.reboot_gateway`
Reboots the configured KLF 200 Gateway.
Reboots the configured KLF 200 gateway.
There is a problem with the KLF 200 gateway where the connection cannot be established after a restart of Home Assistant, only a manual power off and on fixes this.
As a workaround, you can use an automation to force a restart of the KLF 200 before exiting Home Assistant, like this:
```yaml
automation:
- alias: "KLF reboot on hass stop event"
description: "Reboots the KLF200 in order to avoid SSL Handshake issue"
triggers:
- trigger: homeassistant
event: shutdown
actions:
- action: velux.reboot_gateway
```
In Home Assistant versions up to 2024.12.x, it was recommended to create an automation to reboot the KLF 200 gateway before shutting down or restarting Home Assistant. This automated reboot is now built into the integration, so you no longer need to create a separate automation.
## Velux Active (KIX 300)

View File

@ -44,11 +44,22 @@ Dryers:
## Prerequisites
- Valid Whirlpool/Maytag account credentials.
- Registered appliances in the official Whirlpool/Maytag app.
- Valid Whirlpool (or related brand) account credentials.
- Registered appliances in the official Whirlpool (or related brand) mobile app.
{% include integrations/config_flow.md %}
{% configuration_basic %}
Username:
description: "The username of your Whirlpool (or related brand) account."
Password:
description: "The password of your Whirlpool (or related brand) account."
Region:
description: "The region in which your account is registered."
Brand:
description: "The brand of the mobile app. It may not be the same brand as the appliances."
{% endconfiguration_basic %}
## Supported functionality
This {% term integration %} maps appliances to entities in Home Assistant. A single appliance may be represented by one or more entities.

View File

@ -86,3 +86,9 @@ For example, measurement sensors like weight only work when data has been regist
Sleep sensors are only created if the {% term integration %} can find sleep data for you within the last day.
Workout calendar and the workout and activity sensors show if the latest available data point is no older than 14 days.
## Removing the integration
This integration follows standard integration removal, no extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -290,3 +290,21 @@ Enable or disable music_mode.
|---------------------------|----------|---------------------------------------------------------------------------------------------|
| `entity_id` | yes | Only act on specific lights. |
| `music_mode` | no | Use 'true' or 'false' to enable / disable music_mode. |
## Troubleshooting
### Device Discovery
The Yeelight devices use non-standard search parameters for SSDP so devices are not visible in **the SSDP/UPnP Browser**.
If you want to check what devices are in your network, you can use [the `async-upnp-client` library](https://pypi.org/project/async-upnp-client/), and then run the following command:
```bash
upnp-client search \
--target 239.255.255.250 \
--target_port 1982 \
--bind 0.0.0.0 \
--search_target wifi_bulb
```
You can also look at **the Zeroconf Browser** or **the DHCP Browser**, which correctly detect Yeelight devices.

View File

@ -19,7 +19,9 @@ api_link: https://console.cloud.google.com/apis/library/youtube.googleapis.com?p
---
The **YouTube** {% term integration %} allows you to connect YouTube channels to Home Assistant.
For every channel you add, it will create sensors for:
- Views count
- Subscriber count
- The latest uploaded video
@ -38,3 +40,9 @@ These are not the same as the one for [Google Calendar](/integrations/google).
{% include integrations/config_flow.md %}
{% include integrations/google_oauth.md %}
## Removing the integration
This integration follows standard integration removal, no extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -53,43 +53,31 @@ related:
The **Z-Wave** {% term integration %} allows you to control a Z-Wave network from Home Assistant via the [Z-Wave JS](https://zwave-js.github.io/node-zwave-js/#/) driver.
## Device compatibility
You do not need a Z-Wave adapter that is specifically designed for the Z-Wave integration in Home Assistant. The Z-Wave integration in Home Assistant can be operated with any Z-Wave network with other Z-Wave certified devices from other manufacturers. All mains operated nodes within the network will act as repeaters regardless of vendor to increase reliability of the network.
## Getting started
This sections shows you how to set up a Z-Wave JS server and how to add your first Z-Wave device to Home Assistant. It also introduces you to some of the basic terminology.
This section shows how to set up a Z-Wave network and how to add a Z-Wave end device to that network.
### Z-Wave terminology and Home Assistant
A Z-Wave network in Home Assistant includes the following elements:
Throughout this documentation, Home Assistant terminology is used. For some of the concepts, the terminology does not correspond to the terminology used in Z-Wave documentation. The table below provides equivalents for some of those terms. For more Z-Wave term definitions, refer to the [terminology section](#z-wave-terminology).
- a Z-Wave adapter (for example, [Home Assistant Connect ZWA-2](/connect/zwa-2))
- a Z-Wave server (for example, the **Z-Wave JS** add-on)
- this Z-Wave integration
- Z-Wave end devices
| Z-Wave functionality | Home Assistant | Definition |
| -------------------- | -------------- | ---------- |
| barrier operator | cover | |
| controller | adapter, when referring to the hardware device that provides the Z-Wave functionality. The term controller is still used when referring to the network role (such as primary, secondary controller) | |
| exclusion | remove | The process of removing a node from the Z-Wave network |
| [inclusion](#classic-inclusion-versus-smartstart) | add | The process of adding a node to the Z-Wave network |
| multilevel switch | represented by different entity types: light, fan etc. | |
| replication | copy (not supported in Home Assistant) | The process of copying network information from one adapter to another. Not supported in Home Assistant. |
| window covering | cover | |
### Setting up a Z-Wave server in Home Assistant
### Prerequisites
This section shows how to set up a Z-Wave server using the **Z-Wave JS** add-on in Home Assistant.
To run a Z-Wave network, you need the following elements:
For other ways to set up a Z-Wave server, refer to the [advanced installation instructions](#advanced-installation-instructions).
- A [supported Z-Wave adapter](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules). First-time user? For recommendations on what to buy, go [here](#which-z-wave-adapter-should-i-buy).
- A running [Z-Wave JS server](#setting-up-a-z-wave-js-server).
- An installed Z-Wave integration in Home Assistant.
Once you have set up the Z-Wave server, you can [add devices to the network](#adding-a-new-device-to-the-z-wave-network).
### Setting up a Z-Wave JS server
#### Prerequisites
If you are running {% term "Home Assistant Operating System" %} or {% term "Home Assistant Supervised" %}, the easiest way to get started is by using the built-in Z-Wave JS add-on in Home Assistant.
- A [supported Z-Wave adapter](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules).
- First-time user? For recommendations, refer to the [what-to-buy-section](#which-z-wave-adapter-should-i-buy).
For other ways to setup a Z-Wave server, refer to the [advanced installation instructions](#advanced-installation-instructions).
Follow these steps:
#### To set up a Z-Wave server
1. Open the Home Assistant user interface.
2. Plug the Z-Wave adapter into the device running Home Assistant.
@ -97,21 +85,7 @@ Follow these steps:
- In the dialog, select **Recommended installation**.
- This will install the Z-Wave JS add-on on the Home Assistant server.
- Add the device to an {% term area %} and select **Finish**.
- **Troubleshooting**: If your adapter is not recognized, follow these steps:
{% details "Manual setup steps" %}
Use this My button:
{% my config_flow_start badge domain="zwave_js" %}, or follow these steps:
- Browse to your Home Assistant instance.
- Go to **{% my integrations title="Settings > Devices & services" %}**.
- In the bottom right, select the
**{% my config_flow_start icon domain="zwave_js" %}** button.
- From the list, select **Z-Wave**.
- Follow the instructions on screen to complete the setup.
{% enddetails %}
- **Troubleshooting**: If your adapter is not recognized, follow [these steps](#my-z-wave-adapter-isnt-recognized-automatically-during-setup).
3. Wait for the installation to complete.
4. Depending on your Home Assistant version, you may be prompted for network security keys.
@ -121,7 +95,7 @@ Use this My button:
5. Wait for the Z-Wave JS add-on to start up.
6. Once the installation is complete, the **Device info** of the Z-Wave adapter is shown.
- You successfully installed the Z-Wave integration and the Z-Wave JS add-on.
- You can now [add](/integrations/zwave_js/#adding-a-new-device-to-the-z-wave-network) devices to the Z-Wave network.
- You can now [add devices](/integrations/zwave_js/#adding-a-new-device-to-the-z-wave-network) to the Z-Wave network.
{% note %}
While your Z-Wave mesh is permanently stored on your adapter, the additional metadata is not. When the Z-Wave integration starts up the first time, it will interview your entire Z-Wave network. Depending on the number of devices paired with the Z-Wave adapter, this can take a while. You can speed up this process by manually waking up your battery-powered devices. Most of the time, this is a button press on those devices (see their manual). It is not necessary to exclude and re-include devices from the mesh.
@ -242,7 +216,7 @@ If you are using the Z-Wave JS add-on, Home Assistant automatically changes the
- Administrator rights in Home Assistant
- All your Z-Wave devices must be specified for that region
- Note: this procedure only applies if your adapter is [set up using the Z-Wave JS add-on](#setting-up-a-z-wave-js-server)
- Note: this procedure only applies if your adapter is [set up using the Z-Wave JS add-on](#to-set-a-up-a-z-wave-server)
### To override the radio frequency region of your Z-Wave adapter
@ -1137,6 +1111,19 @@ After ensuring you are using an extension cable, rebuild network routes.
The combination of these two steps corrects a large number of reported difficulties.
### My Z-Wave adapter isn't recognized automatically during setup
If your Z-Wave adapter doesn't show up in the **Discovered** section automatically, try adding it manually:
1. Check the hardware:
- Make sure the adapter is powered on.
- Make sure the cable you are using supports data, not power only.
2. Go to **{% my integrations title="Settings > Devices & services" %}**.
3. In the bottom right, select the
**{% my config_flow_start icon domain="zwave_js" %}** button and select **Z-Wave**.
4. Follow the instructions on screen to complete the setup.
5. If it is still not discovered, [check for interference](#im-having-a-problem-what-to-do-first).
### I have an Aeotec Gen5 adapter, and it isn't detected on my Raspberry Pi&nbsp;4?
The first-generation Gen5 adapter has a known bug when plugged into a Pi&nbsp;4 and possibly other systems. Aeotec released the Gen5+ stick to correct this bug. Gen5 users can plug their adapters into a USB&nbsp;2.0 hub in order to overcome the issue.
@ -1291,7 +1278,17 @@ No further action is required and the SmartStart product will be added automatic
### Terminology mapping table
For some of the concepts, the terminology used in Home Assistant does not correspond to the terminology used in Z-Wave documentation. Refer to the [terminology mapping table](#z-wave-terminology-and-home-assistant) for a list of term equivalents.
Throughout this documentation, Home Assistant terminology is used. For some of the concepts, the terminology does not correspond to the terminology used in Z-Wave documentation. The table below provides equivalents for some of those terms.
| Z-Wave functionality | Home Assistant | Definition |
| -------------------- | -------------- | ---------- |
| barrier operator | cover | |
| controller | adapter, when referring to the hardware device that provides the Z-Wave functionality. The term controller is still used when referring to the network role (such as primary, secondary controller) | |
| exclusion | remove | The process of removing a node from the Z-Wave network |
| [inclusion](#classic-inclusion-versus-smartstart) | add | The process of adding a node to the Z-Wave network |
| multilevel switch | represented by different entity types: light, fan etc. | |
| replication | copy (not supported in Home Assistant) | The process of copying network information from one adapter to another. Not supported in Home Assistant. |
| window covering | cover | |
## Removing Z-Wave JS from Home Assistant

View File

@ -56,6 +56,11 @@ Enjoy the release!
- [Other noteworthy changes](#other-noteworthy-changes)
- [Analog clock](#analog-clock)
- [Storage insights](#storage-insights)
- [Patch releases](#patch-releases)
- [2025.9.1 - September 5](#202591---september-5)
- [2025.9.2 - September 12](#202592---september-12)
- [2025.9.3 - September 13](#202593---september-13)
- [2025.9.4 - September 19](#202594---september-19)
- [Need help? Join the community!](#need-help-join-the-community)
- [Backward-incompatible changes](#backward-incompatible-changes)
- [All changes](#all-changes)
@ -222,7 +227,7 @@ changes to existing integrations:
- Network admins will love [@Tomeroeni] bringing individual (enable/disable) switch port control to [UniFi] switches!
- The [OpenWeatherMap] integration now includes a wind gust sensor, thanks to [@gjohansson-ST]!
- [@kizovinh] added support for battery status and online status sensors to the [EZVIZ] integration, making it easier to monitor your EZVIZ cameras. Nice!
- If you own a [Russound Rio] device, you can now browse your device's saved presets directly from the media browser! Thanks, [@hanwg]!
- If you own a [Russound RIO] device, you can now browse your device's saved presets directly from the media browser! Thanks, [@noahhusby]!
- [@mbo18] added an absolute humidity sensor to the [Awair] integration. Nice!
- The [Teslemetry] integration added charging and preconditioning actions for your Tesla vehicle. Thanks, [@Bre77]!
- [@catsmanac] added [IQ Meter Collar] and [C6 Combiner] support to the [Enphase Envoy] integration. Good work!
@ -230,9 +235,9 @@ changes to existing integrations:
[@Bre77]: https://github.com/Bre77
[@catsmanac]: https://github.com/catsmanac
[@gjohansson-ST]: https://github.com/gjohansson-ST
[@hanwg]: https://github.com/hanwg
[@kizovinh]: https://github.com/kizovinh
[@mbo18]: https://github.com/mbo18
[@noahhusby]: https://github.com/noahhusby
[@starkillerOG]: https://github.com/starkillerOG
[@Thomas55555]: https://github.com/Thomas55555
[@Tomeroeni]: https://github.com/Tomeroeni
@ -246,7 +251,7 @@ changes to existing integrations:
[OpenWeatherMap]: /integrations/openweathermap
[PlayStation Network]: /integrations/playstation_network
[Reolink]: /integrations/reolink
[Russound Rio]: /integrations/russound_rio
[Russound RIO]: /integrations/russound_rio
[Teslemetry]: /integrations/teslemetry
[UniFi]: /integrations/unifi
@ -341,6 +346,254 @@ You can find these metrics by navigating to {% my storage title="**Settings** >
{% my storage badge %}
## Patch releases
We will also release patch releases for Home Assistant 2025.9 in September.
These patch releases only contain bug fixes. Our goal is to release a patch
release once a week, aiming for Friday.
### 2025.9.1 - September 5
- Add support for migrated Hue bridge ([@marcelveldt] - [#151411])
- Add missing device trigger duration localizations ([@karwosts] - [#151578])
- Correct capitalization of "FRITZ!Box" in FRITZ!Box Tools integration ([@tr4nt0r] - [#151637])
- Fix Sonos Dialog Select type conversion ([@PeteRager] - [#151649])
- Fix WebSocket proxy for add-ons not forwarding ping/pong frame data ([@felipecrs] - [#151654])
- Fix, entities stay unavailable after timeout error, Imeon inverter integration ([@Imeon-Energy] - [#151671])
- Bump aiohue to 4.7.5 ([@marcelveldt] - [#151684])
- Update frontend to 20250903.3 ([@bramkragten] - [#151694])
- Require OhmeAdvancedSettingsCoordinator to run regardless of entities ([@dan-r] - [#151701])
- Bump ohmepy version to 1.5.2 ([@dan-r] - [#151707])
- Update Mill library 0.13.1 ([@Danielhiversen] - [#151712])
- Handle match failures in intent HTTP API ([@synesthesiam] - [#151726])
- Bump pyschlage to 2025.9.0 ([@dknowles2] - [#151731])
- Bump bimmer_connected to 0.17.3 ([@rikroe] - [#151756])
- Fix recognition of entity names in default agent with interpunction ([@arturpragacz] - [#151759])
- Fix enable/disable entity in modbus ([@janiversen] - [#151626])
[#151263]: https://github.com/home-assistant/core/pull/151263
[#151411]: https://github.com/home-assistant/core/pull/151411
[#151578]: https://github.com/home-assistant/core/pull/151578
[#151626]: https://github.com/home-assistant/core/pull/151626
[#151637]: https://github.com/home-assistant/core/pull/151637
[#151649]: https://github.com/home-assistant/core/pull/151649
[#151654]: https://github.com/home-assistant/core/pull/151654
[#151671]: https://github.com/home-assistant/core/pull/151671
[#151684]: https://github.com/home-assistant/core/pull/151684
[#151694]: https://github.com/home-assistant/core/pull/151694
[#151701]: https://github.com/home-assistant/core/pull/151701
[#151707]: https://github.com/home-assistant/core/pull/151707
[#151712]: https://github.com/home-assistant/core/pull/151712
[#151726]: https://github.com/home-assistant/core/pull/151726
[#151731]: https://github.com/home-assistant/core/pull/151731
[#151756]: https://github.com/home-assistant/core/pull/151756
[#151759]: https://github.com/home-assistant/core/pull/151759
[@Danielhiversen]: https://github.com/Danielhiversen
[@Imeon-Energy]: https://github.com/Imeon-Energy
[@PeteRager]: https://github.com/PeteRager
[@arturpragacz]: https://github.com/arturpragacz
[@bramkragten]: https://github.com/bramkragten
[@dan-r]: https://github.com/dan-r
[@dknowles2]: https://github.com/dknowles2
[@felipecrs]: https://github.com/felipecrs
[@frenck]: https://github.com/frenck
[@janiversen]: https://github.com/janiversen
[@karwosts]: https://github.com/karwosts
[@marcelveldt]: https://github.com/marcelveldt
[@rikroe]: https://github.com/rikroe
[@synesthesiam]: https://github.com/synesthesiam
[@tr4nt0r]: https://github.com/tr4nt0r
### 2025.9.2 - September 12
- Fix XMPP not working with non-TLS servers ([@Human] - [#150957])
- Update SharkIQ authentication method ([@funkybunch] - [#151046])
- Add event entity on websocket ready in Husqvarna Automower ([@Thomas55555] - [#151428])
- Fix Aladdin Connect state not updating ([@hbludworth] - [#151652])
- Fix support for Ecowitt soil moisture sensors ([@blotus] - [#151685])
- Fix update of the entity ID does not clean up an old restored state ([@jbouwh] - [#151696])
- Revert "Jewish Calendar add coordinator " ([@tsvi] - [#151780])
- Remove device class for Matter NitrogenDioxideSensor ([@lboue] - [#151782])
- Improve config entry migration for edge cases in Alexa Devices ([@chemelli74] - [#151788])
- Bump habluetooth to 5.3.1 ([@bdraco] - [#151803])
- Fix KNX BinarySensor config_store data ([@farmio] - [#151808])
- Fix KNX Light - individual color initialisation from UI config ([@farmio] - [#151815])
- Mark Tractive switches as unavailable when tacker is in the enegy saving zone ([@bieniu] - [#151817])
- Allow delay > 1 in modbus. ([@janiversen] - [#151832])
- max_temp / min_temp in modbus light could only be int, otherwise an assert was provoked. ([@janiversen] - [#151833])
- removed assert fron entity in modbus. ([@janiversen] - [#151834])
- Bump pydrawise to 2025.9.0 ([@dknowles2] - [#151842])
- Bump aioharmony to 0.5.3 ([@bdraco] - [#151853])
- Update pysmarty2 to 0.10.3 ([@martinssipenko] - [#151855])
- fix rain sensor for Velux GPU windows ([@wollew] - [#151857])
- Bump aioecowitt to 2025.9.1 ([@edenhaus] - [#151859])
- Use `native_visibility` property instead of `visibility` for OpenWeatherMap weather entity ([@bieniu] - [#151867])
- Bump aiontfy to v0.5.5 ([@tr4nt0r] - [#151869])
- Bump aiolifx-themes to 1.0.2 to support newer LIFX devices ([@Djelibeybi] - [#151898])
- Bump aiovodafone to 1.2.1 ([@chemelli74] - [#151901])
- Avoid cleanup/recreate of device_trackers not linked to a device for Vodafone Station ([@chemelli74] - [#151904])
- Fix _is_valid_suggested_unit in sensor platform ([@epenet] - [#151912])
- Bump habluetooth to 5.5.1 ([@bdraco] - [#151921])
- Bump bleak-esphome to 3.3.0 ([@bdraco] - [#151922])
- Bump habluetooth to 5.6.0 ([@bdraco] - [#151942])
- Fix invalid logger in Tuya ([@epenet] - [#151957])
- Fix for squeezebox track content_type ([@peteS-UK] - [#151963])
- Fix playlist media_class_filter in search_media for squeezebox ([@peteS-UK] - [#151973])
- Bump habluetooth to 5.6.2 ([@bdraco] - [#151985])
- Bump yt-dlp to 2025.09.05 ([@joostlek] - [#152006])
- Bump `accuweather` to version 4.2.1 ([@bieniu] - [#152029])
- Fix HomeKit Controller stale values at startup ([@bdraco] - [#152086])
- Fix duplicated IP port usage in Govee Light Local ([@abmantis] - [#152087])
- Fix DoorBird being updated with wrong IP addresses during discovery ([@bdraco] - [#152088])
- Fix supported _color_modes attribute not set for on/off MQTT JSON light ([@jbouwh] - [#152126])
- Fix reauth for Alexa Devices ([@chemelli74] - [#152128])
- Bump hass-nabucasa from 1.1.0 to 1.1.1 ([@ludeeus] - [#152147])
- Update frontend to 20250903.5 ([@bramkragten] - [#152170])
- Use position percentage for closed status in Velux ([@wollew] - [#151679])
[#150957]: https://github.com/home-assistant/core/pull/150957
[#151046]: https://github.com/home-assistant/core/pull/151046
[#151263]: https://github.com/home-assistant/core/pull/151263
[#151428]: https://github.com/home-assistant/core/pull/151428
[#151652]: https://github.com/home-assistant/core/pull/151652
[#151679]: https://github.com/home-assistant/core/pull/151679
[#151685]: https://github.com/home-assistant/core/pull/151685
[#151696]: https://github.com/home-assistant/core/pull/151696
[#151766]: https://github.com/home-assistant/core/pull/151766
[#151780]: https://github.com/home-assistant/core/pull/151780
[#151782]: https://github.com/home-assistant/core/pull/151782
[#151788]: https://github.com/home-assistant/core/pull/151788
[#151803]: https://github.com/home-assistant/core/pull/151803
[#151808]: https://github.com/home-assistant/core/pull/151808
[#151815]: https://github.com/home-assistant/core/pull/151815
[#151817]: https://github.com/home-assistant/core/pull/151817
[#151832]: https://github.com/home-assistant/core/pull/151832
[#151833]: https://github.com/home-assistant/core/pull/151833
[#151834]: https://github.com/home-assistant/core/pull/151834
[#151842]: https://github.com/home-assistant/core/pull/151842
[#151853]: https://github.com/home-assistant/core/pull/151853
[#151855]: https://github.com/home-assistant/core/pull/151855
[#151857]: https://github.com/home-assistant/core/pull/151857
[#151859]: https://github.com/home-assistant/core/pull/151859
[#151867]: https://github.com/home-assistant/core/pull/151867
[#151869]: https://github.com/home-assistant/core/pull/151869
[#151898]: https://github.com/home-assistant/core/pull/151898
[#151901]: https://github.com/home-assistant/core/pull/151901
[#151904]: https://github.com/home-assistant/core/pull/151904
[#151912]: https://github.com/home-assistant/core/pull/151912
[#151921]: https://github.com/home-assistant/core/pull/151921
[#151922]: https://github.com/home-assistant/core/pull/151922
[#151942]: https://github.com/home-assistant/core/pull/151942
[#151957]: https://github.com/home-assistant/core/pull/151957
[#151963]: https://github.com/home-assistant/core/pull/151963
[#151973]: https://github.com/home-assistant/core/pull/151973
[#151985]: https://github.com/home-assistant/core/pull/151985
[#152006]: https://github.com/home-assistant/core/pull/152006
[#152029]: https://github.com/home-assistant/core/pull/152029
[#152086]: https://github.com/home-assistant/core/pull/152086
[#152087]: https://github.com/home-assistant/core/pull/152087
[#152088]: https://github.com/home-assistant/core/pull/152088
[#152126]: https://github.com/home-assistant/core/pull/152126
[#152128]: https://github.com/home-assistant/core/pull/152128
[#152147]: https://github.com/home-assistant/core/pull/152147
[#152170]: https://github.com/home-assistant/core/pull/152170
[@Djelibeybi]: https://github.com/Djelibeybi
[@Human]: https://github.com/Human
[@Thomas55555]: https://github.com/Thomas55555
[@abmantis]: https://github.com/abmantis
[@bdraco]: https://github.com/bdraco
[@bieniu]: https://github.com/bieniu
[@blotus]: https://github.com/blotus
[@bramkragten]: https://github.com/bramkragten
[@chemelli74]: https://github.com/chemelli74
[@dknowles2]: https://github.com/dknowles2
[@edenhaus]: https://github.com/edenhaus
[@epenet]: https://github.com/epenet
[@farmio]: https://github.com/farmio
[@frenck]: https://github.com/frenck
[@funkybunch]: https://github.com/funkybunch
[@hbludworth]: https://github.com/hbludworth
[@janiversen]: https://github.com/janiversen
[@jbouwh]: https://github.com/jbouwh
[@joostlek]: https://github.com/joostlek
[@lboue]: https://github.com/lboue
[@ludeeus]: https://github.com/ludeeus
[@martinssipenko]: https://github.com/martinssipenko
[@peteS-UK]: https://github.com/peteS-UK
[@tr4nt0r]: https://github.com/tr4nt0r
[@tsvi]: https://github.com/tsvi
[@wollew]: https://github.com/wollew
### 2025.9.3 - September 13
- Bump habluetooth to 5.6.4 ([@bdraco] - [#152227])
[#152227]: https://github.com/home-assistant/core/pull/152227
[@bdraco]: https://github.com/bdraco
### 2025.9.4 - September 19
- Bump habiticalib to v0.4.4 ([@tr4nt0r] - [#151332])
- Bump habiticalib to v0.4.5 ([@tr4nt0r] - [#151720])
- Fix bug with the hardcoded configuration_url (asuswrt) ([@Vaskivskyi] - [#151858])
- Fix HomeKit Controller overwhelming resource-limited devices by batching characteristic polling ([@bdraco] - [#152209])
- Upgrade waterfurnace to 1.2.0 ([@sdague] - [#152241])
- Bump aiohomekit to 3.2.16 ([@bdraco] - [#152255])
- Bump bluetooth-auto-recovery to 1.5.3 ([@bdraco] - [#152256])
- Add proper error handling for /actions endpoint for miele ([@astrandb] - [#152290])
- Bump aiohomekit to 3.2.17 ([@bdraco] - [#152297])
- Update authorization server to prefer absolute urls ([@allenporter] - [#152313])
- Bump imeon_inverter_api to 0.4.0 ([@Imeon-Energy] - [#152351])
- Bump pylamarzocco to 2.1.0 ([@zweckj] - [#152364])
- Add La Marzocco specific client headers ([@zweckj] - [#152419])
- Fix KNX UI schema missing DPT ([@farmio] - [#152430])
- Bump pyemoncms to 0.1.3 ([@alexandrecuer] - [#152436])
- Fix Sonos set_volume float precision issue ([@PeteRager] - [#152493])
- Bump opower to 0.15.5 ([@tronikos] - [#152531])
- Bump holidays to 0.80 ([@gjohansson-ST] - [#152306])
- Bump holidays to 0.81 ([@gjohansson-ST] - [#152569])
- Bump asusrouter to 1.21.0 ([@Vaskivskyi] - [#151607])
[#151263]: https://github.com/home-assistant/core/pull/151263
[#151332]: https://github.com/home-assistant/core/pull/151332
[#151607]: https://github.com/home-assistant/core/pull/151607
[#151720]: https://github.com/home-assistant/core/pull/151720
[#151766]: https://github.com/home-assistant/core/pull/151766
[#151858]: https://github.com/home-assistant/core/pull/151858
[#152198]: https://github.com/home-assistant/core/pull/152198
[#152209]: https://github.com/home-assistant/core/pull/152209
[#152237]: https://github.com/home-assistant/core/pull/152237
[#152241]: https://github.com/home-assistant/core/pull/152241
[#152255]: https://github.com/home-assistant/core/pull/152255
[#152256]: https://github.com/home-assistant/core/pull/152256
[#152290]: https://github.com/home-assistant/core/pull/152290
[#152297]: https://github.com/home-assistant/core/pull/152297
[#152306]: https://github.com/home-assistant/core/pull/152306
[#152313]: https://github.com/home-assistant/core/pull/152313
[#152351]: https://github.com/home-assistant/core/pull/152351
[#152364]: https://github.com/home-assistant/core/pull/152364
[#152419]: https://github.com/home-assistant/core/pull/152419
[#152430]: https://github.com/home-assistant/core/pull/152430
[#152436]: https://github.com/home-assistant/core/pull/152436
[#152493]: https://github.com/home-assistant/core/pull/152493
[#152531]: https://github.com/home-assistant/core/pull/152531
[#152569]: https://github.com/home-assistant/core/pull/152569
[@Imeon-Energy]: https://github.com/Imeon-Energy
[@PeteRager]: https://github.com/PeteRager
[@Vaskivskyi]: https://github.com/Vaskivskyi
[@alexandrecuer]: https://github.com/alexandrecuer
[@allenporter]: https://github.com/allenporter
[@astrandb]: https://github.com/astrandb
[@balloob]: https://github.com/balloob
[@bdraco]: https://github.com/bdraco
[@farmio]: https://github.com/farmio
[@frenck]: https://github.com/frenck
[@gjohansson-ST]: https://github.com/gjohansson-ST
[@sdague]: https://github.com/sdague
[@tr4nt0r]: https://github.com/tr4nt0r
[@tronikos]: https://github.com/tronikos
[@zweckj]: https://github.com/zweckj
## Need help? Join the community!
Home Assistant has a great community of users who are all more than willing

View File

@ -0,0 +1,159 @@
---
layout: post
title: "Building the AI-powered local smart home"
description: "In the past year, weve made significant progress in making AI a powerful tool in the home"
date: 2025-09-11 00:00:01
date_formatted: "September 11, 2025"
author: Paulus Schoutsen
comments: true
categories: Assist AI
og_image: /images/blog/2025-09-ai/art.webp
---
<img src='/images/blog/2025-09-ai/art.webp' style='border: 0;box-shadow: none;' alt="Building the AI-powered local smart home">
Last year, we laid out [our vision for AI in the smart home](/blog/2024/06/07/ai-agents-for-the-smart-home/), which opened up experimentation with AI in Home Assistant. In that update, we made it easier to integrate all sorts of local and cloud AI tools, and provided ways to use them to control and automate your home. A year has passed, a lot has happened in the AI space, and our community has made sure that Home Assistant has stayed at the frontier.
We beat big tech to the punch; we were the first to make AI useful in the home. We did it by giving our community complete control over how and when they use AI, making AI a powerful _tool_ to use in the home. As opposed to something that takes over your home. Our community is taking advantage of AIs unique abilities (for instance, its image recognition or summarizing skills), while having the ability to exclude it from mission-critical things theyd prefer it not to handle. Best of all, this can all be run locally, without any data leaving your home!
Moreover, if users dont want AI in their homes, thats their choice, and they can choose not to enable any of these features. I hope to see big tech take an approach this measured, but judging by their last couple of keynotes, Im not holding my breath.
Over the past year, weve added many new AI features and made them easy to use directly through Home Assistants user interface. We have kept up with all the developments in AI land and are using the latest standard to integrate more models and tools than ever before. Were also continuing to benchmark local and cloud models to give users an idea of what works best. Keep reading to check out everything new, and maybe you can teach your smart home some cool new tricks.
<p class="img">
<lite-youtube videoid="iZ-JdpxEx3o" videotitle="Multiple commands with Ollama"></lite-youtube>
Local AI is making the home very natural to control
</p>
Big thanks to our AI community contributor team:<br>
[@AllenPorter](https://github.com/allenporter), [@shulyaka](https://github.com/shulyaka), [@tronikos](https://github.com/tronikos), [@IvanLH](https://github.com/IvanLH), [@Joostlek](https://github.com/Joostlek)!
<!--more-->
## Supercharging voice control with AI
We were doing voice assistants before AI was cool. In 2023, we kicked off our [Year of the Voice](/blog/2022/12/20/year-of-voice/). Since then, weve worked towards our goal of building all the parts needed for a local, open, and private voice assistant. When AI became the rage, we were quick to integrate it.
Today, users can chat with any large language model (LLM) that is integrated into Home Assistant, whether thats in the cloud or run locally via a service like [Ollama](/integrations/ollama/). Where [Assist](/voice_control/), our home-grown (non-AI) voice assistant agent, is focused on a predetermined list of mostly home control commands, AI allows you to ask more open-ended questions. Summarize whats happening across the smart home sensors youve [exposed to Assist](/voice_control/voice_remote_expose_devices/), or get answers to trivia questions. You can even [give your LLM a personality](/voice_control/assist_create_open_ai_personality/)!
Users can also leverage the power of AI to speak the way _they speak_, as LLMs are much better at understanding the intent behind the words. By default, Assist will handle commands first. Only questions or commands it cant understand will be sent to the AI youve set up. For instance, _“Turn on the kitchen light”_ can be handled by Assist, while _“It's dark in the kitchen, can you help?”_ could be processed by an AI. This speeds up response times for simple commands and makes for a more sustainable voice assistant.
Another powerful addition from the past year is context sharing between agents. So your Assist agent can share the most recent commands with your chosen AI agent. This shared context lets you say something like _“Add milk to my shopping list,”_ which Assist will act on, and to add more items, just say _“Add rice.”_ The AI agent understands that these commands are connected and can act accordingly.
<p class="img">
<lite-youtube videoid="mLtFUG4YG1A" videotitle="Current state of conversational AI - September 2025"></lite-youtube>
Here is an excellent walkthrough video of JLo's AI-powered home, showing many of these new features in action
</p>
Another helpful addition keeps the conversation going; if the LLM asks you a question, your Assist hardware will listen for your reply. If you say something like “Its dark”, it might ask whether youd like to turn on some lights, and you could tell it to proceed. We have taken this even further than other voice assistants, as you can now have Home Assistant initiate conversations. For example, you could set up an automation that detects when the garage door is open and asks if youd like to close it (though this can also be done without AI with a very clever [Blueprint](https://my.home-assistant.io/redirect/blueprint_import?blueprint_url=https%3A%2F%2Fwww.home-assistant.io%2Fblueprints%2Fblog%2F2025-07%2Fask_yes_no_question.yaml)).
AI pushed us to completely revamp our Text-to-Speech (TTS) system to take advantage of streaming responses from LLMs. While local AI models can be slow, we use a simple trick to make the delay almost unnoticeable. Now, both [Piper](https://github.com/OHF-Voice/piper1-gpl) (our local TTS) and [Home Assistant Cloud](/cloud/) TTS can begin generating audio as soon as the LLM produces the first few words, improving the speed of the spoken response by a factor of ten.
**Prompt: "Tell me a long story about a frog"**
| **Setup** | **Time to start speaking** |
| -------------------- | -------------------------- |
| Cloud, non-streaming | 6.62 sec |
| Cloud, streaming | 0.51 sec (13x faster) |
| Piper, non-streaming | 5.31 sec |
| Piper, streaming | 0.56 sec (9.5x faster) |
*Ollama gemma3:4b on an RTX 3090, and Piper on an i5*
## Great hardware to work with AI
People built some really cool voice hardware, from landline telephones to little talking robots, but the fact that it was so DIY was always a barrier to entry. To make our voice assistant available to everyone, we released the [Home Assistant Voice Preview Edition](/blog/2024/12/19/voice-preview-edition-the-era-of-open-voice/). This is an easy and affordable way to try Home Assistant Voice. It has some seriously powerful audio processing hardware inside its sleek package. If you were on the fence about trying out voice, it really is [the best way to get started](/voice-pe/).
<p class="img">
<img src="/images/blog/2025-09-ai/voice-pe.webp" style='border: 0;box-shadow: none;' alt="Home Assistant Voice Preview Edition">
Voice Preview Edition is not only open and powerful, but it looks and feels great too!
</p>
Its now easier than ever to set up your Assist hardware to work with LLMs with our [Voice Assistants](https://my.home-assistant.io/redirect/voice_assistants/) settings page, and you can even assign a different LLM to each device. The LLM can recognize the room its in and the devices within it, making its responses more relevant. Assist was built to be a great way to control devices in your home, but with AI, it becomes so much more.
## AI-powered suggestions
[Last month](/blog/2025/08/06/release-20258/), Home Assistant launched a new opt-in feature to leverage the power of AI when automating with Home Assistant. The goal is to shorten the journey from a blank slate to your finished idea.
When saving an automation or script, users can now leverage the new Suggest button: <img src="/images/blog/2025-09-ai/suggest.webp" style='border: 0;box-shadow: none;'> When clicked, it will send your automation configuration along with the titles of your existing automations and labels to AI to suggest a name, description, category, and labels for your new automation. Over the coming months, were going to explore what other features can benefit from AI suggestions.
<div class="contain nb">
<img src="/images/blog/2025-09-ai/suggest-button.webp" alt="A rename modal open with the new Suggest button top right">
</div>
To opt-in to this feature, you need to take two steps. First, you need to configure an integration that provides an [_AI Tasks_ entity](/integrations/?cat=ai). For local AI, you can configure Ollama, or you can also leverage cloud-based AI like Google, OpenAI, or Anthropic. Once configured, you need to go to the new [AI Task preferences pane](https://my.home-assistant.io/redirect/config_ai_task/) under **_System -> General_** and pick the AI Task entity to power suggestions in the UI. If you don't configure an AI Tasks entity, the Suggest button will not be visible.
<div class="contain nb">
<img src="/images/blog/2025-09-ai/ai-suggestions.webp" alt="The AI Suggestions setting within Home Assistant">
</div>
## AI Tasks gets the job done
Enabling [AI Tasks](/integrations/ai_task/) does more than quickly label and summarize your automations; its true superpower is making AI easy to use in templates, scripts, and automations. AI Tasks allow other code to leverage AI to generate data, including options to attach files and define how you want that data output (for instance, a JSON schema).
We have all seen those incredible community creations, where a user leverages AI image recognition and analysis to [detect available parking spots](https://www.reddit.com/r/homeassistant/comments/1lytyv9/parking_spot_detection/) or [count the number of chickens in the chicken coop](https://houndhillhomestead.com/google-gemini-powered-goose-coop-door/). Its likely that AI Tasks can now help you easily do this in Home Assistant, without the need for complex scripts, extra add-ons, or HACS integrations.
Below is a template entity that counts chickens in a video feed, all via a short and simple set of instructions.
{% raw %}
```yaml
template:
 - triggers:
     - trigger: homeassistant
       event: start
     - trigger: time_pattern
       minutes: "/5"
   actions:
     - action: ai_task.generate_data
       data:
         task_name: Count chickens
         instructions: >-
           This is the inside of my coop. How many birds (chickens, geese, and
           ducks) are inside the coop?
         structure:
           birds:
             selector:
               number:
         attachments:
           media_content_id: media-source://camera/camera.chicken_coop
           media_content_type: image/jpeg
       response_variable: result
   sensor:
     - name: "Chickens"
       state: "{{ result.data.birds }}"
       state_class: total
```
{% endraw %}
This template sends a snapshot of the camera to the AI, asking it to analyze what is going on. It defines that the output should always be a number, since we want to use that information in Home Assistant. All of this is embedded in a template entity that automatically updates every 5 minutes. An AI Task could also be embedded in an automation, a script, or any other place that can execute actions.
<div class="contain">
<img src="/images/blog/2025-09-ai/activity.webp" alt="Activity view in Home Assistant of the doorbell image analyzed by AI Tasks">
An automation triggers an AI Task to identify what caused motion on a camera.
</div>
Lastly, users can set a default AI Task entity. This allows users to skip picking an entity ID when creating AI automations. It also lets you migrate everything that uses AI Tasks to the latest model with a single click. This also makes it easy to share blueprints that leverage AI Tasks, like this blueprint that analyzes a camera snapshot when motion is detected:
{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/ai-camera-analysis/911634" %}
## MCP opens a whole new world
[Model Context Protocol](/integrations/mcp/) (MCP) is a thin layer allowing LLMs to integrate _anything_. When the specification was announced, we quickly jumped on it and integrated it into Home Assistant. Effectively, these servers give Home Assistants Assist conversation agent access to all sorts of new tools. You could connect MCP servers that give Assist access to the latest news stories, your to-do lists, or a server that catalogues your vinyl collection, allowing you to have richer conversations (_“Okay Nabu, which Replacements albums do I have, and which arent on my Vinyl-to-Purchase list?”_).
On the flip side, you can also [turn Home Assistant into an MCP server](/integrations/mcp_server/), allowing an AI system to access information about your home. For instance, you could create a local AI that's great at making Home Assistant automations, and it could include all your entity names or available actions. MCP keeps gaining more support, and there are some great cloud and self-hosted solutions available.
## How to pick a model
There are a lot of models available, it's hard to know where to start. Luckily, Home Assistants resident AI guru [@AllenPorter](https://github.com/allenporter) is here to help. He has put together an incredibly useful [Home LLM Leaderboard](https://github.com/allenporter/home-assistant-datasets/tree/main/reports). This dataset includes his extensive tests of cloud and local LLM options, and even has tests that give small local LLMs a fighting chance (see [assist-mini](https://github.com/allenporter/home-assistant-datasets/tree/main/reports#assist-mini)).
Currently, the charts show the big cloud players' most recent models ranking pretty close to each other, while recent local models that use 8GB or more of VRAM are nearly keeping up. In the past, there was a big disparity between most models, but now it's hard to go wrong.
This is especially helpful as the options for LLMs in Home Assistant have just grown exponentially with the addition of [OpenRouter](/integrations/open_router), a unified interface for LLMs. With OpenRouter, users can access over 400 new models in Home Assistant, and it supports AI Tasks right from day one. We really are spoiled for choice.
## The future is Open, and Open Source
Home Assistant is open. We believe that you should be in control of your data, and your smart home. All of it. Local LLMs and the way we have architected Home Assistant extends this choice to the AI space, all while maintaining your privacy.
Most crucially, weve made all of this open source. We are community-driven and work on this together with our community. The Open Home Foundation has no investors and is not beholden to anyone but our users. Our work is funded through hardware purchases and [Home Assistant Cloud](/cloud/) subscriptions, allowing us to make all the technology we build free and open.

View File

@ -0,0 +1,110 @@
---
layout: post
title: "Happy 12th Birthday, Home Assistant!"
description: "This year were sharing some stories from the community and some stats about our growth."
date: 2025-09-17 00:00:01
date_formatted: "September 17, 2025"
author: Missy Quarry
comments: true
categories: Announcements
og_image: /images/blog/2025-09-12th-anniversary/art.webp
---
<img src='/images/blog/2025-09-12th-anniversary/art.webp' style='border: 0;box-shadow: none;' alt="Home Assistant 12th Anniversary">
Every September, we celebrate the anniversary of Home Assistants first PR in 2013 for our 12th birthday, were going all in on community again. Last month, we asked for submissions on how Home Assistant helps you, and today we will highlight our favorites! We will also take a look at all the cool milestones over the past year in the project, thanks to contributions from you all, and the new things coming up for the community. <!--more-->
## Its a communal effort
When I (Missy Quarry) joined as the Community & Social Media Manager in February 2024, I was still new to how an open source project the size of Home Assistant manages its community. Over the past 18 months, Ive seen Home Assistant community members from all walks of life — whether DIY tinkerers or people simply looking to make small improvements at home — contribute in their own ways. By sharing your stories and inspiring others, youve helped the project grow.  For our 12th birthday, I want to celebrate these contributions, no matter the size or complexity. 😌
Before I jump into celebrating all your amazing contributions and how they shape the projects managed by the Open Home Foundation, I have a couple of birthday presents for you. 🎁
First, Im thrilled to share our [new Community website](/community)! Right now, its a simple hub to find community information with ease, but we expect to evolve this over the coming months (or so). Youll find links to our official community platforms, information on events, and details on meetups, including how to get reimbursed for certain fees as a host. In the future, Id like to include links to regional communities were aware of and showcase more of the kinds of stories Ill be sharing today.
*Feel like somethings missing from this new page? [Let me know](mailto:community@openhomefoundation.org)!*
Next, weve been working hard to do more of our development in the open. Last September, I redesigned the Discord server and in doing so I gated the *Developer* category behind a role. This has made it more difficult to develop in the open with the channels hidden behind a role, so were switching things up.
As of this week, the Developer category is now **read-only** for every member. Want to take a peek into the future of Home Assistant? Head to the [#projects channel](https://discord.com/channels/330944238910963714/1346914401508392980) and see what contributors are talking about! Want to join in and contribute with either your feedback or skills? Ive created [an info thread](https://discord.com/channels/330944238910963714/1346952081881436331) for the channel that explains how to assign yourself either the Developer or Designer role and unlock the ability to chat in the threads.
Lets jump into those submitted stories now… 🤩
## Happily ever after
In my opinion, the best thing about Home Assistant is its flexibility - you can integrate such a wide range of devices into it and use their data to build a unique-to-your-home experience. And thats exactly why I wanted to hear how you, the community, use it in your own home to benefit you. Here are my favorite stories you submitted - I hope one inspires your next project. ✨
- [A coffee automation to improve Home Approval Factor](https://jordan.roher.me/projects/home-automation/). ☕️ Jordan made a morning automation to avoid having the coffee grinder grind his morning mood.
- u/katschung helped their girlfriend fully accept Home Assistant by [creating a dashboard with a retrogame-style floor plan](https://www.reddit.com/r/homeassistant/comments/1hrkku1/pokemon_style_floorplan/). 🕹️
- Sythsaz uses Home Assistant to make sure their pupper is fed. 🐾 “*I've managed to make it so my dog's food auto emails the vet then the response to the email gets put on my calendar so I know how long a bag of food lasts as well as adding the receipts to Google Drive.*”
- Inspired by [PowerDisplayESPHome](https://github.com/johannyren/PowerDisplayESPHome/tree/main), JannickBlmndl [made an LED matrix](https://gitlab.com/JannickBlmndl/ESPHome-Dynamic-Prices-LEDMatrix) that helps their household be more sustainable by being energy flexible. It displays the live energy prices from their energy provider. 📊
- [Tano Spirits](https://www.youtube.com/@TanoSpirits) in Melbourne, Australia, uses Home Assistant to automate their Japanese Shochu distillery, inspired by the brewing automations at [Little Island Brewing Co](https://libc.co/brewing-process/) in Singapore. 🍻
- Several years ago, HillPhantom found that Home Assistant wasnt quite ready for him. Over the past year, though, hes now got Ollama set up with his Home Assistant Voice Preview Edition and has been building guides on how to make your own [mmWave radar sensors in Home Assistant](https://www.youtube.com/watch?v=Gb-4l93st8A). 👋🏻
- Over just a few weeks, Pieter van Kampen recently integrated 190 devices that respond to voice control and more than 1200 active entities from his KNX home to create over 30 automations to help with everything from mowing the lawn to controlling shades based on the suns location and intensity. 🪟
- MB used Zigbee buttons to help collect data for their sons doctor after he developed some trouble sleeping. This gave excellent insight for the doctor to start looking into causes, and they even used the system remotely while doing further evaluation. 📈
- Graham Hosking took automations to another level (before we did) with his [AI Automation Suggester](https://github.com/ITSpecialist111/ai_automation_suggester) and [Automation Inspector](https://github.com/ITSpecialist111/Automation-Inspector). It takes the load off your brain by helping come up with new, clever automations! 🤖
- Wessam Lauf fell down the rabbit hole that is Home Assistant once he got his setup running. Inspired by the Graphite theme and after some LLM vibe-coding, he wrote a template for his very own theme, [Frosted Glass](https://github.com/wessamlauf/homeassistant-frosted-glass-themes) - now available in [HACS](https://www.hacs.xyz/). 🎨
- Too many of us anthropomorphize our homes, telling it to chill out when five things break the same day. Biofects took that to heart and created this [Home Assistant avatar](https://streamable.com/hnoc63) for his home (heres a bonus, nightmare fuel [first version](https://streamable.com/xah2va)). 🫣
## Developers! 👏🏻 Developers! 👏🏻 Developers! 👏🏻
Our community is more than developers, its true. But we wouldnt be the [largest open source project](https://github.blog/news-insights/octoverse/octoverse-2024/) on GitHub if we didnt have a vibrant and active developer community. This ship sails largely due to their contributions, and we genuinely appreciate all of their efforts.
Thats why were eager to interview community members when we open new roles at the foundation. Weve employed community members like [Joostlek](https://github.com/joostlek) (who designed the new [Integration Quality Scale](https://developers.home-assistant.io/docs/core/integration-quality-scale/) and helps onboard new integrations into Core), [Timo](https://github.com/TimoPtr) (who is our first ever Android developer and has focused on [polishing the Android app](/blog/2025/07/23/companion-app-for-android/)), and [Maxim](https://github.com/maximmaxim345) (a talented developer from the Music Assistant community who works on both Music Assistant and ESPHome and is one of our newest additions to the team). Their contributions have helped shape how things work around here, but it was their contributions as community members that helped pave the way for their joining the foundation. These are just a select few of the *several* new hires at the foundation who were active community members.
(Have you checked our [jobs page](https://jobs.ashbyhq.com/openhomefoundation/) recently to see what roles are open? 👀)
With our community of contributors and working with Nabu Casa on the hardware design, we have successfully launched a few new pieces of hardware. The [Home Assistant Voice Preview Edition](/voice-pe/) brought in language experts from every corner of the world to help ensure our language coverage is the most robust in the industry. Thanks to contributors, we support languages like Greek, Icelandic, and more recently Irish Gaeilge! 😎 We had community contributors help make sure the Home Assistant [Connect ZWA-2](/connect/zwa-2/) was prepared for launch last month. Sincerely, we couldnt be more grateful for your support and efforts in these spaces.
Here are some fun stats from our GitHub contributors ([commits on our Core repo](https://github.com/home-assistant/core/graphs/contributors?from=9%2F9%2F2023)):
- Last 12 months (Sept - Aug) - 14,385
- Previous 12 months - 14,503
A SPECIAL CONGRATULATIONS to [bdraco](https://github.com/bdraco), who just last week surpassed [balloob](https://github.com/balloob) (the founder of Home Assistant) as the contributor with the most commits!
<div class="contain nb">
<img src="/images/blog/2025-09-12th-anniversary/contributors.webp" alt="Top 8 contributors of all time for home-assistant/core" style="width:100%;max-width:700px;">
The top 8 contributors of all time in home-assistant/core👏🏻
</div>
This is just a small peek into all the hard work that goes into maintaining Home Assistant - we have more repositories than just Core, and every single contribution is valued.
Honorable dev mention from the submitted community stories - I couldnt leave Joostleks (joke) submission out. 🤣
- Our very own Head of Developer Relations (his words), Joost Lekkerkerker, says Home Assistant helps keep him off the street. Hes just launched [his new blog](https://joostlek.dev/what-is-a-smart-home/) that talks about his vision of a smart home, and how he was inspired to not buy Tuya Wi-Fi lights after seeing my experience with some path lights.
## Our humble gratitude
Community is the core of what we do and the heart of Home Assistant. We thrive because you care and contribute your valuable time to support our collective success. Whether you found our platform because you wanted more privacy from big tech, were intrigued by the number of choices implemented into a single app, or needed something to track your sustainability efforts — you support our values every day. Thanks for choosing us, and thank you for all you do to help support the foundation and the projects we maintain.
A very special thanks to all our [Home Assistant Cloud](/cloud/) subscribers and anyone who has purchased our official Home Assistant hardware. These support the full-time development of Home Assistant (along with ESPHome, Music Assistant, and so much more), and are the easiest way to ensure these projects keep getting cool new features!
We have more things coming down the line for you. In the near future, we plan on announcing a new merch store 👕. In the first half of next year, Ill announce when Home Assistant Community Day 2026 will be. Were already working with Nabu Casa on the next exciting hardware announcement (no spoilers…for now). And thats not even touching the industry events we plan on attending, the State of the Open Home, and so much more. Im excited to take you all on the journey were already working on over the next 12 months, and Im always looking forward to another year of amazing contributions. 😌
<script>
if (!document.cookie.split('; ').find(row => row.startsWith('12th-blog-confetti='))) {
const d = new Date();
d.setTime(d.getTime() + (24*60*60*1000)); // Once a day only
let expires = "expires="+ d.toUTCString();
document.cookie = "12th-blog-confetti=1;" + expires + ";path=/";
const script = document.createElement('script');
script.src = 'https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.3/dist/confetti.browser.min.js';
script.onload = () => {
// launch confetti. Full screen, bottom anchor
confetti({ particleCount: 500, gravity: 1, spread: 120, scalar: 1.5, startVelocity: 150, ticks: 200, angle: 90, origin: { y: 1.4, x: 0.5 }});
};
document.head.appendChild(script);
}
</script>

View File

@ -17,7 +17,6 @@ layout: null
/merch https://home-assistant-store.creator-spring.com
/feature-requests https://github.com/orgs/home-assistant/discussions
/issues https://github.com/home-assistant/core/issues
/community https://community.home-assistant.io/
/voice /voice_control/builtin_sentences/
/latest-security-alert /security/
@ -345,6 +344,7 @@ layout: null
/ecosystem/notebooks/stats https://data.home-assistant.io
/examples/notify.mqtt /integrations/mqtt/#mqtt-notifications
/ios/whats-new https://companion.home-assistant.io/docs/getting_started/getting-started
/installation/#about-installation-methods /installation/#about-installation-types
/installation/nuc /installation/generic-x86-64
/integrations/auth /docs/authentication
/integrations/automation /docs/automation

View File

@ -117,6 +117,8 @@ sequence:
- id: "yes"
sentences:
- "Yes"
- Yes please
- Yes thank you
- Sure
- Absolutely
- Go ahead
@ -172,6 +174,7 @@ sequence:
- Nope
- Don't
- Please don't
- Please no
- No thank you
- I don't think so
- Not now

View File

@ -599,6 +599,248 @@ For a summary in a more readable format:
- Bump intents ([@synesthesiam] - [#151627])
- Update frontend to 20250903.2 ([@bramkragten] - [#151629])
## Release 2025.9.1 - September 5
- Add support for migrated Hue bridge ([@marcelveldt] - [#151411])
- Add missing device trigger duration localizations ([@karwosts] - [#151578])
- Correct capitalization of "FRITZ!Box" in FRITZ!Box Tools integration ([@tr4nt0r] - [#151637])
- Fix Sonos Dialog Select type conversion ([@PeteRager] - [#151649])
- Fix WebSocket proxy for add-ons not forwarding ping/pong frame data ([@felipecrs] - [#151654])
- Fix, entities stay unavailable after timeout error, Imeon inverter integration ([@Imeon-Energy] - [#151671])
- Bump aiohue to 4.7.5 ([@marcelveldt] - [#151684])
- Update frontend to 20250903.3 ([@bramkragten] - [#151694])
- Require OhmeAdvancedSettingsCoordinator to run regardless of entities ([@dan-r] - [#151701])
- Bump ohmepy version to 1.5.2 ([@dan-r] - [#151707])
- Update Mill library 0.13.1 ([@Danielhiversen] - [#151712])
- Handle match failures in intent HTTP API ([@synesthesiam] - [#151726])
- Bump pyschlage to 2025.9.0 ([@dknowles2] - [#151731])
- Bump bimmer_connected to 0.17.3 ([@rikroe] - [#151756])
- Fix recognition of entity names in default agent with interpunction ([@arturpragacz] - [#151759])
- Fix enable/disable entity in modbus ([@janiversen] - [#151626])
[#151263]: https://github.com/home-assistant/core/pull/151263
[#151411]: https://github.com/home-assistant/core/pull/151411
[#151578]: https://github.com/home-assistant/core/pull/151578
[#151626]: https://github.com/home-assistant/core/pull/151626
[#151637]: https://github.com/home-assistant/core/pull/151637
[#151649]: https://github.com/home-assistant/core/pull/151649
[#151654]: https://github.com/home-assistant/core/pull/151654
[#151671]: https://github.com/home-assistant/core/pull/151671
[#151684]: https://github.com/home-assistant/core/pull/151684
[#151694]: https://github.com/home-assistant/core/pull/151694
[#151701]: https://github.com/home-assistant/core/pull/151701
[#151707]: https://github.com/home-assistant/core/pull/151707
[#151712]: https://github.com/home-assistant/core/pull/151712
[#151726]: https://github.com/home-assistant/core/pull/151726
[#151731]: https://github.com/home-assistant/core/pull/151731
[#151756]: https://github.com/home-assistant/core/pull/151756
[#151759]: https://github.com/home-assistant/core/pull/151759
[@Danielhiversen]: https://github.com/Danielhiversen
[@Imeon-Energy]: https://github.com/Imeon-Energy
[@PeteRager]: https://github.com/PeteRager
[@arturpragacz]: https://github.com/arturpragacz
[@bramkragten]: https://github.com/bramkragten
[@dan-r]: https://github.com/dan-r
[@dknowles2]: https://github.com/dknowles2
[@felipecrs]: https://github.com/felipecrs
[@frenck]: https://github.com/frenck
[@janiversen]: https://github.com/janiversen
[@karwosts]: https://github.com/karwosts
[@marcelveldt]: https://github.com/marcelveldt
[@rikroe]: https://github.com/rikroe
[@synesthesiam]: https://github.com/synesthesiam
[@tr4nt0r]: https://github.com/tr4nt0r
## Release 2025.9.2 - September 12
- Fix XMPP not working with non-TLS servers ([@Human] - [#150957])
- Update SharkIQ authentication method ([@funkybunch] - [#151046])
- Add event entity on websocket ready in Husqvarna Automower ([@Thomas55555] - [#151428])
- Fix Aladdin Connect state not updating ([@hbludworth] - [#151652])
- Fix support for Ecowitt soil moisture sensors ([@blotus] - [#151685])
- Fix update of the entity ID does not clean up an old restored state ([@jbouwh] - [#151696])
- Revert "Jewish Calendar add coordinator " ([@tsvi] - [#151780])
- Remove device class for Matter NitrogenDioxideSensor ([@lboue] - [#151782])
- Improve config entry migration for edge cases in Alexa Devices ([@chemelli74] - [#151788])
- Bump habluetooth to 5.3.1 ([@bdraco] - [#151803])
- Fix KNX BinarySensor config_store data ([@farmio] - [#151808])
- Fix KNX Light - individual color initialisation from UI config ([@farmio] - [#151815])
- Mark Tractive switches as unavailable when tacker is in the enegy saving zone ([@bieniu] - [#151817])
- Allow delay > 1 in modbus. ([@janiversen] - [#151832])
- max_temp / min_temp in modbus light could only be int, otherwise an assert was provoked. ([@janiversen] - [#151833])
- removed assert fron entity in modbus. ([@janiversen] - [#151834])
- Bump pydrawise to 2025.9.0 ([@dknowles2] - [#151842])
- Bump aioharmony to 0.5.3 ([@bdraco] - [#151853])
- Update pysmarty2 to 0.10.3 ([@martinssipenko] - [#151855])
- fix rain sensor for Velux GPU windows ([@wollew] - [#151857])
- Bump aioecowitt to 2025.9.1 ([@edenhaus] - [#151859])
- Use `native_visibility` property instead of `visibility` for OpenWeatherMap weather entity ([@bieniu] - [#151867])
- Bump aiontfy to v0.5.5 ([@tr4nt0r] - [#151869])
- Bump aiolifx-themes to 1.0.2 to support newer LIFX devices ([@Djelibeybi] - [#151898])
- Bump aiovodafone to 1.2.1 ([@chemelli74] - [#151901])
- Avoid cleanup/recreate of device_trackers not linked to a device for Vodafone Station ([@chemelli74] - [#151904])
- Fix _is_valid_suggested_unit in sensor platform ([@epenet] - [#151912])
- Bump habluetooth to 5.5.1 ([@bdraco] - [#151921])
- Bump bleak-esphome to 3.3.0 ([@bdraco] - [#151922])
- Bump habluetooth to 5.6.0 ([@bdraco] - [#151942])
- Fix invalid logger in Tuya ([@epenet] - [#151957])
- Fix for squeezebox track content_type ([@peteS-UK] - [#151963])
- Fix playlist media_class_filter in search_media for squeezebox ([@peteS-UK] - [#151973])
- Bump habluetooth to 5.6.2 ([@bdraco] - [#151985])
- Bump yt-dlp to 2025.09.05 ([@joostlek] - [#152006])
- Bump `accuweather` to version 4.2.1 ([@bieniu] - [#152029])
- Fix HomeKit Controller stale values at startup ([@bdraco] - [#152086])
- Fix duplicated IP port usage in Govee Light Local ([@abmantis] - [#152087])
- Fix DoorBird being updated with wrong IP addresses during discovery ([@bdraco] - [#152088])
- Fix supported _color_modes attribute not set for on/off MQTT JSON light ([@jbouwh] - [#152126])
- Fix reauth for Alexa Devices ([@chemelli74] - [#152128])
- Bump hass-nabucasa from 1.1.0 to 1.1.1 ([@ludeeus] - [#152147])
- Update frontend to 20250903.5 ([@bramkragten] - [#152170])
- Use position percentage for closed status in Velux ([@wollew] - [#151679])
[#150957]: https://github.com/home-assistant/core/pull/150957
[#151046]: https://github.com/home-assistant/core/pull/151046
[#151263]: https://github.com/home-assistant/core/pull/151263
[#151428]: https://github.com/home-assistant/core/pull/151428
[#151652]: https://github.com/home-assistant/core/pull/151652
[#151679]: https://github.com/home-assistant/core/pull/151679
[#151685]: https://github.com/home-assistant/core/pull/151685
[#151696]: https://github.com/home-assistant/core/pull/151696
[#151766]: https://github.com/home-assistant/core/pull/151766
[#151780]: https://github.com/home-assistant/core/pull/151780
[#151782]: https://github.com/home-assistant/core/pull/151782
[#151788]: https://github.com/home-assistant/core/pull/151788
[#151803]: https://github.com/home-assistant/core/pull/151803
[#151808]: https://github.com/home-assistant/core/pull/151808
[#151815]: https://github.com/home-assistant/core/pull/151815
[#151817]: https://github.com/home-assistant/core/pull/151817
[#151832]: https://github.com/home-assistant/core/pull/151832
[#151833]: https://github.com/home-assistant/core/pull/151833
[#151834]: https://github.com/home-assistant/core/pull/151834
[#151842]: https://github.com/home-assistant/core/pull/151842
[#151853]: https://github.com/home-assistant/core/pull/151853
[#151855]: https://github.com/home-assistant/core/pull/151855
[#151857]: https://github.com/home-assistant/core/pull/151857
[#151859]: https://github.com/home-assistant/core/pull/151859
[#151867]: https://github.com/home-assistant/core/pull/151867
[#151869]: https://github.com/home-assistant/core/pull/151869
[#151898]: https://github.com/home-assistant/core/pull/151898
[#151901]: https://github.com/home-assistant/core/pull/151901
[#151904]: https://github.com/home-assistant/core/pull/151904
[#151912]: https://github.com/home-assistant/core/pull/151912
[#151921]: https://github.com/home-assistant/core/pull/151921
[#151922]: https://github.com/home-assistant/core/pull/151922
[#151942]: https://github.com/home-assistant/core/pull/151942
[#151957]: https://github.com/home-assistant/core/pull/151957
[#151963]: https://github.com/home-assistant/core/pull/151963
[#151973]: https://github.com/home-assistant/core/pull/151973
[#151985]: https://github.com/home-assistant/core/pull/151985
[#152006]: https://github.com/home-assistant/core/pull/152006
[#152029]: https://github.com/home-assistant/core/pull/152029
[#152086]: https://github.com/home-assistant/core/pull/152086
[#152087]: https://github.com/home-assistant/core/pull/152087
[#152088]: https://github.com/home-assistant/core/pull/152088
[#152126]: https://github.com/home-assistant/core/pull/152126
[#152128]: https://github.com/home-assistant/core/pull/152128
[#152147]: https://github.com/home-assistant/core/pull/152147
[#152170]: https://github.com/home-assistant/core/pull/152170
[@Djelibeybi]: https://github.com/Djelibeybi
[@Human]: https://github.com/Human
[@Thomas55555]: https://github.com/Thomas55555
[@abmantis]: https://github.com/abmantis
[@bdraco]: https://github.com/bdraco
[@bieniu]: https://github.com/bieniu
[@blotus]: https://github.com/blotus
[@bramkragten]: https://github.com/bramkragten
[@chemelli74]: https://github.com/chemelli74
[@dknowles2]: https://github.com/dknowles2
[@edenhaus]: https://github.com/edenhaus
[@epenet]: https://github.com/epenet
[@farmio]: https://github.com/farmio
[@frenck]: https://github.com/frenck
[@funkybunch]: https://github.com/funkybunch
[@hbludworth]: https://github.com/hbludworth
[@janiversen]: https://github.com/janiversen
[@jbouwh]: https://github.com/jbouwh
[@joostlek]: https://github.com/joostlek
[@lboue]: https://github.com/lboue
[@ludeeus]: https://github.com/ludeeus
[@martinssipenko]: https://github.com/martinssipenko
[@peteS-UK]: https://github.com/peteS-UK
[@tr4nt0r]: https://github.com/tr4nt0r
[@tsvi]: https://github.com/tsvi
[@wollew]: https://github.com/wollew
## Release 2025.9.3 - September 13
- Bump habluetooth to 5.6.4 ([@bdraco] - [#152227])
[#152227]: https://github.com/home-assistant/core/pull/152227
[@bdraco]: https://github.com/bdraco
## Release 2025.9.4 - September 19
- Bump habiticalib to v0.4.4 ([@tr4nt0r] - [#151332])
- Bump habiticalib to v0.4.5 ([@tr4nt0r] - [#151720])
- Fix bug with the hardcoded configuration_url (asuswrt) ([@Vaskivskyi] - [#151858])
- Fix HomeKit Controller overwhelming resource-limited devices by batching characteristic polling ([@bdraco] - [#152209])
- Upgrade waterfurnace to 1.2.0 ([@sdague] - [#152241])
- Bump aiohomekit to 3.2.16 ([@bdraco] - [#152255])
- Bump bluetooth-auto-recovery to 1.5.3 ([@bdraco] - [#152256])
- Add proper error handling for /actions endpoint for miele ([@astrandb] - [#152290])
- Bump aiohomekit to 3.2.17 ([@bdraco] - [#152297])
- Update authorization server to prefer absolute urls ([@allenporter] - [#152313])
- Bump imeon_inverter_api to 0.4.0 ([@Imeon-Energy] - [#152351])
- Bump pylamarzocco to 2.1.0 ([@zweckj] - [#152364])
- Add La Marzocco specific client headers ([@zweckj] - [#152419])
- Fix KNX UI schema missing DPT ([@farmio] - [#152430])
- Bump pyemoncms to 0.1.3 ([@alexandrecuer] - [#152436])
- Fix Sonos set_volume float precision issue ([@PeteRager] - [#152493])
- Bump opower to 0.15.5 ([@tronikos] - [#152531])
- Bump holidays to 0.80 ([@gjohansson-ST] - [#152306])
- Bump holidays to 0.81 ([@gjohansson-ST] - [#152569])
- Bump asusrouter to 1.21.0 ([@Vaskivskyi] - [#151607])
[#151263]: https://github.com/home-assistant/core/pull/151263
[#151332]: https://github.com/home-assistant/core/pull/151332
[#151607]: https://github.com/home-assistant/core/pull/151607
[#151720]: https://github.com/home-assistant/core/pull/151720
[#151766]: https://github.com/home-assistant/core/pull/151766
[#151858]: https://github.com/home-assistant/core/pull/151858
[#152198]: https://github.com/home-assistant/core/pull/152198
[#152209]: https://github.com/home-assistant/core/pull/152209
[#152237]: https://github.com/home-assistant/core/pull/152237
[#152241]: https://github.com/home-assistant/core/pull/152241
[#152255]: https://github.com/home-assistant/core/pull/152255
[#152256]: https://github.com/home-assistant/core/pull/152256
[#152290]: https://github.com/home-assistant/core/pull/152290
[#152297]: https://github.com/home-assistant/core/pull/152297
[#152306]: https://github.com/home-assistant/core/pull/152306
[#152313]: https://github.com/home-assistant/core/pull/152313
[#152351]: https://github.com/home-assistant/core/pull/152351
[#152364]: https://github.com/home-assistant/core/pull/152364
[#152419]: https://github.com/home-assistant/core/pull/152419
[#152430]: https://github.com/home-assistant/core/pull/152430
[#152436]: https://github.com/home-assistant/core/pull/152436
[#152493]: https://github.com/home-assistant/core/pull/152493
[#152531]: https://github.com/home-assistant/core/pull/152531
[#152569]: https://github.com/home-assistant/core/pull/152569
[@Imeon-Energy]: https://github.com/Imeon-Energy
[@PeteRager]: https://github.com/PeteRager
[@Vaskivskyi]: https://github.com/Vaskivskyi
[@alexandrecuer]: https://github.com/alexandrecuer
[@allenporter]: https://github.com/allenporter
[@astrandb]: https://github.com/astrandb
[@balloob]: https://github.com/balloob
[@bdraco]: https://github.com/bdraco
[@farmio]: https://github.com/farmio
[@frenck]: https://github.com/frenck
[@gjohansson-ST]: https://github.com/gjohansson-ST
[@sdague]: https://github.com/sdague
[@tr4nt0r]: https://github.com/tr4nt0r
[@tronikos]: https://github.com/tronikos
[@zweckj]: https://github.com/zweckj
[#122552]: https://github.com/home-assistant/core/pull/122552
[#128123]: https://github.com/home-assistant/core/pull/128123
[#132628]: https://github.com/home-assistant/core/pull/132628

View File

@ -72,7 +72,7 @@ Updates of the {% term "Home Assistant Operating System" %} are independent of o
ha os update
```
_This updates to the latest version. If you want to update to a specific version instead, use `ha os update --version 12.0`._
_This updates to the latest version. If you want to update to a specific version instead, use `ha os update --version 15.2`._
{% endtabbed_block %}

View File

@ -0,0 +1,63 @@
<svg style="display: none;">
<defs>
<symbol id="luma" viewBox="0 0 12 12">
<path d="M12 6C8.6871 6 6 3.3129 6 0C6 3.3129 3.3129 6 0 6C3.3129 6 6 8.6871 6 12C6 8.6871 8.6871 6 12 6Z"
fill="currentColor" />
</symbol>
<symbol id="creator" viewBox="0 0 12 13">
<path
d="M6 11.315C5.67 11.315 5.3875 11.195 5.1525 10.955C4.9175 10.715 4.8 10.43 4.8 10.1C4.8 9.77 4.9175 9.4875 5.1525 9.2525C5.3875 9.0175 5.67 8.9 6 8.9L6.36 8.555C6.44 8.475 6.5325 8.4125 6.6375 8.3675C6.7425 8.3225 6.85 8.3 6.96 8.3C7.19 8.3 7.3875 8.385 7.5525 8.555C7.7175 8.725 7.8 8.925 7.8 9.155V9.41C7.8 9.61 7.865 9.775 7.995 9.905C8.125 10.035 8.29 10.1 8.49 10.1C8.64 10.1 8.775 10.055 8.895 9.965C9.015 9.875 9.1 9.76 9.15 9.62L9.33 9.125C9.42 8.885 9.565 8.6875 9.765 8.5325C9.965 8.3775 10.195 8.3 10.455 8.3C10.565 8.02 10.6525 7.73 10.7175 7.43C10.7825 7.13 10.815 6.82 10.815 6.5C10.815 5.61 10.5925 4.7975 10.1475 4.0625C9.7025 3.3275 9.12 2.75 8.4 2.33V2.9C8.4 3.23 8.2825 3.5125 8.0475 3.7475C7.8125 3.9825 7.53 4.1 7.2 4.1H6.6V5.3C6.6 5.47 6.5425 5.6125 6.4275 5.7275C6.3125 5.8425 6.17 5.9 6 5.9H5.4V6.92C5.4 7.14 5.325 7.325 5.175 7.475C5.025 7.625 4.84 7.7 4.62 7.7C4.48 7.7 4.3525 7.67 4.2375 7.61C4.1225 7.55 4.03 7.465 3.96 7.355L3 5.9H2.4V6.5C2.4 6.81 2.295 7.075 2.085 7.295C1.875 7.515 1.625 7.645 1.335 7.685C1.595 8.725 2.1575 9.59 3.0225 10.28C3.8875 10.97 4.88 11.315 6 11.315ZM7.2 7.7C7.03 7.7 6.8875 7.6425 6.7725 7.5275C6.6575 7.4125 6.6 7.27 6.6 7.1C6.6 6.93 6.6575 6.7875 6.7725 6.6725C6.8875 6.5575 7.03 6.5 7.2 6.5H7.8C7.97 6.5 8.1125 6.5575 8.2275 6.6725C8.3425 6.7875 8.4 6.93 8.4 7.1C8.4 7.27 8.3425 7.4125 8.2275 7.5275C8.1125 7.6425 7.97 7.7 7.8 7.7H7.2ZM8.595 5.9C8.395 5.9 8.2375 5.8225 8.1225 5.6675C8.0075 5.5125 7.98 5.34 8.04 5.15L8.265 4.49C8.305 4.37 8.375 4.275 8.475 4.205C8.575 4.135 8.685 4.1 8.805 4.1C9.005 4.1 9.1625 4.1775 9.2775 4.3325C9.3925 4.4875 9.42 4.66 9.36 4.85L9.135 5.51C9.095 5.63 9.025 5.725 8.925 5.795C8.825 5.865 8.715 5.9 8.595 5.9ZM6 12.5C5.17 12.5 4.39 12.3425 3.66 12.0275C2.93 11.7125 2.295 11.285 1.755 10.745C1.215 10.205 0.7875 9.57 0.4725 8.84C0.1575 8.11 0 7.33 0 6.5C0 5.67 0.1575 4.89 0.4725 4.16C0.7875 3.43 1.215 2.795 1.755 2.255C2.295 1.715 2.93 1.2875 3.66 0.9725C4.39 0.6575 5.17 0.5 6 0.5C6.83 0.5 7.61 0.6575 8.34 0.9725C9.07 1.2875 9.705 1.715 10.245 2.255C10.785 2.795 11.2125 3.43 11.5275 4.16C11.8425 4.89 12 5.67 12 6.5C12 7.33 11.8425 8.11 11.5275 8.84C11.2125 9.57 10.785 10.205 10.245 10.745C9.705 11.285 9.07 11.7125 8.34 12.0275C7.61 12.3425 6.83 12.5 6 12.5Z"
fill="currentColor" />
</symbol>
<symbol id="docs" viewBox="0 0 10 13">
<path
d="M1.25 12.5C0.90625 12.5 0.611979 12.3825 0.367188 12.1475C0.122396 11.9125 0 11.63 0 11.3V1.7C0 1.37 0.122396 1.0875 0.367188 0.8525C0.611979 0.6175 0.90625 0.5 1.25 0.5H8.75C9.09375 0.5 9.38802 0.6175 9.63281 0.8525C9.8776 1.0875 10 1.37 10 1.7V11.3C10 11.63 9.8776 11.9125 9.63281 12.1475C9.38802 12.3825 9.09375 12.5 8.75 12.5H1.25ZM1.25 11.3H8.75V1.7H7.5V5.9L5.9375 5L4.375 5.9V1.7H1.25V11.3Z"
fill="currentColor" />
</symbol>
<symbol id="download" viewBox="0 0 12 13">
<path
d="M6 9.5L2.25 5.75L3.3 4.6625L5.25 6.6125V0.5H6.75V6.6125L8.7 4.6625L9.75 5.75L6 9.5ZM1.5 12.5C1.0875 12.5 0.734375 12.3531 0.440625 12.0594C0.146875 11.7656 0 11.4125 0 11V8.75H1.5V11H10.5V8.75H12V11C12 11.4125 11.8531 11.7656 11.5594 12.0594C11.2656 12.3531 10.9125 12.5 10.5 12.5H1.5Z"
fill="currentColor" />
</symbol>
<symbol id="forum" viewBox="0 0 13 13">
<path
d="M3.9 7.8H9.1V7.4425C9.1 6.96583 8.86167 6.58125 8.385 6.28875C7.90833 5.99625 7.28 5.85 6.5 5.85C5.72 5.85 5.09167 5.99625 4.615 6.28875C4.13833 6.58125 3.9 6.96583 3.9 7.4425V7.8ZM6.5 5.2C6.8575 5.2 7.16354 5.07271 7.41813 4.81812C7.67271 4.56354 7.8 4.2575 7.8 3.9C7.8 3.5425 7.67271 3.23646 7.41813 2.98187C7.16354 2.72729 6.8575 2.6 6.5 2.6C6.1425 2.6 5.83646 2.72729 5.58188 2.98187C5.32729 3.23646 5.2 3.5425 5.2 3.9C5.2 4.2575 5.32729 4.56354 5.58188 4.81812C5.83646 5.07271 6.1425 5.2 6.5 5.2ZM0 13V1.3C0 0.9425 0.127292 0.636458 0.381875 0.381875C0.636458 0.127292 0.9425 0 1.3 0H11.7C12.0575 0 12.3635 0.127292 12.6181 0.381875C12.8727 0.636458 13 0.9425 13 1.3V9.1C13 9.4575 12.8727 9.76354 12.6181 10.0181C12.3635 10.2727 12.0575 10.4 11.7 10.4H2.6L0 13ZM2.0475 9.1H11.7V1.3H1.3V9.83125L2.0475 9.1Z"
fill="currentColor" />
</symbol>
<symbol id="youtube" viewBox="0 0 13 11">
<path
d="M12.7282 2.37091C12.5784 1.81123 12.1385 1.3714 11.5788 1.22158C10.5655 0.949768 6.49998 0.949768 6.49998 0.949768C6.49998 0.949768 2.43455 0.949768 1.42114 1.22158C0.86146 1.3714 0.421633 1.81123 0.271814 2.37091C8.13641e-08 3.38432 0 5.49998 0 5.49998C0 5.49998 8.13641e-08 7.61565 0.271814 8.62907C0.421633 9.18875 0.86146 9.62857 1.42114 9.77836C2.43455 10.0502 6.49998 10.0502 6.49998 10.0502C6.49998 10.0502 10.5655 10.0502 11.5788 9.77836C12.1385 9.62857 12.5784 9.18875 12.7282 8.62907C13 7.61565 13 5.49998 13 5.49998C13 5.49998 12.9989 3.38432 12.7282 2.37091Z"
fill="currentColor" />
<path d="M5.19873 7.44973L8.57608 5.49997L5.19873 3.55017V7.44973Z" fill="white" />
</symbol>
<symbol id="reddit" viewBox="0 0 14 13">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M9.0825 8.39774C8.55925 8.39774 8.11956 7.96523 8.11956 7.43193C8.11956 6.89864 8.55925 6.45184 9.0825 6.45184C9.60575 6.45184 10.0301 6.89864 10.0301 7.43193C10.0301 7.96523 9.60575 8.39774 9.0825 8.39774ZM9.30474 10.2723C8.81737 10.7686 8.06575 11.0098 7.007 11.0098C7.00481 11.0098 7.00218 11.0094 6.99955 11.0094C6.99737 11.0094 6.99476 11.0098 6.99213 11.0098C5.93338 11.0098 5.18219 10.7686 4.69526 10.2723C4.54563 10.1198 4.54563 9.87322 4.69526 9.72117C4.84444 9.56912 5.08638 9.56912 5.23601 9.72117C5.57201 10.0636 6.14644 10.2304 6.99213 10.2304C6.99476 10.2304 6.99737 10.2308 6.99955 10.2308C7.00218 10.2308 7.00481 10.2304 7.007 10.2304C7.85268 10.2304 8.42755 10.0636 8.76399 9.72117C8.91362 9.56868 9.15556 9.56912 9.30474 9.72117C9.45393 9.87367 9.45393 10.1203 9.30474 10.2723ZM3.96988 7.43193C3.96988 6.89909 4.40869 6.45184 4.93151 6.45184C5.45476 6.45184 5.87912 6.89909 5.87912 7.43193C5.87912 7.96523 5.45476 8.39774 4.93151 8.39774C4.40869 8.39774 3.96988 7.96523 3.96988 7.43193ZM11.6655 1.27943C12.0199 1.27943 12.3082 1.57328 12.3082 1.93401C12.3082 2.29519 12.0199 2.58903 11.6655 2.58903C11.3111 2.58903 11.0228 2.29519 11.0228 1.93401C11.0228 1.57328 11.3111 1.27943 11.6655 1.27943ZM14 6.37113C14 5.42538 13.2453 4.65622 12.3174 4.65622C11.9158 4.65622 11.5469 4.80068 11.2573 5.04102C10.2314 4.38376 8.92938 3.98781 7.53375 3.90399L8.26175 1.55811L10.2624 2.03834C10.3149 2.78076 10.9239 3.36846 11.6655 3.36846C12.4412 3.36846 13.0725 2.72503 13.0725 1.93401C13.0725 1.14343 12.4412 0.5 11.6655 0.5C11.123 0.5 10.6514 0.814797 10.4164 1.27452L8.09156 0.716705C7.89687 0.669886 7.7 0.784043 7.63962 0.978455L6.73575 3.89016C5.23206 3.92762 3.81851 4.32491 2.71732 5.02051C2.43163 4.79265 2.07243 4.65622 1.68262 4.65622C0.754682 4.65622 0 5.42538 0 6.37113C0 6.9557 0.288749 7.47251 0.728437 7.78196C0.710062 7.91796 0.700434 8.05485 0.700434 8.19352C0.700434 9.3756 1.37462 10.4752 2.59874 11.2894C3.77212 12.0701 5.32526 12.5 6.97157 12.5C8.61788 12.5 10.171 12.0701 11.3444 11.2894C12.5685 10.4752 13.2427 9.3756 13.2427 8.19352C13.2427 8.06734 13.2344 7.94203 13.2191 7.81763C13.6881 7.51308 14 6.97844 14 6.37113Z"
fill="currentColor" />
</symbol>
<symbol id="facebook" viewBox="0 0 13 13">
<path
d="M13 6.49999C13 2.91015 10.0898 0 6.5 0C2.91015 0 0 2.91015 0 6.49999C0 9.54835 2.09859 12.1061 4.92976 12.8086V8.48628H3.5894V6.49999H4.92976V5.64409C4.92976 3.43171 5.93096 2.40627 8.103 2.40627C8.51479 2.40627 9.22535 2.487 9.51603 2.56775V4.36836C9.3626 4.35221 9.09615 4.34412 8.76509 4.34412C7.69928 4.34412 7.28746 4.74785 7.28746 5.79752V6.49999H9.4106L9.04587 8.48628H7.28746V12.9524C10.5059 12.5636 13 9.82325 13 6.49999Z"
fill="white" />
<path
d="M9.04587 8.48628L9.4106 6.49999H7.28746V5.79752C7.28746 4.74785 7.69928 4.34412 8.76509 4.34412C9.09615 4.34412 9.3626 4.35221 9.51603 4.36836V2.56775C9.22535 2.487 8.51479 2.40627 8.103 2.40627C5.93096 2.40627 4.92976 3.43171 4.92976 5.64409V6.49999H3.5894V8.48628H4.92976V12.8086C5.43267 12.9333 5.95851 13 6.49999 13C6.76659 13 7.02928 12.9835 7.28746 12.9524V8.48628H9.04587Z"
fill="currentColor" />
</symbol>
<symbol id="discord" viewBox="0 0 13 11" fill="none">
<path
d="M11.0122 1.3375C10.1707 0.94625 9.27094 0.661907 8.33024 0.5C8.21471 0.707559 8.07973 0.986731 7.98668 1.20881C6.98669 1.05937 5.99589 1.05937 5.01429 1.20881C4.92125 0.986731 4.78322 0.707559 4.66665 0.5C3.72494 0.661907 2.82412 0.947295 1.9826 1.33957C0.285265 3.88835 -0.174856 6.37382 0.0552048 8.82399C1.18097 9.6594 2.27197 10.1669 3.34456 10.499C3.60939 10.1368 3.84558 9.75177 4.04905 9.346C3.66153 9.19968 3.29037 9.01911 2.93966 8.80947C3.03271 8.74098 3.12371 8.66937 3.21164 8.59568C5.35069 9.58988 7.67482 9.58988 9.78831 8.59568C9.87727 8.66937 9.96827 8.74098 10.0603 8.80947C9.70855 9.02013 9.33637 9.2007 8.94885 9.34705C9.15232 9.75177 9.3875 10.1378 9.65334 10.5C10.727 10.1679 11.819 9.66045 12.9447 8.82399C13.2147 5.98361 12.4836 3.52097 11.0122 1.3375ZM4.34047 7.31716C3.69835 7.31716 3.17176 6.72147 3.17176 5.99606C3.17176 5.27066 3.6871 4.67394 4.34047 4.67394C4.99385 4.67394 5.52043 5.26961 5.50918 5.99606C5.5102 6.72147 4.99385 7.31716 4.34047 7.31716ZM8.65948 7.31716C8.01736 7.31716 7.49077 6.72147 7.49077 5.99606C7.49077 5.27066 8.0061 4.67394 8.65948 4.67394C9.31285 4.67394 9.83944 5.26961 9.8282 5.99606C9.8282 6.72147 9.31285 7.31716 8.65948 7.31716Z"
fill="currentColor" />
</symbol>
<symbol id="community" viewBox="0 0 80 80" fill="none">
<path d="M39.9998 50.9266C46.0344 50.9266 50.9264 46.0346 50.9264 40C50.9264 33.9654 46.0344 29.0734 39.9998 29.0734C33.9652 29.0734 29.0732 33.9654 29.0732 40C29.0732 46.0346 33.9652 50.9266 39.9998 50.9266Z" fill="#002332"/>
<path d="M61.8691 79.2138C49.8034 79.2138 40.016 69.4264 40.016 57.3606C52.0817 57.3606 61.8691 67.148 61.8691 79.2138Z" fill="#002332"/>
<path d="M40.0002 57.3445C40.0002 69.4103 30.2128 79.1977 18.147 79.1977C18.147 67.1319 27.9344 57.3445 40.0002 57.3445Z" fill="#002332"/>
<path d="M0.802246 61.8532C0.802246 49.7874 10.5896 40 22.6554 40C22.6554 52.0658 12.868 61.8532 0.802246 61.8532Z" stroke="#16F3BE" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M22.6553 40C10.5895 40 0.802085 30.2126 0.802085 18.1468C12.8679 18.1468 22.6553 27.9342 22.6553 40Z" stroke="#16F3BE" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M57.3447 40.016C69.4105 40.016 79.1979 49.8034 79.1979 61.8692C67.1321 61.8692 57.3447 52.0818 57.3447 40.016Z" stroke="#16F3BE" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M79.2139 18.1468C79.2139 30.2126 69.4265 40 57.3607 40C57.3607 27.9342 67.1481 18.1468 79.2139 18.1468Z" stroke="#16F3BE" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M40.016 22.6555C40.016 10.5897 49.8034 0.802268 61.8691 0.802268C61.8691 12.8681 52.0657 22.6555 40.016 22.6555Z" stroke="#16F3BE" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18.147 0.802246C30.2128 0.802246 40.0002 10.5897 40.0002 22.6554C27.9344 22.6554 18.147 12.868 18.147 0.802246Z" stroke="#16F3BE" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</symbol>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,35 @@
<section id="faq">
<div class="container">
<h2>Got some questions?</h2>
<div class="accordion">
<div class="accordion-items">
{% for item in site.data["community-faq"].items %}
<div class="accordion-item">
<input type="checkbox" class="accordion-item-checkbox" id="{{ item.question | slugify }}" />
<div class="accordion-item-heading">
<label for="{{ item.question | slugify }}" class="accordion-item-heading-label">
<div class="accordion-item-heading-title">
{{ item.question }}
</div>
<div class="accordion-item-heading-icon">
<div class="button-more">
<div class="plus"></div>
</div>
</div>
</label>
</div>
<div class="accordion-item-content-animation-wrapper">
<div class="accordion-item-content-animation">
<div class="accordion-item-content-transform-wrapper">
<div class="accordion-item-content">
{{ item.answer }}
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</section>

View File

@ -0,0 +1,79 @@
<section id="global">
<div class="container">
<div class="content">
<div class="content-inner">
<h2>A Global Community, Growing Every Day</h2>
<p>Wherever you are in the world, the community will be ready to share knowledge and ideas.</p>
</div>
<div class="stats" data-dsap>
<div class="stat">
<div class="stat-value">
+<span data-value="90"></span>
</div>
<div class="stat-label">
Events & Meetups Worldwide
</div>
</div>
<div class="stat">
<div class="stat-value">
+<span data-value="200"></span>
</div>
<div class="stat-label">
Contributors Every Month
</div>
</div>
<div class="stat">
<div class="stat-value">
+<span data-value="430000"></span>
</div>
<div class="stat-label">
Active Community Members
</div>
</div>
</div>
</div>
<div class="photos-wrapper">
<div class="photos" data-dsap>
<figure class="photo large">
<img src="/images/community/utrecht.webp"
alt="A crowd of people gathering in a bar - Utrecht, Netherlands" />
<figcaption>Community Day 2025 - Utrecht</figcaption>
</figure>
<figure class="photo medium">
<img src="/images/community/berlin.webp"
alt="A group of 6 people standing in front of a bar - Berlin, Germany" />
<figcaption>Community Meetup - IFA Berlin 2025</figcaption>
</figure>
<figure class="photo small">
<img src="/images/community/columbus.webp"
alt="A few people gathering around a table demonstrating ESP32 hardware - Columbus, Ohio" />
<figcaption>Community Day 2025 - Columbus</figcaption>
</figure>
</div>
</div>
</div>
</section>
<script>
document.addEventListener("DOMContentLoaded", function () {
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
const stats = document.querySelectorAll("#global .stat-value span[data-value]");
stats.forEach((stat) => {
let demo = new countUp.CountUp(stat, stat.getAttribute("data-value"));
if (!demo.error) {
demo.start();
} else {
console.error(demo.error);
}
});
observer.unobserve(entry.target);
}
});
}, { threshold: 0.1 });
const statsElement = document.querySelector("#global .stats");
if (statsElement) {
observer.observe(statsElement);
}
});
</script>

View File

@ -0,0 +1,23 @@
<section id="hero">
<div class="container" id="community">
<div class="content">
<h1>The Home Assistant Community</h1>
<p>Connect with makers, tinkerers, and smart home enthusiasts. Share ideas, ask questions, and discover ways
to
make your home smarter, more private, and truly yours.</p>
<div class="event-card">
<div class="event-title">No upcoming events</div>
<div class="event-meta">Time to take matters into your own hands, and create your own meetup.</div>
<a href="https://luma.com/homeassistant" class="button secondary" target="_blank" rel="noopener">
<div class="icon">
<svg>
<use href="#luma" />
</svg>
</div>
Create your own event
</a>
</div>
</div>
</div>
</section>

View File

@ -0,0 +1,106 @@
<section id="join">
<div class="container">
<h2>
<span class="h1">Join the</span>
<span class="big">Community</span>
</h2>
<p>
Our vibrant community is very active and super friendly.
We love to talk and share our passion for home
automation.
</p>
<div class="buttons">
<a href="https://creators.home-assistant.io/" class="button" target="_blank" rel="noreferrer">
<div class="icon">
<svg>
<use href="#creator" />
</svg>
</div>
Creator Network
</a>
<a href="https://community.home-assistant.io/" class="button" target="_blank" rel="noreferrer">
<div class="icon">
<svg>
<use href="#forum" />
</svg>
</div>
Forum
</a>
<a href="https://www.home-assistant.io/join-chat" class="button" target="_blank" rel="noreferrer">
<div class="icon">
<svg>
<use href="#discord" />
</svg>
</div>
Discord
</a>
<a href="https://www.reddit.com/r/homeassistant/" class="button">
<div class="icon">
<svg>
<use href="#reddit" />
</svg>
</div>
Reddit
</a>
<a href="https://www.facebook.com/homeassistantio" class="button">
<div class="icon">
<svg>
<use href="#facebook" />
</svg>
</div>
Facebook
</a>
</div>
<div class="avatars" data-dsap data-dsap-scroll>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
<div class="avatar"></div>
</div>
</div>
</section>
<script>
let owners = {{ site.data.codeowners | jsonify }};
owners = owners.sort(() => Math.random() - 0.5);
let lastIndex = -1;
let avatarDivs = document.querySelectorAll('#join .avatars .avatar');
avatarDivs.forEach((div, index) => {
let img = document.createElement('img');
div.appendChild(img);
if (index < owners.length) {
let owner = owners[index];
div.querySelector('img').src = `https://github.com/${owner}.png`;
div.title = owner;
}
});
setInterval(() => {
let index = Math.floor(Math.random() * avatarDivs.length);
if (index === lastIndex) {
index = (index + 1) % avatarDivs.length;
}
lastIndex = index;
let ownerIndex = Math.floor(Math.random() * owners.length);
let owner = owners[ownerIndex];
avatarDivs[index].classList.add('hide');
setTimeout(() => {
avatarDivs[index].querySelector('img').src = `https://github.com/${owner}.png`;
avatarDivs[index].title = owner;
}, 500);
setTimeout(() => {
avatarDivs[index].classList.remove('hide');
}, 1000);
}, 2000);
</script>

View File

@ -0,0 +1,56 @@
<section id="meetups">
<div class="container">
<div class="content">
<svg>
<use href="#community" />
</svg>
<h2 class="h1">Community Meetups</h2>
<p>The community will be leading meetups across the globe, so find your nearest event and register now!
Theyre all free and will be full of smart people with smart homes.</p>
<div class="event-card">
<div class="event-title">No upcoming events</div>
<div class="event-meta">Time to take matters into your own hands, and create your own meetup.</div>
<a href="https://luma.com/homeassistant" class="button secondary" target="_blank" rel="noopener">
<div class="icon">
<svg>
<use href="#luma" />
</svg>
</div>
Create your own event
</a>
</div>
</div>
<div class="guide">
<h3>Is your city not included in the list?</h3>
<p>Time to take matters into your own hands, and create your own meetup.</p>
<div class="steps">
<div class="step">Using Luma, create an account, and navigate to our Home Assistant Community Day event
page, select Submit Event > Create New Event (the button is above the calendar on the right). </div>
<div class="step">Set the invite graphic we created as the event image. When creating your own event,
make sure you add the event name, time zone, date, time, event location, capacity and hosts.</div>
<div class="step">Click Create Event once youve followed the checklist, then come let everyone know in
the Home Assistant Community Day meetup thread on Discord or the Social section of the Community
forum!</div>
</div>
<div class="buttons">
<a href="https://docs.google.com/document/d/1kcziY3ZJfut2mPez7zY6xcjv8VKcynFxvKYI51NJ8-Y" class="button" target="_blank" rel="noopener">
<div class="icon">
<svg>
<use href="#docs" />
</svg>
</div>
Expense Guidelines for Hosts
</a>
<a href="https://drive.google.com/drive/folders/1cQCV4vcfKx0FCNwzNqd3F2lE1xR5W5co" class="button" target="_blank" rel="noopener">
<div class="icon">
<svg>
<use href="#download" />
</svg>
</div>
Graphic Assets
</a>
</div>
</div>
</div>
</section>

View File

@ -0,0 +1,9 @@
<section id="nav">
<div class="nav-pills">
<a href="#community" class="nav-pill">Home Assistant Community</a>
<a href="#join" class="nav-pill">Join</a>
<a href="#newsletter" class="nav-pill">Newsletter</a>
<a href="#meetups" class="nav-pill">Meetups</a>
<a href="#faq" class="nav-pill">FAQ</a>
</div>
</section>

View File

@ -0,0 +1,27 @@
<section id="newsletter">
<div class="container">
<div class="editions" data-dsap>
<div class="edition">
<img src="https://newsletter.openhomefoundation.org/content/images/size/w960/2025/06/1200X630.jpg" />
</div>
<div class="edition">
<img src="https://newsletter.openhomefoundation.org/content/images/size/w960/2025/07/OHF_Newsletter2507_1200X630.png" />
</div>
<div class="edition">
<img src="https://newsletter.openhomefoundation.org/content/images/size/w960/2025/08/OHF_Newsletter2508_1200x630.png" />
</div>
</div>
<div class="content">
<h2>Subscribe to the newsletter</h2>
<p class="small">Open Home is our vision for smart homes that offer privacy, choice and sustainability. The Open Home Foundation newsletter is the latest from the projects making this a reality, including Home Assistant and ESPHome.</p>
<div class="buttons">
<a href="https://newsletter.openhomefoundation.org/#/portal/signup" class="button secondary" target="_blank" rel="noopener">
Subscribe Now
</a>
<a href="https://newsletter.openhomefoundation.org/" class="button hollow-dark">
Read Our Latest Posts
</a>
</div>
</div>
</div>
</section>

View File

@ -0,0 +1,27 @@
---
layout: landingpage
title: "Home Assistant Community"
description: "Connect and share ideas with makers, tinkerers, and smart home enthusiasts."
og_image: /images/community/og.jpeg
frontpage: false
---
<script src="https://cdn.jsdelivr.net/gh/inorganik/countUp.js@2.9.0/dist/countUp.umd.js" type="module"></script>
<link rel="stylesheet" href="/stylesheets/homeassistant/pages/community/index.css" />
<script type="module">
import {DSAP} from "/javascripts/dsap.es.js";
window.dsap = new DSAP();
</script>
<main id="page-community">
<div class="container-full">
{% include_relative assets/_icons.html %}
{% include_relative components/_nav.html %}
{% include_relative components/_hero.html %}
{% include_relative components/_global.html %}
{% include_relative components/_join.html %}
{% include_relative components/_newsletter.html %}
{% include_relative components/_meetups.html %}
{% include_relative components/_faq.html %}
</div>
</main>

View File

@ -775,6 +775,7 @@ Widget that displays the a trend of the history for a numeric [sensor](/integrat
```yaml
features:
- type: "trend-graph"
hours_to_show: 24
```
{% configuration features %}
@ -782,6 +783,11 @@ type:
required: true
description: "`trend-graph`"
type: string
hours_to_show:
required: false
description: Hours to show in graph. Minimum is 1 hour. Big values can result in delayed rendering, especially if the selected entities have a lot of state changes.
type: integer
default: 24
{% endconfiguration %}
## Update actions

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Some files were not shown because too many files have changed in this diff Show More