8000 Documentation for new Seko PoolDose integration by lmaertin · Pull Request #39581 · home-assistant/home-assistant.io · GitHub
[go: up one dir, main page]

Skip to content

Documentation for new Seko PoolDose integration #39581

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 236 commits into
base: next
Choose a base branch
from

Conversation

lmaertin
Copy link
@lmaertin lmaertin commented Jun 16, 2025

Proposed change

Documentation for a new integration for local polling of SEKO PoolDose devices. This integration enables cloudless monitoring and control of a PoolDose Dual/Double device for automatic dosing of Pools or Spas.

Brands also planned in PRs on the dedicated respo.

Type of change

  • Spelling, grammar or other readability improvements (current branch).
  • Adjusted missing or incorrect information in the current documentation (current branch).
  • Added documentation for a new integration I'm adding to Home Assistant (next branch).
  • Added documentation for a new feature I'm adding to Home Assistant (next branch).
  • Removed stale or deprecated documentation.

Additional information

Checklist

  • This PR uses the correct branch, based on one of the following:
    • I made a change to the existing documentation and used the current branch.
    • I made a change that is related to an upcoming version of Home Assistant and used the next branch.
  • The documentation follows the Home Assistant documentation standards.

Summary by CodeRabbit

  • New Features
    • Introduced the "Seko Pooldose" integration for local monitoring and control of pool water treatment systems with live sensor data, manual overrides, and configurable settings.
  • Documentation
    • Added comprehensive user guide with setup, configuration options, supported entities, and operational details for the Pooldose integration.

frenck and others added 30 commits May 26, 2025 20:48
…e-assistant#39258)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…e-assistant#39278)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…t#39283)

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
…9302)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…istant#39321)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…39319)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
balloob and others added 21 commits June 16, 2025 20:15
Co-authored-by: AlCalzone <dominic.griesel@nabucasa.com>
…e-assistant#39523)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Stephan Holl - con terra GmbH <s.holl@conterra.de>
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
Co-authored-by: c0ffeeca7 <k0ffeeka7@gmail.com>
…39571)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: AlCalzone <dominic.griesel@nabucasa.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Copy link
Contributor
@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🧹 Nitpick comments (59)
source/_docs/authentication/providers.markdown (1)

164-164: Improve wording for clarity in supported services listing.

The phrase "from plaintext databases over LDAP to RADIUS" is a bit awkward. Consider rewriting to list options clearly, for example:

- This provider can be used to integrate Home Assistant with arbitrary external authentication services, from plaintext databases over LDAP to RADIUS.
+ This provider can be used to integrate Home Assistant with arbitrary external authentication services, including plain-text databases, LDAP, or RADIUS.
source/_integrations/knx.markdown (9)

557-561: Nitpick: Add comma after boolean clause for clarity.

Punctuation is inconsistent in the remove description—add a comma after true to match standard documentation style.

-remove:
-  description: If `true` the group address will be removed.
+remove:
+  description: If `true`, the group address will be removed.

573-578: Nitpick: Add comma after boolean clause for clarity.

Similarly update the remove field in knx.exposure_register:

-remove:
-  description: In addition to the configuration variables of [expose](#exposing-entity-states-entity-attributes-or-time-to-knx-bus) `remove` set to `true` can be used to remove exposures.
+remove:
+  description: In addition to the configuration variables of [expose](#exposing-entity-states-entity-attributes-or-time-to-knx-bus), `remove` set to `true` can be used to remove exposures.

1281-1286: Nitpick: Add comma after boolean clause for consistency.

Update respond_to_read in Date platform:

-respond_to_read:
-  description: If `true` the entity will respond to GroupValueRead telegrams...
+respond_to_read:
+  description: If `true`, the entity will respond to GroupValueRead telegrams...

1348-1353: Nitpick: Add comma after boolean clause for consistency.

Update respond_to_read in DateTime platform:

-respond_to_read:
-  description: If `true` the entity will respond to GroupValueRead telegrams...
+respond_to_read:
+  description: If `true`, the entity will respond to GroupValueRead telegrams...

1752-1757: Nitpick: Add comma after boolean clause for consistency.

Update respond_to_read in Number platform:

-respond_to_read:
-  description: If `true` the entity will respond to GroupValueRead telegrams...
+respond_to_read:
+  description: If `true`, the entity will respond to GroupValueRead telegrams...

1885-1890: Nitpick: Add comma after boolean clause for consistency.

Update respond_to_read in Select platform:

-respond_to_read:
-  description: If `true` the entity will respond to GroupValueRead telegrams...
+respond_to_read:
+  description: If `true`, the entity will respond to GroupValueRead telegrams...

2220-2225: Nitpick: Add comma after boolean clause for clarity.

Update respond_to_read in Switch platform:

-respond_to_read:
-  description: If `true` the entity will respond to GroupValueRead telegrams...
+respond_to_read:
+  description: If `true`, the entity will respond to GroupValueRead telegrams...

2284-2289: Nitpick: Add comma after boolean clause for clarity.

Update respond_to_read in Text platform:

-respond_to_read:
-  description: If `true` the entity will respond to GroupValueRead telegrams...
+respond_to_read:
+  description: If `true`, the entity will respond to GroupValueRead telegrams...

2337-2341: Nitpick: Add comma after boolean claus F438 e for consistency.

Update respond_to_read in Time platform:

-respond_to_read:
-  description: If `true` the entity will respond to GroupValueRead telegrams...
+respond_to_read:
+  description: If `true`, the entity will respond to GroupValueRead telegrams...
source/_integrations/motionmount.markdown (1)

50-52: Refine preset polling description for clarity. The current sentence is repetitive and can be streamlined.

- The only exception is the presets. Changes to the presets are {% term polling polled %}, by default every 60 seconds.
+ Presets are {% term polling polled %} by default every 60 seconds.
source/_integrations/eafm.markdown (1)

17-17: Remove trailing space
This line has a trailing space, violating MD009 (no-trailing-spaces).

- The UK Environment Agency Flood Monitoring only provides data for England - Northern Ireland, Scotland and Wales have their own flood agencies. 
+ The UK Environment Agency Flood Monitoring only provides data for England - Northern Ireland, Scotland and Wales have their own flood agencies.
source/_integrations/locative.markdown (3)

11-11: Hyphenate compound adjective
Use “open-source app” for correct compound adjective styling.

- Locative is an open source app for [iOS](...)
+ Locative is an open-source app for [iOS](...)

17-17: Simplify wording
“not able to” can be simplified to “cannot” for conciseness.

- You are not able to specify a device name in Locative.
+ You cannot specify a device name in Locative.

19-21: Add alt text for image
Images require alt text for accessibility (MD045).

- <img src='/images/screenshots/locative.png'/>
+ <img src='/images/screenshots/locative.png' alt='Locative app geofence screenshot'/>
source/_integrations/linkplay.markdown (3)

48-48: Fix grammar in description
Clarify verb usage by changing “allow to save” to “allow saving”.

- Companion apps, such as 4stream, allow to save music presets (for example, Spotify playlists).
+ Companion apps, such as 4stream, allow saving music presets (for example, Spotify playlists).

25-25: Remove trailing spaces
Trailing spaces violate MD009; remove them across these lines.
Example:

- ### Media Player 
+ ### Media Player

Also applies to: 29-30, 36-36, 45-45, 48-48


53-54: Enforce table pipe style
Table rows should have leading and trailing pipes (MD055).

-| `entity_id` | no | The speakers to target. To target all LinkPlay devices, use `all`.
+| `entity_id` | no | The speakers to target. To target all LinkPlay devices, use `all` |
-| `preset_number` | no | The number of the preset to play.
+| `preset_number` | no | The number of the preset to play. |
.github/workflows/test.yml (1)

17-26: Add strict shell options and improve filename handling

The new step correctly aborts on .md files, but it can be hardened by:

  1. Enabling strict mode (set -euo pipefail) to catch unexpected errors.
  2. Handling paths with spaces/newlines via find … -print0.
  3. Emitting a success message when no matches are found.

Proposed diff:

-      - name: Check for .md files and suggest renaming
-        run: |
-          echo "Checking for .md files in source/_integrations..."
-          MD_FILES=$(find source/_integrations -type f -name "*.md")
-          if [ -n "$MD_FILES" ]; then
-            echo "Found the following .md files:"
-            echo "$MD_FILES"
-            echo "⚠️ Please rename these files from .md to .markdown"
-            exit 1
-          fi
+      - name: Check for .md files and suggest renaming
+        run: |
+          set -euo pipefail
+          echo "Checking for .md files in source/_integrations..."
+          find source/_integrations -type f -name "*.md" -print0 | {
+            if read -r -d '' file; then
+              echo "Found the following .md files:"
+              printf '%s\n' "$file"
+              echo "⚠️ Please rename these files from .md to .markdown"
+              exit 1
+            fi
+          }
+          echo "No .md files found."
source/_integrations/esphome.markdown (1)

258-262: Relocate and standardize removal section
The "Removing the integration" section is now at the end with a sentence-case heading, improving structure.
Add a single trailing newline at EOF to satisfy MD047 (single-trailing-newline).

source/_docs/blueprint/schema.markdown (5)

19-19: Fix subject-verb agreement in schema description
The plural subject “Blueprint schemas” should take “support” rather than “supports.”

-Blueprint schemas currently supports three types of schema depending on its domain: ...
+Blueprint schemas currently support three types of schema depending on their domain: ...

23-24: Adjust comma placement in metadata list
The list punctuation is inconsistent—move the comma before “and optionally.”

-1. The blueprint's high-level metadata: name, domain and, optionally, any input required from the user.
+1. The blueprint's high-level metadata: name, domain, and optionally any input required from the user.

54-54: Clarify description sentence punctuation
Combine or separate the clauses for better flow. For example:

-...this field is highly recommended. Describe what the blueprint does...
+...this field is highly recommended: describe what the blueprint does...

60-60: Consider linking the script domain for consistency
You’ve linked automation and template—adding a link for script would maintain uniformity.


94-94: Use “one or more” instead of “one or multiple”
“Multiple” implies more than one; “one or more” reads more clearly:

-A blueprint can accept one or multiple inputs from the user...
+A blueprint can accept one or more inputs from the user...
source/_integrations/zwave_js.markdown (5)

85-85: Clarify prerequisite ordering and links
The bullet for the Z-Wave JS server prerequisite is essential but should follow the controller prerequisite for logical flow. Consider adding an anchor link to “Setting up a Z-Wave JS server” for consistency with other docs.


98-101: Ensure step formatting consistency
The sub-bullets under step 2 use mixed indentation and list markers. Align all sub-steps to use the same marker (-) and indentation level to match Home Assistant documentation standards.


119-119: Add context for security key prompt
This line mentions “depending on your Home Assistant version” but doesn’t specify which. Clarify which versions prompt for manual entry vs. auto-generation of keys to guide the user.


1140-1141: Remove extraneous blank line
A change here appears to insert a blank line with no content. Confirm if this blank line is intentional; otherwise, consider removing it to avoid unnecessary whitespace.


1150-1161: Consolidate removal steps for readability
Steps 2–4 could be nested under a single parent step or reflowed to reduce vertical length. Consider combining related actions (e.g., uninstall add-on and delete data) into sub-bullets.

source/_integrations/tts.markdown (3)

108-108: Use lowercase boolean literals for YAML consistency
YAML booleans are conventionally true/false. Consider updating the text to reflect that.

- setting it to `True` to enable it (default), or `False` to disable it
+ setting it to `true` to enable it (default), or `false` to disable it

141-141: Refine phrasing for REST API parameter support
This line can be made more concise and active.

- Additional parameters `cache`, `language` and `options` are supported, as JSON attributes, as described for `speak` action.
+ Additional JSON parameters `cache`, `language`, and `options` are supported as described for the `tts.speak` action.

197-201: Clarify troubleshooting example wording
Minor punctuation tweak will improve readability.

- For example, some Google Cast devices skip initial audio part when the audio is sampled at 22050Hz, and to fix the problem it is required to set the `preferred_sample_rate` setting in the `options` option to `44100`.
+ For example, some Google Cast devices skip the initial audio segment at a 22050 Hz sample rate. To resolve this, set `preferred_sample_rate: 44100` in the `options` block.
Gemfile (1)

6-6: Suggest alphabetizing development gems

The bumped gems in the :development group aren’t in alphabetical order, which makes scans harder when adding or updating dependencies. Please reorder entries in this section for consistency.

Also applies to: 13-15

source/_posts/2024-12-04-release-202412.markdown (1)

274-275: Missing article in Nord Pool description

Consider updating to “Pulls in the latest energy prices…” to improve readability.

source/_includes/common-tasks/update.md (1)

26-28: Grammar: use “back up” as verb

Change “If you want to backup the system first” to “If you want to back up the system first”.

source/common-tasks/os.markdown (5)

34-36: Clarify add-on update scope
The note “Each of these components needs to be updated separately” is helpful but could be moved immediately under the list for better discoverability, ensuring users don’t miss it.


44-47: Use “Back up” for the CLI verb
In “Prerequisites”, change “Backup your installation” to “Back up your installation” when used as a verb to align with style guidelines.


58-62: Elevate Troubleshooting into its own subsection
The inline troubleshooting bullets are valuable but could be clearer if presented under a #### Troubleshooting heading for better structure and scannability.


64-66: Maintain consistent numbered lists
Steps 3–6 should follow the same indentation and formatting as steps 1–2. Consider grouping them into a single numbered list or clearly nesting them as sub-steps.


79-104: Label Advanced content as optional
Consider renaming the collapsible section to {% details "Optional: Advanced …" %} to signal that these boot-slot instructions are for advanced users only.

source/_posts/2025-06-11-release-20256.markdown (4)

20-20: Correct “half way” to “halfway”
In formal prose, “halfway” is one word.


166-166: Remove colon before “including”
Avoid a colon before “including”; rewrite to “… improvements by [@joostlek], including support for …” for smoother flow.


148-151: Consolidate duplicate link definitions
There are repeated link definitions for author handles (e.g., @starkillerOG, @chemelli74, @astrandb, @bieniu, @zerzhang). Merge them at the bottom to eliminate redundancy.

Also applies to: 189-193


392-392: Omit trailing punctuation in headings
Per Markdown style, remove the exclamation mark from the “Need help? Join the community!” heading.

source/_integrations/govee_ble.markdown (1)

35-35: Link to Bluetooth integration docs for active scans
The “(Active scans required)” note is helpful, but users may not know how to enable active scanning. Consider pointing to the Bluetooth integration’s active-scan instructions for clarity.

Example diff:

- - [H5075 Bluetooth Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-bluetooth-hygrometer-thermometer-h5075) (Active scans required)
+ - [H5075 Bluetooth Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-bluetooth-hygrometer-thermometer-h5075) (Active scans required – see [Bluetooth integration docs](/integrations/bluetooth#active-scanning) for setup)
source/_integrations/nextcloud.markdown (2)

45-62: Refine wording: Use “Number of” for countable entities

For countable metrics (users, files, shares, storages, etc.), replace “Amount of” with “Number of” and ensure proper pluralization (e.g., change “Amount of user” → “Number of users”).

-| Amount of active users last 5 minutes    | ✅ |
+| Number of active users last 5 minutes    | ✅ |
...

43-131: Group sensors into logical categories for readability

The single long table could be hard to navigate. Consider breaking it into subsections (e.g. Active Users, Shares, Storage, Cache, PHP, System, OPCache) with subheadings or separate tables to improve clarity and maintainability.

source/_integrations/airgradient.markdown (5)

30-35: Enhance use cases for completeness.

The current bullets focus on monitoring and basic alerts. Consider adding scenarios for other metrics (e.g., TVOC, NOx) to illustrate full integration potential.
Example additions:

  • Alert when TVOC exceeds safe levels.
  • Notify when NOx readings spike unexpectedly.

36-41: Link to device documentation.

To improve discoverability, add direct hyperlinks to each listed AirGradient model pointing to its product page or official docs.


53-56: Rephrase for conciseness.

“complete overview” can be shortened to “complete list” for brevity:

- Below is a complete overview of the entities this integration provides.
+ Below is a complete list of entities provided by this integration.

116-120: Merge split sentence for readability.

The second sentence is broken across two lines; combine it:

- This integration does not provide additional actions. All actions available
- for this integration are provided by their respective entities.
+ This integration does not provide additional actions. All actions available for this integration are provided by their respective entities.

121-126: Avoid breaking “Home Assistant” across lines.

Reflow so “Home Assistant automations” remains unbroken:

- The following examples show how to use the AirGradient integration in Home
- Assistant automations. These examples are just a starting point,...
+ The following examples show how to use the AirGradient integration in Home Assistant automations. These examples are just a starting point,...
source/_integrations/tesla_fleet.markdown (6)

119-119: Use correct verb form
"Backup your keys" should be "Back up your keys" when used as a verb.


162-162: Use correct verb form
"Backup both key files" should be "Back up both key files" for the verb usage.


172-172: Consistency in terminology
Consider standardizing "multi-factor" vs. "multifactor" according to the style guide.


251-251: Add missing comma
Insert a comma after “characters” in “If your Client Secret contains ! or $ characters, you may need to escape them depending on your terminal.”


303-303: Remove duplicate verb
The phrase “The integration polls each vehicle each…” repeats “each.” Consider “polls each vehicle every 10 minutes.”


319-319: Correct past participle
Change “setup correctly” to “set up correctly” in this context.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge Base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between fd1b7bb and c3bc199.

⛔ Files ignored due to path filters (10)
  • Gemfile.lock is excluded by !**/*.lock
  • package-lock.json is excluded by !**/package-lock.json
  • source/images/assist/esp32-atom_silence_detection_01.png is excluded by !**/*.png
  • source/images/blog/2025-06/areas-dashboard.png is excluded by !**/*.png
  • source/images/blog/2025-06/bluetooth-connection-graph.png is excluded by !**/*.png
  • source/images/blog/2025-06/group-media-players-from-media-player-card.png is excluded by !**/*.png
  • source/images/blog/2025-06/new-device-picker.png is excluded by !**/*.png
  • source/images/blog/2025-06/reset-entity-id.png is excluded by !**/*.png
  • source/images/blog/2025-06/sidebar-customization.png is excluded by !**/*.png
  • source/images/blog/2025-06/social.png is excluded by !**/*.png
📒 Files selected for processing (97)
  • .github/workflows/test.yml (1 hunks)
  • CODEOWNERS (16 hunks)
  • Gemfile (1 hunks)
  • _config.yml (1 hunks)
  • package.json (1 hunks)
  • source/_docs/authentication/providers.markdown (1 hunks)
  • source/_docs/blueprint/schema.markdown (9 hunks)
  • source/_docs/configuration/templating.markdown (2 hunks)
  • source/_docs/z-wave/controllers.markdown (1 hunks)
  • source/_includes/asides/component_navigation.html (1 hunks)
  • source/_includes/common-tasks/update.md (3 hunks)
  • source/_includes/custom/news.html (1 hunks)
  • source/_includes/installation/container.md (1 hunks)
  • source/_integrations/adax.markdown (2 hunks)
  • source/_integrations/airgradient.markdown (4 hunks)
  • source/_integrations/airthings.markdown (1 hunks)
  • source/_integrations/alexa_devices.markdown (3 hunks)
  • source/_integrations/balay.markdown (1 hunks)
  • source/_integrations/blue_current.markdown (1 hunks)
  • source/_integrations/bluesound.markdown (1 hunks)
  • source/_integrations/bosch_alarm.markdown (1 hunks)
  • source/_integrations/comelit.markdown (1 hunks)
  • source/_integrations/constructa.markdown (1 hunks)
  • source/_integrations/eafm.markdown (1 hunks)
  • source/_integrations/eheimdigital.markdown (1 hunks)
  • source/_integrations/esphome.markdown (7 hunks)
  • source/_integrations/eve.markdown (1 hunks)
  • source/_integrations/ezviz.markdown (0 hunks)
  • source/_integrations/gaggenau.markdown (1 hunks)
  • source/_integrations/govee_ble.markdown (2 hunks)
  • source/_integrations/growatt_server.markdown (1 hunks)
  • source/_integrations/home_connect.markdown (2 hunks)
  • source/_integrations/homee.markdown (1 hunks)
  • source/_integrations/immich.markdown (1 hunks)
  • source/_integrations/ipp.markdown (1 hunks)
  • source/_integrations/jewish_calendar.markdown (1 hunks)
  • source/_integrations/knocki.markdown (1 hunks)
  • source/_integrations/knx.markdown (9 hunks)
  • source/_integrations/lcn.markdown (1 hunks)
  • source/_integrations/linkplay.markdown (1 hunks)
  • source/_integrations/locative.markdown (1 hunks)
  • source/_integrations/matter.markdown (1 hunks)
  • source/_integrations/met_eireann.markdown (1 hunks)
  • source/_integrations/motionmount.markdown (1 hunks)
  • source/_integrations/mqtt.markdown (4 hunks)
  • source/_integrations/neff.markdown (1 hunks)
  • source/_integrations/nextcloud.markdown (1 hunks)
  • source/_integrations/octoprint.markdown (2 hunks)
  • source/_integrations/openweathermap.markdown (1 hunks)
  • source/_integrations/paperless_ngx.markdown (1 hunks)
  • source/_integrations/pitsos.markdown (1 hunks)
  • source/_integrations/pooldose.markdown (1 hunks)
  • source/_integrations/probe_plus.markdown (1 hunks)
  • source/_integrations/profilo.markdown (1 hunks)
  • source/_integrations/recorder.markdown (1 hunks)
  • source/_integrations/rehlko.markdown (1 hunks)
  • source/_integrations/remote_calendar.markdown (1 hunks)
  • source/_integrations/russound_rio.markdown (1 hunks)
  • source/_integrations/russound_rnet.markdown (0 hunks)
  • source/_integrations/scrape.markdown (1 hunks)
  • source/_integrations/shelly.markdown (1 hunks)
  • source/_integrations/shelly_zwave.markdown (1 hunks)
  • source/_integrations/siemens.markdown (1 hunks)
  • source/_integrations/spotify.markdown (4 hunks)
  • source/_integrations/sql.markdown (1 hunks)
  • source/_integrations/squeezebox.markdown (1 hunks)
  • source/_integrations/sun.markdown (1 hunks)
  • source/_integrations/switchbot.markdown (3 hunks)
  • source/_integrations/switchbot_cloud.markdown (1 hunks)
  • source/_integrations/tasmota.markdown (1 hunks)
  • source/_integrations/template.markdown (16 hunks)
  • source/_integrations/tesla_fleet.markdown (2 hunks)
  • source/_integrations/thermador.markdown (1 hunks)
  • source/_integrations/tts.markdown (4 hunks)
  • source/_integrations/voip.markdown (1 hunks)
  • source/_integrations/zimi.markdown (2 hunks)
  • source/_integrations/zwave_js.markdown (7 hunks)
  • source/_posts/2023-01-04-release-20231.markdown (1 hunks)
  • source/_posts/2023-01-26-year-of-the-voice-chapter-1.markdown (1 hunks)
  • source/_posts/2023-02-01-release-20232.markdown (1 hunks)
  • source/_posts/2023-04-27-year-of-the-voice-chapter-2.markdown (1 hunks)
  • source/_posts/2023-07-20-year-of-the-voice-chapter-3.markdown (1 hunks)
  • source/_posts/2023-10-12-year-of-the-voice-chapter-4-wakewords.markdown (1 hunks)
  • source/_posts/2024-12-04-release-202412.markdown (5 hunks)
  • source/_posts/2024-12-19-voice-chapter-8-assist-in-the-home.markdown (1 hunks)
  • source/_posts/2025-02-05-release-20252.markdown (1 hunks)
  • source/_posts/2025-06-11-release-20256.markdown (1 hunks)
  • source/changelogs/core-2025.6.markdown (1 hunks)
  • source/common-tasks/general.markdown (1 hunks)
  • source/common-tasks/os.markdown (4 hunks)
  • source/green/index.html (1 hunks)
  • source/installation/troubleshooting.markdown (1 hunks)
  • source/more-info/unsupported/lxc.markdown (1 hunks)
  • source/voice-pe/index.html (2 hunks)
  • source/voice-pe/styles.css (4 hunks)
  • source/voice_control/index.markdown (2 hunks)
  • source/voice_control/thirteen-usd-voice-remote.markdown (3 hunks)
💤 Files with no reviewable changes (2)
  • source/_integrations/ezviz.markdown
  • source/_integrations/russound_rnet.markdown
✅ Files skipped from review due to trivial changes (63)
  • source/_docs/z-wave/controllers.markdown
  • source/_includes/installation/container.md
  • source/_integrations/switchbot_cloud.markdown
  • package.json
  • source/_integrations/profilo.markdown
  • source/_integrations/eheimdigital.markdown
  • source/_integrations/growatt_server.markdown
  • source/_integrations/siemens.markdown
  • source/_posts/2024-12-19-voice-chapter-8-assist-in-the-home.markdown
  • source/_integrations/remote_calendar.markdown
  • source/_integrations/tasmota.markdown
  • source/_integrations/constructa.markdown
  • source/_integrations/homee.markdown
  • source/_integrations/balay.markdown
  • source/_posts/2023-07-20-year-of-the-voice-chapter-3.markdown
  • source/_integrations/shelly.markdown
  • source/_integrations/voip.markdown
  • source/_integrations/comelit.markdown
  • source/_integrations/neff.markdown
  • source/_integrations/sun.markdown
  • source/_posts/2023-10-12-year-of-the-voice-chapter-4-wakewords.markdown
  • source/_posts/2023-01-26-year-of-the-voice-chapter-1.markdown
  • _config.yml
  • source/installation/troubleshooting.markdown
  • source/_posts/2023-04-27-year-of-the-voice-chapter-2.markdown
  • source/_integrations/openweathermap.markdown
  • source/_integrations/bluesound.markdown
  • source/green/index.html
  • source/_integrations/probe_plus.markdown
  • source/_integrations/ipp.markdown
  • source/_integrations/bosch_alarm.markdown
  • source/_integrations/mqtt.markdown
  • source/_integrations/airthings.markdown
  • source/voice_control/index.markdown
  • source/_integrations/russound_rio.markdown
  • source/voice-pe/index.html
  • source/_integrations/met_eireann.markdown
  • source/_integrations/thermador.markdown
  • source/_integrations/eve.markdown
  • source/_includes/asides/component_navigation.html
  • source/_integrations/sql.markdown
  • source/_integrations/jewish_calendar.markdown
  • source/_integrations/gaggenau.markdown
  • source/_integrations/knocki.markdown
  • source/_integrations/rehlko.markdown
  • source/_posts/2023-02-01-release-20232.markdown
  • source/_integrations/switchbot.markdown
  • source/_posts/2025-02-05-release-20252.markdown
  • source/common-tasks/general.markdown
  • source/_integrations/paperless_ngx.markdown
  • source/_integrations/lcn.markdown
  • source/_integrations/scrape.markdown
  • source/_integrations/zimi.markdown
  • source/more-info/unsupported/lxc.markdown
  • source/_integrations/octoprint.markdown
  • source/voice-pe/styles.css
  • source/_integrations/immich.markdown
  • source/_integrations/squeezebox.markdown
  • source/_integrations/matter.markdown
  • CODEOWNERS
  • source/_integrations/pitsos.markdown
  • source/_docs/configuration/templating.markdown
  • source/_integrations/recorder.markdown
🚧 Files skipped from review as they are similar to previous changes (1)
  • source/_integrations/pooldose.markdown
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
source/_includes/common-tasks/update.md

1-1: First line in a file should be a top-level heading
null

(MD041, first-line-heading, first-line-h1)

source/_integrations/airgradient.markdown

155-155: Lists should be surrounded by blank lines
null

(MD032, blanks-around-lists)

source/_posts/2025-06-11-release-20256.markdown

57-57: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)


57-57: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)


148-148: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@starkillerOG"

(MD053, link-image-reference-definitions)


193-193: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@chemelli74"

(MD053, link-image-reference-definitions)


242-242: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@astrandb"

(MD053, link-image-reference-definitions)


243-243: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@bieniu"

(MD053, link-image-reference-definitions)


244-244: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@zerzhang"

(MD053, link-image-reference-definitions)


245-245: Link and image reference definitions should be needed
Duplicate link or image reference definition: "miele"

(MD053, link-image-reference-definitions)


246-246: Link and image reference definitions should be needed
Duplicate link or image reference definition: "shelly"

(MD053, link-image-reference-definitions)


247-247: Link and image reference definitions should be needed
Duplicate link or image reference definition: "switchbot"

(MD053, link-image-reference-definitions)


291-291: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@mib1185"

(MD053, link-image-reference-definitions)


297-297: Link and image reference definitions should be needed
Unused link or image reference definition: "template entities"

(MD053, link-image-reference-definitions)


360-360: Link and image reference definitions should be needed
Unused link or image reference definition: "#145650"

(MD053, link-image-reference-definitions)


380-380: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@bdraco"

(MD053, link-image-reference-definitions)


382-382: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@chemelli74"

(MD053, link-image-reference-definitions)


384-384: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@frenck"

(MD053, link-image-reference-definitions)


391-391: Multiple consecutive blank lines
Expected: 1; Actual: 2

(MD012, no-multiple-blanks)


392-392: Trailing punctuation in heading
Punctuation: '!'

(MD026, no-trailing-punctuation)

source/_integrations/tts.markdown

201-201: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)

source/_integrations/tesla_fleet.markdown

59-59: Multiple consecutive blank lines
Expected: 1; Actual: 2

(MD012, no-multiple-blanks)


149-149: Ordered list item prefix
Expected: 1; Actual: 5; Style: 1/2/3

(MD029, ol-prefix)


156-156: Ordered list item prefix
Expected: 2; Actual: 6; Style: 1/2/3

(MD029, ol-prefix)


162-162: Ordered list item prefix
Expected: 3; Actual: 7; Style: 1/2/3

(MD029, ol-prefix)


236-236: Multiple consecutive blank lines
Expected: 1; Actual: 2

(MD012, no-multiple-blanks)


262-262: Ordered list item prefix
Expected: 1; Actual: 5; Style: 1/2/3

(MD029, ol-prefix)


273-273: Ordered list item prefix
Expected: 2; Actual: 6; Style: 1/2/3

(MD029, ol-prefix)

source/_integrations/template.markdown

264-264: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)


264-264: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)


268-268: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)


268-268: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)

source/changelogs/core-2025.6.markdown

717-717: Link and image reference definitions should be needed
Unused link or image reference definition: "#145650"

(MD053, link-image-reference-definitions)


1436-1436: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@Djelibeybi"

(MD053, link-image-reference-definitions)


1471-1471: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@allenporter"

(MD053, link-image-reference-definitions)


1477-1477: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@bdraco"

(MD053, link-image-reference-definitions)


1483-1483: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@cdce8p"

(MD053, link-image-reference-definitions)


1485-1485: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@chemelli74"

(MD053, link-image-reference-definitions)


1492-1492: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@epenet"

(MD053, link-image-reference-definitions)


1496-1496: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@frenck"

(MD053, link-image-reference-definitions)


1530-1530: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@silamon"

(MD053, link-image-reference-definitions)


1538-1538: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@tronikos"

(MD053, link-image-reference-definitions)


1539-1539: Link and image reference definitions should be needed
Duplicate link or image reference definition: "@tsvi"

(MD053, link-image-reference-definitions)

source/_integrations/eafm.markdown

17-17: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)

source/_integrations/esphome.markdown

262-262: Files should end with a single newline character
null

(MD047, single-trailing-newline)

source/_integrations/linkplay.markdown

25-25: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)


29-29: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)


30-30: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)


36-36: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)


45-45: Trailing spaces
Expected: 0 or 10000 2; Actual: 1

(MD009, no-trailing-spaces)


48-48: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)


53-53: Table pipe style
Expected: leading_and_trailing; Actual: leading_only; Missing trailing pipe

(MD055, table-pipe-style)


54-54: Table pipe style
Expected: leading_and_trailing; Actual: leading_only; Missing trailing pipe

(MD055, table-pipe-style)

source/_integrations/locative.markdown

20-20: Images should have alternate text (alt text)
null

(MD045, no-alt-text)

🪛 LanguageTool
source/_includes/common-tasks/update.md

[grammar] ~27-~27: The word “backup” is a noun. The verb is spelled with a space.
Context: ...want to update. 5. If you want to backup the system first (recommended), enable ...

(NOUN_VERB_CONFUSION)

source/voice_control/thirteen-usd-voice-remote.markdown

[grammar] ~73-~73: Two determiners in a row. Choose either “the” or “a”.
Context: ...sp32-atom-flash-07.png) 6. This starts the a wizard to customize the your voice assi...

(DT_DT)


[grammar] ~73-~73: A determiner cannot be combined with a possessive pronoun. Did you mean simply “the” or “your”?
Context: .... This starts the a wizard to customize the your voice assistant. - Follow the wizard...

(A_MY)

source/common-tasks/os.markdown

[grammar] ~44-~44: The word ‘Backup’ is a noun. Do you mean the verb “Back up”?
Context: ...ard-compatible. #### Prerequisites - [Backup your installation](/common-tasks/genera...

(SENT_START_BACKUP)


[style] ~45-~45: This phrase is redundant. Consider using “outside”.
Context: ...sks/general/#defining-backup-locations) outside of the device where Home Assistant is inst...

(OUTSIDE_OF)


[uncategorized] ~59-~59: Consider adding a hyphen.
Context: ...ee that notification: - In the top right corner, select the three dots {% icon "...

(TOP_LEFT_CORNER)

source/_integrations/airgradient.markdown

[style] ~155-~155: As a shorter alternative for ‘able to’, consider using “can not”.
Context: ...lowing limitations: - The update entity is not able to install updates automatically. You will...

(BE_ABLE_TO)

source/_posts/2025-06-11-release-20256.markdown

[grammar] ~20-~20: The adjective or adverb “halfway” is spelled as one word.
Context: ...me Assistant 2025.6! 🎉 We are already half way through 2025, can you believe it? I per...

(WAY_COMPOUNDS)


[style] ~20-~20: This phrase is often redundant. Consider writing “I” unless you want to emphasize that you and not someone else will do something. Then, commas might be missing.
Context: ...f way through 2025, can you believe it? I personally can't, as it feels like we just started...

(I_MYSELF)


[uncategorized] ~24-~24: Possible missing comma found.
Context: ...ith quality-of-life improvements! Last release my favorite feature was the new entity ...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~121-~121: ‘in control of’ might be wordy. Consider a shorter alternative.
Context: ...and video backup solution that puts you in control of your personal media. - **[Paperless-ngx...

(EN_WORDINESS_PREMIUM_IN_CONTROL_OF)


[grammar] ~144-~144: In formal contexts, “These” is sufficient.
Context: ... integrations to help with findability. These ones are new: - [Kaiser Nienhaus], prov...

(THESE_ONES)


[misspelling] ~164-~164: This word is normally spelled as one.
Context: ...lly] integration to use sub-devices for multi-channel devices. A notable change for complex...

(EN_COMPOUNDS_MULTI_CHANNEL)


[typographical] ~166-~166: Do not use a colon (:) before a series that is introduced by a preposition (‘including’). Remove the colon or add a noun or a noun phrase after the preposition.
Context: ...e round of improvements by [@joostlek], including: support for cooktops, hobs, water hea...

(RP_COLON)


[style] ~260-~260: Consider an alternative to strengthen your wording.
Context: ...ther noteworthy changes There are many more improvements in this release; here are some of the o...

(IMPROVEMENTS_REFINEMENTS)


[style] ~313-~313: Qualifiers like “somewhat” can weaken your message and make your writing sound uncertain. Consider removing it or choosing an alternative to sound more confident.
Context: ... they are in. However, this feature was somewhat limited, as it could only be used as ac...

(SOMEWHAT)


[uncategorized] ~323-~323: Possible missing comma found.
Context: ...ll your media players. Anyhow, amazing contribution Alex! 👏 [@AlexGustafsson]: https://gi...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~355-~355: Consider using a different verb for a more formal wording.
Context: ... revert of update to remote calendar to fix issue where calendar does not update ([...

(FIX_RESOLVE)


[style] ~401-~401: Using many exclamation marks might seem excessive (in this case: 52 exclamation marks for a text that’s 20831 characters long)
Context: ...-assistant/core/issues), to get it fixed! Or, check our help page for gu...

(EN_EXCESSIVE_EXCLAMATION)


[style] ~410-~410: Consider shortening or rephrasing this to strengthen your wording.
Context: ...atible changes We do our best to avoid making changes to existing functionality that might unexp...

(MAKE_CHANGES)

source/_integrations/tts.markdown

[uncategorized] ~108-~108: This adjective is normally spelled with a hyphen (British English) or as one word (American English).
Context: ... (default), or False to disable it. A long time cache will be located on the file syste...

(TIME_HYPHEN)


[uncategorized] ~118-~118: Loose punctuation mark.
Context: ...all optional, are: - preferred_format: Set the audio format. When not supporte...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~119-~119: Loose punctuation mark.
Context: ... output files. - preferred_sample_rate: Set the sample rate. When not supported...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~120-~120: Loose punctuation mark.
Context: ...mpeg tool. - preferred_sample_channels: Set the number of audio channels. When ...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~121-~121: Loose punctuation mark.
Context: ... FFmpeg tool. - preferred_sample_bytes: Set the audio bit sampling. When not su...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~123-~123: Possible missing comma found.
Context: ...ored). Example to produce an MP3 audio at 22050Hz: ```yaml action: tts.speak tar...

(AI_HYDRA_LEO_MISSING_COMMA)


[typographical] ~199-~199: It appears that a comma is missing.
Context: ... format is not fully supported. In such cases it is required to experiment with diffe...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~201-~201: You might be missing the article “the” here.
Context: ... example, some Google Cast devices skip initial audio part when the audio is sampled at...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[style] ~201-~201: Consider using a different verb for a more formal wording.
Context: ...the audio is sampled at 22050Hz, and to fix the problem it is required to set the `...

(FIX_RESOLVE)

source/_integrations/tesla_fleet.markdown

[grammar] ~119-~119: The word ‘Backup’ is a noun. Do you mean the verb “Back up”?
Context: ...ecific/com.tesla.3p.public-key.pem` 4. Backup your keys in a safe location for future...

(SENT_START_BACKUP)


[grammar] ~162-~162: The word ‘Backup’ is a noun. Do you mean the verb “Back up”?
Context: ...ey /config/tesla_fleet.key ``` 7. Backup both key files in a safe location for...

(SENT_START_BACKUP)


[misspelling] ~172-~172: This word is normally spelled as one.
Context: ...- Verify your email address - Enable multi-factor authentication (optional) 2. Create a ...

(EN_COMPOUNDS_MULTI_FACTOR)


[uncategorized] ~251-~251: Possible missing comma found.
Context: ... $ characters, you may need to escape them depending on your terminal. {% endno...

(AI_HYDRA_LEO_MISSING_COMMA)


[grammar] ~303-~303: You’ve repeated a verb. Did you mean to only write one of them?
Context: ...tes The {% term integration %} {% term polling polls %} each vehicle every 10 minutes while ...

(REPEATED_VERBS)


[grammar] ~319-~319: Make sure that the noun ‘setup’ is correct. Did you mean the past participle “set up”?
Context: ...is is required and the key has not been setup correctly. The {% term integration %} ...

(BE_VB_OR_NN)


[uncategorized] ~487-~487: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...lic key is accessible at the correct URL and you've completed all registration steps...

(COMMA_COMPOUND_SENTENCE)

source/_integrations/template.markdown

[uncategorized] ~151-~151: Possible missing comma found.
Context: ...rs to update the entities. Optional. If omitted will update based on referenced entitie...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~159-~159: This expression is usually spelled with a hyphen.
Context: ...e configuration is loaded or reloaded. Trigger based template entities resolve variables bet...

(BASED_HYPHEN)


[misspelling] ~173-~173: This word is normally spelled with a hyphen.
Context: ... Note that the string comparison is not case sensitive; "TrUe" and "yEs" are allowed. ...

(EN_COMPOUNDS_CASE_SENSITIVE)


[uncategorized] ~190-~190: Possible missing comma found.
Context: ...with the unique ID of the configuration block if available. This allows changing the ...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~277-~277: In American English, abbreviations like “etc.” require a period.
Context: ...nd (Open/Closed, Detected/Clear etc) depends on the sensor's device_class v...

(ETC_PERIOD)


[uncategorized] ~311-~311: Possible missing comma found.
Context: ...pen). If the template produces a None value the current position will be set to `un...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~323-~323: Possible missing comma found.
Context: ...late. If the template produces a None value the state will be set to unknown. ...

(AI_HYDRA_LEO_MISSING_COMMA)


[grammar] ~609-~609: Is an article like ‘a’ or ‘an’ missing?
Context: ... describes when the state of the sensor was last reset. Must render to a valid `dat...

(BE_NN)

source/_docs/blueprint/schema.markdown

[grammar] ~19-~19: It seems that the correct verb form here is “support”.
Context: ...int schema Blueprint schemas currently supports three types of schema depending on its ...

(AGREEMENT_SENT_START_2)


[uncategorized] ~54-~54: Possible missing comma found.
Context: ...ecommended. Describe what the blueprint does and describe the inputs the blueprint r...

(AI_HYDRA_LEO_MISSING_COMMA)

source/_integrations/esphome.markdown

[misspelling] ~120-~120: This word is normally spelled as one.
Context: ...Protocol**: ESPHome uses a lightweight, bi-directional protocol over TCP, optimized for microc...

(EN_COMPOUNDS_BI_DIRECTIONAL)

source/_integrations/linkplay.markdown

[grammar] ~48-~48: Did you mean “saving”? Or maybe you should add a pronoun? In active voice, ‘allow’ + ‘to’ takes an object, usually a pronoun.
Context: ... Companion apps, such as 4stream, allow to save music presets (for example, Spotify pla...

(ALLOW_TO)

source/_integrations/locative.markdown

[uncategorized] ~11-~11: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ps://www.locative.app/). Locative is an open source app for [iOS](https://apps.apple.com/us...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[style] ~17-~17: As a shorter alternative for ‘able to’, consider using “can not”.
Context: ... that URL, updating Home Assistant. You are not able to specify a device name in Locative. Inst...

(BE_ABLE_TO)


[uncategorized] ~17-~17: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...have created on its first GET. If you had been or are using Owntracks as well, yo...

(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)

source/_integrations/motionmount.markdown

[grammar] ~51-~51: You’ve repeated a verb. Did you mean to only write one of them?
Context: ...ets. Changes to the presets are {% term polling polled %}, by default every 60 seconds.

...

(REPEATED_VERBS)

source/_integrations/nextcloud.markdown

[uncategorized] ~48-~48: ‘Amount of’ should usually only be used with uncountable or mass nouns. Consider using “number” if this is not the case.
Context: ...mount of active users last hour | ✅ | | Amount of files | ✅ | | Amount of group shares...

(AMOUNTOF_TO_NUMBEROF)


[uncategorized] ~56-~56: ‘Amount of’ should usually only be used with uncountable or mass nouns. Consider using “number” if this is not the case.
Context: ...s | ✅ | | Amount of room shares | ✅ | | Amount of shares | ✅ | | Amount of shares rece...

(AMOUNTOF_TO_NUMBEROF)


[uncategorized] ~57-~57: ‘Amount of’ should usually only be used with uncountable or mass nouns. Consider using “number” if this is not the case.
Context: ...shares | ✅ | | Amount of shares | ✅ | | Amount of shares received | ✅ | | Amount of sh...

(AMOUNTOF_TO_NUMBEROF)


[uncategorized] ~58-~58: ‘Amount of’ should usually only be used with uncountable or mass nouns. Consider using “number” if this is not the case.
Context: ...✅ | | Amount of shares received | ✅ | | Amount of shares sent | ✅ | | Amount of storag...

(AMOUNTOF_TO_NUMBEROF)


[uncategorized] ~59-~59: ‘Amount of’ should usually only be used with uncountable or mass nouns. Consider using “number” if this is not the case.
Context: ...d | ✅ | | Amount of shares sent | ✅ | | Amount of storages | ✅ | | Amount of storages ...

(AMOUNTOF_TO_NUMBEROF)


[uncategorized] ~60-~60: ‘Amount of’ should usually only be used with uncountable or mass nouns. Consider using “number” if this is not the case.
Context: ...sent | ✅ | | Amount of storages | ✅ | | Amount of storages at home | ✅ | | Amount of u...

(AMOUNTOF_TO_NUMBEROF)

source/_integrations/spotify.markdown

[grammar] ~106-~106: You’ve repeated a verb. Did you mean to only write one of them?
Context: ...# Data updates The integration {% term polling polls %} at least every 30 seconds. If the tr...

(REPEATED_VERBS)

source/_posts/2023-01-04-release-20231.markdown

[style] ~86-~86: Try using a synonym here to strengthen your writing.
Context: ...ohf-voice.github.io/intents/). The page gives insight into the parts we need help wit...

(GIVE_PROVIDE)

source/_posts/2024-12-04-release-202412.markdown

[uncategorized] ~275-~275: You might be missing the article “the” here.
Context: ...*, added by [@gjohansson-ST] Pulls in latest energy prices from the Nord Pool energy...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

🪛 Gitleaks (8.26.0)
source/_integrations/tesla_fleet.markdown

265-267: Discovered a potential authorization token provided in a curl command header, which could compromise the curl accessed resource.

(curl-auth-header)

🪛 RuboCop (1.75.5)
Gemfile

[convention] 7-7: Gems should be sorted in an alphabetical order within their section of the Gemfile. Gem jekyll should appear before rake.

(Bundler/OrderedGems)


[convention] 8-8: Gems should be sorted in an alphabetical order within their section of the Gemfile. Gem compass should appear before jekyll.

(Bundler/OrderedGems)


[convention] 14-14: Gems should be sorted in an alphabetical order within their section of the Gemfile. Gem rubocop should appear before sass-embedded.

(Bundler/OrderedGems)

🪛 HTMLHint (1.5.0)
source/_includes/custom/news.html

[error] 45-45: Special characters must be escaped : [ > ].

(spec-char-escape)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - home-assistant-docs
  • GitHub Check: Header rules - home-assistant-docs
  • GitHub Check: Pages changed - home-assistant-docs
🔇 Additional comments (74)
source/_integrations/alexa_devices.markdown (5)

7-7: Add “Switch” to ha_category.

Including - Switch aligns with the new entity type and matches the capitalization of other categories.


13-13: Update ha_iot_class to Cloud Polling.

Since Alexa Devices relies on Amazon’s cloud API, switching from Local to Cloud Polling is correct.


17-17: Include switch in ha_platforms.

Adding the switch platform enables the new “Do not disturb” entity.


36-36: Clarify device list entry.

Changing to Amazon Fire Tablet ensures consistency with other Amazon device names.


118-118: Document the new Switch entity.

Listing “Switch – Do not disturb” under supported functionality completes the platform additions.

source/_integrations/motionmount.markdown (1)

1-21: Front matter formatting looks correct.
The YAML metadata (title, description, ha_* keys) is well-formed and follows Home Assistant documentation standards.

source/_integrations/spotify.markdown (4)

32-32: Ensure consistent spacing before headings.

The blank line before the “### Create a Spotify application” heading improves readability and aligns with Markdown style guidelines.


48-48: Nest images correctly under list items.

Indenting this screenshot by four spaces ties it to step 3 and maintains list hierarchy for the visual aid.


52-54: Standardize bullet indentation for sub-items.

The added hyphen and indentation for the “Redirect URI” bullet now match nested-list conventions, making the instructions clearer.


106-106: Use the terminology macro for polling.

Switching to {% term polling polls %} ensures consistent use of the polling term across the documentation.

source/_integrations/eafm.markdown (2)

1-1: Standardize frontmatter delimiters
Frontmatter start now uses three hyphens to match Jekyll conventions and other docs.


11-11: Standardize frontmatter delimiters
Frontmatter end now uses three hyphens for consistency.

source/_integrations/locative.markdown (2)

1-1: Standardize frontmatter delimiters
Frontmatter start updated to three hyphens to align with other integration docs.


9-9: Standardize frontmatter delimiters
Frontmatter end updated to three hyphens for consistency.

source/_integrations/linkplay.markdown (2)

1-1: Standardize frontmatter delimiters
Frontmatter start updated to three hyphens, matching Jekyll standards and other docs.


17-17: Standardize frontmatter delimiters
Frontmatter end updated to three hyphens for consistency.

source/_integrations/esphome.markdown (7)

52-52: Standardize term macro usage
Replaced raw "ESPHome integration" with bold product name and {% term integration %} macro for consistency.


56-57: Apply sentence case to headings
Updated the "Key features" heading and inserted a blank line before it to align with the style guide.


112-112: Standardize term macro in supported devices
Used {% term integration %} to refer to the integration and adjusted phrasing to sentence case.


118-118: Use sentence-case for subheading
Changed "Additional technical details" to sentence case, consistent with other headings.


183-183: Normalize logs subheading to sentence case
Updated "Viewing live logs" to sentence case, matching documentation conventions.


233-233: Sentence-case heading for requirements
Adjusted "Requirements for name conflict resolution" to sentence case per style guide.


252-252: Header sentence case for limitations
Changed "Known limitations" to sentence case and added preceding blank line for clarity.

source/_docs/blueprint/schema.markdown (6)

29-30: Looks good
Clear explanation of minimum required metadata and basic form.


40-40: Looks good
Description of domain-dependent schema is accurate and concise.


96-96: Looks good
Input type and selector guidance is clear and matches standards.


129-129: Looks good
Explanation of the !input tag usage is precise.


197-197: Looks good
The example for input sections is clear and well-formatted.


235-237: Looks good
The built-in blueprint example clearly demonstrates schema usage followed by domain schema.

source/_integrations/zwave_js.markdown (2)

170-179: Review migration section structure
The new “Migrating a Z-Wave network to a new controller” section is comprehensive. Please verify that heading levels and indentations align with adjacent sections, and that the prerequisites list follows the same bullet style.


1142-1149: Validate removal section alignment
The “Removing Z-Wave JS from Home Assistant” header and initial steps look correct, but the sub-bullets under step 1 vary in formatting. Ensure they mirror the style used elsewhere (consistent dashes and indentation).

source/_integrations/shelly_zwave.markdown (1)

20-20: Intro paragraph simplification approved
The removed partner-program mention makes this intro crisp and focused on local Z-Wave functionality. Link syntax and punctuation are correct.

source/_integrations/template.markdown (1)

1-1474: Inconsistent target documentation
The changes in this file exclusively update the Template integration reference, whereas the PR objectives center on adding documentation for the new Seko PoolDose integration. Please confirm whether edits to template.markdown are intended for this pull request or if the PoolDose documentation file should be reviewed instead.

Likely an incorrect or invalid review comment.

source/_integrations/tts.markdown (6)

49-49: tts.speak action options look comprehensive
The new description of supported options (message, language, cache, media_player_entity_id, options) accurately covers the feature set.


62-62: Legacy say action options documented correctly
The paragraph clearly lists the supported parameters and notes the service_name override.


110-110: Preferred audio settings section header is appropriate
The new section clearly introduces configurable audio parameters.


111-116: Paragraph on transcoding with FFmpeg is clear and accurate
Explaining how unsupported formats are handled via FFmpeg integration adds necessary context.


118-121: List of preferred audio settings is well-structured
Each bullet concisely outlines the FFmpeg parameters available.


123-135: Example usage for MP3 at 22050 Hz is helpful
The YAML snippet aligns with the preceding section and demonstrates real-world configuration.

source/changelogs/core-2025.6.markdown (1)

1-5: The front matter block is properly structured and follows project conventions.

source/_posts/2023-01-04-release-20231.markdown (1)

85-87: Updated intents documentation URL

The link has been updated to the new ohf-voice.github.io domain, matching other posts. Looks correct and consistent.

source/_includes/custom/news.html (2)

33-60: Correctly repositioned Recent Blog Posts section

The Recent Blog Posts block has been moved and formatted properly, maintaining filtering logic and limits. Markup and Liquid logic appear consistent.


61-66: Add Community Day 2025 promo

The Community Day 2025 link has been moved into the Recent Blog section, with target="_blank" and updated URL and background. Alt text and styling look appropriate.

source/_posts/2024-12-04-release-202412.markdown (3)

101-102: Approve YAML edit instruction placement

The edited inline instruction for “Edit in YAML” now reads clearly in context.


232-234: Approve special tiers addition

The new “non-scaled special tiers” heading and introduction are correctly inserted.


267-273: New integrations list updated

New integrations for Acaia, Music Assistant, NASweb, and Sky Remote have been added correctly. Descriptions and links look accurate.

Also applies to: 276-278

source/_includes/common-tasks/update.md (3)

1-6: Add Prerequisites section

The new “#### Prerequisites” section clearly lists backup and release-note checks before updates. This improves clarity.


26-29: Enhance UI update steps

Inserted steps to enable the backup toggle and verify repair issues post-update. These additions align with new OS update workflows.


67-67: Unified post-update validation

Moving the repair-issue and log-check reminder outside the tab block ensures it applies to all installation methods.

source/voice_control/thirteen-usd-voice-remote.markdown (3)

81-82: Update wake word example

The wake word example now correctly references the user-configured term. This aligns with the new wizard flow.


93-96: Adjust silence detection navigation

Updated path to silence detection settings under Settings > Devices & services > ESPHome. Navigation steps are clear and accurate.


105-114: Add instructions to remove Wi-Fi credentials

The new removal section is clear and walks through using the web serial interface. Script tag and steps look correct.

source/_integrations/govee_ble.markdown (1)

52-52: [web_search]

Does the Govee H5129 Hygrometer Thermometer support Bluetooth or BLE connectivity?
source/_integrations/nextcloud.markdown (1)

133-135: Well-defined update entity section

The new “## Update entity” section clearly states that an update entity will be created per entry. This aligns with Home Assistant’s documentation standards.

source/_integrations/airgradient.markdown (1)

133-149: Code example looks accurate.

YAML snippet and raw block usage follow Home Assistant conventions and require no changes.

source/_integrations/home_connect.markdown (2)

34-34: Add DHCP discovery metadata
Enabling ha_dhcp: true aligns Home Connect with other integrations supporting DHCP discovery.


729-731: Correct sensor section heading
Updated the details summary from "List of binary sensors" to "List of sensors" under the Sensor section for accuracy.

source/_integrations/blue_current.markdown (1)

16-16: Support button platform
Adding - button to ha_platforms enables Blue Current to expose button entities (e.g., reset, reboot, stop session).

source/_integrations/adax.markdown (4)

4-6: Include Sensor category
Adding - Sensor under ha_category reflects the new energy monitoring sensors.


9-11: Add new codeowner
Including @lazytarget brings additional maintenance coverage for the Adax integration.


15-17: Enable sensor platform
Added sensor to ha_platforms to support cloud‐only energy monitoring sensors.


47-57: Document energy monitoring
New section clearly describes cloud‐only energy sensors and their total_increasing state class compatibility with the Home Assistant energy dashboard.

source/_integrations/tesla_fleet.markdown (12)

39-39: Update integration description
The description now emphasizes control of Tesla vehicles and energy sites via the Fleet API.


43-47: Clarify prerequisites list
Added clear instructions and nested bullets for hosting a public key via NGINX or external services.


50-52: Approve setup note
The {% note %} block accurately summarizes key preparatory steps.


53-55: Approve warning block
The {% warning %} correctly flags China region limitations.


57-57: Insert Configuration heading
Introducing ## Configuration before setup steps enhances structure.


59-59: Clarify setup introduction
The new intro line succinctly states the first setup tasks.


61-61: Step heading added
### Step 1: Generate encryption keys correctly initiates the key generation section.


477-477: Context note—no action required
The description of polling behavior is clear and accurate.


481-481: Approve removal include
The standard {% include integrations/remove_device_service.md %} is present for device removal instructions.


483-483: Clarify removal note
Noting that removing the integration doesn’t delete the Developer Application is accurate and helpful.


487-490: Troubleshooting bullets updated
Content is clear; no changes needed in the troubleshooting section.


492-492: Confirm credentials guidance
Guidance to delete credentials via the UI is accurate and straightforward.

Comment on lines +161 to +162
Do this before using the device with another controller, or when you don't use the device anymore. It removes the device from the Z-Wave network stored on the controller. It also removes the device and all its entities from Home Assistant. You can not join a device to a new network if it is still paired with a controller.

Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Promote explanatory text to a note
The paragraph explaining why removal must occur before reusing a device reads like a note. Convert it to a {% note %} block placed immediately before the numbered steps for better clarity.

🤖 Prompt for AI Agents
In source/_integrations/zwave_js.markdown around lines 161 to 162, the
explanatory paragraph about removing a device before reusing it should be
converted into a `{% note %}` block. Wrap the entire paragraph inside `{% note
%}` and `{% endnote %}` tags and place this note block immediately before the
numbered steps section to improve clarity and emphasis.

Comment on lines +73 to +76
6. This starts the a wizard to customize the your voice assistant.
- Follow the wizard steps to define the wake word and choose the voice.
- When you are finished, select **Done**.
7. Your ATOM Echo is connected to Home Assistant over Wi-Fi. You can now move it to any place in your home with a USB power supply.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix grammar in wizard introduction

The sentence has extra determiners and possessive confusion. Update to:

6. This starts a wizard to customize your voice assistant.
   - Follow the wizard steps to define the wake word and choose the voice.
🧰 Tools
🪛 LanguageTool

[grammar] ~73-~73: Two determiners in a row. Choose either “the” or “a”.
Context: ...sp32-atom-flash-07.png) 6. This starts the a wizard to customize the your voice assi...

(DT_DT)


[grammar] ~73-~73: A determiner cannot be combined with a possessive pronoun. Did you mean simply “the” or “your”?
Context: .... This starts the a wizard to customize the your voice assistant. - Follow the wizard...

(A_MY)

🤖 Prompt for AI Agents
In source/voice_control/thirteen-usd-voice-remote.markdown around lines 73 to
76, fix the grammar in the wizard introduction by removing the extra determiner
"the" and correcting the possessive phrase. Change "This starts the a wizard to
customize the your voice assistant." to "This starts a wizard to customize your
voice assistant." and keep the following bullet point unchanged.

Comment on lines +39 to +41
## Sensors

For each entry, the integration will create the following {% term sensors %}:
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Missing binary_sensor documentation

The intro notes that both sensors and binary sensors are provided, but the new table only covers regular sensors. Please add a corresponding list or table detailing the binary_sensor entities created by this integration.

🤖 Prompt for AI Agents
In source/_integrations/nextcloud.markdown around lines 39 to 41, the
documentation mentions both sensors and binary sensors but only lists regular
sensors. Add a new section or table that clearly details the binary_sensor
entities created by the integration, including their names and descriptions, to
provide complete documentation coverage.

Comment on lines +103 to +107
### Updates

The AirGradient integration provides an update entity that checks for firmware updates for your AirGradient device.
To install the update, the device needs to be rebooted.

Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Normalize heading level for “Updates.”

This section is a top-level topic and should use ## to match its peers (e.g., Data updates):

- ### Updates
+ ## Updates
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### Updates
The AirGradient integration provides an update entity that checks for firmware updates for your AirGradient device.
To install the update, the device needs to be rebooted.
## Updates
The AirGradient integration provides an update entity that checks for firmware updates for your AirGradient device.
To install the update, the device needs to be rebooted.
🤖 Prompt for AI Agents
In source/_integrations/airgradient.markdown around lines 103 to 107, the
heading "Updates" is currently using a lower-level heading marker. Change the
heading marker to use `##` instead of a lower level to normalize it as a
top-level section consistent with other peers like "Data updates."

Comment on lines +152 to +156
## Known limitations

The AirGradient integration currently has the following limitations:
- The update entity is not able to install updates automatically. You will need to reboot the device manually after installing the update.

Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Fix list formatting and wording.

Insert a blank line before the bullet and replace “not able to” with “cannot”:

@@ -154,3 +154,5
 The AirGradient integration currently has the following limitations:

+- 
- The update entity is not able to install updates automatically. You will need to reboot the device manually after installing the update.
+ - The update entity cannot install updates automatically. You will need to reboot the device manually after installing the update.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indent 2851 ation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Known limitations
The AirGradient integration currently has the following limitations:
- The update entity is not able to install updates automatically. You will need to reboot the device manually after installing the update.
## Known limitations
The AirGradient integration currently has the following limitations:
- The update entity cannot install updates automatically. You will need to reboot the device manually after installing the update.
🧰 Tools
🪛 LanguageTool

[style] ~155-~155: As a shorter alternative for ‘able to’, consider using “can not”.
Context: ...lowing limitations: - The update entity is not able to install updates automatically. You will...

(BE_ABLE_TO)

🪛 markdownlint-cli2 (0.17.2)

155-155: Lists should be surrounded by blank lines
null

(MD032, blanks-around-lists)

🤖 Prompt for AI Agents
In source/_integrations/airgradient.markdown around lines 152 to 156, fix the
list formatting by inserting a blank line before the bullet point. Also, improve
the wording by replacing "not able to" with "cannot" in the sentence describing
the update entity's limitation.

Copy link
Contributor
@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (3)
source/_includes/integrations/wwha.md (3)

1-1: Disable markdownlint heading rule for include file

This include template shouldn’t start with a top-level heading. Add a markdownlint directive to disable MD041 for this file.

+<!-- markdownlint-disable-file MD041 -->

1-2: Provide fallback for missing URL

include.url may be undefined, resulting in a broken link. Consider defaulting to page.url:

-{% capture url %}{{ include.url }}{% endcapture %}
+{% capture url %}{{ include.url | default: page.url }}{% endcapture %}

4-18: Simplify and harden list formatting

Building formatted_types via a manual loop is verbose and doesn’t guard against empty arrays. You can streamline this with Liquid filters:

{% if page.works_with %}
  {% assign formatted_list = page.works_with | map: "capitalize" %}
  {% assign formatted_types = formatted_list | join: ", " | replace_last: ",", " and" %}
{% endif %}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge Base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between c3bc199 and f69cd07.

📒 Files selected for processing (2)
  • source/_includes/integrations/wwha.md (1 hunks)
  • source/_integrations/third_reality.markdown (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • source/_integrations/third_reality.markdown
🧰 Additional context used
🪛 LanguageTool
source/_includes/integrations/wwha.md

[grammar] ~6-~6: Did you mean “Z-Wave” (= wireless protocol)?
Context: ..._with %} {% case type %} {% when "zwave" %}{% assign formatted_type = "Z-Wave" ...

(Z_WAVE)


[grammar] ~22-~22: Did you mean “Z-Wave” (= wireless protocol)?
Context: ...stant. {% if page.works_with contains "zwave" %} {{ name }} Z-Wave devices work lo...

(Z_WAVE)


[grammar] ~25-~25: Did you mean “Z-Wave” (= wireless protocol)?
Context: ...stantly in Home Assistant. {% my add_zwave_device badge domain=page.ha_domain %} ...

(Z_WAVE)

🪛 markdownlint-cli2 (0.17.2)
source/_includes/integrations/wwha.md

1-1: First line in a file should be a top-level heading
null

(MD041, first-line-heading, first-line-h1)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - home-assistant-docs
  • GitHub Check: Header rules - home-assistant-docs
  • GitHub Check: Pages changed - home-assistant-docs
🔇 Additional comments (3)
source/_includes/integrations/wwha.md (3)

20-20: Description snippet looks good.

The introductory sentence correctly ties together name, url, and formatted_types.


22-29: Z-Wave section is correctly implemented

The conditional check, explanatory text, badge tag, and link for Z-Wave are all consistent with standards.


40-46: Matter section looks solid.

The conditional, description, badge tag, and link for Matter follow the expected pattern.

Comment on lines +31 to +35
{% if page.works_with contains "zigbee" %}
{{ name }} Zigbee devices work locally and integrate seamlessly with the Zigbee integration in Home Assistant (Zigbee stick required). As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.

{% my add_zigbee_device badge brand=page.ha_domain %}

Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Inconsistent badge attribute for Zigbee devices

The add_zigbee_device tag uses brand=page.ha_domain, whereas Z-Wave and Matter badges use domain=page.ha_domain. This discrepancy may break rendering. Align them:

-{% my add_zigbee_device badge brand=page.ha_domain %}
+{% my add_zigbee_device badge domain=page.ha_domain %}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{% if page.works_with contains "zigbee" %}
{{ name }} Zigbee devices work locally and integrate seamlessly with the Zigbee integration in Home Assistant (Zigbee stick required). As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.
{% my add_zigbee_device badge brand=page.ha_domain %}
{% if page.works_with contains "zigbee" %}
{{ name }} Zigbee devices work locally and integrate seamlessly with the Zigbee integration in Home Assistant (Zigbee stick required). As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.
{% my add_zigbee_device badge domain=page.ha_domain %}
🤖 Prompt for AI Agents
In source/_includes/integrations/wwha.md around lines 31 to 35, the
add_zigbee_device tag uses the attribute brand=page.ha_domain, which is
inconsistent with the domain=page.ha_domain attribute used for Z-Wave and Matter
badges. To fix this, change the attribute from brand=page.ha_domain to
domain=page.ha_domain in the add_zigbee_device tag to ensure consistent badge
rendering.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
has-parent This PR has a parent PR in a other repo in-progress This PR/Issue is currently being worked on next This PR goes into the next branch
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0