diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index e2c578b6db8..820d6727a5a 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -10,7 +10,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v4.2.2
- name: Setting up Node.js
- uses: actions/setup-node@v4.1.0
+ uses: actions/setup-node@v4.2.0
with:
node-version: 20
cache: "npm"
@@ -27,7 +27,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v4.2.2
- name: Setting up Node.js
- uses: actions/setup-node@v4.1.0
+ uses: actions/setup-node@v4.2.0
with:
node-version: 20
cache: "npm"
diff --git a/Gemfile b/Gemfile
index 6ae166847d3..b9051922b8b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -4,14 +4,14 @@ ruby '> 2.5.0'
group :development do
gem 'rake', '13.2.1'
- gem 'jekyll', '4.3.4'
+ gem 'jekyll', '4.4.0'
gem 'compass', '1.0.3'
gem 'sass-globbing', '1.1.5'
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.83.4'
- gem 'rubocop', '1.70.0'
+ gem 'rubocop', '1.71.0'
gem 'ruby-lsp', '0.23.6'
gem 'rackup', '2.2.1'
end
diff --git a/Gemfile.lock b/Gemfile.lock
index e91cfe3a242..d5cd03beae6 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -22,6 +22,7 @@ GEM
compass-import-once (1.0.5)
sass (>= 3.2, < 3.5)
concurrent-ruby (1.3.5)
+ csv (3.3.2)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
@@ -38,17 +39,20 @@ GEM
http_parser.rb (0.8.0)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
- jekyll (4.3.4)
+ jekyll (4.4.0)
addressable (~> 2.4)
+ base64 (~> 0.2)
colorator (~> 1.0)
+ csv (~> 3.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (>= 2.0, < 4.0)
jekyll-watch (~> 2.0)
+ json (~> 2.6)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
- mercenary (>= 0.3.6, < 0.5)
+ mercenary (~> 0.3, >= 0.3.6)
pathutil (~> 0.9)
rouge (>= 3.0, < 5.0)
safe_yaml (~> 1.0)
@@ -71,7 +75,7 @@ GEM
rexml (>= 3.3.9)
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
- language_server-protocol (3.17.0.3)
+ language_server-protocol (3.17.0.4)
liquid (4.0.4)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
@@ -114,7 +118,7 @@ GEM
regexp_parser (2.10.0)
rexml (3.4.0)
rouge (4.5.1)
- rubocop (1.70.0)
+ rubocop (1.71.0)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
@@ -124,7 +128,7 @@ GEM
rubocop-ast (>= 1.36.2, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
- rubocop-ast (1.37.0)
+ rubocop-ast (1.38.0)
parser (>= 3.3.1.0)
ruby-lsp (0.23.6)
language_server-protocol (~> 3.17.0)
@@ -152,7 +156,7 @@ GEM
rack-protection (= 4.1.1)
rack-session (>= 2.0.0, < 3)
tilt (~> 2.0)
- sorbet-runtime (0.5.11766)
+ sorbet-runtime (0.5.11784)
stringex (2.8.6)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@@ -170,7 +174,7 @@ PLATFORMS
DEPENDENCIES
compass (= 1.0.3)
- jekyll (= 4.3.4)
+ jekyll (= 4.4.0)
jekyll-commonmark (= 1.4.0)
jekyll-paginate (= 1.1.0)
jekyll-sitemap (= 1.4.0)
@@ -178,7 +182,7 @@ DEPENDENCIES
nokogiri (= 1.18.2)
rackup (= 2.2.1)
rake (= 13.2.1)
- rubocop (= 1.70.0)
+ rubocop (= 1.71.0)
ruby-lsp (= 0.23.6)
sass-embedded (= 1.83.4)
sass-globbing (= 1.1.5)
diff --git a/_config.yml b/_config.yml
index 67286e6c667..440c5d549db 100644
--- a/_config.yml
+++ b/_config.yml
@@ -108,8 +108,8 @@ social:
# Home Assistant release details
current_major_version: 2025
current_minor_version: 1
-current_patch_version: 3
-date_released: 2025-01-20
+current_patch_version: 4
+date_released: 2025-01-24
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.
diff --git a/package-lock.json b/package-lock.json
index 7e0edf98522..7072f0fb0d0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,15 +10,15 @@
"devDependencies": {
"remark-cli": "^12.0.1",
"remark-frontmatter": "^5.0.0",
- "remark-lint": "^10.0.0",
- "remark-lint-fenced-code-flag": "^4.0.0",
- "remark-lint-heading-increment": "^4.0.0",
- "remark-lint-heading-style": "^4.0.0",
- "remark-lint-no-shell-dollars": "^4.0.0",
- "remark-lint-ordered-list-marker-style": "^4.0.0",
- "remark-lint-ordered-list-marker-value": "^4.0.0",
+ "remark-lint": "^10.0.1",
+ "remark-lint-fenced-code-flag": "^4.1.1",
+ "remark-lint-heading-increment": "^4.0.1",
+ "remark-lint-heading-style": "^4.0.1",
+ "remark-lint-no-shell-dollars": "^4.0.1",
+ "remark-lint-ordered-list-marker-style": "^4.0.1",
+ "remark-lint-ordered-list-marker-value": "^4.0.1",
"remark-lint-prohibited-strings": "^4.0.0",
- "remark-lint-unordered-list-marker-style": "^4.0.0",
+ "remark-lint-unordered-list-marker-style": "^4.0.1",
"remark-stringify": "^11.0.0",
"textlint": "^14.4.2",
"textlint-filter-rule-comments": "^1.2.2",
@@ -4286,10 +4286,11 @@
}
},
"node_modules/remark-lint": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-10.0.0.tgz",
- "integrity": "sha512-E8yHHDOJ8b+qI0G49BRu24pe8t0fNNBWv8ENQJpCGNrVeTeyBIGEbaUe1yuF7OG8faA6PVpcN/pqWjzW9fcBWQ==",
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-10.0.1.tgz",
+ "integrity": "sha512-1+PYGFziOg4pH7DDf1uMd4AR3YuO2EMnds/SdIWMPGT7CAfDRSnAmpxPsJD0Ds3IKpn97h3d5KPGf1WFOg6hXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"remark-message-control": "^8.0.0",
@@ -4301,10 +4302,11 @@
}
},
"node_modules/remark-lint-fenced-code-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.0.0.tgz",
- "integrity": "sha512-Zs0wJd4nRvBo/9NWQVfWg5Ykapbo0Zzw/SyZc3f0h73S1gTZZcfeU+bA5oDivlBdcUgLBsyHRE0QaoaVvN3/Wg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.1.1.tgz",
+ "integrity": "sha512-hKPqowc79jrJL47AfnqDThvE8Q249nHCleR5nxuf9ybriMqcAHYxragKzU5c4W1fNy20bTfFdZz/iAAQAk9kwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-phrasing": "^4.0.0",
@@ -4425,10 +4427,11 @@
}
},
"node_modules/remark-lint-heading-increment": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-4.0.0.tgz",
- "integrity": "sha512-TARnsjXWzY/yLwxh/y4+KnDSXO3Koue8Crp55T8G9pjj3vw+XgTAG35zSpIIY9HmGiQ2a3R0SOj2pAxATpnckg==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-4.0.1.tgz",
+ "integrity": "sha512-uat7RTQn0hGlMv62p7yjLlg3tO3RljFbH6C+0M+5BNEF+s3NrA8jJgqW0UwLLNdCd3EABCKaWloHumT57ND7PQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
@@ -4549,10 +4552,11 @@
}
},
"node_modules/remark-lint-heading-style": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-4.0.0.tgz",
- "integrity": "sha512-dQ6Jul5K0+aNUvrq4W7H0+osSoC9hsmwHZqBFq000+eMP/hWJqI8tuudw1rap8HHYuOsKLRbB5q+Fr7G+3Vw+Q==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-4.0.1.tgz",
+ "integrity": "sha512-+rUpJ/N2CGC5xPgZ18XgsCsUBtadgEhdTi0BJPrsFmHPzL22BUHajeg9im8Y7zphUcbi1qFiKuxZd2nzDgZSXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-heading-style": "^3.0.0",
@@ -4674,10 +4678,11 @@
}
},
"node_modules/remark-lint-no-shell-dollars": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-4.0.0.tgz",
- "integrity": "sha512-ye2h8FzjsgqqQV0HHN2g9N4FqI3eD9Gpgu7tU5ADIJyQ3mUJdwBoFn7IlGnpmumR1fb/l6u/AhRavIZxXYqG+Q==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-4.0.1.tgz",
+ "integrity": "sha512-UPE1DNCIkLtnS3YFD065Gkq5lQqfndBDpX8Ct/Zjn7M0/hzCyf9B6tpwCU0I20m9jzhS/CSY6mxYnAiEg+KkFA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"collapse-white-space": "^2.0.0",
@@ -4797,10 +4802,11 @@
}
},
"node_modules/remark-lint-ordered-list-marker-style": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.0.tgz",
- "integrity": "sha512-xZ7Xppy5fzACH4b9h1b4lTzVtNY2AlUkNTfl1Oe6cIKN8tk3juFxN0wL2RpktPtSZ7iRIabzFmg6l8WPhlASJA==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.1.tgz",
+ "integrity": "sha512-vZTAbstcBPbGwJacwldGzdGmKwy5/4r29SZ9nQkME4alEl5B1ReSBlYa8t7QnTSW7+tqvA9Sg71RPadgAKWa4w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-phrasing": "^4.0.0",
@@ -4830,72 +4836,6 @@
"integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==",
"dev": true
},
- "node_modules/remark-lint-ordered-list-marker-style/node_modules/mdast-util-phrasing": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
- "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
- "dev": true,
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-lint-ordered-list-marker-style/node_modules/micromark-util-character": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
- "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/remark-lint-ordered-list-marker-style/node_modules/micromark-util-symbol": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
- "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/remark-lint-ordered-list-marker-style/node_modules/micromark-util-types": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
- "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
"node_modules/remark-lint-ordered-list-marker-style/node_modules/unified": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
@@ -4988,10 +4928,11 @@
}
},
"node_modules/remark-lint-ordered-list-marker-value": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.0.tgz",
- "integrity": "sha512-7UjNU2Nv9LGEONTU9GPmTVoNoGKD5aL1X2xHzMbSJiTc50bfcazYqZawO+qj1pQ04WPhto1qHnl0HRB5wwSVwA==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.1.tgz",
+ "integrity": "sha512-HQb1MrArvApREC1/I6bkiFlZVDjngsuII29n8E8StnAaHOMN3hVYy6wJ9Uk+O3+X9O8v7fDsZPqFUHSfJhERXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
@@ -5174,10 +5115,11 @@
}
},
"node_modules/remark-lint-unordered-list-marker-style": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-4.0.0.tgz",
- "integrity": "sha512-XlP4Wr4KJNovyWVv0H5axfUlF23iE9Kt2SxaVq4+ieum5YcMmKE6KsL+aqt3kiJb60SH1u6a0bxKFvdM/9riOA==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-4.0.1.tgz",
+ "integrity": "sha512-HMrVQC0Qbr8ktSy+1lJGRGU10qecL3T14L6s/THEQXR5Tk0wcsLLG0auNvB4r2+H+ClhVO/Vnm1TEosh1OCsfw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-phrasing": "^4.0.0",
diff --git a/package.json b/package.json
index a887d804b3b..bfdc9878acc 100644
--- a/package.json
+++ b/package.json
@@ -5,15 +5,15 @@
"devDependencies": {
"remark-cli": "^12.0.1",
"remark-frontmatter": "^5.0.0",
- "remark-lint": "^10.0.0",
- "remark-lint-fenced-code-flag": "^4.0.0",
- "remark-lint-heading-increment": "^4.0.0",
- "remark-lint-heading-style": "^4.0.0",
- "remark-lint-no-shell-dollars": "^4.0.0",
- "remark-lint-ordered-list-marker-style": "^4.0.0",
- "remark-lint-ordered-list-marker-value": "^4.0.0",
+ "remark-lint": "^10.0.1",
+ "remark-lint-fenced-code-flag": "^4.1.1",
+ "remark-lint-heading-increment": "^4.0.1",
+ "remark-lint-heading-style": "^4.0.1",
+ "remark-lint-no-shell-dollars": "^4.0.1",
+ "remark-lint-ordered-list-marker-style": "^4.0.1",
+ "remark-lint-ordered-list-marker-value": "^4.0.1",
"remark-lint-prohibited-strings": "^4.0.0",
- "remark-lint-unordered-list-marker-style": "^4.0.0",
+ "remark-lint-unordered-list-marker-style": "^4.0.1",
"remark-stringify": "^11.0.0",
"textlint": "^14.4.2",
"textlint-filter-rule-comments": "^1.2.2",
diff --git a/source/_dashboards/sections.markdown b/source/_dashboards/sections.markdown
index 7ef99bfe1b6..9e8b8c621f9 100644
--- a/source/_dashboards/sections.markdown
+++ b/source/_dashboards/sections.markdown
@@ -35,6 +35,7 @@ You can group cards without using horizontal or vertical stack cards.
3. Under **Max number of sections wide**, select the maximum number of columns you want to see in the new sections view.
4. Under **Dense section placement**, select if you want to allow the cards to be arranged automatically in order to fill gaps between cards.
- This will remove some gaps, but it also means you have less control over the order of the cards.
+ - Note that this only applies to horizontal gaps if you used sections more than one column wide.
5. When you are done, select **Save**.
- You are now presented with a new, empty view.
- If you chose a background image, the page is filled with that image.
diff --git a/source/_includes/common-tasks/network_storage.md b/source/_includes/common-tasks/network_storage.md
index 45e49c6df28..b8cb9a77ddb 100644
--- a/source/_includes/common-tasks/network_storage.md
+++ b/source/_includes/common-tasks/network_storage.md
@@ -56,7 +56,7 @@ Server:
"[NFS]1 Remote share path":
description: The path used to connect to the remote storage server.
"[CIFS]2 Username":
- description: The username to use when connecting to the storage server.
+ description: "The username to use when connecting to the storage server. Use User Principal Name for domain accounts. For example: `user@domain.com`."
"[CIFS]2 Password":
description: The password to use when connecting to the storage server.
"[CIFS]2 Share":
diff --git a/source/_integrations/acaia.markdown b/source/_integrations/acaia.markdown
index 1ea74fc2461..7a5506d6e64 100644
--- a/source/_integrations/acaia.markdown
+++ b/source/_integrations/acaia.markdown
@@ -34,19 +34,19 @@ Device:
description: "The Bluetooth device that is your scale."
{% endconfiguration_basic %}
-# Available platforms & entities
+## Available platforms & entities
-## Binary sensors
+### Binary sensors
- **Timer running**: Whether the timer is currently running on the scale
-## Buttons
+### Buttons
- **Tare**: Tares the scale.
- **Reset timer**: Resets the timer. If the timer is running, it will continue to run.
- **Start/stop timer**: Starts or stops the timer, depending on whether the timer is currently running. Does not reset, but continue the timer.
-## Sensors
+### Sensors
- **Battery**: Current battery level of the scale.
- **Volume flow rate**: Calculates the current flow rate (in mL/s) while brewing.
diff --git a/source/_integrations/aquacell.markdown b/source/_integrations/aquacell.markdown
index f51bde2caf1..938c97f376a 100644
--- a/source/_integrations/aquacell.markdown
+++ b/source/_integrations/aquacell.markdown
@@ -14,17 +14,19 @@ ha_platforms:
ha_integration_type: device
---
-AquaCell is a water-softening device. The [AquaCell](https://www.aquacell-waterontharder.nl/) {% term integration %} allows you to monitor your AquaCell device in Home Assistant.
+AquaCell is a water-softening device made by [Culligan](https://culliganinternational.com). The [AquaCell](https://www.aquacell-waterontharder.nl/) {% term integration %} allows you to monitor your AquaCell device in Home Assistant.
You will need your Aquacell account information as used in the **AquaCell** app.
-This integration also supports [Harvey](https://www.harveywatersofteners.co.uk/) softeners.
+This integration also supports other [Culligan brands](https://culliganinternational.com/brands) of water softener, such as [Harvey](https://www.harveywatersofteners.co.uk/) and [TwinTec](https://www.twintec.com/) (made by Harvey) softeners.
## Supported devices
-This integration only works for softener models which have an **i-Lid** and are configured through the 'Mijn AquaCell' or 'My Harvey' mobile app.
+This integration only works for softener models which have an **i-Lid** and are configured through the 'Mijn AquaCell' or 'myHarvey' mobile app.
These models are also recognizable by the required curved salt blocks.
+
- [AquaCell](https://www.aquacell-waterontharder.nl/aquacell)
- [HarveyArc Water Softener](https://www.harveywatersofteners.co.uk/products/water-softeners/harveyarc-water-softener)
+- [TwinTec Cobalt](https://www.twintec.com/our-products/tt-cobalt/)
## Prerequisites
diff --git a/source/_integrations/camera.markdown b/source/_integrations/camera.markdown
index 85caa1c4dc2..90d3ef5626c 100644
--- a/source/_integrations/camera.markdown
+++ b/source/_integrations/camera.markdown
@@ -104,12 +104,12 @@ For example, the following action in an automation would take a recording from "
```yaml
actions:
- variables:
- entity_id: camera.yourcamera # Store the camera entity_id in a variable for reuse
+ my_camera_id: camera.yourcamera # Store the camera entity_id in a variable for reuse
- action: camera.record
target:
- entity_id: '{{ entity_id }}'
+ entity_id: '{{ my_camera_id }}'
data:
- filename: '/tmp/{{ entity_id }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.mp4'
+ filename: '/tmp/{{ my_camera_id }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.mp4'
```
{% endraw %}
@@ -132,12 +132,12 @@ For example, the following action in an automation would take a snapshot from "y
```yaml
actions:
- variables:
- entity_id: camera.yourcamera # Store the camera entity_id in a variable for reuse
+ my_camera_id: camera.yourcamera # Store the camera entity_id in a variable for reuse
- action: camera.snapshot
target:
- entity_id: '{{ entity_id }}'
+ entity_id: '{{ my_camera_id }}'
data:
- filename: '/tmp/{{ entity_id }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg'
+ filename: '/tmp/{{ my_camera_id }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg'
```
{% endraw %}
diff --git a/source/_integrations/dsmr.markdown b/source/_integrations/dsmr.markdown
index 50009f3d4ec..e051b1a1066 100644
--- a/source/_integrations/dsmr.markdown
+++ b/source/_integrations/dsmr.markdown
@@ -54,7 +54,8 @@ This integration is known to work for:
- Iskra ME382 / MT382 (DSMR 2.2)
- ISKRA AM550 (DSMR 5.0)
-- Landis+Gyr E350 (DMSR 4)
+- Landis+Gyr E350 (DSMR 4)
+- Landis+Gyr E360 (DSMR 5)*
- Landis+Gyr ZCF110 / ZM F110 (DSMR 4.2)
- Kaifa E0026
- Kaifa MA304C (DSMR 4.2)
@@ -64,6 +65,8 @@ This integration is known to work for:
- Ziv E0058 ESMR5
- EasyMeter Q3D
+Remarks:
+\* The E360 requires a special P1 cable, various webstores sell these specific to the E360.
### M-Bus support
A smart meter can have multiple subdevices, also known as [M-Bus](https://m-bus.com/) devices.
diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown
index 18b4597e37e..87b6e96e88b 100644
--- a/source/_integrations/google_assistant.markdown
+++ b/source/_integrations/google_assistant.markdown
@@ -29,65 +29,62 @@ For Home Assistant Cloud users, documentation can be found [here](https://www.na
The Google Assistant integration (without Home Assistant Cloud) requires a bit more setup than most due to the way Google requires Assistant Apps to be set up.
-{% important %}
-To use Google Assistant, your Home Assistant configuration has to be [externally accessible with a hostname and SSL certificate](/docs/configuration/remote/). If you haven't already configured that, you should do so before continuing. If you make DNS changes to accomplish this, please ensure you have allowed up to the full 48 hours for DNS changes to propagate, otherwise, Google may not be able to reach your server. Once you have confirmed you can reach your Home Assistant from outside your home network, you can set up the Google integration:
-{% endimportant %}
+### Prerequisites
+
+To use Google Assistant, your Home Assistant configuration has to be [externally accessible with a hostname and SSL certificate](/docs/configuration/remote/).
+
+- If you haven't already configured that, you should do so before continuing.
+- If you make DNS changes to accomplish this, ensure you have allowed up to the full 48 hours for DNS changes to propagate, otherwise, Google may not be able to reach your server.
+- Once you have confirmed you can reach your Home Assistant from outside your home network, you can set up the Google integration:
### Google Cloud Platform configuration
-1. Create a new project in the [Actions on Google console](https://console.actions.google.com/).
- 1. Select **New Project** and give your project a name.
- 2. Select the **Smart Home** card, then select the **Start Building** button.
- 3. Under **Quick Setup**, select **Name your Smart Home action**. Give your Action a name - Home Assistant will appear in the Google Home app as `[test] `
- 4. Select the **Overview** tab at the top of the page to go back.
- 5. Select **Build your Action**, then select **Add Action(s)**.
- 6. Add your Home Assistant URL: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant` in the **Fulfillment URL** textbox, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / IP address and the port under which your Home Assistant is reachable.
- 7. Select **Save**.
- 8. Select the three little dots (more) icon in the upper right corner, select **Project settings**.
- 9. Make note of the **Project ID** that are listed on the **General** tab of the **Settings** page.
-2. **Account linking** is required for your app to interact with Home Assistant.
- 1. Start by going back to the **Overview** tab.
- 2. Select on **Setup account linking** under the **Quick Setup** section of the **Overview** page.
- 3. If asked, leave options as they default **No, I only want to allow account creation on my website** and select **Next**.
- 4. Then if asked, for the **Linking type** select **OAuth** and **Authorization Code**. Select **Next**.
- 5. Enter the following:
- 1. Client ID: `https://oauth-redirect.googleusercontent.com/r/[YOUR_PROJECT_ID]`. (Replace `[YOUR_PROJECT_ID]` with your project ID from above)
- 2. Client Secret: Anything you like, Home Assistant doesn't need this field.
- 3. Authorization URL: `https://[YOUR HOME ASSISTANT URL:PORT]/auth/authorize`. (Replace `[YOUR HOME ASSISTANT URL:PORT]` with your values.)
- 4. Token URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL:PORT]/auth/token`. (Replace `[YOUR HOME ASSISTANT URL:PORT]` with your values.)
- Select **Next**, then **Next** again.
- 6. In the **Configure your client** **Scopes** textbox, type `email` and select **Add scope**, then type `name` and select **Add scope** again.
- 7. Do **NOT** check **Google to transmit clientID and secret via HTTP basic auth header**.
- 8. Select **Next**, then select **Save**.
+1. Create a new project in the [Google Developer Console](https://console.home.google.com/projects).
+ 1. Select **Create a Project**
+ 2. On the **Get started** page, select **Create project**.
+ - Give your project a name and select **Create project**.
+ 3. Save your Project ID (it's under the main project name) for use below.
+ 4. Select **Add a Cloud-to-Cloud integration**.
+ 5. In the bottom right corner, select **Next: Develop**, then select **Next: Setup**.
+ 6. Select all applicable device types (you can select them all).
+ 7. Create an app icon 144 x 144 pixels and upload it.
+ 8. Under **Account Linking**, in the **OAuth Client ID** field, enter `https://oauth-redirect.googleusercontent.com/r/[YOUR_PROJECT_ID]`.
+ 9. Replace `[YOUR_PROJECT_ID]` with your project ID from above.
+ 10. Fill in the details:
+ - In the **Client Secret** field, add any string (without special characters).Home Assistant doesn't need this field.
+ - In the **Authorization URL** field, enter `https://[yourdomain:port]/auth/authorize`.
+ - In the **Token URL** field, enter `https://[yourdomain:port]/auth/token`.
+ - In the **Cloud fulfillment URL** field, enter `https://[yourdomain:port]/api/google_assistant`.
+ - For now, skip **Local fulfillment** and **App Flip**.
+ - Under **Scope(s)**, enter `email`. Select **Add scope** and enter `name`.
+ - Leave the checkbox **Have Google transmit Client ID and secret via HTTP basic auth header** unchecked/cleared.
+ - Select **Save**.
+ - **Result**: You will see your project saved with the status **Draft**.
+ - You do not need to test.
-
-
-3. Select the **Develop** tab at the top of the page, then, in the upper right hand corner, select the **Test** button to generate the draft version Test App. If you don't see this option, go to the **Test** tab instead, select the **Settings** button in the top right below the header, and ensure **On device testing** is enabled (if it isn't, enable it).
-
-4. Enable device sync ([see below for more information](#enable-device-sync)).
- 1. Go to [Google Cloud Platform](https://console.cloud.google.com/).
- 2. Go to **Select a project**.
- 3. In the window that popped up, select your newly created project from step 1.
- 4. Go to the menu and select **APIs and Services** and next **Credentials**.
- 5. In the **Credentials** view, select **Create credentials** and next **Service account**.
+2. In the left hand menu of your project, select the **Analytics** link.
+ - Select the hamburger {% icon "mdi:hamburger-menu" %} menu and select **APIs and Services**.
+3. Enable device sync ([see below for more information](#enable-device-sync)).
+ 1. In the left hand menu, select **Credentials**.
+ 2. In the **Credentials** view, select **Create credentials** and next **Service account**.
1. **Service account name**: Give your account a self-selected name.
2. Select **Create and Continue**.
3. Under **Select a role**, select **Service Accounts** > **Service Account Token Creator**.
4. Select **Continue** and then **Done**.
- 6. Under **Service Accounts**, there should now be an account called [name from 5.1]@[projectname].iam.gserviceaccount.com.
- 7. Select the pencil button of that service account.
- 8. Go to **Keys** and **Add key**.
- 9. Create a private key in JSON format.
- 10. This will start a download of a JSON file.
+ 3. Under **Service Accounts**, there should now be an account called [name from 3.2.1]@[projectname].iam.gserviceaccount.com.
+ 4. Select the pencil button of that service account.
+ 5. Go to **Keys** and **Add key**.
+ 6. Create a private key in JSON format.
+ 7. This will start a download of a JSON file.
1. Rename the file to `SERVICE_ACCOUNT.JSON`.
- 2. Add this file to your config-folder. This will be the same folder as your{% term "`configuration.yaml`" %}.
- 11. Go back to [Google Cloud Platform](https://console.cloud.google.com/) and select **Close**.
- 12. Then select **Save**.
- 13. Go to the **Search products and resources** and search for **Homegraph API** and select it.
- 14. Enable the HomeGraph API.
+ 2. In Home Assistant, add this file to your config-folder. This will be the same folder as your {% term "`configuration.yaml`" %}.
+ 8. Go back to [Google Cloud Platform](https://console.cloud.google.com/) and select **Close**.
+ 9. Then select **Save**.
+ 10. Go to the **Search products and resources** and search for **Homegraph API** and select it.
+ 11. Enable the HomeGraph API.
-5. Add the `google_assistant` integration configuration to your{% term "`configuration.yaml`" %} file and restart Home Assistant following the [configuration guide](#yaml-configuration) below.
-6. Add services in the Google Home App (note that app versions may be slightly different).
+4. Add the `google_assistant` integration configuration to your {% term "`configuration.yaml`" %} file and restart Home Assistant following the [configuration guide](#yaml-configuration) below.
+5. Add services in the Google Home App (note that app versions may be slightly different).
1. Open the Google Home app.
2. Select the `+` button on the top left corner, select **Set up device**. In the **Set up a device** screen, select **Works with Google**. You should have `[test] ` listed under **Add new**. Selecting that should lead you to a browser to login your Home Assistant instance, then redirect back to a screen where you can set rooms and nicknames for your devices if you wish.
diff --git a/source/_integrations/incomfort.markdown b/source/_integrations/incomfort.markdown
index 0e665caa305..10c0573eaed 100644
--- a/source/_integrations/incomfort.markdown
+++ b/source/_integrations/incomfort.markdown
@@ -21,8 +21,10 @@ ha_config_flow: true
ha_dhcp: true
---
-The `incomfort` {% term integration %} links Home Assistant with your Intergas Lan2RF gateway, including the boiler and any room thermostats attached to it.
-The integration uses the [incomfort](https://pypi.org/project/incomfort-client/) client library.
+This integration links Home Assistant with your Intergas Lan2RF gateway, including the boiler and any room thermostats attached to it.
+The integration uses the [incomfort-client](https://pypi.org/project/incomfort-client/) library.
+
+### Supported devices
The Intergas Lan2RF Gateway connects thermostats based on the OpenTherm standard. An example of such a thermostat is the [Comfort Touch Thermostat](https://www.intergas-verwarming.nl/en/consumer/products/comfort-touch-thermostat/). The thermostats and LAN2RF gateway are often sold as a set. The gateway is suitable for use with Intergas Kombi Kompakt HRE and HReco appliances from year of manufacture 2014. If the Comfort Touch thermostat is used together with the gateway, then this will work in combination with Intergas Kombi Kompakt HRE, HReco, or Xtreme devices from year of manufacture 2017.
@@ -38,7 +40,22 @@ Any room thermostats (there can be 0, 1 or 2) are represented as **Climate** dev
{% include integrations/config_flow.md %}
-The hub does not have to be in the same network as Home Assistant, but the hub must be reachable via port 80/HTTP.
+{% configuration_basic %}
+host:
+ description: "Hostname or IP-address of the Intergas InComfort Lan2RF Gateway."
+ required: true
+ type: string
+username:
+ description: "The username to log into the gateway. This is `admin` in most cases."
+ required: false
+ type: string
+password:
+ description: "The password to log into the gateway, is printed at the bottom of the Lan2RF Gateway or is `intergas` for some older devices."
+ required: false
+ type: string
+{% endconfiguration_basic %}
+
+The hub does not have to be in the same network as HA, but must be reachable via port 80/HTTP.
The above configuration can also be adjusted later via
{% my integrations title="**Settings** > **Devices & services**" %},
@@ -66,9 +83,13 @@ Note that **all** sensors are disabled by default.
- Boiler Hot water tap: Indicates if the hot water tap is running.
- Boiler Pump: Indicate the pump is running for cental heating.
+## Troubleshooting
+
+In case setting up an older gateway type fails, then try to leave `username` and `password` fields empty.
+
## Data updates
-The `incomfort` {% term integration %} will fetch state data from the gateway every 30 seconds. When the target temperature on the thermostat is changed, it might take some time for the set point to be updated on the Home Assistant climate {% term entity %}.
+The Intergas Lan2RF Gateway will fetch state data from the gateway every 30 seconds. When the target temperature on the thermostat is changed, it might take some time for the set point to be updated on the Home Assistant climate {% term entity %}.
## Remove integration
diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown
index 03efb8837de..b13b8c5fe83 100644
--- a/source/_integrations/knx.markdown
+++ b/source/_integrations/knx.markdown
@@ -598,7 +598,11 @@ respond_to_read:
The KNX binary sensor platform allows you to monitor [KNX](https://www.knx.org/) binary sensors.
-Binary sensors are read-only. To write to the KNX bus configure an exposure [KNX Integration Expose](/integrations/knx/#exposing-entity-states-entity-attributes-or-time-to-knx-bus).
+{% note %}
+
+Binary sensors are read-only entities. To write to the KNX bus, configure a [KNX Switch entity](#switch) or use the [`knx.send` action](#send).
+
+{% endnote %}
```yaml
knx:
@@ -1831,7 +1835,11 @@ entity_category:
The KNX sensor platform allows you to monitor [KNX](https://www.knx.org/) sensors.
-Sensors are read-only. To write to the KNX bus configure a [Number](#number), an exposure [KNX Integration Expose](/integrations/knx/#exposing-entity-states-entity-attributes-or-time-to-knx-bus) or use the `knx.send` action.
+{% note %}
+
+Sensors are read-only entities. To write to the KNX bus, configure a [KNX Number entity](#number) or use the [`knx.send` action](#send).
+
+{% endnote %}
```yaml
# Example configuration.yaml entry
diff --git a/source/_integrations/litterrobot.markdown b/source/_integrations/litterrobot.markdown
index 6f8ce27c3ae..31a5f276fac 100644
--- a/source/_integrations/litterrobot.markdown
+++ b/source/_integrations/litterrobot.markdown
@@ -30,7 +30,9 @@ ha_integration_type: hub
The Litter-Robot integration allows you to control and monitor your Wi-Fi-enabled, automatic, self-cleaning litter box and pet feeders.
-You will need a Litter-Robot account as well as a Wi-Fi-enabled Litter-Robot or Feeder-Robot unit that has already been associated with your account.
+## Prerequisites
+
+Before using this integration, you’ll need a Whisker account and a Wi-Fi-enabled Litter-Robot or Feeder-Robot linked to it. You can do this via the Whisker app.
{% include integrations/config_flow.md %}
@@ -93,3 +95,9 @@ data:
start_time: "22:30:00"
```
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown
index 43938fcad71..02dbd94583f 100644
--- a/source/_integrations/nest.markdown
+++ b/source/_integrations/nest.markdown
@@ -625,3 +625,9 @@ logger:
```
- *Not receiving camera motion and person events*: assuming the integration is correctly configured (for example, the oauth and SDM API are set up correctly, you can see camera streams, and permissions are correctly set in [Partner Connections Manager](https://nestservices.google.com/partnerconnections)): If you are then still not seeing events, it's possible you need to adjust the Google Home App settings. Refer to the [Google Home App Notification Settings](#google-home-app-notification-settings) for details.
+
+- **Configuration error: Failed to create subscriber `subscription/name` was not found** - By default, Google pub/sub subscriptions will be deleted after 31 days of inactivity ([reference](https://cloud.google.com/knowledge/kb/pub-sub-subscriptions-disappeared-without-any-deletion-logs-000004170)). If this happens, then the integration will fail, and you will see the preceding log line in your Home Assistant logs. If that is the case, then:
+
+ 1. Go to the [Device Access Console](https://console.nest.google.com/device-access/project-list) and re-enable the Pub/Sub Topic.
+ 2. The Nest integration may need to be recreated to pick up the new Pub/Sub topic.
+ 3. (Optional) To prevent future expirations, go to your [Google Cloud Console Pub/Sub subscription page](https://console.cloud.google.com/cloudpubsub/subscription/list) and edit the Pub/Sub subscription created by Nest to not expire by default.
diff --git a/source/_integrations/onkyo.markdown b/source/_integrations/onkyo.markdown
index 1c7109f7226..034d8cf0cf5 100644
--- a/source/_integrations/onkyo.markdown
+++ b/source/_integrations/onkyo.markdown
@@ -102,3 +102,9 @@ script:
## Supported devices
Network receivers from Onkyo and Integra are supported starting with models from the year 2011. Pioneer network receivers are supported starting with models from 2016.
+
+## Removing the integration
+
+This integration follows standard integration removal. No extra steps are required.
+
+{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/p1_monitor.markdown b/source/_integrations/p1_monitor.markdown
index 4d97db613b5..3d85e0b4762 100644
--- a/source/_integrations/p1_monitor.markdown
+++ b/source/_integrations/p1_monitor.markdown
@@ -19,6 +19,10 @@ The **P1 Monitor** {% term integration %} allows you to gather data from your [P
P1 Monitor is a piece of software that can be installed on a Raspberry Pi or other Linux-based system. It reads the data from your smart meter via the serial port (P1), such as your energy consumption, but also that of gas or a water meter.
+{% note %}
+If you’re not using **P1 Monitor** software, you’re likely looking for the [DSMR Smart Meter](/integrations/dsmr/) integration, which connects directly to DSMR-compatible smart meters.
+{% endnote %}
+
{% include integrations/config_flow.md %}
{% configuration_basic %}
diff --git a/source/_integrations/plugwise.markdown b/source/_integrations/plugwise.markdown
index 1dbc71b3f0c..67bcd9ff75d 100644
--- a/source/_integrations/plugwise.markdown
+++ b/source/_integrations/plugwise.markdown
@@ -168,154 +168,148 @@ This integration follows standard integration removal. No extra steps are requir
This will also remove all connected Adam devices (such as Anna, Tom or Lisa) or connected Adam/Stretch plugs.
-### Actions
+## Actions
-#### Update Smile data
+### Climate control actions
-Forced update of data from your Smile can be triggered by calling the generic `homeassistant.update_entity` action with your Smile entity as the target.
+For information on how to use the available actions, please refer to the [climate](/integrations/climate#climate-control-actions) integration.
+
+Available actions to all climate gateways: `climate.set_temperature`, `climate.set_hvac_mode`, and `climate.set_preset_mode`.
+
+Additional actions available for Adam: `climate.turn_on`, `climate.turn_off`, and `climate.toggle`.
+
+{% note %}
+The additional actions will change Adam's **regulation mode** (the HVAC system mode) to either on or off, affecting the operation of **all** connected thermostats. Turning on activates the previously selected heating or cooling mode.
+{% endnote %}
+
+### Schedule select action
+
+Available action: `select.select_option`
+
+{% tip %}
+The available schedules depend on the [schedules](#schedule-management) you have configured.
+{% endtip %}
+
+### HVAC modes
+
+The following HVAC modes are available:
+
+- `auto`: Active schedule – The thermostat changes presets/setpoints according to the schedule.
+- `cool or heat`: No active schedule – The system is manually set to cooling or heating mode, activating based on room temperature relative to the thermostat setpoint.
+
+For Adam:
+
+- `off`: Regulation is set to off – The HVAC system does not heat or cool, but the domestic hot water heating function (if available) remains active.
+
+If you have an Anna with Elga:
+
+- `heat_cool`: No active schedule – The system is in automatic cooling or heating mode, using the active preset or manually set temperature to control the HVAC system.
+
+{% note %}
+The last schedule that was active is determined the same way long-tapping the top of an Anna works.
+{% endnote %}
+
+## Gateway Modes
+
+The Adam Gateway supports multiple operational modes that provide flexibility in managing your heating and cooling systems, allowing you to tailor your system's behavior to your needs.
+
+- Normal Mode
+ - **Description**: This is the default operational mode, operating based on the active schedules and presets configured. Ideal for day-to-day operations, ensuring optimal comfort and energy efficiency.
+ - **Remarks**: Smart thermostats and zone controls continue their self-regulating behavior, including pre-heating or cooling based on their forecasted requirements.
+- Pause Mode
+ - **Description**: Pause mode temporarily halts the heating or cooling operations, disabling all schedules and temperature control.
+ - **Remarks**: Useful for scenarios where no climate control is needed, such as extended periods when doors or windows are open for ventilation or maintenance work is ongoing. The system remains idle until switched back to Normal mode or another operational state.
+- Vacation Mode
+ - **Description**: Vacation mode optimizes the system for prolonged absence, reducing energy consumption while maintaining basic functionality. Heating or cooling is set to a minimal level to prevent freezing (in winter) or excessive heat (in summer).
+ - **Remarks**: Ideal for extended trips or holidays when the house will be unoccupied. Active schedules are overridden until the mode is switched back to Normal.
+
+{% tip %}
+For best results, ensure your schedules and presets are appropriately configured for Normal mode and align Vacation mode settings with your energy-saving goals.
+{% endtip %}
+
+## Examples
+
+### Energy-Based Automations
+
+A great example of automating charging your car from the energy data the P1 provides can be found in the [Energy Management System for Car Charging](https://community.home-assistant.io/t/energy-management-system-for-car-charging-surplus-trip-calendar/744069) blueprint.
+
+### Climate-Based Automations
+
+When using smart zone controls or thermostats, relying heavily on additional automations may interfere with their ability to accurately predict warm-up or cool-down times. Instead, leverage their preset modes to optimize energy efficiency and reduce environmental impact, as well as your energy bills. Below are some examples to help you get started.
+
+For advanced customization and full manual control, consider using a blueprint like [Advanced Heating Control](https://community.home-assistant.io/t/advanced-heating-control/469873/1). If you choose this route, we recommend disabling your Plugwise schedules to ensure the blueprint takes full control.
+
+#### Presence-based preset mode
+
+The example automation below adjusts the active preset to 'away' when no one is home, reducing unnecessary heating or cooling. For instance, if you unexpectedly head to the office on a work-from-home day, the system will conserve energy. The active schedule will later override the 'away' mode, or you can create a complementary automation to activate another preset when someone returns home.
```yaml
-# Example script change the temperature
-script:
- force_adam_update:
- sequence:
- - action: homeassistant.update_entity
- target:
- entity_id: climate.living_room
+automation:
+ alias: "Set climate to away when nobody is home"
+ triggers:
+ # When either occupant leaves for more than 15 minutes
+ - trigger: state
+ entity_id:
+ - person.mom
+ - person.dad
+ to: not_home
+ for:
+ minutes: 15
+ conditions:
+ # If Anna is using the normal "home" preset
+ - condition: state
+ entity_id: climate.anna
+ attribute: preset_mode
+ state: home
+ # And nobody is home
+ - condition: state
+ entity_id: person.mom
+ entity_id: person.dad
+ state: not_home
+ actions:
+ # Change Anna to Away
+ - action: climate.set_preset_mode
+ data:
+ preset_mode: away
+ target:
+ entity_id: climate.anna
```
-#### Reboot the Plugwise gateway
+#### Calendar-based Vacation Mode
-action: `button.press`
+The example automations below will change the gateway mode of your Adam to Vacation mode (and back) assuming you have a [calendar](/integrations/calendar) integration with a specific calendar set up for events when nobody is at home.
```yaml
-# Example script change the thermostat schedule
-script:
- reboot_gateway:
- sequence:
- - action: button.press
- target:
- entity_id: button.adam_reboot
+automation:
+ - triggers:
+ - trigger: calendar
+ event: start
+ # Calendar when your home is vacant
+ entity_id: calendar.vacancy
+ actions:
+ # Change Adam operational mode
+ - action: select.select_option
+ data:
+ option: "vacation"
+ target:
+ entity_id: select.adam_gateway_mode
+ - triggers:
+ - trigger: calendar
+ event: end
+ # Calendar when your home is vacant
+ entity_id: calendar.vacancy
+ # Offset by some time to allow to pre-condition
+ offset: -04:00:00
+ actions:
+ # Change Adam operational mode
+ - action: select.select_option
+ data:
+ option: "full"
+ target:
+ entity_id: select.adam_gateway_mode
```
-#### Set HVAC mode
-
-action: `climate.set_hvac_mode`
-
-Available options include `off` (Adam only) `auto`, `cool`, `heat`, and `heat_cool` (Anna with Elga only).
-
-The meaning of `off` is that the Adam regulation is set to off. This means that the connected HVAC-system does not heat or cool, only the domestic hot water heating function, when available, is active.
-
-The meaning of `cool` or `heat` is that there is no schedule active. For example, if the system is manually set to cooling- or heating-mode, the system will be active if the room temperature is above/below the thermostat setpoint.
-
-The meaning of `heat/cool` is that there is no schedule active. For example, if the system is in automatic cooling- or heating-mode, the active preset or manually set temperature is used to control the HVAC system.
-
-The meaning of `auto` is that a schedule is active and the thermostat will change presets/setpoints accordingly.
-
-The last schedule that was active is determined the same way long-tapping the top of Anna works.
-
-Example:
-
-```yaml
-# Example script climate.set_hvac_mode to auto = schedule active
-script:
- lisa_reactivate_last_schedule:
- sequence:
- - action: climate.set_hvac_mode
- target:
- entity_id: climate.living_room
- data:
- hvac_mode: auto
-```
-
-#### Turn on / turn off
-
-action: `climate.turn_off`, `climate.turn_on` (Adam only)
-
-These actions will switch the Adam regulation mode (= HVAC system mode) to off or on, affecting the operation of all connected thermostats.
-`climate.turn_on` will activate the previously selected heating or cooling mode.
-
-Example:
-
-```yaml
-# Example script climate.turn_off
-script:
- turn_heating_on:
- sequence:
- - action: climate.turn_off
- target:
- entity_id: climate.bios
-```
-
-#### Change climate schedule
-
-action: `select.select_option`
-
-```yaml
-# Example script change the thermostat schedule
-script:
- lisa_change_schedule:
- sequence:
- - action: select.select_option
- target:
- entity_id: select.bios_thermostat_schedule
- data:
- option: "Regulier"
-```
-
-#### Change boiler setpoint
-
-action: `number.set_value`
-
-```yaml
-# Example script change the boiler setpoint
-script:
- change_max_boiler_tempeture_setpoint:
- sequence:
- - action: number.set_value
- target:
- entity_id: number.opentherm_max_boiler_temperature_setpoint
- data:
- value: 60
-```
-
-#### Set temperature
-
-action: `climate.set_temperature`
-
-Example:
-
-```yaml
-# Example script change the temperature
-script:
- anna_set_predefined_temperature:
- sequence:
- - action: climate.set_temperature
- target:
- entity_id: climate.anna
- data:
- temperature: 19.5
-```
-
-#### Set preset mode
-
-action: `climate.set_preset_mode`
-
-Available options include: `home`, `vacation` (Anna only), `no_frost`, `asleep` & `away`.
-
-Example:
-
-```yaml
-# Example script changing the active (or currently set by schedule) preset
-script:
- anna_activate_preset_asleep:
- sequence:
- - action: climate.set_preset_mode
- data:
- preset_mode: asleep
-```
-
-## Supported devices
+### Supported devices
### Adam
diff --git a/source/_integrations/roomba.markdown b/source/_integrations/roomba.markdown
index d56981f0dcb..444b20d1cb3 100644
--- a/source/_integrations/roomba.markdown
+++ b/source/_integrations/roomba.markdown
@@ -5,7 +5,6 @@ ha_category:
- Vacuum
ha_iot_class: Local Push
ha_release: 0.51
-ha_conflig_flow: true
ha_codeowners:
- '@pschmitt'
- '@cyr-ius'
diff --git a/source/_integrations/seventeentrack.markdown b/source/_integrations/seventeentrack.markdown
index c171cd45bb4..975156772ec 100644
--- a/source/_integrations/seventeentrack.markdown
+++ b/source/_integrations/seventeentrack.markdown
@@ -62,7 +62,7 @@ type: markdown
title: Packages in transit
content: >
{% for package in
- states.sensor['seventeentrack_in_transit'].attributes.packages %}
+ states.sensor['17track_in_transit'].attributes.packages %}
>- **{{ package.friendly_name }} ({{ package.tracking_number }}):** {{
package.info_text }}
diff --git a/source/_integrations/solarlog.markdown b/source/_integrations/solarlog.markdown
index 4d8ba4bea89..2557b1a6e9e 100644
--- a/source/_integrations/solarlog.markdown
+++ b/source/_integrations/solarlog.markdown
@@ -22,7 +22,7 @@ The **Solarlog** {% term integration %} uses the open JSON interface on [Solar-L
## Supported devices
-The integration should work with all Solar-Log devices.
+The integration should work with all Solar-Log devices with [firmware 3.x](#known-limitations).
## Prerequisites
@@ -142,3 +142,4 @@ The integration provides no additional actions.
## Known limitations
The integration only provides the (limited) data exposed by means of the JSON interface. This also entails that the values for the self-consumption are rounded to full kWh.
+Firmware versions below 3.x are not supported, as they do not expose the JSON interface. Please contact the Solar-Log support if you need assistance with updating the firmware of your Solar-Log device.
diff --git a/source/_integrations/squeezebox.markdown b/source/_integrations/squeezebox.markdown
index d9cc0b10305..7be7a9d6ed8 100644
--- a/source/_integrations/squeezebox.markdown
+++ b/source/_integrations/squeezebox.markdown
@@ -21,7 +21,7 @@ ha_integration_type: integration
The Squeezebox integration allows you to control music players from the [Lyrion Music Server](https://lyrion.org/) (LMS) ecosystem. Lyrion Music Server was formerly known as [Logitech Media Server](https://en.wikipedia.org/wiki/Squeezebox_%28network_music_player%29).
-This integration provides both media players connected to the server and supporting binary sensors for the server status.
+This integration connects to an existing LMS server and provides both media players and sensors for monitoring server status.
The Squeezebox music player ecosystem, which can be controlled through this integration, includes hardware audio players from Logitech, including [Squeezebox 3rd Generation, Squeezebox Boom, Squeezebox Receiver, Transporter, Squeezebox2, Squeezebox and SLIMP3](https://lms-community.github.io/players-and-controllers/hardware-comparison/), and many software emulators like [Squeezelite, SqueezeSlave, SoftSqueeze and SqueezePlay](https://sourceforge.net/projects/lmsclients/files/).
diff --git a/source/_integrations/tesla_fleet.markdown b/source/_integrations/tesla_fleet.markdown
index ac4d28e4a7c..1abc5e41243 100644
--- a/source/_integrations/tesla_fleet.markdown
+++ b/source/_integrations/tesla_fleet.markdown
@@ -217,7 +217,7 @@ These are the entities available in the Tesla Fleet integration. Not all entitie
| Binary sensor | Trip charging | No |
| Binary sensor | User present | Yes |
| Button | Flash lights | Yes |
-| Button | Homelink | Yes |
+| Button | HomeLink | Yes |
| Button | Honk horn | Yes |
| Button | Keyless driving | Yes |
| Button | Play fart | Yes |
diff --git a/source/_integrations/teslemetry.markdown b/source/_integrations/teslemetry.markdown
index 646c8513aca..bbda148ac5c 100644
--- a/source/_integrations/teslemetry.markdown
+++ b/source/_integrations/teslemetry.markdown
@@ -107,7 +107,7 @@ These are the entities available in the Teslemetry integration. Not all entities
|Binary sensor|User present|Yes|
|Binary sensor|Wiper heat|No|
|Button|Flash lights|Yes|
-|Button|Homelink|Yes|
+|Button|HomeLink|Yes|
|Button|Honk horn|Yes|
|Button|Keyless driving|Yes|
|Button|Play fart|Yes|
diff --git a/source/_integrations/tessie.markdown b/source/_integrations/tessie.markdown
index 2400b087c46..8b758a2c4e3 100644
--- a/source/_integrations/tessie.markdown
+++ b/source/_integrations/tessie.markdown
@@ -91,7 +91,7 @@ The integration will create binary sensor entities for a variety of metrics rela
The integration will create button entities to control various aspects of the vehicle:
- Flash lights
-- Homelink
+- HomeLink
- Honk horn
- Keyless driving
- Play fart
diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown
index 3ed3952766c..462af877d90 100644
--- a/source/_integrations/tplink.markdown
+++ b/source/_integrations/tplink.markdown
@@ -199,10 +199,24 @@ If required, you can manually trigger an update via **Developer tools** > **Acti
### Device connections
- Take note of the known limitation for subnets above.
-- Try switching the device off for 5 seconds before switching back on again.
+- Ensure that your username is your TP-Link cloud username, which is your *case-sensitive* email address.
+- Ensure you have enabled **Tapo Lab** > **Third-Party Compatibility** in the Tapo app. You may need to factory reset and re-add to the Tapo app after this step.
+- Disable or remove any custom integrations that interact with TPLink devices supported by this integration.
+- Ensure stable network connectivity between Home Assistant and the device.
+- Check the [reported connection solutions](#reported-connection-solutions) section below.
- Check the [supported device list](#supported-devices) to see if the device is tested to work with the integration.
- Try running the [kasa tool](https://github.com/python-kasa/python-kasa) to connect to the device. An easy way to do this is to [install uv](https://docs.astral.sh/uv/getting-started/installation/) and run `uvx --from python-kasa kasa --username --password `
-- Raise a support issue
+- Raise a support issue. See the [section below](#raising-support-issues) for guidelines.
+
+#### Reported connection solutions
+
+These are some of the solutions that Home Assistant users have reported as solving their device connection issues:
+
+- Make the first letter of your TP-Link cloud username email upper-case. This could be because it was automatically capitalized when first entered into the Tapo app.
+- Remove the device from the Tapo app and re-add by searching for the correct model (i.e. do not use auto-discovery)
+- Log out of the Tapo and Kasa apps, factory reset the device, log back in to the Tapo app, then re-add the device to the Tapo app.
+- Specifically for cameras, disable and re-enable the **Settings** > **Advanced Settings** > **Camera account** options in the Tapo app.
+- Specifically for cameras, reset the **Settings** > **Advanced Settings** > **Camera account** credentials in the Tapo app.
### Unavailable entities
@@ -217,6 +231,32 @@ Currently, Tapo devices and newer Kasa devices do not report total consumption,
This entity has been removed from the integration due to stability issues, calling the TPLink cloud API to check for updates. It will be replaced in a future release with a new Update entity, but if you have an Unavailable entity ID starting with `binary_sensor.` and ending with `update`, you can safely delete it.
+### Raising support issues
+
+For the maintainers of the TP-Link integration to be able to properly assist with a support issue, please follow these guidelines:
+
+- Raise an issue with [Home Assistant Core](https://github.com/home-assistant/core/issues).
+- Fill in as many of the fields in the issue template as you can.
+- If applicable, list all steps taken from the [Troubleshooting device connections](#device-connections) section above.
+- Upload [debug logs](#enable-debug-logging) that run from Home Assistant first starting up, until the error is encountered.
+
+### Enable debug logging
+
+To capture debug logs from Home Assistant first starting up, update [`configuration.yaml`](https://www.home-assistant.io/docs/configuration/) to look like this:
+
+```yaml
+logger:
+ default: warning # This will already be present. Add the lines below.
+ logs:
+ homeassistant.components.tplink: debug
+ kasa: debug
+```
+
+Then restart Home Assistant, trigger the error, and download the logs from **Settings** > **System** > **Logs** > **Download logs**
+
+{% note %}
+Remember to disable debug logging after troubleshooting to prevent excessive log growth and performance impact.
+{% endnote %}
## Examples
diff --git a/source/_integrations/weather.markdown b/source/_integrations/weather.markdown
index e04d50e2075..b42df01bff5 100644
--- a/source/_integrations/weather.markdown
+++ b/source/_integrations/weather.markdown
@@ -33,7 +33,7 @@ The `weather` {% term entity %} can provide the conditions listed below as its s
- **Cloudy**: There are many clouds in the sky. `cloudy`.
- **Fog**: There is a thick mist or fog reducing visibility. `fog`.
- **Hail**: Hailstones are falling. `hail`.
-- **Lightning**: Lightning/thunderstorms are occurring. `lighting`.
+- **Lightning**: Lightning/thunderstorms are occurring. `lightning`.
- **Lightning, rainy**: Lightning/thunderstorm is occurring along with rain. `lightning-rainy`.
- **Partly cloudy**: The sky is partially covered with clouds. `partlycloudy`.
- **Pouring**: It is raining heavily. `pouring`.
diff --git a/source/_integrations/webostv.markdown b/source/_integrations/webostv.markdown
index cbf4c35e436..ef9c2ed2f0a 100644
--- a/source/_integrations/webostv.markdown
+++ b/source/_integrations/webostv.markdown
@@ -163,6 +163,10 @@ automation:
icon: "/home/homeassistant/images/doorbell.png"
```
+{% important %}
+The icon has to be a local file accessible by Home Assistant, not a web URL. The icon does not need to be accessible by the TV. The integration sends the icon to the TV encoded inside the notification message.
+{% endimportant %}
+
## Data updates
LG webOS TV devices are automatically pushing data to Home Assistant.
diff --git a/source/_integrations/xbox.markdown b/source/_integrations/xbox.markdown
index 98e1df4c109..07863300951 100644
--- a/source/_integrations/xbox.markdown
+++ b/source/_integrations/xbox.markdown
@@ -71,7 +71,7 @@ The Xbox remote platform will create Remote entities for each console linked to
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------------- |
| `entity_id` | no | `entity_id` of the Xbox remote. |
-| `command` | no | List of the controller commands or text input to be sent.
Commands: A, B, X, Y, Up, Down, Left, Right |
+| `command` | no | List of the controller commands or text input to be sent.
Commands: A, B, X, Y, Up, Down, Left, Right, Menu, View |
| `num_repeats` | yes | Number of times to repeat the commands. |
| `delay_secs` | yes | Interval in seconds between one send and another. |
diff --git a/source/_posts/2025-01-03-release-20251.markdown b/source/_posts/2025-01-03-release-20251.markdown
index 54c4a1f06a0..fddf3e77398 100644
--- a/source/_posts/2025-01-03-release-20251.markdown
+++ b/source/_posts/2025-01-03-release-20251.markdown
@@ -72,6 +72,7 @@ Enjoy the release!
- [2025.1.1 - January 7](#202511---january-7)
- [2025.1.2 - January 9](#202512---january-9)
- [2025.1.3 - January 20](#202513---january-20)
+ - [2025.1.4 - January 24](#202514---january-24)
- [Need help? Join the community!](#need-help-join-the-community)
- [Backward-incompatible changes](#backward-incompatible-changes)
- [All changes](#all-changes)
@@ -838,6 +839,46 @@ release every Friday.
[@kgraefe]: https://github.com/kgraefe
[@synesthesiam]: https://github.com/synesthesiam
+### 2025.1.4 - January 24
+
+- Update Hydrawise maximum watering duration to meet the app limits ([@mattdoran] - [#136050])
+- Bump holidays to 0.65 ([@gjohansson-ST] - [#136122])
+- Handle width and height placeholders in the thumbnail URL ([@Makrit] - [#136227])
+- Fix slave id equal to 0 ([@crug80] - [#136263])
+- Handle LinkPlay devices with no mac ([@silamon] - [#136272])
+- Fallback to None for literal "Blank" serial number for APCUPSD integration ([@yuxincs] - [#136297])
+- Update peblar to v0.4.0 ([@frenck] - [#136329])
+- Avoid keyerror on incomplete api data in myuplink ([@astrandb] - [#136333])
+- Update frontend to 20250109.1 ([@piitaya] - [#136339])
+- Update frontend to 20250109.2 ([@piitaya] - [#136348])
+- Bump aiowithings to 3.1.5 ([@joostlek] - [#136350])
+- Bump powerfox to v1.2.1 ([@klaasnicolaas] - [#136366])
+
+[#136050]: https://github.com/home-assistant/core/pull/136050
+[#136122]: https://github.com/home-assistant/core/pull/136122
+[#136227]: https://github.com/home-assistant/core/pull/136227
+[#136263]: https://github.com/home-assistant/core/pull/136263
+[#136272]: https://github.com/home-assistant/core/pull/136272
+[#136297]: https://github.com/home-assistant/core/pull/136297
+[#136329]: https://github.com/home-assistant/core/pull/136329
+[#136333]: https://github.com/home-assistant/core/pull/136333
+[#136339]: https://github.com/home-assistant/core/pull/136339
+[#136348]: https://github.com/home-assistant/core/pull/136348
+[#136350]: https://github.com/home-assistant/core/pull/136350
+[#136366]: https://github.com/home-assistant/core/pull/136366
+[@Makrit]: https://github.com/Makrit
+[@astrandb]: https://github.com/astrandb
+[@bramkragten]: https://github.com/bramkragten
+[@crug80]: https://github.com/crug80
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@joostlek]: https://github.com/joostlek
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@mattdoran]: https://github.com/mattdoran
+[@piitaya]: https://github.com/piitaya
+[@silamon]: https://github.com/silamon
+[@yuxincs]: https://github.com/yuxincs
+
## Need help? Join the community!
Home Assistant has a great community of users who are all more than willing
diff --git a/source/changelogs/core-2025.1.markdown b/source/changelogs/core-2025.1.markdown
index b74782733a5..313fa9450e8 100644
--- a/source/changelogs/core-2025.1.markdown
+++ b/source/changelogs/core-2025.1.markdown
@@ -1287,6 +1287,46 @@ For a summary in a more readable format:
[@kgraefe]: https://github.com/kgraefe
[@synesthesiam]: https://github.com/synesthesiam
+## Release 2025.1.4 - January 24
+
+- Update Hydrawise maximum watering duration to meet the app limits ([@mattdoran] - [#136050])
+- Bump holidays to 0.65 ([@gjohansson-ST] - [#136122])
+- Handle width and height placeholders in the thumbnail URL ([@Makrit] - [#136227])
+- Fix slave id equal to 0 ([@crug80] - [#136263])
+- Handle LinkPlay devices with no mac ([@silamon] - [#136272])
+- Fallback to None for literal "Blank" serial number for APCUPSD integration ([@yuxincs] - [#136297])
+- Update peblar to v0.4.0 ([@frenck] - [#136329])
+- Avoid keyerror on incomplete api data in myuplink ([@astrandb] - [#136333])
+- Update frontend to 20250109.1 ([@piitaya] - [#136339])
+- Update frontend to 20250109.2 ([@piitaya] - [#136348])
+- Bump aiowithings to 3.1.5 ([@joostlek] - [#136350])
+- Bump powerfox to v1.2.1 ([@klaasnicolaas] - [#136366])
+
+[#136050]: https://github.com/home-assistant/core/pull/136050
+[#136122]: https://github.com/home-assistant/core/pull/136122
+[#136227]: https://github.com/home-assistant/core/pull/136227
+[#136263]: https://github.com/home-assistant/core/pull/136263
+[#136272]: https://github.com/home-assistant/core/pull/136272
+[#136297]: https://github.com/home-assistant/core/pull/136297
+[#136329]: https://github.com/home-assistant/core/pull/136329
+[#136333]: https://github.com/home-assistant/core/pull/136333
+[#136339]: https://github.com/home-assistant/core/pull/136339
+[#136348]: https://github.com/home-assistant/core/pull/136348
+[#136350]: https://github.com/home-assistant/core/pull/136350
+[#136366]: https://github.com/home-assistant/core/pull/136366
+[@Makrit]: https://github.com/Makrit
+[@astrandb]: https://github.com/astrandb
+[@bramkragten]: https://github.com/bramkragten
+[@crug80]: https://github.com/crug80
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@joostlek]: https://github.com/joostlek
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@mattdoran]: https://github.com/mattdoran
+[@piitaya]: https://github.com/piitaya
+[@silamon]: https://github.com/silamon
+[@yuxincs]: https://github.com/yuxincs
+
[#115483]: https://github.com/home-assistant/core/pull/115483
[#117355]: https://github.com/home-assistant/core/pull/117355
[#121371]: https://github.com/home-assistant/core/pull/121371