diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index d1fd476f4e2..c44a2753635 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -9,6 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: dessant/lock-threads@v3 + if: ${{ github.repository_owner == 'home-assistant' }} with: github-token: ${{ github.token }} issue-inactive-days: "30" diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 0f66da93f61..9bf2a107008 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -9,6 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/stale@v4 + if: ${{ github.repository_owner == 'home-assistant' }} with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-stale: 60 diff --git a/Gemfile.lock b/Gemfile.lock index 7c40e594591..017425a245c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -114,7 +114,7 @@ GEM tilt (2.0.10) tzinfo (2.0.4) concurrent-ruby (~> 1.0) - tzinfo-data (1.2021.4) + tzinfo-data (1.2021.5) tzinfo (>= 1.0.0) unicode-display_width (1.8.0) diff --git a/package-lock.json b/package-lock.json index 42a1dcf2d04..9b7c89bcb93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "devDependencies": { "remark-cli": "^10.0.0", - "remark-frontmatter": "^4.0.0", + "remark-frontmatter": "^4.0.1", "remark-lint": "^9.1.0", "remark-lint-fenced-code-flag": "^3.1.0", "remark-lint-no-shell-dollars": "^3.1.0", @@ -4857,9 +4857,9 @@ } }, "node_modules/remark-frontmatter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.0.tgz", - "integrity": "sha512-0J+2czWAS9sz9baJJel4tTUnNhMI7wYgih99Hxhdeq2GpdI1Ctu0iol6zAsWw5xa+jLsZXNiwEnnJAJo3XX3hw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", + "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", "dev": true, "dependencies": { "@types/mdast": "^3.0.0", @@ -9689,9 +9689,9 @@ } }, "remark-frontmatter": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.0.tgz", - "integrity": "sha512-0J+2czWAS9sz9baJJel4tTUnNhMI7wYgih99Hxhdeq2GpdI1Ctu0iol6zAsWw5xa+jLsZXNiwEnnJAJo3XX3hw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", + "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", "dev": true, "requires": { "@types/mdast": "^3.0.0", diff --git a/package.json b/package.json index 8f6bc31774a..574370f2be9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "dependencies": {}, "devDependencies": { "remark-cli": "^10.0.0", - "remark-frontmatter": "^4.0.0", + "remark-frontmatter": "^4.0.1", "remark-lint": "^9.1.0", "remark-lint-fenced-code-flag": "^3.1.0", "remark-lint-no-shell-dollars": "^3.1.0", diff --git a/source/_docs/configuration/events.markdown b/source/_docs/configuration/events.markdown index d337267f5b6..705ab153fa4 100644 --- a/source/_docs/configuration/events.markdown +++ b/source/_docs/configuration/events.markdown @@ -55,8 +55,6 @@ This event has no additional data. Event `scene_reloaded` is fired when scenes have been reloaded and thus might have changed. -This event has no additional data. - ## Event `platform_discovered` Event `platform_discovered` is fired when a new platform has been discovered by the [`discovery`](/integrations/discovery/) component. diff --git a/source/_docs/scene.markdown b/source/_docs/scene.markdown index c2ede2d14ca..5ecd08c9f1c 100644 --- a/source/_docs/scene.markdown +++ b/source/_docs/scene.markdown @@ -27,9 +27,19 @@ scene: state: "on" ``` +## How to configure your scene + +In the scene you define in your YAML files, please ensure you use +all required parameters as listed below. + +```yaml {% configuration %} -name: - description: Friendly name of scene. +name: + description: Friendly name of the scene. + required: true + type: string +description: + description: Description of the scene. required: true type: string entities: @@ -37,6 +47,7 @@ entities: required: true type: list {% endconfiguration %} +``` As you can see, there are two ways to define the states of each `entity_id`: diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 821e047d178..7e9efacc8f8 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -323,6 +323,15 @@ condition: after_offset: "-01:00:00" ``` +This is an example of 1 hour offset after sunset. + +```yaml +condition: + - condition: sun + after: sunset + before: sunrise +``` + This is 'when dark' - equivalent to a state condition on `sun.sun` of `below_horizon`. ```yaml diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown index 8167a02c335..879583afbfc 100644 --- a/source/_docs/tools/dev-tools.markdown +++ b/source/_docs/tools/dev-tools.markdown @@ -21,6 +21,17 @@ Screenshot of Home Assistant's Developer Tools. The Developer Tools is meant for **all** (not just for the developers) to quickly try out things - like calling services, updating states, raising events, and publishing messages in MQTT). It is also a necessary tool for those who write custom automations and scripts by hand. The following describes each of the sections in detail. +## States + +This section shows all the available entities, their corresponding state and the attribute values. The state and the attribute information is what Home Assistant sees at run time. To update the entity with a new state, or a new attribute value, click on the entity, scroll to the top, and modify the values, and click on “SET STATE” button. + +Note that this is the state representation of a device within Home Assistant. That means, it is what Home Assistant sees, and it does not communicate with the actual device in any manner. The updated information can still be used to trigger events, and state changes. To communicate with the actual device, it is recommended to call services in the services section above, instead of updating state. + +For example, changing the `light.bedroom` state from `off` to `on` does not turn on the light. If there is an automation that triggers on the `state` change of the `light.bedroom`, it will be triggered – even though the actual bulb has not turned on. Also, when the bulb state changes – the state information will be overridden (the refresh icon can be used to retrieve the latest information that Home Assistant has). In other words, the changes that are made through the “States” section are temporary, and is recommended to use for testing purposes only. + +The table containing all entities can be filtered for each column. The used search is a wildcard search meaning that if you input "office" in the entity column filter, every entity whose ID matches "\*office\*" will be shown. You can also add your own wildcards in the search input (e.g., "office\*light"). +The attribute filter supports separate filters for attribute names and values, separated by a colon ":". So the filter "location:3" will result in the table showing all entities that have an attribute name that contains "location" and whose attribute value contains "3". + ## Services This section is used to call Services that are available in the ServiceRegistry. @@ -44,13 +55,13 @@ brightness: 255 rgb_color: [255, 0, 0] ``` -## States +## Template Editor -This section shows all the available entities, their corresponding state and the attribute values. The state and the attribute information is what Home Assistant sees at run time. To update the entity with a new state, or a new attribute value, click on the entity, scroll to the top, and modify the values, and click on “SET STATE” button. +The Template Editor provides a way to quickly test templates prior to placing them into automations and scripts. A code editor is on the left side and your real-time output is displayed in the preview on the right side. -Note that this is the state representation of a device within Home Assistant. That means, it is what Home Assistant sees, and it does not communicate with the actual device in any manner. The updated information can still be used to trigger events, and state changes. To communicate with the actual device, it is recommended to call services in the services section above, instead of updating state. +By default, this will contain sample code that illustrates how templates can be written and tested. This sample code can be removed and replaced with your own. You can restore the default example by pressing the "Reset to Demo Template" button beneath the code editor. -For example, changing the `light.bedroom` state from `off` to `on` does not turn on the light. If there is an automation that triggers on the `state` change of the `light.bedroom`, it will be triggered – even though the actual bulb has not turned on. Also, when the bulb state changes – the state information will be overridden. In other words, the changes that are made through the “States” section are temporary, and is recommended to use for testing purposes only. +For more information about Jinja2, visit [Jinja2 documentation](http://jinja.pocoo.org/docs/dev/templates/), and also read templating document [here](/topics/templating/). ## Events @@ -80,7 +91,7 @@ If there is an automation that handles that event, it will be automatically trig ### Subscribe to an event -To subscribe to an event, enter the event event type under "Listen to events" and click "Start listening". Some events types are listed in the Events section under "Available events". You can usually find information about event types for a particular integration in its documentation. You can then examine the event data JSON to find the correct parameters for your automations. +To subscribe to an event, enter the event event type under "Listen to events" and click "Start listening". Some events types are listed in the Events section under "Active listeners". You can usually find information about event types for a particular integration in its documentation. You can then examine the event data JSON to find the correct parameters for your automations. For example, subscribing to the event type `shelly.click` of the Shelly integration, returns event data JSON similar to the following on a button press. @@ -103,11 +114,3 @@ Event 0 fired 9:53 AM: } } ``` - -## Template Editor - -The Template Editor provides a way to quickly test templates prior to placing them into automations and scripts. A code editor is on the left side and your real-time output is displayed in the preview on the right side. - -By default this will contain sample code that illustrates how templates can be written and tested. This sample code can be removed and replaced with your own. You can restore the default example by pressing the "Reset to Demo Template" button beneath the code editor. - -For more information about Jinja2, visit [Jinja2 documentation](https://jinja.palletsprojects.com/templates/), and also read templating document [here](/topics/templating/). diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown deleted file mode 100644 index 479f0206ab7..00000000000 --- a/source/_docs/z-wave.markdown +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: "Z-Wave" -description: "Using Z-Wave with Home Assistant." ---- - -
` | Defines a section that is quoted from another source. Allows attribute `class` with allowed values `danger`, `warning`, `info`, `primary`, `secondary`. `` | Defines bold text. diff --git a/source/_integrations/citybikes.markdown b/source/_integrations/citybikes.markdown index c26b4f413a1..01f22a3de4f 100644 --- a/source/_integrations/citybikes.markdown +++ b/source/_integrations/citybikes.markdown @@ -52,7 +52,6 @@ stations: type: list {% endconfiguration %} - ## Example Additional configuration samples: diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown index 24975ebeeb0..d30809f571c 100644 --- a/source/_integrations/climate.mqtt.markdown +++ b/source/_integrations/climate.mqtt.markdown @@ -366,11 +366,11 @@ value_template: required: false {% endconfiguration %} -#### Optimistic mode +## Optimistic mode If a property works in *optimistic mode* (when the corresponding state topic is not set), Home Assistant will assume that any state changes published to the command topics did work and change the internal state of the entity immediately after publishing to the command topic. If it does not work in optimistic mode, the internal state of the entity is only updated when the requested update is confirmed by the device through the state topic. -#### Using Templates +## Using Templates For all `*_state_topic`s, a template can be specified that will be used to render the incoming payloads on these topics. Also, a default template that applies to all state topics can be specified as `value_template`. This can be useful if you received payloads are e.g., in JSON format. Since in JSON, a quoted string (e.g., `"foo"`) is just a string, this can also be used for unquoting. @@ -395,9 +395,9 @@ climate: This will parse the incoming `"auto"` as JSON, resulting in `auto`. Obviously, in this case you could also just set `value_template: {% raw %}"{{ value_json }}"{% endraw %}`. -Similarly for `*_command_topic`s, a template can be specified to render the outgoing payloads on these topics. +Similarly for `*_command_topic`s, a template can be specified to render the outgoing payloads on these topics. -### Example +## Example A full configuration example looks like the one below. diff --git a/source/_integrations/cloudflare.markdown b/source/_integrations/cloudflare.markdown index d3901f617fd..0530a80146c 100644 --- a/source/_integrations/cloudflare.markdown +++ b/source/_integrations/cloudflare.markdown @@ -55,6 +55,7 @@ This platform uses the API from [ipify.org](https://www.ipify.org/) to set the p ### Home Assistant Companion App If you would like to use [iOS App](https://companion.home-assistant.io/) via Cloudflare set **Minimum TLS version as 1.2**, in order to do that, do the following: + 1. Login to your [Cloudflare](https://dash.cloudflare.com/) account. 2. Choose your domain. 3. Click on the `SSL/TLS` icon. diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown index 233d9a26c07..97e73861dc5 100644 --- a/source/_integrations/command_line.markdown +++ b/source/_integrations/command_line.markdown @@ -119,7 +119,7 @@ binary_sensor: payload_off: "fail" ``` -Consider to use the [`ping` sensor ](/integrations/ping#binary-sensor) as an alternative to the samples above. +Consider to use the [ping sensor](/integrations/ping#binary-sensor) as an alternative to the samples above. ### Check if a system service is running diff --git a/source/_integrations/control4.markdown b/source/_integrations/control4.markdown index 07a469d9b7b..a919eb2ebb4 100644 --- a/source/_integrations/control4.markdown +++ b/source/_integrations/control4.markdown @@ -20,6 +20,7 @@ The Control4 integration allows you to control and monitor lights from your loca Before setting up, you should assign a static IP address/DHCP reservation on your router to your Control4 controller. Home Assistant must be able to communicate with the controller over the local network; 4Sight remote access is not supported. {% include integrations/config_flow.md %} + ## Options The Control4 integration offers additional options in **Configuration** -> **Integrations** -> **Control4** -> **Options**: diff --git a/source/_integrations/conversation.markdown b/source/_integrations/conversation.markdown index 0c94100e1dc..ed7d8354ef4 100644 --- a/source/_integrations/conversation.markdown +++ b/source/_integrations/conversation.markdown @@ -94,7 +94,7 @@ intent_script: {% endraw %} -#### Service `conversation.process` +## Service `conversation.process` | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------| diff --git a/source/_integrations/dsmr.markdown b/source/_integrations/dsmr.markdown index 36db24aa81e..0a8d32bd63a 100644 --- a/source/_integrations/dsmr.markdown +++ b/source/_integrations/dsmr.markdown @@ -57,6 +57,7 @@ This integration is known to work for: - Kaifa E0026 - Kamstrup 382JxC (DSMR 2.2) - Sagemcom XS210 ESMR5 +- Sagemcom T211 - Ziv E0058 ESMR5 ### Connecting to the meter diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown index b2e1b705356..f65f11165c8 100644 --- a/source/_integrations/ecobee.markdown +++ b/source/_integrations/ecobee.markdown @@ -98,6 +98,11 @@ name: required: false default: "`notify`" type: string +index: + description: If you have multiple thermostats, you can specify which one to send the notification to by setting an `index`. The index values assigned to the thermostats are consecutive integers, starting at 0. + required: false + default: 0 + type: integer {% endconfiguration %} To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_integrations/garadget.markdown b/source/_integrations/garadget.markdown index 43c90b52824..79c061fa67f 100644 --- a/source/_integrations/garadget.markdown +++ b/source/_integrations/garadget.markdown @@ -81,19 +81,15 @@ cover: access_token: !secret garadget_access_token name: Garage door -sensor: - - platform: template - sensors: - garage_door_status: - friendly_name: "State of the door" - value_template: "{{ states('cover.garage_door') }}" - garage_door_time_in_state: - friendly_name: "Since" - value_template: "{{ state_attr('cover.garage_door', 'time_in_state') }}" - garage_door_wifi_signal_strength: - friendly_name: "WiFi strength" - value_template: "{{ state_attr('cover.garage_door', 'wifi_signal_strength') }}" - unit_of_measurement: "dB" +template: + - sensor: + - name: Garage door state + state: "{{ states('cover.garage_door') }}" + - name: Garage door state since + state: "{{ state_attr('cover.garage_door', 'time_in_state') }}" + - name: Garage door WiFi signal strength + state: "{{ state_attr('cover.garage_door', 'wifi_signal_strength') }}" + unit_of_measurement: "dB" group: garage_door: diff --git a/source/_integrations/calendar.google.markdown b/source/_integrations/google.markdown similarity index 93% rename from source/_integrations/calendar.google.markdown rename to source/_integrations/google.markdown index c77ae6ff944..9318be436bd 100644 --- a/source/_integrations/calendar.google.markdown +++ b/source/_integrations/google.markdown @@ -34,10 +34,9 @@ Generate a Client ID and Client Secret on 1. You will then be automatically taken to the OAuth consent screen, you do not need to add any scopes here so click `SAVE AND CONTINUE` to move to the `Test users` page. You will need to add the Gmail address you will be using with this integration as a test user before you will be allowed to use the API. Once you have added your email address under `Test users` click `SAVE AND CONTINUE` which will take to the 'Summary' page (you do not need to do anything here). 1. Click Credentials in the menu on the left hand side of the screen, then click `+ Create credentials` (at the top of the screen), then select `OAuth client ID`. 1. Set the Application type to `TV and Limited Input` and give this credential set a name (like "Home Assistant Credentials") then click 'Create'. -1. You will then be presented with a pop-up saying 'OAuth client created' showing `Your Client ID` and `Your Client Secret`. Make a note of these (for example, copy and paste them into a text editor) as you will need to put these in your `configuration.yaml` file shortly. Once you have noted these strings, click `OK`. If you need to find these credentials again at any point then simply nagivate to `APIs & Services` > `Credentials` and you will see `Home Assistant Credentials` (or whatever you named them in the previous step) under `OAuth 2.0 Clident IDs`. To view both the `Client ID` and `Client secret`, click on the pencil icon, this will take you to the settings page for these credentials and the information will be on the right hand side of the page. +1. You will then be presented with a pop-up saying 'OAuth client created' showing `Your Client ID` and `Your Client Secret`. Make a note of these (for example, copy and paste them into a text editor) as you will need to put these in your `configuration.yaml` file shortly. Once you have noted these strings, click `OK`. If you need to find these credentials again at any point then simply navigate to `APIs & Services` > `Credentials` and you will see `Home Assistant Credentials` (or whatever you named them in the previous step) under `OAuth 2.0 Clident IDs`. To view both the `Client ID` and `Client secret`, click on the pencil icon, this will take you to the settings page for these credentials and the information will be on the right hand side of the page. 1. We need to double check that the "Google Calendar API" has been automatically enabled. To do this, select `Library` from the menu, then search for "Google Calendar API". If it is enabled you will see `API Enabled` with a green tick next to it. If it is not enabled, then enable it. - If you will later be adding more scopes than just the "Google Calendar API" to the OAuth for this application, you will need to delete your token file under your Home Assistant Profile. You will lose your refresh token due to the re-authenticating to add more API access. It's recommended to use different authorizations for different pieces of Google. ## Troubleshooting @@ -173,17 +172,15 @@ entities: default: true {% endconfiguration %} - - ### Sensor attributes - - **offset_reached**: If set in the event title and parsed out will be `on`/`off` once the offset in the title in minutes is reached. So the title `Very important meeting #Important !!-10` would trigger this attribute to be `on` 10 minutes before the event starts. - - **all_day**: `true`/`false` if this is an all day event. Will be `false` if there is no event found. - - **message**: The event title with the `search` and `offset` values extracted. So in the above example for **offset_reached** the **message** would be set to `Very important meeting` - - **description**: The event description. - - **location**: The event Location. - - **start_time**: Start time of event. - - **end_time**: End time of event. +- **offset_reached**: If set in the event title and parsed out will be `on`/`off` once the offset in the title in minutes is reached. So the title `Very important meeting #Important !!-10` would trigger this attribute to be `on` 10 minutes before the event starts. +- **all_day**: `true`/`false` if this is an all day event. Will be `false` if there is no event found. +- **message**: The event title with the `search` and `offset` values extracted. So in the above example for **offset_reached** the **message** would be set to `Very important meeting` +- **description**: The event description. +- **location**: The event Location. +- **start_time**: Start time of event. +- **end_time**: End time of event. ### Service `google.add_event` diff --git a/source/_integrations/hassio.markdown b/source/_integrations/hassio.markdown new file mode 100644 index 00000000000..c8beaf282c4 --- /dev/null +++ b/source/_integrations/hassio.markdown @@ -0,0 +1,137 @@ +--- +title: Supervisor +description: Control Supervisor Add-ons and OS from Home Assistant +ha_category: + - Binary Sensor + - Sensor +ha_iot_class: Local Polling +ha_release: 2021.4 +ha_domain: hassio +ha_platforms: + - binary_sensor + - sensor +--- + +Supervisor integration allows you to monitor and control Supervisor add-ons and operating system from Home Assistant. +This integration is installed automatically if you run Home Assistant OS or Supervised. + +## Sensors + +For each installed add-on Supervisor provides following sensors: + +| Sensor | Enabled by default | Description | +| ------- | ------------------ | ----------- | +| Version | no | Current version of the add-on +| Newest Version | no | Latest version of the add-on currently available + +For Home Assistant OS Supervisor provides following sensors: + +| Sensor | Enabled by default | Description | +| ------- | ------------------ | ----------- | +| Version | no | Current version of the Home Assistant OS +| Newest Version | no | Latest version of the Home Assistant OS currently available + +## Binary Sensors + +For each installed add-on Supervisor provides following binary sensors: + +| Sensor | Enabled by default | Description | +| ------- | ------------------ | ----------- | +| Update Available | no | Whether there is an update available for this add-on + +For Home Assistant OS Supervisor provides following binary sensors: + +| Sensor | Enabled by default | Description | +| ------- | ------------------ | ----------- | +| Update Available | no | Whether there is an update available for OS + +## Services + +### Service hassio.addon_start + +Start an add-on. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `addon` | no | Add-on slug + +### Service hassio.addon_stop + +Stop an add-on. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `addon` | no | Add-on slug + +### Service hassio.addon_restart + +Restart an add-on. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `addon` | no | Add-on slug + +### Service hassio.addon_stdin + +Write data to add-on stdin. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `addon` | no | Add-on slug + +### Service hassio.addon_update + +Update add-on. This service should be used with caution since add-on updates can contain breaking changes. It is highly recommended that you review release notes/change logs before updating an add-on. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `addon` | no | Add-on slug + +### Service hassio.host_reboot + +Reboot the host system. + +### Service hassio.host_shutdown + +Shutdown the host system. + +### Service hassio.backup_full + +Create a full backup. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `name` | yes | Name of the backup file. Default is current date and time +| `password` | yes | Optional password for backup + +### Service hassio.backup_partial + +Create a partial backup. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `addons` | yes | List of add-on slugs to backup +| `folders` | yes | List of directories to backup +| `name` | yes | Name of the backup file. Default is current date and time +| `password` | yes | Optional password for backup + +### Service hassio.restore_full + +Restore from full backup. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `slug` | no | Slug of backup to restore from +| `password` | yes | Optional password for backup + +### Service hassio.restore_partial + +Restore from partial backup. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `slug` | no | Slug of backup to restore from +| `homeassistant` | yes | Whether to restore Home Assistant, `true` or `false` +| `addons` | yes | List of add-on slugs to restore +| `folders` | yes | List of directories to restore +| `password` | yes | Optional password for backup diff --git a/source/_integrations/hikvision.markdown b/source/_integrations/hikvision.markdown index cfb480fb517..76c1376a723 100644 --- a/source/_integrations/hikvision.markdown +++ b/source/_integrations/hikvision.markdown @@ -62,6 +62,7 @@ and has been confirmed to work with the following models: - DS-2CD2385G1 - IPC-D140H(-M) - DS-7616NI-K2 (NVR) +- ERI-K104-PR (NVR) This platform also was confirmed to work with the following Hikvison-based NVRS @@ -154,6 +155,12 @@ Supported sensor/event types are: - PIR Alarm - Face Detection - Scene Change Detection +- I/O +- Unattended Baggage +- Attended Baggage +- Recording Failure +- Exiting Region +- Entering Region ## Examples diff --git a/source/_integrations/hive.markdown b/source/_integrations/hive.markdown index 1cf937258f3..9cdf832362a 100644 --- a/source/_integrations/hive.markdown +++ b/source/_integrations/hive.markdown @@ -28,6 +28,13 @@ ha_config_flow: true The Hive integration for Home Assistant allows you to interact with supported devices and services offered by [hivehome.com](https://www.hivehome.com) ++ +Please note that Hive shut down its North American Servers on November 30th, 2021. +Read more about this in their [shutdown notice](https://www.hivehome.com/us/support). + ++ This Hive integration uses the same username and password you use on the [Hive website](https://sso.hivehome.com) to configure it within Home Assistant, 2FA authentication is also supported. Once configured Home Assistant will detect and add all Hive devices, including support for multi-zone heating. {% include integrations/config_flow.md %} diff --git a/source/_integrations/iammeter.markdown b/source/_integrations/iammeter.markdown index 13ad92c7eef..ee17703183e 100644 --- a/source/_integrations/iammeter.markdown +++ b/source/_integrations/iammeter.markdown @@ -72,21 +72,21 @@ Sensors available in the library: | wem3080t_power_a | W | A phase active power | | wem3080t_importenergy_a | kWh | A phase import energy | | wem3080t_exportgrid_a | kWh | A phase export energy | -| wem3080t_frequency_a | kWh | A phase frequency | -| wem3080t_pf_a | kWh | A phase power factor | +| wem3080t_frequency_a | hz | A phase frequency | +| wem3080t_pf_a | | A phase power factor | | | | | | wem3080t_voltage_b | V | B phase voltage | | wem3080t_current_b | A | B phase current | | wem3080t_power_b | W | B phase active power | | wem3080t_importenergy_b | kWh | B phase import energy | | wem3080t_exportgrid_b | kWh | B phase export energy | -| wem3080t_frequency_b | kWh | B phase frequency | -| wem3080t_pf_b | kWh | B phase power factor | +| wem3080t_frequency_b | hz | B phase frequency | +| wem3080t_pf_b | | B phase power factor | | | | | | wem3080t_voltage_c | V | C phase voltage | | wem3080t_current_c | A | C phase current | | wem3080t_power_c | W | C phase active power | | wem3080t_importenergy_c | kWh | C phase import energy | | wem3080t_exportgrid_c | kWh | C phase export energy | -| wem3080t_frequency_c | kWh | C phase frequency | -| wem3080t_pf_c | kWh | C phase power factor | +| wem3080t_frequency_c | hz | C phase frequency | +| wem3080t_pf_c | | C phase power factor | diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index 007bccc1948..13aa74193d4 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -64,3 +64,9 @@ mqtt: - [Birth and last will messages](/docs/mqtt/birth_will/) - [Testing your setup](/docs/mqtt/testing/) - [Logging](/docs/mqtt/logging/) + +## Event `event_mqtt_reloaded` + +Event `event_mqtt_reloaded` is fired when Manually configured MQTT entities have been reloaded and entities thus might have changed. + +This event has no additional data. diff --git a/source/_integrations/pvoutput.markdown b/source/_integrations/pvoutput.markdown index 9629d471fbf..62c1c00f6f4 100644 --- a/source/_integrations/pvoutput.markdown +++ b/source/_integrations/pvoutput.markdown @@ -49,24 +49,20 @@ sensor: - platform: pvoutput system_id: YOUR_SYSTEM_ID api_key: YOUR_API_KEY - - platform: template - sensors: - power_consumption: - value_template: "{% if is_state_attr('sensor.pvoutput', 'power_consumption', 'NaN') %}0{% else %}{{ state_attr('sensor.pvoutput', 'power_consumption') }}{% endif %}" - friendly_name: "Using" - unit_of_measurement: "Watt" - energy_consumption: - value_template: '{{ "%0.1f"|format(state_attr("sensor.pvoutput", "energy_consumption")|float/1000) }}' - friendly_name: "Used" - unit_of_measurement: "kWh" - power_generation: - value_template: '{% if is_state_attr("sensor.pvoutput", "power_generation", "NaN") %}0{% else %}{{ state_attr("sensor.pvoutput", "power_generation") }}{% endif %}' - friendly_name: "Generating" - unit_of_measurement: "Watt" - energy_generation: - value_template: '{% if is_state_attr("sensor.pvoutput", "energy_generation", "NaN") %}0{% else %}{{ "%0.2f"|format(state_attr("sensor.pvoutput", "energy_generation")|float/1000) }}{% endif %}' - friendly_name: "Generated" - unit_of_measurement: "kWh" +template: + - sensor: + - name: Power Consumption + state: "{{ state_attr('sensor.pvoutput', 'power_consumption') | float(default=0) }}" + unit_of_measurement: "W" + - name: Energy Consumption + state: "{{ '%0.1f' | format(state_attr('sensor.pvoutput', 'energy_consumption') | float(default=0) / 1000) }}" + unit_of_measurement: "kWh" + - name: Power Generation + state: "{{ state_attr('sensor.pvoutput', 'power_generation') | float(default=0) }}" + unit_of_measurement: "W" + - name: Energy Generation + state: "{{ '%0.2f' | format(state_attr('sensor.pvoutput', 'energy_generation') | float(default=0) / 1000) }}" + unit_of_measurement: "kWh" ``` {% endraw %} diff --git a/source/_integrations/serial.markdown b/source/_integrations/serial.markdown index 8deca5a02ad..1a2f3461ed2 100644 --- a/source/_integrations/serial.markdown +++ b/source/_integrations/serial.markdown @@ -139,20 +139,17 @@ sensor: serial_port: /dev/ttyUSB0 baudrate: 9600 - - platform: template - sensors: - my_temperature_sensor: - friendly_name: Temperature - unit_of_measurement: "°C" - value_template: "{{ states('sensor.serial_sensor').split(',')[1] | float }}" - my_humidity_sensor: - friendly_name: Humidity - unit_of_measurement: "%" - value_template: "{{ states('sensor.serial_sensor').split(',')[2] | float }}" - my_barometer: - friendly_name: Barometer - unit_of_measurement: "mbar" - value_template: "{{ states('sensor.serial_sensor').split(',')[4] | float }}" +template: + sensor: + - name: Temperature + unit_of_measurement: "°C" + state: "{{ states('sensor.serial_sensor').split(',')[1] | float(default=0) }}" + - name: Humidity + unit_of_measurement: "%" + state: "{{ states('sensor.serial_sensor').split(',')[2] | float(default=0) }}" + - name: Barometer + unit_of_measurement: "mbar" + state: "{{ states('sensor.serial_sensor').split(',')[4] | float(default=0) }}" ``` {% endraw %} diff --git a/source/_integrations/solax.markdown b/source/_integrations/solax.markdown index 7a416e4a34f..33ec8d6fa78 100644 --- a/source/_integrations/solax.markdown +++ b/source/_integrations/solax.markdown @@ -46,17 +46,14 @@ If you would like to convert the values from multiple panels or view the total p ```yaml # Example configuration.yaml entry for template platform -sensors: -- platform: template - sensors: - total_pv_power: - friendly_name: "Total PV Power" - unit_of_measurement: "W" - value_template: "{{ (states('sensor.pv1_power') | float) + (states('sensor.pv2_power') | float) }}" - load_power: - friendly_name: "Load Power" - unit_of_measurement: "W" - value_template: "{{ (states('sensor.power_now') | float) - (states('sensor.exported_power') | float) }}" +template: +- sensor + - name: Total PV power + unit_of_measurement: "W" + state: "{{ (states('sensor.pv1_power') | float(default=0)) + (states('sensor.pv2_power') | float(default=0)) }}" + - name: Load power + unit_of_measurement: "W" + state: "{{ (states('sensor.power_now') | float(default=0)) - (states('sensor.exported_power') | float(default=0)) }}" ``` {% endraw %} diff --git a/source/_integrations/sql.markdown b/source/_integrations/sql.markdown index 4b66572a94f..e9902d41c41 100644 --- a/source/_integrations/sql.markdown +++ b/source/_integrations/sql.markdown @@ -106,10 +106,19 @@ Note that the SQL sensor state corresponds to the last row of the SQL result set ### Previous state of an entity -This example only works with *binary_sensors*: - +Based on previous example with temperature, the query to get the former state is : ```sql -SELECT * FROM states WHERE entity_id = 'binary_sensor.xyz789' GROUP BY state ORDER BY last_changed DESC LIMIT 1; +SELECT * FROM (SELECT * FROM states WHERE entity_id = 'sensor.temperature_in' ORDER BY state_id DESC LIMIT 2) two_entity ORDER BY state_id ASC LIMIT 1; +``` +Thus in yaml +```yaml +# Example configuration.yaml +sensor: + - platform: sql + queries: + - name: Former_Temperature_In + query: "SELECT * FROM (SELECT state FROM states WHERE entity_id = 'sensor.temperature_in' ORDER BY state_id DESC LIMIT 2) two_entity ORDER BY state_id ASC LIMIT 1;" + column: "state" ``` ### Database size diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown index 40e1c2f53a3..58cb885decd 100644 --- a/source/_integrations/template.markdown +++ b/source/_integrations/template.markdown @@ -709,3 +709,9 @@ sensor: type: device_class default: None {% endconfiguration %} + +## Event `event_template_reloaded` + +Event `event_template_reloaded` is fired when Template entities have been reloaded and entities thus might have changed. + +This event has no additional data. diff --git a/source/_integrations/tuya.markdown b/source/_integrations/tuya.markdown index 7363406aad5..9a3432e1811 100644 --- a/source/_integrations/tuya.markdown +++ b/source/_integrations/tuya.markdown @@ -15,6 +15,7 @@ ha_codeowners: - '@Tuya' - '@zlinoliver' - '@METISU' + - '@tsutsuku' ha_platforms: - climate - fan @@ -44,9 +45,9 @@ This is a separate account to the one you made for the app. You cannot log in wi ### Create a project 1. Log in to the [Tuya IoT Platform](https://iot.tuya.com/). -2. In the left navigation bar, click `Cloud` > `Development`. If this is your first time setting up an account you will be asked to subscribe to a Cloud Development Plan. You can select and "purchase" the Trial Edition (it's free). +2. In the left navigation bar, click `Cloud` > `Development`. 3. On the page that appears, click `Create Cloud Project`. -4. In the `Create Project` dialog box, configure `Project Name`, `Description`, `Industry`, and `Data Center`. For the `Development Method` field, select `Smart Home` from the dropdown list. For the `Data Center` field, select the zone you are located in. +4. In the `Create Cloud Project` dialog box, configure `Project Name`, `Description`, `Industry`, and `Data Center`. For the `Development Method` field, select `Smart Home` from the dropdown list. For the `Data Center` field, select the zone you are located in.  5. Click `Create` to continue with project configuration. 6. In Configuration Wizard, make sure you add `Device Status Notification` API. The list of API should look like this: @@ -99,7 +100,7 @@ Click the created project to enter the `Project Overview` page and get the `Auth description: Incorrect Access ID or Access Secret. Please refer to [Tuya credential table](https://github.com/tuya/tuya-home-assistant/wiki/Install-Tuya-v2?_source=d10de34623e3daca5b02e3c31528a0c4#3-enter-your-tuya-credential). "1106: permission deny": - description: >- + description: > - App account not linked with cloud project: On the [Tuya IoT Platform](https://iot.tuya.com/cloud/), you have linked devices by using Tuya Smart or Smart Life app in your cloud project. For more information, see [Link devices by app account](https://developer.tuya.com/en/docs/iot/Platform_Configuration_smarthome?id=Kamcgamwoevrx&_source=7a356dd493196a01bb9021b7680a2a45#title-3-Link%20devices%20by%20app%20account). - Incorrect username or password: Enter the correct account and password of the Tuya Smart or Smart Life app in the **Account** and **Password** fields. Note that the app account depends on which app (Tuya Smart or Smart Life) you used to link devices on the [Tuya IoT Platform](https://iot.tuya.com/cloud/). @@ -110,28 +111,31 @@ Click the created project to enter the `Project Overview` page and get the `Auth description: Empty parameter of username or app. Fill the parameters refer to [Tuya credential table](https://github.com/tuya/tuya-home-assistant/wiki/Install-Tuya-v2?_source=d10de34623e3daca5b02e3c31528a0c4#3-enter-your-tuya-credential). "2406: skill id invalid": - description: Make sure that your cloud project on the [Tuya IoT Platform](https://iot.tuya.com/cloud/) should be created after May 25, 2021. Otherwise, you need to create a new project or migrate data to a new project. For more information, see [Operation on the Tuya IoT Platform](https://developer.tuya.com/en/docs/iot/migrate-from-an-older-version?id=Kamee9wtbd00b#title-3-Operation%20on%20the%20Tuya%20IoT%20Platform). + description: > + - Make sure you use the **Tuya Smart** or **SmartLife** app account to log in. Also, choose the right data center endpoint related to your country region. For more details, please check [Country Regions and Data Center](https://github.com/tuya/tuya-home-assistant/blob/master/docs/regions_dataCenters.md). + + - Your cloud project on the [Tuya IoT Development Platform](https://iot.tuya.com) should be created after May 25, 2021. Otherwise, you need to create a new project. "28841105: No permissions. This project is not authorized to call this API": description: > Some APIs are not authorized, please [Subscribe](https://developer.tuya.com/en/docs/iot/applying-for-api-group-permissions?id=Ka6vf012u6q76#title-2-Subscribe%20to%20cloud%20products) then [Authorize](https://developer.tuya.com/en/docs/iot/applying-for-api-group-permissions?id=Ka6vf012u6q76#title-3-Authorize%20projects%20to%20call%20the%20cloud%20product). The following APIs must be subscribed for this tutorial: + - Device Status Notification + - Authorization - - Smart Home Devices Management - - - Smart Home Family Management + - IoT Core - Smart Home Scene Linkage - - Smart Home Data Service - - - Device status notification + - IoT Data Analytics {% endconfiguration_basic %} ## Related Documents -- [Supported Device Category](https://github.com/tuya/tuya-home-assistant/wiki/Supported-Device-Category?_source=f5f782752be3c4a9157ec47514d6091b) -- [How to Develop a New Driver](https://github.com/tuya/tuya-home-assistant/wiki/How-to-Develop-a-New-Driver?_source=dbf3bf17966af48325e4328b2535eefe) -- [FAQs](https://github.com/tuya/tuya-home-assistant/wiki/FAQs) +- [Tuya Integration Documentation Page](https://github.com/tuya/tuya-home-assistant) +- [Supported Tuya Device Category](https://github.com/tuya/tuya-home-assistant/blob/master/docs/supported_devices.md) +- [Error Code and Troubleshooting](https://github.com/tuya/tuya-home-assistant/blob/master/docs/error_code.md) +- [Countries/Regions and Tuya Data Center](https://github.com/tuya/tuya-home-assistant/blob/master/docs/regions_dataCenters.md) +- [FAQs](https://github.com/tuya/tuya-home-assistant/blob/master/docs/faq.md) diff --git a/source/_integrations/uk_transport.markdown b/source/_integrations/uk_transport.markdown index d1381452e71..84a115617f4 100644 --- a/source/_integrations/uk_transport.markdown +++ b/source/_integrations/uk_transport.markdown @@ -84,27 +84,22 @@ Attributes can be accessed using the [template sensor](/integrations/template) a ```yaml # Example configuration.yaml entry for a template sensor to access the attributes of the next departing train. -- platform: template - sensors: - next_train_status: - friendly_name: "Next train status" - value_template: >- +template: + - sensor: + - name: Next train status + state: >- {{state_attr('sensor.next_train_to_wat', 'next_trains')[0].status}} - next_trains_origin: - friendly_name: "Next train origin" - value_template: >- + - name: Next train origin + state: >- {{state_attr('sensor.next_train_to_wat', 'next_trains')[0].origin_name}} - next_trains_estimated: - friendly_name: "Next train estimated" - value_template: >- + - name: Next train estimated + state: >- {{state_attr('sensor.next_train_to_wat', 'next_trains')[0].estimated}} - next_trains_scheduled: - friendly_name: "Next train scheduled" - value_template: >- + - name: Next train scheduled + state: >- {{state_attr('sensor.next_train_to_wat', 'next_trains')[0].scheduled}} - next_trains_platform: - friendly_name: "Next train platform" - value_template: >- + - name: Next train platform + state: >- {{state_attr('sensor.next_train_to_wat', 'next_trains')[0].platform}} ``` @@ -141,20 +136,16 @@ And the template sensor for viewing the next bus attributes. ```yaml # Example configuration.yaml entry for a template sensor to access the attributes of the next departing bus. -- platform: template - sensors: - next_bus_route: - friendly_name: "Next bus route" - value_template: "{{state_attr('sensor.next_bus_to_wantage', 'next_buses')[0].route}}" - next_bus_direction: - friendly_name: "Next bus direction" - value_template: "{{state_attr('sensor.next_bus_to_wantage', 'next_buses')[0].direction}}" - next_bus_scheduled: - friendly_name: "Next bus scheduled" - value_template: "{{state_attr('sensor.next_bus_to_wantage', 'next_buses')[0].scheduled}}" - next_bus_estimated: - friendly_name: "Next bus estimated" - value_template: "{{state_attr('sensor.next_bus_to_wantage', 'next_buses')[0].estimated}}" +template: + - sensor: + - name: Next bus route + state: "{{state_attr('sensor.next_bus_to_wantage', 'next_buses')[0].route}}" + - name: Next bus direction + state: "{{state_attr('sensor.next_bus_to_wantage', 'next_buses')[0].direction}}" + - name: Next bus scheduled + state: "{{state_attr('sensor.next_bus_to_wantage', 'next_buses')[0].scheduled}}" + - name: Next bus estimated + state: "{{state_attr('sensor.next_bus_to_wantage', 'next_buses')[0].estimated}}" ``` {% endraw %} diff --git a/source/_integrations/utility_meter.markdown b/source/_integrations/utility_meter.markdown index 42c250e3e51..817aaba49b1 100644 --- a/source/_integrations/utility_meter.markdown +++ b/source/_integrations/utility_meter.markdown @@ -55,8 +55,8 @@ offset: type: time type: integer cron: - description: This option is *mutually exclusive* of `cycle` and `offset`. It provides an advanced method of defining when should the counter be reset. It follows common [crontab syntax](https://crontab.guru). - required: false + description: This option is *mutually exclusive* of `cycle` and `offset`. It provides an advanced method of defining when should the counter be reset. It follows common [crontab syntax](https://crontab.guru) but extended to support more advanced scheduling. See the [croniter](https://github.com/taichino/croniter) library. + required: true type: string net_consumption: description: Set this to True if you would like to treat the source as a net meter. This will allow your counter to go both positive and negative. @@ -172,6 +172,20 @@ automation: entity_id: utility_meter.monthly_energy ``` +Assuming your utility provider cycle is offset from the last day of the month + +- cycles at 17h00 on the last day of the month + +a cron(extended syntax used for last day of month) based utility meter can be used: + +```yaml +utility_meter: + monthly_energy: + source: sensor.energy + name: Monthly Energy + cron: "0 17 L * *" +``` + ## Advanced Configuration for DSMR users When using the [DSMR component](/integrations/dsmr) to get data from the utility meter, each tariff (peak and off-peak) has a separate sensor. Additionally, there is a separate sensor for gas consumption. The meter switches automatically between tariffs, so an automation is not necessary in this case. But, you do have to setup a few more instances of the `utility_meter` component. @@ -212,22 +226,34 @@ utility_meter: cycle: monthly ``` -Additionally, you can add template sensors to compute daily and monthly total usage. +Additionally, you can add template sensors to compute daily and monthly total usage. Important note, in these examples, +we use the `is_number()` [function](/docs/configuration/templating/#numeric-functions-and-filters) to verify the values +returned from the sensors are numeric. If this evalutes to false, `None` is returned. {% raw %} ```yaml -sensor: - - platform: template - sensors: - daily_energy: - friendly_name: Daily Energy - unit_of_measurement: kWh - value_template: "{{ states('sensor.daily_energy_offpeak')|float + states('sensor.daily_energy_peak')|float }}" - monthly_energy: - friendly_name: Monthly Energy - unit_of_measurement: kWh - value_template: "{{ states('sensor.monthly_energy_offpeak')|float + states('sensor.monthly_energy_peak')|float }}" +template: + - sensor: + - name: 'Daily Energy Total' + device_class: energy + unit_of_measurement: kWh + state: > + {% if is_number(states('sensor.daily_energy_offpeak')) and is_number(states('sensor.daily_energy_peak')) %} + {{ (states('sensor.daily_energy_offpeak') + states('sensor.daily_energy_peak')) | float }} + {% else %} + None + {% endif %} + + - name: 'Monthly Energy Total' + device_class: energy + unit_of_measurement: kWh + state: > + {% if is_number(states('sensor.monthly_energy_offpeak')) and is_number(states('sensor.monthly_energy_peak')) %} + {{ (states('sensor.monthly_energy_offpeak') + states('sensor.monthly_energy_peak')) | float }} + {% else %} + None + {% endif %} ``` {% endraw %} diff --git a/source/_integrations/withings.markdown b/source/_integrations/withings.markdown index b79f0f27346..1553272687c 100644 --- a/source/_integrations/withings.markdown +++ b/source/_integrations/withings.markdown @@ -127,46 +127,52 @@ In a text editor, replace ```USER_PROFILE_NAME``` in the template sensors below ```yaml # Example configuration.yaml entry -sensor: - - platform: template - sensors: - withings_weight_lbs_USER_PROFILE_NAME: - friendly_name: "withings weight_lbs_USER_PROFILE_NAME" - unit_of_measurement: "lbs" - value_template: "{{ (states('sensor.withings_weight_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) | round(2, default=0) }}" - icon_template: mdi:weight-pound +template: + - sensor: + - name: Withings weight lbs USER_PROFILE_NAME + unit_of_measurement: "lbs" + state: >- + {{ + (states('sensor.withings_weight_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) + | round(2, default=0) + }} + icon: "mdi:weight-pound" - - platform: template - sensors: - withings_bone_mass_lbs_USER_PROFILE_NAME: - friendly_name: "withings bone_mass_lbs_USER_PROFILE_NAME" - unit_of_measurement: "lbs" - value_template: "{{ (states('sensor.withings_bone_mass_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) | round(2, default=0) }}" - icon_template: mdi:weight-pound - - - platform: template - sensors: - withings_fat_free_mass_lbs_USER_PROFILE_NAME: - friendly_name: "withings fat_free_mass_lbs_USER_PROFILE_NAME" - unit_of_measurement: "lbs" - value_template: "{{ (states('sensor.withings_fat_free_mass_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) | round(2, default=0) }}" - icon_template: mdi:weight-pound - - - platform: template - sensors: - withings_fat_mass_lbs_USER_PROFILE_NAME: - friendly_name: "withings fat_mass_lbs_USER_PROFILE_NAME" - unit_of_measurement: "lbs" - value_template: "{{ (states('sensor.withings_fat_mass_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) | round(2, default=0) }}" - icon_template: mdi:weight-pound - - - platform: template - sensors: - withings_muscle_mass_lbs_USER_PROFILE_NAME: - friendly_name: "withings muscle_mass_lbs_USER_PROFILE_NAME" - unit_of_measurement: "lbs" - value_template: "{{ (states('sensor.withings_muscle_mass_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) | round(2, default=0) }}" - icon_template: mdi:weight-pound + - name: Withings bone mass lbs USER_PROFILE_NAME + unit_of_measurement: "lbs" + state: >- + {{ + (states('sensor.withings_bone_mass_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) + | round(2, default=0) + }} + icon: "mdi:weight-pound" + + - name: Withings fat free mass lbs USER_PROFILE_NAME + unit_of_measurement: "lbs" + state: >- + {{ + (states('sensor.withings_fat_free_mass_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) + | round(2, default=0) + }} + icon: "mdi:weight-pound" + + - name: Withings fat mass lbs USER_PROFILE_NAME + unit_of_measurement: "lbs" + state: >- + {{ + (states('sensor.withings_fat_mass_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) + | round(2, default=0) + }} + icon: "mdi:weight-pound" + + - name: Withings muscle mass lbs USER_PROFILE_NAME + unit_of_measurement: "lbs" + state: >- + {{ + (states('sensor.withings_muscle_mass_kg_USER_PROFILE_NAME') | float(0) * 2.20462262185) + | round(2, default=0) + }} + icon: "mdi:weight-pound" ``` {% endraw %} diff --git a/source/_integrations/zwave.markdown b/source/_integrations/zwave.markdown index 7ffd523b611..aa5f1f89deb 100644 --- a/source/_integrations/zwave.markdown +++ b/source/_integrations/zwave.markdown @@ -37,11 +37,19 @@ The Z-Wave integration will no longer receive any updates. The technical depende