diff --git a/Dockerfile b/.devcontainer/Dockerfile
similarity index 76%
rename from Dockerfile
rename to .devcontainer/Dockerfile
index a5c00fa85ad..ed7283a0f35 100644
--- a/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -3,6 +3,7 @@ FROM mcr.microsoft.com/vscode/devcontainers/ruby:${VARIANT}
ARG NODE_VERSION="lts/*"
RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"
+RUN su vscode -c "/usr/local/rvm/bin/rvm fix-permissions"
# Locale env vars
ENV \
@@ -17,7 +18,3 @@ RUN \
ack \
&& echo "en_US UTF-8" > /etc/locale.gen \
&& locale-gen en_US.UTF-8
-
-# Install the specific version of bundler we need
-COPY Gemfile.lock ./
-RUN gem install bundler -v `awk 'c&&c--;/BUNDLED WITH/{c=1}' Gemfile.lock`
\ No newline at end of file
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 9db615d42bc..c34491e5358 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,16 +1,19 @@
{
"name": "home-assistant.io",
"build": {
- "dockerfile": "../Dockerfile",
+ "dockerfile": "./Dockerfile",
"context": "..",
"args": {
- "VARIANT": "2.7",
- "NODE_VERSION": "18"
+ "VARIANT": "3.1",
+ "NODE_VERSION": "20"
}
},
"appPort": [4000],
"onCreateCommand": "bundle install && npm install",
- "containerEnv": { "DEVCONTAINER": "true" },
+ "containerEnv": {
+ "DEVCONTAINER": "true",
+ "BUNDLE_PATH": "vendor/bundle"
+ },
"customizations": {
"vscode": {
"extensions": [
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index c147b84c11a..0e94eee4c6b 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -12,7 +12,7 @@ jobs:
- name: Setting up Node.js
uses: actions/setup-node@v4.0.1
with:
- node-version: 16.x
+ node-version: 20
cache: "npm"
- name: Install dependencies
run: npm install
@@ -29,7 +29,7 @@ jobs:
- name: Setting up Node.js
uses: actions/setup-node@v4.0.1
with:
- node-version: 16.x
+ node-version: 20
cache: "npm"
- name: Install dependencies
run: npm install
diff --git a/.ruby-version b/.ruby-version
index 37c2961c243..0aec50e6ede 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-2.7.2
+3.1.4
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 199390c8fce..f2b8a48dbe1 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -4,7 +4,7 @@
"editorconfig.editorconfig",
"GitHub.vscode-pull-request-github",
"mrmlnc.vscode-scss",
- "rebornix.Ruby",
+ "Shopify.ruby-lsp",
"streetsidesoftware.code-spell-checker",
"taichi.vscode-textlint",
"yzhang.markdown-all-in-one"
diff --git a/Gemfile b/Gemfile
index 47c3b7df813..0ac5a5572b1 100644
--- a/Gemfile
+++ b/Gemfile
@@ -4,12 +4,14 @@ ruby '> 2.5.0'
group :development do
gem 'rake', '13.1.0'
- gem 'jekyll', '4.3.2'
+ gem 'jekyll', '4.3.3'
gem 'compass', '1.0.3'
gem 'sass-globbing', '1.1.5'
gem 'stringex', '2.8.6'
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
gem 'sassc', '2.1.0'
+ gem 'rubocop', '1.59.0'
+ gem 'ruby-lsp', '0.13.2'
end
group :jekyll_plugins do
@@ -19,8 +21,8 @@ group :jekyll_plugins do
gem 'jekyll-toc', '0.18.0'
end
-gem 'sinatra', '3.1.0'
-gem 'nokogiri', '1.15.5'
+gem 'sinatra', '3.2.0'
+gem 'nokogiri', '1.16.0'
# 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 c3463c6b54a..ca024f3bcbe 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -3,6 +3,8 @@ GEM
specs:
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
+ ast (2.4.2)
+ base64 (0.2.0)
chunky_png (1.4.0)
colorator (1.1.0)
commonmarker (0.23.10)
@@ -23,14 +25,13 @@ GEM
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
- eventmachine (1.2.7-x64-mingw32)
ffi (1.16.3)
forwardable-extended (2.6.0)
- google-protobuf (3.25.1)
+ google-protobuf (3.25.1-x86_64-linux)
http_parser.rb (0.8.0)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
- jekyll (4.3.2)
+ jekyll (4.3.3)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
@@ -58,54 +59,76 @@ GEM
nokogiri (~> 1.12)
jekyll-watch (2.2.1)
listen (~> 3.0)
+ json (2.7.1)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
+ language_server-protocol (3.17.0.3)
liquid (4.0.4)
listen (3.8.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
- mini_portile2 (2.8.5)
multi_json (1.15.0)
mustermann (3.0.0)
ruby2_keywords (~> 0.0.1)
- nokogiri (1.15.5)
- mini_portile2 (~> 2.8.2)
+ nokogiri (1.16.0-x86_64-linux)
racc (~> 1.4)
+ parallel (1.24.0)
+ parser (3.2.2.4)
+ ast (~> 2.4.1)
+ racc
pathutil (0.16.2)
forwardable-extended (~> 2.6)
+ prism (0.19.0)
public_suffix (5.0.4)
racc (1.7.3)
rack (2.2.8)
- rack-protection (3.1.0)
+ rack-protection (3.2.0)
+ base64 (>= 0.1.0)
rack (~> 2.2, >= 2.2.4)
+ rainbow (3.1.1)
rake (13.1.0)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
+ regexp_parser (2.8.3)
rexml (3.2.6)
rouge (4.2.0)
+ rubocop (1.59.0)
+ json (~> 2.3)
+ language_server-protocol (>= 3.17.0)
+ parallel (~> 1.10)
+ parser (>= 3.2.2.4)
+ rainbow (>= 2.2.2, < 4.0)
+ regexp_parser (>= 1.8, < 3.0)
+ rexml (>= 3.2.5, < 4.0)
+ rubocop-ast (>= 1.30.0, < 2.0)
+ ruby-progressbar (~> 1.7)
+ unicode-display_width (>= 2.4.0, < 3.0)
+ rubocop-ast (1.30.0)
+ parser (>= 3.2.1.0)
+ ruby-lsp (0.13.2)
+ language_server-protocol (~> 3.17.0)
+ prism (>= 0.19.0, < 0.20)
+ sorbet-runtime (>= 0.5.5685)
+ ruby-progressbar (1.13.0)
ruby2_keywords (0.0.5)
safe_yaml (1.0.5)
sass (3.4.25)
- sass-embedded (1.63.6)
- google-protobuf (~> 3.23)
- rake (>= 13.0.0)
- sass-embedded (1.63.6-x64-mingw32)
- google-protobuf (~> 3.23)
+ sass-embedded (1.69.7-x86_64-linux-gnu)
+ google-protobuf (~> 3.25)
sass-globbing (1.1.5)
sass (>= 3.1)
- sassc (2.1.0)
+ sassc (2.1.0-x86_64-linux)
ffi (~> 1.9)
- sassc (2.1.0-x64-mingw32)
- ffi (~> 1.9)
- sinatra (3.1.0)
+ sinatra (3.2.0)
mustermann (~> 3.0)
rack (~> 2.2, >= 2.2.4)
- rack-protection (= 3.1.0)
+ rack-protection (= 3.2.0)
tilt (~> 2.0)
+ sorbet-runtime (0.5.11164)
stringex (2.8.6)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@@ -118,21 +141,22 @@ GEM
webrick (1.8.1)
PLATFORMS
- ruby
- x64-mingw32
+ x86_64-linux
DEPENDENCIES
compass (= 1.0.3)
- jekyll (= 4.3.2)
+ jekyll (= 4.3.3)
jekyll-commonmark (= 1.4.0)
jekyll-paginate (= 1.1.0)
jekyll-sitemap (= 1.4.0)
jekyll-toc (= 0.18.0)
- nokogiri (= 1.15.5)
+ nokogiri (= 1.16.0)
rake (= 13.1.0)
+ rubocop (= 1.59.0)
+ ruby-lsp (= 0.13.2)
sass-globbing (= 1.1.5)
sassc (= 2.1.0)
- sinatra (= 3.1.0)
+ sinatra (= 3.2.0)
stringex (= 2.8.6)
tzinfo (~> 2.0)
tzinfo-data
@@ -141,4 +165,4 @@ RUBY VERSION
ruby 2.6.2p47
BUNDLED WITH
- 2.2.28
+ 2.5.3
diff --git a/source/_dashboards/conditional.markdown b/source/_dashboards/conditional.markdown
index d025ed9d71b..9c4d23f1696 100644
--- a/source/_dashboards/conditional.markdown
+++ b/source/_dashboards/conditional.markdown
@@ -7,12 +7,7 @@ description: The Conditional card displays another card based on conditions.
The conditional card displays another card based on conditions.
-
-
- Screenshot of the conditional card.
-
-
-Note: if there are multiple conditions there will be treated as an 'and' condition. This means that for the card to show, _all_ conditions must be met.
+
{% include dashboard/edit_dashboard.md %}
Note that while editing the dashboard, the card will always be shown, so be sure to exit editing mode to test the conditions.
@@ -40,6 +35,7 @@ card:
## Examples
+Only show when all the conditions are met:
```yaml
type: conditional
conditions:
@@ -62,6 +58,25 @@ card:
- light.bed_light
```
+Example condition where only one of the conditions needs to be met:
+```yaml
+type: conditional
+conditions:
+ - condition: or
+ conditions:
+ - condition: state
+ entity: binary_sensor.co_alert
+ state: 'on'
+ - condition: state
+ entity: binary_sensor.rookmelder
+ state: 'on'
+card:
+ type: entities
+ entities:
+ - binary_sensor.co_alert
+ - binary_sensor.rookmelder
+```
+
## Card conditions
### State
diff --git a/source/_docs/configuration/yaml.markdown b/source/_docs/configuration/yaml.markdown
index d3f2adda226..6cd47527289 100644
--- a/source/_docs/configuration/yaml.markdown
+++ b/source/_docs/configuration/yaml.markdown
@@ -3,7 +3,7 @@ title: "YAML"
description: "Details about YAML to configure Home Assistant."
---
-Home Assistant uses the [YAML](https://yaml.org/) syntax for configuration. YAML might take a while to get used to but is really powerful in allowing you to express complex configurations.
+Home Assistant uses the [YAML](https://yaml.org/) syntax for configuration. YAML might take a while to get used to but is powerful in allowing you to express complex configurations.
While more and more integrations are configured through the UI, for some, you will add code in your [`configuration.yaml`](/docs/configuration/) file to specify its settings.
@@ -21,15 +21,15 @@ notify:
The basics of YAML syntax are block collections and mappings containing key-value pairs. Each item in a collection starts with a `-` while mappings have the format `key: value`. This is somewhat similar to a Hash table or more specifically a dictionary in Python. These can be nested as well. **Beware that if you specify duplicate keys, the last value for a key is used**.
-Note that indentation is an important part of specifying relationships using YAML. Things that are indented are nested "inside" things that are one level higher. So in the above example, `platform: pushbullet` is a property of (nested inside) the `notify` integration.
+In YAML, indentation is important for specifying relationships. Indented lines are nested inside lines that are one level higher. In the above example, `platform: pushbullet` is a property of (nested inside) the `notify` integration.
-Getting the right indentation can be tricky if you're not using an editor with a fixed width font. Tabs are not allowed to be used for indentation. Convention is to use 2 spaces for each level of indentation.
+Getting the right indentation can be tricky if you're not using an editor with a fixed-width font. Tabs are not allowed to be used for indentation. The convention is to use 2 spaces for each level of indentation.
-You can use the online service [YAML Validator](https://codebeautify.org/yaml-validator/) to check if your YAML syntax is correct before loading it into Home Assistant which will save you some time. If you do so, be aware that this is a third-party service and is not maintained by the Home Assistant community.
+To check if your YAML syntax is correct before loading it into Home Assistant, you can use the third-party service [YAML Validator](https://codebeautify.org/yaml-validator/) (not maintained by the Home Assistant community).
-Please pay attention to not storing private data (passwords, API keys, etc.) directly in your `configuration.yaml` file. Private data can be stored in either a [separate file](/docs/configuration/secrets/) or in [environmental variables](/docs/configuration/yaml/#using-environment-variables), which circumvents this security problem.
+Pay attention to not storing private data (passwords, API keys, etc.) directly in your `configuration.yaml` file. Private data can be stored in either a [separate file](/docs/configuration/secrets/) or in [environmental variables](/docs/configuration/yaml/#using-environment-variables), which circumvents this security problem.
@@ -76,7 +76,7 @@ example:
#### Default value
-If an environment variable is not set, you can fallback to a default value.
+If an environment variable is not set, you can fall back to a default value.
```yaml
example:
diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown
index 850b6e6fce9..4e0db15cff8 100644
--- a/source/_integrations/alexa.smart_home.markdown
+++ b/source/_integrations/alexa.smart_home.markdown
@@ -1044,7 +1044,6 @@ Only temperature sensors are configured at this time.
- _"Alexa, what's the temperature in the kitchen?"_
- _"Alexa, what's the upstairs temperature?"_
-- _"Alexa, what's the temperature of my ex-girlfriend's heart?"_
### Switch, Input Boolean
diff --git a/source/_integrations/aruba.markdown b/source/_integrations/aruba.markdown
index 0778e577d8a..55741baae04 100644
--- a/source/_integrations/aruba.markdown
+++ b/source/_integrations/aruba.markdown
@@ -16,6 +16,9 @@ This platform allows you to detect presence by looking at connected devices to a
Supported devices (tested):
- Aruba AP-105
+- Aruba AP-505
+- Aruba AP-515
+- Aruba IAP-315
- Aruba IAP-335
- Aruba Instant IAP-275
diff --git a/source/_integrations/dormakaba_dkey.markdown b/source/_integrations/dormakaba_dkey.markdown
index f490e7bb799..a35f3599af6 100644
--- a/source/_integrations/dormakaba_dkey.markdown
+++ b/source/_integrations/dormakaba_dkey.markdown
@@ -28,6 +28,6 @@ In addition to a lock entity, each added dKey lock will also have:
-The Dormakaba dKey lock is currently not working with USB dongles or built-in Bluetooth radios, only [ESPHome Bluetooth proxies](/integrations/bluetooth/#remote-adapters-bluetooth-proxies) work reliably.
+The Dormakaba dKey lock is currently not working with USB dongles or built-in Bluetooth radios, only [ESPHome Bluetooth proxies](/integrations/bluetooth/#remote-adapters-bluetooth-proxies) configured to allow active connections work reliably.
diff --git a/source/_integrations/growatt_server.markdown b/source/_integrations/growatt_server.markdown
index 3063255ff78..d9f5fb77a2c 100644
--- a/source/_integrations/growatt_server.markdown
+++ b/source/_integrations/growatt_server.markdown
@@ -13,7 +13,7 @@ ha_config_flow: true
ha_integration_type: integration
---
-This is a sensor to collect information from your Growatt inverters using [Growatt server](https://server.growatt.com/) by default. It is possible to specify an alternative endpoint server at configuration time e.g., [SMTEN](https://server.smten.com/).
+This is a sensor to collect information from your Growatt inverters using [Growatt server](https://server.growatt.com/) by default. It is possible to specify an alternative endpoint server at configuration time e.g., [SMTEN](https://server.smten.com/). To see the latest supported servers, add the integration in Home Assistant to see the configuration options.
This will log into your Growatt account and grab the first "Plant", after which it collects the inverters on this plant and creates sensors for these inverters as well as total sensors.
diff --git a/source/_integrations/modem_callerid.markdown b/source/_integrations/modem_callerid.markdown
index 75fcb248439..a49a8b97ae3 100644
--- a/source/_integrations/modem_callerid.markdown
+++ b/source/_integrations/modem_callerid.markdown
@@ -23,6 +23,14 @@ This integration also offers a button to pick up and then hang up the call to pr
{% include integrations/config_flow.md %}
+## Compatibility
+
+Reported models with this integration include that work:
+- [StarTech.com USB56KEMH2](https://www.startech.com/en-us/networking-io/usb56kemh2)
+
+Devices that did not work:
+- [StarTech.com USB56KEM3](https://www.startech.com/en-us/networking-io/usb56kem3)
+
## Examples
An example automation:
diff --git a/source/_integrations/opnsense.markdown b/source/_integrations/opnsense.markdown
index 06df9f5645a..381548a3e38 100644
--- a/source/_integrations/opnsense.markdown
+++ b/source/_integrations/opnsense.markdown
@@ -14,7 +14,7 @@ ha_platforms:
ha_integration_type: integration
---
-[OPNsense](https://opnsense.org/) is an open source HardenedBSD based firewall
+[OPNsense](https://opnsense.org/) is an open source FreeBSD based firewall
and routing platform. There is currently support for the following device types
within Home Assistant:
diff --git a/source/_integrations/ping.markdown b/source/_integrations/ping.markdown
index c4a65a1a457..3760b5ccd81 100644
--- a/source/_integrations/ping.markdown
+++ b/source/_integrations/ping.markdown
@@ -51,10 +51,10 @@ This sensor is enabled by default. The default polling interval is 30 seconds.
The sensor exposes the different round trip times in milliseconds measured by `ping` as attributes:
-- `round_trip_time_mdev`
-- `round_trip_time_avg`
-- `round_trip_time_min`
-- `round_trip_time_max`
+- `round_trip_time_mdev` - the standard deviation
+- `round_trip_time_avg` - the average round trip time
+- `round_trip_time_min` - the shortest round trip time
+- `round_trip_time_max` - the longest round trip time
When run on Windows systems, the round trip time attributes are rounded to the nearest millisecond and the mdev value is unavailable.
@@ -70,4 +70,4 @@ The device tracker is disabled by default and can be enabled in the UI.
Please keep in mind that modern smart phones will usually turn off WiFi when they are idle. Simple trackers like this may not be reliable on their own.
-See the [person integration page](/integrations/person/) for instructions on how to configure the people to be tracked.
\ No newline at end of file
+See the [person integration page](/integrations/person/) for instructions on how to configure the people to be tracked.
diff --git a/source/_integrations/timer.markdown b/source/_integrations/timer.markdown
index 041e4e4f2d2..60acde7ac07 100644
--- a/source/_integrations/timer.markdown
+++ b/source/_integrations/timer.markdown
@@ -107,7 +107,7 @@ Change an active timer. This changes the duration of the timer with the duration
### Service `timer.pause`
-Pause a running timer. This will retain the remaining duration for later continuation. You can also use `entity_id: all` and all active timers will be paused.
+Pause a running timer. This will retain the remaining duration for later continuation. To resume a timer use the `timer.start` service without passing a duration. You can also use `entity_id: all` and all active timers will be paused.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |