diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c43bc84fc7f..cbaa7729539 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.3.0 + uses: actions/setup-node@v4.4.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.3.0 + uses: actions/setup-node@v4.4.0 with: node-version: 20 cache: "npm" diff --git a/CODEOWNERS b/CODEOWNERS index 161d1e3a1ab..683e7ef7237 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -9,6 +9,7 @@ # Pages source/_integrations/3_day_blinds.markdown @starkillerOG +source/_integrations/_integration_docs_template.markdown @home-assistant/core source/_integrations/abode.markdown @shred86 source/_integrations/acaia.markdown @zweckj source/_integrations/accuweather.markdown @bieniu @@ -59,6 +60,7 @@ source/_integrations/aosmith.markdown @bdr99 source/_integrations/apache_kafka.markdown @bachya source/_integrations/apcupsd.markdown @yuxincs source/_integrations/api.markdown @home-assistant/core +source/_integrations/apollo_automation.markdown @OttoWinter @jesserockz @kbx81 @bdraco source/_integrations/appalachianpower.markdown @tronikos source/_integrations/apple_tv.markdown @postlund source/_integrations/application_credentials.markdown @home-assistant/core @@ -292,6 +294,7 @@ source/_integrations/forecast_solar.markdown @klaasnicolaas @frenck source/_integrations/forked_daapd.markdown @uvjustin source/_integrations/fortios.markdown @kimfrellsen source/_integrations/foscam.markdown @krmarien +source/_integrations/frankever.markdown @balloob @bieniu @thecode @chemelli74 @bdraco source/_integrations/freebox.markdown @hacf-fr @Quentame source/_integrations/freedompro.markdown @stefano055415 source/_integrations/fritz.markdown @AaronDavidSchneider @chemelli74 @mib1185 @@ -329,7 +332,7 @@ source/_integrations/google_assistant.markdown @home-assistant/cloud source/_integrations/google_assistant_sdk.markdown @tronikos source/_integrations/google_cloud.markdown @lufton @tronikos source/_integrations/google_drive.markdown @tronikos -source/_integrations/google_generative_ai_conversation.markdown @tronikos +source/_integrations/google_generative_ai_conversation.markdown @tronikos @ivanlh source/_integrations/google_mail.markdown @tkdrob source/_integrations/google_photos.markdown @allenporter source/_integrations/google_sheets.markdown @tkdrob @@ -488,6 +491,7 @@ source/_integrations/light.markdown @home-assistant/core source/_integrations/light.template.markdown @home-assistant/core source/_integrations/linak.markdown @abmantis source/_integrations/linear_garage_door.markdown @IceBotYT +source/_integrations/linkedgo.markdown @balloob @bieniu @thecode @chemelli74 @bdraco source/_integrations/linux_battery.markdown @fabaff source/_integrations/linx.markdown @starkillerOG source/_integrations/litejet.markdown @joncar @@ -612,6 +616,7 @@ source/_integrations/nyt_games.markdown @joostlek source/_integrations/nzbget.markdown @chriscla source/_integrations/obihai.markdown @dshokouhi @ejpenney source/_integrations/octoprint.markdown @rfleming71 +source/_integrations/ogemray.markdown @balloob @bieniu @thecode @chemelli74 @bdraco source/_integrations/ohmconnect.markdown @robbiet480 source/_integrations/ohme.markdown @dan-r source/_integrations/ollama.markdown @synesthesiam @@ -683,6 +688,7 @@ source/_integrations/prusalink.markdown @balloob source/_integrations/ps4.markdown @ktnrg45 source/_integrations/pse.markdown @tronikos source/_integrations/psoklahoma.markdown @tronikos +source/_integrations/pterodactyl.markdown @elmurato source/_integrations/pure_energie.markdown @klaasnicolaas source/_integrations/purpleair.markdown @bachya source/_integrations/push.markdown @dgomes @@ -720,6 +726,7 @@ source/_integrations/recorder.markdown @home-assistant/core source/_integrations/recovery_mode.markdown @home-assistant/core source/_integrations/refoss.markdown @ashionky source/_integrations/remote.markdown @home-assistant/core +source/_integrations/remote_calendar.markdown @Thomas55555 source/_integrations/renault.markdown @epenet source/_integrations/renson.markdown @jimmyd-be source/_integrations/reolink.markdown @starkillerOG @@ -810,6 +817,7 @@ source/_integrations/smart_home.markdown @starkillerOG source/_integrations/smart_meter_texas.markdown @grahamwetzler source/_integrations/smart_rollos.markdown @starkillerOG source/_integrations/smarther.markdown @cgtobi +source/_integrations/smartthings.markdown @joostlek source/_integrations/smarttub.markdown @mdz source/_integrations/smarty.markdown @z0mbieprocess source/_integrations/smhi.markdown @gjohansson-ST @@ -881,7 +889,7 @@ source/_integrations/tautulli.markdown @ludeeus @tkdrob source/_integrations/technove.markdown @Moustachauve source/_integrations/tedee.markdown @patrickhilker @zweckj source/_integrations/tellduslive.markdown @fredrike -source/_integrations/template.markdown @PhracturedBlue @home-assistant/core +source/_integrations/template.markdown @Petro31 @PhracturedBlue @home-assistant/core source/_integrations/tesla_fleet.markdown @Bre77 source/_integrations/tesla_wall_connector.markdown @einarhauks source/_integrations/teslemetry.markdown @Bre77 @@ -1021,7 +1029,6 @@ source/_integrations/youless.markdown @gjong source/_integrations/youtube.markdown @joostlek source/_integrations/zabbix.markdown @kruton source/_integrations/zamg.markdown @killer0071234 -source/_integrations/zengge.markdown @emontnemery source/_integrations/zeroconf.markdown @bdraco source/_integrations/zerproc.markdown @emlove source/_integrations/zeversolar.markdown @kvanzuijlen diff --git a/Gemfile b/Gemfile index 3090ef7435f..402b2341c8e 100644 --- a/Gemfile +++ b/Gemfile @@ -10,9 +10,9 @@ group :development do gem 'stringex', '2.8.6' # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' - gem 'sass-embedded', '1.86.1' - gem 'rubocop', '1.75.1' - gem 'ruby-lsp', '0.23.13' + gem 'sass-embedded', '1.87.0' + gem 'rubocop', '1.75.4' + gem 'ruby-lsp', '0.23.15' gem 'rackup', '2.2.1' end @@ -24,7 +24,7 @@ group :jekyll_plugins do end gem 'sinatra', '4.1.1' -gem 'nokogiri', '1.18.7' +gem 'nokogiri', '1.18.8' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # and associated library diff --git a/Gemfile.lock b/Gemfile.lock index c4004cddf08..c9d4c8fa9d6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -22,13 +22,13 @@ GEM compass-import-once (1.0.5) sass (>= 3.2, < 3.5) concurrent-ruby (1.3.5) - csv (3.3.3) + csv (3.3.4) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) eventmachine (1.2.7) - ffi (1.17.1-arm64-darwin) - ffi (1.17.1-x86_64-linux-gnu) + ffi (1.17.2-arm64-darwin) + ffi (1.17.2-x86_64-linux-gnu) forwardable-extended (2.6.0) google-protobuf (4.30.2-arm64-darwin) bigdecimal @@ -70,7 +70,7 @@ GEM nokogiri (~> 1.12) jekyll-watch (2.2.1) listen (~> 3.0) - json (2.10.2) + json (2.11.3) kramdown (2.5.1) rexml (>= 3.3.9) kramdown-parser-gfm (1.1.0) @@ -86,12 +86,12 @@ GEM multi_json (1.15.0) mustermann (3.0.3) ruby2_keywords (~> 0.0.1) - nokogiri (1.18.7-arm64-darwin) + nokogiri (1.18.8-arm64-darwin) racc (~> 1.4) - nokogiri (1.18.7-x86_64-linux-gnu) + nokogiri (1.18.8-x86_64-linux-gnu) racc (~> 1.4) - parallel (1.26.3) - parser (3.3.7.4) + parallel (1.27.0) + parser (3.3.8.0) ast (~> 2.4.1) racc pathutil (0.16.2) @@ -99,7 +99,7 @@ GEM prism (1.4.0) public_suffix (6.0.1) racc (1.8.1) - rack (3.1.12) + rack (3.1.13) rack-protection (4.1.1) base64 (>= 0.1.0) logger (>= 1.6.0) @@ -118,8 +118,8 @@ GEM logger regexp_parser (2.10.0) rexml (3.4.1) - rouge (4.5.1) - rubocop (1.75.1) + rouge (4.5.2) + rubocop (1.75.4) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -127,13 +127,13 @@ GEM parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.43.0, < 2.0) + rubocop-ast (>= 1.44.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.43.0) + rubocop-ast (1.44.1) parser (>= 3.3.7.2) prism (~> 1.4) - ruby-lsp (0.23.13) + ruby-lsp (0.23.15) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 4) @@ -142,9 +142,9 @@ GEM ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.86.1-arm64-darwin) + sass-embedded (1.87.0-arm64-darwin) google-protobuf (~> 4.30) - sass-embedded (1.86.1-x86_64-linux-gnu) + sass-embedded (1.87.0-x86_64-linux-gnu) google-protobuf (~> 4.30) sass-globbing (1.1.5) sass (>= 3.1) @@ -159,7 +159,7 @@ GEM rack-protection (= 4.1.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11980) + sorbet-runtime (0.5.12043) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -182,12 +182,12 @@ DEPENDENCIES jekyll-paginate (= 1.1.0) jekyll-sitemap (= 1.4.0) jekyll-toc (= 0.19.0) - nokogiri (= 1.18.7) + nokogiri (= 1.18.8) rackup (= 2.2.1) rake (= 13.2.1) - rubocop (= 1.75.1) - ruby-lsp (= 0.23.13) - sass-embedded (= 1.86.1) + rubocop (= 1.75.4) + ruby-lsp (= 0.23.15) + sass-embedded (= 1.87.0) sass-globbing (= 1.1.5) sassc (= 2.1.0) sinatra (= 4.1.1) diff --git a/_config.yml b/_config.yml index a41aa1244f4..161cba9b4db 100644 --- a/_config.yml +++ b/_config.yml @@ -107,9 +107,9 @@ social: # Home Assistant release details current_major_version: 2025 -current_minor_version: 3 +current_minor_version: 4 current_patch_version: 4 -date_released: 2025-03-21 +date_released: 2025-04-25 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. @@ -248,8 +248,6 @@ installation: key: "rpi5-64" - name: "Raspberry Pi 4" key: "rpi4-64" - - name: "Raspberry Pi 3" - key: "rpi3-64" generic-x86-64: board: Generic x86-64 diff --git a/package-lock.json b/package-lock.json index 89035173efb..6e9d0b032a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "remark-cli": "^12.0.1", "remark-frontmatter": "^5.0.0", "remark-lint": "^10.0.1", - "remark-lint-fenced-code-flag": "^4.1.1", + "remark-lint-fenced-code-flag": "^4.2.0", "remark-lint-heading-increment": "^4.0.1", "remark-lint-heading-style": "^4.0.1", "remark-lint-no-shell-dollars": "^4.0.1", @@ -4427,9 +4427,9 @@ } }, "node_modules/remark-lint-fenced-code-flag": { - "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==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.2.0.tgz", + "integrity": "sha512-QWGTrnYbcopOFZR98djDREmKApLonJ7hmXE7pEcOGee9JY/EUIVS7Lq54Hy9CtU3cVIvQQmiMTxCwUhfddDJFA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index e7e3e60411d..3dfd15ed5fa 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "remark-cli": "^12.0.1", "remark-frontmatter": "^5.0.0", "remark-lint": "^10.0.1", - "remark-lint-fenced-code-flag": "^4.1.1", + "remark-lint-fenced-code-flag": "^4.2.0", "remark-lint-heading-increment": "^4.0.1", "remark-lint-heading-style": "^4.0.1", "remark-lint-no-shell-dollars": "^4.0.1", diff --git a/sass/homeassistant/plugins/_alert.scss b/sass/homeassistant/plugins/_alert.scss index 39e6e115088..9da28658222 100644 --- a/sass/homeassistant/plugins/_alert.scss +++ b/sass/homeassistant/plugins/_alert.scss @@ -1,55 +1,62 @@ div.alert { + background: #e7f2fa; + border-radius: 16px; + margin-bottom: 24px; + padding: 20px 24px 20px 24px; position: relative; - background: #e7f2fa; - - padding: 20px 24px 20px 24px; - margin-bottom: 24px; - border-radius: 16px; + >:last-child { + margin-bottom: 0; + } p { - margin-bottom: 0px; &.alert-title { font-weight: bold; line-height: 1.5em; } + &.alert-content { padding: 6px; } } &.alert-note { + background-color: #e7f2fa; + p.alert-title { color: #6ab0de; } - background-color: #e7f2fa; } &.alert-tip { + background-color: #e6f4ea; + p.alert-title { color: #4caf50; } - background-color: #e6f4ea; } &.alert-important { + background-color: #ede7f6; + p.alert-title { color: #7e57c2; } - background-color: #ede7f6; } &.alert-warning { + background-color: #f7f9e1; + p.alert-title { color: rgb(187, 185, 13); } - background-color: #f7f9e1; } &.alert-caution { + background-color: #fdecea; + p.alert-title { color: #d32f2f; } - background-color: #fdecea; } -} +} \ No newline at end of file diff --git a/source/_dashboards/area.markdown b/source/_dashboards/area.markdown index be21b487ee8..86cfe5e343f 100644 --- a/source/_dashboards/area.markdown +++ b/source/_dashboards/area.markdown @@ -8,6 +8,8 @@ related: title: Themes - docs: /dashboards/cards/ title: Dashboard cards + - docs: /dashboards/dashboards/#areas-dashboard + title: Areas dashboard --- The area card lets you control and monitor an individual {% term area %}. diff --git a/source/_dashboards/clock.markdown b/source/_dashboards/clock.markdown index 64de1b579ec..e46deac1691 100644 --- a/source/_dashboards/clock.markdown +++ b/source/_dashboards/clock.markdown @@ -8,7 +8,7 @@ related: title: Setup your time format and timezone --- -The Clock card shows the current time in a variety of formats and sizes. +The Clock card shows the current time in a variety of formats, sizes and time zones.

Screenshot of the clock card @@ -23,12 +23,16 @@ All options for this card can be configured via the user interface. ## Card settings {% configuration_basic %} +Title: + description: Adds a title to the top of the card Clock Size: description: Adjusts the size of the text allowing a wider range of use with different types of dashboards. Defaults to small. Display Seconds: description: Shows seconds alongside the clock, providing the time format is in a 12-hour format. Time Format: description: Allows the time format to be changed on a per-card level. Defaults to the user profile setting. +Time Zone: + description: Change the timezone used for the time on a per-card level. Defaults to the user profile setting. {% endconfiguration_basic %} ### Examples @@ -39,25 +43,21 @@ Basic example: type: clock ``` -Clock card with no configuration -

Screenshot of the basic clock card Screenshot of the basic clock card

+ +Example of a larger clock card for tablet dashboards: + ```yaml type: clock clock_size: large time_format: "12" show_seconds: true -grid_options: - columns: 12 - rows: 2 ``` -Example of a larger clock card for tablet dashboards: -

Screenshot of a large sized, 12 hour clock card showing am/pm and seconds Screenshot of a large sized, 12 hour clock card showing am/pm and seconds @@ -75,4 +75,35 @@ show_seconds: false

Screenshot of a medium sized, 12 hour clock showing am/pm Screenshot of a medium sized, 12 hour clock showing am/pm -

\ No newline at end of file +

+ +A medium-sized, 24 hour clock using the London timezone with a title + +```yaml +type: clock +clock_size: medium +time_zone: Europe/London +title: London 💂 + +``` + +

+Screenshot of a medium sized, 24 hour clock showing seconds based in London along with a title +Screenshot of a medium sized, 24 hour clock showing seconds based in London along with a title +

+ +A medium-sized, 12 hour clock using the New York timezone with a title + +```yaml +type: clock +clock_size: medium +time_format: "12" +time_zone: America/New_York +title: New York 🦅 + +``` + +

+Screenshot of a medium sized, 12 hour clock showing am/pm and seconds based in New York along with a title +Screenshot of a medium sized, 12 hour clock showing am/pm and seconds based in New York along with a title +

diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index 9a294ae2935..819b91ce014 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -261,6 +261,12 @@ link: /docs/configuration/events/ aliases: - events +- term: Event entity + definition: >- + Events are signals that are emitted when something happens, for example, + when a user presses a physical button like a doorbell or when a button on a + remote control is pressed. + link: /integrations/event - term: Floor definition: >- A floor in Home Assistant is a logical grouping of areas that are meant to diff --git a/source/_data/products.yml b/source/_data/products.yml index d18c2ab6691..15ed52da65f 100644 --- a/source/_data/products.yml +++ b/source/_data/products.yml @@ -486,3 +486,8 @@ voice-pe: ship_to: Europe url: https://www.pi-shop.ch/home-assistant-voice-preview-edition logo: /images/distributors/pi-shop.webp + - name: ROBBshop + ship_from: Netherlands + ship_to: Europe + url: https://www.robbshop.nl/home-assistant-voice-preview-edition + logo: /images/distributors/robb.webp diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index a51b2870e3a..c26ec5882ab 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -696,7 +696,7 @@ A string that represents a time to fire on each day. Can be specified as `HH:MM` automation: - triggers: - trigger: time - # Military time format. This trigger will fire at 3:32 PM + # 24-hour time format. This trigger will fire at 3:32 PM at: "15:32:00" ``` diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index 822ded95bb0..4cfe13d1c35 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -173,7 +173,7 @@ entity: required: false domain: description: > - Limits the list of areas that provide entities of a certain domain(s), + Limits the list of areas that provide entities of a certain [domain(s)](/docs/configuration/entities_domains/#domains), for example, [`light`](/integrations/light) or [`binary_sensor`](/integrations/binary_sensor). Can be either a string with a single domain, or a list of string domains to limit the selection to. @@ -521,7 +521,7 @@ entity: required: false domain: description: > - Limits the list of devices that provide entities of a certain domain(s), + Limits the list of devices that provide entities of a certain [domain(s)](/docs/configuration/entities_domains/#domains), for example, [`light`](/integrations/light) or [`binary_sensor`](/integrations/binary_sensor). Can be either a string with a single domain, or a list of string domains to limit the selection @@ -694,7 +694,7 @@ filter: required: false domain: description: > - Limits the list of entities to entities of a certain domain(s), for example, + Limits the list of entities to entities of a certain [domain(s)](/docs/configuration/entities_domains/#domains), for example, [`light`](/integrations/light) or [`binary_sensor`](/integrations/binary_sensor). Can be either a string with a single domain, or a list of string domains to limit the selection @@ -826,7 +826,7 @@ entity: required: false domain: description: > - When set, the list only includes floors that have entities of certain domains, + When set, the list only includes floors that have entities of certain [domains](/docs/configuration/entities_domains/#domains), for example, [`light`](/integrations/light) or [`binary_sensor`](/integrations/binary_sensor). Can be either a string with a single domain, or a list of string domains to limit the selection to. @@ -1380,7 +1380,7 @@ entity: required: false domain: description: > - Limits the targets to entities of a certain domain(s), + Limits the targets to entities of a certain [domain(s)](/docs/configuration/entities_domains/#domains), for example, [`light`](/integrations/light) or [`binary_sensor`](/integrations/binary_sensor). Can be either a with a single domain, or a list of string domains to limit the diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 0145946e41b..323786ae9ae 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -741,7 +741,7 @@ For example, if you wanted to select a field from `trigger` in an automation bas - `utcnow()` returns a datetime object of the current time in the UTC timezone. - For specific values: `utcnow().second`, `utcnow().minute`, `utcnow().hour`, `utcnow().day`, `utcnow().month`, `utcnow().year`, `utcnow().weekday()` and `utcnow().isoweekday()`. - Using `utcnow()` will cause templates to be refreshed at the start of every new minute. -- `today_at(value)` converts a string containing a military time format to a datetime object with today's date in your time zone. Defaults to midnight (`00:00`). +- `today_at(value)` converts a string containing a 24-hour time format to a datetime object with today's date in your time zone. Defaults to midnight (`00:00`). - Using `today_at()` will cause templates to be refreshed at the start of every new minute. @@ -758,6 +758,8 @@ For example, if you wanted to select a field from `trigger` in an automation bas - `as_timestamp(value, default)` converts a datetime object or string to UNIX timestamp. If that fails, returns the `default` value, or if omitted raises an error. This function can also be used as a filter. - `as_local()` converts a datetime object to local time. This function can also be used as a filter. - `strptime(string, format, default)` parses a string based on a [format](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior) and returns a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error. +- `relative_time` converts a datetime object to its human-friendly "age" string. The age can be in seconds, minutes, hours, days, months, or years (but only the biggest unit is considered. For example, if it's 2 days and 3 hours, "2 days" will be returned). Note that it only works for dates _in the past_. + - Using `relative_time()` will cause templates to be refreshed at the start of every new minute. - `time_since(datetime, precision)` converts a datetime object into its human-readable time string. The time string can be in seconds, minutes, hours, days, months, and years. `precision` takes an integer (full number) and indicates the number of units returned. The last unit is rounded. For example: `precision = 1` could return "2 years" while `precision = 2` could return "1 year 11 months". This function can also be used as a filter. If the datetime is in the future, returns 0 seconds. A precision of 0 returns all available units, default is 1. @@ -1650,11 +1652,13 @@ Example value template: With given payload: ```json -{ "state": "ON", "temperature": 21.902 } +{ "state": "ON", "temperature": 21.902, "humidity": null } ``` Template {% raw %}`{{ value_json.temperature | round(1) }}`{% endraw %} renders to `21.9`. +Template {% raw %}`{{ value_json.humidity }}`{% endraw %} renders to `None`. + {% endnote %} #### Using command templates with MQTT diff --git a/source/_docs/energy/individual-devices.markdown b/source/_docs/energy/individual-devices.markdown index ec6222a18c2..9a2c734ee24 100644 --- a/source/_docs/energy/individual-devices.markdown +++ b/source/_docs/energy/individual-devices.markdown @@ -22,3 +22,19 @@ Smart relays sit behind your "normal" switches and make them smart. It allows yo Some smart devices, such as air conditioning, boilers, and others, may provide a power sensor, measured in Watts. You can use the [Integration (Riemann sum integral) integration](/integrations/integration/#energy) to calculate the energy your device is using. You can then use the energy sensor in the Energy Dashboard, as individual devices. For information on setting up an entity for use in the **Energy** dashboard, refer to the [energy FAQ](/docs/energy/faq/#troubleshooting-missing-entities). Graphic showing energy flowing from the home to individual devices. + +## Upstream devices and hierarchies + +You can create a hierarchy of devices by setting one device as an "upstream device" of another. This means you can now establish parent-child relationships between devices within your energy configuration. + +For example, imagine having a breaker monitoring the total energy consumption of a circuit, but also separately tracking individual devices connected to that circuit. Without setting the device hierarchies, Home Assistant might double-count this usage. By setting the hierarchy, it understands these relationships and accurately shows the individual device usage without duplication. +To set up an upstream device relationship: + +1. Add an energy consumption entity as an individual device. +2. Then, when configuring other individual devices, you can select the previously added individual entity as their upstream device. + +This hierarchical view helps you understand which devices are consuming power from which sources and prevents energy from being counted multiple times. + +{% important %} +To set up a hierarchy, you must first add all related entities as individual devices in the energy dashboard. Only devices that are already listed under individual devices can be selected as "upstream device" for other devices. +{% endimportant %} diff --git a/source/_docs/energy/water.markdown b/source/_docs/energy/water.markdown index e26f36e6519..8dfb726ee1b 100644 --- a/source/_docs/energy/water.markdown +++ b/source/_docs/energy/water.markdown @@ -65,6 +65,8 @@ Maybe you like to build one yourself? - [watermeter](https://github.com/nohn/watermeter) running classic OCR and statistical pattern recognition on any system supporting Docker - [Muino water meter reader 3-phase](https://muino.nl/product/3-phase-muino-light-sensor-encoder/) Using the 3-phase sensor technique, a battery-powered version can be possible with this sensor. - [Read water meter with magnetometer](https://github.com/tronikos/esphome-magnetometer-water-gas-meter) using [QMC5883L](https://esphome.io/components/sensor/qmc5883l.html) or [HMC5883L](https://esphome.io/components/sensor/hmc5883l.html), common and inexpensive magnetometers. This should be compatible with all the water meters the Flume water sensor is compatible with, which is [compatible](https://help.flumewater.com/en/articles/1618594-is-the-flume-device-compatible-with-all-water-meters) with about 95% of water meters in the United States. +- Some watermeters use [Wireless M-Bus](https://en.wikipedia.org/wiki/Meter-Bus) for remote metering. [wmbusmeters project](https://github.com/wmbusmeters/wmbusmeters/) can automatically capture, decode, decrypt and convert M-Bus packets to MQTT. It supports several M-Bus receivers, including RTL-SDR using [rtl-wmbus library](https://github.com/xaelsouth/rtl-wmbus). You can also build a WMBus [ESPHome-based receiver](https://github.com/SzczepanLeon/esphome-components). An [add-on](https://github.com/wmbusmeters/wmbusmeters-ha-addon) for Home Assistant exists for easy installation and configuration. See the [community page](https://community.home-assistant.io/t/add-on-request-wmbusmeter/228988) for more. +- Read water (or gas) usage data from the Itron EverBlu Cyble Enhanced RF meters using the RADIAN protocol over 433 MHz [everblu-meters-esp8266/esp32](https://github.com/genestealer/everblu-meters-esp8266-improved), via an ESP32/ESP8266 and a CC1101 transceiver. Used across the UK and Europe. Fully integrates with Home Assistant using MQTT AutoDiscovery. According to available documentation, this method may also work with AnyQuest Cyble Enhanced, EverBlu Cyble, and AnyQuest Cyble Basic, but these remain untested. If you manually integrate your sensors, for example, using the [MQTT](/integrations/mqtt) or [RESTful](/integrations/rest) integrations: Make sure you set and provide the `device_class`, `state_class`, and `unit_of_measurement` for those sensors. diff --git a/source/_docs/organizing/areas.markdown b/source/_docs/organizing/areas.markdown index 93eebe78323..e26cb6a1cfc 100644 --- a/source/_docs/organizing/areas.markdown +++ b/source/_docs/organizing/areas.markdown @@ -11,6 +11,8 @@ related: title: Categories - docs: /docs/configuration/templating/#areas title: Using areas in template + - docs: /dashboards/dashboards/#areas-dashboard + title: Areas dashboard --- An area in Home Assistant is a logical grouping of {% term devices %} and {% term entities %} that are meant to match areas (or rooms) in the physical world of your home. @@ -49,7 +51,7 @@ If an area has not yet been assigned to a floor, it is shown in the **Unassigned ## Assigning an area to multiple items -You can assign an area to multiple items at once in the automation, scene, script, and device pages. +You can assign an area to multiple items at once in the {% term automation %}, {% term scene %}, {% term script %}, and {% term device %} pages. 1. Depending on what you want to assign, go to one of the following pages: - For automations, scripts, or scenes {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab. @@ -76,6 +78,15 @@ Follow these steps to edit an area. - Add an **Alias**. - Aliases are alternative names used in [voice assistants](/voice_control/aliases/) to refer to an area, entity, or floor. +## Using the Areas dashboard + +Once you have assigned your entities to areas, you can use the **Areas** dashboard. The **Areas** dashboard is a pre-populated dashboard that shows your {% term entities %} grouped by areas. To learn how, refer to the documentation on the [Areas dashboard](/dashboards/dashboards/#areas-dashboard). + +

+Screenshot of the Areas default dashboard +Screenshot of the Areas default dashboard. +

+ ## Deleting an area Follow these steps to delete an area. It will be removed from all the floors it was assigned to. All the devices that were assigned to this area will become unassigned. diff --git a/source/_includes/common-tasks/backups.md b/source/_includes/common-tasks/backups.md index 00f86cf157b..b209b7c9c10 100644 --- a/source/_includes/common-tasks/backups.md +++ b/source/_includes/common-tasks/backups.md @@ -130,12 +130,12 @@ There are two ways to download the backup from Home Assistant Cloud: - **Option 1**: From the backups page 1. Got to {% my supervisor_backups title="**Settings** > **System** > **Backups**" %} and select **Show all backups**. - 2. Under **Stored files**, you can see the latest available backup file. Select the download button. + 2. Select the backup from the list. + 3. Under **Locations**, select the three dots {% icon "mdi:dots-vertical" %} and select **Download from this location**. - **Option 2**: From your Home Assistant Cloud account 1. Log in to your [Home Assistant Cloud account](https://account.nabucasa.com/). - 2. Select the backup from the list. - 3. Under **Locations**, select the three dots {% icon "mdi:dots-vertical" %} and select **Download from this location**. + 2. Under **Stored files**, you can see the latest available backup file. Select the download button. ### Deleting obsolete backups @@ -143,12 +143,19 @@ If you defined an automatic backup and backup purge schedule, old backups are de To delete old backups, follow these steps: -1. Under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}, select **Show all backups**. -2. To delete one backup, on the list, select the backup of interest. +1. In Home Assistant, under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}, select **Show all backups**. +2. To **delete one backup**: from the list, select the backup of interest. - Select the three dots {% icon "mdi:dots-vertical" %} menu and select **Delete**. -3. To delete multiple backups, select the {% icon "mdi:order-checkbox-ascending" %} button. +3. To **delete multiple backups**: select the {% icon "mdi:order-checkbox-ascending" %} button. - From the list of backups, select all the ones you want to delete and select **Delete selected**. - {% icon "mdi:information-outline" %} Consider keeping at least one recent backup for recovery purposes. +4. To **delete a backup that is stored on Home Assistant Cloud**, you have 2 options: + - **Option 1**: Trigger backup deletion from within Home Assistant + - Follow steps 1 and 2 from above. + - Even though you select **Delete** in Home Assistant, it will be deleted from Home Assistant Cloud storage. + - **Option 2**: Delete the backup from the Nabu Casa account page. + - Log in to your [Nabu Casa account](https://account.nabucasa.com/). + - Under **Backups**, delete the backup. ### Restoring a backup @@ -187,17 +194,24 @@ You can use a backup during the onboarding process to restore your configuration 1. If you are migrating to a new device and you had controllers or radios connected (such as a Z-Wave stick or Connect ZBT-1): - make sure to plug them into the new device. -2. After Home Assistant has been installed, on the welcome screen, select **Restore from backup**. - - Then, select **Upload backup**. - - The file explorer opens on the device on which you are viewing the Home Assistant User interface. - - You can access any connected network drive from there. -3. Select the backup file, then, in the dialog, select all parts you want to restore. - - Your current system will be overwritten with the parts that you choose to restore. - - If you want to restore the complete configuration with all directories and add-ons, select everything. -4. Under **Backup password**, enter the encryption key stored in the [backup emergency kit](/more-info/backup-emergency-kit/). -5. To start the process, select **Restore**. +2. You can either restore a backup from your local machine or a backup stored on Home Assistant Cloud: + - **Option 1**: restoring from a local backup. + - On the welcome screen, select **Upload backup**. + - Select **Select backup file**. + - The file explorer opens on the device on which you are viewing the Home Assistant User interface. + - You can access any connected network drive from there. + - Select the backup file. + - **Option 2**: restoring from a Home Assistant Cloud backup. + - On the welcome screen, select **Home Assistant Cloud**. + - Sign in to Home Assistant Cloud. +3. In the dialog, select all the parts you want to restore. + - Your current system will be overwritten with the parts that you choose to restore. + - If you want to restore the complete configuration with all directories and add-ons, select everything. +4. Enter the encryption key stored in the [backup emergency kit](/more-info/backup-emergency-kit/). +5. To start the process, select **Restore backup**. - The restore may take a while, depending on the amount of data. - - To see if the restore is complete, reload the page from time to time. + - Don't refresh the page. Just wait. + - If you refresh the page, you will see a "Not found" message. This is because the system is shutdown, wiped, and reinstalled from the backup. During that time, it won't be reachable. - If your previous installation had certificates enabled directly for the [`http` integration](/integrations/http), when the restore is complete, it will no longer respond to `http://` requests. In this case, use `https://` (added `s`) instead. 6. On the login screen, enter the credentials of the system from which you took the backup. - The login password and username must match the ones you used at the time the backup was taken. diff --git a/source/_includes/custom/news.html b/source/_includes/custom/news.html index 2bdc35e4076..5610e459f6f 100644 --- a/source/_includes/custom/news.html +++ b/source/_includes/custom/news.html @@ -1,30 +1,73 @@ -