diff --git a/CODEOWNERS b/CODEOWNERS index 015522cb2cc..c6999386086 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -26,6 +26,7 @@ source/_integrations/alpha_vantage.markdown @fabaff source/_integrations/ambiclimate.markdown @danielhiversen source/_integrations/ambient_station.markdown @bachya source/_integrations/amcrest.markdown @pnbruckner +source/_integrations/analytics.markdown @home-assistant/core @ludeeus source/_integrations/androidtv.markdown @JeffLIrion source/_integrations/apache_kafka.markdown @bachya source/_integrations/api.markdown @home-assistant/core @@ -36,7 +37,7 @@ source/_integrations/arcam_fmj.markdown @elupus source/_integrations/arduino.markdown @fabaff source/_integrations/arest.markdown @fabaff source/_integrations/arris_tg2492lg.markdown @vanbalken -source/_integrations/asuswrt.markdown @kennedyshead +source/_integrations/asuswrt.markdown @kennedyshead @ollo69 source/_integrations/atag.markdown @MatsNL source/_integrations/aten_pe.markdown @mtdcr source/_integrations/atome.markdown @baqs @@ -135,7 +136,7 @@ source/_integrations/esphome.markdown @OttoWinter source/_integrations/essent.markdown @TheLastProject source/_integrations/evohome.markdown @zxdavb source/_integrations/ezviz.markdown @baqs -source/_integrations/faadelays.markdown @ntilley905 +source/_integrations/faa_delays.markdown @ntilley905 source/_integrations/fastdotcom.markdown @rohankapoorcom source/_integrations/file.markdown @fabaff source/_integrations/filter.markdown @dgomes @@ -169,13 +170,11 @@ source/_integrations/google_cloud.markdown @lufton source/_integrations/gpsd.markdown @fabaff source/_integrations/gree.markdown @cmroche source/_integrations/greeneye_monitor.markdown @jkeljo -source/_integrations/griddy.markdown @bdraco source/_integrations/group.markdown @home-assistant/core source/_integrations/growatt_server.markdown @indykoning source/_integrations/guardian.markdown @bachya source/_integrations/habitica.markdown @ASMfreaK @leikoilja source/_integrations/harmony.markdown @ehendrix23 @bramkragten @bdraco @mkeesey -source/_integrations/hdmi_cec.markdown @newAM source/_integrations/heatmiser.markdown @andylockran source/_integrations/heos.markdown @andrewsayre source/_integrations/here_travel_time.markdown @eifinger @@ -186,11 +185,11 @@ source/_integrations/history.markdown @home-assistant/core source/_integrations/hive.markdown @Rendili @KJonline source/_integrations/hlk_sw16.markdown @jameshilliard source/_integrations/home_connect.markdown @DavidMStraub +source/_integrations/home_plus_control.markdown @chemaaa source/_integrations/homeassistant.markdown @home-assistant/core source/_integrations/homekit.markdown @bdraco source/_integrations/homekit_controller.markdown @Jc2k source/_integrations/homematic.markdown @pvizeli @danielperna84 -source/_integrations/homematicip_cloud.markdown @SukramJ source/_integrations/http.markdown @home-assistant/core source/_integrations/huawei_lte.markdown @scop @fphammerle source/_integrations/huawei_router.markdown @abmantis @@ -388,6 +387,7 @@ source/_integrations/samsungtv.markdown @escoand source/_integrations/scene.markdown @home-assistant/core source/_integrations/schluter.markdown @prairieapps source/_integrations/scrape.markdown @fabaff +source/_integrations/screenlogic.markdown @dieselrabbit source/_integrations/script.markdown @home-assistant/core source/_integrations/search.markdown @home-assistant/core source/_integrations/sense.markdown @kbickar @@ -418,12 +418,12 @@ source/_integrations/smarttub.markdown @mdz source/_integrations/smarty.markdown @z0mbieprocess source/_integrations/sms.markdown @ocalvo source/_integrations/smtp.markdown @fabaff +source/_integrations/solaredge.markdown @frenck source/_integrations/solaredge_local.markdown @drobtravels @scheric source/_integrations/solarlog.markdown @Ernst79 source/_integrations/solax.markdown @squishykid source/_integrations/soma.markdown @ratsept source/_integrations/somfy.markdown @tetienne -source/_integrations/somfy_mylink.markdown @bdraco source/_integrations/sonarr.markdown @ctalkington source/_integrations/songpal.markdown @rytilahti @shenxn source/_integrations/sonos.markdown @cgtobi @@ -439,7 +439,7 @@ source/_integrations/starline.markdown @anonym-tsk source/_integrations/statistics.markdown @fabaff source/_integrations/stiebel_eltron.markdown @fucm source/_integrations/stookalert.markdown @fwestenberg -source/_integrations/stream.markdown @hunterjm @uvjustin +source/_integrations/stream.markdown @hunterjm @uvjustin @allenporter source/_integrations/stt.markdown @pvizeli source/_integrations/subaru.markdown @G-Two source/_integrations/suez_water.markdown @ooii @@ -497,7 +497,7 @@ source/_integrations/usgs_earthquakes_feed.markdown @exxamalte source/_integrations/utility_meter.markdown @dgomes source/_integrations/velbus.markdown @Cereal2nd @brefra source/_integrations/velux.markdown @Julius2342 -source/_integrations/vera.markdown @vangorra +source/_integrations/vera.markdown @pavoni source/_integrations/verisure.markdown @frenck source/_integrations/versasense.markdown @flamm3blemuff1n source/_integrations/version.markdown @fabaff @ludeeus @@ -509,6 +509,7 @@ source/_integrations/vizio.markdown @raman325 source/_integrations/vlc_telnet.markdown @rodripf @dmcc source/_integrations/volkszaehler.markdown @fabaff source/_integrations/volumio.markdown @OnFreund +source/_integrations/wake_on_lan.markdown @ntilley905 source/_integrations/waqi.markdown @andrey-git source/_integrations/watson_tts.markdown @rutkai source/_integrations/weather.markdown @fabaff diff --git a/_config.yml b/_config.yml index 0f511f9f691..2a7275c2b92 100644 --- a/_config.yml +++ b/_config.yml @@ -105,9 +105,9 @@ social: # Home Assistant release details current_major_version: 2021 -current_minor_version: 3 -current_patch_version: 4 -date_released: 2021-03-12 +current_minor_version: 4 +current_patch_version: 0 +date_released: 2021-04-07 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_docs/automation/templating.markdown b/source/_docs/automation/templating.markdown index 38da81fa0bf..937aa423b91 100644 --- a/source/_docs/automation/templating.markdown +++ b/source/_docs/automation/templating.markdown @@ -1,26 +1,10 @@ --- -title: "Automation Templating" -description: "Advanced automation documentation using templating." +title: "Automation Trigger Variables" +description: "List all available variables made available by triggers." --- Automations support [templating](/docs/configuration/templating/) in the same way as scripts do. In addition to the [Home Assistant template extensions](/docs/configuration/templating/#home-assistant-template-extensions) available to scripts, the `trigger` template variable is available. -
- - Be aware that if you reference a `trigger` state object in templates of an automation' `action` or `condition` sections, attempting to test that automation by calling the `automation.trigger` service or by clicking EXECUTE in the More Info box for the automation will not work. This is because the trigger state object doesn't exist in those contexts. One way to test automations like these is to manually check that the templates work as expected by pasting them in {% my developer_template title="Developer Tools > Template" %} together with your trigger's definition like: - -{%raw%} - -```yaml -{% set trigger={'to_state':{'state': 'heat'}} %} -{% set option = trigger.to_state.state %} -{{ 'on' if option == 'heat' else 'off' }} -``` - -{%endraw%} - -
- ## Available Trigger Data The following tables show the available trigger data per platform. diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index aca3c69e3c6..bb29ef57a97 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -3,13 +3,24 @@ title: "Automation Trigger" description: "All the different ways how automations can be triggered." --- -## What are triggers - Triggers are what starts the processing of an automation rule. When _any_ of the automation's triggers becomes true (trigger _fires_), Home Assistant will validate the [conditions](/docs/automation/condition/), if any, and call the [action](/docs/automation/action/). An automation can be triggered by an event, with a certain entity state, at a given time, and more. These can be specified directly or more flexible via templates. It is also possible to specify multiple triggers for one automation. -The following sections introduce all trigger types and further details to get started. +- [Event trigger](#event-trigger) +- [Home Assistant trigger](#home-assistant-trigger) +- [MQTT trigger](#mqtt-trigger) +- [Numeric state trigger](#numeric-state-trigger) +- [State trigger](#state-trigger) +- [Sun trigger](#sun-trigger) +- [Tag trigger](#tag-trigger) +- [Template trigger](#template-trigger) +- [Time trigger](#time-trigger) +- [Time pattern trigger](#time-pattern-trigger) +- [Webhook trigger](#webhook-trigger) +- [Zone trigger](#zone-trigger) +- [Geolocation trigger](#geolocation-trigger) +- [Device triggers](#device-triggers) ## Trigger variables diff --git a/source/_docs/backend/updater.markdown b/source/_docs/backend/updater.markdown deleted file mode 100644 index e041a0e372d..00000000000 --- a/source/_docs/backend/updater.markdown +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Updater" -description: "Details what the updater integration is reporting about your Home Assistant instance." ---- - -Starting with 0.31 the [updater component](/integrations/updater/) sends an optional report about Home Assistant instance. - -If you want to opt-in to include integration information, add `include_used_components` to your configuration. This will allow the Home Assistant developers to focus development efforts on the most popular components. - -```yaml -updater: - include_used_components: true -``` - -We are only collecting this information to better understand our user base to provide better long term support and feature development. - -| Name | Description | Example | Data Source | -| --------------------- | ------------------------------------------ | ---------------------------------- | -------------- | -| `arch` | CPU Architecture | `x86_64` | Local Instance | -| `distribution` | Linux Distribution name (only Linux) | `Ubuntu` | Local Instance | -| `docker` | True if running inside Docker | `false` | Local Instance | -| `first_seen_datetime` | First time instance ID was submitted | `2016-10-22T19:56:03.542Z` | Update Server | -| `geo_city` | GeoIP determined city | `Oakland` | Update Server | -| `geo_country_code` | GeoIP determined country code | `US` | Update Server | -| `geo_country_name` | GeoIP determined country name | `United States` | Update Server | -| `geo_latitude` | GeoIP determined latitude | `37.8047` | Update Server | -| `geo_longitude` | GeoIP determined longitude | `-122.2124` | Update Server | -| `geo_metro_code` | GeoIP determined metro code | `807` | Update Server | -| `geo_region_code` | GeoIP determined region code | `CA` | Update Server | -| `geo_region_name` | GeoIP determined region name | `California` | Update Server | -| `geo_time_zone` | GeoIP determined time zone | `America/Los_Angeles` | Update Server | -| `geo_zip_code` | GeoIP determined zip code | `94602` | Update Server | -| `last_seen_datetime` | Most recent time instance ID was submitted | `2016-10-22T19:56:03.542Z` | Update Server | -| `os_name` | Operating system name | `Darwin` | Local Instance | -| `os_version` | Operating system version | `10.12` | Local Instance | -| `python_version` | Python version | `3.5.2` | Local Instance | -| `timezone` | Timezone | `America/Los_Angeles` | Local Instance | -| `user_agent` | User agent used to submit analytics | `python-requests/2.11.1` | Local Instance | -| `uuid` | Unique identifier | `10321ee6094d4a2ebb5ed55c675d5f5e` | Local Instance | -| `version` | Home Assistant version | `0.31.0` | Local Instance | -| `virtualenv` | True if running inside virtualenv | `true` | Local Instance | - -In addition to the above collected data, the server will also use your IP address to do a geographic IP address lookup to determine a general geographic area that your address is located in. To be extremely, extremely clear about this bit: __The Home Assistant updater does not: store your IP address in a database and also does not submit the location information from your `configuration.yaml`.__ - -Our tests showed that at best, we get 4 digits of accuracy on your IP address location which is a 5 mile radius of your actual IP location, assuming that it is even correct in the first place (geo IP lookups are very hit or miss). - -The server also adds two timestamps to the data: - -- the original date your instance UUID was first seen -- the timestamp of the last time we have seen your instance - -We will never publicly expose individual gathered data. We might however publish aggregated stats about our user base (example: 70% of all users use Linux). We will never sell or allow the use of this information for non-Home Assistant development purposes. diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 056000fee93..471ec71cd74 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -158,8 +158,13 @@ Supported abbreviations: 'on_cmd_type': 'on_command_type', 'opt': 'optimistic', 'osc_cmd_t': 'oscillation_command_topic', + 'osc_cmd_tpl': 'oscillation_command_template', 'osc_stat_t': 'oscillation_state_topic', 'osc_val_tpl': 'oscillation_value_template', + 'pct_cmd_t': 'percentage_command_topic', + 'pct_cmd_tpl': 'percentage_command_template', + 'pct_stat_t': 'percentage_state_topic', + 'pct_val_tpl': 'percentage_value_template', 'pl': 'payload', 'pl_arm_away': 'payload_arm_away', 'pl_arm_home': 'payload_arm_home', @@ -169,16 +174,12 @@ Supported abbreviations: 'pl_cln_sp': 'payload_clean_spot', 'pl_cls': 'payload_close', 'pl_disarm': 'payload_disarm', - 'pl_hi_spd': 'payload_high_speed', 'pl_home': 'payload_home', 'pl_lock': 'payload_lock', 'pl_loc': 'payload_locate', - 'pl_lo_spd': 'payload_low_speed', - 'pl_med_spd': 'payload_medium_speed', 'pl_not_avail': 'payload_not_available', 'pl_not_home': 'payload_not_home', 'pl_off': 'payload_off', - 'pl_off_spd': 'payload_off_speed', 'pl_on': 'payload_on', 'pl_open': 'payload_open', 'pl_osc_off': 'payload_oscillation_off', @@ -196,6 +197,11 @@ Supported abbreviations: 'pow_cmd_t': 'power_command_topic', 'pow_stat_t': 'power_state_topic', 'pow_stat_tpl': 'power_state_template', + 'pr_mode_cmd_t': 'preset_mode_command_topic', + 'pr_mode_cmd_tpl': 'preset_mode_command_template', + 'pr_mode_stat_t': 'preset_mode_state_topic', + 'pr_mode_val_tpl': 'preset_mode_value_template', + 'pr_modes': 'preset_modes', 'r_tpl': 'red_template', 'ret': 'retain', 'rgb_cmd_tpl': 'rgb_command_template', @@ -209,10 +215,8 @@ Supported abbreviations: 'set_pos_t': 'set_position_topic', 'pos_t': 'position_topic', 'pos_tpl': 'position_template', - 'spd_cmd_t': 'speed_command_topic', - 'spd_stat_t': 'speed_state_topic', - 'spd_val_tpl': 'speed_value_template', - 'spds': 'speeds', + 'spd_rng_min': 'speed_range_min', + 'spd_rng_max': 'speed_range_max', 'src_type': 'source_type', 'stat_clsd': 'state_closed', 'stat_closing': 'state_closing', @@ -277,6 +281,7 @@ Supported abbreviations for device registry configuration: 'mf': 'manufacturer', 'mdl': 'model', 'sw': 'sw_version', + 'sa': 'suggested_area', ``` ## Support by third-party tools diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index a7546728ac3..91094ac2281 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -122,7 +122,6 @@ {% active_link /docs/backend/ Backend %}
  • diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown index 4d7647c9e38..a543b9baa2e 100644 --- a/source/_integrations/alarm_control_panel.mqtt.markdown +++ b/source/_integrations/alarm_control_panel.mqtt.markdown @@ -113,6 +113,10 @@ device: description: "The name of the device." required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: "The firmware version of the device." required: false @@ -121,6 +125,10 @@ device: description: "Identifier of a device that routes messages between this device and Home Assistant. Examples of such devices are hubs, or parent devices of a sub-device. This is used to show device topology in Home Assistant." required: false type: string +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false diff --git a/source/_integrations/amcrest.markdown b/source/_integrations/amcrest.markdown index 1c266a8d6ff..fd642957a8d 100644 --- a/source/_integrations/amcrest.markdown +++ b/source/_integrations/amcrest.markdown @@ -117,6 +117,10 @@ binary_sensors: description: "Return `on` when a motion is detected, `off` when not. Motion detection is enabled by default for most cameras, if this functionality is not working check that it is enabled in Settings > Events > Video Detection. Uses streaming method (see [below](#streaming-vs-polled-binary-sensors))." motion_detected_polled: description: "Return `on` when a motion is detected, `off` when not. Motion detection is enabled by default for most cameras, if this functionality is not working check that it is enabled in Settings > Events > Video Detection. Uses polled method (see [below](#streaming-vs-polled-binary-sensors))." + crossline_detected: + description: "Return `on` when a tripwire tripping is detected, `off` when not. Uses streaming method (see [below](#streaming-vs-polled-binary-sensors))." + crossline_detected_polled: + description: "Return `on` when a tripwire is tripping is detected, `off` when not. Uses polled method (see [below](#streaming-vs-polled-binary-sensors))." online: description: "Return `on` when camera is available (i.e., responding to commands), `off` when not." sensors: @@ -377,6 +381,7 @@ amcrest: password: YOUR_PASSWORD binary_sensors: - motion_detected + - crossline_detected - online sensors: - sdcard diff --git a/source/_integrations/analytics.markdown b/source/_integrations/analytics.markdown new file mode 100644 index 00000000000..ea4a1828a8b --- /dev/null +++ b/source/_integrations/analytics.markdown @@ -0,0 +1,151 @@ +--- +title: Analytics +description: Share system analytics and diagnostics +ha_category: + - Other +ha_release: 2021.4 +ha_iot_class: Cloud Push +ha_quality_scale: internal +ha_codeowners: + - '@home-assistant/core' + - '@ludeeus' +ha_domain: analytics +--- + +Home Assistant allows users to share their usage data via the analytics integration. The aggregated data is available at . It is used to influence Home Assistant development priorities and to convince manufacturers to add local control and privacy-focused features. + +## Data Collection + +The information sent depends on what you opt-in to. You can opt-in during onboarding and by going to **{% my general title="Configuration >> General" %}**. + +**{% my general badge %}** + +When enabled, data will be sent 15 minutes after each start, and every 24h after startup. Sent data is printed to your log. + +### Basic analytics + +This includes: + +- Unique identifier for your system (to ensure each installation is counted once) +- Home Assistant version +- Home Assistant installation type +- Your country (derived server-side from your IP-address) + +If your system includes the Supervisor, this will also contain: + +- If your installation is supported +- If your installation is healthy + +{% details Example payload %} + +```json +{ + "uuid": "12a3456bc78d90123ef4567g789012h3", + "version": "2021.4.0", + "installation_type": "Home Assistant OS", + "supervisor": { + "healthy": true, + "supported": true + } +} +``` + +{% enddetails %} + +### Usage analytics + +_Requires basic analytics to be enabled._ + +This includes: + +- The names of all your integrations + +If your system includes the Supervisor, this will also contain: + +- For each add-on + - Name + - Version + - If protection mode is enabled + - If auto update is enabled + +{% details Example payload %} + +```json +{ + "uuid": "12a3456bc78d90123ef4567g789012h3", + "version": "2021.4.0", + "installation_type": "Home Assistant OS", + "supervisor": { + "healthy": true, + "supported": true + }, + "integrations": ["awesome_integration"], + "addons": [ + { + "slug": "awesome_addon", + "protected": true, + "version": "1.0.0", + "auto_update": false + } + ] +} +``` + +{% enddetails %} + +### Statistics + +_Requires basic analytics to be enabled._ + +This includes: + +- Number of integrations +- Number of users +- Number of entities +- Number of automations + +If your system includes the Supervisor, this will also contain: + +- Number of installed add-ons + +{% details Example payload %} + +```json +{ + "uuid": "12a3456bc78d90123ef4567g789012h3", + "version": "2021.4.0", + "installation_type": "Home Assistant OS", + "supervisor": { + "healthy": true, + "supported": true + }, + "state_count": 1, + "automation_count": 2, + "integration_count": 3, + "addon_count": 4, + "user_count": 5 +} +``` + +{% enddetails %} + +### Diagnostics + +If enabled, a crash report will be collected when an unexpected error occurs and uploaded to [Sentry](https://sentry.io). These reports will help fix bugs and improve performance and stability. + +Crash reports are only visible to the Home Assistant Core developers. This feature is currently limited to the Supervisor. + +## Data storage & processing + +All data is received and processed by the Home Assistant Analytics Receiver ([source](https://github.com/home-assistant/analytics.home-assistant.io)). + +When your installation sends a payload, that payload includes a unique identifier. This identifier is used to make sure that your installation is only counted once. + +Your data is securely stored in [CloudFlare's Key-Value store](https://www.cloudflare.com/products/workers-kv/). It will be stored for a maximum of 60 days since the last update. Only aggregated data is made publicly available. + +This is an example of how the information is stored: +{% configuration_basic %} +"uuid:12a3456bc78d90123ef4567g789012h3": + description: "{'version': '2021.4.0', 'installation_type': 'Home Assistant OS', 'country': 'NO'}" + +{% endconfiguration_basic %} diff --git a/source/_integrations/asuswrt.markdown b/source/_integrations/asuswrt.markdown index 5f64d7ff796..66362a1b61d 100644 --- a/source/_integrations/asuswrt.markdown +++ b/source/_integrations/asuswrt.markdown @@ -10,6 +10,7 @@ ha_config_flow: true ha_iot_class: Local Polling ha_codeowners: - '@kennedyshead' + - '@ollo69' ha_domain: asuswrt ha_platforms: - device_tracker diff --git a/source/_integrations/august.markdown b/source/_integrations/august.markdown index c357686cd2f..2d82264b568 100644 --- a/source/_integrations/august.markdown +++ b/source/_integrations/august.markdown @@ -8,7 +8,7 @@ ha_category: - Camera - Lock ha_release: 0.64 -ha_iot_class: Cloud Polling +ha_iot_class: Cloud Push ha_config_flow: true ha_codeowners: - '@bdraco' diff --git a/source/_integrations/binary_sensor.modbus.markdown b/source/_integrations/binary_sensor.modbus.markdown deleted file mode 100644 index 33424ab389a..00000000000 --- a/source/_integrations/binary_sensor.modbus.markdown +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: "Modbus Binary Sensor" -description: "Instructions on how to set up Modbus binary sensors within Home Assistant." -ha_category: - - Binary Sensor -ha_release: 0.28 -ha_iot_class: Local Push -ha_domain: modbus ---- - -The `modbus` binary sensor allows you to gather data from [Modbus](http://www.modbus.org/) coils. - -## Configuration - -To use your Modbus binary sensors in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: modbus - inputs: - - name: Sensor1 - hub: hub1 - slave: 1 - address: 100 - - name: Sensor2 - hub: hub1 - slave: 1 - address: 110 - input_type: discrete_input -``` - -{% configuration %} -inputs: - description: The array contains a list of coils and discrete inputs to read from. - required: true - type: [map, list] - keys: - name: - description: Name of the sensor. - required: true - type: string - hub: - description: The name of the hub. - required: false - default: modbus_hub - type: string - slave: - description: The number of the slave (Optional for TCP and UDP Modbus). - required: true - type: integer - address: - description: Coil or discrete input Modbus address. - required: true - type: integer - input_type: - description: Modbus input type (coil, discrete_input), default coil. - required: false - type: string - device_class: - description: The [type/class](/integrations/binary_sensor/#device-class) of the binary sensor to set the icon in the frontend. - required: false - type: device_class - default: None -{% endconfiguration %} - -It's possible to change the default 30 seconds scan interval for the sensor updates as shown in the [Platform options](/docs/configuration/platform_options/#scan-interval) documentation. - -## Full example - -Example a sensor with a 10 seconds scan interval: - -```yaml -binary_sensor: - - platform: modbus - scan_interval: 10 - inputs: - - name: Sensor1 - hub: hub1 - slave: 1 - address: 100 - - name: Sensor2 - hub: hub1 - slave: 1 - address: 110 - input_type: discrete_input -``` diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown index 428f376dfaf..3c3f1dffb70 100644 --- a/source/_integrations/binary_sensor.mqtt.markdown +++ b/source/_integrations/binary_sensor.mqtt.markdown @@ -84,6 +84,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false @@ -105,6 +109,10 @@ force_update: required: false type: boolean default: false +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false diff --git a/source/_integrations/blink.markdown b/source/_integrations/blink.markdown index 0b7f1781d19..51b179625e3 100644 --- a/source/_integrations/blink.markdown +++ b/source/_integrations/blink.markdown @@ -18,6 +18,7 @@ ha_platforms: - binary_sensor - camera - sensor +ha_dhcp: true --- The `blink` integration lets you view camera images and motion events from [Blink](https://blinkforhome.com/) camera and security systems. diff --git a/source/_integrations/broadlink.markdown b/source/_integrations/broadlink.markdown index 5b566577ea5..7cbfe6f0e78 100644 --- a/source/_integrations/broadlink.markdown +++ b/source/_integrations/broadlink.markdown @@ -16,6 +16,7 @@ ha_platforms: - remote - sensor - switch +ha_dhcp: true --- The Broadlink integration allows you to control and monitor Broadlink universal remotes, smart plugs, power strips, switches and sensors. The following devices are supported: diff --git a/source/_integrations/camera.mqtt.markdown b/source/_integrations/camera.mqtt.markdown index 811382e65a4..00304a9a52b 100644 --- a/source/_integrations/camera.mqtt.markdown +++ b/source/_integrations/camera.mqtt.markdown @@ -77,6 +77,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false @@ -85,6 +89,10 @@ device: description: 'Identifier of a device that routes messages between this device and Home Assistant. Examples of such devices are hubs, or parent devices of a sub-device. This is used to show device topology in Home Assistant.' required: false type: string +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false diff --git a/source/_integrations/climate.modbus.markdown b/source/_integrations/climate.modbus.markdown deleted file mode 100644 index 1deeeab1c4b..00000000000 --- a/source/_integrations/climate.modbus.markdown +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: "Modbus Climate" -description: "Instructions how to integrate a Modbus thermostat within Home Assistant." -ha_category: - - Climate -ha_release: 0.68 -ha_iot_class: Local Polling -ha_domain: modbus ---- - - -The `modbus` thermostat allows you to use a sensor value (current temperature) and target value (target temperature) from [Modbus](http://www.modbus.org/) registers. - -## Configuration - -To use your Modbus thermostat in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -modbus: - - name: hub1 - type: tcp - host: IP_ADDRESS - port: 502 - - climates: - - name: Watlow F4T - slave: 1 - data_type: uint - data_count: 1 - scale: 0.1 - offset: 0 - precision: 1 - max_temp: 30 - min_temp: 15 - temp_step: 1 - target_temp_register: 2782 - current_temp_register: 27586 -``` - -{% configuration %} -name: - description: Name of the device - required: true - type: string -slave: - description: The number of the slave (Optional for tcp and upd Modbus, use 1). - required: true - type: integer -target_temp_register: - description: Register number for target temperature (Setpoint). - required: true - type: integer -current_temp_register: - description: Register number for current temperature (Process value). - required: true - type: integer -current_temp_register_type: - description: Modbus register type (holding, input) for current temperature, default holding. - required: false - type: string - default: holding -data_type: - description: Response representation (int, uint, float, custom). If float selected, value will converted to IEEE 754 floating point format. - required: false - type: string - default: float -structure: - description: "If `data_type` is custom specified a double-quoted Python struct is expected here, to format the string to unpack the value. See Python documentation for details. Example: `>i`." - required: false - type: string - default: ">f" -data_count: - description: Number of registers to read. - required: false - type: integer - default: 2 -precision: - description: Number of valid decimals. - required: false - type: integer - default: 1 -scale: - description: Scale factor (output = scale * value + offset). - required: false - type: float - default: 1 -offset: - description: Final offset (output = scale * value + offset). - required: false - type: float - default: 0 -max_temp: - description: Maximum setpoint temperature. - required: false - type: integer - default: 35 -min_temp: - description: Maximum setpoint temperature. - required: false - type: integer - default: 5 -temp_step: - description: The supported step size a target temperature can be increased/decreased. - required: false - type: float - default: 0.5 -temperature_unit: - description: Temperature unit reported by the current_temp_register. C or F - required: false - type: string - default: C -scan_interval: - description: Defines the update interval of the sensor in seconds. - required: false - type: integer - default: 15 -{% endconfiguration %} - - -### Services - -| Service | Description | -| ------- | ----------- | -| set_temperature | Set Temperature. Requires `value` to be passed in, which is the desired target temperature. `value` should be in the same type as `data_type` | diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown index 448ac310a3c..a3bd1b3ff90 100644 --- a/source/_integrations/climate.mqtt.markdown +++ b/source/_integrations/climate.mqtt.markdown @@ -116,6 +116,10 @@ device: description: 'The name of the device.' required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: 'The firmware version of the device.' required: false @@ -170,6 +174,10 @@ initial: required: false type: integer default: 21 +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false diff --git a/source/_integrations/cover.modbus.markdown b/source/_integrations/cover.modbus.markdown deleted file mode 100644 index 59f6d3f25a6..00000000000 --- a/source/_integrations/cover.modbus.markdown +++ /dev/null @@ -1,210 +0,0 @@ ---- -title: "Modbus Cover" -description: "Instructions on how to integrate Modbus covers into Home Assistant." -ha_category: - - Cover -ha_release: 0.116 -ha_iot_class: Local Polling -ha_domain: modbus ---- - -The `modbus` cover platform allows you to control [Modbus](http://www.modbus.org/) covers (such as blinds, a roller shutter, or a garage door). - -## Configuration - -At the moment, we support the opening and closing of a cover. You can control your covers either using coils or holding registers. - -Cover that uses the `coil` attribute is not able to determine intermediary states such as opening and closing. Coil stores only two states — "0" means cover closed, and "1" implies cover open. To allow detecting intermediary states, we added an optional `status_register` attribute. It will enable you to write your command (e.g., to open a cover) into a coil, and read current cover status back through the register. Additionally, you can specify values for `state_open`, `state_opening`, `state_closed`, and `state_closing` attributes. These will be matched with the value read from the `status_register`. - -If your cover uses holding register to send commands (defined by the `register` attribute), it can also read the intermediary states. To adjust which value represents what state, you can fine-tune the optional state attributes, like `state_open`. These optional state values are also used for specifying values written into the register. If you specify an optional status_register attribute, cover states will be read from status_register instead of the register used for sending commands. - -To use Modbus covers in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -modbus: - - name: hub1 - type: tcp - host: IP_ADDRESS - port: 502 - - covers: - - name: Door1 - device_class: door - scan_interval: 1 - coil: 0 - - name: Door2 - device_class: door - scan_interval: 1 - coil: 1 - status_register: 1 - - name: Door3 - slave: 2 - device_class: door - scan_interval: 1 - register: 0 - state_open: 1 - state_closed: 0 -``` - -{% configuration %} -covers: - description: The array contains a list of all your Modbus covers. - required: true - type: map - keys: - slave: - description: The number of the slave (can be omitted for tcp and udp Modbus). - required: false - default: 1 - type: integer - name: - description: Name of the switch. - required: true - type: string - coil: - description: Coil address; can be omitted if a register attribute is specified. Coil and register attributes are mutually exclusive, and you need to always specify one of them. - required: true - type: integer - register: - description: Holding register address; can be omitted if a coil attribute is specified. Coil and register attributes are mutually exclusive, and you need to always specify one of them. - required: true - type: integer - status_register: - description: An address of an register, from which all the cover states will be read. If you specified `register` attribute, and not `status_register` attribute, your main register will also be used as a status register. - required: false - type: integer - status_register_type: - description: Modbus register type (holding, input), default holding. - required: false - type: string - state_open: - description: A value in `status_register` or `register` representing an open cover. If your configuration uses an `register` attribute, this value will be also written into a holding register to open the cover. - required: false - default: 1 - type: integer - state_closed: - description: A value in `status_register` or `register` representing a closed cover. If your configuration uses an `register` attribute, this value will be also written into a holding register to close the cover. - required: false - default: 0 - type: integer - state_opening: - description: A value in `status_register` or `register` telling us that the cover is opening at the moment. Note that this state should be also supported on your connected Modbus cover. If it won't write this intermediary state into the register, this state won't be detected. - required: false - default: 2 - type: integer - state_closing: - description: A value in `status_register` or `register` telling us that the cover is closing at the moment. Note that this state should be also supported on your connected Modbus cover. If it won't write this intermediary state into the register, this state won't be detected. - required: false - default: 2 - type: integer - device_class: - description: The [type/class](/integrations/cover/#device-class) of the cover to set the icon in the frontend. - required: false - type: device_class - default: None - scan_interval: - description: Defines the update interval of the sensor in seconds. - required: false - type: integer - default: 15 -{% endconfiguration %} - -## Examples - -In this section, you find some real-life examples of how to use this light. - -### Modbus cover controlled by a coil - -This example shows a configuration for a Modbus cover controlled using a coil. Intermediary states like opening/closing are not supported. The cover state is polled from Modbus every 10 seconds. - -```yaml -modbus: - - name: hub1 - type: tcp - host: IP_ADDRESS - port: 502 - - covers: - - name: Door1 - slave: 1 - coil: 1 - device_class: door - scan_interval: 10 - - name: Door2 - slave: 2 - coil: 2 - device_class: door - scan_interval: 10 -``` - -### Modbus cover controlled by a coil, it's state is read from the register - -This example shows a configuration for a Modbus cover controlled using a coil. Actual cover state is read from the `status_register`. We've also specified register values to match with the states open/opening/closed/closing. The cover state is polled from Modbus every 10 seconds. - -```yaml -modbus: - - name: hub1 - type: tcp - host: IP_ADDRESS - port: 502 - - covers: - - name: Door1 - slave: 1 - device_class: door - scan_interval: 10 - coil: 1 - status_register: 1 - status_register_type: input - state_opening: 1 - state_open: 2 - state_closing: 3 - state_closed: 4 -``` - -### Modbus cover controlled by a holding register - -This example shows a configuration for a Modbus cover controlled using a holding register, from which we also read current cover state. We've also specified register values to match with the states open/opening/closed/closing. The cover state is polled from Modbus every 10 seconds. - -```yaml -modbus: - - name: hub1 - type: tcp - host: IP_ADDRESS - port: 502 - - covers: - - name: Door1 - slave: 1 - device_class: door - scan_interval: 10 - register: 1 - state_opening: 1 - state_open: 2 - state_closing: 3 - state_closed: 4 -``` - -### Modbus cover controlled by a holding register, it's state is read from the status register - -This example shows a configuration for a Modbus cover controlled using a holding register. However, cover state is read from a `status_register`. In this case, we've specified only values for `state_open` and `state_closed`, for the rest, default values are used. The cover state is polled from Modbus every 10 seconds. - -```yaml -modbus: - - name: hub1 - type: tcp - host: IP_ADDRESS - port: 502 - - covers: - - name: Door1 - slave: 1 - device_class: door - scan_interval: 10 - register: 1 - status_register: 2 - register_type: holding - state_open: 1 - state_closed: 0 -``` diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown index 4f8cb32c244..476982f3e6d 100644 --- a/source/_integrations/cover.mqtt.markdown +++ b/source/_integrations/cover.mqtt.markdown @@ -94,6 +94,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false @@ -106,6 +110,10 @@ device_class: description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend. required: false type: string +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false diff --git a/source/_integrations/device_tracker.mqtt.markdown b/source/_integrations/device_tracker.mqtt.markdown index 1c777d8f7a6..77aeb5a2257 100644 --- a/source/_integrations/device_tracker.mqtt.markdown +++ b/source/_integrations/device_tracker.mqtt.markdown @@ -133,6 +133,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false @@ -142,7 +146,7 @@ device: required: false type: string icon: - description: The icon for the device tracker. + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." required: false type: icon json_attributes_template: diff --git a/source/_integrations/device_trigger.mqtt.markdown b/source/_integrations/device_trigger.mqtt.markdown index 1f47e3f0fe6..f088a7cbe68 100644 --- a/source/_integrations/device_trigger.mqtt.markdown +++ b/source/_integrations/device_trigger.mqtt.markdown @@ -68,6 +68,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false diff --git a/source/_integrations/econet.markdown b/source/_integrations/econet.markdown index e5360fd0565..f959af9625c 100644 --- a/source/_integrations/econet.markdown +++ b/source/_integrations/econet.markdown @@ -2,6 +2,9 @@ title: Rheem EcoNet Products description: Instructions on how to integrate Rheem EcoNet water heaters into Home Assistant. ha_category: + - Binary Sensor + - Climate + - Sensor - Water Heater ha_release: 0.61 ha_iot_class: Cloud Push @@ -12,10 +15,36 @@ ha_codeowners: ha_config_flow: true ha_platforms: - binary_sensor + - climate - sensor - water_heater --- -The `econet` water heater platform is consuming the information provided by a [EcoNet enabled Rheem water heater](https://www.rheem.com/EcoNet/Home). This platform allows you to set the temperature, the operation mode, and away mode. It also provides access to several device sensors depending on your model of water heater. +The EcoNet integration is consuming the information provided by a [EcoNet enabled Rheem water heater or thermostat](https://www.rheem.com/EcoNet/Home). {% include integrations/config_flow.md %} + +## Platforms + +EcoNet devices may be represented by one or more platforms. + +- [Binary Sensor](#binary-sensor) +- [Climate](#climate) +- [Sensor](#sensor) +- [Water Heater](#water-heater) + +### Binary Sensor + +The EcoNet Binary Sensor platform lets you view binary states of sensors associated with your EcoNet thermostat or water heater. For example, if the device is currently running. + +### Climate + +The EcoNet Climate platform lets you control your EcoNet thermostat. Multi-zone HVAC systems will have 1 Climate entity per zone. + +### Sensor + +The EcoNet Sensor platform lets you view sensors associated with your EcoNet thermostat or water heater. For example, alert count or available hot water. + +### Water Heater + +The EcoNet Water Heater platform lets you control your EcoNet water heater. Water Heaters do not report the current water temperature. diff --git a/source/_integrations/faa_delays.markdown b/source/_integrations/faa_delays.markdown index 0944ed0f709..fe05ca40808 100644 --- a/source/_integrations/faa_delays.markdown +++ b/source/_integrations/faa_delays.markdown @@ -9,6 +9,8 @@ ha_config_flow: true ha_codeowners: - '@ntilley905' ha_domain: faa_delays +ha_platforms: + - binary_sensor --- The FAA Delays integration collects and displays information about delays at US Airports based on the diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown index cd43ae5c1ad..ac49e346819 100644 --- a/source/_integrations/fan.mqtt.markdown +++ b/source/_integrations/fan.mqtt.markdown @@ -56,6 +56,10 @@ availability_topic: description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`. required: false type: string +command_template: + description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to generate the payload to send to `command_topic`. + required: false + type: template command_topic: description: The MQTT topic to publish commands to change the fan state. required: true @@ -85,6 +89,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false @@ -93,6 +101,10 @@ device: description: 'Identifier of a device that routes messages between this device and Home Assistant. Examples of such devices are hubs, or parent devices of a sub-device. This is used to show device topology in Home Assistant.' required: false type: string +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false @@ -111,6 +123,10 @@ optimistic: required: false type: boolean default: "`true` if no state topic defined, else `false`." +oscillation_command_template: + description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to generate the payload to send to `oscillation_command_topic`. + required: false + type: template oscillation_command_topic: description: The MQTT topic to publish commands to change the oscillation state. required: false @@ -128,21 +144,6 @@ payload_available: required: false type: string default: online -payload_high_speed: - description: The payload that represents the fan's high speed. - required: false - type: string - default: high -payload_low_speed: - description: The payload that represents the fan's low speed. - required: false - type: string - default: low -payload_medium_speed: - description: The payload that represents the fan's medium speed. - required: false - type: string - default: medium payload_not_available: description: The payload that represents the unavailable state. required: false @@ -168,6 +169,43 @@ payload_oscillation_on: required: false type: string default: oscillate_on +percentage_command_template: + description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to generate the payload to send to `percentage_command_topic`. + required: false + type: template +percentage_command_topic: + description: The MQTT topic to publish commands to change the fan speed state based on a percentage. + required: false + type: string +percentage_state_topic: + description: The MQTT topic subscribed to receive fan speed based on percentage. + required: false + type: string +percentage_value_template: + description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from fan percentage speed. + required: false + type: string +preset_mode_command_template: + description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to generate the payload to send to `preset_mode_command_topic`. + required: false + type: template +preset_mode_command_topic: + description: The MQTT topic to publish commands to change the preset mode. + required: false + type: string +preset_mode_state_topic: + description: The MQTT topic to publish commands to change the preset mode. + required: false + type: string +preset_mode_value_template: + description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the preset_mode payload. + required: false + type: string +preset_modes: + description: List of preset modes this fan is capable of running at. Common examples include `auto`, `smart`, `whoosh`, `eco` and `breeze`. + required: false + type: [list] + default: [] qos: description: The maximum QoS level of the state topic. required: false @@ -178,22 +216,16 @@ retain: required: false type: boolean default: true -speed_command_topic: - description: The MQTT topic to publish commands to change speed state. +speed_range_min: + description: The minimum of numeric output range (`off` not included, so `speed_range_min` - 1 represents 0%). required: false - type: string -speed_state_topic: - description: The MQTT topic subscribed to receive speed state updates. + type: integer + default: 1 +speed_range_max: + description: The maximum of numeric output range (representing 100%). required: false - type: string -speed_value_template: - description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the speed payload." - required: false - type: string -speeds: - description: "List of speeds this fan is capable of running at. Valid entries are `off`, `low`, `medium` and `high`." - required: false - type: [string, list] + type: integer + default: 100 state_topic: description: The MQTT topic subscribed to receive state updates. required: false @@ -220,10 +252,10 @@ In this section you find some real-life examples of how to use this fan. ### Full configuration -The example below shows a full configuration for a MQTT fan. +The example below shows a full configuration for a MQTT fan using percentage and preset modes. ```yaml -# Example configuration.yaml entry +# Example using percentage based speeds with preset modes configuration.yaml fan: - platform: mqtt name: "Bedroom Fan" @@ -231,19 +263,49 @@ fan: command_topic: "bedroom_fan/on/set" oscillation_state_topic: "bedroom_fan/oscillation/state" oscillation_command_topic: "bedroom_fan/oscillation/set" - speed_state_topic: "bedroom_fan/speed/state" - speed_command_topic: "bedroom_fan/speed/set" + percentage_state_topic: "bedroom_fan/speed/percentage_state" + percentage_command_topic: "bedroom_fan/speed/percentage" + preset_mode_state_topic: "bedroom_fan/speed/preset_mode_state" + preset_mode_command_topic: "bedroom_fan/speed/preset_mode" + preset_modes: + - "auto" + - "smart" + - "whoosh" + - "eco" + - "breeze" qos: 0 payload_on: "true" payload_off: "false" payload_oscillation_on: "true" payload_oscillation_off: "false" - payload_low_speed: "low" - payload_medium_speed: "medium" - payload_high_speed: "high" - speeds: - - "off" - - low - - medium - - high + speed_range_min: 1 + speed_range_max: 100 ``` + +{% raw %}} + +This example demonstrates how to use command templates with JSON output. + +```yaml +# Example configuration.yaml +# Example using command templates +fan: + - platform: mqtt + name: "Bedroom Fan" + command_topic: "bedroom_fan/on/set" + command_template: "{ state: '{{ value }}'}" + oscillation_command_topic: "bedroom_fan/oscillation/set" + oscillation_command_template: "{ oscillation: '{{ value }}'}" + percentage_command_topic: "bedroom_fan/speed/percentage" + percentage_command_template: "{ percentage: '{{ value }}'}" + preset_mode_command_topic: "bedroom_fan/speed/preset_mode" + preset_mode_command_template: "{ preset_mode: '{{ value }}'}" + preset_modes: + - "auto" + - "smart" + - "whoosh" + - "eco" + - "breeze" +``` + +{% endraw %} \ No newline at end of file diff --git a/source/_integrations/freebox.markdown b/source/_integrations/freebox.markdown index 364250df6a1..adad0c2c4c5 100644 --- a/source/_integrations/freebox.markdown +++ b/source/_integrations/freebox.markdown @@ -17,6 +17,7 @@ ha_platforms: - device_tracker - sensor - switch +ha_zeroconf: true --- The `freebox` integration allows you to observe and control [Freebox router](https://www.free.fr/). diff --git a/source/_integrations/gogogate2.markdown b/source/_integrations/gogogate2.markdown index 3f48a2cc060..075a929c094 100644 --- a/source/_integrations/gogogate2.markdown +++ b/source/_integrations/gogogate2.markdown @@ -13,6 +13,7 @@ ha_config_flow: true ha_homekit: true ha_platforms: - cover + - sensor --- The `gogogate2` cover platform lets you control Gogogate2 and iSmartGate enabled garage doors and gates through Home Assistant. Device names in Home Assistant are generated based on the names defined in the GogoGate2 or iSmartGate mobile app. diff --git a/source/_integrations/graphite.markdown b/source/_integrations/graphite.markdown index 32b19ee2862..03b766a0650 100644 --- a/source/_integrations/graphite.markdown +++ b/source/_integrations/graphite.markdown @@ -29,6 +29,11 @@ port: required: false type: integer default: 2003 +protocol: + description: "Type of communication protocol: `tcp` or `udp`." + required: false + type: string + default: tcp prefix: description: Prefix is the metric prefix in graphite. required: false diff --git a/source/_integrations/griddy.markdown b/source/_integrations/griddy.markdown deleted file mode 100644 index 2823de39722..00000000000 --- a/source/_integrations/griddy.markdown +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Griddy Power -description: Instructions on how to integrate griddy real-time electricity prices into Home Assistant. -ha_category: - - Energy - - Sensor -ha_release: 0.107 -ha_iot_class: Cloud Polling -ha_config_flow: true -ha_codeowners: - - '@bdraco' -ha_domain: griddy -ha_platforms: - - sensor ---- - -The `griddy` integration allows you to integrate your [Griddy](https://griddy.com/) price data into Home Assistant. - -There is currently support for the following device types within Home Assistant: - -- Sensor - -## Prerequisites - -You will need your Griddy Load Zone to use this module. - -{% include integrations/config_flow.md %} - -### Sensor - -The current price for the Load Zone will appear as a sensor: - -- LZ_XXXXX Price Now - -### Example Automation - -```yaml -- id: '1572630019168' - alias: "Stop Tesla Charging if Power Price Spikes" - description: "" - trigger: - - above: '30' - entity_id: sensor.lz_houston_price_now - platform: numeric_state - condition: - - condition: zone - entity_id: device_tracker.my_tesla - zone: zone.home - action: - - service: switch.turn_off - target: - entity_id: switch.my_tesla_charger_switch -``` diff --git a/source/_integrations/hdmi_cec.markdown b/source/_integrations/hdmi_cec.markdown index 0922b95aec6..0f536da635f 100644 --- a/source/_integrations/hdmi_cec.markdown +++ b/source/_integrations/hdmi_cec.markdown @@ -6,8 +6,6 @@ ha_category: ha_release: 0.23 ha_iot_class: Local Push ha_domain: hdmi_cec -ha_codeowners: - - '@newAM' ha_platforms: - switch --- diff --git a/source/_integrations/hive.markdown b/source/_integrations/hive.markdown index b66db5a8470..140dfe55f37 100644 --- a/source/_integrations/hive.markdown +++ b/source/_integrations/hive.markdown @@ -22,37 +22,23 @@ ha_platforms: - sensor - switch - water_heater +ha_config_flow: true --- -The `hive` integration is the main integration to set up and integrate all supported Hive devices. Once configured with the minimum required details it will detect and add all Hive devices into Home Assistant, including support for multi-zone heating. +The Hive integration for Home Assistant allows you to interact with supported devices and services offered by +[hivehome.com](https://www.hivehome.com) -This integration uses the Hive website [https://my.hivehome.com](https://my.hivehome.com) credentials, you will need to use the same username and password you use on the Hive website to configure this Hive integration in Home Assistant. +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. -To add your Hive devices into your Home Assistant installation, add the following to your `configuration.yaml` file: +{% include integrations/config_flow.md %} -```yaml -# Example configuration.yaml entry -hive: - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` -{% configuration %} -username: - description: Your username from [https://my.hivehome.com](https://my.hivehome.com). - required: true - type: string -password: - description: Your password from [https://my.hivehome.com](https://my.hivehome.com). - required: true - type: string -scan_interval: - description: The time in minutes between Hive API calls - required: false - type: integer - default: 2 -{% endconfiguration %} +## Options +Menu: *Configuration* > *Integrations* > *Select your new integration* > *Press the options button* + +- **Scan Interval**: Update the scan interval allowing the integration to poll for data more frequently (Cannot be set lower than 30 seconds). + ## Services ### Service `hive.boost_heating` diff --git a/source/_integrations/home_plus_control.markdown b/source/_integrations/home_plus_control.markdown new file mode 100644 index 00000000000..4ad115acc66 --- /dev/null +++ b/source/_integrations/home_plus_control.markdown @@ -0,0 +1,91 @@ +--- +title: Legrand Home+ Control +description: Instructions on how to integrate Legrand Home+ Control into Home Assistant. +ha_category: + - Switch +ha_release: 2021.4 +ha_iot_class: Cloud Polling +ha_codeowners: + - '@chemaaa' +ha_config_flow: true +ha_domain: home_plus_control +ha_platforms: + - switch +--- + +The Home+ Control integration platform allows you to control a range of Legrand in-wall switches and power outlets that have smart home functionality thanks to their "with Netatmo" capabilities. + +This integration works against the Home+ Control API, which is one of the many APIs offered through the [*Works with Legrand*](https://developer.legrand.com/) program. The API is capable of managing "Legrand/Btcino with Netatmo" devices, such as light switches, power outlets and rolling shutters. + +The devices that this API can manage are offered in different designs across different countries. The details of these can be found [here](https://developer.legrand.com/solutions/wiring-devices-with-netatmo/). + +This Home+ Control integration for Home Assistant currently has support for the following devices: +- Light switches +- Power outlets + +In both cases, the devices are modeled as on/off switches within Home Assistant. + +This integration has been tested to work with the following range of Legrand products: +- Valena Next™ with Netatmo + + +## Authentication + +Before you are able to configure the Legrand Home + Control integration into Home Assistant, you must register with the *Works with Legrand* platform. + +These Legrand APIs rely on Oauth2 authentication, so you must follow these steps to obtain the necessary authentication parameters: + +1. Register an account at . +2. Create a subscription to the *Starter Kit* (currently the only subscription available) and this will generate your `SUBSCRIPTION_KEY`. +3. Register an application, where you will have to define a name, a redirect URL and the scopes of your application. When selecting the scopes, be sure to include all of the `.read` scopes, as well as the `light.write` and `plug.write` scopes to be able to control these modules from the integration. + +Once the registered application is confirmed, you should receive an email containing the `CLIENT_IDENTIFIER` and the `CLIENT_SECRET` which you will be using to set up the authentication flows. The application confirmation email is usually received within a few hours of having issued the request. + +Finally, to set up Oauth2 authentication in Home Assistant you should add the following information to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +home_plus_control: + client_id: CLIENT_IDENTIFIER + client_secret: CLIENT_SECRET + subscription_key: SUBSCRIPTION_KEY +``` + +{% configuration %} +client_id: + description: Client identifier for your registered application on the *Works with Legrand* platform. Received via email. + required: true + type: string +client_secret: + description: Client secret for your registered application on the *Works with Legrand* platform. Received via email. + required: true + type: string +subscription_key: + description: Subscription identifier for your registered account on the *Works with Legrand* platform. Provided upon registration. + required: true + type: string +{% endconfiguration %} + + +At this point, you are now ready to add the Home+ Control integration to your Home Assistant instance as described in the [Configuration](#configuration) section. + + +{% include integrations/config_flow.md %} + + +## API Nomenclature + +Within the context of the Home+ Control API you may come across the following terms: + +* *Plant*: This is the term used to represent a *home* that holds the Legrand devices. In practice, a *plant* is represented by the *Legrand Home+ Control* gateway that acts as the central hub of the rest of the devices in the home network (uses Zigbee). +* *Module*: This is the term used to represent a generic device within the *plant*, i.e., a light, a plug, a remote, etc. +* *Light*: This is the term used to represent a light switch (or a micro-module). It is not modeled as your usual light entity because there are no brightness, color, etc. controls. It is modeled as an on/off switch. +* *Plug*: This is the term used to represent a power outlet. + +Other devices that are mentioned in the API, but that are not currently supported by this integration are: *remotes* (wireless switches), *heaters* and *automations*. + +## API Limitations + +As described in the [authentication](#authentication) section, this integration requires you to set up a subscription in the *Works with Legrand* platform. + +Currently, end-users only have access to the *Starter Kit* subscription which has a major limitation in the number of allowed API requests that are allowed - only 500 API calls per day (counter is reset at 00:00 every day). If this daily quota is ever exceeded, the API will report `403 Forbidden` HTTP responses. diff --git a/source/_integrations/homeassistant.markdown b/source/_integrations/homeassistant.markdown index cd242cb82ac..1b2768f2e33 100644 --- a/source/_integrations/homeassistant.markdown +++ b/source/_integrations/homeassistant.markdown @@ -21,6 +21,16 @@ The `homeassistant` integration provides services for controlling Home Assistant Reads the configuration files and checks them for correctness, but **does not** load them into Home Assistant. Creates a persistent notification and log entry if errors are found. +### Service `homeassistant.reload_config_entry` + +Reloads an integration config entry. + +| Service data attribute | Description | +|---------------------------|-------------------------------------------------------| +| `entity_id` | List of entity ids used to reference a config entry. | +| `area_id` | List of area ids used to reference a config entry. | +| `device_id` | List of device ids used to reference a config entry. | + ### Service `homeassistant.reload_core_config` Reloads the core configuration under `homeassistant:` and all linked files. Once loaded the new configuration is applied. New `customize:` information will be applied the next time the state of the entity gets updated. diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index a46f4ce21d9..f689eed26f8 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -57,7 +57,7 @@ homekit: linked_battery_sensor: sensor.living_room_motion_battery low_battery_threshold: 31 light.kitchen_table: - name: "Kitchen Table Light" + name: Kitchen Table Light lock.front_door: code: 1234 media_player.living_room: @@ -69,9 +69,9 @@ homekit: switch.bedroom_outlet: type: outlet camera.back_porch: - support_audio: true - - name: "HASS Bridge 2" - port: 56332 + support_audio: True + - name: HASS Bridge 2 + port: 21065 filter: include_domains: - light @@ -83,16 +83,11 @@ homekit: required: true type: map keys: - auto_start: - description: Flag if the HomeKit Server should start automatically after the Home Assistant Core Setup is done. ([Disable Auto Start](#disable-auto-start)) - required: false - type: boolean - default: true port: description: Port for the HomeKit extension. If you are adding more than one instance they need to have different values for port. required: false type: integer - default: 51827 + default: 21063 name: description: Need to be individual for each instance of Home Assistant using the integration on the same local network. Between `3` and `25` characters. Alphanumeric and spaces allowed. required: false @@ -304,12 +299,6 @@ Currently, this integration uses the `entity_id` to generate a unique `accessory The HomeKit Accessory Protocol Specification only allows a maximum of 150 unique accessories (`aid`) per bridge. Be mindful of this when configuring the filter(s). If you plan on exceeding the 150 devices limit, it is possible to create multiple bridges. If you need specific configuration for some entities via `entity_config` be sure to add them to a bridge configured via `YAML`. -### Persistence Storage - -Unfortunately, `HomeKit` doesn't support any persistent storage - only the configuration for accessories that are added to the `Home Assistant Bridge` are kept. To avoid problems, it is recommended to use an automation to always start `HomeKit` with at least the same entities setup. If, for some reason, some entities are not set up, their configuration will be deleted. (State unknown or similar will not cause any issues.) - -A common situation might be if you decide to disable parts of the configuration for testing. Please make sure to disable `auto start` and `turn off` the `Start HomeKit` automation (if you have one). - ### Multiple HomeKit instances If you create a HomeKit integration via the UI (i.e., **Configuration** >> **Integrations**), it must be configured via the UI **only**. While the UI only offers limited configuration options at the moment, any attempt to configure a HomeKit instance created in the UI via the `configuration.yaml` file will result in another instance of HomeKit running on a different port. @@ -318,7 +307,7 @@ It is recommended to only edit a HomeKit instance in the UI that was created in ### Accessory mode -When exposing a Camera or Television media player (a `media_player` with device class `tv`) to HomeKit, `mode` must be set to `accessory`, and the include filter should be setup to only include a single entity. +When exposing a Camera, Activity based remote (a `remote` that supports activities), Lock, or Television media player (a `media_player` with device class `tv`) to HomeKit, `mode` must be set to `accessory`, and the include filter should be setup to only include a single entity. To quickly add all accessory modes entities in the UI: @@ -338,10 +327,6 @@ To add a single entity in accessory mode: 5. Complete the options flow 6. [Pair the accessory](#setup). -## Disable Auto Start - -It is not needed (anymore) to disable `Auto Start` for all accessories to be available for `HomeKit` as Home Assistant restores all entities on start instantly. - ## Configure Filter By default, no entity will be excluded. To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. Keep in mind only [supported components](#supported-components) can be added. @@ -397,7 +382,7 @@ Restart your Home Assistant instance. This feature requires running an mDNS forw If you have a firewall configured on your Home Assistant system, make sure you open the following ports: - UDP: 5353 -- TCP: 51827 (or the configured/used `port` in the integration settings). +- TCP: 21063 (or the configured/used `port` in the integration settings). ## Supported Components @@ -555,10 +540,6 @@ Pairing works fine when the filter is set to only include `demo.demo`, but fails ### Issues during normal use -#### Some of my devices don't show up - Z-Wave / Discovery - -See [disable auto start](#disable-auto-start) - #### My entity doesn't show up Check if the domain of your entity is [supported](#supported-components). If it is, check your [filter](#configure-filter) settings. Make sure the spelling is correct, especially if you use `include_entities`. diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown index 3c874146ee5..20e59526ca9 100644 --- a/source/_integrations/homematicip_cloud.markdown +++ b/source/_integrations/homematicip_cloud.markdown @@ -14,8 +14,6 @@ ha_iot_class: Cloud Push ha_release: 0.66 ha_config_flow: true ha_quality_scale: platinum -ha_codeowners: - - '@SukramJ' ha_domain: homematicip_cloud ha_platforms: - alarm_control_panel diff --git a/source/_integrations/hyperion.markdown b/source/_integrations/hyperion.markdown index d7c6ae197f0..f2e0b0ebbd7 100644 --- a/source/_integrations/hyperion.markdown +++ b/source/_integrations/hyperion.markdown @@ -32,8 +32,9 @@ All configuration options are offered from the frontend. Choose `Options` under relevant entry on the `Integrations` page. Options supported: -- **priority**: The priority for color and effects, make sure this is lower then the streaming sources priority in hyperion itself (typically lower than 200 is appropriate). - +- **Priority**: The priority for color and effects, make sure this is lower then the streaming sources priority in hyperion itself (typically lower than 200 is appropriate). +- **Effects to hide**: An optional selection of effects to hide from the light effects + list. New effects added to the Hyperion server will be shown by default. ## Hyperion Instances This integration supports multiple Hyperion instances running on a single Hyperion diff --git a/source/_integrations/izone.markdown b/source/_integrations/izone.markdown index 887535b5904..819c9ddb346 100644 --- a/source/_integrations/izone.markdown +++ b/source/_integrations/izone.markdown @@ -122,3 +122,23 @@ logger: ``` This will help you to find network connection issues etc. + +## Services + +### Service `izone.airflow_min` + +Set the minimum airflow for a particular zone. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | izone Zone entity. For example `climate.bed_2` +| `airflow` | no | Airflow percent in 5% increments + +### Service `izone.airflow_max` + +Set the maximum airflow for a particular zone. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | izone Zone entity. For example `climate.bed_2` +| `airflow` | no | Airflow percent in 5% increments diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown index 68cea77559d..e4244026fac 100644 --- a/source/_integrations/knx.markdown +++ b/source/_integrations/knx.markdown @@ -58,13 +58,13 @@ There is currently support for the following device types within Home Assistant: ## Basic Configuration -To use your KNX bus in your installation, add the following lines to your `configuration.yaml` file: +To use your KNX devices from Home Assistant, add the following lines to your `configuration.yaml` file: ```yaml knx: ``` -In order to make use of the various platforms that KNX offers you will need to add the relevant configuration sections to your setup. This could either all be in the Home Assistant main `configuration.yaml` file, or in a separate YAML file that you include in the main file or even be split into multiple dedicated files as shown below: +In order to make use of the various platforms that KNX offers you will need to add the relevant configuration sections to your setup. This could either all be in the Home Assistant main `configuration.yaml` file, or in a separate YAML file that you include in the main file or even be split into multiple dedicated files. See [Splitting up the configuration](/docs/configuration/splitting_configuration/). ```yaml knx: @@ -79,18 +79,7 @@ knx: Please see the dedicated platform sections below about how to configure them correctly. -Alternatively, if you want to use the [XKNX](https://xknx.io/) library abstraction (e.g., to re-use the configuration also for other scripted tools outside of Home Assistant): - -```yaml -knx: - config_file: "/path/to/xknx.yaml" -``` - {% configuration %} -config_file: - description: The path for XKNX configuration file. See [xknx.io](https://xknx.io/configuration) for details. - required: false - type: string individual_address: description: The KNX individual address (IA) that shall be used for routing or if a tunneling server doesn't assign an IA at connection. required: false @@ -118,6 +107,33 @@ state_updater: type: boolean {% endconfiguration %} +### Group addresses + +Group addresses are configured as strings or integers in the format "1/2/3" for 3-level GA-structure, "1/2" for 2-level GA-structure or "1" for free GA-structure. + +The HA KNX integration uses configured `state_address` or `*_state_address` to update the state of a function. These addresses are read by GroupValueRead requests on startup and when there was no incoming telegram for one hour (default `sync_state`). + +It is possible to configure passive/listening group addresses for all functions of every KNX platform (except `expose` and `notify`). This allows having multiple group addresses to update the state of its function (e.g., the brightness of a light). When group addresses are configured as a list of strings, the first item is the active sending or state-reading address and the rest is registered as passive addresses. This schema behaves like in ETS configuration where the first is the "sending" address and others are just for updating the communication object. + +If your KNX device provides active state communication objects it is advised to use `*_state_address` instead of passive addresses as it reduces configuration complexity and avoids wrong states (e.g., when channels are logically locked). + +```yaml +knx: + switch: + - name: "Switch without passive addresses" + address: "1/1/1" # this is the address that will be sent to + state_address: "8/8/8" # this is the address GroupValueRead requests are sent to + - name: "Switch with passive addresses" + address: + - "1/1/1" # this is the address that will be sent to + - "1/1/2" # this and following are passive addresses + - "1/1/3" + state_address: + - "8/8/8" # this is the address GroupValueRead requests are sent to + - "8/8/2" # this and following are passive addresses + - "8/8/3" +``` + ## Connection Under normal conditions no connection configuration should be needed. The integration will auto-detect KNX/IP interfaces and connect to one. This requires multicast communication to work in your environment. @@ -145,6 +161,11 @@ local_ip: description: IP address of the local interface. type: string required: false +route_back: + description: When True the KNXnet/IP Server shall use the IP address and the port number from the IP package received as the target IP address or port number for the response to the KNXnet/IP Client (for NAT / Docker). + type: boolean + default: false + required: false {% endconfiguration %} ### Routing @@ -267,7 +288,7 @@ The `knx.event_register` service can be used to register (or unregister) group a address: description: Group address that shall be added or removed. required: true - type: string + type: [string, list] remove: description: If `True` the group address will be removed. required: false @@ -363,7 +384,7 @@ knx: state_address: description: KNX group address of the binary sensor. *DPT 1* required: true - type: string + type: [string, list] name: description: A name for this device used within Home Assistant. required: false @@ -569,7 +590,7 @@ name: temperature_address: description: KNX group address for reading current room temperature from KNX bus. *DPT 9.001* required: true - type: string + type: [string, list] temperature_step: description: Defines the step size in Kelvin for each step of setpoint_shift. required: false @@ -578,19 +599,19 @@ temperature_step: target_temperature_address: description: KNX group address for setting target temperature. *DPT 9.001* required: false - type: string + type: [string, list] target_temperature_state_address: description: KNX group address for reading current target temperature from KNX bus. *DPT 9.001* required: true - type: string + type: [string, list] setpoint_shift_address: description: KNX address for setpoint_shift. *DPT 6.010 or DPT 9.002 based on setpoint_shift_mode* required: false - type: string + type: [string, list] setpoint_shift_state_address: description: KNX address for reading setpoint_shift. *DPT 6.010 or DPT 9.002 based on setpoint_shift_mode* required: false - type: string + type: [string, list] setpoint_shift_mode: description: Defines the internal device DPT used. Either 'DPT6010' or 'DPT9002'. required: false @@ -609,51 +630,51 @@ setpoint_shift_max: operation_mode_address: description: KNX address for setting operation mode (Frost protection/night/comfort). *DPT 20.102* required: false - type: string + type: [string, list] operation_mode_state_address: description: KNX address for reading operation mode. *DPT 20.102* required: false - type: string + type: [string, list] controller_status_address: description: KNX address for HVAC controller status (in accordance with KNX AN 097/07 rev 3). required: false - type: string + type: [string, list] controller_status_state_address: description: KNX address for reading HVAC controller status. required: false - type: string + type: [string, list] controller_mode_address: description: KNX address for setting HVAC controller modes. *DPT 20.105* required: false - type: string + type: [string, list] controller_mode_state_address: description: KNX address for reading HVAC control mode. *DPT 20.105* required: false - type: string + type: [string, list] heat_cool_address: description: KNX address for switching between heat/cool mode. *DPT 1.100* required: false - type: string + type: [string, list] heat_cool_state_address: description: KNX address for reading heat/cool mode. *DPT 1.100* required: false - type: string + type: [string, list] operation_mode_frost_protection_address: description: KNX address for switching on/off frost/heat protection mode. *DPT 1* required: false - type: string + type: [string, list] operation_mode_night_address: description: KNX address for switching on/off night mode. *DPT 1* required: false - type: string + type: [string, list] operation_mode_comfort_address: description: KNX address for switching on/off comfort mode. *DPT 1* required: false - type: string + type: [string, list] operation_mode_standby_address: description: KNX address for switching on/off standby mode. *DPT 1* required: false - type: string + type: [string, list] operation_modes: description: Overrides the supported operation modes. Provide the supported `preset_mode` values for your device. required: false @@ -665,7 +686,7 @@ controller_modes: on_off_address: description: KNX address for switching the climate device on/off. *DPT 1* required: false - type: string + type: [string, list] on_off_invert: description: Value for switching the climate device on/off is inverted. required: false @@ -674,7 +695,7 @@ on_off_invert: on_off_state_address: description: KNX address for gathering the current state (on/off) of the climate device. *DPT 1* required: false - type: string + type: [string, list] min_temp: description: Override the minimum temperature. required: false @@ -719,31 +740,31 @@ name: move_long_address: description: KNX group address for moving the cover full up or down. *DPT 1* required: false - type: string + type: [string, list] move_short_address: description: KNX group address for moving the cover short time up or down. Used by some covers also as the means to stop the cover, if no dedicated `stop_address` exists on the actuator. *DPT 1* required: false - type: string + type: [string, list] stop_address: description: KNX group address for stopping the current movement from the cover. *DPT 1* required: false - type: string + type: [string, list] position_address: description: KNX group address for moving the cover to the dedicated position. *DPT 5.001* required: false - type: string + type: [string, list] position_state_address: description: Separate KNX group address for requesting the current position of the cover. *DPT 5.001* required: false - type: string + type: [string, list] angle_address: description: KNX group address for moving the cover to the dedicated angle. *DPT 5.001* required: false - type: string + type: [string, list] angle_state_address: description: Separate KNX group address for requesting the current angle of cover. *DPT 5.001* required: false - type: string + type: [string, list] travelling_time_down: description: Time cover needs to travel down in seconds. Needed to calculate the intermediate positions of cover while traveling. required: false @@ -796,19 +817,19 @@ name: address: description: KNX group address for setting the percentage or step of the fan. *DPT 5.001* or *DPT 5.010* required: true - type: string + type: [string, list] state_address: description: KNX group address for retrieving the percentage or step of the fan. *DPT 5.001* or *DPT 5.010* required: false - type: string + type: [string, list] oscillation_address: description: KNX group address for switching the fan oscillation on or off. *DPT 1* required: false - type: string + type: [string, list] oscillation_state_address: description: KNX group address for retrieving the state of the fan oscillation. *DPT 1* required: false - type: string + type: [string, list] max_step: description: The maximum amount of steps for a step-controlled fan. If set, the integration will convert percentages to steps automatically. required: false @@ -838,11 +859,11 @@ knx: address: description: KNX group address for switching the light on and off. *DPT 1.001* required: true - type: string + type: [string, list] state_address: description: KNX group address for retrieving the switch state of the light. *DPT 1.001* required: false - type: string + type: [string, list] name: description: A name for this device used within Home Assistant. required: false @@ -850,27 +871,27 @@ name: brightness_address: description: KNX group address for setting the brightness of the light in percent (absolute dimming). *DPT 5.001* required: false - type: string + type: [string, list] brightness_state_address: description: KNX group address for retrieving the brightness of the light in percent. *DPT 5.001* required: false - type: string + type: [string, list] color_address: description: KNX group address for setting the RGB color of the light. *DPT 232.600* required: false - type: string + type: [string, list] color_state_address: description: KNX group address for retrieving the RGB color of the light. *DPT 232.600* required: false - type: string + type: [string, list] rgbw_address: description: KNX group address for setting the RGBW color of the light. *DPT 251.600* required: false - type: string + type: [string, list] rgbw_state_address: description: KNX group address for retrieving the RGBW color of the light. *DPT 251.600* required: false - type: string + type: [string, list] individual_colors: description: Used when the actuator only supports individual group addresses for colors. When `address` is specified for all 3 (or 4) individual colors the root `address` key can be omitted. required: false @@ -883,21 +904,19 @@ individual_colors: keys: address: description: KNX group address to switch the red component. *DPT 1.001* - type: string + type: [string, list] required: false state_address: description: KNX group address for the state of the red component. *DPT 1.001* - type: string + type: [string, list] required: false brightness_address: description: KNX group address to set the brightness of the red component. *DPT 5.001* - type: string + type: [string, list] required: true brightness_state_address: description: KNX group address for the current brightness of the red component. *DPT 5.001* - type: string - required: false - type: string + type: [string, list] required: false green: description: Group addresses for the green component. Same keys available as for red component above. @@ -914,11 +933,11 @@ individual_colors: color_temperature_address: description: KNX group address for setting the color temperature of the light. *DPT 5.001 or 7.600 based on color_temperature_mode* required: false - type: string + type: [string, list] color_temperature_state_address: description: KNX group address for retrieving the color temperature of the light. *DPT 5.001 or 7.600 based on color_temperature_mode* required: false - type: string + type: [string, list] color_temperature_mode: description: Color temperature group address data type. `absolute` color temperature in Kelvin. *color_temperature_address -> DPT 7.600*. `relative` color temperature in percent cold white (0% warmest; 100% coldest). *color_temperature_address -> DPT 5.001* required: false @@ -996,7 +1015,7 @@ knx: address: description: KNX group address of the notification. *DPT 16.000* required: true - type: string + type: [string, list] name: description: A name for this device used within Home Assistant. required: false @@ -1020,7 +1039,7 @@ knx: address: description: KNX group address for the scene. *DPT 17.001* required: true - type: string + type: [string, list] scene_number: description: KNX scene number to be activated (range 1..64 ). required: true @@ -1062,7 +1081,7 @@ knx: state_address: description: KNX group address of the sensor. required: true - type: string + type: [string, list] type: description: A type from the value types table below must be defined. The DPT of the group address should match the expected KNX DPT to be parsed correctly. required: true @@ -1268,7 +1287,7 @@ knx: address: description: KNX group address for switching the switch on/off. *DPT 1* required: true - type: string + type: [string, list] name: description: A name for this device used within Home Assistant. required: false @@ -1277,7 +1296,7 @@ name: state_address: description: Separate KNX group address for retrieving the switch state. *DPT 1* required: false - type: string + type: [string, list] invert: description: Invert the telegrams payload before processing or sending. required: false @@ -1324,55 +1343,55 @@ name: address_temperature: description: KNX group address for reading current outside temperature from KNX bus. *DPT 9.001* required: true - type: string + type: [string, list] address_brightness_south: description: KNX group address for reading current brightness to south coordinate from KNX bus. *DPT 9.004* required: false - type: string + type: [string, list] address_brightness_west: description: KNX group address for reading current brightness to west coordinate from KNX bus. *DPT 9.004* required: false - type: string + type: [string, list] address_brightness_east: description: KNX group address for reading current brightness to east coordinate from KNX bus. *DPT 9.004* required: false - type: string + type: [string, list] address_brightness_north: description: KNX group address for reading current brightness to north coordinate from KNX bus. *DPT 9.004* required: false - type: string + type: [string, list] address_wind_bearing: description: KNX group address for reading current wind bearing from KNX bus. *DPT 5.003* required: false - type: string + type: [string, list] address_wind_speed: description: KNX group address for reading current wind speed from KNX bus. *DPT 9.005* required: false - type: string + type: [string, list] address_rain_alarm: description: KNX group address for reading if rain alarm is on/off. required: false - type: string + type: [string, list] address_frost_alarm: description: KNX group address for reading if frost alarm is on/off. required: false - type: string + type: [string, list] address_wind_alarm: description: KNX group address for reading if wind alarm is on/off. required: false - type: string + type: [string, list] address_day_night: description: KNX group address for reading if it's day/night. required: false - type: string + type: [string, list] address_air_pressure: description: KNX address reading current air pressure. *DPT 9.006* required: false - type: string + type: [string, list] address_humidity: description: KNX address for reading current humidity. *DPT 9.007* required: false - type: string + type: [string, list] create_sensors: description: If true, dedicated sensor entities are created for all configured properties. required: false diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index 8f833fbe3b2..54cbad670df 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -15,6 +15,7 @@ The `mqtt` light platform lets you control your MQTT enabled lights through one | Function | [`default`](#default-schema) | [`json`](#json-schema) | [`template`](#template-schema) | |-------------------|------------------------------------------------------------|----------------------------------------------------------------------|------------------------------------------------------------------------------| | Brightness | ✔ | ✔ | ✔ | +| Color mode | | ✔ | | | Color temperature | ✔ | ✔ | ✔ | | Effects | ✔ | ✔ | ✔ | | Flashing | ✘ | ✔ | ✔ | @@ -138,6 +139,10 @@ device: description: 'The name of the device.' required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: 'The firmware version of the device.' required: false @@ -177,6 +182,10 @@ hs_value_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the HS value." required: false type: string +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false @@ -389,16 +398,19 @@ light: The `mqtt` light platform with JSON schema lets you control a MQTT-enabled light that can receive [JSON](https://en.wikipedia.org/wiki/JSON) messages. -This schema supports on/off, brightness, RGB colors, XY colors, color temperature, transitions, short/long flashing and white values. The messages sent to/from the lights look similar to this, omitting fields when they aren't needed: +This schema supports on/off, brightness, RGB colors, XY colors, color temperature, transitions, short/long flashing and white values. The messages sent to/from the lights look similar to this, omitting fields when they aren't needed. The `color_mode` will not be present in messages sent to the light. It is optional in messages received from the light, but can be used to disambiguate the current mode in the light. In the example below, `color_mode` is set to `rgb` and `color_temp`, `color.c`, `color.w`, color.x`, `color.y`, `color.h`, `color.s` will all be ignored: ```json { "brightness": 255, + "color_mode": "rgb", "color_temp": 155, "color": { "r": 255, "g": 180, "b": 200, + "c": 100, + "w": 50, "x": 0.406, "y": 0.301, "h": 344.0, @@ -466,8 +478,8 @@ brightness_scale: required: false type: integer default: 255 -color_temp: - description: Flag that defines if the light supports color temperature. +color_mode: + description: Flag that defines if the light supports color modes. required: false type: boolean default: false @@ -523,11 +535,10 @@ flash_time_short: required: false type: integer default: 2 -hs: - description: Flag that defines if the light supports HS colors. +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." required: false - type: boolean - default: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false @@ -574,11 +585,6 @@ retain: required: false type: boolean default: false -rgb: - description: Flag that defines if the light supports RGB colors. - required: false - type: boolean - default: false schema: description: The schema to use. Must be `json` to select the JSON schema". required: false @@ -588,20 +594,14 @@ state_topic: description: The MQTT topic subscribed to receive state updates. required: false type: string +supported_color_modes: + description: A list of color modes supported by the list. This is required if `color_mode` is `True`. Possible color modes are `onoff`, `brightness`, `color_temp`, `hs`, `xy`, `rgb`, `rgbw`, `rgbww`. + required: false + type: list unique_id: description: An ID that uniquely identifies this light. If two lights have the same unique ID, Home Assistant will raise an exception. required: false type: string -white_value: - description: Flag that defines if the light supports white values. - required: false - type: boolean - default: false -xy: - description: Flag that defines if the light supports XY colors. - required: false - type: boolean - default: false {% endconfiguration %}
    @@ -633,7 +633,8 @@ light: state_topic: "home/rgb1" command_topic: "home/rgb1/set" brightness: true - rgb: true + color_mode: true + supported_color_modes: ["rgb"] ``` ### Brightness and no RGB support @@ -649,6 +650,8 @@ light: state_topic: "home/rgb1" command_topic: "home/rgb1/set" brightness: true + color_mode: true + supported_color_modes: ["brightness"] ``` ### Brightness Scaled @@ -664,6 +667,8 @@ light: command_topic: "home/light/set" brightness: true brightness_scale: 4095 + color_mode: true + supported_color_modes: ["brightness"] ``` Home Assistant will then convert its 8bit value in the message to and from the device: @@ -677,7 +682,7 @@ Home Assistant will then convert its 8bit value in the message to and from the d ### HS Color -To use a light with hue+saturation as the color model, set `hs` to `true` in the platform configuration: +To use a light with hue+saturation as the color model, set `supported_color_modes` to `["hs"]` in the platform configuration: ```yaml light: @@ -686,7 +691,8 @@ light: name: mqtt_json_hs_light state_topic: "home/light" command_topic: "home/light/set" - hs: true + color_mode: true + supported_color_modes: ["hs"] ``` Home Assistant expects the hue values to be in the range 0 to 360 and the saturation values to be scaled from 0 to 100. For example, the following is a blue color shade: @@ -694,6 +700,7 @@ Home Assistant expects the hue values to be in the range 0 to 360 and the satura ```json { "state": "ON", + "color_mode": "hs", "color": { "h": 24.0, "s": 100.0 @@ -714,8 +721,8 @@ light: state_topic: "home/rgbw1" command_topic: "home/rgbw1/set" brightness: true - rgb: true - white_value: true + color_mode: true + supported_color_modes: ["rgbw"] ``` @@ -854,6 +861,10 @@ green_template: description: "[Template](/docs/configuration/templating/#processing-incoming-data) to extract green color from the state payload value." required: false type: string +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown index 08beb2e43ae..3dc3bfae24b 100644 --- a/source/_integrations/lock.mqtt.markdown +++ b/source/_integrations/lock.mqtt.markdown @@ -85,6 +85,10 @@ device: description: 'The name of the device.' required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: 'The firmware version of the device.' required: false @@ -93,6 +97,10 @@ device: description: 'Identifier of a device that routes messages between this device and Home Assistant. Examples of such devices are hubs, or parent devices of a sub-device. This is used to show device topology in Home Assistant.' required: false type: string +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false diff --git a/source/_integrations/logger.markdown b/source/_integrations/logger.markdown index e61bca4380a..e01a2f98dbf 100644 --- a/source/_integrations/logger.markdown +++ b/source/_integrations/logger.markdown @@ -88,6 +88,14 @@ where **namespace** is the ** currently logging. '<component_namespace>': description: Logger namespace of the component. See [log_level](#log-levels). type: string + filters: + description: Regular Expression logging filters. + required: false + type: map + keys: + '<component_namespace>': + description: Logger namespace of the component and a list of Regular Expressions. See [Log Filters](#log-filters). + type: list {% endconfiguration %} In the example, do note the difference between 'glances_api' and 'homeassistant.components.glances' namespaces, @@ -110,6 +118,26 @@ Possible log severity levels, listed in order from most severe to least severe, - debug - notset +### Log Filters + +Service-specific Regular Expression filters for logs. A message is omitted if it matches the Regular Expression. + +An example configuration might look like this: + +```yaml +# Example configuration.yaml entry +logger: + default: info + logs: + custom_components.my_integration: critical + filters: + custom_component.my_integartion: + - "HTTP 429" # Filter all HTTP 429 errors + - "Request to .*unreliable.com.* Timed Out" + homeassistant.components.nws: + - "^Error handling request$" +``` + ## Services ### Service `set_default_level` diff --git a/source/_integrations/matrix.markdown b/source/_integrations/matrix.markdown index 9c2bda7d82b..d334d064aec 100644 --- a/source/_integrations/matrix.markdown +++ b/source/_integrations/matrix.markdown @@ -175,3 +175,18 @@ default_room: The target room has to be precreated, the room id can be obtained from the rooms settings dialog. Rooms by default have a canonical id of the form `"!:homeserver.tld"`, but can also be allocated aliases like `"#roomname:homeserver.tld"`. Make sure to use quotes around the room id or alias to escape special characters (`!`, and `#`) in YAML. The notifying account may need to be invited to the room, depending on the individual rooms policies. To use notifications, please see the [getting started with automation page](/getting-started/automation/). + +### Images in notification + +It is possible to send images with notifications. To do so, add a list of paths in the notification `data`. + +```yaml +# Example of notification with images +action: + service: notify.matrix_notify + data: + message: "Test with images" + data: + images: + - /path/to/picture.jpg +``` diff --git a/source/_integrations/media_player.markdown b/source/_integrations/media_player.markdown index 78d48f85693..60430774f15 100644 --- a/source/_integrations/media_player.markdown +++ b/source/_integrations/media_player.markdown @@ -14,7 +14,7 @@ Interacts with media players on your network. ## Services ### Media control services -Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `volume_set`, `volume_mute`, `media_play_pause`, `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist`, `shuffle_set`, `repeat_set`, `play_media`, `select_source`, `select_sound_mode` +Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `volume_set`, `volume_mute`, `media_play_pause`, `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist`, `shuffle_set`, `repeat_set`, `play_media`, `select_source`, `select_sound_mode`, `join`, `unjoin` | Service data attribute | Optional | Description | | ---------------------- | -------- | ------------------------------------------------ | @@ -156,6 +156,21 @@ Currently only supported on [Sonos](/integrations/sonos), [Spotify](/integration | `entity_id` | yes | Target a specific media player. For example `media_player.kitchen`| | `repeat` | no | `off`/`all`/`one` for setting repeat mode | +#### Service `media_player.join` + +Allows to group media players together for synchronous playback. Only works on supported multiroom audio systems. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ---------------------------------------------------- | +| `entity_id` | yes | The media player entity whose playback will be expanded to the players specified in `group_members`. | +| `group_members` | no | The player entities which will be synced with the playback from `entity_id`. | + +#### Service `media_player.unjoin` + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ---------------------------------------------------- | +| `entity_id` | yes | Unjoin this media player from any player groups. | + ### Device Class The way media players are displayed in the frontend can be modified in the [customize section](/getting-started/customizing-devices/). The following device classes are supported for media players: diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown index 1da25a6d5bb..5d9e7f06b9e 100644 --- a/source/_integrations/modbus.markdown +++ b/source/_integrations/modbus.markdown @@ -1,6 +1,6 @@ --- title: Modbus -description: Instructions on how to integrate Modbus within Home Assistant. +description: Instructions on how to integrate Modbus and platforms. ha_category: - Hub ha_release: pre 0.7 @@ -23,7 +23,16 @@ It supports various types of devices which can be controlled over serial, TCP, a ## Configuration -The configuration for adding modbus to your installation depends on the connection type, either a network or serial connection. +How to add modbus to your installation depends on the connection type, either a network or serial connection. + +Platforms: + - binary_sensor + - climate + - cover + - sensor + - switch + +are all defined as part of the modbus configuration. The old configuration style, (having each outside the modbus configuration is still supported, but will cause a warning, and will be removed in a later release). ### Network connection @@ -32,40 +41,40 @@ For a network connection, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry for a TCP connection modbus: - name: hub1 - type: tcp - host: IP_ADDRESS - port: 2020 + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 ``` {% configuration %} -type: - description: Type of the connection to Modbus. Possible values are `tcp` (Modbus TCP protocol according to "MODBUS Messaging Implementation Guide version 1.0b" provided by Schneider Automation.), `udp`(Modbus TCP form, but using UDP for transport. It removes the overheads required for TCP.) and `rtuovertcp` (Modbus RTU message transmitted with a TCP/IP wrapper and sent over a network instead of serial lines.). - required: true - type: string -host: - description: The IP address of your Modbus device, e.g., 192.168.1.1. - required: true - type: string -port: - description: The network port for the communication. - required: true - type: integer -name: - description: Name for this hub. Must be unique, so it is required when setting up multiple instances. - required: false - default: modbus_hub - type: string -timeout: - description: Timeout for slave response in seconds. - required: false - default: 3 - type: integer delay: description: Time to sleep in seconds after connecting and before sending messages. Some modbus-tcp servers need a short delay typically 1-2 seconds in order to prepare the communication. If a server accepts connecting, but there is no response to the requests send, this parameter might help. required: false default: 0 type: integer +host: + description: The IP address of your Modbus device, e.g., 192.168.1.1. + required: true + type: string +name: + description: Name for this hub. Must be unique, so it is required when setting up multiple instances. + required: false + default: modbus_hub + type: string +port: + description: The network port for the communication. + required: true + type: integer +timeout: + description: Timeout for slave response in seconds. + required: false + default: 3 + type: integer +type: + description: Type of the connection to Modbus. Possible values are `tcp` (Modbus TCP protocol according to "MODBUS Messaging Implementation Guide version 1.0b" provided by Schneider Automation.), `udp`(Modbus TCP form, but using UDP for transport. It removes the overheads required for TCP.) and `rtuovertcp` (Modbus RTU message transmitted with a TCP/IP wrapper and sent over a network instead of serial lines.). + required: true + type: string {% endconfiguration %} ### Serial connection @@ -75,58 +84,661 @@ For a serial connection, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry for a serial connection modbus: - name: hub1 - type: serial - method: rtu - port: /dev/ttyUSB0 - baudrate: 9600 - stopbits: 1 - bytesize: 8 - parity: N + - name: hub1 + type: serial + method: rtu + port: /dev/ttyUSB0 + baudrate: 9600 + stopbits: 1 + bytesize: 8 + parity: N ``` {% configuration %} -type: - description: "Type of the connection to Modbus, needs to be `serial` for this setup." - required: true - type: string -method: - description: "Method of the connection to Modbus, either `rtu` or `ascii`." - required: true - type: string -port: - description: The port where your Modbus device is connected to your Home Assistant host. - required: true - type: string baudrate: description: The speed for the serial connection. required: true type: integer -stopbits: - description: "The stopbits for the serial connection, either `1` or `2`." - required: true - type: integer bytesize: description: "The bytesize for the serial connection; can be `5`, `6`, `7` or `8`." required: true type: integer -parity: - description: "The parity for the serial connection; can be `E`, `O` or `N`." +delay: + description: Time to sleep in seconds after connecting and before sending messages. Some modbus servers need a short delay typically 1-2 seconds in order to prepare the communication. If a server accepts connecting, but there is no response to the requests send, this parameter might help. + required: false + default: 0 + type: integer +method: + description: "Method of the connection to Modbus, either `rtu` or `ascii`." required: true type: string name: description: Name for this hub. Must be unique, so it is required when setting up multiple instances. required: false - default: default + default: modbus_hub type: string +parity: + description: "The parity for the serial connection; can be `E`, `O` or `N`." + required: true + type: string +port: + description: The port where your Modbus device is connected to your Home Assistant host. + required: true + type: string +stopbits: + description: "The stopbits for the serial connection, either `1` or `2`." + required: true + type: integer timeout: description: Timeout for slave response in seconds. required: false default: 3 type: integer +type: + description: "Type of the connection to Modbus, needs to be `serial` for this setup." + required: true + type: string {% endconfiguration %} -### Multiple connections +### Configuring platform binary sensor + +The `modbus` binary sensor allows you to gather data from [Modbus](http://www.modbus.org/) coils with state ON/OFF. + +To use your Modbus binary sensors in your installation, add the following to your `configuration.yaml` file: +```yaml +# Example configuration.yaml entry for binary_sensor configuration +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + binary_sensors: + - name: Sensor1 + slave: 1 + address: 100 + - name: Sensor2 + address: 110 + input_type: discrete_input +``` +{% configuration %} +binary_sensors: + description: A list of all binary_sensors available in this modbus instance. + required: false + type: [map] + keys: + device_class: + description: Device class to be used for the UI (e.g. "door"). + required: false + type: string + input_type: + description: type of adddress (holding/discrete/coil) + required: false + default: holding + type: integer + name: + description: Name for this binary_sensor. Must be unique. + required: true + type: string + scan_interval: + description: Defines the update interval of the sensor in seconds. + required: false + type: integer + default: 15 + slave: + description: The number of the slave. + required: false + type: integer +{% endconfiguration %} + + +### Configuring platform climate + +To use your Modbus thermostat in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + climates: + - name: Watlow F4T + slave: 1 + data_type: uint + data_count: 1 + scale: 0.1 + offset: 0 + precision: 1 + max_temp: 30 + min_temp: 15 + temp_step: 1 + target_temp_register: 2782 + current_temp_register: 27586 +``` + +{% configuration %} +climates: + description: A list of all climates available in this modbus instance. + required: false + type: [map] + keys: + current_temp_register: + description: Register number for current temperature (Process value). + required: true + type: integer + current_temp_register_type: + description: Modbus register type (holding, input) for current temperature, default holding. + required: false + type: string + default: holding + data_count: + description: Number of registers to read. + required: false + type: integer + default: 2 + data_type: + description: Response representation (int, uint, float, custom). If float selected, value will converted to IEEE 754 floating point format. + required: false + type: string + default: float + min_temp: + description: Maximum setpoint temperature. + required: false + type: integer + default: 5 + name: + description: Name of the device + required: true + type: string + offset: + description: Final offset (output = scale * value + offset). + required: false + type: float + default: 0 + precision: + description: Number of valid decimals. + required: false + type: integer + default: 1 + scale: + description: Scale factor (output = scale * value + offset). + required: false + type: float + default: 1 + scan_interval: + description: Defines the update interval of the sensor in seconds. + required: false + type: integer + default: 15 + slave: + description: The number of the slave (Optional for tcp and upd Modbus, use 1). + required: true + type: integer + structure: + description: "If `data_type` is custom specified a double-quoted Python struct is expected here, to format the string to unpack the value. See Python documentation for details. Example: `>i`." + required: false + type: string + default: ">f" + target_temp_register: + description: Register number for target temperature (Setpoint). + required: true + type: integer + temp_step: + description: The supported step size a target temperature can be increased/decreased. + required: false + type: float + default: 0.5 + temperature_unit: + description: Temperature unit reported by the current_temp_register. C or F + required: false + type: string + default: C +{% endconfiguration %} + +#### Services + +| Service | Description | +| ------- | ----------- | +| set_temperature | Set Temperature. Requires `value` to be passed in, which is the desired target temperature. `value` should be in the same type as `data_type` | + +### Configuring platform cover + +The `modbus` cover platform allows you to control [Modbus](http://www.modbus.org/) covers (such as blinds, a roller shutter, or a garage door). + +At the moment, we support the opening and closing of a cover. You can control your covers either using coils or holding registers. + +Cover that uses the `coil` attribute is not able to determine intermediary states such as opening and closing. Coil stores only two states — "0" means cover closed, and "1" implies cover open. To allow detecting intermediary states, we added an optional `status_register` attribute. It will enable you to write your command (e.g., to open a cover) into a coil, and read current cover status back through the register. Additionally, you can specify values for `state_open`, `state_opening`, `state_closed`, and `state_closing` attributes. These will be matched with the value read from the `status_register`. + +If your cover uses holding register to send commands (defined by the `register` attribute), it can also read the intermediary states. To adjust which value represents what state, you can fine-tune the optional state attributes, like `state_open`. These optional state values are also used for specifying values written into the register. If you specify an optional status_register attribute, cover states will be read from status_register instead of the register used for sending commands. + +To use Modbus covers in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + covers: + - name: Door1 + device_class: door + scan_interval: 1 + coil: 0 + - name: Door2 + device_class: door + scan_interval: 1 + coil: 1 + status_register: 1 + - name: Door3 + slave: 2 + device_class: door + scan_interval: 1 + register: 0 + state_open: 1 + state_closed: 0 +``` + +{% configuration %} +covers: + description: The array contains a list of all your Modbus covers. + required: true + type: map + keys: + coil: + description: Coil address; can be omitted if a register attribute is specified. Coil and register attributes are mutually exclusive, and you need to always specify one of them. + required: true + type: integer + device_class: + description: The [type/class](/integrations/cover/#device-class) of the cover to set the icon in the frontend. + required: false + type: device_class + default: None + name: + description: Name of the switch. + required: true + type: string + register: + description: Holding register address; can be omitted if a coil attribute is specified. Coil and register attributes are mutually exclusive, and you need to always specify one of them. + required: true + type: integer + scan_interval: + description: Defines the update interval of the sensor in seconds. + required: false + type: integer + default: 15 + slave: + description: The number of the slave (can be omitted for tcp and udp Modbus). + required: false + default: 1 + type: integer + state_open: + description: A value in `status_register` or `register` representing an open cover. If your configuration uses an `register` attribute, this value will be also written into a holding register to open the cover. + required: false + default: 1 + type: integer + state_closed: + description: A value in `status_register` or `register` representing a closed cover. If your configuration uses an `register` attribute, this value will be also written into a holding register to close the cover. + required: false + default: 0 + type: integer + state_opening: + description: A value in `status_register` or `register` telling us that the cover is opening at the moment. Note that this state should be also supported on your connected Modbus cover. If it won't write this intermediary state into the register, this state won't be detected. + required: false + default: 2 + type: integer + state_closing: + description: A value in `status_register` or `register` telling us that the cover is closing at the moment. Note that this state should be also supported on your connected Modbus cover. If it won't write this intermediary state into the register, this state won't be detected. + required: false + default: 2 + type: integer + status_register: + description: An address of an register, from which all the cover states will be read. If you specified `register` attribute, and not `status_register` attribute, your main register will also be used as a status register. + required: false + type: integer + status_register_type: + description: Modbus register type (holding, input), default holding. + required: false + type: string +{% endconfiguration %} + +#### Example: Modbus cover controlled by a coil + +This example shows a configuration for a Modbus cover controlled using a coil. Intermediary states like opening/closing are not supported. The cover state is polled from Modbus every 10 seconds. + +```yaml +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + covers: + - name: Door1 + slave: 1 + coil: 1 + device_class: door + scan_interval: 10 + - name: Door2 + slave: 2 + coil: 2 + device_class: door + scan_interval: 10 +``` + +#### Example: Modbus cover controlled by a coil, it's state is read from the register + +This example shows a configuration for a Modbus cover controlled using a coil. Actual cover state is read from the `status_register`. We've also specified register values to match with the states open/opening/closed/closing. The cover state is polled from Modbus every 10 seconds. + +```yaml +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + covers: + - name: Door1 + slave: 1 + device_class: door + scan_interval: 10 + coil: 1 + status_register: 1 + status_register_type: input + state_opening: 1 + state_open: 2 + state_closing: 3 + state_closed: 4 +``` + +#### Example: Modbus cover controlled by a holding register + +This example shows a configuration for a Modbus cover controlled using a holding register, from which we also read current cover state. We've also specified register values to match with the states open/opening/closed/closing. The cover state is polled from Modbus every 10 seconds. + +```yaml +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + covers: + - name: Door1 + slave: 1 + device_class: door + scan_interval: 10 + register: 1 + state_opening: 1 + state_open: 2 + state_closing: 3 + state_closed: 4 +``` + +#### Example: Modbus cover controlled by a holding register, it's state is read from the status register + +This example shows a configuration for a Modbus cover controlled using a holding register. However, cover state is read from a `status_register`. In this case, we've specified only values for `state_open` and `state_closed`, for the rest, default values are used. The cover state is polled from Modbus every 10 seconds. + +```yaml +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + + covers: + - name: Door1 + slave: 1 + device_class: door + scan_interval: 10 + register: 1 + status_register: 2 + register_type: holding + state_open: 1 + state_closed: 0 +``` + +### Configuring platform sensor + +The `modbus` cover platform allows you to control [Modbus](http://www.modbus.org/) covers (such as blinds, a roller shutter, or a garage door). + + +The `modbus` sensor allows you to gather data from [Modbus](http://www.modbus.org/) registers. + +To use your Modbus sensors in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + sensors: + - name: Sensor1 + unit_of_measurement: °C + slave: 1 + address: 100 + - name: Sensor2 + unit_of_measurement: mg + slave: 1 + register: 110 + count: 2 + - name: Sensor3 + unit_of_measurement: °C + slave: 1 + address: 120 + input_type: input + data_type: float + scale: 0.01 + offset: -273.16 + precision: 2 +``` + +{% configuration %} +sensors: + description: The array contains a list of all your Modbus sensors. + required: true + type: map + keys: + address: + description: Register number. + required: true + type: integer + count: + description: Number of registers to read. + required: false + type: integer + default: 1 + data_type: + description: Response representation (int, uint, float, string, custom). If float selected, value will be converted to IEEE 754 floating point format. + required: false + default: int + type: string + device_class: + description: The [type/class](/integrations/sensor/#device-class) of the sensor to set the icon in the frontend. + required: false + type: device_class + default: None + input_type: + description: Modbus register type (holding, input), default holding. + required: false + type: string + name: + description: Name of the sensor. + required: true + type: string + offset: + description: Final offset (output = scale * value + offset). + required: false + default: 0 + type: float + precision: + description: Number of valid decimals. + required: false + default: 0 + type: integer + reverse_order: + description: Reverse the order of registers when count >1. + required: false + default: false + type: boolean + scale: + description: Scale factor (output = scale * value + offset). + required: false + default: 1 + type: float + scan_interval: + description: Defines the update interval of the sensor in seconds. + required: false + type: integer + default: 15 + slave: + description: The number of the slave (Optional for tcp and upd Modbus). + required: true + type: integer + structure: + description: "If `data_type` is custom specified a double-quoted Python struct is expected here, to format the string to unpack the value. See Python documentation for details. Example: `>i`." + required: false + type: string + unit_of_measurement: + description: Unit to attach to value. + required: false + type: integer +{% endconfiguration %} + +
    + +If you specify scale or offset as floating point values, double precision floating point arithmetic will be used to calculate final value. This can cause loss of precision for values that are larger than 2^53. + +
    + +#### Full example + +Example a temperature sensor with a 10 seconds scan interval: + +```yaml +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + sensors: + - name: Room_1 + slave: 10 + address: 0 + input_type: holding + unit_of_measurement: °C + count: 1 + scale: 0.1 + offset: 0 + precision: 1 + data_type: integer +``` + +### Configuring platform switch + +The `modbus` switch platform allows you to control [Modbus](http://www.modbus.org/) coils or registers. + +To use your Modbus switches in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + switches: + - name: Switch1 + address: 13 + input_type: coil + - name: Switch2 + slave: 2 + address: 14 + input_type: coil + - name: Register1 + address: 11 + command_on: 1 + command_off: 0 +``` + +{% configuration %} +switches: + description: The array contains a list of all your Modbus switches. + required: true + type: map + keys: + address: + description: Coil number or register + required: true + type: integer + command_on: + description: Value to write to turn on the switch. + required: true + type: integer + command_off: + description: Value to write to turn off the switch. + required: true + type: integer + input_type: + description: type of adddress (holding/discrete/coil) + required: false + default: holding + type: integer + name: + description: Name of the switch. + required: true + type: string + scan_interval: + description: Defines the update interval of the sensor in seconds. + required: false + type: integer + default: 15 + slave: + description: The number of the slave (can be omitted for tcp and udp Modbus). + required: true + type: integer + state_on: + description: Register value when switch is on. + required: false + default: same as command_on + type: integer + state_off: + description: Register value when switch is off. + required: false + default: same as command_off + type: integer + verify_register: + description: Register to readback. + required: false + default: same as register + type: string + verify_state: + description: Define if is possible to readback the status of the switch. + required: false + default: true + type: boolean +{% endconfiguration %} + +#### Full example + +Example switches, for which the state is polled from Modbus every 10 seconds. + +```yaml +modbus: + - name: hub1 + type: tcp + host: IP_ADDRESS + port: 502 + switches: + - name: Switch1 + slave: 1 + address: 13 + input_type: coil + - name: Switch2 + slave: 2 + address: 14 +``` + +#### Multiple connections Multiple connections are possible, add something like the following to your `configuration.yaml` file: diff --git a/source/_integrations/notify_events.markdown b/source/_integrations/notify_events.markdown index dfac00790a3..ca1b1e39eb5 100644 --- a/source/_integrations/notify_events.markdown +++ b/source/_integrations/notify_events.markdown @@ -104,6 +104,7 @@ The following attributes can be placed inside `data` for extended functionality. | `priority` | For recipients which supports priority, the message will be highlighted accordingly.
    Available values: `lowest`, `low`, `normal`, `high`, `highest`. | `images` | Array of images to attach (see item properties below). | `files` | Array of files to attach (see item properties below). +| `token` | Notify.Events channel token (in case you want to override the channel to get this message to). Every item of images and files has the following properties: diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown index fa69e67300f..bf36dd2a23f 100644 --- a/source/_integrations/number.mqtt.markdown +++ b/source/_integrations/number.mqtt.markdown @@ -88,7 +88,7 @@ device: required: false type: string icon: - description: Icon for the number. + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." required: false type: icon json_attributes_template: diff --git a/source/_integrations/opentherm_gw.markdown b/source/_integrations/opentherm_gw.markdown index cff008c9358..dc815ca4fb6 100644 --- a/source/_integrations/opentherm_gw.markdown +++ b/source/_integrations/opentherm_gw.markdown @@ -59,16 +59,16 @@ The precision and floor_temperature settings that were supported in configuratio The OpenTherm Gateway can be further configured through the integration settings in the web interface The following options are available: -{% configuration %} -Precision: - description: "The desired precision for this device. Can be used to match your actual thermostat's precision. Set to `0` to use the default value for your unit preference." - type: float - default: "`0.5` for Celsius and `1.0` for Fahrenheit." +{% configuration_basic %} +Read Precision: + description: "The desired read precision for this device. Used to display the current temperature on the climate entity. Can be used to match your actual thermostat's precision. Set to `0` to use the default value for your unit preference." +Set Precision: + description: "The desired set precision for this device. Used as step size for setting temperature setpoint from the climate entity. Can be used to match your actual thermostat's precision. Set to `0` to use the default value for your unit preference." +Temporary Setpoint Override Mode: + description: "The desired setpoint override mode. When Temporary Setpoint Override Mode is set to on, the thermostat will be able to cancel the setpoint override after a program change. When the option is set to off, the Setpoint Override Mode will be ‘Constant’ and a manual temperature adjustment on the thermostat is needed to cancel the setpoint override." Floor Temperature: description: "Some thermostats round all temperatures down to the lower value according to their precision. Default behavior for Home Assistant is to round temperatures to the nearest value. Enable this setting to override this behavior and round to the lower value according to the configured precision." - type: boolean - default: Disabled -{% endconfiguration %} +{% endconfiguration_basic %} ## Services diff --git a/source/_integrations/openweathermap.markdown b/source/_integrations/openweathermap.markdown index 8934615d88e..a07bcd5d49f 100644 --- a/source/_integrations/openweathermap.markdown +++ b/source/_integrations/openweathermap.markdown @@ -43,35 +43,61 @@ not be activated yet. | Mode | Forecast mode, `hourly` for a three-hour forecast, `daily` for daily forecast using a paid API tier, `onecall_hourly` for an hourly forecast up to 2 days, or `onecall_daily` for a daily forecast up to 7 days (ideal for the free tier). | | Language | Language for receiving data (only for `sensor`) | -The integration creates weather entity and also sensors for all available conditions. -Selecting a `onecall` mode with the free tier leverages the One Call API, resulting in updates every 5 minutes and is recommended for both hourly and daily forecast. +The integration creates a weather entity as well as sensors for supported weather conditions. +Selecting a `onecall` forecast mode with the free tier leverages the One Call API, resulting in updates every 5 minutes and is recommended for both hourly and daily forecast. -For each condition `sensor` entity will be created with id: +A `sensor` entity will be created for each supported condition. Their ids will follow the format: `sensor._` -Sensor prints information in language which was selected for integration. - -All conditions: - -| Condition | Description | -| :------------- | :----------------------------------- | -| `weather` | A human-readable text summary. | -| `temperature` | Current temperature. | -| `wind_speed` | Wind speed. | -| `wind_bearing` | Wind bearing. | -| `humidity` | Relative humidity. | -| `pressure` | Sea-level air pressure in millibars. | -| `clouds` | Description of cloud coverage. | -| `rain` | Rain volume. | -| `snow` | Snow volume. | -| `condition` | Current weather condition code. | -| `weather_code` | Current weather code. | +Sensors provide data in the language that was selected when configuring the integration.
    -Weather entity always will have English language. Home Assistant translate it to user language automatically. +The Weather entity provides data only in English. Home Assistant automatically translates it to the language configured for the frontend.
    +## Supported Weather Conditions + +### Current Weather Conditions + +| Condition | Description | +| :----------------------- | :------------------------------------------------------------------------------------------------------------------------------ | +| `cloud_coverage` | Cloudiness, %. | +| `condition` | [Weather condition](https://developers.home-assistant.io/docs/core/entity/weather/#recommended-values-for-state-and-condition). | +| `dew_point` | Atmospheric temperature below which water droplets begin to condense and dew can form, ºC. | +| `feels_like_temperature` | Temperature accounting for the human perception of weather, ºC. | +| `humidity` | Humidity, %. | +| `precipitation_kind` | The kind of precipitation (Rain, Snow, Snow and Rain, None) for the last hour. | +| `pressure` | Atmospheric pressure at sea level, hPa. | +| `rain` | Rain volume for the last hour, mm. | +| `snow` | Snow volume for the last hour, mm. | +| `temperature` | Temperature, ºC. | +| `uv_index` | UV Index. | +| `weather` | A human-readable description of the [weather condition](https://openweathermap.org/weather-conditions#Weather-Condition-Codes-2). | +| `weather_code` | ID of the [weather condition](https://openweathermap.org/weather-conditions#Weather-Condition-Codes-2). | +| `wind_bearing` | Wind direction, degrees (meteorological). | +| `wind_speed` | Wind speed, metre/sec. | + +### Forecast Weather Conditions + +
    + +The time period these sensors use depends on the forecast mode selected when configuring the integration: `hourly` or `onecall_hourly` will show conditions for the current hour of the day, while `daily` or `onecall_daily` will show conditions for the current day. + +
    + +| Condition | Description | +| :----------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `forecast_condition` | [Weather condition](https://developers.home-assistant.io/docs/core/entity/weather/#recommended-values-for-state-and-condition) for the forecast's time period. | +| `forecast_precipitation` | Combined Rain and Snow volume for the forecast's time period, mm. | +| `forecast_precipitation_probability` | Probability of precipitation for the forecast's time period. | +| `forecast_pressure` | Atmospheric pressure at sea level for the forecast's time period, hPa. | +| `forecast_temperature` | Maximum temperature for the day. | +| `forecast_temperature_low` | Minimum temperature for the day. | +| `forecast_time` | Time of the forecasted data. | +| `forecast_wind_bearing` | Wind direction for the forecast's time period, degrees (meteorological). | +| `forecast_wind_speed` | Wind speed for the forecast's time period, metre/sec. | + Details about the API are available in the [OpenWeatherMap documentation](https://openweathermap.org/api). diff --git a/source/_integrations/panasonic_viera.markdown b/source/_integrations/panasonic_viera.markdown index b0336fcd781..6f26a5cdb3d 100644 --- a/source/_integrations/panasonic_viera.markdown +++ b/source/_integrations/panasonic_viera.markdown @@ -3,19 +3,27 @@ title: Panasonic Viera description: Instructions on how to integrate a Panasonic Viera TV with Home Assistant. ha_category: - Media Player + - Remote ha_release: 0.17 ha_iot_class: Local Polling ha_domain: panasonic_viera ha_config_flow: true +ha_platforms: + - remote --- The `panasonic_viera` platform allows you to control a Panasonic Viera TV. +There is currently support for the following device types within Home Assistant: + +- Media Player +- [Remote](#remote) + {% include integrations/config_flow.md %} If your TV needs to be paired, you will be prompted to type the PIN code that will be displayed on it. -To allow your TV to be turned on or controlled while off, enable `Powered On By Apps` in the TV Settings: **Network > TV Remote App Settings** +To allow your TV to be turned on or controlled while off, enable `Powered On By Apps` in your settings (if available): **Network > TV Remote App Settings** ## Manual configuration @@ -89,6 +97,23 @@ script: entity_id: media_player.living_room_tv ``` +### Remote + +When the integration is configured, two entities will be created: a `media_player` and a `remote`. The remote allows you to send key commands to your TV with the `remote.send_command` service. + +Some of the known valid key values are: + +- `up` +- `down` +- `left` +- `right` +- `select` +- `home` +- `back` +- `power` + +The list with all known valid keys can be found [here](https://github.com/florianholzapfel/panasonic-viera/blob/521cefadc8e1543514ce41d3d49e9218d1c2302d/panasonic_viera/__init__.py#L35). Additionally, you can also send custom commands, such as `"NRC_HOME-ONOFF"` (which is the same as `home`). + ### Currently known supported models - TC-P50ST50 diff --git a/source/_integrations/philips_js.markdown b/source/_integrations/philips_js.markdown index 7710ed4489e..b6e0f0e7886 100644 --- a/source/_integrations/philips_js.markdown +++ b/source/_integrations/philips_js.markdown @@ -3,12 +3,15 @@ title: Philips TV description: Instructions on how to add Philips TVs to Home Assistant. ha_category: - Media Player + - Remote ha_iot_class: Local Polling ha_release: 0.34 ha_codeowners: - '@elupus' ha_domain: philips_js ha_config_flow: true +ha_platforms: + - remote --- The `philips_js` platform allows you to control Philips TVs which expose the [jointSPACE](http://jointspace.sourceforge.net/) JSON-API. @@ -41,4 +44,75 @@ Also, note that version 6 of the API needs to be authenticated by a PIN code dis ### Turn on device -The Philips TV does not always support turning on via the API. You can either turn it on via IR blaster or on some models WOL. To trigger this command from the entities, the integration exposes a `device trigger` that can be setup to execute when the `media_player` is asked to turn on. +The Philips TV does not always support turning on via the API. You can either turn it on via IR blaster or on som models WOL. To trigger this command from the entities, the integration exposes a `device trigger` that can be setup to execute when the `media_player` is asked to turn on. + +### Remote + +The integration provides a remote entity for sending remote key presses directly to the TV. The following list of commands are available for use with the `remote.send_command` service. + +| Command | Comment | +| ---------------- | ----------------------------------------- | +| Standby | | +| CursorUp | | +| CursorDown | | +| CursorLeft | | +| CursorRight | | +| Confirm | | +| Back | | +| Exit | | +| WatchTV | | +| Home | | +| Source | | +| List | | +| Find | | +| Options | | +| Adjust | | +| RedColour | | +| GreenColour | | +| YellowColour | | +| BlueColour | | +| Play | | +| PlayPause | Mapped to same as Play on Android devices | +| Pause | | +| FastForward | | +| Stop | | +| Rewind | | +| Record | | +| ChannelStepUp | | +| ChannelStepDown | | +| Digit0 | | +| Digit1 | | +| Digit2 | | +| Digit3 | | +| Digit4 | | +| Digit5 | | +| Digit6 | | +| Digit7 | | +| Digit8 | | +| Digit9 | | +| Dot | | +| VolumeUp | | +| VolumeDown | | +| Mute | | +| Teletext | | +| Subtitle | | +| ClosedCaption | | +| TvGuide | | +| Info | | +| AmbilightOnOff | | +| Viewmode | | +| 3dFormat | | +| Multiview | | +| PictureStyle | | +| 3dDepth | | +| SoundStyle | | +| SurroundMode | | +| HeadphonesVolume | | +| 2PlayerGaming | | +| Setup | | +| WhiteColour | | +| PowerOn | | +| PowerOff | Mapped to same as Standby on Android | +| Online | | +| SmartTV | | +| PhilipsMenu | | diff --git a/source/_integrations/plex.markdown b/source/_integrations/plex.markdown index a0c94c05360..a357797e9df 100644 --- a/source/_integrations/plex.markdown +++ b/source/_integrations/plex.markdown @@ -15,7 +15,7 @@ ha_platforms: - sensor --- -The Plex integration allows you to connect Home Assistant to a [Plex Media Server](https://plex.tv). Once configured, actively streaming [Plex Clients](https://www.plex.tv/apps-devices/) show up as [Media Players](/integrations/media_player/) and report playback status via a [Sensor](/integrations/sensor/) in Home Assistant. Media Players will allow you to control media playback and see the current playing item. +The Plex integration allows you to connect Home Assistant to a [Plex Media Server](https://plex.tv). Once configured, actively streaming [Plex Clients](https://www.plex.tv/apps-devices/) show up as [Media Players](/integrations/media_player/) and report playback status and library sizes via [Sensors](/integrations/sensor/) in Home Assistant. Media Players will allow you to control media playback and see the current playing item. Support for playing music directly on linked [Sonos](/integrations/sonos/) speakers is available for users with an active [Plex Pass](https://www.plex.tv/plex-pass/) subscription. More information [here](#sonos-playback). @@ -56,7 +56,16 @@ Alternatively, you can manually configure a Plex server connection by selecting ## Sensor -The Plex sensor platform monitors activity on a given Plex Media Server. The sensor state provides the a count of users currently watching media from the Plex server. Clicking the sensor shows who is watching what media. +The activity sensor provides a count of users currently watching media from the Plex server. Clicking the sensor shows details for the active users and media streams. + +The library sensors show a count of items in each library. Depending on the library contents, the sensor will show extra detail in its attributes. For example, a library sensor for TV shows will represent the total number of episodes in the library and its attributes will also report the number of shows and seasons it contains. + +
    + +The library sensors are disabled by default, but can be enabled via the Plex integration page. + +
    + ## Media Player diff --git a/source/_integrations/point.markdown b/source/_integrations/point.markdown index 1ca4a7fac9f..d18a7b7e8db 100644 --- a/source/_integrations/point.markdown +++ b/source/_integrations/point.markdown @@ -76,16 +76,21 @@ The Point only supports a Arm/Disarm action, so it is only `Arm Away` that is im Each Point exposes the following binary sensors: +- **alarm**: `On` means alarm sound was recognised, `Off` means normal - **battery**: `On` means low, `Off` means normal - **button_press**: `On` means the button was pressed, `Off` means normal - **cold**: `On` means cold, `Off` means normal - **connectivity**: `On` means connected, `Off` means disconnected - **dry**: `On` means too dry, `Off` means normal +- **glass**: `On` means the sound of glass break was detected, `Off` means normal - **heat**: `On` means hot, `Off` means normal - **light**: `On` means light detected, `Off` means no light - **moisture**: `On` means moisture detected (wet), `Off` means no moisture (dry) +- **motion**: `On` means motion was detected, `Off` means no motion +- **noise**: `On` means noise was detected, `Off` means noise levels have gone back to normal - **sound**: `On` means sound detected, `Off` means no sound (clear) -- **tamper**: `On` means the point was removed or attached, `Off` means normal +- **tamper**: `On` means the point was removed, `Off` means normal +- **tamper_old**: `On` means the point was removed or attached, `Off` means normal (this is only supported on some "old" devices)
    diff --git a/source/_integrations/prometheus.markdown b/source/_integrations/prometheus.markdown index b7b7623abe2..3e541e0aa0b 100644 --- a/source/_integrations/prometheus.markdown +++ b/source/_integrations/prometheus.markdown @@ -179,3 +179,16 @@ When looking into the metrics on the Prometheus side, there will be: - The [client library](https://github.com/prometheus/client_python) provided metrics, which are a bunch of **process_\*** and also a single pseudo-metric **python_info** which contains (not as value but as labels) information about the Python version of the client, i.e., the Home Assistant Python interpreter. Typically, you will only be interested in the first set of metrics. + +## Metrics in unavailable or unknown states + +When the Prometheus exporter starts (typically when Home Assistant starts), all non-excluded entities in an unavailable or unknown state are not be exported until they are available again. If the entity goes into state unavailable or unknown again, the value exported will always be the latest known one. + +While an entity is in those states, the `entity_available` corresponding metric is set to 0. This metric can be used to filter out values while the entity is unavailable or in an unknown state thanks to a [recording rule](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/). + +For example: + +```yaml +- record: "known_temperature_c" + expr: "temperature_c unless entity_available == 0" +``` diff --git a/source/_integrations/prowl.markdown b/source/_integrations/prowl.markdown index f9ce195bdb3..ea7e84b83e6 100644 --- a/source/_integrations/prowl.markdown +++ b/source/_integrations/prowl.markdown @@ -40,8 +40,9 @@ api_key: The following attributes can be placed `data` for extended functionality. -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `priority` | yes | Priority level, for more info refer to the [Prowl API documentation](https://www.prowlapp.com/api.php#add). | +| Service data attribute | Optional | Default | Description | +| ---------------------- | -------- | ------- | ----------- | +| `priority` | yes | 0 | Priority level, for more info refer to the [Prowl API documentation](https://www.prowlapp.com/api.php#add). | +| `url` | yes | n/a | URL to be attached, for more info refer to the [Prowl API documentation](https://www.prowlapp.com/api.php#add). | To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_integrations/python_script.markdown b/source/_integrations/python_script.markdown index da46b52ff62..6a6312129e0 100644 --- a/source/_integrations/python_script.markdown +++ b/source/_integrations/python_script.markdown @@ -76,12 +76,13 @@ The above `python_script` can be called using the following YAML as an input. ## Documenting your Python scripts -You can add descriptions for your Python scripts that will be shown in the Call Services tab of the Developer Options page. To do so, simply create a `services.yaml` file in your `/python_scripts` folder. Using the above Python script as an example, the `services.yaml` file would look like: +You can add names and descriptions for your Python scripts that will be shown in the frontend. To do so, simply create a `services.yaml` file in your `/python_scripts` folder. Using the above Python script as an example, the `services.yaml` file would look like: ```yaml # services.yaml turn_on_light: - description: Turn on a light and set its color. + name: Turn on light + description: Turn on a specific light and set its color. fields: entity_id: description: The light that will be turned on. diff --git a/source/_integrations/recorder.markdown b/source/_integrations/recorder.markdown index 00b7d16ef67..a50954ad7be 100644 --- a/source/_integrations/recorder.markdown +++ b/source/_integrations/recorder.markdown @@ -210,6 +210,7 @@ Note that purging will not immediately decrease disk space usage but it will sig | ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `keep_days` | yes | The number of history days to keep in recorder database (defaults to the integration `purge_keep_days` configuration) | | `repack` | yes | When using SQLite or PostgreSQL this will rewrite the entire database. When using MySQL or MariaDB it will optimize or recreate the events and states tables. This is a heavy operation that can cause slowdowns and increased disk space usage while it runs. Only supported by SQLite, PostgreSQL, MySQL and MariaDB. | +| `apply_filter` | yes | Apply entity_id and event_type filter in addition to time based purge. Useful in combination with `include` / `exclude` filter to remove falsely added states and events. Combine with `repack: true` to reduce database size. | ### Service `disable` diff --git a/source/_integrations/screenlogic.markdown b/source/_integrations/screenlogic.markdown new file mode 100644 index 00000000000..b4fa49dc7d6 --- /dev/null +++ b/source/_integrations/screenlogic.markdown @@ -0,0 +1,32 @@ +--- +title: Pentair ScreenLogic +description: Instructions on how to integrate a ScreenLogic gateway within Home Assistant. +ha_release: '2021.4' +ha_category: + - Hub + - Binary Sensor + - Climate + - Sensor + - Switch +ha_iot_class: Local Polling +ha_config_flow: true +ha_dhcp: true +ha_codeowners: + - '@dieselrabbit' +ha_domain: screenlogic +ha_platforms: + - binary_sensor + - climate + - sensor + - switch +--- + +The Pentair ScreenLogic integration allows you to integrate your Pentair Intellitouch or EasyTouch pool controller with Home Assistant via the [Pentair ScreenLogic](https://www.pentair.com/en-us/products/residential/pool-spa-equipment/pool-automation/screenlogic2_interfaceforintellitouchandeasytouchautomationsystems.html) gateway. + +{% include integrations/config_flow.md %} + +## Options + +ScreenLogic options are set via **Configuration** -> **Integrations** -> **Pentair ScreenLogic** -> **Options**. + +* Seconds between scans - How many seconds between each polling of the ScreenLogic gateway. diff --git a/source/_integrations/script.markdown b/source/_integrations/script.markdown index c41ef183857..b3f69226938 100644 --- a/source/_integrations/script.markdown +++ b/source/_integrations/script.markdown @@ -11,7 +11,7 @@ ha_domain: script ha_iot_class: --- -The `script` integration allows users to specify a sequence of actions to be executed by Home Assistant. These are run when you turn the script on. The script integration will create an entity for each script and allow them to be controlled via services. +The script integration allows users to specify a sequence of actions to be executed by Home Assistant. These are run when you turn the script on. The script integration will create an entity for each script and allow them to be controlled via services. ## Configuration @@ -62,21 +62,41 @@ variables: description: The value of the variable. Any YAML is valid. Templates can also be used to pass a value to the variable. type: any fields: - description: "Information about the parameters that the script uses; see the [Passing variables to scripts](#passing-variables-to-scripts) section below. Please note: In order for this description to be displayed in the Services tab of the Developer Tools, the script description must be defined as well." + description: "Information about the script field parameters; see the [Passing variables to scripts](#passing-variables-to-scripts) section below. Please note: In order for this description to be displayed in the Services tab of the Developer Tools, the script description must be defined as well." required: false default: {} type: map keys: - PARAMETER_NAME: - description: A parameter used by this script. + FIELD_NAME: + description: A parameter field used by this script. All sub-options are only used for creating a representation of this script in the UI. type: map keys: + name: + description: The name of this script parameter field. + type: string description: - description: A description of PARAMETER_NAME. + description: A description of this of this script parameter. type: string + advanced: + description: Marks this field as an advanced parameter. This causes it only to be shown in the UI, when the user has advanced mode enabled. + type: boolean + default: false + required: + description: Mark if this field is required. This is a UI only feature. + type: boolean + default: false example: - description: An example value for PARAMETER_NAME. + description: An example value. This will only be shown in table of options available in the Services tab of the Developer Tools. type: string + default: + description: The default value for this field, as shown in the UI. + type: any + selector: + description: > + The [selector](/docs/blueprint/selectors/) to use for this input. A + selector defines how the input is displayed in the frontend UI. + type: selector + required: false mode: description: "Controls what happens when script is invoked while it is still running from one or more previous invocations. See [Script Modes](#script-modes)." required: false @@ -125,8 +145,15 @@ script:  turn_on_entity: group.living_room fields: minutes: + name: Minutes description: "The amount of time to wait before turning on the living room lights" - example: 1 + selector: + number: + min: 0 + max: 60 + step: 1 + unit_of_measurement: minutes + mode: slider # If called again while still running (probably in delay step), start over. mode: restart sequence: diff --git a/source/_integrations/sensor.modbus.markdown b/source/_integrations/sensor.modbus.markdown deleted file mode 100644 index 7c7d03a2cfb..00000000000 --- a/source/_integrations/sensor.modbus.markdown +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: Modbus Sensor -description: "Instructions on how to integrate Modbus sensors into Home Assistant." -ha_category: - - Sensor -ha_release: pre 0.7 -ha_iot_class: Local Push -ha_domain: modbus ---- - -The `modbus` sensor allows you to gather data from [Modbus](http://www.modbus.org/) registers. - -## Configuration - -To use your Modbus sensors in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - platform: modbus - registers: - - name: Sensor1 - hub: hub1 - unit_of_measurement: °C - slave: 1 - register: 100 - - name: Sensor2 - hub: hub1 - unit_of_measurement: mg - slave: 1 - register: 110 - count: 2 - - name: Sensor3 - hub: hub1 - unit_of_measurement: °C - slave: 1 - register: 120 - register_type: input - data_type: float - scale: 0.01 - offset: -273.16 - precision: 2 -``` - -{% configuration %} -registers: - description: The array contains a list of relevant registers to read from. - required: true - type: map - keys: - name: - description: Name of the sensor. - required: true - type: string - hub: - description: The name of the hub. - required: false - default: modbus_hub - type: string - slave: - description: The number of the slave (Optional for tcp and upd Modbus). - required: true - type: integer - register: - description: Register number. - required: true - type: integer - register_type: - description: Modbus register type (holding, input), default holding. - required: false - type: string - unit_of_measurement: - description: Unit to attach to value. - required: false - type: integer - device_class: - description: The [type/class](/integrations/sensor/#device-class) of the sensor to set the icon in the frontend. - required: false - type: device_class - default: None - count: - description: Number of registers to read. - required: false - type: integer - default: 1 - reverse_order: - description: Reverse the order of registers when count >1. - required: false - default: false - type: boolean - scale: - description: Scale factor (output = scale * value + offset). - required: false - default: 1 - type: float - offset: - description: Final offset (output = scale * value + offset). - required: false - default: 0 - type: float - precision: - description: Number of valid decimals. - required: false - default: 0 - type: integer - data_type: - description: Response representation (int, uint, float, string, custom). If float selected, value will be converted to IEEE 754 floating point format. - required: false - default: int - type: string - structure: - description: "If `data_type` is custom specified a double-quoted Python struct is expected here, to format the string to unpack the value. See Python documentation for details. Example: `>i`." - required: false - type: string -{% endconfiguration %} - -It's possible to change the default 30 seconds scan interval for the sensor updates as shown in the [Platform options](/docs/configuration/platform_options/#scan-interval) documentation. - -
    - -If you specify scale or offset as floating point values, double precision floating point arithmetic will be used to calculate final value. This can cause loss of precision for values that are larger than 2^53. - -
    - -### Full example - -Example a temperature sensor with a 10 seconds scan interval: - -```yaml -sensor: -- platform: modbus - scan_interval: 10 - registers: - - name: Room_1 - hub: hub1 - slave: 10 - register: 0 - register_type: holding - unit_of_measurement: °C - count: 1 - scale: 0.1 - offset: 0 - precision: 1 - data_type: integer -``` diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown index f0d2dc8391b..b2eaeda5e75 100644 --- a/source/_integrations/sensor.mqtt.markdown +++ b/source/_integrations/sensor.mqtt.markdown @@ -75,6 +75,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false @@ -99,7 +103,7 @@ force_update: type: boolean default: false icon: - description: The icon for the sensor. + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." required: false type: icon json_attributes_template: diff --git a/source/_integrations/solaredge.markdown b/source/_integrations/solaredge.markdown index e5142687868..d3597d51845 100644 --- a/source/_integrations/solaredge.markdown +++ b/source/_integrations/solaredge.markdown @@ -10,6 +10,8 @@ ha_domain: solaredge ha_dhcp: true ha_platforms: - sensor +ha_codeowners: + - '@frenck' --- The `solaredge` platform uses the [SolarEdge Monitoring API](https://www.solaredge.com/sites/default/files/se_monitoring_api.pdf) to allow you to get details from your SolarEdge solar power setup and integrate these in your Home Assistant installation. diff --git a/source/_integrations/somfy_mylink.markdown b/source/_integrations/somfy_mylink.markdown index 0fed59e43fb..61020e115f7 100644 --- a/source/_integrations/somfy_mylink.markdown +++ b/source/_integrations/somfy_mylink.markdown @@ -8,8 +8,6 @@ ha_release: 0.92 ha_iot_class: Assumed State ha_domain: somfy_mylink ha_config_flow: true -ha_codeowners: - - '@bdraco' ha_dhcp: true ha_platforms: - cover diff --git a/source/_integrations/stream.markdown b/source/_integrations/stream.markdown index 9ec204ba39c..c0b11865287 100644 --- a/source/_integrations/stream.markdown +++ b/source/_integrations/stream.markdown @@ -9,6 +9,7 @@ ha_quality_scale: internal ha_codeowners: - '@hunterjm' - '@uvjustin' + - '@allenporter' ha_domain: stream --- diff --git a/source/_integrations/switch.modbus.markdown b/source/_integrations/switch.modbus.markdown deleted file mode 100644 index 0809e71a75c..00000000000 --- a/source/_integrations/switch.modbus.markdown +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: "Modbus Switch" -description: "Instructions on how to integrate Modbus switches into Home Assistant." -ha_category: - - Switch -ha_release: pre 0.7 -ha_iot_class: Local Push -ha_domain: modbus ---- - -The `modbus` switch platform allows you to control [Modbus](http://www.modbus.org/) coils or registers. - -## Configuration - -To use your Modbus switches in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -switch: - platform: modbus - coils: - - name: Switch1 - hub: hub1 - slave: 1 - coil: 13 - - name: Switch2 - slave: 2 - coil: 14 - registers: - - name: Register1 - hub: hub1 - slave: 1 - register: 11 - command_on: 1 - command_off: 0 -``` - -{% configuration %} -coils: - description: A list of relevant coils to read from/write to. - required: false - type: map - keys: - hub: - description: The name of the hub. - required: false - default: default - type: string - slave: - description: The number of the slave (can be omitted for tcp and udp Modbus). - required: true - type: integer - name: - description: Name of the switch. - required: true - type: string - coil: - description: Coil number. - required: true - type: integer -registers: - description: A list of relevant registers to read from/write to. - required: false - type: map - keys: - hub: - description: The hub to use. - required: false - default: default - type: string - slave: - description: The number of the slave (can be omitted for tcp and udp Modbus). - required: true - type: integer - name: - description: Name of the switch. - required: true - type: string - register: - description: Register number. - required: true - type: integer - command_on: - description: Value to write to turn on the switch. - required: true - type: integer - command_off: - description: Value to write to turn off the switch. - required: true - type: integer - verify_state: - description: Define if is possible to readback the status of the switch. - required: false - default: true - type: boolean - verify_register: - description: Register to readback. - required: false - default: same as register - type: string - register_type: - description: Modbus register types are holding or input. - required: false - default: holding - type: string - state_on: - description: Register value when switch is on. - required: false - default: same as command_on - type: integer - state_off: - description: Register value when switch is off. - required: false - default: same as command_off - type: integer -{% endconfiguration %} - -It's possible to change the default 30 seconds scan interval for the switch state updates as shown in the [Platform options](/docs/configuration/platform_options/#scan-interval) documentation. - -### Full example - -Example switches, for which the state is polled from Modbus every 10 seconds. - -```yaml -switch: - platform: modbus - scan_interval: 10 - coils: - - name: Switch1 - hub: hub1 - slave: 1 - coil: 13 - - name: Switch2 - hub: hub1 - slave: 2 - coil: 14 -``` diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown index 4ad3ee8f93e..1447bc93eff 100644 --- a/source/_integrations/switch.mqtt.markdown +++ b/source/_integrations/switch.mqtt.markdown @@ -85,6 +85,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false @@ -94,7 +98,7 @@ device: required: false type: string icon: - description: Icon for the switch. + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." required: false type: icon json_attributes_template: diff --git a/source/_integrations/tado.markdown b/source/_integrations/tado.markdown index 6018b729ee4..9755b4e7157 100644 --- a/source/_integrations/tado.markdown +++ b/source/_integrations/tado.markdown @@ -8,6 +8,7 @@ ha_category: - Water Heater - Presence Detection - Sensor + - Weather ha_release: 0.41 ha_iot_class: Cloud Polling ha_codeowners: @@ -34,6 +35,7 @@ There is currently support for the following device types within Home Assistant: - Water Heater - for water heater zones. - [Presence Detection](#presence-detection) - Sensor - for some additional information of the zones. +- Weather - for information about the current weather at the location of your Tado home. {% include integrations/config_flow.md %} diff --git a/source/_integrations/tag.mqtt.markdown b/source/_integrations/tag.mqtt.markdown index 1fba648a745..1b509fd1efd 100644 --- a/source/_integrations/tag.mqtt.markdown +++ b/source/_integrations/tag.mqtt.markdown @@ -49,6 +49,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown index 62337f62370..ec205c8bcb9 100644 --- a/source/_integrations/template.markdown +++ b/source/_integrations/template.markdown @@ -23,7 +23,22 @@ ha_platforms: - weather --- -The `template` platform supports sensors which get their values from other entities. +The `template` integration allows creating entities which derive their values from other entities. This is done by defining [templates](/docs/configuration/templating/) for each property of an entity, like the name or the state. Entities are updated automatically whenever a value that a template relies on changes. + +For template sensors it's also possible to derive the state from [automation triggers](#configuration-for-trigger-based-template-sensors). + +Available template platforms: + +- [Alarm_control_panel](/integrations/alarm_control_panel.template/) +- [Binary_sensor](/integrations/binary_sensor.template/) +- [Cover](/integrations/cover.template/) +- [Fan](/integrations/fan.template/) +- [Light](/integrations/light.template/) +- [Lock](/integrations/lock.template/) +- Sensor (this page) +- [Switch](/integrations/switch.template/) +- [Vacuum](/integrations/vacuum.template/) +- [Weather](/integrations/weather.template/) ## Configuration @@ -49,7 +64,7 @@ sensor: {% configuration %} sensors: - description: List of your sensors. + description: Map of your sensors. required: true type: map keys: @@ -90,7 +105,7 @@ sensor: "attribute: template": description: The attribute and corresponding template. required: true - type: template + type: template availability_template: description: Defines a template to get the `available` state of the component. If the template returns `true`, the device is `available`. If the template returns any other value, the device will be `unavailable`. If `availability_template` is not configured, the component will always be `available`. required: false @@ -103,6 +118,106 @@ sensor: default: None {% endconfiguration %} +## Configuration for trigger-based template sensors + +Trigger-based template sensors allow the user to define [an automation trigger][trigger-doc] for a group of template sensors. Whenever the trigger fires, the template sensor will re-render and it will have access to [the trigger data](/docs/automation/templating/) in the templates. This feature is a great way to create data based on webhook data, or have sensors be updated based on a time-schedule. + +Trigger-based template entities are defined in YAML directly under the `template:` key. You can define multiple configuration blocks as a list. Each block defines one or more triggers and the sensors that should be updated when the trigger fires. + +Trigger-based entities do not automatically update when states referenced in the templates change. This functionality can be added by defining a [state trigger](/docs/automation/trigger/#state-trigger) for each entity that you want to trigger updates. + +{% raw %} + +```yaml +# Example configuration entry +template: + - trigger: + - platform: webhook + webhook_id: my-super-secret-webhook-id + sensor: + - name: "Webhook Temperature" + state: "{{ trigger.json.temperature }}" + - name: "Webhook Humidity" + state: "{{ trigger.json.humidity }}" +``` + +{% endraw %} + +You can test this trigger entity with the following CURL command: + +```bash +curl --header "Content-Type: application/json" \ + --request POST \ + --data '{"temperature": 5, "humidity": 34}' \ + http://homeassistant.local:8123/api/webhook/my-super-secret-webhook-id +``` + +

    Configuration under the template: key uses a different format compared to the platform configuration.

    + +{% configuration %} +trigger: + description: The trigger configuration for this entity. [See trigger documentation](/docs/automation/trigger) + required: true + type: list +unique_id: + description: The unique ID for this trigger. This will be prefixed to all unique IDs of all entities in this block. + required: false + type: string +sensor: + description: List of sensors to create from the trigger data. + required: true + type: map + keys: + state: + description: Defines a template to get the state of the sensor. + required: true + type: template + name: + description: Defines a template to get the name of the sensor. + required: false + type: template + unique_id: + description: An ID that uniquely identifies this sensor. Will be combined with the unique ID of the configuration block if available. + required: false + type: string + unit_of_measurement: + description: "Defines the units of measurement of the sensor, if any. This will also influence the graphical presentation in the history visualization as a continuous value. Sensors with missing `unit_of_measurement` are showing as discrete values." + required: false + type: string + default: None + icon: + description: Defines a template for the icon of the sensor. + required: false + type: template + picture: + description: Defines a template for the entity picture of the sensor. + required: false + type: template + attributes: + description: Defines templates for attributes of the sensor. + required: false + type: map + keys: + "attribute: template": + description: The attribute and corresponding template. + required: true + type: template + availability: + description: Defines a template to get the `available` state of the component. If the template returns `true`, the device is `available`. If the template returns any other value, the device will be `unavailable`. If not configured, the component will always be `available`. + required: false + type: template + default: true + device_class: + description: Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). It does not set the `unit_of_measurement`. + required: false + type: device_class + default: None +{% endconfiguration %} + +

    It's currently only possible to define trigger-based entities via the top-level configuration. These entities are not yet included when reloading template entities.

    + +[trigger-doc]: /docs/automation/trigger + ## Considerations ### Startup diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown index 1162ab210c6..f34bd74de88 100644 --- a/source/_integrations/tplink.markdown +++ b/source/_integrations/tplink.markdown @@ -59,6 +59,8 @@ Plugs are type `switch` when autodiscovery has been disabled. ### Bulbs +Other bulbs may also work, but with limited color temperatures. If you find a bulb isn't reaching the full-color temperature boundaries, submit a bug report. + - LB100 - LB110 - LB120 @@ -66,7 +68,10 @@ Plugs are type `switch` when autodiscovery has been disabled. - LB230 - KL110 - KL120 +- KL125 - KL130 +- KB130 +- KL430 ## Configuration diff --git a/source/_integrations/updater.markdown b/source/_integrations/updater.markdown index c47c3af735e..93c70067736 100644 --- a/source/_integrations/updater.markdown +++ b/source/_integrations/updater.markdown @@ -15,8 +15,6 @@ ha_platforms: The `updater` binary sensor will check daily for new releases. The state will be "on" when an update is available. Otherwise, the state will be "off". The newer version, as well as the link to the release notes, are attributes of the updater. -The updater integration will also collect basic information about the running Home Assistant instance and its environment. The information includes the current Home Assistant version, the time zone, Python version and operating system information. No identifiable information (i.e., IP address, GPS coordinates, etc.) will ever be collected. If you are concerned about your privacy, you are welcome to scrutinize the Python [source code](https://github.com/home-assistant/home-assistant/tree/dev/homeassistant/components/updater). - ## Configuration This integration is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually: @@ -25,38 +23,6 @@ This integration is by default enabled, unless you've disabled or removed the [` updater: ``` -{% configuration %} -reporting: - description: Whether or not to share system information when checking for updates. - required: false - type: boolean - default: true -include_used_components: - description: Whether or not to report the integrations that you are using in Home Assistant. - required: false - type: boolean - default: false -{% endconfiguration %} - -For further information about the Updater's data, please check the [detailed overview](/docs/backend/updater/). If you choose not to share any information when checking for updates, you can set `reporting: false`. - -It is possible to report the integrations that you are using to the Home Assistant developers. This will help them focus on improving the popular ones. To enable this option, you have to add `include_used_components: true`. - -```json -"components": [ - "apcupsd", - "api", - "automation", - "binary_sensor", - "binary_sensor.zwave", - "camera", - "camera.uvc", - "config", - "config.core", - ... -] -``` - ## Notification For an added bonus, an automation integration can be created to send a message with a notifier when that state of this component's entity changes. diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown index 60323b25f3b..4e7838ec4be 100644 --- a/source/_integrations/vacuum.mqtt.markdown +++ b/source/_integrations/vacuum.mqtt.markdown @@ -113,6 +113,10 @@ fan_speed_topic: description: The MQTT topic subscribed to receive fan speed values from the vacuum. required: false type: string +icon: + description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." + required: false + type: icon json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false @@ -348,6 +352,10 @@ device: description: The name of the device. required: false type: string + suggested_area: + description: 'Suggest an area if the device isn’t in one yet.' + required: false + type: string sw_version: description: The firmware version of the device. required: false diff --git a/source/_integrations/vera.markdown b/source/_integrations/vera.markdown index d2d46bf24ec..e9a1513d254 100644 --- a/source/_integrations/vera.markdown +++ b/source/_integrations/vera.markdown @@ -16,7 +16,7 @@ ha_iot_class: Local Polling ha_config_flow: true ha_domain: vera ha_codeowners: - - '@vangorra' + - '@pavoni' ha_platforms: - binary_sensor - climate diff --git a/source/_integrations/verisure.markdown b/source/_integrations/verisure.markdown index 0d20e8bcae4..d3d9cc312e8 100644 --- a/source/_integrations/verisure.markdown +++ b/source/_integrations/verisure.markdown @@ -21,6 +21,8 @@ ha_platforms: - lock - sensor - switch +ha_config_flow: true +ha_dhcp: true --- Home Assistant has support to integrate your [Verisure](https://www.verisure.com/) devices. @@ -34,75 +36,7 @@ There is currently support for the following device types within Home Assistant: - Lock - Binary Sensor (Door & Window) -## Configuration - -To integrate Verisure with Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -verisure: - username: USERNAME - password: PASSWORD -``` - -{% configuration %} -username: - description: The username to Verisure mypages. - required: true - type: string -password: - description: The password to Verisure mypages. - required: true - type: string -alarm: - description: Set to `true` to show alarm, `false` to disable. - required: false - type: boolean - default: true -hygrometers: - description: Set to `true` to show hygrometers, `false` to disable. - required: false - type: boolean - default: true -smartplugs: - description: Set to `true` to show smartplugs, `false` to disable. - required: false - type: boolean - default: true -locks: - description: Set to `true` to show locks, `false` to disable. - required: false - type: boolean - default: true -default_lock_code: - description: Code that will be used to lock or unlock, if none is supplied. - required: false - type: string -thermometers: - description: Set to `true` to show thermometers, `false` to disable. - required: false - type: boolean - default: true -mouse: - description: Set to `true` to show mouse detectors, `false` to disable. - required: false - type: boolean - default: true -door_window: - description: Set to `true` to show doors and windows, `false` to disable. - required: false - type: boolean - default: true -code_digits: - description: Number of digits in PIN code. - required: false - type: integer - default: 4 -giid: - description: The GIID of your installation (If you have more then one alarm system). To find the GIID for your systems run `python verisure.py` EMAIL PASSWORD installations'. - required: false - type: string -{% endconfiguration %} +{% include integrations/config_flow.md %} ## 2 Factor Authentication Prerequisite diff --git a/source/_integrations/version.markdown b/source/_integrations/version.markdown index 78290968210..d29c9b63e1f 100644 --- a/source/_integrations/version.markdown +++ b/source/_integrations/version.markdown @@ -34,17 +34,17 @@ name: type: string default: "`Current Version` in case of `source: local`, `Latest Version` otherwise." beta: - description: Flag to indicate that it will check for beta versions, only supported for the sources `pypi`, `hassio` and `docker`. + description: Flag to indicate that it will check for beta versions, only supported for the sources `pypi`, `supervisor` and `container`. required: false type: boolean default: false image: - description: The image you want to check against, this is only supported for `hassio` and `docker`, see full list under. + description: The image you want to check against, this is only supported for `supervisor` and `container`, see full list under. required: false type: string default: default source: - description: The source you want to check against, possible values are `local`, `pypi`, `hassio`, `haio` and `docker`. + description: The source you want to check against, possible values are `local`, `pypi`, `supervisor`, `haio` and `container`. required: false type: string default: local diff --git a/source/_integrations/vicare.markdown b/source/_integrations/vicare.markdown index 4a1f5031e51..2173c099475 100644 --- a/source/_integrations/vicare.markdown +++ b/source/_integrations/vicare.markdown @@ -52,7 +52,7 @@ circuit: required: false type: integer heating_type: - description: One of `generic`, `gas` or `heatpump`. Specifying the heating_type provides additional attributes and sensors specific for the heating system. + description: One of `generic`, `gas`, `heatpump` or `fuelcell`. Specifying the heating_type provides additional attributes and sensors specific for the heating system. required: false type: string default: generic diff --git a/source/_integrations/wake_on_lan.markdown b/source/_integrations/wake_on_lan.markdown index f77761accaa..052703a0023 100644 --- a/source/_integrations/wake_on_lan.markdown +++ b/source/_integrations/wake_on_lan.markdown @@ -9,6 +9,8 @@ ha_iot_class: Local Push ha_domain: wake_on_lan ha_platforms: - switch +ha_codeowners: + - '@ntilley905' --- The `wake_on_lan` integration enables the ability to send _magic packets_ to [Wake on LAN](https://en.wikipedia.org/wiki/Wake-on-LAN) capable devices to turn them on. @@ -83,7 +85,7 @@ name: default: Wake on LAN type: string host: - description: The IP address or hostname to check the state of the device (on/off). + description: The IP address or hostname to check the state of the device (on/off). If this is not provided, the state of the switch will be assumed based on the last action that was taken. required: false type: string turn_off: diff --git a/source/_integrations/weather.template.markdown b/source/_integrations/weather.template.markdown index c148a45226c..50235f8b044 100644 --- a/source/_integrations/weather.template.markdown +++ b/source/_integrations/weather.template.markdown @@ -56,6 +56,10 @@ humidity_template: description: The current humidity. required: true type: template +attribution_template: + description: The attribution to be shown in the frontend. + required: false + type: string pressure_template: description: The current air pressure. required: false @@ -64,6 +68,18 @@ wind_speed_template: description: The current wind speed. required: false type: template +wind_bearing_template: + description: The current wind bearing. + required: false + type: template +ozone_template: + description: The current ozone level. + required: false + type: template +visibility_template: + description: The current visibility. + required: false + type: template forecast_template: description: Daily forecast data. required: false diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index 3174c9f0ca3..ec0f92c02ae 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -36,8 +36,7 @@ The `xiaomi_miio` integration supports the following devices: - [Xiaomi Gateway](#xiaomi-gateway) - [Xiaomi device tracker (Xiaomi Mi WiFi Repeater 2)](#xiaomi-device-tracker-xiaomi-mi-wifi-repeater-2) - [Xiaomi Air Purifier and Humidifier](#xiaomi-air-purifier-and-humidifier) -- [Xiaomi Air Quality Index Monitor](#xiaomi-air-quality-index-monitor) -- [Xiaomi Mi Air Quality Monitor](#xiaomi-mi-air-quality-monitor) +- [Xiaomi Air Quality Monitor](#xiaomi-air-quality-monitor) - [Xiaomi IR Remote](#xiaomi-ir-remote) - [Xiaomi Mi Robot Vacuum](#xiaomi-mi-robot-vacuum) - [Xiaomi Philips Light](#xiaomi-philips-light) @@ -239,6 +238,26 @@ These subdevices are fully implemented in HomeAssistant: | -------------------------------- | ----------------------- | --------------- | ------------------------------------------------ | | Weather sensor | lumi.sensor_ht | WSDCGQ01LM | readout `temperature` and `humidity` | | Weather sensor | lumi.weather.v1 | WSDCGQ11LM | readout `temperature`, `humidity` and `pressure` | +| Wall switch single | lumi.ctrl_ln1 | QBKG11LM | load_power, status, turn_on, turn_off, toggle | +| Wall switch single | lumi.ctrl_ln1.aq1 | QBKG11LM | load_power, status, turn_on, turn_off, toggle | +| Wall switch no neutral | lumi.ctrl_neutral1.v1 | QBKG04LM | status, turn_on, turn_off, toggle | +| Wall switch double | lumi.ctrl_ln2 | QBKG12LM | load_power, status, turn_on, turn_off, toggle | +| Wall switch double | lumi.ctrl_ln2.aq1 | QBKG12LM | load_power, status, turn_on, turn_off, toggle | +| Wall switch double no neutral | lumi.ctrl_neutral2 | QBKG03LM | status, turn_on, turn_off, toggle | +| D1 wall switch triple | lumi.switch.n3acn3 | QBKG26LM | load_power, status, turn_on, turn_off, toggle | +| D1 wall switch triple no neutral | lumi.switch.l3acn3 | QBKG25LM | load_power, status, turn_on, turn_off, toggle | +| Wall outlet | lumi.ctrl_86plug.v1 | QBCZ11LM | status, turn_on, turn_off, toggle | +| Wall outlet | lumi.ctrl_86plug.aq1 | QBCZ11LM | load_power, status, turn_on, turn_off, toggle | +| Plug | lumi.plug | ZNCZ02LM | load_power, status, turn_on, turn_off, toggle | +| Relay | lumi.relay.c2acn01 | LLKZMK11LM | load_power, status, turn_on, turn_off, toggle | +| Smart bulb E27 | lumi.light.aqcn02 | ZNLDP12LM | on/off, brightness, color temperature | +| IKEA smart bulb E27 white | ikea.light.led1545g12 | LED1545G12 | on/off, brightness, color temperature | +| IKEA smart bulb E27 white | ikea.light.led1546g12 | LED1546G12 | on/off, brightness, color temperature | +| IKEA smart bulb E12 white | ikea.light.led1536g5 | LED1536G5 | on/off, brightness, color temperature | +| IKEA smart bulb GU10 white | ikea.light.led1537r6 | LED1537R6 | on/off, brightness, color temperature | +| IKEA smart bulb E27 white | ikea.light.led1623g12 | LED1623G12 | on/off, brightness, color temperature | +| IKEA smart bulb GU10 white | ikea.light.led1650r5 | LED1650R5 | on/off, brightness, color temperature | +| IKEA smart bulb E12 white | ikea.light.led1649c5 | LED1649C5 | on/off, brightness, color temperature | ### Recognized subdevices (not yet implemented) @@ -266,18 +285,6 @@ These subdevices are recognized by the python-miio code but are still being work | Remote switch double | lumi.sensor_86sw2.v1 | WXKG02LM 2016 | | Remote switch double | lumi.remote.b286acn01 | WXKG02LM 2018 | | D1 remote switch double | lumi.remote.b286acn02 | WXKG07LM | -| Wall switch single | lumi.ctrl_ln1 | QBKG11LM | -| Wall switch single | lumi.ctrl_ln1.aq1 | QBKG11LM | -| Wall switch no neutral | lumi.ctrl_neutral1.v1 | QBKG04LM | -| Wall switch double | lumi.ctrl_ln2 | QBKG12LM | -| Wall switch double | lumi.ctrl_ln2.aq1 | QBKG12LM | -| Wall switch double no neutral | lumi.ctrl_neutral2 | QBKG03LM | -| D1 wall switch triple | lumi.switch.n3acn3 | QBKG26LM | -| D1 wall switch triple no neutral | lumi.switch.l3acn3 | QBKG25LM | -| Wall outlet | lumi.ctrl_86plug.v1 | QBCZ11LM | -| Wall outlet | lumi.ctrl_86plug.aq1 | QBCZ11LM | -| Plug | lumi.plug | ZNCZ02LM | -| Relay | lumi.relay.c2acn01 | LLKZMK11LM | | Curtain | lumi.curtain | ZNCLDJ11LM | | Curtain | lumi.curtain.aq2 | ZNGZDJ11LM | | Curtain B1 | lumi.curtain.hagl04 | ZNCLDJ12LM | @@ -285,14 +292,6 @@ These subdevices are recognized by the python-miio code but are still being work | Door lock S2 | lumi.lock.acn02 | ZNMS12LM | | Door lock S2 pro | lumi.lock.acn03 | ZNMS13LM | | Vima cylinder lock | lumi.lock.v1 | A6121 | -| Smart bulb E27 | lumi.light.aqcn02 | ZNLDP12LM | -| IKEA smart bulb E27 white | ikea.light.led1545g12 | LED1545G12 | -| IKEA smart bulb E27 white | ikea.light.led1546g12 | LED1546G12 | -| IKEA smart bulb E12 white | ikea.light.led1536g5 | LED1536G5 | -| IKEA smart bulb GU10 white | ikea.light.led1537r6 | LED1537R6 | -| IKEA smart bulb E27 white | ikea.light.led1623g12 | LED1623G12 | -| IKEA smart bulb GU10 white | ikea.light.led1650r5 | LED1650R5 | -| IKEA smart bulb E12 white | ikea.light.led1649c5 | LED1649C5 | | Thermostat S2 | lumi.airrtc.tcpecn02 | KTWKQ03ES | ## Xiaomi device tracker (Xiaomi Mi WiFi Repeater 2) @@ -350,6 +349,13 @@ Supported devices: | Air Humidifier CB1 | zhimi.humidifier.cb1 | | | Air Fresh VA2 | zhimi.airfresh.va2 | | + +### Configuration + +Please follow the instructions on [Retrieving the Access Token](/integrations/xiaomi_miio/#retrieving-the-access-token) to get the API token to use during configuration flow setup. + +To add a Xiaomi Air Purifier to your installation, click Configuration in the sidebar, then click Integrations and then click the + icon in the lower right and find xiaomi_miio. You will then be presented with a form in which you will need to fill in the “IP address” and 32 characters “token”. After you click submit, you will have the opportunity to select the area that your devices are located. + ### Features ### Air Purifier 2 et al. @@ -677,37 +683,6 @@ This model uses newer MiOT communication protocol. - `motor_speed` - `extra_features` -Please follow the instructions on [Retrieving the Access Token](/integrations/xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. - -To add a Xiaomi Air Purifier to your installation, add the following to your `configuration.yaml` file: - -```yaml -fan: -# Example configuration.yaml entry - - platform: xiaomi_miio - host: 192.168.130.66 - token: YOUR_TOKEN -``` - -{% configuration %} -host: - description: The IP address of your miio fan. - required: true - type: string -token: - description: The API token of your miio fan. - required: true - type: string -name: - description: The name of your miio fan. - required: false - type: string - default: Xiaomi Air Purifier -model: - description: The model of your miio fan. See the table above for valid values (f.e. `zhimi.airpurifier.v2`). This setting can be used to bypass the device model detection and is recommended if your device isn't always available. - required: false - type: string -{% endconfiguration %} ### Platform Services @@ -893,91 +868,29 @@ Check if the device is in the same subnet as the Home Assistant instance. Otherw If it's not possible to use VLANs for some reason, your last resort may be using NAT translation, between the IPs. -## Xiaomi Air Quality Index Monitor +## Xiaomi Air Quality Monitor -The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor (PM2.5) and reporting the air quality index. +The `xiaomi_miio` Air Quality Monitor is observing your Xiaomi Mi Air Quality Monitor (PM2.5) and reporting the air quality index and other values. Currently, the supported features are: - Air Quality Index (AQI) +- Particulate matter 2.5 - Attributes - power - charging - battery - time_stat - -Please follow the instructions on [Retrieving the Access Token](/integrations/xiaomi_miio/#retrieving-the-access-token) to get the API token. - -### Configuration - -To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: xiaomi_miio - host: IP_ADDRESS - token: YOUR_TOKEN -``` - -{% configuration %} -host: - description: The IP address of your miio device. - required: true - type: string -token: - description: The API token of your miio device. - required: true - type: string -name: - description: The name of your miio device. - required: false - type: string - default: Xiaomi Miio Sensor -{% endconfiguration %} - -## Xiaomi Mi Air Quality Monitor - -The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor and reporting the air quality values. - -Currently, the supported features are: - -- Particulate matter 2.5 -- Attributes - carbon_dioxide_equivalent - total_volatile_organic_compounds - temperature - humidity -Please follow the instructions on [Retrieving the Access Token](/integrations/xiaomi_miio/#retrieving-the-access-token) to get the API token. - ### Configuration -To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: +Please follow the instructions on [Retrieving the Access Token](/integrations/xiaomi_miio/#retrieving-the-access-token) to get the API token to use during configuration flow setup. -```yaml -# Example configuration.yaml entry -air_quality: - - platform: xiaomi_miio - host: IP_ADDRESS - token: YOUR_TOKEN -``` - -{% configuration %} -host: - description: The IP address of your miio device. - required: true - type: string -token: - description: The API token of your miio device. - required: true - type: string -name: - description: The name of your miio device. - required: false - type: string - default: Xiaomi Miio Air Quality Monitor -{% endconfiguration %} +To add a Xiaomi Mi Air Quality Monitor to your installation, click Configuration in the sidebar, then click Integrations and then click the + icon in the lower right and find xiaomi_miio. You will then be presented with a form in which you will need to fill in the “IP address” and 32 characters “token”. After you click submit, you will have the opportunity to select the area that your devices are located. ## Xiaomi IR Remote @@ -1513,6 +1426,12 @@ It seems to be the case that Numbers 1..15 are used to number the intitial segme The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips Zhirui LED Bulb E14 Candle Lamp, Xiaomi Philips Zhirui Downlight, Xiaomi Philips LED Ceiling Lamp, Xiaomi Philips Eyecare Lamp 2, Xiaomi Philips Moonlight Bedside Lamp and Philips Zhirui Desk Lamp. +Please follow the instructions on [Retrieving the Access Token](/integrations/xiaomi_miio/#retrieving-the-access-token) to get the API token to use during configuration flow setup. + +### Configuration + +To add a Xiaomi Philips Light to your installation, click Configuration in the sidebar, then click Integrations and then click the + icon in the lower right and find xiaomi_miio. You will then be presented with a form in which you will need to fill in the “IP address” and 32 characters “token”. After you click submit, you will have the opportunity to select the area that your devices are located. + ### Features ### Philips LED Ball Lamp, Philips Zhirui LED Candle Lamp and Philips Zhirui Downlight @@ -1597,40 +1516,6 @@ Supported models: `philips.light.moonlight` - brand_sleep - brand -Please follow the instructions on [Retrieving the Access Token](/integrations/xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. - -To add a Xiaomi Philips Light to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entries -light: - - platform: xiaomi_miio - name: Xiaomi Philips Smart LED Ball - host: 192.168.130.67 - token: YOUR_TOKEN - model: philips.light.bulb -``` - -{% configuration %} -host: - description: The IP address of your miio light. - required: true - type: string -token: - description: The API token of your miio light. - required: true - type: string -name: - description: The name of your miio light. - required: false - type: string - default: Xiaomi Philips Light -model: - description: The model of your light. Valid values are `philips.light.sread1`, `philips.light.ceiling`, `philips.light.zyceiling`, `philips.light.moonlight`, `philips.light.bulb`, `philips.light.candle`, `philips.light.candle2`, `philips.light.mono1` and `philips.light.downlight`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. - required: false - type: string -{% endconfiguration %} - ### Platform Services ### Service `xiaomi_miio.light_set_scene` diff --git a/source/_integrations/zeroconf.markdown b/source/_integrations/zeroconf.markdown index 55f500cf875..a578cd77ac1 100644 --- a/source/_integrations/zeroconf.markdown +++ b/source/_integrations/zeroconf.markdown @@ -30,10 +30,10 @@ zeroconf: type: map keys: default_interface: - description: By default, `zeroconf` will attempt to bind to all interfaces. For systems running using network isolation or similar, this may result in `zeroconf` being unavailable. Change this option to `true` if `zeroconf` does not function. + description: By default, `zeroconf` will broadcast on the default interface. For systems that require broadcasting `mdns` on all interfaces, change this option to `false` if `zeroconf` does not function. required: false type: boolean - default: false + default: true ipv6: description: By default, `zeroconf` will enable IPv6 support. If your network has trouble with IPv6 being enabled, you can set this option to `false`. required: false diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index 1c1a9e8b1b6..995c12435ce 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -30,6 +30,7 @@ ha_platforms: - lock - sensor - switch +ha_zeroconf: true --- The ZHA (Zigbee Home Automation) integration allows you to connect many off-the-shelf [Zigbee based devices](https://zigbeealliance.org) directly to Home Assistant, using one of the many available Zigbee coordinators. @@ -267,12 +268,45 @@ from the same group: ### Service `zha.remove` -This service remove an existing device from the network. +This service removes an existing device from the network. | Data | Optional | Description | | ---- | ---- | ----------- | | `ieee` | no | IEEE address of the device to remove +### Service `zha.set_lock_user_code` + +This service sets a lock code on a Zigbee lock. + +| Data | Optional | Description | +| --------- | ---- | ----------- | +| `code_slot` | no | Which lock code slot to store the code. Ex. 1-32 will work for Kwikset 954 +| `user_code` | no | Code to set on the lock. Ex. Kwikset accepts numbers 4-8 digits in length + +### Service `zha.clear_lock_user_code` + +This service clears a lock code from a Zigbee lock. + +| Data | Optional | Description | +| --------- | ---- | ----------- | +| `code_slot` | no | Which lock code slot to clear + +### Service `zha.enable_lock_user_code` + +This service enables a lock code on a Zigbee lock. + +| Data | Optional | Description | +| --------- | ---- | ----------- | +| `code_slot` | no | Which lock code slot to enable + +### Service `zha.disable_lock_user_code` + +This service disables a lock code on a Zigbee lock. + +| Data | Optional | Description | +| --------- | ---- | ----------- | +| `code_slot` | no | Which lock code slot to disable + ## Adding devices To add a new device: diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index 5cceeace7a9..f3bf97fc9b1 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -31,7 +31,7 @@ ha_platforms: This integration allows you to control a Z-Wave network via the [Z-Wave JS](https://zwave-js.github.io/node-zwave-js/#/) driver. This is our recommended Z-Wave integration for Home Assistant. -Please review the limitations [below](/integrations/zwave_js/#current-limitations) before you get started as a few devices still may not work or only work partially. +Please review the limitations [below](/integrations/zwave_js/#current-limitations) before you get started as a few devices still may not work or only work partially. ## Quick start (Home Assistant including Supervisor) @@ -57,7 +57,7 @@ Advanced users: Make sure that the server started successfully by inspecting the ### Service `zwave_js.set_config_parameter` -This service will update a configuration parameter. At this time, it is not possible to update multiple partial parameters in a single call, but we hope to add support for that in the future. +This service will update a configuration parameter. To update multiple partial parameters in a single call, use the `zwave_js.bulk_set_partial_config_parameters` service. | Service Data Attribute | Required | Description | |------------------------ |----------- |------------------------------------------------------------------------------------------------------------------------------------------- | @@ -72,6 +72,7 @@ This service will update a configuration parameter. At this time, it is not poss Let's use parameter 31 for [this device](https://devices.zwave-js.io/?jumpTo=0x000c:0x0203:0x0001:0.0) as an example to show examples of different ways that the `LED 1 Blink Status (bottom)` partial parameter can be set. Note that in places where we are using different values for the same key, the different values are interchangeable across the examples. We can, for instance, use `1` or `Blink` interchangeably for the `value` in all of the examples. Example 1: + ```yaml service: zwave_js.set_config_parameter target: @@ -83,6 +84,7 @@ data: ``` Example 2: + ```yaml service: zwave_js.set_config_parameter target: @@ -94,16 +96,77 @@ data: ``` Example 3: + ```yaml service: zwave_js.set_config_parameter target: - entity_id: switch.fan + entity_id: switch.fan data: entity_id: switch.fan parameter: "LED 1 Blink Status (bottom)" value: "Blink" ``` +### Service `zwave_js.bulk_set_partial_config_parameters` + +This service will bulk set multiple partial configuration parameters. Be warned that correctly using this service requires advanced knowledge of Z-Wave to use correctly. + +| Service Data Attribute | Required | Description | +|------------------------ |----------- |------------------------------------------------------------------------------------------------------------------------------------------- | +| `entity_id` | no | Entity (or list of entities) to set the configuration parameter on. At least one `entity_id` or `device_id` must be provided. | +| `device_id` | no | ID of device to set the configuration parameter on. At least one `entity_id` or `device_id` must be provided. | +| `parameter` | yes | The parameter number or the name of the property. The name of the property is case sensitive. | +| `value` | yes | Either the raw integer value that you want to set for the entire parameter, or a dictionary where the keys are the bitmasks (in integer or hex form) and the values are the value you want to set on each partial. Note that when using a dictionary, and bitmasks that are not provided will be set to their currently cached values. | + +#### Examples of bulk setting partial parameter values + +Let's use parameter 21 for [this device](https://devices.zwave-js.io/?jumpTo=0x031e:0x000a:0x0001:0.0) as an example to show how partial parameters can be bulk set. In this case, we want to set `0xff` to `127`, `0x7f00` to `10`, and `0x8000` to `1` (or the raw value of `4735`). + +
    + +When using the dictionary format to map the partial parameter to values, the cached values for the missing partial parameters will be used. So in examples 2 and 3, the service would use the cached value for partial parameters `0xff0000`, `0x3f000000`, and `0x40000000` because new values haven't been specified. If you send the raw integer value, it is assumed that you have calculated the full value, so in example 1, partial parameters `0xff0000`, `0x3f000000`, and `0x40000000` would all be set to `0`. + +
    + +Example 1: + +```yaml +service: zwave_js.bulk_set_partial_config_parameters +target: + entity_id: switch.fan +data: + parameter: 21 + value: 4735 +``` + +Example 2: + +```yaml +service: zwave_js.bulk_set_partial_config_parameters +target: + entity_id: switch.fan +data: + parameter: 21 + value: + 0xff: 127 + 0x7f00: 10 + 0x8000: 1 +``` + +Example 3: + +```yaml +service: zwave_js.bulk_set_partial_config_parameters +target: + entity_id: switch.fan +data: + parameter: 21 + value: + 255: 127 + 32512: 10 + 32768: 1 +``` + ### Service `zwave_js.refresh_value` This service will refresh the value(s) for an entity. This service will generate extra traffic on your Z-Wave network and should be used sparingly. Updates from devices on battery may take some time to be received. @@ -113,6 +176,21 @@ This service will refresh the value(s) for an entity. This service will generate | `entity_id` | yes | Entity or list of entities to refresh values for. | | `refresh_all_values` | no | Whether all values should be refreshed. If `false`, only the primary value will be refreshed. If `true`, all watched values will be refreshed. | +### Service `zwave_js.set_value` + +This service will set a value on a Z-Wave device. It is for advanced use cases where you need to modify the state of a node and can't do it using native Home Assistant entity functionality. Be warned that correctly using this service requires advanced knowledge of Z-Wave. The service provides minimal validation and blindly calls the Z-Wave JS API, so if you are having trouble using it, it is likely because you are providing an incorrect value somewhere. To set a config parameter, you should use the `zwave_js.set_config_parameter` or `zwave_js.bulk_set_partial_config_parameters` services instead of this one. + +| Service Data Attribute | Required | Description | +|------------------------ |---------- |-------------------------------------------------------------------------------------------------------------------------------------------------- | +| `entity_id` | no | Entity (or list of entities) to set the configuration parameter on. At least one `entity_id` or `device_id` must be provided. | +| `device_id` | no | ID of device to set the configuration parameter on. At least one `entity_id` or `device_id` must be provided. | +| `command_class` | yes | ID of Command Class that you want to set the value for. | +| `property` | yes | ID of Property that you want to set the value for. | +| `property_key` | no | ID of Property Key that you want to set the value for. | +| `endpoint` | no | ID of Endpoint that you want to set the value for. | +| `value` | yes | The new value that you want to set. | +| `wait_for_result` | no | Boolean that indicates whether or not to wait for a response from the node. If not included in the payload, the integration will decide whether to wait or not. If set to `true`, note that the service call can take a while if setting a value on an asleep battery device. | + ### Service `zwave_js.set_lock_usercode` This service will set the usercode of a lock to X at code slot Y. @@ -136,33 +214,58 @@ Valid code slots are between 1-254. ## Events -Events are fired when you press a button on a remote (aka Central Scene support) or when a stateless value is being signalled by a device. You can test what events come in using the event {% my developer_events title="developer tools in Home Assistant" %} and subscribe to `zwave_js_event`. Once you know what the event data looks like, you can use this to create automations. +There are two types of events that are fired, notification events and value notification events. You can test what events come in using the event {% my developer_events title="developer tools in Home Assistant" %} and subscribing to the `zwave_js_notification` or `zwave_js_value_notification` events respectively. Once you know what the event data looks like, you can use this to create automations. ### Node events (Notification) -These are events fired by the device using the notification command class. The `parameters` attribute in the example below is optional, and when it is included, the keys in the attribute will vary depending on the event. +Check the [Z-Wave JS notification event documentation](https://zwave-js.github.io/node-zwave-js/#/api/node?id=quotnotificationquot) for an explanation of the notification event data. These events fire with the `zwave_js_notification` event type. + +#### Notification Command Class + +These are notification events fired by devices using the Notification command class. The `parameters` attribute in the example below is optional, and when it is included, the keys in the attribute will vary depending on the event. ```json { - "type": "notification", "domain": "zwave_js", "node_id": 1, "home_id": "974823419", "device_id": "ad8098fe80980974", - "label": "Keypad lock operation", + "command_class": 113, + "command_class_name": "Notification", + "type": 6, + "event": 5, + "label": "Access Control", + "event_label": "Keypad lock operation", "parameters": {"userId": 1} } ``` +#### Entry Control Command Class + +These are notification events fired by devices using the Entry Control command class. + +```json +{ + "domain": "zwave_js", + "node_id": 1, + "home_id": "974823419", + "device_id": "ad8098fe80980974", + "command_class": 111, + "command_class_name": "Entry Control", + "event_type": 6, + "data_type": 5, + "event_data": "555" +} +``` + ## Scene events (Value Notification) -Value Notifications are used for stateless values, like `Central Scenes` and `Scene Activation`. +Value Notifications are used for stateless values, like `Central Scenes` and `Scene Activation`. These events fire with the `zwave_js_value_notification` event type. Value Notification example: ```json { - "type": "value_notification", "domain": "zwave_js", "node_id": 1, "home_id": "974823419", @@ -185,7 +288,6 @@ Value Notification example: As this integration is still in the early stages there are some important limitations to be aware of. - While support for the most common devices is working, some command classes are not yet (fully) implemented in Z-Wave JS. You can track the status [here](https://github.com/zwave-js/node-zwave-js/issues/6). -- Configuration of Z-Wave nodes within the Home Assistant UI is not yet implemented, but a [service](#service-zwave_js.set_config_parameter) is available with limited configuration capabilities. If the service doesn't meet your needs, you will need to use another tool, such as [zwavejs2mqtt](https://github.com/zwave-js/zwavejs2mqtt), to manage device configuration. - There currently is no migration path available from any of the other Z-Wave implementations in Home Assistant. Your Z-Wave network is however stored on your stick so migrating will only require you to redo your device and entity naming. You can keep track of the Roadmap for the Z-Wave JS integration [here](https://github.com/home-assistant-libs/zwave-js-server-python/issues/56). diff --git a/source/_posts/2021-04-07-release-20214.markdown b/source/_posts/2021-04-07-release-20214.markdown new file mode 100644 index 00000000000..79c0780ece6 --- /dev/null +++ b/source/_posts/2021-04-07-release-20214.markdown @@ -0,0 +1,2589 @@ +--- +layout: post +title: "2021.4: For our advanced users ❤️" +description: "Debug and trace your automations runs! Home Assistant Analytics! Trigger based template! and much more..." +date: 2021-04-07 00:00:00 +date_formatted: "April 7, 2021" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: +- Release-Notes +- Core +og_image: /images/blog/2021-04/social.png +feedback: true +--- + + + +Survived April fools day? I assure you, this April release is no joke! + +This release is dedicated to our more advanced user base, as it is packed with +some really advanced features and enhancements our more experienced users will +love. Ready to debug your automations? Yeah... + +Not that advanced of a user? I'm sure there is something in here for you to +look forward to as well. + +Oh, by the way, have you heard the news of ESPHome joining the Home Assistant +family? If not, you should definitely [read the blog post announcing it](/blog/2021/03/18/nabu-casa-has-acquired-esphome/)! + +Enjoy the release! + +../Frenck + +- [Database upgrades, please be patient](#database-upgrades-please-be-patient) +- [Automation debugging](#automation-debugging) +- [Home Assistant Analytics](#home-assistant-analytics) +- [Warnings for undefined variables in Templates](#warnings-for-undefined-variables-in-templates) +- [Filtering automations, scripts and scenes](#filtering-automations-scripts-and-scenes) +- [Z-Wave JS update](#z-wave-js-update) +- [Trigger-based template sensors](#trigger-based-template-sensors) +- [UI selectors for script fields](#ui-selectors-for-script-fields) +- [Other noteworthy changes](#other-noteworthy-changes) +- [New Integrations](#new-integrations) +- [New Platforms](#new-platforms) +- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui) +- [If you need help...](#if-you-need-help) +- [Breaking Changes](#breaking-changes) +- [Farewell to the following](#farewell-to-the-following) +- [All changes](#all-changes) + +## Database upgrades, please be patient + +This release contains database migrations, meaning that the format of how your +history is stored is changing. This migration is automatically performed after +upgrading and takes a bit of time. The time it takes depends on how much history +you have stored and how fast your system is. + +Please be patient when upgrading to this release. + +## Automation debugging + +Wait, why didn't that light turn on? Why isn't the thermostat adjusted? +Why is this automation not working? What is going on here?! This is a haunted +house!?! + +Sounds familiar? I'm sure we all had these moments, but are you ready for this? +We can now debug automations! + +

    +Screenshot showing the automation trace of a previously ran automation +Screenshot showing the automation trace of a previously ran automation. +

    + +The above screenshot shows a previous run of an automation. The automation +is displayed using an interactive graph, which highlights which path the +automation took. Each node in the graph can be clicked to view the details on +what happened with the automation during that specific step. It traces the +complete run of an automation run. + +If an automation didn't run as it should, this will allow you to debug and +understand why it ran the way it did. + +This extremely advanced and super useful feature is thanks to the hard work +of [@emontnemery] who build the backend for this. The beautiful graphing was +made by [@thomasloven], and all the frontend work by [@balloob] & [@bramkragten]. +Marvelous job guys! Thanks! + +Additionally, a special thanks to all the (beta) testers that helped testing +this feature and those who provided trace samples that helped to squash bugs! + +Got questions about this feature? Want to see it in action? Be sure to tune in +to the 2021.4 release party stream later today! + +
    + +
    + +[@thomasloven]: https://github.com/thomasloven + +## Home Assistant Analytics + +Now don't be scared by the title! + +Today we introduce: Home Assistant Analytics. Opt-in, privacy-aware, public +and open source. Just as it all should be for our project. + +[@ludeeus] did a fantastic job writing this new integration. You decide if you +turn it on or not; however, we guarantee its privacy-aware. Doubt it? Review it! +Everything is open source! + +Not open enough for you? We are publishing the result for everybody to see: + +

    +Screenshot of the Home Assistant Analytics website +Screenshot of the Home Assistant Analytics website. +

    + +Well, maybe you want to view the public result yourself: + + + +So why do we do this? Well, it helps the project and all contributors to +see things like: Most used integrations. This can significantly help with +improving project priorities. It also helps to convince manufacturers to work +with Home Assistant, add local control and privacy-focused features. + +"But the updater did this already, right?" Yes, well, the updater has actually +been broken. So while we had some data, it was barely usable (actually not +useable at all). Instead of fixing the updater, we now have a better solution +that better matches our project goals. The updater still exists; it now just +does one single thing: showing if an update is available. + +Want to help the project out? Please enable Home Assistant Analytics. We +would be very grateful! + +You can find the settings in the {% my general title="general configuration options" %}, +or click the My Home Assistant button below to go directly to it. (Only visible to owner users) + +{% my general badge %} + +

    +Screenshot of the Home Assistant Analytics options +Screenshot of the Home Assistant Analytics options, you control the amount of +data you share. +

    + +For more information on how this all works and what data is shared, +[check out our documentation](/integrations/analytics). + +Thanks for sharing already! ❤️ + +## Warnings for undefined variables in Templates + +This feature is really cool. While technically a small improvement, it is a +change that can impact you (as in "breaking"), but also, will greatly help you! + +So imaging this little template: `{% raw %}{{ my_variable }}{% endraw %}` + +Previously, if `my_variable` would not exist in the template or system as a +variable, Home Assistant would just ignore it and skip over it. + +While this can be convenient, it can become problematic when it was misspelled +or referring to a variable that doesn't exist at all. For example, if you +would have mistyped it: `{% raw %}{{ my_varaible }}{% endraw %}`, you would +never know something is wrong, unless you spotted it. + +As of today, Home Assistant will tell you this, using a warning in the logs! + +

    +Screenshot of undefined variable warning log +Screenshot of undefined variable warning log. +

    + +This helps to find templates that behave unexpectedly because the variable +you thought was there, isn't. It is quite possible you get a bunch +of warnings after upgrading to this release. Fixing those warnings, really helps +to improve your setup. + +So, what if a variable isn't always there, but I still want to use it? Well, +you can give it a default, for example: +`{% raw %}{{ my_variable | default }}{% endraw %}`. Or even an default value +(10 in this example): `{% raw %}{{ my_variable | default(10) }}{% endraw %}`. + +Please note that these are just warnings for now. We plan to replace the warning +with an error as of Home Assistant 2021.10 (in October). + +## Filtering automations, scripts and scenes + +Categorizing automations, is definitely one of the most requested +things in our history. This became clear again during last year's month of what +the heck and various issues/discussions/feature requests. + +Suggestions for labels, folders, and many more have been created. However, +we already have some great categorizing features in Home Assistant itself: + +Devices, Areas & Entities. + +

    +Screenshot of filtering automations by the living room area +Screenshot of filtering automations by living room area. +

    + +As of today, you can filter your automations, scripts and scenes by area, +device or entity. For automations and scripts, it goes one step further; it +magically finds those that affect the area, device or entity being filtered. + +So, you can now look at the automations affecting your living room area +(even if those automations itself are not in the living room area) and also +filter the automation list with just the ones that touch your thermostat. + +## Z-Wave JS update + +So before we talk about The nice new things in Z-Wave JS, there are breaking +changes in this release for the Z-Wave JS integration that could affect your +existing automations. Be sure to read the [breaking changes](#breaking-changes) +section for more info. + +Alright, now the fun stuff! You can now configure each Z-Wave device straight +from within Home Assistant. When you view a device in the Home Assistant +frontend, you can click on "CONFIGURE DEVICE" button that is shown on each +device page. This allows you to manage and adjust device (node) specific +configuration parameters for the selected device. + +

    +Screenshot of configuring a Z-Wave device from within Home Assistant +Screenshot of configuring a Z-Wave device from within Home Assistant. +

    + +Furthermore two new, advanced, services are introduced: + +- {% my developer_call_service service="zwave_js.set_value" %}, a service that + is capable of setting a value on a Z-Wave device directly, bypassing + Home Assistant. +- {% my developer_call_service service="zwave_js.bulk_set_partial_config_parameters" %}, + a service that will allow you to set configuration parameters in bulk. + +## Trigger-based template sensors + +This release adds initial support for a pretty advanced new, helpful feature. +Template sensors, that are updated based on triggers and the data that comes +with it. + +Whenever the trigger fires, the template sensor will re-render and it will +have access to the trigger data in the templates. This feature is a great way +to create data based on webhook data, or have sensors be updated based on a +time schedule. + +See, for example, these two template sensors that update based on a single +webhook trigger using data pushed into the webhook: + +{% raw %} + +```yaml +# Example configuration entry +template: + - trigger: + - platform: webhook + webhook_id: my-super-secret-webhook-id + sensor: + - name: "Webhook Temperature" + state: "{{ trigger.json.temperature }}" + - name: "Webhook Humidity" + state: "{{ trigger.json.humidity }}" +``` + +{% endraw %} + +You can test this trigger entity with the following CURL command: + +```bash +curl --header "Content-Type: application/json" \ + --request POST \ + --data '{"temperature": 5, "humidity": 34}' \ + http://homeassistant.local:8123/api/webhook/my-super-secret-webhook-id +``` + +It is not just webhooks! Any trigger that you can use in automations, can be +used to update these types of template sensors. + +For this release, it only works for sensors; other platforms are not supported yet. + +Please note: that these new template sensors are configured under the `template:` +key in the configuration and is using a new configuration format and keys. +For more information, [see the documentation](/integrations/template/#configuration-for-trigger-based-template-sensors). + +## UI selectors for script fields + +You can now use UI Selectors for you scripts field parameters. This +brings the same UI capabilities that Blueprint have to scripts. This allow for +creating advanced scripts that you can later easily reuse in your UI +(even in UI automation). + +

    +Screenshot of scripts using selects in its fields +Screenshot of scripts using selects in its fields. +

    + +For more details on these new field configuration options, see the +[scripts documentation](/integrations/script) + +## Other noteworthy changes + +There is much more juice in this release; here are some of the other +noteworthy changes this release: + +- The Supervisor is now also in the integrations dashboard, and provides entities + for all kinds of things! These entities are disabled by default, so head + over to the integration and see if there anything in there you could use. + Thanks [@raman325]! +- The develo Home Control ([@Shutgun]), Apple TV ([@bdraco]), August ([@bdraco]) + and MQTT ([@RadekHvizdos]) integrations can now suggest areas. +- You can now configure additional Google Cast devices by IP address via the + integrations options. This is helpful in case of mDNS issues. + Thanks [@emontnemery]! +- [@joshmcrty] added support for selecting the number formatting you like on + your profile! Awesome work! + +

    +Screenshot of selecting the number format you prefer in your profile +Screenshot of selecting the number format you prefer. +

    + +- [@marvin-w] added support for unique IDs to KNX entities. So, as a KNX user + you can now tweak your entities in the frontend and group them into areas! +- HomeKit now supports CO/CO2 device classes, thanks to [@iMicknl]! +- [@robertdelpeut] added monthly and yearly totals to the DMSR sensor, thanks! +- Hyperion users can now hide certain effects from the UI using integration + options. Thanks, [@dermotduffy]! +- Got that one message in your logs that you don't care about? [@jshufro] + added support for filtering log messages using regular expression! +- The Plex integration now provides library count sensors! These + are disabled by default by can be enabled if you like that. Thanks, [@jjlawren]. +- The Quickbar had an update from [@donkawechico]! So press those C & E keys + on you keyboard to see those beautiful new labels. + +[@joshmcrty]: https://github.com/joshmcrty +[@donkawechico]: https://github.com/donkawechico + +## New Integrations + +We welcome the following new integrations this release: + +- [Analytics][analytics docs], added by [@ludeeus] +- [Legrand Home+ Control][homepluscontrol docs], added by [@chemaaa] +- [Pentair ScreenLogic][screenlogic docs], added by [@dieselrabbit] + +## New Platforms + +The following integration got support for a new platform: + +- [Gogogate2 and iSmartGate][gogogate2 docs] provides battery sensors for wiresless door sensors, added by [@emontnemery] +- [Panasonic Viera][panasonic_viera docs] has now support for remotes, added by [@joogps] +- [Philips TV][philips_js docs] now has support for remotes, added by [@elupus] +- [Rheem EcoNet Products] now have support for climate entities, added by [@w1ll1am23]. +- [Supervisor][hassio docs] integration now has entities and services for things like versions and pending updates, added by [@raman325] +- [Tado][tado docs] now has weather support, added by [@Noltari] + +## Integrations now available to set up from the UI + +The following integrations are now available via the Home Assistant UI: + +- [Xiaomi Miio][xiaomi_miio docs], fans, sensors and lights, done by [@starkillerOG] +- [Hive][hive docs], done by [@KJonline] +- [Verisure][verisure docs], done by [@frenck] + +## If you need help... + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/core/issues). Make sure to fill in all fields of the issue template. + + + +## Breaking Changes + +Below is a listing of the breaking change for this release, per subject or +integration. Click on one of those to read more about the breaking change +for that specific item. + +{% details "Custom integrations: Version warning" %} + +Custom integrations now require a `version` key in their manifest file, this +also means that all custom integrations now require a manifest file. + +If you are using a legacy custom integration like `custom_components/awesome.py` +this now needs to move to `custom_components/awesome/__init__.py` so you can +add `custom_components/awesome/manifest.json` to it. + +For more information about integration, manifests have a look here: + + +**For now, this will create a warning on startup.** But this will be +blocked from loading if it's missing a version in the manifest starting with Home Assistant 2021.6. + +**If you see these warnings, please report the issue with the author +of that custom integration.** + +([@ludeeus] - [#45919]) + +{% enddetails %} + +{% details "Xiaomi Miio" %} + +The Xiaomi Miio Fan, Sensor & Light platforms can now be configured via the +UI. + +If you currently have them configured using YAML configuration, they will +be automatically imported into the UI on upgrade. After upgrading, you can +safely remove the YAML configuration for these devices. + +([@starkillerOG] - [#46866] [#46964] [#47161]) ([xiaomi_miio docs]) + +{% enddetails %} + +{% details "KNX" %} + +The `config_file` YAML option for KNX is deprecated, please remove it from +your YAML configuration if you have it configured. + +Float types are no longer valid for sensor / expose sensor type because the +trailing zeros caused troubles when splitting to two integers. + +([@farmio] - [#46874] [#48005]) ([knx docs]) + +{% enddetails %} + +{% details "LIFX Legacy" %} + +The LIFX Legacy platform is deprecated and will be removed in Home Assistant +Core 2021.6.0. Use the LIFX integration instead. + +([@frenck] - [#47235]) ([lifx_legacy docs]) + +{% enddetails %} + +{% details "Secrets" %} + +At this moment, we are unsure if this is a breaking change or not, so we +list it, just to be sure. + +We are now explicitly only supporting secrets inside your Home Assistant Core +and Lovelace configuration files (and anything included from there). Secrets +are no longer supported in other loaded YAML files. + +This change should not affect regular users of Home Assistant, however, we +have been made aware that some custom integrations may cause problems. If +you are a user of Dwains theme, the HomeKit Infused theme or lovelace_gen, +please make sure to update those or check with the upstream project. + +([@balloob] - [#47034]) + +{% enddetails %} + +{% details "HomeKit" %} + +The HomeKit `auto_start` configuration option has been deprecated. It dates +from the "old"-days to prevent entities not being available yet when HomeKit +started. However, nowadays, Home Assistant ensures all entities are available +on startup instantly. + +Therefore, this option is no longer needed. If you still have it in your +configuration (and have automations for it to start HomeKit); those can be +safely removed as well. + +([@frenck] - [#47470]) ([homekit docs]) + +{% enddetails %} + +{% details "Hive" %} + +The Hive integration can now be configured via the UI and configuring it via +YAML is now deprecated. If you have an existing YAML configuration, +it will be automatically imported on upgrade. After the upgrade, +the YAML configuration can be safely removed. + +([@KJonline] - [#47300]) ([hive docs]) + +{% enddetails %} + +{% details "Wake On LAN" %} + +Wake on LAN component now assumes a dummy state if a host is not provided. +Before, the state was only based on the `host` config parameter, which is +listed as optional. + +With this change the `host` config is still optional, but if it is not defined, +the state of the switch is simply the last action that was taken. If you're +relying on a Wake on LAN entity in an automation or script, please make sure +that your assumptions about state still hold. + +([@ntilley905] - [#47719]) ([wake_on_lan docs]) + +{% enddetails %} + +{% details "Verisure" %} + +The Verisure integration largely rewritten and is now configured via the Home +Assistant user interface. + +Your existing YAML configuration will be automatically imported when upgrading +Home Assistant Core. After the upgrade completes, you can safely remove the +existing Verisure YAML configuration. + +If after upgrade your Verisure alarm system doesn't appear, please check your +[integrations dashboard](https://my.home-assistant.io/redirect/integrations/). +In rare cases (with accounts that have access to multiple Verisure alarm +systems), it might be needed to select the specific Verisure alarm system to +migrate. + +This also means the YAML configuration for the Verisure integration is now +deprecated and will be removed in Home Assistant Core 2021.6.0. + +The services provided by the Verisure integration have changed to match the +standard way of how Home Assistant handles services. The following services +are affected by this change: + +- {% my developer_call_service service="verisure.capture_smartcam" %} +- {% my developer_call_service service="verisure.disable_autolock" %} +- {% my developer_call_service service="verisure.enable_autolock" %} + +Previously these services required a `device_serial` parameter, they have now +changed to accept a regular Home Assistant entity, device or area as a target. +For example: + +```yaml +- service: verisure.enable_autolock + target: + entity_id: lock.my_verisure_lock +``` + +If you used any of these services in your automations or scripts, please make +sure you update them after updating to Home Assistant Core 2021.4.0. + +([@frenck] - [#47880] [#47905]) ([verisure docs]) + +{% enddetails %} + +{% details "Prometheus" %} + +Before this change, all sensors in an unknown state when the Prometheus exporter +starts (i.e.: when Home Assistant starts) were being setup and metrics were +exported with a default value of `0`. Now, they will not be exported anymore +(unless they become available again) - they can be found by searching for +metrics where `entity_available` is `0` (will reveal both entities that are +in unknown or unavailable state). + +You should update any automations, scripts or 3rd party data consumers that +depend on the old prometheus export with default value `0`. + +([@inetAnt] - [#47840]) ([prometheus docs]) + +{% enddetails %} + +{% details "August" %} + +August has fully transitioned to configuration via UI. YAML configuration is +no longer supported. Existing YAML configuration has already been imported +automatically in the previous releases and can now safely be removed from your +configuration files. + +([@bdraco] - [#47615]) ([august docs]) + +{% enddetails %} + +{% details "Workday" %} + +The Workday integration used to operate on the timezone configured on the +system, instead of the timezone configured in Home Assistant. This can become +problematic, for example, if your system runs on UTC, but you are 11 hours +ahead of that. + +This behavior has been correct and the workday sensors now rely on the timezone +configured in Home Assistant. You might need to adjust to this, if you have +automations, scripts or templates that previously manually corrected this. + +([@schiermi] - [#47927]) ([workday docs]) + +{% enddetails %} + +{% details "Ubiquiti UniFi Video" %} + +The datetime returned in the `last_recording_start_time` state attribute of the +uvc camera entity was changed from local time to be UTC time. All times in state +attributes must be UTC time. You should update any automations or scripts that +depends on this state attribute. + +([@sycx2] - [#41438]) ([uvc docs]) + +{% enddetails %} + +{% details "Z-Wave JS" %} + +Zwave JS climate devices that report their temperature in Fahrenheit will now +report in tenth precision instead of whole precision, when the device supports +it. + +Previously, when those devices reported a temperature of, for example, 67.6F it +would be rounded and reported in whole precision as 68F. Those devices will now +report the temperature with tenth precision, thus 67.6F. + +This means that if you currently have automation that depends on the temperature +reported by these devices you may have to adjust their functionality to work +properly with how the temperature is now being reported. + +([@chilicheech] - [#48133]) ([zwave_js docs]) + +The event names for Z-Wave JS value notification (central scene) events will +now be called `zwave_js_value_notification` and notification (e.g., +locking or unlocking a lock) events will now be called `zwave_js_notification`. + +For notification events, the properties that Z-Wave JS provides have changed, +and we have changed the HA event property names to reflect that. The parameter +that used to be called `label` (The human-readable label for the +notification **event**) is now called `event_label` as there is now a +new `label` property which is the human-readable label for the notification +**type**. + +In addition, we now support notification events for two command classes, Entry +Control and Notification, so the command class is reflected in the event data. +You can learn more about the different command class notifications and what each +parameter means for the different notifications here: + + + +([@raman325] - [#48094]) ([zwave_js docs]) + +{% enddetails %} + +{% details "Templates" %} + +Previously, during template rendering, undefined variables are replaced with an +empty string. As an example the template `{{undefined_variable}}` will render as +the empty string. This is error prone as it means misspelled or non existent +variables are silently accepted by the template engine. + +Starting this release, there will be a warning message in the log when a +variable is undefined, but it is still rendered as the empty string. So, besides +the warning, right now, nothing changes. + +Starting with Home Assistant 2021.10, undefined variables will be treated as an +error and template rendering will fail. + +To allow rendering of templates where it is expected that a variably may not +be defined without logging a warning or failing to render, use the `default` +filter: `{{undefined_variable | default}}`. + +([@emontnemery] - [#48140]) + +{% enddetails %} + +{% details "ZeroConf" %} + +Zeroconf will now only listen on the default interface by default. + +If you need to broadcast mDNS responses to all interfaces or retain the +previous behavior, set [default_interface](/integrations/zeroconf/#default_interface) +to `false`. + +With multiple interfaces, mDNS traffic processing happened numerous times since +the duplicate packets appeared on each interface. This behavior was not +desirable for most cases which necessitated a change in the default. + +The Home Assistant Operating System has multiple interfaces and was affected. + +([@bdraco] - [#48302]) ([zeroconf docs]) + +{% enddetails %} + +{% details "Google Cast" %} + +The YAML configuration for the Google Cast integration has been deprecated and +will be fully removed in Home Assistant Core 2021.6.0. + +If you have existing YAML configuration for the Google Cast integration, please +remove it from your configuration. + +([@emontnemery] - [#47269]) ([cast docs]) + +{% enddetails %} + +{% details "Neato" %} + +Vacuum attributes `clean start`, `clean stop` and camera +attribute `generated_at` are now in a timestamp format. + +New format is "2021-03-20T10:35:47Z". This allow automation to use their +value based on `as_timestamp()`. + +If you relies on these attributes in your automation or script, you might need +to adjust them to match this change. + +([@chemelli74] - [#48150]) ([neato docs]) + +{% enddetails %} + +{% details "MQTT" %} + +The [fan entity model](https://developers.home-assistant.io/docs/core/entity/fan/) +has been changed. This impacts the way the MQTT Fan supports speeds and the +following configuration options are deprecated and will be removed in +Home Assistant Core 2021.7.0: + +- `speed_command_topic` +- `speed_state_topic` +- `state_value_template` +- `speed_list` + +Additionally,`preset_modes` and `percentage` are added to replace the legacy +model supporting only three speeds `low`, `medium` and `high`. +Therefore, `command templates` for `state`, `oscillation`, `preset_mode` and +`percentage` are introduced. + +([@jbouwh] - [#47944] [#48413]) ([mqtt docs]) + +{% enddetails %} + +{% details "Core / Custom integrations" %} + +Block detectable I/O in the event loop + +We added a warning when this happens last April and gave developers +a year to fix the instability. We now prevent the instability by +raising RuntimeError when code attempts to do known I/O in the +event loop instead of the executor. + +We now provide a suggestion on how to fix the code that is causing +the issue. + +([@bdraco] - [#48387]) + +{% enddetails %} + +{% details "ModBus" %} + +You can now use the new style configuration when configuring the modbus +integration. The existing configuration style is kept, allowing you to change +gradually. + +Remark the existing configuration style will be removed in a couple of releases. + +Example of an existing configuration: + +```yaml +modbus: + - name: "hub1" + type: tcp + host: IP_ADDRESS + port: 502 + +sensor: + platform: modbus + registers: + - name: "Sensor1" + hub: "hub1" + unit_of_measurement: "°C" + slave: 1 + register: 100 +``` + +Same configuration in new style: + +```yaml +modbus: + - name: "hub1" + type: tcp + host: IP_ADDRESS + port: 502 + sensors: + - name: "Sensor1" + slave: 1 + address: 100 +``` + +([@janiversen] - [#46591]) ([modbus docs]) + +{% enddetails %} + +{% details "Updater" %} + +The `reporting` and `include_used_components` configuration options have now +been deprecated, the `updater` integration will no longer report any analytics. + +The analytics has moved to it's own integration. +See the [`analytics` integration](/integrations/analytics) for more details on +how to configure it. + +([@ludeeus] - [#48518]) ([updater docs]) + +{% enddetails %} + +{% details "SolarEdge" %} + +The SolarEdge configuration via YAML has been deprecated and will be removed in +a future release of Home Assistant. The integration is using a configuration via +the UI for two years now. + +Existing YAML configurations are automatically imported into the UI, and can be +safely removed from your YAML configuration. + +([@frenck] - [#48533]) ([solaredge docs]) + +{% enddetails %} + +{% details "SolarEdge" %} + +MQTT JSON light now supports `color_mode` which should be used together with +`supported_color_modes` to signal the light's features. + +Feature flags `color_temp`, `hs`, `rgb`, `white_value`, `xy` are all deprecated +and support will be removed in 2021.10. + +([@emontnemery] - [#47993]) ([mqtt docs]) + +{% enddetails %} + +{% details "Ping" %} + +When restarting Home Assistant, the previous ping sensor state is now +restored and then updated in the background to allow startup to proceed +without the risk of timing out. + +When the user has many ping sensors, the ping integration could +timeout starting up because each ping has to happen in the +executor. + +([@bdraco] - [#43869]) ([ping docs]) + +{% enddetails %} + +{% details "Plex Media Server" %} + +Devices representing Plex Web `media_player` devices are now removed. Any +automations, scenes, or scripts based on the device will need to be changed +to use the `media_player` entity. + +([@jjlawren] - [#48369]) ([plex docs]) + +{% enddetails %} + +## Farewell to the following + +The following integrations are no longer available as of this release: + +- **Griddy** has been removed, Ercot shut down Griddy after the massive power + mess in Texas in mid February. ([@bdraco] - [#47218]) + +## All changes + +{% details "Click to see all changes!" %} + +- Bump version to 2021.4.0dev0 ([@frenck] - [#47017]) +- Convert discovery helper to use dispatcher ([@balloob] - [#47008]) ([discovery docs]) ([octoprint docs]) +- Upgrade TwitterAPI to 2.6.8 ([@fabaff] - [#47019]) ([twitter docs]) +- Add Xiaomi Miio fan config flow ([@starkillerOG] - [#46866]) ([xiaomi_miio docs]) (breaking-change) +- hm climate: Return PRESET_NONE instead of None ([@FHeilmann] - [#47003]) ([homematic docs]) +- Normally there should only be one battery sensor per device from deCONZ. ([@Kane610] - [#46761]) ([deconz docs]) +- Upgrade icmplib to 2.0.2 ([@fabaff] - [#47039]) ([ping docs]) +- Clean up discovery integration ([@balloob] - [#47022]) ([daikin docs]) ([discovery docs]) ([freebox docs]) +- Upgrade pyowm to 3.2.0 ([@fabaff] - [#47042]) ([openweathermap docs]) +- Upgrade sendgrid to 6.6.0 ([@fabaff] - [#47041]) ([sendgrid docs]) +- Add remote control platform to Panasonic Viera ([@joogps] - [#42450]) ([panasonic_viera docs]) (new-platform) +- Bump gios library to version 0.2.0 ([@bieniu] - [#47050]) ([gios docs]) +- Replace wrong domain returned from xbox api 2.0 ([@Melantrix] - [#47021]) ([xbox docs]) +- Add zeroconf discovery to Freebox ([@Quentame] - [#47045]) ([discovery docs]) ([freebox docs]) +- Clean up Netatmo webhook handler ([@cgtobi] - [#47037]) ([netatmo docs]) +- Fix bond typing in config flow ([@bdraco] - [#47055]) ([bond docs]) +- Fix Z-Wave JS API docstrings ([@cgarwood] - [#47061]) ([zwave_js docs]) +- Upgrade youtube_dl to version 2021.02.22 ([@chpego] - [#47078]) ([media_extractor docs]) +- Bump pychromecast to 9.0.0 ([@emontnemery] - [#47086]) ([cast docs]) +- Remove flaky climacell test ([@raman325] - [#47080]) ([climacell docs]) +- Add suggested_area support to devolo Home Control ([@Shutgun] - [#47063]) ([devolo_home_control docs]) +- Guard zwave_js missing nodes in websocket api ([@cgarwood] - [#47096]) ([zwave_js docs]) +- Improve handling for recording start of nest cam stream ([@allenporter] - [#47144]) ([stream docs]) +- Change device class of window covers to shade ([@Kane610] - [#47129]) ([deconz docs]) +- Bump airly library to version 1.1.0 ([@bieniu] - [#47163]) ([airly docs]) +- Clean up mqtt_room ([@tkdrob] - [#46882]) ([mqtt_room docs]) +- Tweak Tasmota fan typing ([@emontnemery] - [#47175]) ([tasmota docs]) +- Apply recommendations to synology_dsm ([@mib1185] - [#47178]) ([synology_dsm docs]) +- Fix flaky hls keepalive test ([@allenporter] - [#47186]) ([stream docs]) +- Remove turn_on and turn_off from SmartTub pump switches ([@mdz] - [#47184]) ([smarttub docs]) +- Move SmartTub climate constants to module level ([@mdz] - [#47190]) ([smarttub docs]) +- Explain why should_pool is True initially for wemo ([@esev] - [#47191]) ([wemo docs]) +- Cleanup SmartTub filtration cycles ([@mdz] - [#47192]) ([smarttub docs]) +- Handle stream failures in recorder ([@allenporter] - [#47151]) ([stream docs]) +- Enforce typing in bond ([@bdraco] - [#47187]) ([bond docs]) +- Update pylint ([@cdce8p] - [#47205]) +- Add hassio addon_update service and hassio config entry with addon and OS devices and entities ([@raman325] - [#46342]) ([hassio docs]) (new-platform) +- Improve CI workflow ([@cdce8p] - [#46696]) +- Revert const replacement in fritzbox_callmonitor ([@cgtobi] - [#47211]) ([fritzbox_callmonitor docs]) +- Remove griddy integration ([@bdraco] - [#47218]) ([griddy docs]) +- KNX services send and event_register accept multiple group addresses ([@farmio] - [#46908]) ([knx docs]) +- Deprecate knx config_file ([@farmio] - [#46874]) ([knx docs]) (breaking-change) +- Restore pylint concurrency ([@frenck] - [#47221]) +- Parameterize SmartTub tests ([@mdz] - [#47189]) ([smarttub docs]) +- Upgrade coverage to 5.5 ([@frenck] - [#47227]) +- Upgrade spotipy to 2.17.1 ([@frenck] - [#47228]) ([spotify docs]) +- Bump mcstatus to 5.1.1 ([@jdeath] - [#47169]) ([minecraft_server docs]) +- Overhaul command_line tests ([@dermotduffy] - [#46682]) ([command_line docs]) +- Minor Hyperion mypy cleanups ([@dermotduffy] - [#45765]) ([hyperion docs]) +- Address late hassio review ([@raman325] - [#47229]) ([hassio docs]) +- KNX address constant ([@farmio] - [#47196]) ([knx docs]) +- Add support for a list of known hosts to Google Cast ([@emontnemery] - [#47232]) ([cast docs]) +- Add remote control support to philips_js ([@elupus] - [#47249]) ([philips_js docs]) (new-platform) +- Deprecate LIFX Legacy integration ([@frenck] - [#47235]) ([lifx_legacy docs]) (breaking-change) +- Fix typo in plaato strings ([@milanmeu] - [#47245]) ([plaato docs]) +- Remove rounding from The Things Network ([@stephan192] - [#47157]) ([thethingsnetwork docs]) +- Add battery sensor for gogogate2 wireless door sensor ([@emontnemery] - [#47145]) ([gogogate2 docs]) (new-platform) +- Fix typing on fan percentage ([@bdraco] - [#47259]) +- Lint suppression cleanups ([@scop] - [#47248]) +- Clean up constants ([@tkdrob] - [#46948]) +- Add init test to Freebox ([@Quentame] - [#46998]) ([freebox docs]) +- Add services for izone airflow min/max ([@Nick-Adams-AU] - [#45727]) ([izone docs]) +- Fix izone flake8 error ([@frenck] - [#47276]) ([izone docs]) +- Add force_update to tasmota sensors ([@rlehfeld] - [#47052]) ([tasmota docs]) +- Upgrade isort to 5.7.0 ([@scop] - [#47279]) +- Add disk sensor to Freebox ([@Quentame] - [#46689]) ([freebox docs]) +- Uniformize platform setup ([@Quentame] - [#47101]) +- Clean up secret loading ([@balloob] - [#47034]) (breaking-change) +- KNX remove custom deprecation warnings ([@farmio] - [#47238]) ([knx docs]) +- Add activity properties to remote entity model ([@bdraco] - [#47237]) ([harmony docs]) ([remote docs]) +- bump python-smarttub to 0.0.19 ([@mdz] - [#47294]) ([smarttub docs]) +- Remove name from keenetic-ndms2 strings ([@milanmeu] - [#47113]) ([keenetic_ndms2 docs]) +- Correct gogogate2 battery sensor attributes ([@emontnemery] - [#47302]) ([gogogate2 docs]) +- Update izone services.yaml and remove entity_id from schema. ([@Nick-Adams-AU] - [#47305]) ([izone docs]) +- Fix Supervisor platform coordinator data lookup ([@MartinHjelmare] - [#47308]) ([hassio docs]) +- Philips JS correct post review comments ([@elupus] - [#47247]) ([philips_js docs]) +- Fix grammar in pi_hole logs ([@tkdrob] - [#47324]) ([pi_hole docs]) +- Add LZW36 device schema to zwave_js discovery ([@firstof9] - [#47314]) ([zwave_js docs]) +- Initial automation tracing ([@emontnemery] - [#46755]) ([automation docs]) ([config docs]) ([script docs]) +- Fix secrets in files included via include_dir_list ([@frenck] - [#47350]) +- Update Solax library to 0.2.6 ([@ppetru] - [#47384]) ([solax docs]) +- Update browse_media.py ([@cgtobi] - [#47414]) ([xbox docs]) +- Fix typo in docs link for forked_daapd ([@Cooper-Dale] - [#47413]) ([forked_daapd docs]) +- Spellcheck on Synology component ([@systemcrash] - [#47451]) ([synology_dsm docs]) +- Add allenporter to stream codeowners ([@uvjustin] - [#47431]) ([stream docs]) +- Limit log spam by ESPHome ([@amelchio] - [#47456]) ([esphome docs]) +- Clean up constants ([@tkdrob] - [#47323]) +- Prevent Zerproc leaving open unnecessary connections ([@emlove] - [#47401]) ([zerproc docs]) +- Deprecate HomeKit auto start ([@frenck] - [#47470]) ([homekit docs]) (breaking-change) +- Convert kulersky to use new async backend ([@emlove] - [#47403]) ([kulersky docs]) +- Increase test coverage of UniFi integration ([@Kane610] - [#46347]) ([unifi docs]) +- Typing tweak to the Elgato integration ([@frenck] - [#47471]) ([elgato docs]) +- Improve restoring UniFi POE entity state ([@Kane610] - [#47148]) ([unifi docs]) +- Update ZHA dependencies ([@Adminiuga] - [#47479]) ([zha docs]) +- Move AsusWrt sensors update logic in router module ([@ollo69] - [#46606]) ([asuswrt docs]) +- Complete typing on TwenteMilieu integration ([@frenck] - [#47480]) ([twentemilieu docs]) +- Complete typing on Verisure integration ([@frenck] - [#47482]) ([verisure docs]) +- Add OPENING & CLOSING state to MySensors cover ([@FidgetyRat] - [#47285]) ([mysensors docs]) +- Upgrade upcloud-api to 1.0.1 ([@scop] - [#47501]) ([upcloud docs]) +- Merge action and condition traces ([@emontnemery] - [#47373]) ([automation docs]) +- Disable audio stream when ADTS AAC detected ([@uvjustin] - [#47441]) ([stream docs]) +- Complete typing on AdGuard Home integration ([@frenck] - [#47477]) ([adguard docs]) +- Add precipitation probability forecast to owm ([@N1c093] - [#47284]) ([openweathermap docs]) +- Add device classes for CO and CO2 measurements ([@Adminiuga] - [#47487]) ([sensor docs]) +- Change default homekit ports to 21063 and 21064 ([@bdraco] - [#47491]) ([homekit docs]) +- Increase ESPHome log level on first connection failure ([@amelchio] - [#47547]) ([esphome docs]) +- Improve common structure in UniFi device tracker tests ([@Kane610] - [#47526]) ([unifi docs]) +- Correctly close lacrosse on homeassistant stop ([@jplitza] - [#47555]) ([lacrosse docs]) +- Clean up Lutron Caseta ([@tkdrob] - [#47534]) ([lutron_caseta docs]) +- Clean up kmtronic ([@tkdrob] - [#47537]) ([kmtronic docs]) +- Round miles in myChevy sensors ([@austinmroczek] - [#46879]) ([mychevy docs]) +- Remove @newAM from hdmi_cec codeowners ([@newAM] - [#47542]) ([hdmi_cec docs]) +- Bump actions/stale from v3.0.17 to v3.0.18 (@dependabot - [#47612]) +- Update rokuecp to 0.8.1 ([@ctalkington] - [#47589]) ([roku docs]) +- Upgrade elgato to 2.0.1 ([@frenck] - [#47616]) ([elgato docs]) +- Upgrade pre-commit to 2.11.0 ([@frenck] - [#47618]) +- Add support for Flo "pucks" ([@adamjernst] - [#47074]) ([flo docs]) +- Allow 10mV precision for ZHA battery sensor entities ([@Adminiuga] - [#47520]) ([zha docs]) +- Add feels like temperature sensor to OpenWeatherMap ([@freekode] - [#47559]) ([openweathermap docs]) +- Code cleanup for SmartTub integration ([@mdz] - [#47584]) ([smarttub docs]) +- Upgrade pillow to 8.1.2 ([@frenck] - [#47619]) +- Add (some) of ZCL concentration clusters to ZHA component ([@B-Hartley] - [#47590]) ([zha docs]) +- Store automation traces indexed by run_id ([@emontnemery] - [#47509]) ([automation docs]) +- Add title key to allow mobile app title translation to other languages ([@Antoni-Czaplicki] - [#46593]) ([mobile_app docs]) +- Add suggested_area support to Apple TV ([@bdraco] - [#47015]) ([apple_tv docs]) +- Remove self as code owner for mylink ([@bdraco] - [#46242]) ([somfy_mylink docs]) +- Config flow to allow marking itself as confirm only ([@balloob] - [#47607]) +- Fix I-frame interval in stream test video ([@uvjustin] - [#47638]) +- Add WS command to get a summary of automation traces ([@emontnemery] - [#47557]) ([automation docs]) ([config docs]) +- Add type hints to LightEntity ([@thecode] - [#47024]) ([light docs]) +- Ensure bond light follows proper typing ([@spacegaier] - [#47641]) ([bond docs]) +- Include changed variables in automation trace ([@emontnemery] - [#47549]) +- Update attrs to 20.3.0 ([@scarface-4711] - [#47642]) +- Add option to reverse switch behaviour in KMTronic ([@dgomes] - [#47532]) ([kmtronic docs]) +- Upgrade sentry-sdk to 1.0.0 ([@frenck] - [#47626]) ([sentry docs]) +- Upgrade aiohttp to 3.7.4.post0 ([@frenck] - [#47627]) +- Fix maxcube thermostat transition from off to heat mode ([@unaiur] - [#47643]) ([maxcube docs]) +- Catch dhcp setup permission errors sooner ([@bdraco] - [#47639]) ([dhcp docs]) +- Harmony: set confirm only ([@bdraco] - [#47617]) ([harmony docs]) +- Add error message to options flow if connection fails for nut integration ([@mib1185] - [#46972]) ([nut docs]) +- Shelly: set confirm only ([@balloob] - [#47608]) ([shelly docs]) +- Revert Shelly temperature sensor name change ([@thecode] - [#47664]) ([shelly docs]) +- Replace Entity.device_state_attributes with Entity.extra_state_attributes ([@emontnemery] - [#47304]) +- Update tests a-b to use async_get() instead of async_get_registry() ([@emontnemery] - [#47651]) +- Update tests t-z to use async_get() instead of async_get_registry() ([@emontnemery] - [#47655]) +- Update tests p-s to use async_get() instead of async_get_registry() ([@emontnemery] - [#47654]) +- Update tests c-h to use registry async_get ([@emontnemery] - [#47652]) +- Update tests i-o to use async_get() instead of async_get_registry() ([@emontnemery] - [#47653]) +- Add TYPE_CHECKING to coverage excludes ([@cdce8p] - [#47668]) +- Rename AutomationTrace.runid to AutomationTrace.run_id ([@emontnemery] - [#47669]) ([automation docs]) +- Improve logging elgato ([@balloob] - [#47681]) ([elgato docs]) +- Handle zeroconf updated events ([@balloob] - [#47683]) ([zeroconf docs]) +- Fix recorder with MSSQL ([@bdraco] - [#46678]) ([recorder docs]) +- Restore switch.turn_on and switch.turn_off functionality for SmartTub pumps ([@mdz] - [#47586]) ([smarttub docs]) +- Add confirm only for Elgato ([@frenck] - [#47684]) ([elgato docs]) +- Use the local timezone when parsing Todoist due dates ([@c99koder] - [#45994]) ([todoist docs]) +- Add support for breakpoints in scripts ([@emontnemery] - [#47632]) ([automation docs]) ([config docs]) +- Fix automations with traces. ([@balloob] - [#47705]) ([automation docs]) +- Bump codecov/codecov-action from v1.2.1 to v1.2.2 (@dependabot - [#47707]) +- Fix aemet temperatures with a value of 0 ([@Noltari] - [#47680]) ([aemet docs]) +- Add device class CO2 to various integrations ([@iMicknl] - [#47676]) ([ambient_station docs]) ([awair docs]) ([fibaro docs]) ([netatmo docs]) ([tasmota docs]) +- bump client library ([@zxdavb] - [#47722]) ([evohome docs]) +- Bump incomfort client to 0.4.4 ([@zxdavb] - [#47718]) ([incomfort docs]) +- Use LONGTEXT column instead of TEXT for MySQL/MariaDB and migrate existing databases ([@CurrentThread] - [#47026]) ([recorder docs]) +- Refactor Harmony tests to better follow Home Assistant conventions ([@mkeesey] - [#47141]) ([harmony docs]) +- Allow SSDP discovery modern Hue hubs ([@balloob] - [#47725]) ([hue docs]) +- Improve HomeKit discovered Hue config flow ([@frenck] - [#47729]) ([hue docs]) +- Add Tado weather support ([@Noltari] - [#44807]) ([tado docs]) (new-platform) +- Update xknx to 0.17.2 ([@farmio] - [#47732]) ([knx docs]) +- Add missing clear-night weather condition ([@hung2kgithub] - [#47666]) ([template docs]) +- Tweak automation tracing ([@emontnemery] - [#47721]) ([automation docs]) ([config docs]) +- Verify get_zones webhook works ([@balloob] - [#47741]) ([mobile_app docs]) +- Ensure startup can proceed when there is package metadata cruft ([@bdraco] - [#47706]) +- Fixed string typos in Lutron and Roomba ([@spacegaier] - [#47745]) ([lutron_caseta docs]) ([roomba docs]) +- Fix light brightness_step on multiple entities ([@emontnemery] - [#47746]) ([light docs]) +- Add Xiaomi Miio sensor config flow ([@starkillerOG] - [#46964]) ([xiaomi_miio docs]) (breaking-change) +- Hoist mqtt name property and add icon support to MqttEntity ([@kristianheljas] - [#47165]) ([mqtt docs]) +- Add Xiaomi Miio light config flow ([@starkillerOG] - [#47161]) ([xiaomi_miio docs]) (breaking-change) +- Update integrations a-e to override extra_state_attributes() ([@emontnemery] - [#47756]) +- Update integrations f-i to override extra_state_attributes() ([@emontnemery] - [#47757]) +- Recorder improvements ([@cdce8p] - [#47739]) ([recorder docs]) +- Add DataUpdateCoordinator to Verisure ([@frenck] - [#47574]) ([verisure docs]) +- Update integrations j-o to override extra_state_attributes() ([@emontnemery] - [#47758]) +- Update integrations t-z to override extra_state_attributes() ([@emontnemery] - [#47760]) +- Update integrations p-s to override extra_state_attributes() ([@emontnemery] - [#47759]) +- Consistent spelling of "PIN" ([@spacegaier] - [#47771]) ([blink docs]) ([ecobee docs]) ([hangouts docs]) ([nest docs]) ([zwave docs]) +- Upgrade numato-gpio to 0.10.0 ([@clssn] - [#47539]) ([numato docs]) +- Upgrade adguardhome to v0.5.0 ([@frenck] - [#47774]) ([adguard docs]) +- Add apply_filter attribute to recorder.purge service ([@cdce8p] - [#45826]) ([recorder docs]) +- Bump broadlink from 0.16.0 to 0.17.0 ([@felipediel] - [#47779]) ([broadlink docs]) +- Bump pyIntesisHome to v1.7.6 ([@jnimmo] - [#47500]) ([intesishome docs]) +- Log the full exception when the recorder fails to setup ([@bdraco] - [#47770]) ([recorder docs]) +- Cleanup homekit and remove aid storage from hass.data ([@bdraco] - [#47488]) ([homekit docs]) +- Improve Atag integration and bump version to 0.3.5.3 ([@MatsNl] - [#47778]) ([atag docs]) +- Store the correct context in the trace ([@balloob] - [#47785]) ([automation docs]) +- Do not use AsyncTrackStates ([@balloob] - [#47255]) ([api docs]) +- Bump devolo_home_control_api to 0.17.0 ([@Shutgun] - [#47790]) ([devolo_home_control docs]) +- Remove unused COVER_SCHEMA from gogogate2 cover ([@emontnemery] - [#47170]) ([gogogate2 docs]) +- Bump pyatv to 0.7.7 ([@postlund] - [#47798]) ([apple_tv docs]) +- Allow filtering the logbook by context_id ([@balloob] - [#47783]) ([logbook docs]) +- Add ambient sensors to nut integration ([@mib1185] - [#47411]) ([nut docs]) +- Add temperature sensor for gogogate2 wireless door sensor ([@emontnemery] - [#47754]) ([gogogate2 docs]) +- Return property_key in zwave_js get_config_parameters websocket ([@cgarwood] - [#47808]) ([zwave_js docs]) +- Add HomeKit support for new CO / CO2 device class ([@iMicknl] - [#47737]) ([demo docs]) ([homekit docs]) +- UniFi has changed to not report uptime in epoch form ([@Kane610] - [#47492]) ([unifi docs]) +- Improve deCONZ init tests ([@Kane610] - [#47825]) ([deconz docs]) +- Introduction of deCONZ websocket fixture ([@Kane610] - [#47812]) ([deconz docs]) +- Update cloud integration to 0.42.0 ([@klaasnicolaas] - [#47818]) ([cloud docs]) +- Additional sensors for OpenWeatherMap ([@hanskroner] - [#47806]) ([openweathermap docs]) +- Fix unclean shutdown of recorder test ([@emontnemery] - [#47791]) ([recorder docs]) +- fix exception on device removal ([@dmulcahey] - [#47803]) ([zha docs]) +- Bump frontend to 20210313.0 ([@balloob] - [#47844]) ([frontend docs]) +- Fix missing integer cast in squeezebox config flow ([@rajlaud] - [#47846]) ([squeezebox docs]) +- Add timeouts in stream tests to prevent possible hangs ([@allenporter] - [#47545]) ([stream docs]) +- Fix zwave_js preset supported feature ([@raman325] - [#47819]) ([zwave_js docs]) +- Fix spelling of automatically in roomba/lutron_caseta components ([@tdorsey] - [#47856]) ([lutron_caseta docs]) ([roomba docs]) +- Update aiolyric to v1.0.6 ([@timmo001] - [#47871]) ([lyric docs]) +- Add device_info to Apple TV entities ([@postlund] - [#47837]) ([apple_tv docs]) +- Bump up ZHA dependency ([@Adminiuga] - [#47873]) ([zha docs]) +- Fix zwave_js preset mode lookup ([@MartinHjelmare] - [#47851]) ([zwave_js docs]) +- Update service config for lyric ([@timmo001] - [#47857]) ([lyric docs]) +- Add HVAC action to Lyric climate platform ([@timmo001] - [#47876]) ([lyric docs]) +- Verisure: Remove JSONPath, unique IDs, small cleanups ([@frenck] - [#47870]) ([verisure docs]) +- Add Xiaomi Miio subdevice lightbulb support ([@starkillerOG] - [#46660]) ([xiaomi_miio docs]) +- Upgrade Tibber library to 0.16.2 ([@Danielhiversen] - [#47892]) ([tibber docs]) +- Reduce number of iqair request ([@jugla] - [#47890]) ([airvisual docs]) +- Update pyhomematic to 0.1.72 ([@danielperna84] - [#47906]) ([homematic docs]) +- Improve error reporting in recorder purge test ([@bdraco] - [#47929]) ([recorder docs]) +- Fix homekit checking for port cleanup too many times ([@bdraco] - [#47836]) ([homekit docs]) +- Add suggested area support to august ([@bdraco] - [#47930]) ([august docs]) +- Bump accuweather library ([@bieniu] - [#47915]) ([accuweather docs]) +- Bump gios library ([@bieniu] - [#47917]) ([gios docs]) +- Upgrade to maxcube-api-0.4.1 ([@unaiur] - [#47910]) ([maxcube docs]) +- Invalidate HLS Stream on nest url refresh failure ([@allenporter] - [#47869]) ([nest docs]) +- Address review comments and minor fix for Mazda integration ([@bdr99] - [#47702]) ([mazda docs]) +- Update openwrt-luci-rpc from 1.1.6 to 1.1.8 ([@pdecat] - [#47848]) ([luci docs]) +- Improve bad JSON data reporting ([@balloob] - [#47932]) +- MQTT Light: Use flash attribute in async_turn_off ([@drzony] - [#47919]) ([mqtt docs]) +- Support all Xiaomi Miio gateway switches ([@starkillerOG] - [#46657]) ([xiaomi_miio docs]) +- Make Xiaomi Miio unavailable device independent ([@starkillerOG] - [#47795]) ([xiaomi_miio docs]) +- Add Hive config flow ([@KJonline] - [#47300]) ([hive docs]) (breaking-change) +- Add tests for Netatmo climate ([@cgtobi] - [#46392]) ([netatmo docs]) +- Upgrade qnapstats library to 0.3.1 ([@colinodell] - [#47907]) ([qnap docs]) +- Clean up Lyric ([@timmo001] - [#47899]) ([lyric docs]) +- Migrate LCN configuration to ConfigEntry (Part 1) ([@alengwenus] - [#44090]) ([lcn docs]) +- Upgrade vsure to 1.7.3 ([@frenck] - [#47946]) ([verisure docs]) +- Sort supported features in vlc_telnet ([@dmcc] - [#46800]) ([vlc_telnet docs]) +- Add zwave_js dev docs readme ([@MartinHjelmare] - [#47621]) ([zwave_js docs]) +- None optional hass typing in base entity and notify ([@frenck] - [#47528]) +- Bump brother library ([@bieniu] - [#47949]) ([brother docs]) +- Implement Wake On Lan Dummy State ([@ntilley905] - [#47719]) ([wake_on_lan docs]) (breaking-change) +- Update state translation strings for water_heater ([@iMicknl] - [#46588]) ([water_heater docs]) +- Ensure recorder purge tests can handle multiple purge cycle ([@bdraco] - [#47956]) ([recorder docs]) +- Use ClientTimeout for hassio send_command ([@ludeeus] - [#47957]) ([hassio docs]) +- improve debug logging ([@mib1185] - [#47858]) ([synology_dsm docs]) +- Add suggested_area to MQTT discovery ([@RadekHvizdos] - [#47903]) ([mqtt docs]) +- Add config flow to Verisure ([@frenck] - [#47880]) ([verisure docs]) (breaking-change) +- Add zwave_js sensor humidity device class ([@MartinHjelmare] - [#47953]) ([zwave_js docs]) +- Move Verisure services to entity services ([@frenck] - [#47905]) ([verisure docs]) (breaking-change) +- Add devices to Verisure integration ([@frenck] - [#47913]) ([verisure docs]) +- Make it possible to list debug traces for a specific automation ([@emontnemery] - [#47744]) ([automation docs]) +- Fix xmpp notify for muc rooms ([@Socalix] - [#46715]) ([xmpp docs]) +- Add voltage device class to devolo Home Control ([@Shutgun] - [#47967]) ([devolo_home_control docs]) +- Add reauthentication to Verisure ([@frenck] - [#47972]) ([verisure docs]) +- Correct trace for choose and repeat script actions ([@emontnemery] - [#47973]) +- Add execute_script WS API ([@emontnemery] - [#47964]) ([websocket_api docs]) +- Add support for light color modes ([@emontnemery] - [#47720]) ([kulersky docs]) ([light docs]) ([yeelight docs]) ([zerproc docs]) +- Add custom JSONEncoder for automation traces ([@emontnemery] - [#47942]) ([automation docs]) +- Guard extra call in ZHA lights ([@dmulcahey] - [#47832]) ([zha docs]) +- Ignore STATE_UNKNOWN in prometheus ([@inetAnt] - [#47840]) ([prometheus docs]) (breaking-change) +- Add device classes to Verisure sensors ([@frenck] - [#47990]) ([verisure docs]) +- Update xknx to 0.17.3 ([@farmio] - [#47996]) ([knx docs]) +- Improve JSONEncoder test coverage ([@emontnemery] - [#47935]) +- Add aliases to actions in automation blueprints ([@klaasnicolaas] - [#47940]) ([automation docs]) +- Fix withings InvalidParamsException ([@ronaldheft] - [#47975]) ([withings docs]) +- Bump up ZHA dependencies ([@Adminiuga] - [#47997]) ([zha docs]) +- Add binary_sensor entities for SmartTub reminders ([@mdz] - [#47583]) ([smarttub docs]) +- Add support for Xiaomi Air Purifier Pro H ([@billsq] - [#47601]) ([xiaomi_miio docs]) +- Add missing "pin" field in step "pair" for philips_js ([@eifinger] - [#47802]) ([philips_js docs]) +- Upgrade youtube_dl to version 2021.03.14 ([@chpego] - [#48000]) ([media_extractor docs]) +- Add location details to deprecation warning ([@alandtse] - [#47155]) +- KNX sensor: float no longer valid for `type` ([@farmio] - [#48005]) ([knx docs]) (breaking-change) +- Add run_id to automation logbook event ([@balloob] - [#47980]) ([automation docs]) +- Delay ZHA group updates to ensure all members are updated first ([@abmantis] - [#46861]) ([zha docs]) +- Remove YAML support from August ([@bdraco] - [#47615]) ([august docs]) (breaking-change) +- Add Pentair ScreenLogic integration ([@dieselrabbit] - [#47933]) ([screenlogic docs]) (new-integration) +- Fix historic attributes for input_datetime ([@spacegaier] - [#45208]) ([history docs]) +- Fix issue with setting sleep mode during DST ([@natekspencer] - [#48001]) ([litterrobot docs]) +- Add support for percentage based fan model in esphome ([@blejdfist] - [#46712]) ([esphome docs]) +- Bump codecov/codecov-action from v1.2.2 to v1.3.1 (@dependabot - [#48020]) +- Add Logger Check Before Adding Another ([@ntilley905] - [#47954]) +- Rewrite tests for Template Light ([@sycx2] - [#41163]) ([template docs]) +- Update metadata license string ([@cdce8p] - [#46899]) +- Fix workday sensor to honor timezone ([@schiermi] - [#47927]) ([workday docs]) (breaking-change) +- Switch history tests to pytest ([@mdonoughe] - [#42318]) ([history docs]) +- Update typing 01 ([@cdce8p] - [#48013]) +- Improve OWM Precipitation sensors ([@hanskroner] - [#47945]) ([openweathermap docs]) +- Update typing 02 ([@cdce8p] - [#48014]) +- Update typing 03 ([@cdce8p] - [#48015]) +- Add service schema for ESPHome api services ([@glmnet] - [#47426]) ([esphome docs]) +- Update typing 04 ([@cdce8p] - [#48037]) +- Update typing 05 ([@cdce8p] - [#48038]) +- Update typing 06 ([@cdce8p] - [#48039]) +- Google has deprecated a comma separated list for modes changed it to array ([@KartoffelToby] - [#48029]) ([google_assistant docs]) +- Upgraded aiopylgtv to v0.4.0 ([@corneyl] - [#47014]) ([webostv docs]) +- Add a service to reload config entries that can easily be called though automations ([@bdraco] - [#46762]) ([homeassistant docs]) +- Update typing 07 ([@cdce8p] - [#48057]) +- Update typing 08 ([@cdce8p] - [#48058]) +- Use websocket fixture in deCONZ binary sensor tests ([@Kane610] - [#47820]) ([deconz docs]) +- Reduce rest setup code ([@bdraco] - [#48062]) ([rest docs]) +- Use websocket fixture in deCONZ climate tests ([@Kane610] - [#47821]) ([deconz docs]) +- Update typing 09 ([@cdce8p] - [#48059]) +- Use websocket fixture in deCONZ cover tests ([@Kane610] - [#47822]) ([deconz docs]) +- Use websocket fixture in deCONZ event related tests ([@Kane610] - [#47823]) ([deconz docs]) +- Use websocket fixture in deCONZ fan tests ([@Kane610] - [#47824]) ([deconz docs]) +- Use websocket fixture in deCONZ light tests ([@Kane610] - [#47826]) ([deconz docs]) +- Use websocket fixture in deCONZ lock tests ([@Kane610] - [#47827]) ([deconz docs]) +- Use websocket fixture in deCONZ sensor tests ([@Kane610] - [#47830]) ([deconz docs]) +- Use websocket fixture in deCONZ switch tests ([@Kane610] - [#47831]) ([deconz docs]) +- Improve deCONZ services and scenes tests ([@Kane610] - [#47829]) ([deconz docs]) +- Propagate RFLink 'send_command' event ([@javicalle] - [#43588]) ([rflink docs]) +- Amcrest add support for CrossLineDetection ([@andreas-amlabs] - [#44582]) ([amcrest docs]) +- Update typing 10 ([@cdce8p] - [#48071]) +- Allow hdmi_cec to recover from lost connection to adapter without restart ([@rajlaud] - [#40714]) ([hdmi_cec docs]) +- Update typing 11 ([@cdce8p] - [#48072]) +- Ignore not implemented lg_soundbar source/equaliser. ([@bernimoses] - [#45868]) ([lg_soundbar docs]) +- Update typing 12 ([@cdce8p] - [#48073]) +- Update typing 13 ([@cdce8p] - [#48077]) +- Add tests for Netatmo oauth2 api ([@cgtobi] - [#46375]) ([netatmo docs]) +- Update typing 14 ([@cdce8p] - [#48078]) +- Update typing 15 ([@cdce8p] - [#48079]) +- Add URL input for Prowl ([@elyobelyob] - [#46427]) ([prowl docs]) +- Add definitions for grouping media players ([@klada] - [#41193]) ([media_player docs]) +- Add images support to matrix notify ([@bestlibre] - [#37625]) ([matrix docs]) +- Correct trace for repeat script actions ([@emontnemery] - [#48031]) +- Fix Shelly sleeping device initialization after reconfiguration ([@bieniu] - [#48076]) ([shelly docs]) +- Update typing 16 ([@cdce8p] - [#48087]) +- Add python-typing-update to pre-commit-config ([@cdce8p] - [#48088]) +- Update pyupgrade to v2.10.1 ([@cdce8p] - [#48089]) +- Add Opentherm Gateway current and setpoint precision ([@Martidjen] - [#47484]) ([opentherm_gw docs]) +- Refactor Netatmo test ([@cgtobi] - [#48097]) ([netatmo docs]) +- Type check KNX integration expose ([@farmio] - [#48055]) ([knx docs]) +- Type check KNX integration weather, notify and scene ([@farmio] - [#48051]) ([knx docs]) +- Type check KNX integration light ([@farmio] - [#48053]) ([knx docs]) +- Type check KNX integration binary_sensor, sensor and switch ([@farmio] - [#48050]) ([knx docs]) +- Type check KNX integration factory and schema ([@farmio] - [#48045]) ([knx docs]) +- Use device class voltage in NUT integration ([@bieniu] - [#48096]) ([nut docs]) +- Add tests for Netatmo light ([@cgtobi] - [#46381]) ([netatmo docs]) +- Add tests for Netatmo camera ([@cgtobi] - [#46380]) ([netatmo docs]) +- Add "timestamp" attribute to seventeentrack ([@andreasbrett] - [#47960]) ([seventeentrack docs]) +- Fix Homematic transition function on light devices with multiple channels ([@miccico] - [#45725]) ([homematic docs]) +- Upgrade RPi.GPIO to 0.7.1a4 ([@frenck] - [#48106]) ([bmp280 docs]) ([mcp23017 docs]) ([rpi_gpio docs]) +- Improve test coverage of deCONZ config flow ([@Kane610] - [#48091]) ([deconz docs]) +- Add flake8 comprehensions checks to pre-commit & CI ([@frenck] - [#48111]) +- Add missing oauth2 error abort reason ([@MartinHjelmare] - [#48112]) +- Have pylint warn when user visible log messages do not start with capital letter or end with a period ([@bdraco] - [#48064]) +- Wait for switch startup in generic_thermostat ([@javicalle] - [#45253]) ([generic_thermostat docs]) +- Improve uvc test camera ([@sycx2] - [#41438]) ([uvc docs]) (breaking-change) +- Improve sensor coverage by verifying daylight sensor attributes ([@Kane610] - [#48090]) ([deconz docs]) +- Make Vera should_poll static rather than dynamic ([@pavoni] - [#47854]) ([vera docs]) +- Type check KNX integration fan ([@farmio] - [#48056]) ([knx docs]) +- Type check KNX integration cover ([@farmio] - [#48046]) ([knx docs]) +- Remove defunct test from percentage util ([@frenck] - [#48125]) +- Set zwave_js climate precision to tenths for F ([@chilicheech] - [#48133]) ([zwave_js docs]) (breaking-change) +- Rewrite of not a == b occurances ([@frenck] - [#48132]) +- Update pyvesync to 1.3.1 ([@decompil3d] - [#48128]) ([vesync docs]) +- Add tests for Netatmo webhook handler ([@cgtobi] - [#46396]) ([netatmo docs]) +- Yoda assertion style removed is ([@frenck] - [#48142]) +- Improve test coverage of deconz_device ([@Kane610] - [#48141]) ([deconz docs]) +- Warn on undefined variables in templates ([@emontnemery] - [#48140]) (breaking-change) +- Fix a collection of tests with missing asserts ([@frenck] - [#48127]) ([hassio docs]) ([logger docs]) ([recorder docs]) ([tod docs]) ([universal docs]) +- only block coord removal if it is active ([@dmulcahey] - [#48147]) ([zha docs]) +- Use domain const in config_flow ([@spacegaier] - [#48168]) ([ambiclimate docs]) ([daikin docs]) ([mqtt docs]) ([point docs]) ([tellduslive docs]) ([tradfri docs]) +- ESPHome trigger reconnect immediately when mDNS record received ([@OttoWinter] - [#48129]) ([esphome docs]) +- Update RFLink tests ([@javicalle] - [#48149]) ([rflink docs]) +- Small code styling tweaks for HomeKit ([@frenck] - [#48163]) ([homekit docs]) +- Make Rflink handle set_level command for dimmable devices ([@javicalle] - [#46499]) ([rflink docs]) +- Mark base components' state_attribute @final, rename others to extra_state_attributes ([@emontnemery] - [#48161]) +- ScreenLogic cleanups ([@dieselrabbit] - [#48136]) ([screenlogic docs]) (new-platform) +- Fix typo in homekit strings.json ([@eltociear] - [#48176]) ([homekit docs]) +- Preset support for MOES thermostat valves ([@xonestonex] - [#48178]) ([zha docs]) +- Handle switch state updates from Konnected device ([@heythisisnate] - [#48167]) ([konnected docs]) +- Index config entries by id ([@bdraco] - [#48199]) ([config docs]) +- Update homekit to improve representation of activity based remotes ([@bdraco] - [#47261]) ([homekit docs]) +- Make sure include_ignore=False always works with _async_current_entries ([@bdraco] - [#48196]) +- Fix Kulersky and Zerproc config unloading ([@emlove] - [#47572]) ([kulersky docs]) ([zerproc docs]) +- Improve condition trace tests ([@emontnemery] - [#48152]) +- Test that homeassistant stop and restart do not block WS ([@emontnemery] - [#48081]) ([websocket_api docs]) +- Trigger Plex GDM scans regularly ([@jjlawren] - [#48041]) ([plex docs]) +- Exclude homekit accessories created by the homekit integration from homekit_controller ([@bdraco] - [#48201]) ([homekit_controller docs]) +- Increase config entries test coverage ([@bdraco] - [#48203]) +- Convert august to be push instead of poll ([@bdraco] - [#47544]) ([august docs]) +- Ensure homekit yaml config works when there is an ignored config entry ([@bdraco] - [#48175]) ([homekit docs]) +- Populate trigger variable when manually triggering automation ([@balloob] - [#48202]) ([automation docs]) +- Bump yalexs to 1.1.5 for august ([@bdraco] - [#48205]) ([august docs]) +- Remove vera should_poll ([@pavoni] - [#48209]) ([vera docs]) +- Update aqualogic library to v2.6 ([@swilson] - [#48119]) ([aqualogic docs]) +- Migrate integrations a-c to extend SensorEntity ([@emontnemery] - [#48210]) +- Migrate integrations d-e to extend SensorEntity ([@emontnemery] - [#48211]) +- Bump colorlog to 4.8.0 ([@frenck] - [#48218]) +- Upgrade pre-commit to 2.11.1 ([@frenck] - [#48219]) +- Fix maxcube temperature for thermostat auto mode ([@unaiur] - [#48047]) ([maxcube docs]) +- Improve script tracing ([@emontnemery] - [#48100]) +- Upgrade pyupgrade to v2.11.0 ([@frenck] - [#48220]) ([esphome docs]) ([http docs]) ([wunderground docs]) ([zha docs]) +- Add identification for YAML imports ([@starkillerOG] - [#48162]) ([xiaomi_miio docs]) +- Add jobstate parser to Onvif integration ([@MatsNl] - [#46589]) ([onvif docs]) +- Fix condition extra fields for climate and humidifier ([@spacegaier] - [#48184]) ([climate docs]) ([cover docs]) ([humidifier docs]) +- Add an option to hide selected Hyperion effects ([@dermotduffy] - [#45689]) ([hyperion docs]) +- Refactor tracing: Move trace support to its own integration ([@emontnemery] - [#48224]) ([automation docs]) ([trace docs]) (new-integration) +- Migrate integrations f-h to extend SensorEntity ([@emontnemery] - [#48212]) +- Migrate integrations n-q to extend SensorEntity ([@emontnemery] - [#48214]) +- Migrate integrations t-v to extend SensorEntity ([@emontnemery] - [#48216]) +- Migrate integrations w-z to extend SensorEntity ([@emontnemery] - [#48217]) +- Migrate integrations r-s to extend SensorEntity ([@emontnemery] - [#48215]) +- Migrate integrations i-m to extend SensorEntity ([@emontnemery] - [#48213]) +- Improve Docker and Kubernetes support for KNX ([@plomosits] - [#48065]) ([knx docs]) +- Move SensorEntity last in the inheritance tree ([@emontnemery] - [#48230]) +- Clean up AsusWRT ([@balloob] - [#48012]) ([asuswrt docs]) +- Remove login details before logging stream source ([@uvjustin] - [#45398]) ([stream docs]) +- Bump nanoleaf to 0.1.0, add unique IDs ([@dewet22] - [#48135]) ([nanoleaf docs]) +- Add Blink config migration ([@fronzbot] - [#46671]) ([blink docs]) +- Change nanoleaf name to configured name instead of hostname ([@keis] - [#46407]) ([nanoleaf docs]) +- Add august doorbells to dhcp discovery ([@bdraco] - [#48244]) ([august docs]) +- Add dhcp discovery support to blink ([@bdraco] - [#48243]) ([blink docs]) +- Upgrade pylast to 4.2.0 ([@fabaff] - [#48245]) ([lastfm docs]) +- Increase test coverage of deCONZ device triggers ([@Kane610] - [#48126]) ([deconz docs]) +- Add tests for Netatmo ([@cgtobi] - [#46372]) ([netatmo docs]) +- Use contextlib.suppress where possible ([@frenck] - [#48189]) +- Fix some sensor classes ([@emontnemery] - [#48254]) +- Bump up ZHA dependencies ([@Adminiuga] - [#48257]) ([zha docs]) +- Update issue form to use latest changes ([@frenck] - [#48250]) +- Update pypoint to 2.1.0 ([@fredrike] - [#48223]) ([point docs]) +- datetime must be a string ([@dgomes] - [#47809]) ([buienradar docs]) +- Install requirements.txt while building dev Dockerfile ([@ludeeus] - [#48268]) +- Add proper percentage support to deCONZ fan integration ([@Kane610] - [#48187]) ([deconz docs]) +- Bump plexapi to 4.5.0 ([@jjlawren] - [#48264]) ([plex docs]) +- Refactor tracing: Prepare for tracing of scripts ([@emontnemery] - [#48231]) ([automation docs]) ([trace docs]) +- Google assistant: disconnect user agent when not found in google ([@bramkragten] - [#48233]) ([cloud docs]) ([google_assistant docs]) +- Migrate template to register reload service on async_setup ([@balloob] - [#48273]) ([template docs]) +- Add tests for Netatmo sensor ([@cgtobi] - [#46393]) ([netatmo docs]) +- Improve Plex GDM client connections ([@jjlawren] - [#48272]) ([plex docs]) +- Clean up SmartTub reminders ([@mdz] - [#48033]) ([smarttub docs]) +- Fix Core bug report issue form ([@frenck] - [#48279]) +- Add support for tracing script execution ([@emontnemery] - [#48276]) ([automation docs]) ([script docs]) ([trace docs]) +- Add support for Roomba 980 discovery ([@scyto] - [#47696]) ([roomba docs]) +- Ignore python-typing-update for pre-commit requirements ([@cdce8p] - [#48292]) +- Bump omnilogic to 0.4.3 to fix API certificate issue ([@djtimca] - [#48296]) ([omnilogic docs]) +- Handle range conversions that do not start at 1 ([@bdraco] - [#48298]) +- Determine zwave_js sensor device class during initialization ([@raman325] - [#48304]) ([zwave_js docs]) +- Listen on the default interface by default for zeroconf ([@bdraco] - [#48302]) ([zeroconf docs]) (breaking-change) +- Bump plexapi to 4.5.1 ([@jjlawren] - [#48307]) ([plex docs]) +- Add metrics upload by UDP to graphite ([@BoresXP] - [#43751]) ([graphite docs]) +- Fix missing glances temperature sensors ([@TheNetAdmin] - [#46086]) ([glances docs]) +- Type check KNX integration climate ([@farmio] - [#48054]) ([knx docs]) +- Add allowed UUIDs and ignore CEC to Google Cast options flow ([@emontnemery] - [#47269]) ([cast docs]) (breaking-change) +- Add Homepluscontrol integration ([@chemaaa] - [#46783]) ([homepluscontrol docs]) (new-integration) +- Fix zha manual flow test ([@MartinHjelmare] - [#48317]) ([zha docs]) +- Add econet thermostat support and use getattr for sensors ([@w1ll1am23] - [#45564]) ([econet docs]) (new-integration) (new-platform) +- Fix device discovery of OAuth2 config flows ([@frenck] - [#48326]) +- Add tests for Netatmo data handler ([@cgtobi] - [#46373]) ([netatmo docs]) +- Bump plexwebsocket to 0.0.13 ([@jjlawren] - [#48330]) ([plex docs]) +- Support overriding token in notifify.event service ([@papajojo] - [#47133]) ([notify_events docs]) +- Fix late comment to PR adding percentage support to deCONZ fan platform ([@Kane610] - [#48333]) ([deconz docs]) +- Bump python-typing-update to 0.3.2 ([@cdce8p] - [#48303]) ([deconz docs]) ([yeelight docs]) +- Update in 1 minute on unavailable Motion blinds ([@starkillerOG] - [#47800]) ([motion_blinds docs]) +- Address huisbaasje review comments ([@frenck] - [#48313]) ([huisbaasje docs]) +- Use async with in Acmeda config flow ([@frenck] - [#48291]) ([acmeda docs]) +- Subaru integration code quality changes ([@G-Two] - [#48193]) ([subaru docs]) +- Remove timedate manipulation from Neato attributes ([@chemelli74] - [#48150]) ([neato docs]) (breaking-change) +- xknx 0.17.4 ([@farmio] - [#48350]) ([knx docs]) +- Validate device trigger schemas once ([@emontnemery] - [#48319]) +- Pre-calculate Verisure alarm states ([@frenck] - [#48340]) ([verisure docs]) +- Percentage and preset mode support for MQTT fan ([@jbouwh] - [#47944]) ([homeassistant docs]) ([mqtt docs]) (breaking-change) +- Validate device action schemas once ([@emontnemery] - [#48351]) +- Refactor Netatmo tests ([@cgtobi] - [#48277]) ([netatmo docs]) +- Bump snapcast to 2.1.2 ([@D3v01dZA] - [#48343]) ([snapcast docs]) +- Small speed up to adding entities ([@bdraco] - [#48353]) +- Improve august reconnect logic when service become unreachable ([@bdraco] - [#48349]) ([august docs]) +- Xknx unneeded expose ([@mptei] - [#48311]) ([knx docs]) +- Add Netatmo schedule event handling ([@cgtobi] - [#46573]) ([netatmo docs]) +- Extend typing on scaffold templates ([@frenck] - [#48232]) +- Type check KNX integration __init__ and knx_entity ([@farmio] - [#48044]) ([knx docs]) +- Merge of nested IF-IF cases - X-Z ([@frenck] - [#48373]) ([xiaomi_miio docs]) ([zha docs]) ([zwave docs]) ([zwave_js docs]) +- Create FUNDING.yml ([@balloob] - [#48375]) +- Merge of nested IF-IF case in elkm1 test ([@frenck] - [#48374]) ([elkm1 docs]) +- Improve traces for nested script runs ([@emontnemery] - [#48366]) ([trace docs]) +- Return config entry details after creation ([@emontnemery] - [#48316]) ([config docs]) +- Remove HomeAssistantType alias from AdGuard integration ([@frenck] - [#48377]) ([adguard docs]) +- Fix script default trace ([@balloob] - [#48390]) +- Block detectable I/O in the event loop ([@bdraco] - [#48387]) (breaking-change) +- Bump httpx to 0.17.1 ([@bdraco] - [#48388]) +- Merge multiple context managers in tests ([@frenck] - [#48146]) +- Merge of nested IF-IF cases - Core ([@frenck] - [#48364]) +- Lazy load broadlink storage ([@bdraco] - [#48391]) ([broadlink docs]) +- Merge of nested IF-IF cases - K-N ([@frenck] - [#48370]) +- Upgrade flake8 and dependencies, enable flake8-noqa ([@scop] - [#48393]) ([http docs]) ([seventeentrack docs]) +- Merge of nested IF-IF cases - O-R ([@frenck] - [#48371]) +- Merge of nested IF-IF cases - S-W ([@frenck] - [#48372]) +- Merge of nested IF-IF cases - A-C ([@frenck] - [#48365]) ([agent_dvr docs]) ([alarmdecoder docs]) ([alexa docs]) ([apprise docs]) ([asuswrt docs]) ([cast docs]) ([climacell docs]) +- Merge of nested IF-IF cases - H-J ([@frenck] - [#48368]) +- Merge of nested IF-IF cases - E-G ([@frenck] - [#48367]) +- Add Maxcube unit tests ([@unaiur] - [#47872]) ([maxcube docs]) +- Remove HomeAssistantType alias from helpers ([@frenck] - [#48400]) +- Fix ability to ignore AdGuard hassio discovery ([@frenck] - [#48401]) ([adguard docs]) +- Fix entity service calls on WLED master light ([@frenck] - [#48402]) ([wled docs]) +- Bump yalexs to 1.1.9 ([@bdraco] - [#48383]) ([august docs]) +- Address late review of vesync light ([@decompil3d] - [#48130]) ([vesync docs]) +- Add Ambient Station PM25 indoor sensor ([@conflipper] - [#47970]) ([ambient_station docs]) +- Add support for selective config parameter entity discovery ([@raman325] - [#48336]) ([zwave_js docs]) +- Add broadlink dhcp discovery ([@bdraco] - [#48408]) ([broadlink docs]) +- Add template support for remaining attributes of weather entity ([@csoltenborn] - [#47736]) ([template docs]) +- ZHA lock code services and events ([@jcam] - [#47208]) ([zha docs]) +- Update mac address in broadlink test to match mocked device ([@bdraco] - [#48415]) ([broadlink docs]) +- Bump ZHA quirks to 0.0.55 ([@dmulcahey] - [#48418]) ([zha docs]) +- Remove KNX type alias for homeassistant.core types ([@farmio] - [#48422]) ([knx docs]) +- Discard outdated data reported by AEMET stations ([@Noltari] - [#48417]) ([aemet docs]) +- Allow discovery configuration of modbus platforms ([@janiversen] - [#46591]) ([modbus docs]) (breaking-change) +- Simplify maxcube integration ([@unaiur] - [#48403]) ([maxcube docs]) +- Handle routers that convert hostnames to lowercase in dhcp ([@bdraco] - [#48429]) ([dhcp docs]) ([roomba docs]) +- Fix bug in vlc_telnet seeking ([@dmcc] - [#48425]) ([vlc_telnet docs]) +- Add dsmr monthly and yearly totals ([@robertdelpeut] - [#48253]) ([dsmr_reader docs]) +- Detect when media position is stale in vlc_telnet ([@dmcc] - [#48434]) ([vlc_telnet docs]) +- Fallback to filename for title in vlc_telnet ([@dmcc] - [#48438]) ([vlc_telnet docs]) +- Add additional data source to dhcp ([@bdraco] - [#48430]) ([dhcp docs]) +- Fallback to current temperature unit for zwave_js climate ([@raman325] - [#48347]) ([zwave_js docs]) +- Bump HAP-python to 3.4.1 for homekit ([@bdraco] - [#48444]) ([homekit docs]) +- Bump aiodiscover to 1.1.2 for dhcp ([@bdraco] - [#48445]) ([dhcp docs]) +- Remove myself as codeowner of HomematicIP Cloud ([@SukramJ] - [#48437]) ([homematicip_cloud docs]) +- Address review comments from trace refactoring PRs ([@emontnemery] - [#48288]) ([automation docs]) ([script docs]) ([trace docs]) +- Speed up bond setup with gather ([@bdraco] - [#48454]) ([bond docs]) +- Bump aiodiscover to 1.2.0 in for dhcp ([@bdraco] - [#48456]) ([dhcp docs]) +- Fix template fan default speed count ([@bdraco] - [#48389]) ([fan docs]) ([template docs]) +- Fix broken trace tests ([@emontnemery] - [#48458]) ([trace docs]) +- Fix knx tests ([@mptei] - [#48407]) ([knx docs]) +- Log the reason a config entry failed to setup ([@bdraco] - [#48449]) +- Don't write 0 to next modbus register ([@PimDoos] - [#48378]) ([modbus docs]) +- Include platform only integrations in the manifest list api ([@bdraco] - [#48269]) ([device_tracker docs]) ([websocket_api docs]) +- Do not load ignored or disabled integrations at startup ([@bdraco] - [#48355]) +- Add support for Selectors in Script service fields ([@frenck] - [#48469]) ([script docs]) +- Fix unmute bug in vlc_telnet ([@dmcc] - [#48441]) ([vlc_telnet docs]) +- Allow specifying template entities based on triggers ([@balloob] - [#48169]) ([trigger docs]) (new-integration) +- Cloud: Expose if google is registered in status + check on login ([@bramkragten] - [#48260]) ([cloud docs]) +- Command template support for MQTT fan ([@jbouwh] - [#48413]) ([mqtt docs]) (breaking-change) +- Add screenshot to manifest ([@bramkragten] - [#48475]) ([frontend docs]) +- Bump zwave-js-server-python to 0.23.0 to support zwave-js 7 ([@raman325] - [#48094]) ([zwave_js docs]) (breaking-change) +- Make integration setup optional ([@frenck] - [#48381]) +- Add 'for' to cover device triggers ([@emontnemery] - [#48324]) ([cover docs]) +- Merge condition and action traces ([@emontnemery] - [#48461]) ([automation docs]) ([script docs]) ([trace docs]) +- Clean up icons & device classes for Toon ([@frenck] - [#48471]) ([toon docs]) +- Allow MQTT entities to be disabled by default ([@emontnemery] - [#48284]) ([mqtt docs]) +- Refactor fan device triggers to use ToggleEntity triggers ([@emontnemery] - [#48321]) ([fan docs]) +- Bump aiodiscover to 1.3.0 to improve performance ([@bdraco] - [#48482]) ([dhcp docs]) +- Create async_config_entry_first_refresh to reduce coordinator boilerplate ([@bdraco] - [#48451]) +- Clean up superfluous integration setup - part 1 ([@frenck] - [#48476]) +- Clean up superfluous integration setup - part 2 ([@frenck] - [#48478]) +- Clean up superfluous integration setup - part 3 ([@frenck] - [#48484]) +- Remove HomeAssistantType alias from entity components - Part 1 ([@frenck] - [#48467]) +- Remove HomeAssistantType alias from entity components - Part 2 ([@frenck] - [#48468]) +- Add asyncio locks to screenlogic api access points ([@dieselrabbit] - [#48457]) ([screenlogic docs]) +- Bump aiodiscoer to 1.3.2 for dhcp ([@bdraco] - [#48489]) ([dhcp docs]) +- Add analytics integration ([@ludeeus] - [#48256]) ([analytics docs]) ([default_config docs]) ([hassio docs]) ([onboarding docs]) (new-integration) +- Add image proxy to Kodi media browser ([@cgtobi] - [#47315]) ([kodi docs]) +- Add zwave_js.bulk_set_partial_config_parameters service ([@raman325] - [#48306]) ([zwave_js docs]) +- Update pylint to 2.7.3 ([@cdce8p] - [#48488]) +- Create new websession if more than one entry in Tesla ([@alandtse] - [#47886]) ([tesla docs]) +- Make devolo home control more robust against connection losts ([@Shutgun] - [#48328]) ([devolo_home_control docs]) +- Fixed auth issue for non-2FA iCloud accounts ([@nzapponi] - [#48455]) ([icloud docs]) +- Add opentherm_gw option for setpoint override mode ([@Martidjen] - [#48465]) ([opentherm_gw docs]) +- Bump yalexs to 1.1.10 for august ([@bdraco] - [#48494]) ([august docs]) +- Use MAX_VOLUME constant in vlc_telnet ([@dmcc] - [#48491]) ([vlc_telnet docs]) +- Include platform only integrations in analytics ([@bdraco] - [#48493]) ([analytics docs]) +- Add zwave_js.set_value service ([@raman325] - [#48487]) ([zwave_js docs]) +- Add myself as codeowner to analytics ([@ludeeus] - [#48498]) ([analytics docs]) +- Update pylint to 2.7.4 ([@cdce8p] - [#48500]) +- Add 'for' to alarm device triggers ([@emontnemery] - [#48503]) ([alarm_control_panel docs]) +- Simplify device trigger code ([@emontnemery] - [#48507]) ([alarm_control_panel docs]) ([climate docs]) ([cover docs]) ([device_automation docs]) ([lock docs]) ([vacuum docs]) +- Add support for capturing renewals to dhcp discovery ([@bdraco] - [#48242]) ([dhcp docs]) +- Add 'for' to vacuum device triggers ([@emontnemery] - [#48506]) ([vacuum docs]) +- Add 'for' to media_player device triggers ([@emontnemery] - [#48505]) ([media_player docs]) +- Add 'for' to lock device triggers ([@emontnemery] - [#48504]) ([lock docs]) +- Raise Spotify exception if no active device found ([@spacegaier] - [#48486]) ([spotify docs]) +- Add discovery for Tube's Zigbee coordinators to ZHA ([@dmulcahey] - [#48420]) ([zha docs]) +- Fix local mypy workflow ([@KapJI] - [#48433]) +- Correct FAA Delays integration domain in manifest ([@frenck] - [#48512]) ([faa_delays docs]) +- Fix duplicates and unexpected failures during roomba discovery ([@bdraco] - [#48492]) ([roomba docs]) +- KNX passive group addresses ([@farmio] - [#48009]) ([knx docs]) +- Enable strict typing for zeroconf ([@KapJI] - [#48450]) ([zeroconf docs]) +- Add regex-based filters to logger component ([@jshufro] - [#48439]) ([logger docs]) +- Evaluate AirVisual interval on reboot ([@jugla] - [#48392]) ([airvisual docs]) +- Remove analytics from updater ([@ludeeus] - [#48518]) ([updater docs]) (breaking-change) +- support feedback for ZHA device reconfiguration ([@dmulcahey] - [#48447]) ([zha docs]) +- Fix init for first added shelly device ([@mib1185] - [#48411]) ([shelly docs]) +- Search for areas used in automations and scripts ([@bramkragten] - [#48499]) ([automation docs]) ([script docs]) ([search docs]) +- Add target version to log about missing version ([@ludeeus] - [#48520]) +- Bump Synology DSM to 1.0.2 ([@Quentame] - [#48528]) ([synology_dsm docs]) +- Bump Météo-France to 1.0.2 ([@Quentame] - [#48527]) ([meteo_france docs]) +- Bump Freebox to 0.0.10 ([@Quentame] - [#48526]) ([freebox docs]) +- Bump async_upnp_client to 0.16.0 ([@StevenLooman] - [#48521]) ([dlna_dmr docs]) ([ssdp docs]) ([upnp docs]) +- Shield async httpx call in generic ([@uvjustin] - [#47852]) ([generic docs]) +- Deprecate SolarEdge YAML configuration ([@frenck] - [#48533]) ([solaredge docs]) (breaking-change) +- Remove if/else from modbus test cases ([@janiversen] - [#48514]) ([modbus docs]) +- Add color_mode support to MQTT JSON light ([@emontnemery] - [#47993]) ([light docs]) ([mqtt docs]) (breaking-change) +- Add vicare fuelcell ([@nbraem] - [#47167]) ([vicare docs]) +- Bump pyhaversion from 3.4.2 to 21.3.0 ([@ludeeus] - [#48537]) ([version docs]) +- Add missing neato error status ([@vlebourl] - [#48508]) ([neato docs]) +- Add Plex library count sensors ([@jjlawren] - [#48339]) ([plex docs]) +- Use consolidated constant for "description" ([@spacegaier] - [#48490]) +- Add id to automation triggers ([@emontnemery] - [#48464]) ([homeassistant docs]) +- Prevent ping integration from delaying startup ([@bdraco] - [#43869]) ([ping docs]) (breaking-change) +- Ensure HA script and Python script services have a name ([@spacegaier] - [#47204]) +- Improve error handling for WS API trace/get ([@emontnemery] - [#48502]) ([trace docs]) +- Set Plex sensor availability properly ([@jjlawren] - [#48546]) ([plex docs]) +- Update xknx to version 0.17.5 ([@marvin-w] - [#48522]) ([knx docs]) +- Avoid divide by zero errors in tplink light integration ([@superm1] - [#48235]) ([tplink docs]) +- Fix update of surveillance_station data in Synology DSM ([@mib1185] - [#47966]) ([synology_dsm docs]) +- Remove Hass.io terms in strings.json ([@LEJOUI] - [#48541]) ([adguard docs]) ([almond docs]) ([deconz docs]) ([mqtt docs]) +- Create homekit locks according to spec ([@bdraco] - [#48453]) ([homekit docs]) +- Update frontend to 20210331.0 ([@bramkragten] - [#48552]) ([frontend docs]) +- Improve Plex device handling ([@jjlawren] - [#48369]) ([plex docs]) (breaking-change) +- Add operation sensor to Shelly Gas ([@chemelli74] - [#48462]) ([shelly docs]) +- Use Mapping[str, Any] instead of dict in Entity ([@KapJI] - [#48421]) +- Add Qingping Air Monitor Lite support support ([@arturdobo] - [#48181]) ([xiaomi_miio docs]) +- Use SOURCE_REAUTH constant for starting reauth flows ([@bdraco] - [#48553]) +- Improve automation trace tests ([@emontnemery] - [#48542]) ([trace docs]) +- Provide the improved service UX with deCONZ services ([@Kane610] - [#48382]) ([deconz docs]) +- Fix timer.finish to cancel callback ([@youknowjack0] - [#48549]) ([timer docs]) (beta fix) +- Remove analytics from default_config ([@ludeeus] - [#48566]) ([default_config docs]) (beta fix) +- Fix incorrect constant import in Ambient PWS ([@bachya] - [#48574]) ([ambient_station docs]) (beta fix) +- Don't care about DPI entries when looking for clients to be restored from UniFi ([@Kane610] - [#48579]) ([unifi docs]) (beta fix) +- Cleanup orphan devices in onewire integration ([@epenet] - [#48581]) ([onewire docs]) (beta fix) +- Return config entry details for 1-step config flows ([@emontnemery] - [#48585]) ([config docs]) (beta fix) +- Upgrade numpy to 1.20.2 ([@frenck] - [#48597]) ([iqvia docs]) ([opencv docs]) ([tensorflow docs]) ([trend docs]) (beta fix) +- Allow templatable service target to support scripts ([@frenck] - [#48600]) (beta fix) +- Fix websocket search for related ([@frenck] - [#48603]) ([search docs]) (beta fix) +- Clean up mobile app ([@balloob] - [#48607]) ([mobile_app docs]) (beta fix) +- Update frontend to 20210402.0 ([@bramkragten] - [#48609]) ([frontend docs]) (beta fix) +- Increase time out for http requests done in Axis integration ([@Kane610] - [#48610]) ([axis docs]) (beta fix) +- Include script script_execution in script and automation traces ([@emontnemery] - [#48576]) ([trace docs]) (beta fix) +- Include blueprint input in automation trace ([@emontnemery] - [#48575]) ([automation docs]) ([script docs]) ([trace docs]) (beta fix) +- Bump aioshelly to 0.6.2 ([@thecode] - [#48620]) ([shelly docs]) (beta fix) +- Fix trigger template entities without a unique ID ([@balloob] - [#48631]) ([template docs]) (beta fix) +- Support modern config for the trigger based template entity ([@balloob] - [#48635]) ([template docs]) (beta fix) +- Updated frontend to 20210402.1 ([@bramkragten] - [#48639]) ([frontend docs]) (beta fix) +- Bump aiodiscover to 1.3.3 for dhcp ([@bdraco] - [#48644]) ([dhcp docs]) (beta fix) +- Only listen for zeroconf when the esphome device cannot connect ([@bdraco] - [#48645]) ([esphome docs]) (beta fix) +- Fix AEMET town timestamp format ([@Noltari] - [#48647]) ([aemet docs]) (beta fix) +- Prevent config entry retry from blocking startup ([@bdraco] - [#48660]) (beta fix) +- Fix Raspi GPIO binary_sensor produces unreliable responses ([@mburget] - [#48170]) ([rpi_gpio docs]) (beta fix) +- Implement Ignore list for poll control configuration on Ikea devices ([@Adminiuga] - [#48667]) ([zha docs]) (beta fix) +- Bump zwave_js dependency to 0.23.1 ([@raman325] - [#48682]) ([zwave_js docs]) (beta fix) +- Fix verisure deadlock ([@balloob] - [#48691]) ([verisure docs]) (beta fix) +- Abort discovery for unsupported doorbird accessories ([@bdraco] - [#48710]) ([doorbird docs]) (beta fix) +- Improve warnings on undefined template errors ([@emontnemery] - [#48713]) (beta fix) +- Bump pychromecast to 9.1.2 ([@emontnemery] - [#48714]) ([cast docs]) (beta fix) +- Flag brightness support for MQTT RGB lights ([@emontnemery] - [#48718]) ([mqtt docs]) (beta fix) +- Fix infinite recursion in LazyState ([@blueshiftlabs] - [#48719]) ([history docs]) (beta fix) +- Allow reloading top-level template entities ([@balloob] - [#48733]) ([template docs]) (beta fix) +- Updated frontend to 20210406.0 ([@balloob] - [#48734]) ([frontend docs]) (beta fix) +- Do not activate Met.no without setting a Home coordinates ([@frenck] - [#48741]) ([met docs]) (beta fix) +- Generate a seperate UUID for the analytics integration ([@ludeeus] - [#48742]) ([analytics docs]) (beta fix) +- Rename hassio config entry title to Supervisor ([@frenck] - [#48748]) ([hassio docs]) (beta fix) +- Use microsecond precision for datetime values on MariaDB/MySQL ([@agners] - [#48749]) ([recorder docs]) (beta fix) +- Add custom integrations to analytics ([@ludeeus] - [#48753]) ([analytics docs]) (beta fix) (new-integration) +- Solve cast delaying startup when discovered devices are slow to setup ([@bdraco] - [#48755]) ([cast docs]) (beta fix) +- Met.no - only update data if coordinates changed ([@Danielhiversen] - [#48756]) ([met docs]) (beta fix) +- Remove login details before logging SQL errors ([@emontnemery] - [#48758]) ([sql docs]) (beta fix) +- Fix whitespace error in cast ([@emontnemery] - [#48763]) ([cast docs]) (beta fix) +- Update frontend to 20210407.0 ([@bramkragten] - [#48765]) ([frontend docs]) (beta fix) +- Reject nan, inf from generic_thermostat sensor ([@emontnemery] - [#48771]) (beta fix) +- Update frontend to 20210407.1 ([@bramkragten] - [#48778]) ([frontend docs]) (beta fix) + +{% enddetails %} + +[#37625]: https://github.com/home-assistant/core/pull/37625 +[#40714]: https://github.com/home-assistant/core/pull/40714 +[#41163]: https://github.com/home-assistant/core/pull/41163 +[#41193]: https://github.com/home-assistant/core/pull/41193 +[#41438]: https://github.com/home-assistant/core/pull/41438 +[#42318]: https://github.com/home-assistant/core/pull/42318 +[#42450]: https://github.com/home-assistant/core/pull/42450 +[#43588]: https://github.com/home-assistant/core/pull/43588 +[#43751]: https://github.com/home-assistant/core/pull/43751 +[#43869]: https://github.com/home-assistant/core/pull/43869 +[#44090]: https://github.com/home-assistant/core/pull/44090 +[#44582]: https://github.com/home-assistant/core/pull/44582 +[#44807]: https://github.com/home-assistant/core/pull/44807 +[#45208]: https://github.com/home-assistant/core/pull/45208 +[#45253]: https://github.com/home-assistant/core/pull/45253 +[#45398]: https://github.com/home-assistant/core/pull/45398 +[#45564]: https://github.com/home-assistant/core/pull/45564 +[#45689]: https://github.com/home-assistant/core/pull/45689 +[#45725]: https://github.com/home-assistant/core/pull/45725 +[#45727]: https://github.com/home-assistant/core/pull/45727 +[#45765]: https://github.com/home-assistant/core/pull/45765 +[#45826]: https://github.com/home-assistant/core/pull/45826 +[#45868]: https://github.com/home-assistant/core/pull/45868 +[#45994]: https://github.com/home-assistant/core/pull/45994 +[#46086]: https://github.com/home-assistant/core/pull/46086 +[#46242]: https://github.com/home-assistant/core/pull/46242 +[#46342]: https://github.com/home-assistant/core/pull/46342 +[#46347]: https://github.com/home-assistant/core/pull/46347 +[#46372]: https://github.com/home-assistant/core/pull/46372 +[#46373]: https://github.com/home-assistant/core/pull/46373 +[#46375]: https://github.com/home-assistant/core/pull/46375 +[#46380]: https://github.com/home-assistant/core/pull/46380 +[#46381]: https://github.com/home-assistant/core/pull/46381 +[#46392]: https://github.com/home-assistant/core/pull/46392 +[#46393]: https://github.com/home-assistant/core/pull/46393 +[#46396]: https://github.com/home-assistant/core/pull/46396 +[#46407]: https://github.com/home-assistant/core/pull/46407 +[#46427]: https://github.com/home-assistant/core/pull/46427 +[#46499]: https://github.com/home-assistant/core/pull/46499 +[#46573]: https://github.com/home-assistant/core/pull/46573 +[#46588]: https://github.com/home-assistant/core/pull/46588 +[#46589]: https://github.com/home-assistant/core/pull/46589 +[#46591]: https://github.com/home-assistant/core/pull/46591 +[#46593]: https://github.com/home-assistant/core/pull/46593 +[#46606]: https://github.com/home-assistant/core/pull/46606 +[#46657]: https://github.com/home-assistant/core/pull/46657 +[#46660]: https://github.com/home-assistant/core/pull/46660 +[#46671]: https://github.com/home-assistant/core/pull/46671 +[#46678]: https://github.com/home-assistant/core/pull/46678 +[#46682]: https://github.com/home-assistant/core/pull/46682 +[#46689]: https://github.com/home-assistant/core/pull/46689 +[#46696]: https://github.com/home-assistant/core/pull/46696 +[#46712]: https://github.com/home-assistant/core/pull/46712 +[#46715]: https://github.com/home-assistant/core/pull/46715 +[#46755]: https://github.com/home-assistant/core/pull/46755 +[#46761]: https://github.com/home-assistant/core/pull/46761 +[#46762]: https://github.com/home-assistant/core/pull/46762 +[#46783]: https://github.com/home-assistant/core/pull/46783 +[#46800]: https://github.com/home-assistant/core/pull/46800 +[#46861]: https://github.com/home-assistant/core/pull/46861 +[#46866]: https://github.com/home-assistant/core/pull/46866 +[#46874]: https://github.com/home-assistant/core/pull/46874 +[#46879]: https://github.com/home-assistant/core/pull/46879 +[#46882]: https://github.com/home-assistant/core/pull/46882 +[#46899]: https://github.com/home-assistant/core/pull/46899 +[#46908]: https://github.com/home-assistant/core/pull/46908 +[#46948]: https://github.com/home-assistant/core/pull/46948 +[#46964]: https://github.com/home-assistant/core/pull/46964 +[#46972]: https://github.com/home-assistant/core/pull/46972 +[#46998]: https://github.com/home-assistant/core/pull/46998 +[#47003]: https://github.com/home-assistant/core/pull/47003 +[#47008]: https://github.com/home-assistant/core/pull/47008 +[#47014]: https://github.com/home-assistant/core/pull/47014 +[#47015]: https://github.com/home-assistant/core/pull/47015 +[#47017]: https://github.com/home-assistant/core/pull/47017 +[#47019]: https://github.com/home-assistant/core/pull/47019 +[#47021]: https://github.com/home-assistant/core/pull/47021 +[#47022]: https://github.com/home-assistant/core/pull/47022 +[#47024]: https://github.com/home-assistant/core/pull/47024 +[#47026]: https://github.com/home-assistant/core/pull/47026 +[#47034]: https://github.com/home-assistant/core/pull/47034 +[#47037]: https://github.com/home-assistant/core/pull/47037 +[#47039]: https://github.com/home-assistant/core/pull/47039 +[#47041]: https://github.com/home-assistant/core/pull/47041 +[#47042]: https://github.com/home-assistant/core/pull/47042 +[#47045]: https://github.com/home-assistant/core/pull/47045 +[#47050]: https://github.com/home-assistant/core/pull/47050 +[#47052]: https://github.com/home-assistant/core/pull/47052 +[#47055]: https://github.com/home-assistant/core/pull/47055 +[#47061]: https://github.com/home-assistant/core/pull/47061 +[#47063]: https://github.com/home-assistant/core/pull/47063 +[#47074]: https://github.com/home-assistant/core/pull/47074 +[#47078]: https://github.com/home-assistant/core/pull/47078 +[#47080]: https://github.com/home-assistant/core/pull/47080 +[#47086]: https://github.com/home-assistant/core/pull/47086 +[#47096]: https://github.com/home-assistant/core/pull/47096 +[#47101]: https://github.com/home-assistant/core/pull/47101 +[#47113]: https://github.com/home-assistant/core/pull/47113 +[#47129]: https://github.com/home-assistant/core/pull/47129 +[#47133]: https://github.com/home-assistant/core/pull/47133 +[#47141]: https://github.com/home-assistant/core/pull/47141 +[#47144]: https://github.com/home-assistant/core/pull/47144 +[#47145]: https://github.com/home-assistant/core/pull/47145 +[#47148]: https://github.com/home-assistant/core/pull/47148 +[#47151]: https://github.com/home-assistant/core/pull/47151 +[#47155]: https://github.com/home-assistant/core/pull/47155 +[#47157]: https://github.com/home-assistant/core/pull/47157 +[#47161]: https://github.com/home-assistant/core/pull/47161 +[#47163]: https://github.com/home-assistant/core/pull/47163 +[#47165]: https://github.com/home-assistant/core/pull/47165 +[#47167]: https://github.com/home-assistant/core/pull/47167 +[#47169]: https://github.com/home-assistant/core/pull/47169 +[#47170]: https://github.com/home-assistant/core/pull/47170 +[#47175]: https://github.com/home-assistant/core/pull/47175 +[#47178]: https://github.com/home-assistant/core/pull/47178 +[#47184]: https://github.com/home-assistant/core/pull/47184 +[#47186]: https://github.com/home-assistant/core/pull/47186 +[#47187]: https://github.com/home-assistant/core/pull/47187 +[#47189]: https://github.com/home-assistant/core/pull/47189 +[#47190]: https://github.com/home-assistant/core/pull/47190 +[#47191]: https://github.com/home-assistant/core/pull/47191 +[#47192]: https://github.com/home-assistant/core/pull/47192 +[#47196]: https://github.com/home-assistant/core/pull/47196 +[#47204]: https://github.com/home-assistant/core/pull/47204 +[#47205]: https://github.com/home-assistant/core/pull/47205 +[#47208]: https://github.com/home-assistant/core/pull/47208 +[#47211]: https://github.com/home-assistant/core/pull/47211 +[#47218]: https://github.com/home-assistant/core/pull/47218 +[#47221]: https://github.com/home-assistant/core/pull/47221 +[#47227]: https://github.com/home-assistant/core/pull/47227 +[#47228]: https://github.com/home-assistant/core/pull/47228 +[#47229]: https://github.com/home-assistant/core/pull/47229 +[#47232]: https://github.com/home-assistant/core/pull/47232 +[#47235]: https://github.com/home-assistant/core/pull/47235 +[#47237]: https://github.com/home-assistant/core/pull/47237 +[#47238]: https://github.com/home-assistant/core/pull/47238 +[#47245]: https://github.com/home-assistant/core/pull/47245 +[#47247]: https://github.com/home-assistant/core/pull/47247 +[#47248]: https://github.com/home-assistant/core/pull/47248 +[#47249]: https://github.com/home-assistant/core/pull/47249 +[#47255]: https://github.com/home-assistant/core/pull/47255 +[#47259]: https://github.com/home-assistant/core/pull/47259 +[#47261]: https://github.com/home-assistant/core/pull/47261 +[#47269]: https://github.com/home-assistant/core/pull/47269 +[#47276]: https://github.com/home-assistant/core/pull/47276 +[#47279]: https://github.com/home-assistant/core/pull/47279 +[#47284]: https://github.com/home-assistant/core/pull/47284 +[#47285]: https://github.com/home-assistant/core/pull/47285 +[#47294]: https://github.com/home-assistant/core/pull/47294 +[#47300]: https://github.com/home-assistant/core/pull/47300 +[#47302]: https://github.com/home-assistant/core/pull/47302 +[#47304]: https://github.com/home-assistant/core/pull/47304 +[#47305]: https://github.com/home-assistant/core/pull/47305 +[#47308]: https://github.com/home-assistant/core/pull/47308 +[#47314]: https://github.com/home-assistant/core/pull/47314 +[#47315]: https://github.com/home-assistant/core/pull/47315 +[#47323]: https://github.com/home-assistant/core/pull/47323 +[#47324]: https://github.com/home-assistant/core/pull/47324 +[#47350]: https://github.com/home-assistant/core/pull/47350 +[#47373]: https://github.com/home-assistant/core/pull/47373 +[#47384]: https://github.com/home-assistant/core/pull/47384 +[#47401]: https://github.com/home-assistant/core/pull/47401 +[#47403]: https://github.com/home-assistant/core/pull/47403 +[#47411]: https://github.com/home-assistant/core/pull/47411 +[#47413]: https://github.com/home-assistant/core/pull/47413 +[#47414]: https://github.com/home-assistant/core/pull/47414 +[#47426]: https://github.com/home-assistant/core/pull/47426 +[#47431]: https://github.com/home-assistant/core/pull/47431 +[#47441]: https://github.com/home-assistant/core/pull/47441 +[#47451]: https://github.com/home-assistant/core/pull/47451 +[#47456]: https://github.com/home-assistant/core/pull/47456 +[#47470]: https://github.com/home-assistant/core/pull/47470 +[#47471]: https://github.com/home-assistant/core/pull/47471 +[#47477]: https://github.com/home-assistant/core/pull/47477 +[#47479]: https://github.com/home-assistant/core/pull/47479 +[#47480]: https://github.com/home-assistant/core/pull/47480 +[#47482]: https://github.com/home-assistant/core/pull/47482 +[#47484]: https://github.com/home-assistant/core/pull/47484 +[#47487]: https://github.com/home-assistant/core/pull/47487 +[#47488]: https://github.com/home-assistant/core/pull/47488 +[#47491]: https://github.com/home-assistant/core/pull/47491 +[#47492]: https://github.com/home-assistant/core/pull/47492 +[#47500]: https://github.com/home-assistant/core/pull/47500 +[#47501]: https://github.com/home-assistant/core/pull/47501 +[#47509]: https://github.com/home-assistant/core/pull/47509 +[#47520]: https://github.com/home-assistant/core/pull/47520 +[#47526]: https://github.com/home-assistant/core/pull/47526 +[#47528]: https://github.com/home-assistant/core/pull/47528 +[#47532]: https://github.com/home-assistant/core/pull/47532 +[#47534]: https://github.com/home-assistant/core/pull/47534 +[#47537]: https://github.com/home-assistant/core/pull/47537 +[#47539]: https://github.com/home-assistant/core/pull/47539 +[#47542]: https://github.com/home-assistant/core/pull/47542 +[#47544]: https://github.com/home-assistant/core/pull/47544 +[#47545]: https://github.com/home-assistant/core/pull/47545 +[#47547]: https://github.com/home-assistant/core/pull/47547 +[#47549]: https://github.com/home-assistant/core/pull/47549 +[#47555]: https://github.com/home-assistant/core/pull/47555 +[#47557]: https://github.com/home-assistant/core/pull/47557 +[#47559]: https://github.com/home-assistant/core/pull/47559 +[#47572]: https://github.com/home-assistant/core/pull/47572 +[#47574]: https://github.com/home-assistant/core/pull/47574 +[#47583]: https://github.com/home-assistant/core/pull/47583 +[#47584]: https://github.com/home-assistant/core/pull/47584 +[#47586]: https://github.com/home-assistant/core/pull/47586 +[#47589]: https://github.com/home-assistant/core/pull/47589 +[#47590]: https://github.com/home-assistant/core/pull/47590 +[#47601]: https://github.com/home-assistant/core/pull/47601 +[#47607]: https://github.com/home-assistant/core/pull/47607 +[#47608]: https://github.com/home-assistant/core/pull/47608 +[#47612]: https://github.com/home-assistant/core/pull/47612 +[#47615]: https://github.com/home-assistant/core/pull/47615 +[#47616]: https://github.com/home-assistant/core/pull/47616 +[#47617]: https://github.com/home-assistant/core/pull/47617 +[#47618]: https://github.com/home-assistant/core/pull/47618 +[#47619]: https://github.com/home-assistant/core/pull/47619 +[#47621]: https://github.com/home-assistant/core/pull/47621 +[#47626]: https://github.com/home-assistant/core/pull/47626 +[#47627]: https://github.com/home-assistant/core/pull/47627 +[#47632]: https://github.com/home-assistant/core/pull/47632 +[#47638]: https://github.com/home-assistant/core/pull/47638 +[#47639]: https://github.com/home-assistant/core/pull/47639 +[#47641]: https://github.com/home-assistant/core/pull/47641 +[#47642]: https://github.com/home-assistant/core/pull/47642 +[#47643]: https://github.com/home-assistant/core/pull/47643 +[#47651]: https://github.com/home-assistant/core/pull/47651 +[#47652]: https://github.com/home-assistant/core/pull/47652 +[#47653]: https://github.com/home-assistant/core/pull/47653 +[#47654]: https://github.com/home-assistant/core/pull/47654 +[#47655]: https://github.com/home-assistant/core/pull/47655 +[#47664]: https://github.com/home-assistant/core/pull/47664 +[#47666]: https://github.com/home-assistant/core/pull/47666 +[#47668]: https://github.com/home-assistant/core/pull/47668 +[#47669]: https://github.com/home-assistant/core/pull/47669 +[#47676]: https://github.com/home-assistant/core/pull/47676 +[#47680]: https://github.com/home-assistant/core/pull/47680 +[#47681]: https://github.com/home-assistant/core/pull/47681 +[#47683]: https://github.com/home-assistant/core/pull/47683 +[#47684]: https://github.com/home-assistant/core/pull/47684 +[#47696]: https://github.com/home-assistant/core/pull/47696 +[#47702]: https://github.com/home-assistant/core/pull/47702 +[#47705]: https://github.com/home-assistant/core/pull/47705 +[#47706]: https://github.com/home-assistant/core/pull/47706 +[#47707]: https://github.com/home-assistant/core/pull/47707 +[#47718]: https://github.com/home-assistant/core/pull/47718 +[#47719]: https://github.com/home-assistant/core/pull/47719 +[#47720]: https://github.com/home-assistant/core/pull/47720 +[#47721]: https://github.com/home-assistant/core/pull/47721 +[#47722]: https://github.com/home-assistant/core/pull/47722 +[#47725]: https://github.com/home-assistant/core/pull/47725 +[#47729]: https://github.com/home-assistant/core/pull/47729 +[#47732]: https://github.com/home-assistant/core/pull/47732 +[#47736]: https://github.com/home-assistant/core/pull/47736 +[#47737]: https://github.com/home-assistant/core/pull/47737 +[#47739]: https://github.com/home-assistant/core/pull/47739 +[#47741]: https://github.com/home-assistant/core/pull/47741 +[#47744]: https://github.com/home-assistant/core/pull/47744 +[#47745]: https://github.com/home-assistant/core/pull/47745 +[#47746]: https://github.com/home-assistant/core/pull/47746 +[#47754]: https://github.com/home-assistant/core/pull/47754 +[#47756]: https://github.com/home-assistant/core/pull/47756 +[#47757]: https://github.com/home-assistant/core/pull/47757 +[#47758]: https://github.com/home-assistant/core/pull/47758 +[#47759]: https://github.com/home-assistant/core/pull/47759 +[#47760]: https://github.com/home-assistant/core/pull/47760 +[#47770]: https://github.com/home-assistant/core/pull/47770 +[#47771]: https://github.com/home-assistant/core/pull/47771 +[#47774]: https://github.com/home-assistant/core/pull/47774 +[#47778]: https://github.com/home-assistant/core/pull/47778 +[#47779]: https://github.com/home-assistant/core/pull/47779 +[#47783]: https://github.com/home-assistant/core/pull/47783 +[#47785]: https://github.com/home-assistant/core/pull/47785 +[#47790]: https://github.com/home-assistant/core/pull/47790 +[#47791]: https://github.com/home-assistant/core/pull/47791 +[#47795]: https://github.com/home-assistant/core/pull/47795 +[#47798]: https://github.com/home-assistant/core/pull/47798 +[#47800]: https://github.com/home-assistant/core/pull/47800 +[#47802]: https://github.com/home-assistant/core/pull/47802 +[#47803]: https://github.com/home-assistant/core/pull/47803 +[#47806]: https://github.com/home-assistant/core/pull/47806 +[#47808]: https://github.com/home-assistant/core/pull/47808 +[#47809]: https://github.com/home-assistant/core/pull/47809 +[#47812]: https://github.com/home-assistant/core/pull/47812 +[#47818]: https://github.com/home-assistant/core/pull/47818 +[#47819]: https://github.com/home-assistant/core/pull/47819 +[#47820]: https://github.com/home-assistant/core/pull/47820 +[#47821]: https://github.com/home-assistant/core/pull/47821 +[#47822]: https://github.com/home-assistant/core/pull/47822 +[#47823]: https://github.com/home-assistant/core/pull/47823 +[#47824]: https://github.com/home-assistant/core/pull/47824 +[#47825]: https://github.com/home-assistant/core/pull/47825 +[#47826]: https://github.com/home-assistant/core/pull/47826 +[#47827]: https://github.com/home-assistant/core/pull/47827 +[#47829]: https://github.com/home-assistant/core/pull/47829 +[#47830]: https://github.com/home-assistant/core/pull/47830 +[#47831]: https://github.com/home-assistant/core/pull/47831 +[#47832]: https://github.com/home-assistant/core/pull/47832 +[#47836]: https://github.com/home-assistant/core/pull/47836 +[#47837]: https://github.com/home-assistant/core/pull/47837 +[#47840]: https://github.com/home-assistant/core/pull/47840 +[#47844]: https://github.com/home-assistant/core/pull/47844 +[#47846]: https://github.com/home-assistant/core/pull/47846 +[#47848]: https://github.com/home-assistant/core/pull/47848 +[#47851]: https://github.com/home-assistant/core/pull/47851 +[#47852]: https://github.com/home-assistant/core/pull/47852 +[#47854]: https://github.com/home-assistant/core/pull/47854 +[#47856]: https://github.com/home-assistant/core/pull/47856 +[#47857]: https://github.com/home-assistant/core/pull/47857 +[#47858]: https://github.com/home-assistant/core/pull/47858 +[#47869]: https://github.com/home-assistant/core/pull/47869 +[#47870]: https://github.com/home-assistant/core/pull/47870 +[#47871]: https://github.com/home-assistant/core/pull/47871 +[#47872]: https://github.com/home-assistant/core/pull/47872 +[#47873]: https://github.com/home-assistant/core/pull/47873 +[#47876]: https://github.com/home-assistant/core/pull/47876 +[#47880]: https://github.com/home-assistant/core/pull/47880 +[#47886]: https://github.com/home-assistant/core/pull/47886 +[#47890]: https://github.com/home-assistant/core/pull/47890 +[#47892]: https://github.com/home-assistant/core/pull/47892 +[#47899]: https://github.com/home-assistant/core/pull/47899 +[#47903]: https://github.com/home-assistant/core/pull/47903 +[#47905]: https://github.com/home-assistant/core/pull/47905 +[#47906]: https://github.com/home-assistant/core/pull/47906 +[#47907]: https://github.com/home-assistant/core/pull/47907 +[#47910]: https://github.com/home-assistant/core/pull/47910 +[#47913]: https://github.com/home-assistant/core/pull/47913 +[#47915]: https://github.com/home-assistant/core/pull/47915 +[#47917]: https://github.com/home-assistant/core/pull/47917 +[#47919]: https://github.com/home-assistant/core/pull/47919 +[#47927]: https://github.com/home-assistant/core/pull/47927 +[#47929]: https://github.com/home-assistant/core/pull/47929 +[#47930]: https://github.com/home-assistant/core/pull/47930 +[#47932]: https://github.com/home-assistant/core/pull/47932 +[#47933]: https://github.com/home-assistant/core/pull/47933 +[#47935]: https://github.com/home-assistant/core/pull/47935 +[#47940]: https://github.com/home-assistant/core/pull/47940 +[#47942]: https://github.com/home-assistant/core/pull/47942 +[#47944]: https://github.com/home-assistant/core/pull/47944 +[#47945]: https://github.com/home-assistant/core/pull/47945 +[#47946]: https://github.com/home-assistant/core/pull/47946 +[#47949]: https://github.com/home-assistant/core/pull/47949 +[#47953]: https://github.com/home-assistant/core/pull/47953 +[#47954]: https://github.com/home-assistant/core/pull/47954 +[#47956]: https://github.com/home-assistant/core/pull/47956 +[#47957]: https://github.com/home-assistant/core/pull/47957 +[#47960]: https://github.com/home-assistant/core/pull/47960 +[#47964]: https://github.com/home-assistant/core/pull/47964 +[#47966]: https://github.com/home-assistant/core/pull/47966 +[#47967]: https://github.com/home-assistant/core/pull/47967 +[#47970]: https://github.com/home-assistant/core/pull/47970 +[#47972]: https://github.com/home-assistant/core/pull/47972 +[#47973]: https://github.com/home-assistant/core/pull/47973 +[#47975]: https://github.com/home-assistant/core/pull/47975 +[#47980]: https://github.com/home-assistant/core/pull/47980 +[#47990]: https://github.com/home-assistant/core/pull/47990 +[#47993]: https://github.com/home-assistant/core/pull/47993 +[#47996]: https://github.com/home-assistant/core/pull/47996 +[#47997]: https://github.com/home-assistant/core/pull/47997 +[#48000]: https://github.com/home-assistant/core/pull/48000 +[#48001]: https://github.com/home-assistant/core/pull/48001 +[#48005]: https://github.com/home-assistant/core/pull/48005 +[#48009]: https://github.com/home-assistant/core/pull/48009 +[#48012]: https://github.com/home-assistant/core/pull/48012 +[#48013]: https://github.com/home-assistant/core/pull/48013 +[#48014]: https://github.com/home-assistant/core/pull/48014 +[#48015]: https://github.com/home-assistant/core/pull/48015 +[#48020]: https://github.com/home-assistant/core/pull/48020 +[#48029]: https://github.com/home-assistant/core/pull/48029 +[#48031]: https://github.com/home-assistant/core/pull/48031 +[#48033]: https://github.com/home-assistant/core/pull/48033 +[#48037]: https://github.com/home-assistant/core/pull/48037 +[#48038]: https://github.com/home-assistant/core/pull/48038 +[#48039]: https://github.com/home-assistant/core/pull/48039 +[#48041]: https://github.com/home-assistant/core/pull/48041 +[#48044]: https://github.com/home-assistant/core/pull/48044 +[#48045]: https://github.com/home-assistant/core/pull/48045 +[#48046]: https://github.com/home-assistant/core/pull/48046 +[#48047]: https://github.com/home-assistant/core/pull/48047 +[#48050]: https://github.com/home-assistant/core/pull/48050 +[#48051]: https://github.com/home-assistant/core/pull/48051 +[#48053]: https://github.com/home-assistant/core/pull/48053 +[#48054]: https://github.com/home-assistant/core/pull/48054 +[#48055]: https://github.com/home-assistant/core/pull/48055 +[#48056]: https://github.com/home-assistant/core/pull/48056 +[#48057]: https://github.com/home-assistant/core/pull/48057 +[#48058]: https://github.com/home-assistant/core/pull/48058 +[#48059]: https://github.com/home-assistant/core/pull/48059 +[#48062]: https://github.com/home-assistant/core/pull/48062 +[#48064]: https://github.com/home-assistant/core/pull/48064 +[#48065]: https://github.com/home-assistant/core/pull/48065 +[#48071]: https://github.com/home-assistant/core/pull/48071 +[#48072]: https://github.com/home-assistant/core/pull/48072 +[#48073]: https://github.com/home-assistant/core/pull/48073 +[#48076]: https://github.com/home-assistant/core/pull/48076 +[#48077]: https://github.com/home-assistant/core/pull/48077 +[#48078]: https://github.com/home-assistant/core/pull/48078 +[#48079]: https://github.com/home-assistant/core/pull/48079 +[#48081]: https://github.com/home-assistant/core/pull/48081 +[#48087]: https://github.com/home-assistant/core/pull/48087 +[#48088]: https://github.com/home-assistant/core/pull/48088 +[#48089]: https://github.com/home-assistant/core/pull/48089 +[#48090]: https://github.com/home-assistant/core/pull/48090 +[#48091]: https://github.com/home-assistant/core/pull/48091 +[#48094]: https://github.com/home-assistant/core/pull/48094 +[#48096]: https://github.com/home-assistant/core/pull/48096 +[#48097]: https://github.com/home-assistant/core/pull/48097 +[#48100]: https://github.com/home-assistant/core/pull/48100 +[#48106]: https://github.com/home-assistant/core/pull/48106 +[#48111]: https://github.com/home-assistant/core/pull/48111 +[#48112]: https://github.com/home-assistant/core/pull/48112 +[#48119]: https://github.com/home-assistant/core/pull/48119 +[#48125]: https://github.com/home-assistant/core/pull/48125 +[#48126]: https://github.com/home-assistant/core/pull/48126 +[#48127]: https://github.com/home-assistant/core/pull/48127 +[#48128]: https://github.com/home-assistant/core/pull/48128 +[#48129]: https://github.com/home-assistant/core/pull/48129 +[#48130]: https://github.com/home-assistant/core/pull/48130 +[#48132]: https://github.com/home-assistant/core/pull/48132 +[#48133]: https://github.com/home-assistant/core/pull/48133 +[#48135]: https://github.com/home-assistant/core/pull/48135 +[#48136]: https://github.com/home-assistant/core/pull/48136 +[#48140]: https://github.com/home-assistant/core/pull/48140 +[#48141]: https://github.com/home-assistant/core/pull/48141 +[#48142]: https://github.com/home-assistant/core/pull/48142 +[#48146]: https://github.com/home-assistant/core/pull/48146 +[#48147]: https://github.com/home-assistant/core/pull/48147 +[#48149]: https://github.com/home-assistant/core/pull/48149 +[#48150]: https://github.com/home-assistant/core/pull/48150 +[#48152]: https://github.com/home-assistant/core/pull/48152 +[#48161]: https://github.com/home-assistant/core/pull/48161 +[#48162]: https://github.com/home-assistant/core/pull/48162 +[#48163]: https://github.com/home-assistant/core/pull/48163 +[#48167]: https://github.com/home-assistant/core/pull/48167 +[#48168]: https://github.com/home-assistant/core/pull/48168 +[#48169]: https://github.com/home-assistant/core/pull/48169 +[#48170]: https://github.com/home-assistant/core/pull/48170 +[#48175]: https://github.com/home-assistant/core/pull/48175 +[#48176]: https://github.com/home-assistant/core/pull/48176 +[#48178]: https://github.com/home-assistant/core/pull/48178 +[#48181]: https://github.com/home-assistant/core/pull/48181 +[#48184]: https://github.com/home-assistant/core/pull/48184 +[#48187]: https://github.com/home-assistant/core/pull/48187 +[#48189]: https://github.com/home-assistant/core/pull/48189 +[#48193]: https://github.com/home-assistant/core/pull/48193 +[#48196]: https://github.com/home-assistant/core/pull/48196 +[#48199]: https://github.com/home-assistant/core/pull/48199 +[#48201]: https://github.com/home-assistant/core/pull/48201 +[#48202]: https://github.com/home-assistant/core/pull/48202 +[#48203]: https://github.com/home-assistant/core/pull/48203 +[#48205]: https://github.com/home-assistant/core/pull/48205 +[#48209]: https://github.com/home-assistant/core/pull/48209 +[#48210]: https://github.com/home-assistant/core/pull/48210 +[#48211]: https://github.com/home-assistant/core/pull/48211 +[#48212]: https://github.com/home-assistant/core/pull/48212 +[#48213]: https://github.com/home-assistant/core/pull/48213 +[#48214]: https://github.com/home-assistant/core/pull/48214 +[#48215]: https://github.com/home-assistant/core/pull/48215 +[#48216]: https://github.com/home-assistant/core/pull/48216 +[#48217]: https://github.com/home-assistant/core/pull/48217 +[#48218]: https://github.com/home-assistant/core/pull/48218 +[#48219]: https://github.com/home-assistant/core/pull/48219 +[#48220]: https://github.com/home-assistant/core/pull/48220 +[#48223]: https://github.com/home-assistant/core/pull/48223 +[#48224]: https://github.com/home-assistant/core/pull/48224 +[#48230]: https://github.com/home-assistant/core/pull/48230 +[#48231]: https://github.com/home-assistant/core/pull/48231 +[#48232]: https://github.com/home-assistant/core/pull/48232 +[#48233]: https://github.com/home-assistant/core/pull/48233 +[#48235]: https://github.com/home-assistant/core/pull/48235 +[#48242]: https://github.com/home-assistant/core/pull/48242 +[#48243]: https://github.com/home-assistant/core/pull/48243 +[#48244]: https://github.com/home-assistant/core/pull/48244 +[#48245]: https://github.com/home-assistant/core/pull/48245 +[#48250]: https://github.com/home-assistant/core/pull/48250 +[#48253]: https://github.com/home-assistant/core/pull/48253 +[#48254]: https://github.com/home-assistant/core/pull/48254 +[#48256]: https://github.com/home-assistant/core/pull/48256 +[#48257]: https://github.com/home-assistant/core/pull/48257 +[#48260]: https://github.com/home-assistant/core/pull/48260 +[#48264]: https://github.com/home-assistant/core/pull/48264 +[#48268]: https://github.com/home-assistant/core/pull/48268 +[#48269]: https://github.com/home-assistant/core/pull/48269 +[#48272]: https://github.com/home-assistant/core/pull/48272 +[#48273]: https://github.com/home-assistant/core/pull/48273 +[#48276]: https://github.com/home-assistant/core/pull/48276 +[#48277]: https://github.com/home-assistant/core/pull/48277 +[#48279]: https://github.com/home-assistant/core/pull/48279 +[#48284]: https://github.com/home-assistant/core/pull/48284 +[#48288]: https://github.com/home-assistant/core/pull/48288 +[#48291]: https://github.com/home-assistant/core/pull/48291 +[#48292]: https://github.com/home-assistant/core/pull/48292 +[#48296]: https://github.com/home-assistant/core/pull/48296 +[#48298]: https://github.com/home-assistant/core/pull/48298 +[#48302]: https://github.com/home-assistant/core/pull/48302 +[#48303]: https://github.com/home-assistant/core/pull/48303 +[#48304]: https://github.com/home-assistant/core/pull/48304 +[#48306]: https://github.com/home-assistant/core/pull/48306 +[#48307]: https://github.com/home-assistant/core/pull/48307 +[#48311]: https://github.com/home-assistant/core/pull/48311 +[#48313]: https://github.com/home-assistant/core/pull/48313 +[#48316]: https://github.com/home-assistant/core/pull/48316 +[#48317]: https://github.com/home-assistant/core/pull/48317 +[#48319]: https://github.com/home-assistant/core/pull/48319 +[#48321]: https://github.com/home-assistant/core/pull/48321 +[#48324]: https://github.com/home-assistant/core/pull/48324 +[#48326]: https://github.com/home-assistant/core/pull/48326 +[#48328]: https://github.com/home-assistant/core/pull/48328 +[#48330]: https://github.com/home-assistant/core/pull/48330 +[#48333]: https://github.com/home-assistant/core/pull/48333 +[#48336]: https://github.com/home-assistant/core/pull/48336 +[#48339]: https://github.com/home-assistant/core/pull/48339 +[#48340]: https://github.com/home-assistant/core/pull/48340 +[#48343]: https://github.com/home-assistant/core/pull/48343 +[#48347]: https://github.com/home-assistant/core/pull/48347 +[#48349]: https://github.com/home-assistant/core/pull/48349 +[#48350]: https://github.com/home-assistant/core/pull/48350 +[#48351]: https://github.com/home-assistant/core/pull/48351 +[#48353]: https://github.com/home-assistant/core/pull/48353 +[#48355]: https://github.com/home-assistant/core/pull/48355 +[#48364]: https://github.com/home-assistant/core/pull/48364 +[#48365]: https://github.com/home-assistant/core/pull/48365 +[#48366]: https://github.com/home-assistant/core/pull/48366 +[#48367]: https://github.com/home-assistant/core/pull/48367 +[#48368]: https://github.com/home-assistant/core/pull/48368 +[#48369]: https://github.com/home-assistant/core/pull/48369 +[#48370]: https://github.com/home-assistant/core/pull/48370 +[#48371]: https://github.com/home-assistant/core/pull/48371 +[#48372]: https://github.com/home-assistant/core/pull/48372 +[#48373]: https://github.com/home-assistant/core/pull/48373 +[#48374]: https://github.com/home-assistant/core/pull/48374 +[#48375]: https://github.com/home-assistant/core/pull/48375 +[#48377]: https://github.com/home-assistant/core/pull/48377 +[#48378]: https://github.com/home-assistant/core/pull/48378 +[#48381]: https://github.com/home-assistant/core/pull/48381 +[#48382]: https://github.com/home-assistant/core/pull/48382 +[#48383]: https://github.com/home-assistant/core/pull/48383 +[#48387]: https://github.com/home-assistant/core/pull/48387 +[#48388]: https://github.com/home-assistant/core/pull/48388 +[#48389]: https://github.com/home-assistant/core/pull/48389 +[#48390]: https://github.com/home-assistant/core/pull/48390 +[#48391]: https://github.com/home-assistant/core/pull/48391 +[#48392]: https://github.com/home-assistant/core/pull/48392 +[#48393]: https://github.com/home-assistant/core/pull/48393 +[#48400]: https://github.com/home-assistant/core/pull/48400 +[#48401]: https://github.com/home-assistant/core/pull/48401 +[#48402]: https://github.com/home-assistant/core/pull/48402 +[#48403]: https://github.com/home-assistant/core/pull/48403 +[#48407]: https://github.com/home-assistant/core/pull/48407 +[#48408]: https://github.com/home-assistant/core/pull/48408 +[#48411]: https://github.com/home-assistant/core/pull/48411 +[#48413]: https://github.com/home-assistant/core/pull/48413 +[#48415]: https://github.com/home-assistant/core/pull/48415 +[#48417]: https://github.com/home-assistant/core/pull/48417 +[#48418]: https://github.com/home-assistant/core/pull/48418 +[#48420]: https://github.com/home-assistant/core/pull/48420 +[#48421]: https://github.com/home-assistant/core/pull/48421 +[#48422]: https://github.com/home-assistant/core/pull/48422 +[#48425]: https://github.com/home-assistant/core/pull/48425 +[#48429]: https://github.com/home-assistant/core/pull/48429 +[#48430]: https://github.com/home-assistant/core/pull/48430 +[#48433]: https://github.com/home-assistant/core/pull/48433 +[#48434]: https://github.com/home-assistant/core/pull/48434 +[#48437]: https://github.com/home-assistant/core/pull/48437 +[#48438]: https://github.com/home-assistant/core/pull/48438 +[#48439]: https://github.com/home-assistant/core/pull/48439 +[#48441]: https://github.com/home-assistant/core/pull/48441 +[#48444]: https://github.com/home-assistant/core/pull/48444 +[#48445]: https://github.com/home-assistant/core/pull/48445 +[#48447]: https://github.com/home-assistant/core/pull/48447 +[#48449]: https://github.com/home-assistant/core/pull/48449 +[#48450]: https://github.com/home-assistant/core/pull/48450 +[#48451]: https://github.com/home-assistant/core/pull/48451 +[#48453]: https://github.com/home-assistant/core/pull/48453 +[#48454]: https://github.com/home-assistant/core/pull/48454 +[#48455]: https://github.com/home-assistant/core/pull/48455 +[#48456]: https://github.com/home-assistant/core/pull/48456 +[#48457]: https://github.com/home-assistant/core/pull/48457 +[#48458]: https://github.com/home-assistant/core/pull/48458 +[#48461]: https://github.com/home-assistant/core/pull/48461 +[#48462]: https://github.com/home-assistant/core/pull/48462 +[#48464]: https://github.com/home-assistant/core/pull/48464 +[#48465]: https://github.com/home-assistant/core/pull/48465 +[#48467]: https://github.com/home-assistant/core/pull/48467 +[#48468]: https://github.com/home-assistant/core/pull/48468 +[#48469]: https://github.com/home-assistant/core/pull/48469 +[#48471]: https://github.com/home-assistant/core/pull/48471 +[#48475]: https://github.com/home-assistant/core/pull/48475 +[#48476]: https://github.com/home-assistant/core/pull/48476 +[#48478]: https://github.com/home-assistant/core/pull/48478 +[#48482]: https://github.com/home-assistant/core/pull/48482 +[#48484]: https://github.com/home-assistant/core/pull/48484 +[#48486]: https://github.com/home-assistant/core/pull/48486 +[#48487]: https://github.com/home-assistant/core/pull/48487 +[#48488]: https://github.com/home-assistant/core/pull/48488 +[#48489]: https://github.com/home-assistant/core/pull/48489 +[#48490]: https://github.com/home-assistant/core/pull/48490 +[#48491]: https://github.com/home-assistant/core/pull/48491 +[#48492]: https://github.com/home-assistant/core/pull/48492 +[#48493]: https://github.com/home-assistant/core/pull/48493 +[#48494]: https://github.com/home-assistant/core/pull/48494 +[#48498]: https://github.com/home-assistant/core/pull/48498 +[#48499]: https://github.com/home-assistant/core/pull/48499 +[#48500]: https://github.com/home-assistant/core/pull/48500 +[#48502]: https://github.com/home-assistant/core/pull/48502 +[#48503]: https://github.com/home-assistant/core/pull/48503 +[#48504]: https://github.com/home-assistant/core/pull/48504 +[#48505]: https://github.com/home-assistant/core/pull/48505 +[#48506]: https://github.com/home-assistant/core/pull/48506 +[#48507]: https://github.com/home-assistant/core/pull/48507 +[#48508]: https://github.com/home-assistant/core/pull/48508 +[#48512]: https://github.com/home-assistant/core/pull/48512 +[#48514]: https://github.com/home-assistant/core/pull/48514 +[#48518]: https://github.com/home-assistant/core/pull/48518 +[#48520]: https://github.com/home-assistant/core/pull/48520 +[#48521]: https://github.com/home-assistant/core/pull/48521 +[#48522]: https://github.com/home-assistant/core/pull/48522 +[#48526]: https://github.com/home-assistant/core/pull/48526 +[#48527]: https://github.com/home-assistant/core/pull/48527 +[#48528]: https://github.com/home-assistant/core/pull/48528 +[#48533]: https://github.com/home-assistant/core/pull/48533 +[#48537]: https://github.com/home-assistant/core/pull/48537 +[#48541]: https://github.com/home-assistant/core/pull/48541 +[#48542]: https://github.com/home-assistant/core/pull/48542 +[#48546]: https://github.com/home-assistant/core/pull/48546 +[#48549]: https://github.com/home-assistant/core/pull/48549 +[#48552]: https://github.com/home-assistant/core/pull/48552 +[#48553]: https://github.com/home-assistant/core/pull/48553 +[#48566]: https://github.com/home-assistant/core/pull/48566 +[#48574]: https://github.com/home-assistant/core/pull/48574 +[#48575]: https://github.com/home-assistant/core/pull/48575 +[#48576]: https://github.com/home-assistant/core/pull/48576 +[#48579]: https://github.com/home-assistant/core/pull/48579 +[#48581]: https://github.com/home-assistant/core/pull/48581 +[#48585]: https://github.com/home-assistant/core/pull/48585 +[#48597]: https://github.com/home-assistant/core/pull/48597 +[#48600]: https://github.com/home-assistant/core/pull/48600 +[#48603]: https://github.com/home-assistant/core/pull/48603 +[#48607]: https://github.com/home-assistant/core/pull/48607 +[#48609]: https://github.com/home-assistant/core/pull/48609 +[#48610]: https://github.com/home-assistant/core/pull/48610 +[#48620]: https://github.com/home-assistant/core/pull/48620 +[#48631]: https://github.com/home-assistant/core/pull/48631 +[#48635]: https://github.com/home-assistant/core/pull/48635 +[#48639]: https://github.com/home-assistant/core/pull/48639 +[#48644]: https://github.com/home-assistant/core/pull/48644 +[#48645]: https://github.com/home-assistant/core/pull/48645 +[#48647]: https://github.com/home-assistant/core/pull/48647 +[#48660]: https://github.com/home-assistant/core/pull/48660 +[#48667]: https://github.com/home-assistant/core/pull/48667 +[#48682]: https://github.com/home-assistant/core/pull/48682 +[#48691]: https://github.com/home-assistant/core/pull/48691 +[#48710]: https://github.com/home-assistant/core/pull/48710 +[#48713]: https://github.com/home-assistant/core/pull/48713 +[#48714]: https://github.com/home-assistant/core/pull/48714 +[#48718]: https://github.com/home-assistant/core/pull/48718 +[#48719]: https://github.com/home-assistant/core/pull/48719 +[#48733]: https://github.com/home-assistant/core/pull/48733 +[#48734]: https://github.com/home-assistant/core/pull/48734 +[#48741]: https://github.com/home-assistant/core/pull/48741 +[#48742]: https://github.com/home-assistant/core/pull/48742 +[#48748]: https://github.com/home-assistant/core/pull/48748 +[#48749]: https://github.com/home-assistant/core/pull/48749 +[#48753]: https://github.com/home-assistant/core/pull/48753 +[#48755]: https://github.com/home-assistant/core/pull/48755 +[#48756]: https://github.com/home-assistant/core/pull/48756 +[#48758]: https://github.com/home-assistant/core/pull/48758 +[#48763]: https://github.com/home-assistant/core/pull/48763 +[#48765]: https://github.com/home-assistant/core/pull/48765 +[#48771]: https://github.com/home-assistant/core/pull/48771 +[#48778]: https://github.com/home-assistant/core/pull/48778 +[@Adminiuga]: https://github.com/Adminiuga +[@Antoni-Czaplicki]: https://github.com/Antoni-Czaplicki +[@B-Hartley]: https://github.com/B-Hartley +[@BoresXP]: https://github.com/BoresXP +[@Cooper-Dale]: https://github.com/Cooper-Dale +[@CurrentThread]: https://github.com/CurrentThread +[@D3v01dZA]: https://github.com/D3v01dZA +[@Danielhiversen]: https://github.com/Danielhiversen +[@FHeilmann]: https://github.com/FHeilmann +[@FidgetyRat]: https://github.com/FidgetyRat +[@G-Two]: https://github.com/G-Two +[@KJonline]: https://github.com/KJonline +[@Kane610]: https://github.com/Kane610 +[@KapJI]: https://github.com/KapJI +[@KartoffelToby]: https://github.com/KartoffelToby +[@LEJOUI]: https://github.com/LEJOUI +[@Martidjen]: https://github.com/Martidjen +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MatsNl]: https://github.com/MatsNl +[@Melantrix]: https://github.com/Melantrix +[@N1c093]: https://github.com/N1c093 +[@Nick-Adams-AU]: https://github.com/Nick-Adams-AU +[@Noltari]: https://github.com/Noltari +[@OttoWinter]: https://github.com/OttoWinter +[@PimDoos]: https://github.com/PimDoos +[@Quentame]: https://github.com/Quentame +[@RadekHvizdos]: https://github.com/RadekHvizdos +[@Shutgun]: https://github.com/Shutgun +[@Socalix]: https://github.com/Socalix +[@StevenLooman]: https://github.com/StevenLooman +[@SukramJ]: https://github.com/SukramJ +[@TheNetAdmin]: https://github.com/TheNetAdmin +[@abmantis]: https://github.com/abmantis +[@adamjernst]: https://github.com/adamjernst +[@agners]: https://github.com/agners +[@alandtse]: https://github.com/alandtse +[@alengwenus]: https://github.com/alengwenus +[@allenporter]: https://github.com/allenporter +[@amelchio]: https://github.com/amelchio +[@andreas-amlabs]: https://github.com/andreas-amlabs +[@andreasbrett]: https://github.com/andreasbrett +[@arturdobo]: https://github.com/arturdobo +[@austinmroczek]: https://github.com/austinmroczek +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bdr99]: https://github.com/bdr99 +[@bdraco]: https://github.com/bdraco +[@bernimoses]: https://github.com/bernimoses +[@bestlibre]: https://github.com/bestlibre +[@bieniu]: https://github.com/bieniu +[@billsq]: https://github.com/billsq +[@blejdfist]: https://github.com/blejdfist +[@blueshiftlabs]: https://github.com/blueshiftlabs +[@bramkragten]: https://github.com/bramkragten +[@c99koder]: https://github.com/c99koder +[@cdce8p]: https://github.com/cdce8p +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@chemaaa]: https://github.com/chemaaa +[@chemelli74]: https://github.com/chemelli74 +[@chilicheech]: https://github.com/chilicheech +[@chpego]: https://github.com/chpego +[@clssn]: https://github.com/clssn +[@colinodell]: https://github.com/colinodell +[@conflipper]: https://github.com/conflipper +[@corneyl]: https://github.com/corneyl +[@csoltenborn]: https://github.com/csoltenborn +[@ctalkington]: https://github.com/ctalkington +[@danielperna84]: https://github.com/danielperna84 +[@decompil3d]: https://github.com/decompil3d +[@dermotduffy]: https://github.com/dermotduffy +[@dewet22]: https://github.com/dewet22 +[@dgomes]: https://github.com/dgomes +[@dieselrabbit]: https://github.com/dieselrabbit +[@djtimca]: https://github.com/djtimca +[@dmcc]: https://github.com/dmcc +[@dmulcahey]: https://github.com/dmulcahey +[@drzony]: https://github.com/drzony +[@eifinger]: https://github.com/eifinger +[@eltociear]: https://github.com/eltociear +[@elupus]: https://github.com/elupus +[@elyobelyob]: https://github.com/elyobelyob +[@emlove]: https://github.com/emlove +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@esev]: https://github.com/esev +[@fabaff]: https://github.com/fabaff +[@farmio]: https://github.com/farmio +[@felipediel]: https://github.com/felipediel +[@firstof9]: https://github.com/firstof9 +[@fredrike]: https://github.com/fredrike +[@freekode]: https://github.com/freekode +[@frenck]: https://github.com/frenck +[@fronzbot]: https://github.com/fronzbot +[@glmnet]: https://github.com/glmnet +[@hanskroner]: https://github.com/hanskroner +[@heythisisnate]: https://github.com/heythisisnate +[@hung2kgithub]: https://github.com/hung2kgithub +[@iMicknl]: https://github.com/iMicknl +[@inetAnt]: https://github.com/inetAnt +[@janiversen]: https://github.com/janiversen +[@javicalle]: https://github.com/javicalle +[@jbouwh]: https://github.com/jbouwh +[@jcam]: https://github.com/jcam +[@jdeath]: https://github.com/jdeath +[@jjlawren]: https://github.com/jjlawren +[@jnimmo]: https://github.com/jnimmo +[@joogps]: https://github.com/joogps +[@jplitza]: https://github.com/jplitza +[@jshufro]: https://github.com/jshufro +[@jugla]: https://github.com/jugla +[@keis]: https://github.com/keis +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@klada]: https://github.com/klada +[@kristianheljas]: https://github.com/kristianheljas +[@ludeeus]: https://github.com/ludeeus +[@marvin-w]: https://github.com/marvin-w +[@mburget]: https://github.com/mburget +[@mdonoughe]: https://github.com/mdonoughe +[@mdz]: https://github.com/mdz +[@mib1185]: https://github.com/mib1185 +[@miccico]: https://github.com/miccico +[@milanmeu]: https://github.com/milanmeu +[@mkeesey]: https://github.com/mkeesey +[@mptei]: https://github.com/mptei +[@natekspencer]: https://github.com/natekspencer +[@nbraem]: https://github.com/nbraem +[@newAM]: https://github.com/newAM +[@ntilley905]: https://github.com/ntilley905 +[@nzapponi]: https://github.com/nzapponi +[@ollo69]: https://github.com/ollo69 +[@papajojo]: https://github.com/papajojo +[@pavoni]: https://github.com/pavoni +[@pdecat]: https://github.com/pdecat +[@plomosits]: https://github.com/plomosits +[@postlund]: https://github.com/postlund +[@ppetru]: https://github.com/ppetru +[@rajlaud]: https://github.com/rajlaud +[@raman325]: https://github.com/raman325 +[@rlehfeld]: https://github.com/rlehfeld +[@robertdelpeut]: https://github.com/robertdelpeut +[@ronaldheft]: https://github.com/ronaldheft +[@scarface-4711]: https://github.com/scarface-4711 +[@schiermi]: https://github.com/schiermi +[@scop]: https://github.com/scop +[@scyto]: https://github.com/scyto +[@spacegaier]: https://github.com/spacegaier +[@starkillerOG]: https://github.com/starkillerOG +[@stephan192]: https://github.com/stephan192 +[@superm1]: https://github.com/superm1 +[@swilson]: https://github.com/swilson +[@sycx2]: https://github.com/sycx2 +[@systemcrash]: https://github.com/systemcrash +[@tdorsey]: https://github.com/tdorsey +[@thecode]: https://github.com/thecode +[@timmo001]: https://github.com/timmo001 +[@tkdrob]: https://github.com/tkdrob +[@unaiur]: https://github.com/unaiur +[@uvjustin]: https://github.com/uvjustin +[@vlebourl]: https://github.com/vlebourl +[@w1ll1am23]: https://github.com/w1ll1am23 +[@xonestonex]: https://github.com/xonestonex +[@youknowjack0]: https://github.com/youknowjack0 +[@zxdavb]: https://github.com/zxdavb +[accuweather docs]: /integrations/accuweather/ +[acmeda docs]: /integrations/acmeda/ +[adguard docs]: /integrations/adguard/ +[aemet docs]: /integrations/aemet/ +[agent_dvr docs]: /integrations/agent_dvr/ +[airly docs]: /integrations/airly/ +[airvisual docs]: /integrations/airvisual/ +[alarm_control_panel docs]: /integrations/alarm_control_panel/ +[alarmdecoder docs]: /integrations/alarmdecoder/ +[alexa docs]: /integrations/alexa/ +[almond docs]: /integrations/almond/ +[ambiclimate docs]: /integrations/ambiclimate/ +[ambient_station docs]: /integrations/ambient_station/ +[amcrest docs]: /integrations/amcrest/ +[analytics docs]: /integrations/analytics/ +[api docs]: /integrations/api/ +[apple_tv docs]: /integrations/apple_tv/ +[apprise docs]: /integrations/apprise/ +[aqualogic docs]: /integrations/aqualogic/ +[asuswrt docs]: /integrations/asuswrt/ +[atag docs]: /integrations/atag/ +[august docs]: /integrations/august/ +[automation docs]: /integrations/automation/ +[awair docs]: /integrations/awair/ +[axis docs]: /integrations/axis/ +[blink docs]: /integrations/blink/ +[bmp280 docs]: /integrations/bmp280/ +[bond docs]: /integrations/bond/ +[broadlink docs]: /integrations/broadlink/ +[brother docs]: /integrations/brother/ +[buienradar docs]: /integrations/buienradar/ +[cast docs]: /integrations/cast/ +[climacell docs]: /integrations/climacell/ +[climate docs]: /integrations/climate/ +[cloud docs]: /integrations/cloud/ +[command_line docs]: /integrations/command_line/ +[config docs]: /integrations/config/ +[cover docs]: /integrations/cover/ +[daikin docs]: /integrations/daikin/ +[deconz docs]: /integrations/deconz/ +[default_config docs]: /integrations/default_config/ +[demo docs]: /integrations/demo/ +[device_automation docs]: /integrations/device_automation/ +[device_tracker docs]: /integrations/device_tracker/ +[devolo_home_control docs]: /integrations/devolo_home_control/ +[dhcp docs]: /integrations/dhcp/ +[discovery docs]: /integrations/discovery/ +[dlna_dmr docs]: /integrations/dlna_dmr/ +[doorbird docs]: /integrations/doorbird/ +[dsmr_reader docs]: /integrations/dsmr_reader/ +[ecobee docs]: /integrations/ecobee/ +[econet docs]: /integrations/econet/ +[elgato docs]: /integrations/elgato/ +[elkm1 docs]: /integrations/elkm1/ +[esphome docs]: /integrations/esphome/ +[evohome docs]: /integrations/evohome/ +[faa_delays docs]: /integrations/faa_delays/ +[fan docs]: /integrations/fan/ +[fibaro docs]: /integrations/fibaro/ +[flo docs]: /integrations/flo/ +[forked_daapd docs]: /integrations/forked_daapd/ +[freebox docs]: /integrations/freebox/ +[fritzbox_callmonitor docs]: /integrations/fritzbox_callmonitor/ +[frontend docs]: /integrations/frontend/ +[generic docs]: /integrations/generic/ +[generic_thermostat docs]: /integrations/generic_thermostat/ +[gios docs]: /integrations/gios/ +[glances docs]: /integrations/glances/ +[gogogate2 docs]: /integrations/gogogate2/ +[google_assistant docs]: /integrations/google_assistant/ +[graphite docs]: /integrations/graphite/ +[griddy docs]: /integrations/griddy/ +[hangouts docs]: /integrations/hangouts/ +[harmony docs]: /integrations/harmony/ +[hassio docs]: /integrations/hassio/ +[hdmi_cec docs]: /integrations/hdmi_cec/ +[history docs]: /integrations/history/ +[hive docs]: /integrations/hive/ +[homeassistant docs]: /integrations/homeassistant/ +[homekit docs]: /integrations/homekit/ +[homekit_controller docs]: /integrations/homekit_controller/ +[homematic docs]: /integrations/homematic/ +[homematicip_cloud docs]: /integrations/homematicip_cloud/ +[homepluscontrol docs]: /integrations/homepluscontrol/ +[http docs]: /integrations/http/ +[hue docs]: /integrations/hue/ +[huisbaasje docs]: /integrations/huisbaasje/ +[humidifier docs]: /integrations/humidifier/ +[hyperion docs]: /integrations/hyperion/ +[icloud docs]: /integrations/icloud/ +[incomfort docs]: /integrations/incomfort/ +[intesishome docs]: /integrations/intesishome/ +[iqvia docs]: /integrations/iqvia/ +[izone docs]: /integrations/izone/ +[keenetic_ndms2 docs]: /integrations/keenetic_ndms2/ +[kmtronic docs]: /integrations/kmtronic/ +[knx docs]: /integrations/knx/ +[kodi docs]: /integrations/kodi/ +[konnected docs]: /integrations/konnected/ +[kulersky docs]: /integrations/kulersky/ +[lacrosse docs]: /integrations/lacrosse/ +[lastfm docs]: /integrations/lastfm/ +[lcn docs]: /integrations/lcn/ +[lg_soundbar docs]: /integrations/lg_soundbar/ +[lifx_legacy docs]: /integrations/lifx_legacy/ +[light docs]: /integrations/light/ +[litterrobot docs]: /integrations/litterrobot/ +[lock docs]: /integrations/lock/ +[logbook docs]: /integrations/logbook/ +[logger docs]: /integrations/logger/ +[luci docs]: /integrations/luci/ +[lutron_caseta docs]: /integrations/lutron_caseta/ +[lyric docs]: /integrations/lyric/ +[matrix docs]: /integrations/matrix/ +[maxcube docs]: /integrations/maxcube/ +[mazda docs]: /integrations/mazda/ +[mcp23017 docs]: /integrations/mcp23017/ +[media_extractor docs]: /integrations/media_extractor/ +[media_player docs]: /integrations/media_player/ +[met docs]: /integrations/met/ +[meteo_france docs]: /integrations/meteo_france/ +[minecraft_server docs]: /integrations/minecraft_server/ +[mobile_app docs]: /integrations/mobile_app/ +[modbus docs]: /integrations/modbus/ +[motion_blinds docs]: /integrations/motion_blinds/ +[mqtt docs]: /integrations/mqtt/ +[mqtt_room docs]: /integrations/mqtt_room/ +[mychevy docs]: /integrations/mychevy/ +[mysensors docs]: /integrations/mysensors/ +[nanoleaf docs]: /integrations/nanoleaf/ +[neato docs]: /integrations/neato/ +[nest docs]: /integrations/nest/ +[netatmo docs]: /integrations/netatmo/ +[notify_events docs]: /integrations/notify_events/ +[numato docs]: /integrations/numato/ +[nut docs]: /integrations/nut/ +[octoprint docs]: /integrations/octoprint/ +[omnilogic docs]: /integrations/omnilogic/ +[onboarding docs]: /integrations/onboarding/ +[onewire docs]: /integrations/onewire/ +[onvif docs]: /integrations/onvif/ +[opencv docs]: /integrations/opencv/ +[opentherm_gw docs]: /integrations/opentherm_gw/ +[openweathermap docs]: /integrations/openweathermap/ +[panasonic_viera docs]: /integrations/panasonic_viera/ +[philips_js docs]: /integrations/philips_js/ +[pi_hole docs]: /integrations/pi_hole/ +[ping docs]: /integrations/ping/ +[plaato docs]: /integrations/plaato/ +[plex docs]: /integrations/plex/ +[point docs]: /integrations/point/ +[prometheus docs]: /integrations/prometheus/ +[prowl docs]: /integrations/prowl/ +[qnap docs]: /integrations/qnap/ +[recorder docs]: /integrations/recorder/ +[remote docs]: /integrations/remote/ +[rest docs]: /integrations/rest/ +[rflink docs]: /integrations/rflink/ +[roku docs]: /integrations/roku/ +[roomba docs]: /integrations/roomba/ +[rpi_gpio docs]: /integrations/rpi_gpio/ +[screenlogic docs]: /integrations/screenlogic/ +[script docs]: /integrations/script/ +[search docs]: /integrations/search/ +[sendgrid docs]: /integrations/sendgrid/ +[sensor docs]: /integrations/sensor/ +[sentry docs]: /integrations/sentry/ +[seventeentrack docs]: /integrations/seventeentrack/ +[shelly docs]: /integrations/shelly/ +[smarttub docs]: /integrations/smarttub/ +[snapcast docs]: /integrations/snapcast/ +[solaredge docs]: /integrations/solaredge/ +[solax docs]: /integrations/solax/ +[somfy_mylink docs]: /integrations/somfy_mylink/ +[spotify docs]: /integrations/spotify/ +[sql docs]: /integrations/sql/ +[squeezebox docs]: /integrations/squeezebox/ +[ssdp docs]: /integrations/ssdp/ +[stream docs]: /integrations/stream/ +[subaru docs]: /integrations/subaru/ +[synology_dsm docs]: /integrations/synology_dsm/ +[tado docs]: /integrations/tado/ +[tasmota docs]: /integrations/tasmota/ +[tellduslive docs]: /integrations/tellduslive/ +[template docs]: /integrations/template/ +[tensorflow docs]: /integrations/tensorflow/ +[tesla docs]: /integrations/tesla/ +[thethingsnetwork docs]: /integrations/thethingsnetwork/ +[tibber docs]: /integrations/tibber/ +[timer docs]: /integrations/timer/ +[tod docs]: /integrations/tod/ +[todoist docs]: /integrations/todoist/ +[toon docs]: /integrations/toon/ +[tplink docs]: /integrations/tplink/ +[trace docs]: /integrations/trace/ +[tradfri docs]: /integrations/tradfri/ +[trend docs]: /integrations/trend/ +[trigger docs]: /integrations/trigger/ +[twentemilieu docs]: /integrations/twentemilieu/ +[twitter docs]: /integrations/twitter/ +[unifi docs]: /integrations/unifi/ +[universal docs]: /integrations/universal/ +[upcloud docs]: /integrations/upcloud/ +[updater docs]: /integrations/updater/ +[upnp docs]: /integrations/upnp/ +[uvc docs]: /integrations/uvc/ +[vacuum docs]: /integrations/vacuum/ +[vera docs]: /integrations/vera/ +[verisure docs]: /integrations/verisure/ +[version docs]: /integrations/version/ +[vesync docs]: /integrations/vesync/ +[vicare docs]: /integrations/vicare/ +[vlc_telnet docs]: /integrations/vlc_telnet/ +[wake_on_lan docs]: /integrations/wake_on_lan/ +[water_heater docs]: /integrations/water_heater/ +[webostv docs]: /integrations/webostv/ +[websocket_api docs]: /integrations/websocket_api/ +[wemo docs]: /integrations/wemo/ +[withings docs]: /integrations/withings/ +[wled docs]: /integrations/wled/ +[workday docs]: /integrations/workday/ +[wunderground docs]: /integrations/wunderground/ +[xbox docs]: /integrations/xbox/ +[xiaomi_miio docs]: /integrations/xiaomi_miio/ +[xmpp docs]: /integrations/xmpp/ +[yeelight docs]: /integrations/yeelight/ +[zeroconf docs]: /integrations/zeroconf/ +[zerproc docs]: /integrations/zerproc/ +[zha docs]: /integrations/zha/ +[zwave docs]: /integrations/zwave/ +[zwave_js docs]: /integrations/zwave_js/ diff --git a/source/_redirects b/source/_redirects index 658b5c6de8c..3de1f0fb905 100644 --- a/source/_redirects +++ b/source/_redirects @@ -1073,14 +1073,19 @@ /components/xiaomi /integrations/xiaomi_aqara /integrations/air_quality.xiaomi_miio /integrations/xiaomi_miio /integrations/alarm_control_panel.xiaomi_miio /integrations/xiaomi_miio +/integrations/binary_sensor.modbus /integrations/modbus +/integrations/climate.modbus /integrations/modbus +/integrations/cover.modbus /integrations/modbus /integrations/fan.xiaomi_miio /integrations/xiaomi_miio /integrations/light.xiaomi_miio /integrations/xiaomi_miio +/integrations/lovelace /lovelace /integrations/remote.xiaomi_miio /integrations/xiaomi_miio /integrations/sensor.websocket_api /integrations/websocket_api +/integrations/sensor.modbus /integrations/modbus /integrations/sensor.xiaomi_miio /integrations/xiaomi_miio +/integrations/switch.modbus /integrations/modbus /integrations/switch.xiaomi_miio /integrations/xiaomi_miio /integrations/vacuum.xiaomi_miio /integrations/xiaomi_miio -/integrations/lovelace /lovelace # Renaming components to integrations /components /integrations @@ -2015,6 +2020,7 @@ # Moved documentation /details/database /docs/backend/database /details/updater /docs/backend/updater +/docs/backend/updater /integrations/analytics /docs/ecosystem/ios/ https://companion.home-assistant.io/ /docs/ecosystem/ios/devices_file https://companion.home-assistant.io/ /docs/ecosystem/ios/integration https://companion.home-assistant.io/docs/integrations/integrations @@ -2287,3 +2293,4 @@ /components/sensor.coinmarketcap /more-info/removed-integration 301 /components/coinmarketcap /more-info/removed-integration 301 /integrations/coinmarketcap /more-info/removed-integration 301 +/integrations/griddy /more-info/removed-integration 301 diff --git a/source/images/blog/2021-04/analytics.png b/source/images/blog/2021-04/analytics.png new file mode 100644 index 00000000000..f5aea8243fc Binary files /dev/null and b/source/images/blog/2021-04/analytics.png differ diff --git a/source/images/blog/2021-04/automation-tracing.png b/source/images/blog/2021-04/automation-tracing.png new file mode 100644 index 00000000000..7c7aa1fa35c Binary files /dev/null and b/source/images/blog/2021-04/automation-tracing.png differ diff --git a/source/images/blog/2021-04/enable-analytics.png b/source/images/blog/2021-04/enable-analytics.png new file mode 100644 index 00000000000..be42f0cb50d Binary files /dev/null and b/source/images/blog/2021-04/enable-analytics.png differ diff --git a/source/images/blog/2021-04/filters.png b/source/images/blog/2021-04/filters.png new file mode 100644 index 00000000000..a668f53068e Binary files /dev/null and b/source/images/blog/2021-04/filters.png differ diff --git a/source/images/blog/2021-04/number-format.png b/source/images/blog/2021-04/number-format.png new file mode 100644 index 00000000000..8a635613af9 Binary files /dev/null and b/source/images/blog/2021-04/number-format.png differ diff --git a/source/images/blog/2021-04/scripts-selectors.png b/source/images/blog/2021-04/scripts-selectors.png new file mode 100644 index 00000000000..1ddd0d56c25 Binary files /dev/null and b/source/images/blog/2021-04/scripts-selectors.png differ diff --git a/source/images/blog/2021-04/social.png b/source/images/blog/2021-04/social.png new file mode 100644 index 00000000000..64020144d36 Binary files /dev/null and b/source/images/blog/2021-04/social.png differ diff --git a/source/images/blog/2021-04/undefined.png b/source/images/blog/2021-04/undefined.png new file mode 100644 index 00000000000..3e7219fa3c2 Binary files /dev/null and b/source/images/blog/2021-04/undefined.png differ diff --git a/source/images/blog/2021-04/zwave-device.png b/source/images/blog/2021-04/zwave-device.png new file mode 100644 index 00000000000..a4365c9b383 Binary files /dev/null and b/source/images/blog/2021-04/zwave-device.png differ