diff --git a/CODEOWNERS b/CODEOWNERS index 2183422728b..51f8be2c260 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -121,6 +121,7 @@ source/_integrations/fixer.markdown @fabaff source/_integrations/flock.markdown @fabaff source/_integrations/flume.markdown @ChrisMandich @bdraco source/_integrations/flunearyou.markdown @bachya +source/_integrations/forked_daapd.markdown @uvjustin source/_integrations/fortigate.markdown @kifeo source/_integrations/fortios.markdown @kimfrellsen source/_integrations/foscam.markdown @skgsergio diff --git a/_config.yml b/_config.yml index 10d3f29e532..bbcf4bafbeb 100644 --- a/_config.yml +++ b/_config.yml @@ -100,9 +100,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 109 -current_patch_version: 6 -date_released: 2020-05-07 +current_minor_version: 110 +current_patch_version: 0 +date_released: 2020-05-20 # 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/configuration/basic.markdown b/source/_docs/configuration/basic.markdown index 3f1d4d868c1..53ab503c5d0 100644 --- a/source/_docs/configuration/basic.markdown +++ b/source/_docs/configuration/basic.markdown @@ -10,18 +10,24 @@ If you prefer YAML, you can add the following information to your `configuration ```yaml homeassistant: + name: Home latitude: 32.87336 longitude: 117.22743 elevation: 430 unit_system: metric time_zone: America/Los_Angeles - name: Home + external_url: "https://www.example.com" + internal_url: "http://homeassistant.local:8123" whitelist_external_dirs: - /usr/var/dumping-ground - /tmp ``` {% configuration %} +name: + description: Name of the location where Home Assistant is running. + required: false + type: string latitude: description: Latitude of your location required to calculate the time the sun rises and sets. required: false @@ -46,8 +52,12 @@ time_zone: description: "Pick your time zone from the column **TZ** of [Wikipedia's list of tz database time zones](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones)" required: false type: string -name: - description: Name of the location where Home Assistant is running. +external_url: + description: "The URL that Home Assistant is available on from the internet. For example: `https://example.duckdns.org:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported." + required: false + type: string +internal_url: + description: "The URL that Home Assistant is available on from your local network. For example: `http://homeassistant.local:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported." required: false type: string customize: @@ -68,6 +78,6 @@ whitelist_external_dirs: type: list {% endconfiguration %} -### Reload Core Service +## Reload Core Service Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant.reload_core_config`. This allows you to change any of the above sections and see it being applied without having to restart Home Assistant. To call this service, go to the "Service" tab under Developer Tools, select the `homeassistant.reload_core_config` service and click the "CALL SERVICE" button. Alternatively, you can press the "Reload Location & Customizations" button under Configuration > Server Control. diff --git a/source/_docs/ecosystem/caddy.markdown b/source/_docs/ecosystem/caddy.markdown index fde6c60b7aa..4adfa8afbad 100644 --- a/source/_docs/ecosystem/caddy.markdown +++ b/source/_docs/ecosystem/caddy.markdown @@ -45,8 +45,6 @@ On your `configuration.yaml` file, edit the `http` component. http: # For extra security set this to only accept connections on localhost if Caddy is on the same machine # server_host: 127.0.0.1 - # Update this line to be your domain - base_url: https://example.com use_x_forwarded_for: true # You must set the trusted proxy IP address so that Home Assistant will properly accept connections # Set this to your Caddy machine IP, or localhost if hosted on the same machine. @@ -57,4 +55,3 @@ http: You can either start Caddy or [install it as a service](https://github.com/mholt/caddy/wiki/Caddy-as-a-service-examples), pass the Caddyfile path as a `conf` parameter. Home Assistant will be listening on port 443 (HTTPS) and all insecure traffic on port 80 will be redirected. - diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index 2c8b188e269..f6a074b8683 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -333,9 +333,10 @@ Now edit your `configuration.yaml` file to reflect the SSL entries and your base http: ssl_certificate: /etc/letsencrypt/live/examplehome.duckdns.org/fullchain.pem ssl_key: /etc/letsencrypt/live/examplehome.duckdns.org/privkey.pem - base_url: examplehome.duckdns.org ``` +Go to the Home Assistant UI -> **Configuration** -> **General** and set the external URL to your new URL, for example: `https://examplehome.duckdns.org`. Please note, advanced mode on your user profile must be enabled in order to see the external URL option. + You may wish to set up other options for the [HTTP](/integrations/http/) integration at this point, these extra options are beyond the scope of this guide. Save the changes to `configuration.yaml`. Restart Home Assistant. diff --git a/source/_docs/ecosystem/certificates/tls_domain_certificate.markdown b/source/_docs/ecosystem/certificates/tls_domain_certificate.markdown index 5a67900752d..4cb3c941535 100644 --- a/source/_docs/ecosystem/certificates/tls_domain_certificate.markdown +++ b/source/_docs/ecosystem/certificates/tls_domain_certificate.markdown @@ -57,7 +57,6 @@ The [`http`](/integrations/http/) section must contain the full path to the need ```yaml http: - base_url: https://mydomain.com:8123 ssl_certificate: /etc/letsencrypt/live/mydomain.com/fullchain.pem ssl_key: /etc/letsencrypt/live/mydomain.com/privkey.pem ``` diff --git a/source/_docs/ecosystem/haproxy.markdown b/source/_docs/ecosystem/haproxy.markdown index e601ef5e9ec..97571555a01 100644 --- a/source/_docs/ecosystem/haproxy.markdown +++ b/source/_docs/ecosystem/haproxy.markdown @@ -96,14 +96,16 @@ In your `configuration.yaml` file, edit the [HTTP component](/integrations/http/ http: # For extra security set this to only accept connection on localhost if HAProxy is on the same machine # server_host: 127.0.0.1 - # Update this line to be your domain - base_url: https://example.com use_x_forwarded_for: true # You must set the trusted proxy IP address so that Home Assistant will properly accept connections # Set this to your HAProxy machine IP, or localhost if hosted on the same machine. trusted_proxies: ``` +Go to the Home Assistant UI -> **Configuration** -> **General** and set the external URL +to your new URL, for example: `https://examplehome.duckdns.org`. +Please note, advanced mode on your user profile must be enabled in order to see the external URL option. + ### Restart or Reload HAProxy Use your OS method of restarting or reloading HAProxy. Use Google for this. diff --git a/source/_docs/ecosystem/nginx.markdown b/source/_docs/ecosystem/nginx.markdown index e796784247b..1edd0a9b68b 100644 --- a/source/_docs/ecosystem/nginx.markdown +++ b/source/_docs/ecosystem/nginx.markdown @@ -89,14 +89,14 @@ On your `configuration.yaml` file, edit the `http` component. http: # For extra security set this to only accept connections on localhost if NGINX is on the same machine # server_host: 127.0.0.1 - # Update this line to be your domain - base_url: https://example.com use_x_forwarded_for: true # You must set the trusted proxy IP address so that Home Assistant will properly accept connections # Set this to your NGINX machine IP, or localhost if hosted on the same machine. trusted_proxies: ``` +Go to the Home Assistant UI -> **Configuration** -> **General** and set the external URL to your new URL, for example: `https://examplehome.duckdns.org`. Please note, advanced mode on your user profile must be enabled in order to see the external URL option. + ### NGINX configuration ```nginx diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index a4d022fc519..40fd16e8499 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -230,6 +230,7 @@ Supported abbreviations: 'temp_lo_stat_t': 'temperature_low_state_topic', 'temp_stat_tpl': 'temperature_state_template', 'temp_stat_t': 'temperature_state_topic', + 'temp_unit': 'temperature_unit', 'tilt_clsd_val': 'tilt_closed_value', 'tilt_cmd_t': 'tilt_command_topic', 'tilt_inv_stat': 'tilt_invert_state', diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index e0fcdde6c3d..b818d147260 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -78,6 +78,22 @@ condition: below: 20 ``` +### NOT condition + +Test multiple conditions in one condition statement. Passes if all embedded conditions are **not** valid. + +```yaml +condition: + condition: not + conditions: + - condition: state + entity_id: device_tracker.paulus + state: 'home' + - condition: state + entity_id: alarm_control_panel.home_alarm + state: disarmed +``` + ### Numeric state condition This type of condition attempts to parse the state of the specified entity as a number, and triggers if the value matches the thresholds. diff --git a/source/_integrations/agent_dvr.markdown b/source/_integrations/agent_dvr.markdown new file mode 100644 index 00000000000..540b38a519f --- /dev/null +++ b/source/_integrations/agent_dvr.markdown @@ -0,0 +1,68 @@ +--- +title: Agent DVR +description: Access and control Agent DVR from Home Assistant. +ha_category: + - Camera +ha_config_flow: true +ha_release: "0.110" +ha_iot_class: Local Pull +ha_codeowners: + - '@ispysoftware' +ha_domain: agent_dvr +--- + +[Agent DVR](https://www.ispyconnect.com/download.aspx/) is a free* software DVR solution for windows 10, Mac and Linux. Agent DVR runs as a service or console application and can access and control a huge range of third party cameras with advanced motion detection, including YOLO integration for object recognition. The iSpyConnect website provides secured (SSL) remote access without port forwarding needed. + +You can add Agent DVR via integrations using the IP address and port of the server, e.g.,: `http://192.168.1.3:8090/`. + + +## Configuration + +For configuration, go to the `Integrations panel` on your Home Assistant instance. Click on the + symbol and pick 'Agent DVR' from the list and enter your Agent DVR server address and port. You can then setup your devices using the Home Assistant UI. + +
+ Please ensure you are using Agent DVR v2.6.1.0 + +
+ +## Services + +Once loaded, the `agent_dvr` integration will expose services that can be called to perform various actions. The `entity_id` service attribute can specify one or more specific cameras. + +Available services: +`enable_alerts`, `disable_alerts`, +`start_recording`, `stop_recording`, +`turn_on`, `turn_off`, `toggle`, `enable_motion_detection`,`disable_motion_detection` + +#### Service `enable_alerts`/`disable_alerts` + +These services enable or disable the device's alert events within Agent DVR. + +Service data attribute | Optional | Description +-|-|- +`entity_id` | no | Name(s) of entities, e.g., `camera.living_room_camera`. + +#### Service `start_recording`/`stop_recording` + +These services start or stop the device recording. + +Service data attribute | Optional | Description +-|-|- +`entity_id` | no | Name(s) of entities, e.g., `camera.living_room_camera`. + +#### Service `turn_on`/`turn_off`/`toggle` + +These services turn on, off or toggle the device enabled state within Agent DVR + +Service data attribute | Optional | Description +-|-|- +`entity_id` | no | Name(s) of entities, e.g., `camera.living_room_camera`. + + +## IFrame + - Using the Webpage Card you can embed the Agent DVR viewer directly in Home Assistant. Just point it to https://www.ispyconnect.com/app/ + +

+ +

+ +*Agent offers additional services like secured remote access (without port forwarding) and cloud uploads via a subscription service. diff --git a/source/_integrations/airvisual.markdown b/source/_integrations/airvisual.markdown index 11251cc5d58..c9bbc8be9c8 100644 --- a/source/_integrations/airvisual.markdown +++ b/source/_integrations/airvisual.markdown @@ -11,9 +11,11 @@ ha_domain: airvisual ha_config_flow: true --- -The `airvisual` sensor platform queries the [AirVisual](https://airvisual.com/) API for air quality data. Data can be collected via latitude/longitude or by city/state/country. The resulting information creates sensors for the Air Quality Index (AQI), the human-friendly air quality level, and the main pollutant of that area. Sensors that conform to either/both the [U.S. and Chinese air quality standards](https://www.clm.com/publication.cfm?ID=366) are created. +The `airvisual` sensor platform queries the [AirVisual](https://airvisual.com/) cloud API for air quality data. Data can be collected via latitude/longitude, by city/state/country, or from an [AirVisual Node/Pro unit](https://www.airvisual.com/air-quality-monitor). -This platform requires an AirVisual API key, which can be obtained [here](https://airvisual.com/api). Note that the platform was designed using the "Community" package; the "Startup" and "Enterprise" package keys should continue to function, but actual results may vary (or not work at all). +## Using the AirVisual Cloud API + +AirVisual API keys can be obtained [here](https://airvisual.com/api). Note that the platform was designed using the "Community" package; the "Startup" and "Enterprise" package keys should continue to function, but actual results may vary (or not work at all). The Community API key is valid for 12 months after which it will expire. You must then go back to the AirVisual website, delete your old key, create a new one following the same steps and update your configuration with the new key. @@ -23,19 +25,34 @@ The "Community" API key is limited to 10,000 calls per month. In order to leave +## Using an AirVisual Node/Pro Unit + +The integration can communicate to Node/Pro units over the local network. You will need the IP address/hostname of the unit and its Samba password (which can be found on the unit; instructions here: https://support.airvisual.com/en/articles/3029331-download-the-airvisual-node-pro-s-data-using-samba). + ## Configuration -To enable the platform and gather data via latitude/longitude, add the following lines to your `configuration.yaml` file: +To enable the integration and gather data via latitude/longitude, add the following lines to your `configuration.yaml` file: ```yaml airvisual: api_key: YOUR_AIRVISUAL_API_KEY ``` +To enable the integration and gather from a Node/Pro unit, add the following lines to your `configuration.yaml` file: + +```yaml +airvisual: + ip_address: YOUR_NODE_PRO_IP_ADDRESS + password: YOUR_NODE_PRO_SAMBA_PASSWORD +``` + +Note that an API key-based entry can be mixed with one or more Node/Pro-based entries +(examples below). + {% configuration %} api_key: description: Your AirVisual API key. - required: true + required: false type: string geographies: description: A list of geographical locations to monitor @@ -66,14 +83,14 @@ geographies: ## Example Configurations -No explicit configuration (uses the `latitude` and `longitude` defined within `configuration.yaml`): +No explicit configuration (using the cloud API and the `latitude` and `longitude` defined within `configuration.yaml`): ```yaml airvisual: api_key: YOUR_AIRVISUAL_API_KEY ``` -Configuration using a single custom latitude and longitude: +Configuration using the cloud API and a single custom latitude and longitude: ```yaml airvisual: @@ -83,7 +100,7 @@ airvisual: longitude: 108.12422 ``` -Configuration using multiple custom latitude and longitude pairs: +Configuration using the cloud API and multiple custom latitude and longitude pairs: ```yaml airvisual: @@ -95,7 +112,7 @@ airvisual: longitude: -117.22743 ``` -Configuration using a single city, state, and country: +Configuration using the cloud API and a single city, state, and country: ```yaml airvisual: diff --git a/source/_integrations/alarm_control_panel.xiaomi_miio.markdown b/source/_integrations/alarm_control_panel.xiaomi_miio.markdown new file mode 100644 index 00000000000..9c987b4c62d --- /dev/null +++ b/source/_integrations/alarm_control_panel.xiaomi_miio.markdown @@ -0,0 +1,39 @@ +--- +title: "Xiaomi Gateway Alarm" +description: "Instructions on how to integrate your Xiaomi Gateway Alarm within Home Assistant." +logo: xiaomi.png +ha_category: + - Alarm +ha_iot_class: Local Polling +ha_release: 0.110 +ha_domain: xiaomi_miio +--- + +The `xiaomi_miio` alarm_control_panel platform allows you to control the state of your Xiaomi Gateway Alarm. + +Please follow the instructions on [Retrieving the Access Token](/integrations/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use during configuration. + +## Features + +- Turn on/off Alarm +- See the status of Alarm (armed_away, disarmed, arming) + +## Configuration + +To set up the Xiaomi gateway, click Configuration in the sidebar, then click Integrations and then click the + icon in the lower right and find xiaomi_miio. Select the option "Connect to a Xiaomi Gateway" and click submit. You will then be presented with a form in which you will need to fill in the "IP address" and 32 characters "token". Optionally, you can specify a different name for the gateway. After you click submit, you will have the opportunity to select the area that your devices are located. + +{% configuration %} +host: + description: The IP address of your Xiaomi gateway. + required: true + type: string +token: + description: The API token of your Xiaomi gateway. + required: true + type: string +name: + description: The name of your Xiaomi gateway. + required: false + type: string + default: Xiaomi Gateway +{% endconfiguration %} diff --git a/source/_integrations/ambiclimate.markdown b/source/_integrations/ambiclimate.markdown index ea561125809..cb6ab5578af 100644 --- a/source/_integrations/ambiclimate.markdown +++ b/source/_integrations/ambiclimate.markdown @@ -13,7 +13,7 @@ ha_domain: ambiclimate Integrates [Ambiclimate](https://ambiclimate.com/) Air Conditioning controller into Home Assistant. You must create an application [here](https://api.ambiclimate.com/clients) to obtain a `client_id` and `client_secret`. -The `callback url` should be configured as your Home Assistant `base_url` + `/api/ambiclimate`, e.g., `https://example.com/api/ambiclimate`. +The `callback url` should be configured as your Home Assistant external URL + `/api/ambiclimate`, e.g., `https://example.com/api/ambiclimate`. To enable this platform, add the following lines to your `configuration.yaml` file: diff --git a/source/_integrations/blebox.markdown b/source/_integrations/blebox.markdown new file mode 100644 index 00000000000..3fb8863f48b --- /dev/null +++ b/source/_integrations/blebox.markdown @@ -0,0 +1,49 @@ +--- +title: BleBox +description: Instructions on how to integrate BleBox devices with Home Assistant. +ha_category: + - Cover +ha_release: "0.110" +ha_iot_class: Local Polling +ha_config_flow: true +ha_codeowners: + - '@gadgetmobile' +ha_domain: blebox +--- + +[BleBox](https://blebox.eu/?lang=en) produces small, low-power, surprisingly affordable, feature-rich WiFi devices for serverless home automation. + +## Configuration + +For the best experience, make sure your BleBox devices have the most recent available firmware installed. + +This integration can be configured using the integrations in the +Home Assistant frontend. + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and click on **BleBox**. +After completing the configuration flow, the BleBox +integration will be available. + +Additionally, if you are configuring a gateBox, it may be useful to set the second button as "stop" in your device's settings (via website or phone app). + +## Covers + +This integration adds the BleBox device as a cover in Home Assistant. + +Currently, this includes support for the following product classes: + +- BleBox shutterBox +- BleBox gateController +- BleBox gateBox + +For now, only a minimum set of features are supported (e.g., no tilt support for shutterBox). + +## Sensors + +This integration adds the BleBox device as a sensor in Home Assistant. + +Currently, this includes support for the following product classes and their features: + +- BleBox tempSensor (temperature only) diff --git a/source/_integrations/blink.markdown b/source/_integrations/blink.markdown index ddeb12925ff..ba101e55373 100644 --- a/source/_integrations/blink.markdown +++ b/source/_integrations/blink.markdown @@ -22,7 +22,17 @@ You will need your Blink login information (username, which is usually your emai ## Configuration -To enable devices linked in your [Blink](https://blinkforhome.com) account, add the following to your `configuration.yaml` file: +The preferred method for setting this up is by using the configuration flow. Go to the integrations page in your configuration and click on new integration -> Blink. When you are prompted for your pin, there are (currently) two possibilities: + +1. You are sent an email asking for you to allow Home Assistant to access Blink. In this case, leave the pin field blank and hit `Submit`. + +2. You are sent an email containing a 2FA pin. In this case, please enter the pin and hit `Submit`. + +Your integration will then set up. Given that setup is asynchronous, you may see your sensors before they have finished extracting data from the Blink servers. After a few minutes (at most) this information should populate. + +Existing YAML will be converted to this flow but will be removed in a future version. This is due to Blink's migration to 2FA which is rolling out this year, and which YAML cannot support. + +If you'd like to continue using YAML until it is fully removed, you can use the following example: ```yaml # Example configuration.yaml entry @@ -30,7 +40,6 @@ blink: username: YOUR_USERNAME password: YOUR_PASSWORD ``` - {% configuration %} username: description: The username for accessing your Blink account. @@ -44,44 +53,14 @@ scan_interval: description: How frequently to query for new data. Defaults to 300 seconds (5 minutes). required: false type: integer -binary_sensors: - description: Binary sensor configuration options. - required: false - type: map - keys: - monitored_conditions: - description: The conditions to create sensors from. - required: false - type: list - default: all (`motion_enabled`, `motion_detected`) -sensors: - description: Sensor configuration options. - required: false - type: map - keys: - monitored_conditions: - description: The conditions to create sensors from. - required: false - type: list - default: all (`battery`, `temperature`, `wifi_strength`) -offset: - description: How far back in time (minutes) to look for motion. Motion is determined if a new video has been recorded between now and the last time you refreshed plus this offset. - required: false - type: integer - default: 1 -mode: - description: Set to 'legacy' to enable use of old API endpoint subdomains (APIs can differ based on region, so use this if you are having issues with the integration). - required: false - type: string - default: not set {% endconfiguration %} -Once Home Assistant starts, the `blink` integration will create the following platforms: +Once Home Assistant starts and you authenticate access, the `blink` integration will create the following platforms: - An `alarm_control_panel` to arm/disarm the whole blink system (note, `alarm_arm_home` is not implemented and will not actually do anything, despite it being an option in the GUI). - A `camera` for each camera linked to your Blink sync module. -- A `sensor` per camera for every item listed in `monitored_conditions` (if no items specified in your `configuration.yaml`, all of them will be added by default). -- A `binary_sensor` for each item listed in `monitored_conditions` (if no items specified in your `configuration.yaml`, all of them will be added by default). +- A `sensor` per camera for temperature, wifi strength, and battery status +- A `binary_sensor` motion detection and camera armed status Since the cameras are battery operated, setting the `scan_interval` must be done with care so as to not drain the battery too quickly, or hammer Blink's servers with too many API requests. The cameras can be manually updated via the `trigger_camera` service which will ignore the throttling caused by `scan_interval`. As a note, all of the camera-specific sensors are only polled when a new image is requested from the camera. This means that relying on any of these sensors to provide timely and accurate data is not recommended. @@ -95,15 +74,6 @@ blink: username: YOUR_USERNAME password: YOUR_PASSWORD scan_interval: 300 - binary_sensors: - monitored_conditions: - - motion_enabled - - motion_detected - sensors: - monitored_conditions: - - battery - - temperature - - wifi_strength ``` ## Services @@ -140,6 +110,14 @@ homeassistant: - '/path/to/whitelist' ``` +### `blink.send_pin` + +Send a new pin to blink. Since Blink's 2FA implementation is new and changing, this is to allow the integration to continue to work with user intervention. The intent is to handle all of this behind the scenes, but until the login implementation is settled this was added. To use it, you simply call the service with the pin you receive from Blink as the payload (for a simple "Allow this Device" email, you may keep the `pin` value empty). + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ---------------------------- | +| `pin` | no | 2FA Pin received from blink. | + ### Other Services In addition to the services mentioned above, there are generic `camera` and `alarm_control_panel` services available for use as well. The `camera.enable_motion_detection` and `camera.disable_motion_detection` services allow for individual cameras to be enabled and disabled, respectively, within the Blink system. The `alarm_control_panel.alarm_arm_away` and `alarm_control_panel.alarm_disarm` services allow for the whole system to be armed and disarmed, respectively. diff --git a/source/_integrations/bluetooth_le_tracker.markdown b/source/_integrations/bluetooth_le_tracker.markdown index e1f73a2ed9e..76d03ce18b3 100644 --- a/source/_integrations/bluetooth_le_tracker.markdown +++ b/source/_integrations/bluetooth_le_tracker.markdown @@ -37,6 +37,11 @@ track_new_devices: required: false default: false type: boolean +track_battery: + description: Whether the integration should try to read the battery status for tracked devices. + required: false + default: false + type: boolean interval_seconds: description: Seconds between each scan for new devices. required: false @@ -47,6 +52,8 @@ interval_seconds: As some BT LE devices change their MAC address regularly, a new device is only discovered when it has been seen 5 times. Some BTLE devices (e.g., fitness trackers) are only visible to the devices that they are paired with. In this case, the BTLE tracker won't see this device. +Enabling the battery tracking might slightly decrease the duration of the battery, but since this is only done at most once a day, this shouldn't be noticeable. Not all devices offer battery status information; if the information is not available, the integration will only try once at startup. + ## Rootless Setup Normally accessing the Bluetooth stack is reserved for root, but running programs that are networked as root is a bad security wise. To allow non-root access to the Bluetooth stack we can give Python 3 and hcitool the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](https://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). diff --git a/source/_integrations/bsblan.markdown b/source/_integrations/bsblan.markdown new file mode 100644 index 00000000000..7a8b19036a9 --- /dev/null +++ b/source/_integrations/bsblan.markdown @@ -0,0 +1,44 @@ +--- +title: BSBLan +description: Instructions on how to integrate BSBLan device into Home Assistant. +logo: bsblan.png +ha_category: Climate +ha_release: "0.110" +ha_iot_class: Local Polling +ha_config_flow: true +ha_codeowners: + - "@liudger" +ha_domain: bsblan +--- + +This integration integrates [BSBLan](https://github.com/fredlcore/bsb_lan) device into Home Assistant. + +BSBLan is a device that is made by `Frederik Holst` and `Ulf Diekmann` for documentation and with +the help of many other contributors. +The board is designed for an Arduino Mega 2560 with an Ethernet-Shield for web-based controlling +of heating systems such as `Elco Thision`, `Brötje` and similar systems. + +It can interface with the heating system over Boiler-System-Bus, Local Process Bus and PPS (Punkt-zu-Punkt Schnittstelle) +For more information of which system it supports, have a look at their [documentation](https://1coderookie.github.io/BSB-LPB-LAN_EN/). + +## Configuration + +This integration can be configured using the integrations in the +Home Assistant frontend. + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and click on **BSBLan**. +Fill in the IP address of the device in your network and, if needed, +the port number. The default value should be 80. +For authentication now only passkey is supported. +Username and password are not supported yet. This will be supported in the next release. + +After completing the configuration flow, the BSBLan Climate integration will be +available. + +For more documentation of the BSBLan device, check the [manual](https://1coderookie.github.io/BSB-LPB-LAN_EN/). +The device support quite a few controllers from different manufacturers. +[list of supported models](https://1coderookie.github.io/BSB-LPB-LAN_EN/chap03.html#313-other-manufacturers) + +The integration is tested with firmware latest stable version `v0.43`. diff --git a/source/_integrations/cast.markdown b/source/_integrations/cast.markdown index d921c575447..5f6375726be 100644 --- a/source/_integrations/cast.markdown +++ b/source/_integrations/cast.markdown @@ -34,10 +34,61 @@ Home Assistant has its own Cast application to show the Home Assistant UI on any ```
-Home Assistant Cast requires your Home Assistant installation to be accessible via `https://`. If you're using Home Assistant Cloud, you don't need to do anything. Otherwise you must make sure that you have configured the `base_url` for [the `http` integration](/integrations/http/). +Home Assistant Cast requires your Home Assistant installation to be accessible via `https://`. If you're using Home Assistant Cloud, you don't need to do anything. Otherwise you must make sure that you have configured the `external_url` in your [configuration](/docs/configuration/basic).
+## Casting other apps + +### YouTube + +- `app_name`: `youtube` +- `media_id`: YouTube video ID + +Optional: +- `enqueue`: Enqueue only +- `playlist_id`: Play video with `media_id` from this playlist + +```yaml +'cast_youtube_to_my_chromecast': + alias: Cast YouTube to My Chromecast + sequence: + - data: + entity_id: media_player.my_chromecast + media_content_type: cast + media_content_id: ' + { + "app_name": "youtube", + "media_id": "dQw4w9WgXcQ" + }' + service: media_player.play_media +``` + +### [Supla](https://www.supla.fi/) + +Example values to cast the item at https://www.supla.fi/audio/3601824 + +- `app_name`: `supla` +- `media_id`: Supla item ID + +Optional: +- `is_live`: Item is a livestream + +```yaml +'cast_supla_to_my_chromecast': + alias: Cast supla to My Chromecast + sequence: + - data: + entity_id: media_player.my_chromecast + media_content_type: cast + media_content_id: ' + { + "app_name": "supla", + "media_id": "3601824" + }' + service: media_player.play_media +``` + ## Advanced use ### Manual configuration diff --git a/source/_integrations/daikin.markdown b/source/_integrations/daikin.markdown index 0d265f24d10..9b7abbedca9 100644 --- a/source/_integrations/daikin.markdown +++ b/source/_integrations/daikin.markdown @@ -24,32 +24,17 @@ There is currently support for the following device types within Home Assistant: ## Supported hardware -- The European versions of the Wifi Controller Unit (BRP069A41, 42, 43, 45), which is powered by the [Daikin Online Controller](https://play.google.com/store/apps/details?id=eu.daikin.remoapp) application. The new versions of WiFi Controller Unit (BRP069Bxx) also should work but it have to be confirmed by users. Tested and working devices are the BRP069B41 and BRP069B45. +- The European versions of the Wifi Controller Unit (BRP069A41, 42, 43, 45), which is powered by the [Daikin Online Controller](https://play.google.com/store/apps/details?id=eu.daikin.remoapp) application. The new version of WiFi Controller Unit BRP069Bxx also confirmed to work, tested and working devices are the BRP069B41 and BRP069B45. - The Australian version of the Daikin Wifi Controller Unit BRP072A42. Confirmed working on a Daikin Cora Series Reverse Cycle Split System Air Conditioner 2.5kW Cooling FTXM25QVMA with operation mode, temp, fan swing (3d, horizontal, vertical) which is powered by the [Daikin Mobile Controller](https://itunes.apple.com/au/app/daikin-mobile-controller/id917168708?mt=8) ([Android version](https://play.google.com/store/apps/details?id=eu.daikin.remoapp)) application. + - BRP072Cxx based units (including Zena devices) need to provide the API-key found on a sticker under the front cover during setup. - The Australian version of the Daikin Wifi Controller for **AirBase** units (BRP15B61), which is powered by the [Daikin Airbase](https://play.google.com/store/apps/details?id=au.com.daikin.airbase) application. +- SKYFi based units (using the SKYFi app). These devices need to provide the password found on a sticker under the front cover during setup. + ## Configuration -The Daikin integration can be configured in three ways. +The Daikin integration can be configured via the Home Assistant user interface where it will let you enter the IP-address of your Daikin AC (SKYFi based devices need to provide a password and BRP072Cxx devices need to provide a key). -- Automatically via the [discovery]({{site_root}}/integrations/discovery/) integration. -- Via the Home Assistant user interface where it will let you enter the IP-address of your Daikin AC. -- Or via the `configuration.yaml` file by adding the following: - -```yaml -# Full manual example configuration.yaml entry -daikin: - hosts: - - 192.168.4.161 -``` - -{% configuration %} -hosts: - description: List of IP addresses or hostnames. - required: false - default: All discovered hosts - type: list -{% endconfiguration %} ## Climate @@ -88,14 +73,21 @@ The `daikin` sensor platform integrates Daikin air conditioning systems into Hom - Inside temperature - Outside temperature +- Total instant power consumption +- Hourly energy consumption in cool mode +- Hourly energy consumption in heat mode
Some models only report outside temperature when they are turned on.
+
+Some models does not report the power/energy consumption. +
+ ## Switch -Daikin AirBase units exposes zones (typically rooms) that can be switched on/off individually. +AirBase and SKYFi units exposes zones (typically rooms) that can be switched on/off individually.
diff --git a/source/_integrations/default_config.markdown b/source/_integrations/default_config.markdown index 14e4e09e28a..b7794e4b32a 100644 --- a/source/_integrations/default_config.markdown +++ b/source/_integrations/default_config.markdown @@ -23,6 +23,7 @@ This integration is a meta-component and configures a default set of integration - [Map](/integrations/map/) - [Mobile App Support](/integrations/mobile_app/) - [Person](/integrations/person/) +- [Scene](/integrations/scene/) - [Scripts](/integrations/script/) - [Simple Service Discovery Protocol (SSDP)](/integrations/ssdp/) - [Sun](/integrations/sun/) diff --git a/source/_integrations/devolo_home_control.markdown b/source/_integrations/devolo_home_control.markdown new file mode 100644 index 00000000000..a10b801831b --- /dev/null +++ b/source/_integrations/devolo_home_control.markdown @@ -0,0 +1,34 @@ +--- +title: devolo Home Control +description: Instructions on how to integrate devolo Home Control with Home Assistant. +ha_category: + - Switch +ha_release: "0.110" +ha_iot_class: Local Push +ha_config_flow: true +ha_codeowners: + - '@2Fake' + - '@Shutgun' +ha_domain: devolo_home_control +ha_quality_scale: silver +--- + +devolo Home Control is a Z-Wave ecosystem with a Z-Wave to IP gateway in the center. The integration allows you to control devices connected to the gateway. + +## Configuration + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and click on **devolo Home Control**. You will be asked for your [mydevolo](https://www.mydevolo.com) credentials. After entering them, the devolo Home Control integration will be available. + +## Switches + +The integration provides support for the following Z-Wave devices: + +- devolo Metering Plug v1 +- devolo Metering Plug v2 +- devolo Switch FM +- Qubino Flush 1 Relay +- Qubino Flush 1D Relay +- Fibaro Wall Plug +- Fibaro Double Relay Switch diff --git a/source/_integrations/dialogflow.markdown b/source/_integrations/dialogflow.markdown index 7e18ea766f9..8b59048ce22 100644 --- a/source/_integrations/dialogflow.markdown +++ b/source/_integrations/dialogflow.markdown @@ -10,7 +10,7 @@ ha_domain: dialogflow The `dialogflow` integration is designed to be used with the [webhook](https://dialogflow.com/docs/fulfillment#webhook) integration of [Dialogflow](https://dialogflow.com/). When a conversation ends with a user, Dialogflow sends an action and parameters to the webhook. -To be able to receive messages from Dialogflow, your Home Assistant instance needs to be accessible from the web and you need to have the `base_url` configured for the HTTP integration ([documentation](/integrations/http/#base_url)). Dialogflow will return fallback answers if your server does not answer or takes too long (more than 5 seconds). +To be able to receive messages from Dialogflow, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic). Dialogflow will return fallback answers if your server does not answer or takes too long (more than 5 seconds). Dialogflow could be [integrated](https://dialogflow.com/docs/integrations/) with many popular messaging, virtual assistant and IoT platforms. diff --git a/source/_integrations/discovery.markdown b/source/_integrations/discovery.markdown index d50efb97b5c..9fccca2824c 100644 --- a/source/_integrations/discovery.markdown +++ b/source/_integrations/discovery.markdown @@ -75,7 +75,6 @@ Valid values for ignore are: * `enigma2`: Enigma2 media players * `frontier_silicon`: Frontier Silicon internet radios * `harmony`: Logitech Harmony Hub - * `igd`: Internet Gateway Device * `logitech_mediaserver`: Logitech Media Server (Squeezebox) * `netgear_router`: NETGEAR routers * `octoprint`: Octoprint diff --git a/source/_integrations/edl21.markdown b/source/_integrations/edl21.markdown index e8b0ab8abbf..a154f36e026 100644 --- a/source/_integrations/edl21.markdown +++ b/source/_integrations/edl21.markdown @@ -33,6 +33,10 @@ sensor: ``` {% configuration %} +name: + description: The friendly name of the smart meter. + required: false + type: string serial_port: description: The device to communicate with. When using ser2net, use socket://host:port. required: true diff --git a/source/_integrations/flick_electric.markdown b/source/_integrations/flick_electric.markdown new file mode 100644 index 00000000000..0fb5223e9d9 --- /dev/null +++ b/source/_integrations/flick_electric.markdown @@ -0,0 +1,30 @@ +--- +title: Flick Electric +description: Instructions on how to set up the Flick Electric Pricing sensor in Home Assistant. +ha_category: + - Energy +ha_release: '0.110' +ha_iot_class: Cloud Polling +ha_codeowners: + - '@ZephireNZ' +ha_domain: flick_electric +--- + +[Flick Electric Co](https://www.flickelectric.co.nz/) is a power company in New Zealand, based around a transparent pricing model where each component of pricing is provided. This integration uses the mobile app's API from Flick Electric Co to get the current power price as well as each of the components price. + +## Configuration + +This integration can be configured via the Home Assistant frontend. + +- Go to **Configuration** -> **Integrations**. +- Click on the `+` in the bottom right corner to add a new integration. +- Search and select the **Flick Electric** integration form the list. +- Follow the instruction on screen to add the sensor. + +
+ +The configuration uses the client ID and secret used by the app at the time of release. If this stops working, you can find the new ones by using a MITM proxy with the mobile app. The app will call `https://api.flick.energy/identity/oauth/token` with the `client_id` and `client_secret`. + +You can then use these values during the configuration. + +
diff --git a/source/_integrations/forked_daapd.markdown b/source/_integrations/forked_daapd.markdown new file mode 100644 index 00000000000..0f04f256f8b --- /dev/null +++ b/source/_integrations/forked_daapd.markdown @@ -0,0 +1,31 @@ +--- +title: forked-daapd +description: Instructions on how to integrate a forked-daapd server into Home Assistant. +ha_category: + - Media Player +ha_release: "0.110" +ha_iot_class: Local Push +ha_domain: forked_daapd +--- + +The `forked_daapd` integration allows you to control your [forked-daapd](http://ejurgensen.github.io/forked-daapd/) server from Home Assistant. This integration can control the forked-daapd outputs (zones) with limited playback control (play/pause, previous/next track) and media info support. Playlist manipulation is not supported. + +## Requirements + +The `forked_daapd` integration requires a forked-daapd server built with libwebsockets enabled, version >= 27.0. + +## Configuration + +To add `forked-daapd` to your installation, go to **Configuration** >> **Integrations** in the UI, click the button with `+` sign and from the list of integrations select **forked-daapd**. + +## Outputs + +Once the `forked-daapd` integration is set up, outputs will automatically be loaded from the server and added to HA in real time. + +## Pipes + +As forked-daapd supports playing audio input via a pipe, this integration supports the forwarding of basic player controls (play, pause, next track, previous track) directly to the pipe's source. Currently only the pipe source librespot-java is supported. To use this, configure your forked-daapd server to autostart pipes and name your librespot-java pipe "librespot-java" (accompanying metadata is also supported through forked-daapd via a metadata pipe named"librespot-java.metadata"). The `forked-daapd` integration will find the librespot-java pipe in the database and will set it up as a source. + +## Playlists + +The `forked-daapd` integration will treat playlists in the database as sources. The number of playlists shown as sources can be set in the integration's configuration options. diff --git a/source/_integrations/google_translate.markdown b/source/_integrations/google_translate.markdown index f5cd1bf8a31..b3bfd55ed7e 100644 --- a/source/_integrations/google_translate.markdown +++ b/source/_integrations/google_translate.markdown @@ -42,11 +42,3 @@ tts: - platform: google_translate language: 'de' ``` - -If you are using SSL certificate or Docker, you may need to add the `base_url` configuration variable to your `http` integration as follows: - -```yaml -#Example configuration.yaml entry -http: - base_url: https://example.duckdns.org -``` diff --git a/source/_integrations/home_connect.markdown b/source/_integrations/home_connect.markdown new file mode 100644 index 00000000000..8e03073697e --- /dev/null +++ b/source/_integrations/home_connect.markdown @@ -0,0 +1,59 @@ +--- +title: "Home Connect" +description: "Instructions on how to set up the Home Connect integration within Home Assistant." +logo: homeconnect.png +ha_category: + - Hub + - Binary Sensor + - Sensor + - Switch +ha_iot_class: Cloud Push +ha_release: "0.110" +ha_domain: home_connect +--- + +The Home Connect integration will allow users to integrate their home appliances supporting the Home Connect standard using the [official API](https://developer.home-connect.com). + +The integration will add one Home Assistant device for each connected home appliance which will have the following entities: + +- A power switch +- If the device has programs, switches for the individual programs. Note that program options cannot be configured at present. +- If the device has programs, a timestamp sensor for remaining time and a numeric sensor for the progress in percent. + +Note that it depends on the appliance and on API permissions which of the features are actually supported. A notable limitation is that oven programs cannot be started at present. + +## Installation + +### Installation using a developer account + +1. Visit [https://developer.home-connect.com](https://developer.home-connect.com) and sign up for a developer accouunt. +2. Under [Applications](https://developer.home-connect.com/applications), register a new App: + +- Application ID: Home Assistant +- OAuth Flow: Authorization Code Grant Flow +- Redirect URI : `/auth/external/callback` + +3. Add the client ID and client secret to your `configuration.yaml` (see below). +4. Once Home Assistant restarted, go to Configuration > Integrations. +5. Select the Home Connect integration. + +### Configuration + +```yaml +# Example configuration.yaml entry + +home_connect: + client_id: CLIENT_ID + client_secret: CLIENT_SECRET +``` + +{% configuration %} +client_id: + description: Your Home Connect client ID. + required: true + type: string +client_secret: + description: Your Home Connect client secret. + required: true + type: string +{% endconfiguration %} diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index 742391d7bc9..6ec9ecb70c8 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -1,15 +1,17 @@ --- -title: HomeKit -description: Instructions on how to set up the HomeKit integration in Home Assistant. +title: HomeKit Bridge +description: Instructions on how to set up the HomeKit Bridge integration in Home Assistant. ha_category: - Voice ha_release: 0.64 +ha_iot_class: Local Push ha_domain: homekit +ha_config_flow: true ha_codeowners: - '@bdraco' --- -The `homekit` integration allows you to forward entities from Home Assistant to Apple HomeKit, so they can be controlled from Apple's Home app and Siri. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later. However, if you do encounter issues, check out the [troubleshooting](#troubleshooting) section. +The HomeKit Bridge integration allows you to forward entities from Home Assistant to Apple HomeKit, so they can be controlled from Apple's Home app and Siri. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later. However if you do encounter issues, check out the [troubleshooting](#troubleshooting) section.
@@ -28,10 +30,14 @@ It might be necessary to install an additional package:
+To add `HomeKit Bridge` to your installation, go to **Configuration** >> **Integrations** in the UI, click the button with `+` sign and from the list of integrations select **HomeKit Bridge**. + +If you need to use the `entity_config`, `ip_address`, or `advertise_ip` configuration options, `HomeKit Bridge` must be configured via your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry configuring HomeKit homekit: - filter: +- filter: include_domains: - alarm_control_panel - light @@ -56,6 +62,13 @@ homekit: - feature: toggle_mute switch.bedroom_outlet: type: outlet + camera.back_porch: + support_audio: True +- name: HASS Bridge 2 + port: 56332 + filter: + include_domains: + - light ``` {% configuration %} @@ -160,6 +173,68 @@ homekit: required: false type: string default: '`switch`' + stream_address: + description: Only for `camera` entities. The source IP address to use when streaming to RTP clients. If your Home Assistant host has multiple interfaces, selecting a specific IP may be necessary. + required: false + type: string + default: local IP from Home Assistant + stream_source: + description: Only for `camera` entities. A URL, file or other valid FFmpeg input string to use as the stream source, rather than the default camera source. Required for camera entities that do not natively support streaming (MJPEG). If `-i` is not found in the stream source, it is prepended to construct the FFmpeg input. + required: false + type: string + default: stream source from camera entity + support_audio: + description: Only for `camera` entities. Whether the camera supports audio. Audio is disabled unless this flag is set to `True`. + required: false + type: boolean + default: '`False`' + max_width: + description: Only for `camera` entities. Maximum width supported by camera. Used when generating advertised video resolutions. + required: false + type: integer + default: 1920 + max_height: + description: Only for `camera` entities. Maximum height supported by camera. Used when generating advertised video resolutions. + required: false + type: integer + default: 1080 + max_fps: + description: Only for `camera` entities. Maximum fps supported by camera. Used when generating advertised video resolutions. + required: false + type: integer + default: 30 + audio_map: + description: Only for `camera` entities. FFmpeg [stream selection mapping](https://ffmpeg.org/ffmpeg.html#Stream-selection) for the audio-only stream. Selects the first audio stream in the input stream by default. If your input stream has multiple audio streams, this may need to be adjusted. + required: false + type: string + default: '`0:a:0`' + video_map: + description: Only for `camera` entities. FFmpeg [stream selection mapping](https://ffmpeg.org/ffmpeg.html#Stream-selection) for the video-only stream. Selects the first video stream in the input stream by default. If your input stream has multiple video streams, this may need to be adjusted. + required: false + type: string + default: '`0:v:0`' + audio_packet_size: + description: Only for `camera` entities. RTP packet size used for streaming audio to HomeKit clients. + required: false + type: integer + default: 188 + video_packet_size: + description: Only for `camera` entities. RTP packet size used for streaming video to HomeKit clients. + required: false + type: integer + default: 1316 + video_codec: + description: Only for `camera` entities. FFmpeg video codec for transcoding. `copy` option reduces CPU load when video source already encoded with `H264` (MPEG4). `h264_omx` option is only available with custom FFmpeg builds and enables GPU Hardware acceleration on Raspberry Pi. + required: false + type: string + default: libx264 + available options: copy, libx264, h264_omx + audio_codec: + description: Only for `camera` entities. FFmpeg audio codec for transcoding. `copy` option reduces CPU load when audio source already encoded with `libopus`. + required: false + type: string + default: libopus + available options: copy, libopus {% endconfiguration %} ## Setup @@ -189,7 +264,7 @@ After the setup is completed, you should be able to control your Home Assistant ## Move Home Assistant install -If you like to retain your HomeKit pairing through a move to a new Home Assistant device or installation, besides copying the configurations files you need to copy the `.homekit.state` file inside your configurations directory. Keep in mind though that the file is usually hidden by default, depending on your operating system. +If you like to retain your HomeKit pairing through a move to a new Home Assistant device or installation, besides copying the configurations files you need to copy the `.storage/homekit.*` file inside your configurations directory. Keep in mind though that the file is usually hidden by default, depending on your operating system. Before you copy it, make sure to stop the old and new Home Assistant instances first entirely, otherwise it won't work. @@ -197,11 +272,11 @@ Before you copy it, make sure to stop the old and new Home Assistant instances f ### Accessory ID -Currently, this integration uses the `entity_id` to generate a unique `accessory id (aid)` for `HomeKit`. The `aid` is used to identify a device and save all configurations made for it. This, however, means that if you decide to change an `entity_id` all configurations for this accessory made in the `Home` app will be lost. +Currently, this integration uses the `entity_id` to generate a unique `accessory id (aid)` for `HomeKit`. The `aid` is used to identify a device and save all configurations made for it. This, however, means that if you decide to change an `entity_id` that does not have a `unique_id`, all configurations for this accessory made in the `Home` app will be lost. ### Device Limit -The HomeKit Accessory Protocol Specification only allow a maximum of 150 unique accessories (`aid`) per bridge. Be mindful of this when configuring the filter(s). +The HomeKit Accessory Protocol Specification only allow 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 device 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 @@ -382,6 +457,7 @@ The following integrations are currently supported: | alarm_control_panel | SecuritySystem | All security systems. | | automation / input_boolean / remote / scene / script / vacuum | Switch | All represented as switches. | | binary_sensor | Sensor | Support for `co2`, `door`, `garage_door`, `gas`, `moisture`, `motion`, `occupancy`, `opening`, `smoke` and `window` device classes. Defaults to the `occupancy` device class for everything else. | +| camera | Camera | All camera devices. **HomeKit Secure Video is not supported at this time.** | | climate | Thermostat | All climate devices. | | cover | GarageDoorOpener | All covers that support `open` and `close` and have `garage` or `gate` as their `device_class`. | | cover | WindowCovering | All covers that support `set_cover_position`. | @@ -405,22 +481,22 @@ The following integrations are currently supported: ## Troubleshooting -### Deleting the `.homekit.state` file +### Resetting when created via YAML -The `.homekit.state` file can be found in the configurations directory. You might need to enable `view hidden files` to see it. + 1. Delete the `HomeKit Bridge` integration in the **Integrations** screen. + 2. **Restart** Home Assistant. + 3. The configuration will be automaticlly reimported from YAML. + 4. Pair the bridge. - 1. **Stop** Home Assistant - 2. Delete the `.homekit.state` file - 3. **Start** Home Assistant +### Resetting when created via the **Integrations** screen + + 1. Delete the `HomeKit Bridge` integration in the **Integrations** screen. + 2. Recreate the `HomeKit Bridge` integration in the **Integrations** screen. + 3. Pair the bridge. ### Errors during pairing -If you encounter any issues during pairing, make sure to: - - 1. **Stop** Home Assistant - 2. Delete the `.homekit.state` file - 3. Edit your configuration (see below) - 4. **Start** Home Assistant +If you encounter any issues during pairing, make sure to add the following to your `configuration.yaml` ```yaml logger: @@ -428,7 +504,15 @@ logger: logs: homeassistant.components.homekit: debug pyhap: debug +``` +Follow the above instructions for `Resetting` + +### Minimal Configuration + +If pairing still fails after trying the steps in ([Errors during pairing](#errors-during-pairing)), it may be caused by a specific entity. Try resetting with a minimal configuration: + +```yaml homekit: filter: include_entities: @@ -437,7 +521,7 @@ homekit: #### PIN doesn't appear as persistent status -You might have paired the `Home Assistant Bridge` already. If not, delete the `.homekit.state` file ([guide](#deleting-the-homekitstate-file)). +You might have paired the `Home Assistant Bridge` already. If not, follow the above instructions for `Resetting` #### `Home Assistant Bridge` doesn't appear in the Home App (for pairing) @@ -473,7 +557,7 @@ Pairing works fine when the filter is set to only include `demo.demo`, but fails #### Pairing hangs - no error -1. Make sure that you don't try to add more than 100 accessories, see [device limit](#device-limit). In rare cases, one of your entities doesn't work with the HomeKit component. Use the [filter](#configure-filter) to find out which one. Feel free to open a new issue in the `home-assistant` repository, so we can resolve it. +1. Make sure that you don't try to add more than 150 accessories, see [device limit](#device-limit). In rare cases, one of your entities doesn't work with the HomeKit component. Use the [filter](#configure-filter) to find out which one. Feel free to open a new issue in the `home-assistant` repository, so we can resolve it. 2. Check logs, and search for `Starting accessory Home Assistant Bridge on address`. Make sure Home Assistant Bridge hook up to a correct interface. If it did not, explicitly set `homekit.ip_address` configuration variable. #### Duplicate AID found when attempting to add accessory @@ -498,22 +582,20 @@ To use the HomeKit integration with to different Home Assistant instances on the Although we try our best, some entities don't work with the HomeKit integration yet. The result will be that either pairing fails completely or all Home Assistant accessories will stop working. Use the filter to identify which entity is causing the issue. It's best to try pairing and step by step including more entities. If it works unpair and repeat until you find the one that is causing the issues. To help others and the developers, please open a new issue here: [home-assistant/issues/new](https://github.com/home-assistant/home-assistant/issues/new?labels=component:%20homekit) +If you have any iOS 12.x devices signed into your iCloud account, media player entities with `device_class: tv` may trigger this condition. Filtering the entity or signing the iOS 12.x device out of iCloud should resolve the issue after restarting other devices. + #### Accessories are all listed as not responding See [specific entity doesn't work](#specific-entity-doesnt-work) #### Accessory not responding - after restart or update -See [device limit](#device-limit) +See [resetting accessories](#resetting-accessories) #### Accessory not responding - randomly Unfortunately, that sometimes happens at the moment. It might help to close the `Home` App and delete it from the cache. Usually, the accessory should get back to responding after a few minutes at most. -#### Accessories not responding / behaving unusual - Upgrade from `0.65.x` - -To fix this, you need to unpair the `Home Assistant Bridge`, delete the `.homekit.state` file ([guide](#deleting-the-homekitstate-file)) and pair it again. This should only be an issue if you're upgrading from `0.65.x` or below. - #### The linked battery sensor isn't recognized Try removing the entity from HomeKit and then adding it again. If you are adding this configuration option to an existing entity in HomeKit, any changes you make to this entity's configuration options won't appear until the accessory is removed from HomeKit and then re-added. See [resetting accessories](#resetting-accessories). @@ -526,9 +608,29 @@ Media Player entities with `device_class: tv` will show up as Television accesso The volume and play/pause controls will show up on the Remote app or Control Center. If your TV supports volume control through Home Assistant, you will be able to control the volume using the side volume buttons on the device while having the remote selected on screen. +#### Camera video is not streaming + +Ensure that the [`ffmpeg`](/integrations/ffmpeg) integration is configured correctly. Verify that your stream is directly playable with `ffplay ` or [VLC Media Player](https://www.videolan.org/). If you have changed your camera's entity configuration, you may need to [reset the accessory](#resetting-accessories). + +#### Cameras streaming is unstable or slow + +If your camera supports native H.264 streams, Home Assistant can avoid converting the video stream, which is an expensive operation. To enable native H.264 streaming when configured via YAML, change the `video_codec` to `copy`. To allow native H.264 streaming when via the UI, go to **Configuration** >> **Integrations** in the UI, click **Options** for your HomeKit Bridge, and check the box for your camera on the `Cameras that support native H.264 streams` screen. + +#### One video stream limit per camera + +Currently, cameras are limited to one video stream. Multiple streams are not possible at this time. One workaround is to create a second `HomeKit Bridge` to generate a copy of the camera accessory. + +#### Camera audio is not streaming + +Make sure `support_audio` is `True` in the camera's entity configuration. + +#### HomeKit stalls or devices respond slowly with many cameras + +HomeKit updates each camera snapshot sequentially when there are multiple cameras on a bridge. The HomeKit update methodology can lead to the app stalling or taking a while to update. To avoid this problem, limit each `HomeKit Bridge` to 6 cameras and create a new `HomeKit Bridge` for additional cameras. + #### Resetting accessories -On Home Assistant `0.97.x` or later, you may use the service `homekit.reset_accessory` with one or more entity_ids to reset accessories whose configuration may have changed. This can be useful when changing a media_player's device class to `tv`, linking a battery, or whenever Home Assistant adds support for new HomeKit features to existing entities. +You may use the service `homekit.reset_accessory` with one or more entity_ids to reset accessories whose configuration may have changed. This can be useful when changing a media_player's device class to `tv`, linking a battery, or whenever Home Assistant adds support for new HomeKit features to existing entities. On earlier versions of Home Assistant, you can reset accessories by removing the entity from HomeKit (via [filter](#configure-filter)) and then re-adding the accessory. diff --git a/source/_integrations/http.markdown b/source/_integrations/http.markdown index 23285653d6e..6339c735c31 100644 --- a/source/_integrations/http.markdown +++ b/source/_integrations/http.markdown @@ -42,11 +42,6 @@ server_port: required: false type: integer default: 8123 -base_url: - description: "The URL that Home Assistant is available on the internet. For example: `https://hass-example.duckdns.org:8123`. The iOS app finds local installations, if you have an outside URL use this so that you can auto-fill when discovered in the app. Note that this setting may only contain a protocol, hostname and port; using a path is *not* currently supported." - required: false - type: string - default: Your local IP address ssl_certificate: description: Path to your TLS/SSL certificate to serve Home Assistant over a secure connection. required: false diff --git a/source/_integrations/hunterdouglas_powerview.markdown b/source/_integrations/hunterdouglas_powerview.markdown index d804ab73781..ef2485c958d 100644 --- a/source/_integrations/hunterdouglas_powerview.markdown +++ b/source/_integrations/hunterdouglas_powerview.markdown @@ -2,24 +2,44 @@ title: Hunter Douglas PowerView description: Instructions on how to setup Hunter Douglas PowerView scenes within Home Assistant. ha_category: + - Cover - Scene + - Sensor ha_release: 0.15 ha_domain: hunterdouglas_powerview +ha_iot_class: Local Polling +ha_config_flow: true +ha_codeowners: + - '@bdraco' --- -Implements the [Hunter Douglas PowerView](https://www.hunterdouglas.com/operating-systems/powerview-motorization/support) platform scene control. It queries the PowerView Hub and Home Assistant displays them as scenes. +The `hunterdouglas_powerview` integration allows you to integrate your [Hunter Douglas PowerView](https://www.hunterdouglas.com/operating-systems/powerview-motorization/support) devices in Home Assistant. -Scenes can be activated using the service `scene.turn_on`. +There is currently support for the following device types within Home Assistant: + +- Cover +- Scene +- Sensor + +To add `Hunter Douglas PowerView` to your installation, go to **Configuration** >> **Integrations** in the UI, click the button with `+` sign and from the list of integrations select **Hunter Douglas PowerView**. + +Alternatively, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry -scene: - platform: hunterdouglas_powerview - address: IP_ADDRESS +hunterdouglas_powerview: + - host: IP_ADDRESS +``` + +```yaml +# Example configuration.yaml with multiple hubs +hunterdouglas_powerview: + - host: IP_ADDRESS + - host: IP_ADDRESS_2 ``` {% configuration %} -address: +host: description: IP address of the PowerView Hub, e.g., 192.168.1.10. required: true type: string diff --git a/source/_integrations/ifttt.markdown b/source/_integrations/ifttt.markdown index c7af255d885..f70419f24ec 100644 --- a/source/_integrations/ifttt.markdown +++ b/source/_integrations/ifttt.markdown @@ -14,7 +14,7 @@ ha_domain: ifttt ## Sending events from IFTTT to Home Assistant -To be able to receive events from IFTTT, your Home Assistant instance needs to be accessible from the web and you need to have the `base_url` configured for the HTTP integration ([documentation](/integrations/http/#base_url)). +To be able to receive events from IFTTT, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic). ### Setting up the integration diff --git a/source/_integrations/image_processing.markdown b/source/_integrations/image_processing.markdown index dcb253a0102..bd4049998de 100644 --- a/source/_integrations/image_processing.markdown +++ b/source/_integrations/image_processing.markdown @@ -7,12 +7,6 @@ ha_domain: image_processing Image processing enables Home Assistant to process images from [cameras](/integrations/#camera). Only camera entities are supported as sources. -
- -If you are running Home Assistant over SSL or from within a container, you will have to setup a base URL (`base_url`) inside the [HTTP component](/integrations/http/). - -
- ## ALPR ALPR entities have a vehicle counter attribute `vehicles` and all found plates are stored in the `plates` attribute. diff --git a/source/_integrations/influxdb.markdown b/source/_integrations/influxdb.markdown index 3e129b50685..b0a0b93567f 100644 --- a/source/_integrations/influxdb.markdown +++ b/source/_integrations/influxdb.markdown @@ -68,6 +68,10 @@ verify_ssl: description: Verify SSL certificate for HTTPS request. required: false default: true +path: + type: string + description: Path to use if your InfuxDB is running behind an reverse proxy. + required: false max_retries: type: integer description: Set this to allow the integration to retry if there was a network error when transmitting data. diff --git a/source/_integrations/isy994.markdown b/source/_integrations/isy994.markdown index 9269d2d2fde..a930893056d 100644 --- a/source/_integrations/isy994.markdown +++ b/source/_integrations/isy994.markdown @@ -4,6 +4,7 @@ description: Instructions on how to setup the ISY994 controller within Home Assi ha_category: - Hub - Binary Sensor + - Climate - Cover - Fan - Light @@ -13,6 +14,7 @@ ha_category: ha_release: 0.28 ha_iot_class: Local Push ha_domain: isy994 +ha_config_flow: true --- The ISY994 is a home automation controller that is capable of controlling Insteon and X10 devices. Some models of the ISY994 can even control Z-Wave devices. @@ -21,6 +23,7 @@ The ISY994 controller is manufactured by [Universal Devices](https://www.univers There is currently support for the following device types within Home Assistant: - Binary Sensor +- Climate - Cover - Light - Fan @@ -32,7 +35,9 @@ There is currently support for the following device types within Home Assistant: Home Assistant is capable of communicating with any binary sensor, cover, fan, light, lock, sensor and switch that is configured on the controller. Using the programs on the controller, custom binary sensors, cover, fan, lock, and switches can also be created. -To integrate your ISY994 controller with Home Assistant, add the following section to your `configuration.yaml` file: +To integrate your ISY994 controller with Home Assistant, Go to the **integrations page** in your configuration and click on new **integration** -> **Universal Devices ISY994**. + +You may also configure the integration manually by adding the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -60,20 +65,25 @@ sensor_string: required: false type: string default: sensor +variable_sensor_string: + description: This is the string that is used to identify which Integer or State Variables are to be added as sensors. If this string is found in the device name, Home Assistant will assume it is as a sensor. + required: false + type: string + default: sensor ignore_string: - description: Any devices that contain this string in their name (or folder path) will be ignored by Home Assistant. They will not become entities at all. + description: Any devices that contain this string in their name (or folder path) will be ignored by Home Assistant. They will not become entities at all and will not fire `control_events`. required: false type: string default: {IGNORE ME} -enable_climate: - description: When enabled, climate measurements from the optional climate module in the ISY994 will show up in Home Assistant as sensors. - required: false - type: string - default: true tls: description: This entry should reflect the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value. required: false type: string +restore_light_state: + description: If disabled (default behavior), lights turned ON from Home Assistant without a `brightness` parameter set, will turn on to the `on_level` set within the physical device. For example, on Insteon devices this would be the same brightness as if the switch/device was turned ON. If this setting is enabled, lights that are turned on from Home Assistant will go to the last known brightness value. Both the `on_level` and `last_brightness` values are available as attributes if needed for device-specific customization. + required: false + type: boolean + default: false {% endconfiguration %} Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate. @@ -82,13 +92,15 @@ Once the ISY controller is configured, it will automatically import any binary s An Insteon door/window sensor will show up as a single Binary Sensor rather than two discrete devices like it does in the ISY994 admin panel. Note that when in "Two Nodes" mode, the sensor will have an UNKNOWN state until the sensor changes for the first time since the last Home Assistant reboot. If you do not use Insteon scenes that are controlled directly from the door sensor, you may prefer to set the sensor to "One Node" mode using the ISY Admin Panel. -Each Insteon leak sensor will also show up as a single Binary Sensor as opposed to the two nodes seen in the ISY994. The name of the device will be based on what the parent node is named in the ISY994, which is typically the one with "-Dry" at the end of the name. This may be confusing, because "On" means wet in Home Assistant. You can rename this node either in the ISY994 Admin Panel (which will change the entity_id in Home Assistant) or assign a `friendly_name` in the [Customization section](/docs/configuration/customizing-devices/) of your configuration. +Each Insteon leak sensor will also show up as a single Binary Sensor as opposed to the two nodes seen in the ISY994. The name of the device will be based on what the parent node is named in the ISY994, which is typically the one with "-Dry" at the end of the name. This may be confusing, because "On" means wet in Home Assistant. You can rename this node in Home Assistant to be more clear, see the [Customization section](/docs/configuration/customizing-devices/) of your configuration. If your leak or door/window sensor supports heartbeats, a new binary_sensor device will be added to Home Assistant to represent the battery state. The sensor will stay "Off" so long as the daily heartbeats occur. If a heartbeat is missed, the sensor will flip to "On". The name of this device will be based on the heartbeat node in the ISY. -### Handling Insteon Control Events +Integer and State Variables from the ISY can be used as sensors by setting the `variable_sensor_string` and adding it as part of the variable name in the ISY. For example, if you have a variable named `HA.my_variable` and a `variable_sensor_string` of `"HA."`, it will be automatically added as a `sensor` in Home Assistant. -A Home Assistant `isy994_control` event is emitted for every "control" event in the Insteon network. This allows you to write automations that trigger based on Insteon button presses. You can also trigger off of the unique Insteon events, such as double-presses, long-holds etc. +### Handling Insteon or Other ISY Control Events + +A Home Assistant `isy994_control` event is emitted for every "control" event in the ISY's device network (as long as the device has not been ignored or disabled in Home Assistant). This allows you to write automations that trigger based on events such as Insteon button presses. You can also trigger off of the unique Insteon/Zigbee/Z-Wave events, such as double-presses, long-holds etc. ```yaml automation: @@ -98,7 +110,11 @@ automation: event_type: isy994_control event_data: entity_id: light.lr_track_lights_front - control: 'DFOF' + control: 'DFON' + value: 255 + formatted: "On" + uom: "100" + prec: "0" action: service: light.turn_off entity_id: light.lr_track_lights_rear @@ -116,11 +132,112 @@ All `isy994_control` events will have an `entity_id` and `control` parameter in - `BRT`: "Brighten", from controllers that issue a single command to slightly brighten a light. - `DIM`: "Dim", from controllers that issue a single command to slightly dim a light. -### Insteon Scenes +### Insteon Scenes & Keypad/Remote Buttons -All Insteon scenes configured in the ISY994 will show up as switches in Home Assistant. +All Insteon scenes configured in the ISY994 will show up as a `switch` in Home Assistant, as they do not support dimming or setting specific brightness settings as Home Assisstant's `light` component. -### Creating Custom Devices +Insteon Secondary Keypad buttons and Remote buttons are added to Home Assistant to allow support for using Control Events in Automations. These devices are added as `sensors` since they cannot be directly controlled (turned on/off); their state is the last ON level command they sent, in a range from `0` (Off) to `255` (On 100%). Note: these devices may report incorrect states before being used after a reboot of the ISY. Secondary Keypad buttons may be turned on or off using ISY Scenes (refer to ISY Documentation for more details). + +### Services + +Once loaded, the following services will be exposed with the `isy994.` prefix, to allow advanced control over the ISY and its connected devices: + + - Entity services for Home Assistant-connected entities: `send_node_command`, `send_raw_node_command`, `set_on_level`, and `set_ramp_rate`. + - Generic ISY services: `system_query`, `set_variable`, `send_program_command`, and `run_network_resource`. + - Management services for the ISY994 Home Assistant integration: `reload` and `cleanup_entities`. + +#### Service `isy994.send_node_command` + +Send a command to an ISY Device using its Home Assistant entity ID. Valid commands are: `beep`, `brighten`, `dim`, `disable`, `enable`, `fade_down`, `fade_stop`, `fade_up`, `fast_off`, `fast_on`, and `query`. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Name(s) of entities to send the command, e.g., `light.front_porch`. | +| `command` | no | The command to be sent to the device, e.g., `"fast_on"` | + +#### Service `isy994.send_raw_node_command` + +Send a "raw" (e.g., `DON`, `DOF`) ISY REST Device Command to a Node using its Home Assistant Entity ID. This is useful for devices that aren't fully supported in Home Assistant yet, such as controls for many NodeServer nodes. Refer to the ISY (or PyISY Python Module) Documentation for details of valid commands. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Name(s) of entities to send the command, e.g., `light.front_porch`. | +| `command` | no | The ISY REST Command to be sent to the device, e.g., `"DON"` | +| `value` | yes | The integer value to be sent with the command, if required by the command, e.g., `255` | +| `parameters` | yes | A `dict` of parameters to be sent in the query string for controlling colored bulbs or advanced parameters, e.g., `{ GV2: 0, GV3: 0, GV4: 255 }` | +| `unit_of_measurement` | yes | The ISY Unit of Measurement (UOM) to send with the command, if required, e.g., `67` | + +#### Service `isy994.set_on_level` + +Send an ISY set_on_level command to a `light` Node to set the devices' local On Level. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Name(s) of entities to send the command, e.g., `light.front_porch`. | +| `value` | no | The integer value to set the On Level to in a range of 0-255, e.g., `255` | + +#### Service `isy994.set_ramp_rate` + +Send an ISY set_ramp_rate command to a `light` Node to set the devices' ramp rate. Refer to the PyISY documentation for the [available values](https://github.com/automicus/PyISY/blob/d053369f7531370a907136bf25a177632adccd1e/pyisy/constants.py#L630). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Name(s) of entities to send the command, e.g., `light.front_porch`. | +| `value` | no | The integer index value to set the Ramp Rate to in a range of `0` (9.5 minutes) to `31` (0.1 Seconds), e.g., `28` | + +#### Service `isy994.system_query` + +Request the ISY Query the connected devices. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `address` | yes | ISY Address to Query. Omitting this requests a system-wide scan (typically recommended by UDI to be scheduled once per day), e.g., `"1A 2B 3C 1"` | +| `isy` | yes | If you have more than one ISY connected, provide the name of the ISY to query (as shown on the Device Registry or as the top-first node in the ISY Admin Console). Omitting this will cause all ISYs to be queried, e.g., `"ISY"` | + +#### Service `isy994.set_variable` + +Set an ISY variable's current or initial value. Variables can be set by either type/address or by name. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `value` | no | The integer value to be sent, e.g., `255` | +| `address` | no | The address of the variable for which to set the value, e.g., `5` | +| `type` | no | The variable type, 1 = Integer, 2 = State, e.g., `2` | +| `name` | yes | The name of the variable to set (Optional, use `name` instead of `type` and `address`), e.g., `"my_variable_name"` | +| `init` | yes | If True, the initial (init) value will be updated instead of the current value, e.g., `false` | +| `isy` | yes | If you have more than one ISY connected, provide the name of the ISY to query (as shown on the Device Registry or as the top-first node in the ISY Admin Console). If you have the same variable name or address on multiple ISYs, omitting this will run the command on them all, e.g., `"ISY"` | + +#### Service `isy994.send_program_command` + +Send a command to control an ISY program or folder. Valid commands are `run`, `run_then`, `run_else`, `stop`, `enable`, `disable`, `enable_run_at_startup`, and `disable_run_at_startup`. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `command` | no | The ISY Program Command to be sent, e.g., `"run"` | +| `address` | yes | The address of the program to control (optional, use either `address` or `name`), e.g., `"04B1"` | +| `name` | yes | The name of the program to control (optional, use either `address` or `name`), e.g., `"My Program"` | +| `isy` | yes | (Optional) If you have more than one ISY connected, provide the name of the ISY to query (as shown on the Device Registry or as the top-first node in the ISY Admin Console). If you have the same program name or address on multiple ISYs, omitting this will run the command on them all, e.g., `"ISY"` | + +#### Service `isy994.run_network_resource` + +Run a network resource on the ISY. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `address` | yes | The address of the network resource to execute (optional, use either `address` or `name`), e.g., `121` | +| `name` | yes | The name of the network resource to execute (optional, use either `address` or `name`), e.g., `"Network Resource 1"` | +| `isy` | yes | (Optional) If you have more than one ISY connected, provide the name of the ISY to query (as shown on the Device Registry or as the top-first node in the ISY Admin Console). If you have the same resource name or address on multiple ISYs, omitting this will run the command on them all, e.g., `"ISY"` | + +#### Service `isy994.reload` + +Reload the ISY994 connection(s) without restarting Home Assistant. Use this service to pick up new devices that have been added or changed on the ISY since the last restart of Home Assistant. + +#### Service `isy994.cleanup_entities` + +Cleanup old entities no longer used by the ISY994 integrations. Useful if you've removed devices from the ISY or changed the filter string options in the configuration to exclude additional items and they were not properly removed +by Home Assistant. + +### Creating Custom Devices using ISY Programs Using the Programs tab in the controller's Administrative Console, custom devices can be created that will appear natively inside of Home Assistant. Home Assistant will scan the following folders and build the device to the associated domains: diff --git a/source/_integrations/juicenet.markdown b/source/_integrations/juicenet.markdown index b4402b788a9..971e5a2970e 100644 --- a/source/_integrations/juicenet.markdown +++ b/source/_integrations/juicenet.markdown @@ -1,6 +1,6 @@ --- title: JuiceNet -description: Instructions on how to setup WiFi-equipped Juicenet charging stations with Home Assistant. +description: Instructions on how to setup WiFi-equipped JuiceNet/JuiceBox charging stations with Home Assistant. ha_category: - Car - Energy @@ -11,13 +11,16 @@ ha_release: 0.47 ha_codeowners: - '@jesserockz' ha_domain: juicenet +ha_config_flow: true --- -The `juicenet` sensor platform pulls data from a [JuiceNet](https://emotorwerks.com/products/juicenet/) charging station equipped with a Wi-Fi connection. It will access and make available all of the devices attached to your account. It also exposes a switch allowing you to charge your car now instead of waiting for the pre-set schedule. +The `juicenet` platform pulls data from a [JuiceNet](https://evcharging.enelx.com/products/juicebox) charging station equipped with a Wi-Fi connection. It will access and make available all of the devices attached to your account. It also exposes a switch allowing you to charge your car now instead of waiting for the pre-set schedule. ## Configuration -To enable the platform in your installation, add the following to your `configuration.yaml` file: +To add `JuiceNet` go to **Configuration** >> **Integrations** in the UI, click the button with `+` sign and from the list of integrations select **JuiceNet**. + +Alternatively, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -27,14 +30,14 @@ juicenet: {% configuration %} access_token: - description: "Your eMotorWerks API Token can be found in the [dashboard](https://dashboard.emotorwerks.com/Manage)." + description: "Your JuiceNet API Token can be found in the [dashboard](https://home.juice.net/Manage)." required: true type: string {% endconfiguration %} ## Sensor -The `juicenet` sensor platform allows you to get data from your [JuiceNet](https://emotorwerks.com/products/juicenet/) sensors. +The `juicenet` sensor platform allows you to get data from your [JuiceNet](https://evcharging.enelx.com/products/juicebox) charger. ### Added sensors diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown index cf0e0a9e67f..11ff5024703 100644 --- a/source/_integrations/knx.markdown +++ b/source/_integrations/knx.markdown @@ -10,12 +10,12 @@ ha_codeowners: ha_domain: knx --- -The [KNX](https://www.knx.org) integration for Home Assistant allows you to connect to a KNX/IP devices. +The [KNX](https://www.knx.org) integration for Home Assistant allows you to connect to KNX/IP devices. -The integration requires a local KNX/IP interface like the [Weinzierl 730](https://www.weinzierl.de/index.php/en/all-knx/knx-devices-en/produktarchiv-en/knx-ip-interface-730-en). Through this, it will send and receive commands to and from other devices to the KNX bus. +The integration requires a local KNX/IP interface or router. Through this, it will establish a connection between Home Assistant and your KNX bus.
-Please note, the `knx` platform does not support Windows. +Please note, the `knx` platform does not support KNX Secure.
There is currently support for the following device types within Home Assistant: @@ -37,7 +37,7 @@ To use your KNX in your installation, add the following lines to your `configura knx: ``` -Optional, recommended for large KNX installations (>100 devices) and/or if you want to use the XKNX abstraction also for other scripted tools outside of Home Assistant: +Optional, or if you want to use the XKNX abstraction also for other scripted tools outside of Home Assistant: ```yaml knx: @@ -46,7 +46,7 @@ knx: {% configuration %} config_file: - description: The path for XKNX configuration file. + description: The path for XKNX configuration file. See [xknx.io](https://xknx.io/configuration) for details required: false type: string rate_limit: @@ -138,9 +138,11 @@ payload: type: [integer, list] {% endconfiguration %} -### Exposing sensor values or time to KNX bus +You can also use the `homeassistant.update_entity` service call to issue GroupValueRead requests for all `*state_address` of a device. -KNX integration is able to expose time or sensor values to KNX bus. The integration will broadcast any change of the exposed value to the KNX bus and answer read requests to the specified group address: +### Exposing entity states, entity attributes or time to KNX bus + +KNX integration is able to expose entity states or attributes to KNX bus. The integration will broadcast any change of the exposed value to the KNX bus and answer read requests to the specified group address. It is also possible to expose the current time. ```yaml # Example configuration.yaml entry @@ -155,6 +157,15 @@ knx: - type: 'binary' entity_id: 'binary_sensor.kitchen_window' address: '0/6/5' + - type: 'binary' + entity_id: 'light.office' + address: '0/3/0' + default: False + - type: 'percentU8' + entity_id: 'light.office' + attribute: 'brightness' + default: 0 + address: '0/3/1' - type: 'time' address: '0/0/1' - type: 'datetime' @@ -169,6 +180,19 @@ type: entity_id: description: Entity id to be exposed. Not needed for types time, date and datetime. type: string + required: false +attribute: + description: Attribute of the entity that shall be sent to the KNX bus. If not set (or `None`) the state will be sent. + Eg. for a light the state is eigther "on" or "off" - with attribute you can expose its "brightness". + type: string + required: false +default: + description: Default value to send to the bus if the state or attribute value is `None`. + Eg. a light with state "off" has no brightness attribute so a default value of `0` could be used. + If not set (or `None`) no value would be sent to the bus and a GroupReadRequest to the address would return the last known value. + type: [boolean, string, integer, float] + default: None + required: false address: description: KNX group address. type: string diff --git a/source/_integrations/konnected.markdown b/source/_integrations/konnected.markdown index bba1087edc7..d9d35bb67a8 100644 --- a/source/_integrations/konnected.markdown +++ b/source/_integrations/konnected.markdown @@ -98,7 +98,7 @@ Once all zones are configured you'll be presented with the configuration for add **Blink panel LED on when sending state change:** The desired LED behavior for the panel. -**Override default Home Assistant API host panel URL:** The Konnected Alarm Panel post sensor states back to the Home Assistant API. If this value is unchecked the panel will default postbacks using `base_url` in the `http` component. If you've set `base_url` to an external hostname, then you'll want to check this field and set the **Override API host URL** to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`). +**Override default Home Assistant API host panel URL:** The Konnected Alarm Panel post sensor states back to the Home Assistant API. If this value is unchecked the panel will default postbacks using the URL [configured](/docs/configuration/basic) in Home Assistant. By default, the integration will use the internal URL. However, if you check this field and set the **Override API host URL** to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`), it will be used instead of the internal URL. **Override API host URL (optional):** The host info to use if you checked **Override default Home Assistant API host panel URL** in the step above. This is ignored if **Override default Home Assistant API host panel URL** is unchecked. @@ -132,10 +132,10 @@ access_token: required: true type: string api_host: - description: Override the IP address/host (and port number) of Home Assistant that the Konnected device(s) will use to communicate sensor state updates. If omitted, this is defaulted to the value of `base_url` in the `http` component. If you've set `base_url` to an external hostname, then you'll want to set this value back to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`). + description: Override the IP address/host (and port number) of Home Assistant that the Konnected device(s) will use to communicate sensor state updates. If omitted, this is defaulted to the value of internal URL from the Home Assistant configuration is used. required: false type: string - default: value of `base_url` + default: value of internal URL devices: description: A list of Konnected devices that you have on your network. required: true diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index 199f89539aa..93f72e5f9f7 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -158,6 +158,14 @@ json_attributes_topic: description: The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-topic-configuration) documentation. required: false type: string +max_mireds: + description: The maximum color temperature in mireds. + required: false + type: integer +min_mireds: + description: The minimum color temperature in mireds. + required: false + type: integer name: description: The name of the light. required: false @@ -475,6 +483,14 @@ json_attributes_topic: description: The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-topic-configuration) documentation. required: false type: string +max_mireds: + description: The maximum color temperature in mireds. + required: false + type: integer +min_mireds: + description: The minimum color temperature in mireds. + required: false + type: integer name: description: The name of the light. required: false @@ -769,6 +785,14 @@ json_attributes_topic: description: The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-topic-configuration) documentation. required: false type: string +max_mireds: + description: The maximum color temperature in mireds. + required: false + type: integer +min_mireds: + description: The minimum color temperature in mireds. + required: false + type: integer name: description: The name of the light. required: false diff --git a/source/_integrations/lutron_caseta.markdown b/source/_integrations/lutron_caseta.markdown index a109643ca0a..76fc7134653 100644 --- a/source/_integrations/lutron_caseta.markdown +++ b/source/_integrations/lutron_caseta.markdown @@ -38,12 +38,18 @@ Once you have the three necessary files, place them in your configuration direct ```yaml # Example configuration.yaml entry lutron_caseta: - host: IP_ADDRESS + - host: IP_ADDRESS keyfile: caseta.key certfile: caseta.crt ca_certs: caseta-bridge.crt ``` +
+ +Note that multiple hubs can be specified by using multiple configuration blocks, but each of them requires its own `keyfile`, `certfile`, and `ca_certs` to be generated and specified. + +
+ {% configuration %} host: required: true diff --git a/source/_integrations/mailgun.markdown b/source/_integrations/mailgun.markdown index 730817b4986..c146ad8c0a1 100644 --- a/source/_integrations/mailgun.markdown +++ b/source/_integrations/mailgun.markdown @@ -8,7 +8,7 @@ ha_config_flow: true ha_domain: mailgun --- -To be able to receive webhooks from Mailgun, your Home Assistant instance needs to be accessible from the web and you need to have the `base_url` configured for the HTTP integration ([documentation](/integrations/http/#base_url)). +To be able to receive webhooks from Mailgun, your Home Assistant instance needs to be accessible from the web and you need to have the extern URL [configured](/docs/configuration/basic)). To set it up, go to the integrations page in the configuration screen and find Mailgun. Click on configure. Follow the instructions on the screen to configure Mailgun. diff --git a/source/_integrations/manual.markdown b/source/_integrations/manual.markdown index 2ee05cfe7d4..202dfadd302 100644 --- a/source/_integrations/manual.markdown +++ b/source/_integrations/manual.markdown @@ -45,17 +45,17 @@ code_arm_required: type: boolean default: true delay_time: - description: The time in seconds of the pending time before triggering the alarm. + description: The time in seconds of the 'pending' state before triggering the alarm. required: false type: integer - default: 0 -pending_time: - description: The time in seconds of the pending time before effecting a state change. + default: 60 +arming_time: + description: The time in seconds of the 'arming' state before effecting a state change. required: false type: integer default: 60 trigger_time: - description: The time in seconds of the trigger time in which the alarm is firing. + description: The time in seconds of the 'triggered' state in which the alarm is firing. required: false type: integer default: 120 @@ -73,8 +73,8 @@ armed_custom_bypass/armed_home/armed_away/armed_night/disarmed/triggered: description: State specific setting for **delay_time** (all states except **triggered**) required: false type: integer - pending_time: - description: State specific setting for **pending_time** (all states except **disarmed**) + arming_time: + description: State specific setting for **arming_time** (all states except **disarmed**) required: false type: integer trigger_time: @@ -86,20 +86,19 @@ armed_custom_bypass/armed_home/armed_away/armed_night/disarmed/triggered: ## State machine The state machine of the manual alarm integration is complex but powerful. The -transitions are timed according to three values, **delay_time**, **pending_time** +transitions are timed according to three values, **delay_time**, **arming_time** and **trigger_time**. The values in turn can come from the default configuration variable or from a state-specific override. -When the alarm is armed, its state first goes to **pending** for a number -of seconds equal to the destination state's **pending_time**, and then -transitions to one of the "armed" states. Note that **code_template** -never receives "pending" in the **to_state** variable; instead, -**to_state** contains the state which the user has requested. However, -**from_state** *can* contain "pending". +When the alarm is armed, its state first goes to **arming** for a number +of seconds equal to the destination state's **arming_time**, and then +transitions to one of the "armed" states. Note that **code_template** +never receives "arming" in the **to_state** variable; instead, +**to_state** contains the state which the user has requested. However, +**from_state** *can* contain "arming". When the alarm is triggered, its state goes to **pending** for a number of -seconds equal to the previous state's **delay_time** plus the triggered -state's **pending_time**. Then the alarm transitions to the "triggered" +seconds equal to the previous state's **delay_time**. Then the alarm transitions to the "triggered" states. The code is never checked when triggering the alarm, so the **to_state** variable of **code_template** cannot ever contain "triggered" either; again, **from_state** *can* contain "triggered". @@ -110,12 +109,11 @@ it goes back to either the previous state or **disarmed**. If the previous state's **trigger_time** is zero, the transition to "triggered" is entirely blocked and the alarm remains in the armed state. -Each of the settings is useful in different scenarios. **pending_time** gives -you some time to leave the building (for "armed" states) or to disarm the alarm -(for the "triggered" state). +Each of the settings is useful in different scenarios. **arming_time** gives +you some time to leave the building (for "armed" states). -**delay_time** can also be used to allow some time to disarm the alarm, but with -more flexibility. For example, you could specify a delay time for the +**delay_time** can be used to allow some time to disarm the alarm, with +flexibility. For example, you could specify a delay time for the "armed away" state, in order to avoid triggering the alarm while the garage door opens, but not for the "armed home" state. @@ -137,12 +135,13 @@ alarm_control_panel: name: Home Alarm code: '1234' pending_time: 30 + arming_time: 30 delay_time: 20 trigger_time: 4 disarmed: trigger_time: 0 armed_home: - pending_time: 0 + arming_time: 0 delay_time: 0 ``` diff --git a/source/_integrations/melcloud.markdown b/source/_integrations/melcloud.markdown index 7a603146e0f..ab85b8bd905 100644 --- a/source/_integrations/melcloud.markdown +++ b/source/_integrations/melcloud.markdown @@ -110,6 +110,8 @@ The following attributes are available for `sensor` platform entities: - Room temperature for each zone - Tank water temperature - Outside temperature - 1°C precision, polled every 1-2 hours. +- Zone flow temperature, polled every 1-2 hours +- Zone flow return temperature, polled every 1-2 hours Unlike air-to-air devices, air-to-water devices do not report energy consumption in an easily accessible manner. diff --git a/source/_integrations/mill.markdown b/source/_integrations/mill.markdown index 5ef94e83975..05cc2c80e97 100644 --- a/source/_integrations/mill.markdown +++ b/source/_integrations/mill.markdown @@ -12,27 +12,8 @@ ha_domain: mill Integrates Mill heater into Home Assistant. -## Configuration +To add Mill to your installation, go to Configuration >> Integrations in the UI and enable the Mill integration. -To enable this platform, add the following lines to your `configuration.yaml` file: - -```yaml -climate: - - platform: mill - username: YOUR_EMAIL_ADDRESS - password: YOUR_PASSWORD -``` - -{% configuration %} -username: - description: Your registered Mill email. - required: true - type: string -password: - description: Your Mill password. - required: true - type: string -{% endconfiguration %} ## Component services diff --git a/source/_integrations/monoprice.markdown b/source/_integrations/monoprice.markdown index c7595a95c08..f2387377fcf 100644 --- a/source/_integrations/monoprice.markdown +++ b/source/_integrations/monoprice.markdown @@ -8,6 +8,7 @@ ha_config_flow: true ha_iot_class: Local Polling ha_codeowners: - '@etsinko' + - '@OnFreund' ha_domain: monoprice --- @@ -20,12 +21,12 @@ Menu: **Configuration** -> **Integrations**. Click on the `+` sign to add an integration and click on **Monoprice**. Select the serial port to which Monoprice amplifier is connected, and name the six sources (leave sources you're not using empty). -Sources can also be later edited from the integration options (gear icon in the top right when selecting the integration). In order to remove an existing source, you'll need to replace it with a space (simply removing its name will still keep it in place). Note that editing sources will remove the snapshot you may have saved. +Sources can also be later edited from the integration options (gear icon in the top right when selecting the integration). Note that editing sources will remove the snapshot you may have saved. ## Zone Management Devices and entities are created for each of the possible 18 zones, and can be enabled, disabled and renamed through regular Home Assisant methods. -By default, the first 6 zones (11..16) are enabled, while the 12 extension zones (21..26, and 31..36) are disabled. +By default, the first 6 zones (11..16) are enabled, and there's an attempt to automatically detect the 12 extension zones (21..26, and 31..36) on the first run. ## Services diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown index 2e5c00f73a6..b6f5dbf18df 100644 --- a/source/_integrations/netatmo.markdown +++ b/source/_integrations/netatmo.markdown @@ -86,7 +86,7 @@ The `netatmo` sensor platform is consuming the information provided by a [Netatm The [Netatmo Smart Indoor](https://www.netatmo.com/en-gb/security/cam-indoor) or [Outdoor](https://www.netatmo.com/en-gb/security/cam-outdoor) cameras, [Smart Door and Window Sensors](https://www.netatmo.com/en-gb/security/cam-indoor/tag), as well as the [Netatmo Smart Smoke Alarm](https://www.netatmo.com/en-gb/security/smoke-alarm), send instant events to Home Assistant by using webhooks. It is required to have your camera enabled in Home Assistant. -To be able to receive events from [Netatmo](https://www.netatmo.com/en-gb/), your Home Assistant instance needs to be accessible from the web over port `80` or `443`. To achieve this you can either use your Nabu Casa account or for example Duck DNS ([Home Assistant instructions](/addons/duckdns/)). You also need to have the `base_url` configured for the HTTP integration ([documentation](/integrations/http/#base_url)). +To be able to receive events from [Netatmo](https://www.netatmo.com/en-gb/), your Home Assistant instance needs to be accessible from the web over port `80` or `443`. To achieve this you can either use your Nabu Casa account or for example Duck DNS ([Home Assistant instructions](/addons/duckdns/)). You also need to have the external URL configured in the Home Assistant [configuration](/docs/configuration/basic). Events coming in from Netatmo will be available as an event in Home Assistant and are fired as `netatmo_event`, along with their data. You can use these events to trigger automations. diff --git a/source/_integrations/numato.markdown b/source/_integrations/numato.markdown new file mode 100644 index 00000000000..eeb95e0d5b2 --- /dev/null +++ b/source/_integrations/numato.markdown @@ -0,0 +1,211 @@ +--- +title: Numato USB GPIO Expander +description: Instructions on how to integrate a Numato GPIO expander into Home Assistant. +ha_category: + - DIY + - Binary Sensor + - Sensor + - Switch +logo: numato.png +ha_release: "0.110" +ha_iot_class: Local Push +ha_domain: numato +--- + +The `numato` integration is the base for all related GPIO platforms of the +[Numato 32 Port USB GPIO expander](https://numato.com/product/32-channel-usb-gpio-module-with-analog-inputs): + +- [Binary Sensor](#binary-sensor) +- [Sensor](#sensor) +- [Switch](#switch) + +The whole configuration of all Numato devices is located in the general setup +of this integration. The following minimalistic example configures a couple of +binary_sensor, switch and sensor ports for a single device with ID 0. + +```yaml +numato: + devices: + - id: 0 + binary_sensors: + ports: + 2: Window Livingroom Open + 3: Window Livingroom Glassbreak + 4: Doorbell + sensors: + ports: + 1: + name: Soil Moisture Ficus + switches: + ports: + 5: Relay Light Outdoor + 6: Relay Circulation Pump + 7: Door Opener +``` + +{% configuration %} +discover: + description: List of OS device files (/dev/...) to try during discovery + required: false + default: List of /dev/ttyACM0 .. /dev/ttyACM9 + type: list +devices: + description: List of Numato 32 Port USB GPIO devices. + required: true + type: list + keys: + id: + description: ID configured in the device (not the Linux device since this can change). + required: true + type: integer + binary_sensors: + description: Configuration of ports for the `binary_sensor` platform + type: map + keys: + invert_logic: + description: Whether to invert the logic, so a high voltage level is interpreted as false. + required: false + default: false + type: boolean + ports: + description: Map of port numbers to names. + required: true + type: map + keys: + "port: name": + description: The port numbers and corresponding names. + required: true + type: string + sensors: + description: Configuration of ports for the `sensor` platform + type: map + keys: + ports: + description: Map of port numbers to ADC configurations. + required: true + type: map + keys: + "port: adc_config": + description: The port number and corresponding ADC configuration. + required: true + type: map + keys: + name: + description: Name of the ADC sensor port. + required: true + type: string + source_range: + description: Range within the ADC's resolution to map values from. + required: false + default: [0, 1024] + type: list + destination_range: + description: Range to map values from the source range to in a linear fashion. + required: false + default: [0.0, 100.0] + type: list + unit: + description: Unit of the destination values. + required: false + type: string + default: \% + switches: + description: Configuration of ports for the `sensor` platform + type: map + keys: + invert_logic: + description: Whether to invert the logic, so a value of true leads to a low voltage level at the output. + required: false + default: false + type: boolean + ports: + description: Map of port numbers to names. + required: true + type: map + keys: + "port: name": + description: The port numbers and corresponding names. + required: true + type: string +{% endconfiguration %} + +## Binary Sensor + +The `numato` binary_sensor platform allows you to operate the GPIOs of your +[Numato](https://numato.com) 32 port USB GPIO expander in binary input mode. + +
+ +As the Numato devices do not have internal pull-up or pull-down circuitry, +be careful not to destroy a port by creating a short circuit. Refer to the +[Numato documentation](https://numato.com/docs/32-channel-usb-gpio-module-with-analog-inputs/#gpio-with-switches-8) +on how to connect a switch to an input port, for example. + +
+ +## Sensor + +The `numato` sensor platform allows you to operate some GPIOs of your USB GPIO +expander in analog input mode. + +The Numato device has a number of built-in analog-digital-converters (ADCs) to +convert a voltage level between VCC and GND into a 10-bit integer value. Read +the [IO Ports](#io-ports) section for constraints on the ports to use. + +By default, the ADC's whole 10-bit range will be mapped to a float value between +0.0 and 1.0. Use the optional `source_range` to map from a specific range and +the `destination_range` to specify the value range to represent the entity +state. + +## Switch + +The `numato` switch platform allows you to operate the GPIOs of your +[Numato](https://numato.com) 32 port USB GPIO expander in output mode. + +## IO Ports + +The IO port numbers used in this configuration refer to the port numbers +printed on the PCB. Note that the Sensor platform can be configured on ports +1-7 only. These are the only ports on the 32 port device equipped with an ADC. + +For details about the GPIO layout, take a look at the [Numato 32 GPIO +documentation](https://numato.com/docs/32-channel-usb-gpio-module-with-analog-inputs). + +## Device IDs + +This integration uses a internal device ID to identify the device, which is +_not_ the Linux device path. The Linux device path (e.g., `/dev/ttyACM0`) can +change, for example, when you disconnect and re-connect the device or if you +connect the device to a different USB port. + +The internal device ID is 0 by default. If you have only one device, you should +not need to care about changing it. If you have multiple devices, their IDs are +shown in the console log during startup of Home Assistant. + +### Configure the Device ID + +Configure your Numato device's ID with the following steps. Though you can use +any terminal emulator to connect to and communicate with your device, the +following steps are based on using _GNU Screen_. On a Debian or Ubuntu-based OS +install _Screen_ like `sudo apt install screen`. + +1. Plug in only the one device to assign an id to so it'll get /dev/ttyACM0 +2. Wait a couple of seconds as your Linux OS may be trying to identify the + device as a Modem right after plugging it in +3. Run `screen /dev/ttyACM0` +4. Type `id get` to see the current ID +5. Type `id set 00000005` and hit enter to assign ID 5 +6. Type `id get` to validate and expect `00000005` as a reply +7. Quit screen with: Ctrl-a + \ and confirm with `y` + +Note that during communication with the device the ID values are strictly 32 +bit hexadecimal numbers (8 hex digits) with leading `0` padding. + +Hint: It is a good practice to put sticky labels with the IDs onto the PCBs in +order to avoid confusion of devices and their port configuration since this +could easily destroy your device. + +
+Numato devices used by Home Assistant are expected to be exclusive to Home +Assistant and remain permanently connected. +
diff --git a/source/_integrations/onvif.markdown b/source/_integrations/onvif.markdown index 918ac0d02dc..ad4ac7291cc 100644 --- a/source/_integrations/onvif.markdown +++ b/source/_integrations/onvif.markdown @@ -7,62 +7,51 @@ ha_release: 0.47 ha_domain: onvif --- -The `onvif` camera platform allows you to use an [ONVIF](https://www.onvif.org/) camera in Home Assistant. This requires the [`ffmpeg` component](/integrations/ffmpeg/) to be already configured. +The `onvif` camera platform allows you to use an [ONVIF](https://www.onvif.org/) Profile S conformant device in Home Assistant. This requires the [`ffmpeg` component](/integrations/ffmpeg/) to be already configured. ## Configuration -To enable your ONVIF camera in your installation, add the following to your `configuration.yaml` file: +Home Assistant offers ONVIF integration through **Configuration** -> **Integrations** -> **ONVIF**. Follow the instructions to get it set up. -```yaml -# Example configuration.yaml entry -camera: - - platform: onvif - host: 192.168.1.111 -``` +
+ It is recommended that you create a user on your device specifically for Home Assistant. For all current functionality, it is enough to create a standard user. +
-{% configuration %} -host: - description: The IP address or hostname of the camera. - required: true - type: string -name: - description: Override the name of your camera. - required: false - type: string - default: ONVIF Camera -username: - description: The username for the camera. - required: false - type: string - default: admin -password: - description: The password for the camera. - required: false - type: string - default: 888888 -port: - description: The (HTTP) port for the camera. - required: false - type: integer - default: 5000 -profile: - description: Video profile that will be used to obtain the stream, more details below. - required: false - type: integer - default: 0 -rtsp_transport: - description: "RTSP transport protocols. The possible options are: `tcp`, `udp`, `udp_multicast`, `http`." - required: false - type: string - default: tcp -extra_arguments: - description: "Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. More details in [`ffmpeg` component](/integrations/ffmpeg)." - required: false - type: string - default: -q:v 2 -{% endconfiguration %} +### Configuration Notes -Most of the ONVIF cameras support more than one audio/video profile. Each profile provides different image quality. Usually, the first profile has the highest quality and it is the profile used by default. However, you may want to use a lower quality image. One of the reasons may be that your hardware isn't able to render the highest quality image in real-time, especially when running on Raspberry Pi. Therefore you can choose which profile do you want to use by setting in configuration `profile` variable. +Most of the ONVIF devices support more than one audio/video profile. Each profile provides different image quality, or in the case of an NVR, separate connected cameras. This integration will add entities for all compatible profiles with the video encoding set to H254. Usually, the first profile has the highest quality and it is the profile used by default. However, you may want to use a lower quality image. You may disable unwanted entities through the Home Assistant UI. + +### Extra configuration of the integration + +You can configure specific FFmpeg options through the integration options flow by clicking the gear icon on the top right of the integration details page. + +| Option | Description | +| -------| ----------- | +| RTSP transport mechanism | RTSP transport protocols. The possible options are: `tcp`, `udp`, `udp_multicast`, `http`. | +| Extra FFmpeg arguments | Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. More details in [`ffmpeg` component](/integrations/ffmpeg). | + +### Supported Sensors + +This integration uses the ONVIF pullpoint subscription API to process events into sensors that will be automatically added to Home Assistant. Below is a list of currently supported event topics along with the entities they create. + +To help with development of this component, enable `info` level logging for `homeassistant.components.onvif` and create an issue on GitHub for any messages that show _"No registered handler for event"_. + +| Topic(s) | Entity Type | Device Class | Description | +|----------|-------------|--------------|-------------| +| `tns1:VideoSource/MotionAlarm` | Binary Sensor | Motion | Generic motion alarm. | +| `tns1:RuleEngine/FieldDetector/ObjectsInside` | Binary Sensor | Motion | Polygonal field detection determines if each object in the scene is inside or outside the polygon. | +| `tns1:RuleEngine/CellMotionDetector/Motion` | Binary Sensor | Motion | Cell based motion detection determined by placing a grid over the video source and determining changes. | +| `tns1:AudioAnalytics/Audio/DetectedSound` | Binary Sensor | Sound | Device detected sound. | +| `tns1:VideoSource/ImageTooBlurry/AnalyticsService`
`tns1:VideoSource/ImageTooBlurry/ImagingService`
`tns1:VideoSource/ImageTooBlurry/RecordingService` | Binary Sensor | Problem | Device reports blurry image. | +| `tns1:VideoSource/ImageTooDark/AnalyticsService`
`tns1:VideoSource/ImageTooDark/ImagingService`
`tns1:VideoSource/ImageTooDark/RecordingService` | Binary Sensor | Problem | Device reports dark image. | +| `tns1:VideoSource/ImageTooBright/AnalyticsService`
`tns1:VideoSource/ImageTooBright/ImagingService`
`tns1:VideoSource/ImageTooBright/RecordingService` | Binary Sensor | Problem | Device reports bright image. | +| `tns1:VideoSource/GlobalSceneChange/AnalyticsService`
`tns1:VideoSource/GlobalSceneChange/ImagingService`
`tns1:VideoSource/GlobalSceneChange/RecordingService` | Binary Sensor | Problem | Device reports a large portion of the video content changing. The cause can be tamper actions like camera movement or coverage. | +| `tns1:RuleEngine/TamperDetector/Tamper` | Binary Sensor | Problem | Tamper Detection. | +| `tns1:Device/HardwareFailure/StorageFailure` | Binary Sensor | Problem | Storage failure on device. | +| `tns1:Monitoring/ProcessorUsage` | Sensor | Percent | Device processor usage. | +| `tns1:Monitoring/OperatingTime/LastReboot` | Sensor | Timestamp | When the device was last rebooted. | +| `tns1:Monitoring/OperatingTime/LastReset` | Sensor | Timestamp | When the device was last reset. | +| `tns1:Monitoring/OperatingTime/LastClockSynchronization` | Sensor | Timestamp | When the device clock was last synchronized. | ### Service `onvif.ptz` @@ -70,13 +59,14 @@ If your ONVIF camera supports PTZ, you will be able to pan, tilt or zoom your ca | Service data attribute | Description | | -----------------------| ----------- | -| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. -| `tilt` | Tilt direction. Allowed values: `UP`, `DOWN`, `NONE` -| `pan` | Pan direction. Allowed values: `RIGHT`, `LEFT`, `NONE` -| `zoom` | Zoom. Allowed values: `ZOOM_IN`, `ZOOM_OUT`, `NONE` -| `distance` | Distance coefficient. Sets how much PTZ should be executed in one request. Allowed values: floating point numbers, 0 to 1. Default : 0.1 -| `speed` | Speed coefficient. Sets how fast PTZ will be executed. Allowed values: floating point numbers, 0 to 1. Default : 0.5 -| `move_mode` | PTZ moving mode. Allowed values: `ContinuousMove`, `RelativeMove`, `AbsoluteMove`. Default :`RelativeMove` -| `continuous_duration` | Set ContinuousMove delay in seconds before stoping the move. Allowed values: floating point numbers or integer. Default : 0.5 +| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. | +| `tilt` | Tilt direction. Allowed values: `UP`, `DOWN`, `NONE` | +| `pan` | Pan direction. Allowed values: `RIGHT`, `LEFT`, `NONE` | +| `zoom` | Zoom. Allowed values: `ZOOM_IN`, `ZOOM_OUT`, `NONE` | +| `distance` | Distance coefficient. Sets how much PTZ should be executed in one request. Allowed values: floating point numbers, 0 to 1. Default : 0.1 | +| `speed` | Speed coefficient. Sets how fast PTZ will be executed. Allowed values: floating point numbers, 0 to 1. Default : 0.5 | +| `preset` | PTZ preset profile token. Sets the preset profile token which is executed with GotoPreset. | +| `move_mode` | PTZ moving mode. Allowed values: `ContinuousMove`, `RelativeMove`, `AbsoluteMove`, `GotoPreset`. Default :`RelativeMove` | +| `continuous_duration` | Set ContinuousMove delay in seconds before stoping the move. Allowed values: floating point numbers or integer. Default : 0.5 | If you are running into trouble with this sensor, please refer to the [Troubleshooting section](/integrations/ffmpeg/#troubleshooting). diff --git a/source/_integrations/ozw.markdown b/source/_integrations/ozw.markdown new file mode 100644 index 00000000000..c21ac79e662 --- /dev/null +++ b/source/_integrations/ozw.markdown @@ -0,0 +1,67 @@ +--- +title: OpenZWave (beta) +description: Instructions on how to integrate OpenZWave with Home Assistant. +ha_category: + - Switch +ha_release: "0.110" +ha_iot_class: Local Push +ha_config_flow: true +ha_codeowners: + - '@cgarwood' + - '@marcelveldt' + - '@MartinHjelmare' +ha_domain: ozw +--- + +This integration allows you to utilize OpenZWave's ozwdaemon to control a Z-Wave network over MQTT. + +## Requirements + +- MQTT server and the [MQTT integration](/integrations/mqtt/) set up in Home Assistant. +- The [ozwdaemon](https://github.com/OpenZWave/qt-openzwave) installed and running in your network. + For Home Assistant Supervisor there's a [custom add-on](https://github.com/marcelveldt/hassio-addons-repo/tree/master/ozwdaemon). +- Supported Z-Wave dongle compatible with OpenZWave 1.6. See this [list](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules) of controllers. The Z-Wave controller dongle should be connected to the same host as where the ozwdaemon is running. + +## Configuration + +This integration can be configured using the integrations in the +Home Assistant frontend. + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and click on **OpenZWave (beta)**. +After completing the configuration flow, the OpenZWave integration will be +available. + +### Secure network key + +The secure network key is set in the settings for the ozwdaemon and +not in the integration configuration. + +## Services + +### Service `ozw.add_node` + +This service will set the controller into inclusion mode and should be used to +add a device (node) to the Z-Wave network. Call the service and then perform +the device-specific procedure, according to the device manual, to add your +device to the network. Make sure the controller is connected to the host where +the ozwdaemon is running, when performing this operation. + +| Service Data Attribute | Required | Description | +| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `secure` | no | Add the new node with secure communications. [Secure network key must be set](#secure-network-key). This process will fallback to add_node (unsecure) for unsupported devices. Note that insecure devices can't directly talk to secure devices. | +| `instance_id` | no | The OZW Instance/Controller to use, defaults to 1. | + +### Service `ozw.remove_node` + +This service will set the controller into exclusion mode and should be used to +remove a device (node) from the Z-Wave network. Call the service and then +perform the device-specific procedure, according to the device manual, +to remove your device from the network. Make sure the controller is connected +to the host where the ozwdaemon is running, when performing +this operation. + +| Service Data Attribute | Required | Description | +| ---------------------- | -------- | -------------------------------------------------- | +| `instance_id` | no | The OZW Instance/Controller to use, defaults to 1. | diff --git a/source/_integrations/pi_hole.markdown b/source/_integrations/pi_hole.markdown index c0afe1be90b..3b836409b43 100644 --- a/source/_integrations/pi_hole.markdown +++ b/source/_integrations/pi_hole.markdown @@ -4,10 +4,12 @@ description: Instructions on how to integrate Pi-hole with Home Assistant. ha_category: - System Monitor ha_iot_class: Local Polling +ha_config_flow: true ha_release: 0.28 ha_codeowners: - '@fabaff' - '@johnluetke' + - '@shenxn' ha_domain: pi_hole --- @@ -15,7 +17,7 @@ The `pi_hole` integration allows you to retrieve statistics and interact with a ## Configuration -To enable this integration with the default configuration, add the following lines to your `configuration.yaml` file +To enable this integration, go to the Integrations page inside the configuration panel. You can also use YAML configuration. Add the following lines to your `configuration.yaml` file ```yaml # Example configuration.yaml entry diff --git a/source/_integrations/plex.markdown b/source/_integrations/plex.markdown index 26db3d91ae3..947b25f2ad1 100644 --- a/source/_integrations/plex.markdown +++ b/source/_integrations/plex.markdown @@ -22,7 +22,7 @@ There is currently support for the following device types within Home Assistant: If your Plex server has been claimed by a Plex account via the [claim interface](https://plex.tv/claim), Home Assistant will require authentication to connect. -The preferred way to enable the Plex integration is via **Configuration** -> **Integrations**. You will be redirected to the [Plex](https://plex.tv) website to sign in with your Plex account. Once access is granted, Home Assistant will connect to the server linked to the associated account. If multiple Plex servers are available on the account, you will be prompted to complete the configuration by selecting the desired server on the Integrations page. Home Assistant will show as an authorized device on the [Plex Web](https://app.plex.tv/web/app) interface under **Settings** -> **Authorized Devices**. +The Plex integration is set up via **Configuration** -> **Integrations**. You will be redirected to the [Plex](https://plex.tv) website to sign in with your Plex account. Once access is granted, Home Assistant will connect to the server linked to the associated account. If multiple Plex servers are available on the account, you will be prompted to complete the configuration by selecting the desired server on the Integrations page. Home Assistant will show as an authorized device on the [Plex Web](https://app.plex.tv/web/app) interface under **Settings** -> **Authorized Devices**.
@@ -30,83 +30,39 @@ Local and secure connections are preferred when setting up an Integration. After
-The `plex` integration can also be configured via `configuration.yaml`: +### Integration Options -```yaml -# Example configuration.yaml entry -plex: - token: MYSECRETTOKEN -``` +Several options are provided to adjust the behavior of `media_player` entities. These can be changed at **Plex** -> **Options** on the Integrations page. -
+**Use episode art**: Display TV episode art instead of TV show art. -Only one Plex server can be configured when using `configuration.yaml`. To add more servers, set up via **Configuration** -> **Integrations**. +**Monitored users**: A list of accounts with access to the Plex server. Only selected users will create `media_player` entities. -
+**Ignore new managed/shared users**: Enable to ignore new Plex accounts granted access to the server. -{% configuration %} -host: - description: The IP address or hostname of your Plex server. - required: false - type: string -port: - description: The port of your Plex Server. - required: false - default: 32400 - type: integer -token: - description: A valid X-Plex-Token for your Plex server. If provided without `host` and `port`, a connection URL will be retreived from Plex. - required: false - type: string -server: - description: Name of Plex server to use if multiple servers are associated with the token's Plex account. Only used if `token` is provided without `host` and `port`. - required: false - type: string -ssl: - description: Use HTTPS to connect to Plex server, **NOTE:** host **must not** be an IP when this option is enabled. - required: false - default: false - type: boolean -verify_ssl: - description: Verify the SSL certificate of your Plex server. You may need to disable this check if your local server enforces secure connections with the default certificate. - required: false - default: true - type: boolean -media_player: - description: Options to set the default behavior of `media_player` entities for new Integrations. **NOTE:** These options are exposed as Configuration Options (**Integrations** -> **Configured** --> **Plex** --> **Gear Icon**). Configuration Options will take precedence. - required: false - type: map - keys: - use_episode_art: - description: Display TV episode art instead of TV show art. - required: false - default: false - type: boolean - ignore_new_shared_users: - description: Do not track Plex clients for newly added Plex users. - required: false - default: false - type: boolean -{% endconfiguration %} +**Ignore Plex Web clients**: Do not create `media_player` entities for Plex Web clients. + + +### Manual Configuration + +Alternatively, you can manually configure a Plex server connection by selecting the "Configure Plex server manually" when configuring a Plex integration. This option is only available to users in "Advanced Mode". This will allow you to specify the server connection options which will be validated before setup is completed. The available options are described below: + +**Host**: The IP address or hostname of your Plex server. Optional if 'Token' is provided. + +**Port**: The port of your Plex Server. + +**Use SSL**: Use HTTPS to connect to Plex server. + +**Verify SSL certificate**: Verify the SSL certificate of your Plex server. May be used if connecting with an IP or if using a self-signed certificate. + +**Token**: A valid authorization token for your Plex server. If provided without 'Host', a connection URL will be retreived from Plex. -```yaml -# Complete configuration.yaml entry -plex: - host: 192.168.1.100 - port: 32400 - token: MY_SECRET_TOKEN - ssl: true - verify_ssl: true - media_player: - use_episode_art: true - ignore_new_shared_users: false -``` ## Media Player The `plex` media_player platform will create Media Player entities for each connected client device. These entities will display media information, playback progress, and playback controls if supported by the device. -By default the Plex integration will create Media Player entities for all local, managed, and shared users on the Plex server. To choose specific users to monitor or ignore, select them via the Configuration Options (**Integrations** -> **Configured** --> **Plex** --> **Gear Icon**). +By default the Plex integration will create Media Player entities for all local, managed, and shared users on the Plex server. To customize which users or client types to monitor, adjust the "*Monitored users*", "*Ignore new managed/shared users*", and "*Ignore Plex Web clients*" options described under [Integration Options](#integration-options). ### Service `play_media` @@ -198,15 +154,7 @@ media_content_id: '{ "library_name": "Adult Movies", "video_name": "Blade" }' ### Notes -* The `plex` integration supports multiple Plex servers. Additional connections can be configured under Configuration > Integrations. -* When setting up a server via `configuration.yaml`, it is possible to get errors that look like the following. - - ```txt - ERROR:plexapi:http://192.168.1.10:32400: ('Connection aborted.', BadStatusLine("''",)) - INFO:homeassistant.components.media_player.plex:No server found at: http://192.168.1.10:32400 - ``` - - If this occurs, check the setting `Server`>`Network`>`Secure connections` on your Plex Media Server: if it is set to `Preferred` or `Required`, you may need to manually set the `ssl` and `verify_ssl` configuration options to, respectively, `true` and `false`. +* The `plex` integration supports multiple Plex servers. Additional connections can be configured under **Configuration** > **Integrations**. * Movies must be located under 'Movies' section in the Plex library to properly get 'playing' state. ## Sensor diff --git a/source/_integrations/point.markdown b/source/_integrations/point.markdown index 11e27eeff31..54190977b04 100644 --- a/source/_integrations/point.markdown +++ b/source/_integrations/point.markdown @@ -15,7 +15,7 @@ ha_codeowners: ha_domain: point --- -The Point hub enables integration with the [Minut Point](https://minut.com/). To connect with Point, you will have to [sign up for a developer account](https://minut.com/community/developers/) and get a `client_id` and `client_secret` with the `callback url` configured as your Home Assistant `base_url` + `/api/minut`, e.g., `http://localhost:8123/api/minut`. The `client_id` and `client_secret` should be used as below. +The Point hub enables integration with the [Minut Point](https://minut.com/). To connect with Point, you will have to [sign up for a developer account](https://minut.com/community/developers/) and get a `client_id` and `client_secret` with the `callback url` configured as your Home Assistant URL + `/api/minut`, e.g., `http://localhost:8123/api/minut`. The `client_id` and `client_secret` should be used as below. Once Home Assistant is started, a configurator will pop up asking you to Authenticate your Point account via a link. When you follow the link and click on **Accept** you will be redirected to the `callback url` and the Point integration will be automatically configured and you can go back to the original dialog and press **Submit**. diff --git a/source/_integrations/pulseaudio_loopback.markdown b/source/_integrations/pulseaudio_loopback.markdown index 0d7b4a6bcd0..2eefcb2fbaa 100644 --- a/source/_integrations/pulseaudio_loopback.markdown +++ b/source/_integrations/pulseaudio_loopback.markdown @@ -41,27 +41,17 @@ name: host: description: The IP address or host name of the PulseAudio server. required: false - default: localhost + default: Use client configuration in /etc/pulse type: string port: description: The port that Pulseaudio is listening on. required: false - default: 4712 - type: integer -buffer_size: - description: How much data to load from Pulseaudio at once. - required: false - default: 1024 - type: integer -tcp_timeout: - description: How long to wait for a response from Pulseaudio before giving up. - required: false - default: 3 + default: 4713 type: integer {% endconfiguration %}
-This integration relies on raw TCP commands to PulseAudio. In order for PulseAudio to accept commands with this component, `module-cli-protocol` must be loaded on the PulseAudio server. +This integration relies on raw TCP commands to PulseAudio. In order for PulseAudio to accept commands with this component, `module-native-protocol` must be loaded on the PulseAudio server.
diff --git a/source/_integrations/rachio.markdown b/source/_integrations/rachio.markdown index b507fa85981..26a0dc764f3 100644 --- a/source/_integrations/rachio.markdown +++ b/source/_integrations/rachio.markdown @@ -76,7 +76,7 @@ panel_iframe: The `rachio` switch platform allows you to toggle zones and schedules connected to your [Rachio irrigation system](https://rachio.com/) on and off. -Once configured, a switch will be added for every zone that is enabled on every controller in the account provided, a switch to start or stop every schedule on a controller, as well as a switch to toggle each controller's standby mode. +Once configured, a switch will be added for every zone that is enabled on every controller in the account provided and a switch to start or stop every schedule on a controller. There will also be a switch to toggle each controller's standby mode, as well as to activate a 24 hour rain delay on the device. ## Examples diff --git a/source/_integrations/rpi_camera.markdown b/source/_integrations/rpi_camera.markdown index 9a690faa564..292a603ab40 100644 --- a/source/_integrations/rpi_camera.markdown +++ b/source/_integrations/rpi_camera.markdown @@ -8,7 +8,7 @@ ha_release: 0.17 ha_domain: rpi_camera --- -The `rpi_camera` platform allows you to integrate the Raspberry Pi camera into Home Assistant. This integration uses the application [`raspistill`](https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspistill.md) to store the image from camera. +The `rpi_camera` integration allows you to integrate the Raspberry Pi camera into Home Assistant. This integration uses the application [`raspistill`](https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspistill.md) to store the image from camera. ## Configuration @@ -16,10 +16,12 @@ To enable this camera in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry -camera: - - platform: rpi_camera +rpi_camera: ``` +The whole set of configuration variables is documented here [`Raspberry Pi Camera Module - Raspberry Pi Documentation`](https://www.raspberrypi.org/documentation/raspbian/applications/camera.md). +They are not all wrapped by this `rpi_camera` platform. + {% configuration %} image_width: description: Set the image width. @@ -61,6 +63,16 @@ timelapse: required: false type: integer default: 1000 +overlay_metadata: + description: Adds some text and/or metadata onto the picture. Check the [`--annotate`](https://www.raspberrypi.org/documentation/raspbian/applications/camera.md) section. + required: false + type: integer + default: none +overlay_timestamp: + description: Helper to add date/time onto the picture. Format as used by [`strftime`](http://man7.org/linux/man-pages/man3/strftime.3.html). + required: false + type: string + default: none file_path: description: Save the picture in a custom file path. required: false diff --git a/source/_integrations/sensor.knx.markdown b/source/_integrations/sensor.knx.markdown index a60c3a0aa38..b626fec2618 100644 --- a/source/_integrations/sensor.knx.markdown +++ b/source/_integrations/sensor.knx.markdown @@ -51,58 +51,145 @@ type: type: string {% endconfiguration %} -| KNX DPT | type | size in byte | unit | -|--------:|--------------------|-------------:|----------------| -| 5.001 | percent | 1 | % | -| 5.003 | angle | 1 | ° | -| 5.004 | percentU8 | 1 | % | -| 5.010 | pulse | 1 | | -| 5.010 | DPT-5 | 1 | | -| 5.010 | 1byte_unsigned | 1 | | -| 6.001 | percentV8 | 1 | % | -| 6.010 | counter_pulses | 1 | counter pulses | -| 7.*** | DPT-7 | 2 | | -| 7.001 | 2byte_unsigned | 2 | pulses | -| 7.012 | current | 2 | mA | -| 7.013 | brightness | 2 | lx | -| 7.600 | color_temperature | 2 | K | -| 8.*** | DPT-8 | 2 | | -| 8.001 | 2byte_signed | 2 | pulses | -| 8.002 | delta_time_ms | 2 | ms | -| 8.005 | delta_time_sec | 2 | s | -| 8.006 | delta_time_min | 2 | min | -| 8.007 | delta_time_hrs | 2 | h | -| 8.010 | percentV16 | 2 | % | -| 8.011 | rotation_angle | 2 | ° | -| 9.* | enthalpy | 2 | H | -| 9.*** | DPT-9 | 2 | | -| 9.001 | temperature | 2 | °C | -| 9.004 | illuminance | 2 | lx | -| 9.005 | speed_ms | 2 | m/s | -| 9.006 | pressure_2byte | 2 | Pa | -| 9.007 | humidity | 2 | % | -| 9.008 | ppm | 2 | ppm | -| 9.020 | voltage | 2 | mV | -| 12.*** | DPT-12 | 4 | | -| 12.*** | 4byte_unsigned | 4 | | -| 13.*** | DPT-13 | 4 | | -| 13.*** | 4byte_signed | 4 | | -| 14.*** | DPT-14 | 4 | | -| 14.*** | 4byte_float | 4 | | -| 14.019 | electric_current | 4 | A | -| 14.027 | electric_potential | 4 | V | -| 14.031 | energy | 4 | J | -| 14.033 | frequency | 4 | Hz | -| 14.036 | heatflowrate | 4 | W | -| 14.042 | luminous_flux | 4 | lm | -| 14.054 | phaseanglerad | 4 | rad | -| 14.055 | phaseangledeg | 4 | ° | -| 14.056 | power | 4 | W | -| 14.057 | powerfactor | 4 | | -| 14.058 | pressure | 4 | Pa | -| 14.065 | speed | 4 | m/s | -| 16.000 | string | 14 | | -| 17.001 | scene_number | 1 | | +| KNX DPT | type | size in byte | range | unit | +|--------:|-------------------------------|-------------:|:--------------------------:|----------------| +| 5.001 | percent | 1 | 0 ... 100 | % | +| 5.003 | angle | 1 | 0 ... 360 | ° | +| 5.004 | percentU8 | 1 | 0 ... 255 | % | +| 5.010 | pulse | 1 | 0 ... 255 | | +| 5.010 | 1byte_unsigned | 1 | 0 ... 255 | | +| 6.001 | percentV8 | 1 | -128 ... 127 | % | +| 6.010 | counter_pulses | 1 | -128 ... 127 | counter pulses | +| 7.001 | 2byte_unsigned | 2 | 0 ... 65535 | pulses | +| 7.002 | time_period_msec | 2 | 0 ... 65535 | ms | +| 7.003 | time_period_10msec | 2 | 0 ... 65535 | ms | +| 7.004 | time_period_100msec | 2 | 0 ... 65535 | ms | +| 7.005 | time_period_sec | 2 | 0 ... 65535 | s | +| 7.006 | time_period_min | 2 | 0 ... 65535 | min | +| 7.007 | time_period_hrs | 2 | 0 ... 65535 | h | +| 7.011 | length_mm | 2 | 0 ... 65535 | mm | +| 7.012 | current | 2 | 0 ... 65535 | mA | +| 7.013 | brightness | 2 | 0 ... 65535 | lx | +| 7.600 | color_temperature | 2 | 0 ... 65535 | K | +| 8.001 | 2byte_signed | 2 | -32768 ... 32767 | pulses | +| 8.002 | delta_time_ms | 2 | -32768 ... 32767 | ms | +| 8.005 | delta_time_sec | 2 | -32768 ... 32767 | s | +| 8.006 | delta_time_min | 2 | -32768 ... 32767 | min | +| 8.007 | delta_time_hrs | 2 | -32768 ... 32767 | h | +| 8.010 | percentV16 | 2 | -32768 ... 32767 | % | +| 8.011 | rotation_angle | 2 | -32768 ... 32767 | ° | +| 9.* | enthalpy | 2 | -671088.64 ... 670760.96 | H | +| 9.001 | temperature | 2 | -273 ... 670760 | °C | +| 9.002 | temperature_difference_2byte | 2 | -670760 ... 670760 | K | +| 9.003 | temperature_a | 2 | -670760 ... 670760 | K/h | +| 9.004 | illuminance | 2 | 0 ... 670760 | lx | +| 9.005 | wind_speed_ms | 2 | 0 ... 670760 | m/s | +| 9.006 | pressure_2byte | 2 | 0 ... 670760 | Pa | +| 9.007 | humidity | 2 | 0 ... 670760 | % | +| 9.008 | ppm | 2 | -671088.64 ... 670760.96 | ppm | +| 9.010 | time_1 | 2 | -670760 ... 670760 | s | +| 9.011 | time_2 | 2 | -670760 ... 670760 | ms | +| 9.020 | voltage | 2 | -671088.64 ... 670760.96 | mV | +| 9.022 | power_density | 2 | -671088.64 ... 670760.96 | W/m² | +| 9.023 | kelvin_per_percent | 2 | -671088.64 ... 670760.96 | K/% | +| 9.024 | power_2byte | 2 | -671088.64 ... 670760.96 | kW | +| 9.025 | volume_flow | 2 | -671088.64 ... 670760.96 | l/h | +| 9.026 | rain_amount | 2 | -671088.64 ... 670760.96 | l/m² | +| 9.027 | temperature_f | 2 | -459.6 ... 670760 | °F | +| 9.028 | wind_speed_kmh | 2 | 0 ... 670760 | km/h | +| 12.*** | 4byte_unsigned | 4 | 0 ... 4294967295 | | +| 13.*** | 4byte_signed | 4 | -2147483648 ... 2147483647 | | +| 13.002 | flow_rate_m3h | 4 | -2147483648 ... 2147483647 | m³/h | +| 13.010 | active_energy | 4 | -2147483648 ... 2147483647 | Wh | +| 13.011 | apparant_energy | 4 | -2147483648 ... 2147483647 | VAh | +| 13.012 | reactive_energy | 4 | -2147483648 ... 2147483647 | VARh | +| 13.013 | active_energy_kwh | 4 | -2147483648 ... 2147483647 | kWh | +| 13.014 | apparant_energy_kvah | 4 | -2147483648 ... 2147483647 | kVAh | +| 13.015 | reactive_energy_kvarh | 4 | -2147483648 ... 2147483647 | kVARh | +| 13.100 | long_delta_timesec | 4 | -2147483648 ... 2147483647 | s | +| 14.000 | acceleration | 4 | | m/s² | +| 14.*** | 4byte_float | 4 | | | +| 14.001 | acceleration_angular | 4 | | rad/s² | +| 14.002 | activation_energy | 4 | | J/mol | +| 14.003 | activity | 4 | | s⁻¹ | +| 14.004 | mol | 4 | | mol | +| 14.005 | amplitude | 4 | | | +| 14.006 | angle_rad | 4 | | rad | +| 14.007 | angle_deg | 4 | | ° | +| 14.008 | angular_momentum | 4 | | J s | +| 14.009 | angular_velocity | 4 | | rad/s | +| 14.010 | area | 4 | | m² | +| 14.011 | capacitance | 4 | | F | +| 14.012 | charge_density_surface | 4 | | C/m² | +| 14.013 | charge_density_volume | 4 | | C/m³ | +| 14.014 | compressibility | 4 | | m²/N | +| 14.015 | conductance | 4 | | S | +| 14.016 | electrical_conductivity | 4 | | S/m | +| 14.017 | density | 4 | | kg/m³ | +| 14.018 | electric_charge | 4 | | C | +| 14.019 | electric_current | 4 | | A | +| 14.020 | electric_current_density | 4 | | A/m² | +| 14.021 | electric_dipole_moment | 4 | | C m | +| 14.022 | electric_displacement | 4 | | C/m² | +| 14.023 | electric_field_strength | 4 | | V/m | +| 14.024 | electric_flux | 4 | | c | +| 14.025 | electric_flux_density | 4 | | C/m² | +| 14.026 | electric_polarization | 4 | | C/m² | +| 14.027 | electric_potential | 4 | | V | +| 14.028 | electric_potential_difference | 4 | | V | +| 14.029 | electromagnetic_moment | 4 | | A m² | +| 14.030 | electromotive_force | 4 | | V | +| 14.031 | energy | 4 | | J | +| 14.032 | force | 4 | | N | +| 14.033 | frequency | 4 | | Hz | +| 14.034 | angular_frequency | 4 | | rad/s | +| 14.035 | heatcapacity | 4 | | J/K | +| 14.036 | heatflowrate | 4 | | W | +| 14.037 | heat_quantity | 4 | | J | +| 14.038 | impedance | 4 | | Ω | +| 14.039 | length | 4 | | m | +| 14.040 | light_quantity | 4 | | lm s | +| 14.041 | luminance | 4 | | cd/m² | +| 14.042 | luminous_flux | 4 | | lm | +| 14.043 | luminous_intensity | 4 | | cd | +| 14.044 | magnetic_field_strength | 4 | | A/m | +| 14.045 | magnetic_flux | 4 | | Wb | +| 14.046 | magnetic_flux_density | 4 | | T | +| 14.047 | magnetic_moment | 4 | | A m² | +| 14.048 | magnetic_polarization | 4 | | T | +| 14.049 | magnetization | 4 | | A/m | +| 14.050 | magnetomotive_force | 4 | | A | +| 14.051 | mass | 4 | | kg | +| 14.052 | mass_flux | 4 | | kg/s | +| 14.053 | momentum | 4 | | N/s | +| 14.054 | phaseanglerad | 4 | | rad | +| 14.055 | phaseangledeg | 4 | | ° | +| 14.056 | power | 4 | | W | +| 14.057 | powerfactor | 4 | | cosΦ | +| 14.058 | pressure | 4 | | Pa | +| 14.059 | reactance | 4 | | Ω | +| 14.060 | resistance | 4 | | Ω | +| 14.061 | resistivity | 4 | | Ω m | +| 14.062 | self_inductance | 4 | | H | +| 14.063 | solid_angle | 4 | | sr | +| 14.064 | sound_intensity | 4 | | W/m² | +| 14.065 | speed | 4 | | m/s | +| 14.066 | stress | 4 | | Pa | +| 14.067 | surface_tension | 4 | | N/m | +| 14.068 | common_temperature | 4 | | °C | +| 14.069 | absolute_temperature | 4 | | K | +| 14.070 | temperature_difference | 4 | | K | +| 14.071 | thermal_capacity | 4 | | J/K | +| 14.072 | thermal_conductivity | 4 | | W/mK | +| 14.073 | thermoelectric_power | 4 | | V/K | +| 14.074 | time_seconds | 4 | | s | +| 14.075 | torque | 4 | | N m | +| 14.076 | volume | 4 | | m³ | +| 14.077 | volume_flux | 4 | | m³/s | +| 14.078 | weight | 4 | | N | +| 14.079 | work | 4 | | J | +| 16.000 | string | 14 | | | +| 17.001 | scene_number | 1 | 1 ... 64 | | ## Full example diff --git a/source/_integrations/sensor.modbus.markdown b/source/_integrations/sensor.modbus.markdown index 17ed91eb7c2..10664b4a526 100644 --- a/source/_integrations/sensor.modbus.markdown +++ b/source/_integrations/sensor.modbus.markdown @@ -104,7 +104,7 @@ registers: default: 0 type: integer data_type: - description: Response representation (int, uint, float, custom). If float selected, value will be converted to IEEE 754 floating point format. + 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 diff --git a/source/_integrations/serial.markdown b/source/_integrations/serial.markdown index abf12d281c4..d75b4df2f1d 100644 --- a/source/_integrations/serial.markdown +++ b/source/_integrations/serial.markdown @@ -43,6 +43,36 @@ baudrate: required: false default: 9600 Bps type: integer +bytesize: + description: "Number of data bits. Possible values: `5=FIVEBITS`, `6=SIXBITS`, `7=SEVENBITS`, `8=EIGHTBITS`." + required: false + default: 8 + type: integer +parity: + description: "Enable parity checking. Possible values: `N=PARITY_NONE`, `E=PARITY_EVEN`, `O=PARITY_ODD`, `M=PARITY_MARK`, `S=PARITY_SPACE`." + required: false + default: "N" + type: string +stopbits: + description: "Number of stop bits. Possible values: `1=STOPBITS_ONE`, `1.5=STOPBITS_ONE_POINT_FIVE`, `2=STOPBITS_TWO`." + required: false + default: 1 + type: float +xonxoff: + description: Enable software flow control. + required: false + default: False + type: boolean +rtscts: + description: Enable hardware (RTS/CTS) flow control. + required: false + default: False + type: boolean +dsrdtr: + description: Enable hardware (DSR/DTR) flow control. + required: false + default: False + type: boolean value_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the serial line." required: false diff --git a/source/_integrations/signal_messenger.markdown b/source/_integrations/signal_messenger.markdown index 10ff747cc09..34dae8603f9 100644 --- a/source/_integrations/signal_messenger.markdown +++ b/source/_integrations/signal_messenger.markdown @@ -37,6 +37,10 @@ notify: - "RECIPIENT1" ``` +Both phone numbers and Signal Messenger groups can be added to the `recipients`list. However, it's not possible to mix phone numbers and Signal Messenger groups in a single notifier. If you would like to send messages to individual phone numbers and Signal Messenger groups, separate notifiers need to be created. + +To obtain the Signal Messenger group ids, follow [this guide]( https://github.com/bbernhard/signal-cli-rest-api/blob/master/doc/HOMEASSISTANT.md). + {% configuration %} name: description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. @@ -52,7 +56,7 @@ number: required: true type: string recipients: - description: A list of recipients. + description: A list of recipients (either phone numbers or Signal Messenger group ids). required: true type: string {% endconfiguration %} diff --git a/source/_integrations/simplisafe.markdown b/source/_integrations/simplisafe.markdown index 8224a9f0334..170f75d2cf8 100644 --- a/source/_integrations/simplisafe.markdown +++ b/source/_integrations/simplisafe.markdown @@ -51,6 +51,12 @@ Note that the `system_id` parameter required by the below service calls can be d by looking at the device state attributes for the integration's `alarm_control_panel` entity. +### `simplisafe.clear_notifications` + +Clear any existing notifications within the SimpliSafe cloud; this will mark existing +notifications as "read" in the SimpliSafe web and mobile apps, as well as prevent them +from triggering future `SIMPLISAFE_NOTIFICATION` events. + ### `simplisafe.remove_pin` Remove a SimpliSafe PIN (by label or PIN value). @@ -144,3 +150,8 @@ event data that contains the following keys: * `code`: The SimpliSafe code for the notification * `message`: The actual text of the notification * `timestamp`: The UTC timestamp of the notification + +Note that when Home Assistant restarts, `SIMPLISAFE_NOTIFICATION` events will fire once +again for any notifications still active in the SimpliSafe web and mobile apps. To +prevent this, either (a) clear them in the web/mobile app or (b) utilize the +`simplisafe.clear_notifications` service described above. diff --git a/source/_integrations/sleepiq.markdown b/source/_integrations/sleepiq.markdown index 6ca83f79130..9a206fd5248 100644 --- a/source/_integrations/sleepiq.markdown +++ b/source/_integrations/sleepiq.markdown @@ -5,13 +5,12 @@ ha_category: - Health - Sensor - Binary Sensor - - Light ha_release: 0.29 ha_iot_class: Local Polling ha_domain: sleepiq --- -The SleepIQ implementation lets you view sensor data from [SleepIQ by SleepNumber](https://www.sleepnumber.com/sleepiq-sleep-tracker). In particular, it lets you see the occupancy and current SleepNumber (ie current firmness) of each side of a SleepNumber bed. Control of the lights included in the FlexFit platform is available as well. +The SleepIQ implementation lets you view sensor data from [SleepIQ by SleepNumber](https://www.sleepnumber.com/sleepiq-sleep-tracker). In particular, it lets you see the occupancy and current SleepNumber (ie current firmness) of each side of a SleepNumber bed. ## Setup diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index d3e0ee4e835..aa1be156723 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -52,7 +52,7 @@ The PAT is used to create a Home Assistant SmartApp in your SmartThings account This integration requires an internet accessible incoming webhook to receive push updates from SmartThings. The preferred approach is to subscribe to [Home Assistant Cloud (Nabu Casa)](https://www.nabucasa.com/) and the integration will configure and use a cloudhook automatically. Alternatively, you will have to configure and setup a internet accessible webhook in Home Assistant as described below: 1. Setup [remote access](/docs/configuration/remote/) via a domain name secured with SSL. *Self-signed SSL certificates are not supported by the SmartThings Cloud API.* -1. Set [`base_url` of the HTTP integration](/integrations/http#base_url) to the URL that Home Assistant is available on the internet (this must start with `https://`). +1. Set the external URL in the Home Assistant [configuration](/docs/configuration/basic) to the URL that Home Assistant is available on the internet (this must start with `https://`). ## Setup instructions @@ -282,7 +282,7 @@ The SmartThings Switch platform lets you control devices that have the [`switch` #### Aborted: Home Assistant is not configured correctly to receive updates from SmartThings -This error message occurs when you do not have an active Home Assistant Cloud (Nabu Casa) subscription and the `base_url` is not configured correctly (it must start with `https`). Update your Home Assistant configuration per the prerequisites above, restart, and try again. +This error message occurs when you do not have an active Home Assistant Cloud (Nabu Casa) subscription and the external URL is not configured correctly (it must start with `https`). Update your Home Assistant configuration per the prerequisites above, and try again. #### Error: The token must be in the UID/GUID format @@ -306,7 +306,7 @@ This error message occurs when all of the SmartThings locations under the accoun #### Webhook Troubleshooting Checklist -1. Ensure `base_url` is properly set to the _external address_ that Home Assistant is available to the internet. SmartThings must be able to reach this address. +1. Ensure external URL is properly set to the _external address_ that Home Assistant is available to the internet. SmartThings must be able to reach this address. 1. Validate there are no problems with your certificate or SSL configuration by using an online checker, such as [https://www.digicert.com/help/](https://www.digicert.com/help/). 1. Some reverse proxy configuration settings can interfere with communication from SmartThings. For example, TLSv1.3 is not supported. Setting the supported cipher suite too restrictly will prevent handshaking. The following NGINX SSL configuration is known to work: ```nginx @@ -324,9 +324,9 @@ This error message occurs when all of the SmartThings locations under the accoun ``` 1. While the error message (above) is being displayed, run the following command from outside your local network to confirm it is responding to the ping lifecycle event: ```bash - curl -X POST https://{BASE_URL}/api/webhook/{WEBHOOK_ID} -H "Content-Type: application/json; charset=utf-8" -d $'{"lifecycle": "PING", "executionId": "00000000-0000-0000-0000-000000000000", "locale": "en", "version": "1.0.0", "pingData": { "challenge": "00000000-0000-0000-0000-000000000000"}}' + curl -X POST https://{EXTERNAL_URL}/api/webhook/{WEBHOOK_ID} -H "Content-Type: application/json; charset=utf-8" -d $'{"lifecycle": "PING", "executionId": "00000000-0000-0000-0000-000000000000", "locale": "en", "version": "1.0.0", "pingData": { "challenge": "00000000-0000-0000-0000-000000000000"}}' ``` - Where `{BASE_URL}` is your external address and `{WEBHOOK_ID}` is the value of `webhook_id` from `.storage/smartthings` in your Home Assistant configuration directory. + Where `{EXTERNAL_URL}` is your external address and `{WEBHOOK_ID}` is the value of `webhook_id` from `.storage/smartthings` in your Home Assistant configuration directory. The expected response is: ```bash diff --git a/source/_integrations/snmp.markdown b/source/_integrations/snmp.markdown index 38dfbe74249..07464de78c2 100644 --- a/source/_integrations/snmp.markdown +++ b/source/_integrations/snmp.markdown @@ -329,6 +329,11 @@ command_payload_off: description: The value to write to turn off the switch, if different from `payload_off`. required: false type: string +vartype: + description: The SNMP vartype for the `payload_on` and `payload_off` commands as defined in [RFC1902](https://tools.ietf.org/html/rfc1902.html). + required: false + type: string + default: 'none' {% endconfiguration %} You should check with your device's vendor to find out the correct BaseOID and what values turn the switch on and off. @@ -352,6 +357,20 @@ Valid values for `priv_protocol`: - **aes-cfb-192** - **aes-cfb-256** +Valid values for `vartype`: + +- **Counter32** +- **Counter64** +- **Gauge32** +- **Integer32** +- **Integer** +- **IpAddress** +- **ObjectIdentifier** +- **OctetString** +- **Opaque** +- **TimeTicks** +- **Unsigned32** + Complete examples: ```yaml @@ -376,4 +395,18 @@ switch: baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0 payload_on: 1 payload_off: 0 + + - platform: snmp + name: Enable PoE on Netgear switch port 2 using SNMP v3 + host: 192.168.0.4 + version: '3' + username: 'myusername' + auth_key: 'myauthkey' + auth_protocol: 'hmac-sha' + priv_key: 'myprivkey' + priv_protocol: 'des' + baseoid: 1.3.6.1.4.1.4526.11.15.1.1.1.1.1.2 + payload_on: 15400 + payload_off: 3000 + vartype: Gauge32 ``` diff --git a/source/_integrations/songpal.markdown b/source/_integrations/songpal.markdown index 9cee6055350..eabea905e03 100644 --- a/source/_integrations/songpal.markdown +++ b/source/_integrations/songpal.markdown @@ -1,13 +1,15 @@ --- title: Sony Songpal description: Instructions on how to integrate Sony Songpal devices into Home Assistant. -logo: sony.png ha_category: - Media Player ha_iot_class: Local Push ha_release: 0.65 +ha_config_flow: true +ha_quality_scale: gold ha_codeowners: - '@rytilahti' + - '@shenxn' ha_domain: songpal --- @@ -26,12 +28,11 @@ A few notes: ## Configuration -The platform will be loaded automatically by discovery component. If you want to manually configure it, add the following to your `configuration.yaml` file: +Supported devices will be automatically discovered and can be set up through UI. If you want to manually configure it in YAML configuration, add the following to your `configuration.yaml` file: ```yaml -media_player: - - platform: songpal - name: my soundbar +songpal: + - name: my soundbar endpoint: http://IP_ADDRESS:10000/sony ``` @@ -58,6 +59,6 @@ For a list of available settings and their values use [`songpal sound`](https:// | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------| -| `entity_id` | yes | Target entity, leave unset for all devices | +| `entity_id` | yes | Target entity. To target all songpal devices, use `all` | | `name` | no | Configuration variable, e.g., `nightmode` | | `value` | no | New configuration value, e.g., `on` | diff --git a/source/_integrations/spotify.markdown b/source/_integrations/spotify.markdown index fb7936ca364..824b8625ebd 100644 --- a/source/_integrations/spotify.markdown +++ b/source/_integrations/spotify.markdown @@ -35,8 +35,6 @@ To create the required Spotify application: - If you are using SSL: `https://:/auth/external/callback` - Click **Save** after adding the URI. -If you are using an externally accessible address, you will likely also need to set the `base_url` attribute of the [HTTP Integration](/integrations/http/). This should be set using the same base URL as the redirect URI, e.g., if you used a domain name (not local IP) in the redirect, then use the same domain name in your `base_url`. - ## Configuration To add Spotify to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_integrations/squeezebox.markdown b/source/_integrations/squeezebox.markdown index 22dd131eea2..929c60fa9e1 100644 --- a/source/_integrations/squeezebox.markdown +++ b/source/_integrations/squeezebox.markdown @@ -75,7 +75,44 @@ This service can be used to integrate any Squeezebox action to an automation. It can also be used to target a Squeezebox from IFTTT (or Dialogflow, Alexa...). For example, to play an album from your collection, create an IFTTT applet like this: + - Trigger: Google assistant, with sentence: `I want to listen to album $` - Action: JSON post query with such JSON body: `{ "entity_id": "media_player.squeezebox_radio", "command": "playlist", "parameters": ["loadtracks", "album.titlesearch={{TextField}}"] }` + This can work with title search and basically any thing. The same wouldn't have worked by calling directly Squeezebox server as IFTTT cannot escape the text field. + +### Service `call_query` + +Call a custom Squeezebox JSON-RPC API. The result of the query will be stored in the 'query_result' attribute of the player. + +See documentation for this interface on `http://HOST:PORT/html/docs/cli-api.html?player=` where HOST and PORT are the host name and port for your Logitech Media Server. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Name(s) of the Squeezebox entities where to run the API method. +| `command` | no | Command to pass to Logitech Media Server (p0 in the CLI documentation). +| `parameters` | yes | Array of additional parameters to pass to Logitech Media Server (p1, ..., pN in the CLI documentation). + +This service can be used to integrate a Squeezebox query into an automation. For example, in a Python script, you can get a list of albums available by an artist like this: +`hass.services.call("squeezebox", "call_query", { "entity_id": "media_player.kitchen", "command": "albums", "parameters": ["0", "20", "search:beatles", "tags:al"] })` +To work with the results: +`result = hass.states.get("media_player.kitchen").attributes['query_result']` + +### Service `sync` + +Add another player to this player's sync group. If the other player is already in a sync group, it will leave it. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Name(s) of the Squeezebox entities where to run the API method. +| `other_player` | no | Name of the other Squeezebox player to join the sync group. + +### Service `unsync` + +Remove this player from its sync group. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Name(s) of the Squeezebox entities where to run the API method. +======= diff --git a/source/_integrations/ssdp.markdown b/source/_integrations/ssdp.markdown index 1b35eaf014b..86b6a15e507 100644 --- a/source/_integrations/ssdp.markdown +++ b/source/_integrations/ssdp.markdown @@ -30,3 +30,5 @@ The following integrations are automatically discovered by the SSDP integration: - [Philips Hue](../hue/) - [Roku](/integrations/roku/) - [Samsung TV](../samsungtv/) + - [UPnP](../upnp/) + - [Sony Songpal](../songpal/) diff --git a/source/_integrations/stream.markdown b/source/_integrations/stream.markdown index 42f34c02134..b031c1f21dc 100644 --- a/source/_integrations/stream.markdown +++ b/source/_integrations/stream.markdown @@ -11,7 +11,7 @@ ha_codeowners: ha_domain: stream --- -The `stream` integration provides a way to proxy live streams through Home Assistant. The integration currently only supports proxying H.264 source streams to the HLS format and requires at least FFmpeg >= 3.2. +The `stream` integration provides a way to proxy live streams through Home Assistant. The integration currently only supports proxying H.264 source streams to the HLS format and requires at least FFmpeg >= 4. ## Configuration @@ -59,16 +59,17 @@ To do this add either [picture-entity](/lovelace/picture-entity/), [picture-glan ## Troubleshooting -Some users on manual installs may see the following error in their logs after restarting: +Users on manual installs with FFmpeg < 4 may see an error similar to: ```text -2019-03-12 08:49:59 ERROR (SyncWorker_5) [homeassistant.util.package] Unable to install package av==6.1.2: Command "/home/pi/home-assistant/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-udfl2b3t/av/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-ftn5zmh2/install-record.txt --single-version-externally-managed --compile --install-headers /home/pi/home-assistant/include/site/python3.6/av" failed with error code 1 in /tmp/pip-install-udfl2b3t/av/ -2019-03-12 08:49:59 ERROR (MainThread) [homeassistant.requirements] Not initializing stream because could not install requirement av==6.1.2 -2019-03-12 08:49:59 ERROR (MainThread) [homeassistant.setup] Setup failed for stream: Could not install all requirements. +2020-04-28 13:35:43 ERROR (SyncWorker_5) [homeassistant.util.package] Unable to install package av==7.0.1: ERROR: Command errored out with exit status 1: + command: /mnt/c/dev/home-assistant/venv/bin/python3.7 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-twd7glz2/av/setup.py'"'"'; __file__='"'"'/tmp/pip-install-twd7glz2/av/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-x9tw2ql2/install-record.txt --single-version-externally-managed --compile --install-headers /mnt/c/dev/home-assistant/venv/include/site/python3.7/av + cwd: /tmp/pip-install-twd7glz2/av/ ``` -If you see this error you can solve it by running the following commands and restarting Home Assistant (commands do not need to be ran as the `homeassistant` user): +You can solve this by running the following steps to update FFmpeg >= 4: ```text -sudo apt-get install -y python-dev pkg-config libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev libavresample-dev libavfilter-dev +sudo add-apt-repository ppa:jonathonf/ffmpeg-4 +sudo apt upgrade ``` diff --git a/source/_integrations/switcher_kis.markdown b/source/_integrations/switcher_kis.markdown index 191f50eb0bd..976bc2f4382 100644 --- a/source/_integrations/switcher_kis.markdown +++ b/source/_integrations/switcher_kis.markdown @@ -74,3 +74,14 @@ Meaning the device will turn itself off when reaching the auto-off configuration | ------------- | --------- | -------------------------------------------------------------------------------------- | -------------------------- | | `entity_id` | Yes | Name of the entity id associated with the integration, used for permission validation. | switch.switcher_kis_boiler | | `auto_off` | Yes | Time period string containing hours and minutes. | "02:30" | + +### Service: `switcher_kis.turn_on_with_timer` + +You can use the `switcher_kis.turn_on_with_timer` service to turn on the switcher device with timer. + +Meaning the device will turn itself off when timer ends. +Note: This does not affect the auto off timer. +| Service Field | Mandatory | Description | Example | +| ------------- | --------- | -------------------------------------------------------------------------------------- | -------------------------- | +| `entity_id` | Yes | Name of the entity id associated with the integration, used for permission validation. | switch.switcher_kis_boiler | +| `timer_minutes` | Yes | Integer containing timer minutes (valid range 1 to 90) | 90 | diff --git a/source/_integrations/telegram_webhooks.markdown b/source/_integrations/telegram_webhooks.markdown index ecbb54833cc..269ebd22990 100644 --- a/source/_integrations/telegram_webhooks.markdown +++ b/source/_integrations/telegram_webhooks.markdown @@ -19,9 +19,6 @@ To integrate this into Home Assistant, add the following section to your `config ```yaml # Example configuration.yaml entry -http: - base_url: # the Home Assistant https url which is exposed to the internet. - telegram_bot: - platform: webhooks api_key: YOUR_API_KEY @@ -54,7 +51,7 @@ proxy_params: required: false type: string url: - description: Allow to overwrite the `base_url` from the [`http`](/integrations/http/) integration for different configurations (`https://:`). + description: Allow to overwrite the external URL from the Home Assistant [configuration](/docs/configuration/basic/) for different setups (`https://:`). required: false type: string trusted_networks: @@ -72,9 +69,6 @@ The configuration sample below shows how an entry can look like: ```yaml # Example configuration.yaml entry -http: - base_url: - telegram_bot: - platform: webhooks api_key: YOUR_API_KEY diff --git a/source/_integrations/tibber.markdown b/source/_integrations/tibber.markdown index 2676dec5f50..9bdc2489c91 100644 --- a/source/_integrations/tibber.markdown +++ b/source/_integrations/tibber.markdown @@ -25,21 +25,8 @@ There is currently support for the following device types within Home Assistant: Go to [developer.tibber.com/settings/accesstoken](https://developer.tibber.com/settings/accesstoken) to get your API token. -## Configuration +To add Tibber to your installation, go to Configuration >> Integrations in the UI and enable the Tibber integration. -To add Tibber to your installation, add the following to your `configuration.yaml` file: - -```yaml -tibber: - access_token: YOUR_ACCESS_TOKEN -``` - -{% configuration %} -access_token: - description: Your Tibber API token. - required: true - type: string -{% endconfiguration %} ## Notifications diff --git a/source/_integrations/tts.markdown b/source/_integrations/tts.markdown index ce1d463da84..a8ed07ae8fb 100644 --- a/source/_integrations/tts.markdown +++ b/source/_integrations/tts.markdown @@ -21,7 +21,7 @@ tts:
-Depending on your setup, you might need to set a base URL (`base_url`) inside the [HTTP component](/integrations/http/) or in the parameters of this component. +Depending on your setup, you might need to set a external URL (`external_url`) inside the [configuration](/docs/configuration/basic/) or in the parameters of this component.
@@ -44,10 +44,10 @@ time_memory: type: integer default: 300 base_url: - description: A base URL to use *instead* of the one set in the [HTTP component](/integrations/http/). It is used as-is by the `tts` component. In particular, you need to include the protocol scheme `http://` or `https://` and the correct port number. They will not be automatically added for you. + description: A base URL to use *instead* of the one set in the Home Assistant [configuration](/docs/configuration/basic). It is used as-is by the `tts` component. In particular, you need to include the protocol scheme `http://` or `https://` and the correct port number. They will not be automatically added for you. required: false type: string - default: value of ``http.base_url`` + default: value of internal URL service_name: description: Define the service name. required: false @@ -70,21 +70,21 @@ tts:
-In the above example, `base_url` is custom to this particular TTS platform configuration. It is not suggesting that you use the `base_url` that you have set for your core Home Assistant configuration. The reason you might need to do this is outlined in the next section. +In the above example, `base_url` is custom to this particular TTS platform configuration. It is not suggesting that you use the internal URL that you have set for your core Home Assistant configuration. The reason you might need to do this is outlined in the next section.
## When do you need to set `base_url` here? -The general answer is "whenever the global `base_url` set in [HTTP component](/integrations/http/) is not adequate to allow the `say` service to run". The `say` service operates by generating a media file that contains the speech corresponding to the text passed to the service. Then the `say` service sends a message to the media device with a URL pointing to the file. The device fetches the media file at the URL and plays the media. Some combinations of a media device, network configuration and Home Assistant configuration can make it so that the device cannot fetch the media file. +The general answer is "whenever the global internal URL set in the [configuration](/docs/configuration/basic/) of Home Assistant is not adequate to allow the `say` service to run". The `say` service operates by generating a media file that contains the speech corresponding to the text passed to the service. Then the `say` service sends a message to the media device with a URL pointing to the file. The device fetches the media file at the URL and plays the media. Some combinations of a media device, network configuration and Home Assistant configuration can make it so that the device cannot fetch the media file. The following sections describe some of the problems encountered with media devices. ### Self-signed certificates -This problem occurs when your Home Assistant instance is configured to be accessed through SSL, and you are using a self-signed certificate. +This problem occurs when your Home Assistant instance is configured to be accessed through SSL, and you are using a self-signed certificate on your internal URL. -The `tts` service will send an `https://` URL to the media device, which will check the certificate, and reject it. So it won't play your file. If you could make the device accept your certificate, it would play the file. However, many media devices do not allow changing settings to accept self-signed certificates. Ultimately, your option may be to serve files to the device as `http://` rather than `https://`. To do this, you *could* change the `base_url` setting in [HTTP component](/integrations/http/), but that would turn off SSL for all services that use `base_url`. Instead, setting a `base_url` for the `tts` service allows turning off SSL only for this component. +The `tts` service will send an `https://` URL to the media device, which will check the certificate, and reject it. So it won't play your file. If you could make the device accept your certificate, it would play the file. However, many media devices do not allow changing settings to accept self-signed certificates. Ultimately, your option may be to serve files to local devices as `http://` rather than `https://`. ### Google cast devices @@ -92,9 +92,7 @@ The Google cast devices (Google Home, Chromecast, etc.) present the following pr * They [reject self-signed certificates](#self-signed-certificates). -* They do not work with URLs that contain hostnames established by local naming means. Let's say your Home Assistant instance is running on a machine made known locally as `ha`. All your machines on your local network are able to access it as `ha`. However, try as you may, your cast device won't download the media files from your `ha` machine. That's because your cast device ignores your local naming setup. In this example, the `say` service creates a URL like `http://ha/path/to/media.mp3` (or `https://...` if you are using SSL). Setting a `base_url` that contains the IP address of your server works around this issue. By using an IP address, the cast device does not have to resolve the hostname. - -* An alternative way to force Google cast devices to use internal DNS is to block them from accessing Google DNS at the firewall/router level. This would be useful in the case, for example, where your internal IP of Home Assistant is a private IP and you have your internal DNS server (quite often a split-brain DNS scenario). This method works on both Google Home Mini and Google Chromecasts. +* They do not work with URLs that contain hostnames established by local naming means. Let's say your Home Assistant instance is running on a machine made known locally as `ha`. All your machines on your local network are able to access it as `ha`. However, try as you may, your cast device won't download the media files from your `ha` machine. That's because your cast device ignores your local naming setup. In this example, the `say` service creates a URL like `http://ha/path/to/media.mp3` (or `https://...` if you are using SSL). Setting a internal URL that contains the IP address of your server works around this issue. By using an IP address, the cast device does not have to resolve the hostname. ## Service say diff --git a/source/_integrations/tuya.markdown b/source/_integrations/tuya.markdown index b3658811662..04f3048f1a3 100644 --- a/source/_integrations/tuya.markdown +++ b/source/_integrations/tuya.markdown @@ -11,6 +11,7 @@ ha_category: - Switch ha_iot_class: Cloud Polling ha_release: 0.74 +ha_config_flow: true ha_domain: tuya --- @@ -25,7 +26,17 @@ There is currently support for the following device types within Home Assistant: - **Scene** - The device state in frontend panel will not change immediately after you activate a scene. - **Switch** - The platform supports switch and socket. -## Configuration +## Configuration via frontend + +To add your Tuya devices into your Home Assistant installation, go to: + +**Configuration** -> **Integrations** in the UI, click the button with `+` sign and from the list of integrations select **Tuya**. + +During configuration, be careful to select the [country code](https://www.countrycode.org/) and the platform corresponding to those used by you in the app. Once configuration flow is completed, the devices configured in your app will be automatically discovered. + +### Configuration via YAML + +_YAML configuration is still around for people that prefer YAML, but it's deprecated and you should not use it anymore._ To add your Tuya devices into your Home Assistant installation, add the following to your `configuration.yaml` file: diff --git a/source/_integrations/twilio.markdown b/source/_integrations/twilio.markdown index b06dbfd1c63..fb6b5ef2153 100644 --- a/source/_integrations/twilio.markdown +++ b/source/_integrations/twilio.markdown @@ -39,7 +39,7 @@ auth_token: After configuring the base Twilio component, add and configure either or both of the [Twilio SMS](/integrations/twilio_sms) and [Twilio Phone](/integrations/twilio_call) integrations to utilize the notification functionality. -To be able to receive events from Twilio, your Home Assistant instance needs to be accessible from the web and you need to have the `base_url` configured for the HTTP integration ([documentation](/integrations/http/#base_url)). +To be able to receive events from Twilio, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic) in Home Assistant.. To set it up, go to the integrations page in the configuration screen and find Twilio. Click on configure. Follow the instructions on the screen to configure Twilio. diff --git a/source/_integrations/upb.markdown b/source/_integrations/upb.markdown new file mode 100644 index 00000000000..cd124d4e2b6 --- /dev/null +++ b/source/_integrations/upb.markdown @@ -0,0 +1,226 @@ +--- +title: Universal Powerline Bus (UPB) +description: Instructions on how to setup Universal Powerline Bus integration. +ha_category: + - Light + - Scene +ha_release: "0.110" +ha_config_flow: true +ha_quality_scale: platinum +ha_iot_class: Local Polling +ha_codeowners: + - '@gwww' +ha_domain: upb +--- + +The UPB integration allows Home Assistant to connect to a Universal Powerline Bus Powerline Interface Module (UPB PIM) to get status and control UPB devices and UPB links. The UPB PIM may be connected either to a serial port or over TCP. The integration implements the following platforms: +- Light +- Scene + +## Configuration + +To add UPB to your installation, go to **Configuration** >> **Integrations** in the UI, click the button with `+` sign and from the list of integrations select **Universal Powerline Bus (UPB)**. + +The UPB integration requires that an export from the `UPStart` UPB configuration program. To create an export, in `UPStart`, click the UPB button in the top left and select **Export to File**. This will create a file with the `.upe` extension. The file must be placed somewhere in your Home Assistant installation, for example, in the configuration directory. + +## Device Configuration + +Using UPStart, configure each UPB dimmer-switch to report its state when it is manually operated. If you omit this step, manual changes to a dimmer-switch's state (on/off/brightness) will *not* be reported to Home Assistant. + +## Events + +An event is generated whenever a UPB Link is: + +- activated +- deactivated +- goes to a new level +- fade is started +- fade is stopped +- blink is started + +The event is `upb.scene_changed`. + +The `event_data` contains the following: + +- `command`: One of `activated`, `blink`, `deactivated`, `fade_started`, + `fade_stopped`, or `goto`. +- `address`: The address of the link reporting the event. The `address` + is comprised of the UPB network number and the UPB Link number. + For example for UPB Network number 42 and UPB Link number 24 the + `address` would be 42_24. +- `brightness_pct`: The brightness level as a percentage. `brightness_pct` is + reported as -1 if the brightness is a default level of brightness is not + applicable to the link change. +- `rate`: The rate for link to transition to the new level. `rate` is + -1 for the default transition rate. + +## Services + +Besides the standard services provided by the Home Assistant [Light](/integrations/light/) and [Scene](/integrations/scene) integrations, the following extra services are provided by the UPB integration: + +- `upb.light_fade_start` +- `upb.light_fade_stop` +- `upb.light_blink` +- `upb.scene_deactivate` +- `upb.scene_goto` +- `upb.scene_fade_start` +- `upb.scene_fade_stop` +- `upb.scene_blink` + +### Rate Transition Time + +Both standard and custom services that take a `transition` or a `rate` for changing brightness levels take time in seconds. The UPB +system only offers a discrete set of transition times. As such, the transition time requested is changed to the closest time based on +the table below. Note that this table does not apply to blink rates, only to brightness transition times. + +| Request rate >= | Requested rate < | Rate Used | +| --------------- | ---------------- | --------- | +| 0 seconds | 0.4 seconds | 0 seconds +| 0.4 seconds | 1.2 seconds | 0.8 seconds +| 1.2 seconds | 2.45 seconds | 1.6 seconds +| 2.45 seconds | 4.15 seconds | 3.3 seconds +| 4.15 seconds | 5.8 seconds | 5.0 seconds +| 5.8 seconds | 8.3 seconds | 6.6 seconds +| 8.3 seconds | 15 seconds | 10 seconds +| 15 seconds | 25 seconds | 20 seconds +| 25 seconds | 45 seconds | 30 seconds +| 45 seconds | 90 seconds | 60 seconds +| 1.5 minute | 3.5 minutes | 2 minutes +| 3.5 minutes | 7.5 minutes | 5 minutes +| 7.5 minutes | 12.5 minutes | 10 minutes +| 12.5 minutes | 22.5 minutes | 15 minutes +| 22.5 minutes | 45 minutes | 30 minutes +| 45 minutes | ∞ | 1 hour + +### Service `upb.light_fade_start` + +Starts a transition of a light to the specified level. Lights that are not dimmable ignore the fade start command. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | UPB light which to start fading operation. +| `brightness` | no* | Integer between 0 and 255 for how bright the light should be, where 0 means the light is off, 1 is the minimum brightness and 255 is the maximum brightness. *Only one of `brightness` and `brightness_pct` may be used. +| `brightness_pct`| no* | Number between 0 and 100 in percentage that specifies how bright the light should be, where 0 means the light is off, 1 is the minimum brightness and 100 is the maximum brightness. *Only one of `brightness` and `brightness_pct` may be used. +| `rate` | yes | Number that represents the time (in seconds) the light should take to transition to the new state. See section on "Rate Transition Time" for how this time value is interpreted. + +### Service `upb.light_fade_stop` + +Stop a light when transitioning from one light level to another. Stops either a fade or a goto (goto occurs when using a `light.turn_on` or `light.turn_off`. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | UPB light which to stop fading operation. + +### Service `upb.light_blink` + +Start a light blinking. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | UPB light which to blink. +| `rate` | no | Number between 0 and 4.25 that represents the time (in seconds) the rate the light blinks. Note the UPB implementation limits the blink rate to no faster than 1/3 of a second. + +### Service `upb.scene_deactivate` + +Deactivate a scene. The term “deactivate” is a general UPB term that usually means to turn to the OFF state, but each individual device manufacturer can define it differently for their device. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | UPB scene to deactivate. + +### Service `upb.scene_goto` + +Starts a transition of a scene to the specified level. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | UPB scene to transition. +| `brightness` | no* | Integer between 0 and 255 for how bright the scene should be, where 0 means the scene is off, 1 is the minimum brightness and 255 is the maximum brightness. *Only one of `brightness` and `brightness_pct` may be used. +| `brightness_pct`| no* | Number between 0 and 100 in percentage that specifies how bright the scene should be, where 0 means the scene is off, 1 is the minimum brightness and 100 is the maximum brightness. *Only one of `brightness` and `brightness_pct` may be used. +| `rate` | yes | Number that represents the time (in seconds) the light should take to transition to the new state. See section on "Rate Transition Time" for how this time value is interpreted. + +### Service `upb.scene_fade_start` + +Starts a transition of a scene to the specified level. Lights within the scene that are not dimmable ignore the fade start command. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | UPB scene to transition. +| `brightness` | no* | Integer between 0 and 255 for how bright the scene should be, where 0 means the scene is off, 1 is the minimum brightness and 255 is the maximum brightness. *Only one of `brightness` and `brightness_pct` may be used. +| `brightness_pct`| no* | Number between 0 and 100 in percentage that specifies how bright the scene should be, where 0 means the scene is off, 1 is the minimum brightness and 100 is the maximum brightness. *Only one of `brightness` and `brightness_pct` may be used. +| `rate` | yes | Number that represents the time (in seconds) the light should take to transition to the new state. See section on "Rate Transition Time" for how this time value is interpreted. + +### Service `upb.scene_fade_stop` + +Stop a scene when transitioning from one light level to another. Stops either a fade or a goto. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | UPB scene which to stop fading operation. + +### Service `upb.scene_blink` + +Start a scene blinking. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | UPB scene which to blink. +| `rate` | no | Number between 0 and 4.25 that represents the time (in seconds) the rate the scene blinks. Note the UPB implementation limits the blink rate to no faster than 1/3 of a second. + +## Examples + +```yaml +#automation: + +- alias: 'Specific scene activated' + description: 'Trigger when scene 9 on network 42 is activated' + trigger: + platform: event + event_type: upb.scene_changed + event_data: + command: activated + address: '42_9' + action: + service: persistent_notification.create + data_template: + title: 'Scene Activated' + message: > + Activated scene 9 on network 42: {{trigger.event.data.command}}, {{trigger.event.data.address}} + +``` + +```yaml +#script: + +all_lights_on: + alias: 'All Lights On' + description: 'Activate two UPB scenes named interior_lights and exterior_lights' + sequence: + - service: scene.turn_on + entity_id: + - scene.interior_lights + - scene.exterior_lights + +all_lights_off: + alias: 'All Lights Off' + description: 'Deactivate two UPB scenes named interior_lights and exterior_lights' + sequence: + - service: upb.scene_deactivate + entity_id: + - scene.interior_lights + - scene.exterior_lights + +kitchen_fade_on: + alias: 'Kitchen Fade to On' + description: 'Turn on kitchen light to 75% over a period of 10 seconds' + sequence: + - service: upb.light_fade_start + data: + entity_id: light.kitchen + brightness_pct: 75 + rate: 10 +``` + +## Notes + +- A UPB device does not always report its current state. For example, if you call `upb.light_fade_start` and then, a few seconds later, call `upb.light_fade_stop`, the selected UPB device will not report its new brightness level. However, if you then call `homeassistant.update_entity` it will make the UPB device report its current state to Home Assistant. diff --git a/source/_integrations/upnp.markdown b/source/_integrations/upnp.markdown index cb2a9fd073e..d801768338c 100644 --- a/source/_integrations/upnp.markdown +++ b/source/_integrations/upnp.markdown @@ -14,8 +14,6 @@ ha_domain: upnp The `upnp` integration enables you to collect network statistics from your router such as bytes in/out and packets in/out. This information is provided by the [UPnP](https://en.wikipedia.org/wiki/Universal_Plug_and_Play)/[Internet Gateway Device (IGD) Protocol](https://en.wikipedia.org/wiki/Internet_Gateway_Device_Protocol) if enabled on your router. -The IGD can automatically create port forwarding mappings on your router for Home Assistant, exposing your installation to the internet. The mapping will never automatically expire. Upon stopping Home Assistant, the mapping will be removed from your router. - There is currently support for the following device types within Home Assistant: - **Sensor** - Allows to get the network statistics from your router such as bytes in/out and packets in/out. @@ -27,46 +25,24 @@ Please note that UPnP or NAT-PMP needs to be enabled on your router for this int To integrate this into Home Assistant, add the following section to your `configuration.yaml` file: ```yaml -# Example configuration.yaml entry with custom external portal +# Example configuration.yaml entry upnp: - port_mapping: true - ports: - hass: 8000 - 8080: 8080 ``` -With the default settings only the sensors are added for statistics. If you wish to have port mapping done through IGD, add the option **port_mapping** and **ports**. - {% configuration %} -port_mapping: - description: If the integration should try to map ports. - required: false - type: boolean - default: false -sensors: - description: If the integration should enable the UPnP sensors. - required: false - type: boolean - default: true local_ip: description: The local IP address of the computer running Home Assistant. required: false type: string default: Try to auto-detect IP of host. -ports: - description: Map of ports to map from internal to external. Pass 'hass' as internal port to use the port Home Assistant runs on. Note that you have to enable port_mapping if you wish to map ports. - required: false - type: map - default: Open same port on external router as that Home Assistant runs locally and forwards it. {% endconfiguration %} ## Troubleshooting -If Home Assistant is not able to discover UPnP sensors, it may be because the local IP address was not auto-detected correctly. To prevent this, you may add the `local_ip` option to your UPnP configuration: +If Home Assistant is not able to discover the UPnP device, it may be because the local IP address of the computer running Home Assistant was not auto-detected correctly. To prevent this, you may add the `local_ip` option to your UPnP configuration: ```yaml -# Example configuration.yaml with UPnP sensors enabled and local_ip set +# Example configuration.yaml with local_ip set upnp: - sensors: true local_ip: 192.168.1.2 ``` diff --git a/source/_integrations/wiffi.markdown b/source/_integrations/wiffi.markdown new file mode 100644 index 00000000000..8047a24880b --- /dev/null +++ b/source/_integrations/wiffi.markdown @@ -0,0 +1,30 @@ +--- +title: STALL WIFFI +logo: wiffi.png +description: Support for WIFFI devices from stall.biz, e.g., Weatherman, Rainyman, ... +ha_category: + - DIY +ha_release: "0.110" +ha_iot_class: Local Push +ha_config_flow: true +ha_codeowners: + - '@mampfes' +ha_domain: wiffi +--- + +This integration allows you to connect your [STALL WIFFI](https://stall.biz) devices directly to Home Assistant. + +## Configuration via the frontend + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and click on **STALL WIFFI**. +After completing the configuration flow, the STALL WIFFI +integration will be available. + +## Configure the WIFFI device + +1. Set "CCU-IP Adresse myCCUIP" to the IP address of Home Assistant. +2. Set port for JSON telegrams to configured server port using parameter "send_json". + +Home Assistant will open a TCP server socket on the configured port and listens for incoming telegrams from STALL WIFFI devices. Entities from new devices will be automatically added. diff --git a/source/_integrations/yeelight.markdown b/source/_integrations/yeelight.markdown index a2a5dbd0007..105c300ae1e 100644 --- a/source/_integrations/yeelight.markdown +++ b/source/_integrations/yeelight.markdown @@ -80,7 +80,7 @@ devices: required: false type: string model: - description: "Yeelight model. Possible values are `mono1`, `color1`, `color2`, `strip1`, `bslamp1`, `ceiling1`, `ceiling2`, `ceiling3`, `ceiling4`, `ceiling13`. The setting is used to enable model specific features f.e. a particular color temperature range. Its also used to setup device, if its not available and discovery if disabled, during Home Assistant startup. If model is not specified, it will be guessed, by integration by looking at supported properties, reported by device." + description: "Yeelight model. Possible values are `mono1`, `color1`, `color2`, `strip1`, `bslamp1`, `ceiling1`, `ceiling2`, `ceiling3`, `ceiling4`, `ceiling10`, `ceiling13`. The setting is used to enable model specific features f.e. a particular color temperature range. Its also used to setup device, if its not available and discovery if disabled, during Home Assistant startup. If model is not specified, it will be guessed, by integration by looking at supported properties, reported by device." required: false type: string custom_effects: @@ -150,6 +150,7 @@ This integration is tested to work with the following models. If you have a diff | `ceiling3` | YLXD05YL | Yeelight Ceiling Light (Jiaoyue 480) | | `ceiling4` | YLXD02YL | Yeelight Ceiling Light (Jiaoyue 650) | | `mono` | YLTD03YL | Yeelight Serene Eye-Friendly Desk Lamp | +| `ceiling10` | YLDL01YL | Yeelight Meteorite Pendant Light | | `ceiling13` | YLXD01YL | Yeelight LED Ceiling Light | ## Services diff --git a/source/_integrations/zeroconf.markdown b/source/_integrations/zeroconf.markdown index cb95e551435..579ff439fc9 100644 --- a/source/_integrations/zeroconf.markdown +++ b/source/_integrations/zeroconf.markdown @@ -23,3 +23,15 @@ This integration is by default enabled, unless you've disabled or removed the [` # Example configuration.yaml entry zeroconf: ``` + +{% configuration %} +zeroconf: + description: + 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. + required: false + type: boolean + default: false +{% endconfiguration %} diff --git a/source/_integrations/zerproc.markdown b/source/_integrations/zerproc.markdown new file mode 100644 index 00000000000..536887effeb --- /dev/null +++ b/source/_integrations/zerproc.markdown @@ -0,0 +1,45 @@ +--- +title: Zerproc Bluetooth Lights +description: Instructions for integrating Zerproc bluetooth lights within Home Assistant. +ha_category: + - Light +ha_iot_class: Local Polling +ha_release: "0.110" +ha_domain: zerproc +--- + +This integration discovers nearby Zerproc lights and adds them to Home Assistant. + +## Configuration + +This integration can be configured using the integrations page in Home Assistant. + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and search for **Zerproc**. + +The integration will scan for nearby devices, and is completed if any are found. No additional configuration is required. The integration will perform a BLE scan every 60 seconds to search for new devices. + +## Additional information for Home Assistant Core on Python environments + +This integration requires `pybluez` to be installed. On Debian based installs, run: + +```bash +sudo apt install bluetooth +``` + +Before you get started with this integration, please note that: + +- Requires access to the Bluetooth stack, see [Rootless Setup section](#rootless-setup) for further information + +## Rootless Setup + +Normally accessing the Bluetooth stack is reserved for `root`, but running programs that are networked as `root` is a bad security wise. To allow non-root access to the Bluetooth stack we can give Python 3 and `hcitool` the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](https://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). + +```bash +sudo apt-get install libcap2-bin +sudo setcap 'cap_net_raw,cap_net_admin+eip' `readlink -f \`which python3\`` +sudo setcap 'cap_net_raw+ep' `readlink -f \`which hcitool\`` +``` + +A restart of Home Assistant Core is required. diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index f744ddc34e5..537022b56d1 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -87,34 +87,36 @@ Use the plus button in the bottom right to add a new integration called **ZHA**. In the popup: -- USB Device Path - on a Linux system will be something like `/dev/ttyUSB0` or `/dev/ttyACM0` -- Radio type - select device type `ezsp`, `deconz`, `ti_cc`, `xbee` or `zigate` +- Serial Device Path - List of detected serial ports on the system. You need to pick one to which your +radio is connected - Submit +Press `Submit` and the integration will try to detect radio type automatically. If unsuccessful, you will get +a new pop-up asking for a radio type. In the pop-up: + +- Radio Type + | Radio Type | Zigbee Radio Hardware | | ------------- | ------------- | -| `ezsp` | Silicon Labs Ember based radios with EmberZNet Zigbee firmware | +| `ezsp` | EmberZNet based radios, HUSBZB-1, Telegesis ETRX357USB*** (using EmberZNet firmware) | | `deconz` | dresden elektronik ConBee and RaspBee based radios with deCONZ Zigbee firmware | -| `xbee` | Digi XBee Series 2 and 3 based radios with XBee Zigbee firmware | +| `xbee` | Digi XBee Series 2, 2C and 3 based radios with XBee Zigbee firmware | | `ti_cc` | Texas Instruments CC253x/CC26x2/CC13x2 based radios with Z-Stack firmware | | `zigate` | ZiGate USB-TTL, PiZiGate, and WiFi based Zigbee radios with ZiGate firmware | -- Press `Submit` to save changes. +- Submit -The success dialog will appear or an error will be displayed in the popup. An error is likely if Home Assistant can't access the USB device or your device is not up to date. Refer to [Troubleshooting](#troubleshooting) below for more information. +Press `Submit` to save radio type and you will get a new form asking for port settings specific for this +radio type. In the pop-up: +- Serial device path +- port speed (not applicable for all radios) +- data flow control (not applicable for all radios) -## Configuration - Manual +Most devices need at very least the serial device path, like `/dev/ttyUSB0`, but it is recommended to use +device path from `/dev/serial/by-id` folder, +eg `/dev/serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_C0F003D3-if01-port0` -To configure the component, select ZHA on the Integrations page and provide the path to your Zigbee USB stick. - -Or, you can manually configure `zha` section in `configuration.yaml`. The path to the database which will persist your network data is required. - -```yaml -# Example configuration.yaml entry -zha: - usb_path: /dev/ttyUSB2 - database_path: /home/homeassistant/.homeassistant/zigbee.db -``` +Press `Submit` The success dialog will appear or an error will be displayed in the popup. An error is likely if Home Assistant can't access the USB device or your device is not up to date. Refer to [Troubleshooting](#troubleshooting) below for more information. If you are use ZiGate, you have to use some special usb_path configuration: @@ -123,20 +125,6 @@ If you are use ZiGate, you have to use some special usb_path configuration: - Wifi Zigate : `socket://[IP]:[PORT]` for example `socket://192.168.1.10:9999` {% configuration %} -radio_type: - description: One of `deconz`, `ezsp`, `ti_cc`, `xbee` or `zigate`. - required: false - type: string - default: ezsp -usb_path: - description: Path to the serial device for the radio. - required: true - type: string -baudrate: - description: Baud rate of the serial device. - required: false - type: integer - default: 57600 database_path: description: _Full_ path to the database which will keep persistent network data. required: true diff --git a/source/_lovelace/entities.markdown b/source/_lovelace/entities.markdown index 6b9c90d8d15..bd0354087bc 100644 --- a/source/_lovelace/entities.markdown +++ b/source/_lovelace/entities.markdown @@ -74,7 +74,7 @@ image: type: string secondary_info: required: false - description: "Show additional info. Values: `entity-id`, `last-changed`, `last-triggered` (only for automations and scripts), `position` or `tilt-position` (only for supported covers)." + description: "Show additional info. Values: `entity-id`, `last-changed`, `last-triggered` (only for automations and scripts), `position` or `tilt-position` (only for supported covers), `brightness` (only for lights)." type: string format: required: false diff --git a/source/_lovelace/entity-filter.markdown b/source/_lovelace/entity-filter.markdown index 34e932a96a3..9c798516749 100644 --- a/source/_lovelace/entity-filter.markdown +++ b/source/_lovelace/entity-filter.markdown @@ -84,7 +84,7 @@ value: type: string operator: required: false - description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=` or `regex`. + description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=`, `in`, `not in`, or `regex`. type: string attribute: required: false diff --git a/source/_lovelace/weather-forecast.markdown b/source/_lovelace/weather-forecast.markdown index 6fec517cc1a..6091f5b2e8b 100644 --- a/source/_lovelace/weather-forecast.markdown +++ b/source/_lovelace/weather-forecast.markdown @@ -30,6 +30,11 @@ show_forecast: description: Show next hours/days forecast. type: boolean default: true +secondary_info_attribute: + required: false + description: Which attribute to display under the temperature. + type: boolean + default: Defaults to Extrema if Available, if not available then Precipitation and if precipitation isn't available then Humidity. theme: required: false description: "Set to any theme within `themes.yaml`" @@ -40,13 +45,69 @@ Example ```yaml type: weather-forecast -entity: weather.dark_sky +entity: weather.openweathermap ```
This card works only with platforms that define a `weather` entity. - E.g., it works with [Dark Sky](/integrations/weather.darksky/) but not [Dark Sky Sensor](/integrations/darksky) + E.g., it works with [OpenWeatherMap](https://www.home-assistant.io/integrations/openweathermap/#weather) but not [OpenWeatherMap Sensor](https://www.home-assistant.io/integrations/openweathermap/#sensor)
+ +### Advanced + +##### Themeable Icons + +The default weather icons are themable via a [Theme](https://www.home-assistant.io/integrations/frontend/#themes). Theme variables include: + +```yaml +--weather-icon-cloud-front-color +--weather-icon-cloud-back-color +--weather-icon-sun-color +--weather-icon-rain-color +--weather-icon-moon-color +``` + +Example theme configuration: + +```yaml +--weather-icon-cloud-front-color: white +--weather-icon-cloud-back-color: blue +--weather-icon-sun-color: orange +--weather-icon-rain-color: purple +``` + +  + +##### Personal Icons + +Weather icons can be overwritten with your own personal images via a [Theme](https://www.home-assistant.io/integrations/frontend/#themes). Theme variables include: + +```yaml +--weather-icon-clear-night +--weather-icon-cloudy +--weather-icon-fog +--weather-icon-lightning +--weather-icon-lightning-rainy +--weather-icon-partlycloudy +--weather-icon-pouring +--weather-icon-rainy +--weather-icon-hail +--weather-icon-snowy +--weather-icon-snowy-rainy +--weather-icon-sunny +--weather-icon-windy +--weather-icon-windy-variant +--weather-icon-exceptional + +// If your state is not above, use this format +--weather-icon- +``` + +Example theme configuration: + +```yaml +--weather-icon-sunny: url("local/sunny.png") +``` diff --git a/source/_posts/2020-05-20-release-110.markdown b/source/_posts/2020-05-20-release-110.markdown new file mode 100644 index 00000000000..a7b86e0c876 --- /dev/null +++ b/source/_posts/2020-05-20-release-110.markdown @@ -0,0 +1,1618 @@ +--- +layout: post +title: "0.110: Speed! OpenZWave beta, HomeKit Cameras, ONVIF, Calendars" +description: "0.110: Ready for one of the biggest releases in our history? Lots of UI and speed improvements, a calendar panel, OpenZWave beta, HomeKit, ONVIF sensors, ignore everything, NOT conditions, ..." +date: 2020-05-20 00:00:00 +date_formatted: "May 20, 2020" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: Release-Notes +og_image: /images/blog/2020-05-0.110/social.png +--- + + + +Do you know how excited I am for bringing you Home Assistant Core 0.110? + +Would you believe me, if I told you I've been upgrading my personal Home +Assistant production instance to the latest development version almost +every day? + +Well, better believe it, it is how I started my day for the last 3 weeks. It +felt like opening new presents and enjoying amazing improvements every day. + +Today, we are shipping it all to you, as one big package. 🎁 + +This is definitely one of the bigger releases of Home Assistant on all levels. +Speed improvements to both the frontend and backend, lots of usability +improvements, 12! new awesome integrations and an insane amount of major +updates to existing ones. + +Enjoy the release! + +../Frenck + +## Icons + +In Home Assistant Core [0.109](/blog/2020/04/29/release-109/#weight-loss-for-the-frontend), +we made the frontend lighter and faster, this release takes it a step further. + +The way icons are loaded is updated. With the ever-growing Material Icons set, +it was necessary to update the way we handle icons to make sure our application +continues performing. + +The Material Icons are now split in chunks, so the frontend does not have to +load all the icons if you just need one; besides that, we no longer store the +icons in the DOM but in a database. + +This saves a lot of memory and thus makes the Home Assistant frontend +even more leaner and faster! + +Honestly, it is not just icons... A lot is optimized to make the frontend +faster this release. It is now snappier than ever! + +## Integrations grouping, searching & custom logos + +[@timmo001] added the possibility to search your integrations, so you can find +what you are looking for quickly. + +We also grouped the entries by integration now, this means we no longer show +multiple cards for the same integration, but show a list of the names if there +are multiple entries. + +If you click the entry, it will show that entry in the card. +This makes it easier to keep an overview of all your integrations. + +

+Screenshot of the integrations page +Screenshot of the integrations page. +

+ +Oh! We've also made the icons and logos available for custom integrations! + +

+Screenshot of the HACS integration with its icon shown +Screenshot of the HACS integration with its icon shown. +

+ +[@timmo001]: https://github.com/timmo001 + +## OpenZWave integration now in beta + +This release features the new OpenZwave integration. It has been in testing as +a custom integration by the community since last December and is now +ready for a wider audience. + +It is still early days for this integration, though; not all platforms and +devices are supported yet and the setup process has prerequisites that raise +the accessibility bar. See our [documentation](/integrations/ozw/) for +the current requirements and instructions. + +If you want to give it a shot, you should be comfortable with setting up custom +add-ons and MQTT. There is no migration from the current Z-Wave integration yet, +this is still to come. + +The plan is to add more platforms in the future, making it super simple to +set up the integration. Stay tuned. + +There is currently no plan to deprecate the existing Z-Wave integration. +But the hope is that the new integration, in the future, will offer a simpler, +more stable and more feature-rich experience than the current Z-Wave integration. + +Thanks go out to the community that has been testing the custom integration +and provided very valuable data to allow us to catch bugs and support more +devices. A special thanks to [@cgarwood] and [@marcelveldt] who have been +pioneering building the integration. + +## Every discovered integration can be ignored + +An often reported issue/request feature is to allow any discovered item to +be ignored. Most integrations supported that already, but some didn't. + +As of 0.110, we have a new development rule requiring an integration to +support ignoring discovered items; and for 0.110, we have upgraded all +integrations that didn't support it yet! + +Result: Any discovered item, can be ignored. + +

+Screenshot of showing ignorable integrations +Screenshot of showing ignorable integrations. +

+ +## Calendar panel + +Thanks to [@zsarnett] we got a beautiful new calendar panel! + +It shows you all items of the calendars you select in a month, week or day view. +There is also a calendar card for Lovelace in the making. + +

+Screenshot of the Calendar panel +Screenshot of the Calendar panel. +

+ +## Weather card + +We got a lot of feedback about the updated weather card of the last release, +we listened to feedback and added some features. You can now theme the colors +of the new icons, and you can even completely replace them with another image. + +You can also set the attribute you want to show as the secondary information. + +

+Screenshot of the updated weather card +Screenshot of the updated weather card. +

+ +Check the [documentation](/lovelace/weather-forecast/) for more information. + +## Internal & External URLs + +There are many cases where an integration needs the URL/link to your Home Assistant +instance. For example, to set up a webhook, communicate audio files or camera +streams to an Amazon Alexa or Google Assistant device. + +We used to have a `base_url` setting to deal with those cases, but that wasn't +always sufficient. Some integrations require specific requirements for that +setting, which could lead to conflicting or impossible settings. + +It often resulted in broken TTS, streaming issues for camera's or issues with +casting. This release addresses this issue by introducing two new settings in +**Configuration** -> **General**. + +

+Screenshot of the URLs configuration +Screenshot of the URLs configuration. +

+ +If you want to set those via YAML, `homeassistant:` main configuration has now +a `external_url` and `internal_url` setting. + +These settings allow you to override the URLs Home Assistant uses when +communicating on your internal network versus the outside world. Please note, +that these are overrides. By default, Home Assistant will try to figure this out +on its own. + +If you have a Home Assistant Cloud subscription, integrations can now also +leverage that. This will reduce the amount of, often complex, configuration +needed. + +After upgrading to 0.110, you can delete `base_url` from your configuration +as Home Assistant will automatically migrate that setting for you on upgrade. + +## Support for "not" conditions in automations + +When an automation triggers, one can use conditions to check if the set +actions of an automation should be run. Conditions, however, always take the +positive approach: If "something" equals or is "this". + +As of this release, the conditions now have support for specifying if a +condition (or set of conditions) should "not" match. This can be helpful for +devices or entities that have multiple states, but you actually only want to +ensure it is not just that one state. + +

+Screenshot of the automation editor with a "not" condition +Screenshot of the automation editor with a "not" condition. +

+ +This feature has been added to the automation editor, but is also available +for writing automations in YAML: + +```yaml +# Example automation +alias: Turn kitchen lights off when alarm is armed. +trigger: + - platform: state + entity_id: alarm_control_panel.home_alarm +condition: + - condition: not + conditions: + - condition: state + entity_id: alarm_control_panel.home_alarm + state: disarmed +action: + - service: light.turn_off + entity_id: light.kitchen +``` + +## HomeKit + +[@bdraco] has been busy improving HomeKit support for Home Assistant in 0.109, +but it seems like that didn't stop him even a tiny bit. This release [@xdissent] +and [@stickpin] jumped on the HomeKit bandwagon as well! + +HomeKit can now be configured and set up from the Home Assistant frontend, +and even allows you to set up multiple instances! This allows one to bypass the +maximum amount of devices a single HomeKit gateway supports by adding multiple. +Using multiple, will also allow you to bypass the 1 TV per bridge limit +on HomeKit. + +Ready for this? Home Assistant Core 0.110 now has camera support for HomeKit! + +And if that wasn't enough already, the HomeKit integration now sends out more +information as HomeKit accessory information. So besides the entity id, which +was already present, you can also see which integration (and its name) provided +the accessory in HomeKit. + +

+Screenshot from HomeKit. Left: accessory information, Right: Camera support. +Screenshot from HomeKit. Left: accessory information, Right: Camera support. +

+ +## ONVIF + +The ONVIF integration did get lots of love from [@hunterjm]! ONVIF Profile S +conformant camera's, can now be set up via the UI! + +And that is not all... It now leverages more features of the ONVIF protocol: +pull point subscriptions. This means that events from ONVIF will now +show up in Home Assistant as well. So, if your ONVIF compatible camera supports +things like motion, object or sound detection, those will be available now! + +

+Screenshot of an ONVIF camera in Home Assistant +Screenshot of an ONVIF camera in Home Assistant. +

+ +## Supervisor + +Have you seen the new supervisor UI? [@ludeeus] did a great job redoing it's UI! +It now uses the same tabs as the configuration panel. The add-on page is split +into multiple tabs, the add-on store is cleaned up and you can view all logs +in the system tab now (requires advanced mode). + +

+Screenshot of the Supervisor panel +Screenshot of the Supervisor panel. +

+ +Some add-ons are now also marked "advanced" and are only visible when +you've enabled advanced mode on your user profile. + +[@ludeeus]: https://github.com/ludeeus + +## Other noteworthy changes + +- It took a while, as many adjustments had to be made. + This is the first release supporting **Python 3.8** 🎉! + +- Quite a few optimizations to make Home Assistant go faster. One of the major + changes is that Home Assistant will now set up all configured integration + instances in parallel during startup. Some startup speed reported + improvements from 82 seconds before this change and 28 seconds after this + change. That is a huge improvement! + +- The info page in the development tools now shows more information about + your set up. Including the name for your installation method. + It will tell you if you run Home Assistant, Home Assistant Supervised or + Home Assistant Core. + +- [@MartinHjelmare] added a new detection method for integrations that + potentially harm Home Assistant during runtime. We can now detect if an + integration tries to close Home Assistant's (shared) HTTP client. If this + happens, it will be prevented and write an error message to your log, + similar to how the I/O detection does it (released in [0.109](/blog/2020/04/29/release-109/#detection-of-blocking-io-in-the-event-loop)). + +- The ISY994 got a major upgrade! While it has quite a few breaking changes, it + is now available via the UI and many bug are squashed. Thanks [@shbatm]! + +## New Integrations + +- Add numato integration ([@clssn] - [#33816]) ([numato docs]) (new-integration) +- Add zwave mqtt ([@MartinHjelmare] - [#34987]) ([zwave_mqtt docs]) (new-integration) +- Add Home Connect integration ([@DavidMStraub] - [#29214]) ([homeconnect docs]) (new-integration) +- Add BleBox integration ([@gadgetmobile] - [#32664]) ([blebox docs]) (new-integration) +- Add devolo home control ([@2Fake] - [#33181]) ([devolo_home_control docs]) (new-integration) +- Add agent_dvr integration ([@ispysoftware] - [#32711]) ([agent_dvr docs]) (new-integration) +- Add Universal Powerline Bus ([@gwww] - [#34692]) ([upb docs]) (new-integration) +- Add Flick Electric NZ integration ([@ZephireNZ] - [#30696]) ([flickelectric docs]) (new-integration) +- Add BSBLan Climate integration ([@liudger] - [#32375]) ([bsblan docs]) (new-integration) +- Add Zerproc integration ([@emlove] - [#35477]) ([zerproc docs]) (new-integration) +- Add wiffi integration ([@mampfes] - [#30784]) ([wiffi docs]) (new-integration) +- Add forked_daapd integration ([@uvjustin] - [#31953]) ([forked_daapd docs]) (new-integration) + +## New Platforms + +- Add Xiaomi miio Alarm Control Panel ([@starkillerOG] - [#32091]) ([xiaomi_miio docs]) (new-platform) +- Config flow for hunterdouglas_powerview ([@bdraco] - [#34795]) ([hunterdouglas_powerview docs]) (new-platform) +- Add battery sensors to hunterdouglas_powerview ([@bdraco] - [#34917]) ([hunterdouglas_powerview docs]) (new-platform) +- Add zwave_mqtt sensor platform ([@cgarwood] - [#35135]) ([zwave_mqtt docs]) (new-platform) +- Add zwave_mqtt light platform ([@MartinHjelmare] - [#35337]) ([zwave_mqtt docs]) (new-platform) +- Universal Powerline Bus Scene support ([@gwww] - [#35401]) ([upb docs]) (new-platform) +- Add Climate Platform Support to ISY994 ([@shbatm] - [#35440]) ([isy994 docs]) (new-platform) +- ONVIF Event Implementation ([@hunterjm] - [#35406]) ([onvif docs]) (new-platform) +- Support BleBox sensor ([@gadgetmobile] - [#35374]) ([blebox docs]) (new-platform) +- Add binary sensor platform to zwave_mqtt ([@marcelveldt] - [#35519]) ([zwave_mqtt docs]) (new-platform) + +## Integrations now available to set up from the UI + +The following integrations are now available via the Home Assistant UI: + +- [Blink][blink docs], done by [@fronzbot] +- [HomeKit][homekit docs], done by [@bdraco] +- [Hunter Douglas PowerView][hunterdouglas_powerview docs], done by [@bdraco] +- [Lutron Caséta][lutron_caseta docs], done by [@chrisaljoudi] +- [Mill][mill docs], done by [@Danielhiversen] +- [ONVIF][onvif docs], done by [@hunterjm] +- [Pi-hole][pi_hole docs], done by [@shenxn] +- [Tibber][tibber docs], done by [@Danielhiversen] +- [Tuya][tuya docs], done by [@ollo69] +- [Universal Devices ISY994][isy994 docs], done by [@shbatm] + +## 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 + +- **Manual Alarm Panel** - When going from state `disarmed` to any other (armed) + state such as `armed_away`, the state will be `arming` instead of `pending` during + the transition time as set in the configuration. When going from an armed state + (such as `armed_away`) to the `triggered` state the state will still be + `pending` during the transition time as set in the configuration + (as it was before). - ([@starkillerOG] - [#32950]) ([manual docs]) + + - State attribute `pre_pending_state` changed to `previous_state` + - State attribute `post_pending_state` changed to `next_state` + - Configuration option `pending_time` is renamed to `arming_time`, + functionality is the same. + - The time the alarm stays at `pending` when triggered has changed from + `delay_time` of the previous state + `arming_time` (previously known as + `pending_time`) of the triggered state to only the `delay_time` of the + previous state. + +- **Cert Expiry** - The "name" configuration option marked as deprecated in + 0.107 has been removed and will now cause errors on startup if it remains in + the configuration. You should change your configuration accordingly. - + ([@jjlawren] - [#34628]) ([cert_expiry docs]) + +- **Stream** - pyAV >7.0.0 has dropped support for FFmpeg versions <4.0. + FFmpeg will need to be updated to at least 4.0 for stream to work. + If you run an Home Assistant with the Superviser or Docker, no manual + intervention is needed. Alternative installs can check the stream integration + documentation for troubleshooting tips. - ([@hunterjm] - [#34648]) ([stream docs]) + +- **Nederlandse Spoorwegen** - The punctuality attribute has been removed from + the integration. Ever since NS updated its API a few months ago, its behavior + with regards to the punctuality has been incoherent, sometimes even missing + from the API's response. This has caused numerous Issues to be created in this + repo by users getting errors that the punctuality attribute was unlike what + the integration was expecting. - ([@YarmoM] - [#34680]) ([nederlandse_spoorwegen docs]) + +- **Fortigate** *(Deprecated)* - The Fortigate integration will be removed in + 0.112.0 and has a replacement in the FortiOS integration. + + Please refer to the fortios integration on how to configure the new + parameters: https://www.home-assistant.io/integrations/fortios/ - + ([@kifeo] - [#34854]) ([fortigate docs]) + +- **Raspberry Pi Camera** - To align with ADR-0007, configuration has been + moved under `rpi_camera:` as its own platform. - + ([@alxrdn] - [#34461]) ([rpi_camera docs]) + + Old YAML configuration example: + + ```yaml + camera: + - platform: rpi_camera + image_width: 1296 + image_height: 972 + image_quality: 75 + ``` + + New YAML configuration example: + + ```yaml + rpi_camera: + image_width: 1296 + image_height: 972 + image_quality: 75 + ``` + +- **ONVIF** - ONVIF is now available to be added from the Integrations UI! + The `extra_arguments` and `rtsp_transport` configuration from YAML is now a + part of the Options flow for the integration, and is not automatically + imported to the configuration flow with the rest of the defined ONVIF + platforms. - ([@hunterjm] - [#34520]) ([onvif docs]) + +- **PulseAudio Loopback** - Internal library code has been replaced with the + pulsectl library. - ([@breiti] - [#34965]) ([pulseaudio_loopback docs]) + + - The default connection honors the configuration in `/etc/pulse` + and no longer defaults to `localhost`. + - When a host is configured, the default port has been changed to 4713 to use + the native interface of PulseAudio. + - The configuration parameters `buffer_size` and `tcp_timeout` + have been removed. + +- **UPnP** - This integration has been simplified and will always create + sensors, so port mapping functionality has been removed. - + ([@StevenLooman] - [#35191]) ([upnp docs]) + + Example YAML configuration: + + ```yaml + upnp: + ``` + +- **ZHA** - Configuration options for ZHA integration in YAML is now deprecated + and will be removed in 0.112.0. - ([@Adminiuga] - [#35161]) ([zha docs]) + + Starting with the following radio configuration options: + + - `usb_path` + - `baudrate` + - `radio_type` + +- **IMAP Email Content** - The *state* of the `imap_email_content` is replaced + when there is no email found. With this change, any other thing like an + automation can react to the arrival of an email - + ([@isk0001y] - [#35123]) ([imap_email_content docs]) + +- **Sony Songpal** - This is now enabled through the Integrations UI. + To call `songpal/set_sound_setting` on all songpal devices, the `entity_id` + now needs to be set to `all` instead of left unset. - + ([@shenxn] - [#34714], [#35318]) ([songpal docs]) + +- **HTTP** - `base_url` is deprecated and replaced by an `internal_url` and + `external_url` core configuration setting. - + ([@frenck] - [#35224]) ([config docs]) ([http docs]) + +- **Kodi** - Kodi previously reported the media content type for all PVR + channels as "channel", no matter if it was a TV or a radio channel. + The media content type is now derived from the used player type, i.e., + it reports as "music" for radio channels and "video" for TV channels. - + ([@Tho85] - [#35091]) ([kodi docs]) + +- **Mill** - Mill is now enabled through the integrations UI and no longer + available via YAML - ([@Danielhiversen] - [#35136]) ([mill docs]) + +- **Homematic** - Automations relying on the numeric value for the garage door + status might break, since the status will now be reported as human-readable + strings. - ([@guillempages] - [#35349]) ([homematic docs]) + +- **Tuya** - Tuya is now enabled through the Integrations UI. - + ([@ollo69] - [#35422]) ([tuya docs]) + +- **LG webOS Smart TV** - A new `unique_id` is used for `webostv` media players + for users running a 0.109.X release. Duplicate entities will be created with + new entity IDs and old entities will need to be manually removed. - + ([@jjlawren] - [#34979]) ([webostv docs]) + +- **Blink** As of May 11, 2020 Blink has removed the old username/password + authentication method, which means all current Blink integrations prior to + this release are broken. + + In order to support this change, a 2FA key must be entered before setup + can continue. Some users may not have 2FA enabled on their account yet, + but you will still receive an email at login asking you to allow the device + to continue setting up. + + Your current YAML configuration will be converted to a UI-based configuration, + but the only supported entries are `username`, `password`, and `scan_interval`. + All other entries must be removed; otherwise, the integration will not be + configured. - ([@fronzbot] - [#35396]) ([blink docs]) + +- **Universal Devices ISY994** - This migrates ISY994 to PyISY v2 and is now + available to be added from the Integrations UI. PyISY Version 2 is a + significant update to the original module used to communicate with the ISY. + ([@shbatm] - [#35212], [#35338], [#35413], [#35391] ) ([isy994 docs]) + + As part of the update and many bug fixes, some breaking changes were introduced: + +
+ Click see all breaking changes for ISY994 + + - Remove ISY Climate Module support: the ISY Climate Module was retired by + UDI on 3/30/2020: UDI Announcement, support has been removed from the module, + so any entities based on Climate module nodes will no longer import into + Home Assistant. The enable_climate configuration option will need be removed + from your YAML configuration file. + + - Device State Attributes have changed: some attributes' names and types will + have changed as part of the changes to PyISY. If a user relied on a device + state attribute for a given entity, they should check that it is still there + and formatted the same. In general, more state attributes that were + previously unavailable, should appear. + + - isy994_control events now return with additional information about the + event. If a user relies on the control event property in Automations, these + will need to be updated since the format has changed to include the + additional detail. + + - Nodes that are "grouped" together in the ISY Admin Console will now be + correctly identified and sorted, this will cause additional entities to + be added to Home Assistant. If you were using this "group" feature to ignore + some sub-devices in Home Assistant, you will now need to use the + `ignore_string` in the name instead. + + - Turning on a light without providing a brightness value will use the ISY + Device's On Level property instead of turning on to full brightness + (if Home Assistant doesn't have a stored value for the last brightness). + + Sorting of certain devices based on the ISY's `Node Def ID` and `Insteon Type` + properties have been corrected to match the ISY's provided device categories, + as well as user feedback of incorrect sorting for specific devices. As a + result, some entities that were incorrectly categorized will now appear under + a different platform (e.g. switch to binary_sensor, light to switch, etc.) + + Both KeypadLinc Secondary Buttons and RemoteLinc2 Buttons have been moved from + `switch` to sensor. This is because these buttons cannot actually be directly + controlled via commands sent from the `switch` platform, doing so results in + communication errors from the ISY because the commands are not valid. + These devices are being moved to `sensor` instead of `binary_sensor` because + they report a state in a range from `0` to `255`; `0`=Off, `255`=On according + to their last brightness/dimming level sent. + + The ISY994 integration now includes a `restore_light_state` option. + In 0.109.0, a change was made to restore a light's brightness to the previous + state when turned on with no `brightness` parameter. This was, in part, to fix + an issue where the light to turn on to full brightness when no parameters were + given, regardless of the physical device's `On Level` brightness setting. + Using the `On Level` is now supported and is the default behavior. + To keep the current behavior and use Home Assistant's last brightness, + set the `restore_light_state` to `True` or enable the option in the new config + flow options. + + The following device node types have changed platforms to correct their + categorization: + + - "BinaryControl" (`SWITCH`->`BINARY_SENSOR`) + - "BinaryControl_ADV" (`SWITCH`->`BINARY_SENSOR`; IOLinc Sensor) + - "EZIO2x4_Input" (`SWITCH`->`BINARY_SENSOR`) + - "EZRAIN_Input" (`SWITCH`->`BINARY_SENSOR`) + - "OnOffControl" (`SWITCH`->`BINARY_SENSOR`) + - "OnOffControl_ADV" (New; Thermostat Control/Running Sensors) + - "EZIO2x4_Input_ADV" (`SWITCH`->SENSOR, Analog input on EZIO). + - "RemoteLinc2" (`LIGHT`->`SWITCH`), + - "RemoteLinc2_ADV" (`LIGHT`->`SWITCH`), + - RemoteLincs only report button presses as events, are not controllable and + do not accurately report dimmable states. + - New Insteon Types for `BINARY_SENSOR`S: "7.0.", "7.13." (IOLinc/EZIO Sensors) + - IOLinc sensor/control logic will be updated in PR-4 to sort them correctly + into two different platforms. + - New Insteon Type for `LOCKS`: "4.64." added. + - New Insteon Types for `SWITCHES`: "0.16.", "7.3.255.", "9.10." + +
+ +## All changes + +
+ Click to see all changes! + +- UniFi - Improve logging related to loosing connection to controller ([@Kane610] - [#34547]) ([unifi docs]) +- Set mqtt binary_sensor unavailable if expire_after specified ([@uphillbattle] - [#34259]) ([mqtt docs]) +- Add support for AirVisual Node/Pro units ([@bachya] - [#32815]) ([airvisual docs]) +- Add coverage to qwikswitch ([@ziv1234] - [#33939]) ([qwikswitch docs]) +- Remove hap pyc file ([@MartinHjelmare] - [#34563]) ([homematicip_cloud docs]) +- UniFi - Store controller in config_entry.entry_id ([@Kane610] - [#34553]) ([unifi docs]) +- Add service to clear SimpliSafe notifications ([@bachya] - [#34481]) ([simplisafe docs]) +- UniFi - Move some preloading of unavailable clients earlier in setup phase ([@Kane610] - [#34599]) ([unifi docs]) +- Upgrade pre-commit to 2.3.0 ([@frenck] - [#34604]) +- Rename BinarySensorDevice to BinarySensorEntity ([@emontnemery] - [#34462]) +- Upgrade mock-open to 1.4.0 ([@frenck] - [#34606]) +- Upgrade pyupgrade to v2.2.1 ([@frenck] - [#34608]) +- Upgrade codecov to 2.0.22 ([@frenck] - [#34607]) +- Use "arming" state during transition in manual alarm panel ([@starkillerOG] - [#32950]) ([manual docs]) (breaking-change) +- Move myStrom light and switch to async ([@fabaff] - [#34079]) ([mystrom docs]) +- Refactor Plex device/session updates ([@jjlawren] - [#34616]) ([plex docs]) +- Remove deprecated cert_expiry config ([@jjlawren] - [#34628]) ([cert_expiry docs]) (breaking-change) +- Add onvif PTZ GotoPreset ([@Geronimo2015] - [#34420]) ([onvif docs]) +- Fix failing vilfo test that was doing i/o ([@bdraco] - [#34647]) ([vilfo docs]) +- Update dynalite library and minor changes ([@ziv1234] - [#34618]) ([dynalite docs]) +- Allow flows to know if user is in advanced mode ([@balloob] - [#34629]) ([config docs]) +- Add NOT condition helper ([@frenck] - [#34624]) +- Store integration type in AirVisual config entry ([@bachya] - [#34621]) ([airvisual docs]) +- Fix recording duration flag ([@hunterjm] - [#34648]) ([stream docs]) (breaking-change) +- Fix py38 tests ([@balloob] - [#34658]) ([google_assistant docs]) ([zeroconf docs]) +- Add Signalmessenger group recipients ([@bbernhard] - [#34419]) ([signal_messenger docs]) +- Rename MediaPlayerDevice to MediaPlayerEntity ([@emontnemery] - [#34592]) +- Rename LockDevice to LockEntity ([@emontnemery] - [#34594]) +- Rename ClimateDevice to ClimateEntity ([@emontnemery] - [#34591]) +- Rename AlarmControlPanel to AlarmControlPanelEntity ([@emontnemery] - [#34590]) +- Rename CoverDevice to CoverEntity ([@emontnemery] - [#34595]) +- Fix tests for Python 3.8 ([@balloob] - [#34672]) +- Add ability to ignore rachio discovery ([@bdraco] - [#34649]) ([rachio docs]) +- Add ability to ignore tado discovery ([@bdraco] - [#34650]) ([tado docs]) +- Add ability to ignore myq discovery ([@bdraco] - [#34652]) ([myq docs]) +- Fix more tests on Python 3.8 ([@balloob] - [#34703]) +- Python 3.8 on CI ([@pvizeli] - [#34654]) +- Rename VacuumDevice to VacuumEntity ([@emontnemery] - [#34674]) +- Rename RemoteDevice to RemoteEntity ([@emontnemery] - [#34676]) +- Bump pyairvisual and remove unused trends ([@bachya] - [#34707]) ([airvisual docs]) +- Rename Light to LightEntity ([@emontnemery] - [#34593]) +- Rename SwitchDevice to SwitchEntity ([@emontnemery] - [#34673]) +- Add missing typing to Spotify ([@rako77] - [#34698]) ([spotify docs]) +- Upgrade pillow to 7.1.2 ([@frenck] - [#34733]) ([doods docs]) ([proxy docs]) ([qrcode docs]) ([seven_segments docs]) ([sighthound docs]) ([tensorflow docs]) +- Create a unique_id for velux cover ([@tschamm] - [#34668]) ([velux docs]) +- Upgrade pytest-sugar to 0.9.3 ([@frenck] - [#34726]) +- Upgrade pytest-timeout to v1.3.4 ([@frenck] - [#34609]) +- Add unique ID to TRADFRI ([@balloob] - [#34745]) ([tradfri docs]) +- Improve error handling for Powerwall ([@jrester] - [#34580]) ([powerwall docs]) +- Upgrade pytest to 5.4.1 ([@frenck] - [#34739]) +- Allow ignoring discovery config flow helper ([@balloob] - [#34740]) +- Make ps4 config flow tests robust ([@MartinHjelmare] - [#34749]) ([ps4 docs]) +- Add hadolint to CI ([@pvizeli] - [#34758]) +- Refactor squeezebox ([@rajlaud] - [#34731]) ([squeezebox docs]) +- Bump simplisafe-python to 9.2.0 ([@bachya] - [#34750]) ([simplisafe docs]) +- Set up config entries in parallel ([@balloob] - [#34755]) +- Add Rachio rain delay switch ([@brg468] - [#34741]) ([rachio docs]) +- Validate that discovered config flows set a unique ID ([@balloob] - [#34751]) +- Arcam fmj bump library to 0.4.4 ([@elupus] - [#34687]) ([arcam_fmj docs]) +- Attempt to fix CI ([@balloob] - [#34800]) +- Add script to copy backend translations to frontend ([@balloob] - [#34706]) +- deCONZ - device triggers for Aqara Opple switches ([@merdok] - [#34815]) ([deconz docs]) +- Parallelize collections helper ([@balloob] - [#34783]) +- Minor helpers cleanup ([@balloob] - [#34786]) +- Log threading exceptions properly ([@balloob] - [#34789]) +- Add missing blocks ([@bdraco] - [#34832]) ([homekit docs]) +- Removed defunct punctuality from nederlandse_spoorwegen ([@YarmoM] - [#34680]) ([nederlandse_spoorwegen docs]) (breaking-change) +- Update nederlandse_spoorwegen nsapi to 3.0.4 ([@YarmoM] - [#34681]) ([nederlandse_spoorwegen docs]) +- Add Xiaomi miio Alarm Control Panel ([@starkillerOG] - [#32091]) ([xiaomi_miio docs]) (new-platform) +- Fix async_setup type in components/homeassistant module ([@gladhorn] - [#34816]) ([homeassistant docs]) +- Fix typo in arest sensor ([@brendongo] - [#34833]) ([arest docs]) +- Remove unnecessary space in greeneye_monitor unique_id ([@brendongo] - [#34834]) +- Fix race condition in august test under py38 ([@bdraco] - [#34775]) ([august docs]) +- Fix flapping reload tests ([@bdraco] - [#34837]) +- Bump version to 0.110.0dev0 ([@frenck] - [#34827]) +- Fix tuya network failure startup ([@ollo69] - [#34057]) ([tuya docs]) +- Remove side effects from rachio switch init ([@bdraco] - [#34799]) ([rachio docs]) +- Clean up Rachio binary sensor init ([@brg468] - [#34855]) ([rachio docs]) +- Prevent tplink tests from doing I/O ([@bdraco] - [#34879]) ([tplink docs]) +- Config flow for hunterdouglas_powerview ([@bdraco] - [#34795]) ([hunterdouglas_powerview docs]) (new-platform) +- Fix async scene conversion in Hunter Douglas Powerview ([@bdraco] - [#34899]) ([hunterdouglas_powerview docs]) +- Add numato integration ([@clssn] - [#33816]) ([numato docs]) (new-integration) +- Fix crash in NAD integration ([@gladhorn] - [#34571]) ([nad docs]) +- Add fortigate deprecation message ([@kifeo] - [#34854]) ([fortigate docs]) (breaking-change) +- Add overlay options wrapper to rpi_camera ([@alxrdn] - [#34461]) ([rpi_camera docs]) (breaking-change) +- Address new issues flagged by flake8 3.8.0a2 ([@scop] - [#34964]) +- Improve logging for unregistered webhooks ([@danielperna84] - [#34882]) ([webhook docs]) +- Use built-in test helpers on 3.8 ([@balloob] - [#34901]) +- Fix webhook imports sorting ([@MartinHjelmare] - [#34988]) ([webhook docs]) +- Fix not condition validation and entity/device extraction ([@frenck] - [#34959]) +- Cleanup homekit callbacks and jobs ([@bdraco] - [#34975]) ([homekit docs]) +- Add unique id to esphome config flow ([@ctalkington] - [#34753]) ([esphome docs]) +- Use a future for mock coro ([@balloob] - [#34989]) ([mqtt docs]) +- Introduce a singleton decorator ([@balloob] - [#34803]) +- Refactor Remote class in panasonic_viera ([@joogps] - [#34911]) ([panasonic_viera docs]) +- Update excess powerwall logging to be debug ([@bdraco] - [#34994]) ([powerwall docs]) +- Add battery sensors to hunterdouglas_powerview ([@bdraco] - [#34917]) ([hunterdouglas_powerview docs]) (new-platform) +- Config flow for homekit ([@bdraco] - [#34560]) ([homekit docs]) +- Remove some passings of loop ([@balloob] - [#34995]) ([rflink docs]) ([shell_command docs]) ([tradfri docs]) +- UniFi - Add simple options flow ([@Kane610] - [#34990]) ([unifi docs]) +- Attempt to fix flapping august lock test ([@bdraco] - [#34998]) ([august docs]) +- Config flow for ONVIF ([@hunterjm] - [#34520]) ([onvif docs]) (breaking-change) +- Add flow and return sensors for MELCloud ATW device ([@vilppuvuorinen] - [#34693]) ([melcloud docs]) +- Add full options to serial sensor platform ([@guiguid] - [#34962]) ([serial docs]) +- Fix unknown exception being caught ([@shenxn] - [#35005]) ([roomba docs]) +- Fix CI, incomplete change in melcloud ([@frenck] - [#35016]) ([melcloud docs]) +- Rename WaterHeaterDevice to WaterHeaterEntity ([@emontnemery] - [#34675]) +- Several optimizations to automations ([@frenck] - [#35007]) ([automation docs]) +- Use pulsectl library for PulseAudio connection ([@breiti] - [#34965]) ([pulseaudio_loopback docs]) (breaking-change) +- Include QoS and retain in MQTT debug info ([@emontnemery] - [#35011]) ([mqtt docs]) +- Bump HAP-python to 2.8.3 ([@bdraco] - [#35023]) ([homekit docs]) +- Update AirVisual to use DataUpdateCoordinator ([@bachya] - [#34796]) ([airvisual docs]) +- Add more SNMP variable types ([@Mich-b] - [#33426]) ([snmp docs]) +- Fix songpal on devices where source!=uri ([@rytilahti] - [#34699]) ([songpal docs]) +- Fix ONVIF YAML import ([@frenck] - [#35035]) ([onvif docs]) +- Add yeelight meteorite (YLDL01YL, ceiling10) ([@rytilahti] - [#35018]) ([yeelight docs]) +- Cleanup homekit strings spacing ([@bdraco] - [#35056]) ([homekit docs]) +- Fix another race in august tests ([@bdraco] - [#35054]) +- Add scene to default config ([@balloob] - [#35058]) ([default_config docs]) +- added abbreviation for temperature_unit ([@unixko] - [#35076]) ([mqtt docs]) +- Fix proliphix ([@mhorst314] - [#34397]) ([proliphix docs]) +- Upgrade youtube_dl to version 2020.05.03 ([@BKPepe] - [#35078]) ([media_extractor docs]) +- Fix vera config ids not being converted to integers ([@vangorra] - [#35070]) ([vera docs]) +- Async vs sync inheritance mismatch fixes ([@scop] - [#35088]) ([atag docs]) ([fortigate docs]) ([hunterdouglas_powerview docs]) +- Use savoury1/ffmpeg4 PPA on Travis, PyAV 7 needs FFmpeg >= 4 ([@scop] - [#35090]) +- Check isinstance on collections.abc, not typing classes ([@scop] - [#35087]) ([smartthings docs]) +- Upgrades requests-mock to 1.8.0 ([@frenck] - [#35093]) +- Correct error message in Microsoft Face ([@ochlocracy] - [#35096]) ([microsoft_face docs]) +- Add zwave mqtt ([@MartinHjelmare] - [#34987]) ([zwave_mqtt docs]) (new-integration) +- Improve UPnP configuration flow ([@StevenLooman] - [#34737]) ([discovery docs]) ([upnp docs]) +- Add support for influxdb path parameter ([@pdcemulator] - [#35089]) ([influxdb docs]) +- Add codeowner to Monoprice integration ([@OnFreund] - [#35111]) ([monoprice docs]) +- Fix unloading of Monoprice config entries ([@OnFreund] - [#35112]) ([monoprice docs]) +- Increase surepetcare default timeout ([@benleb] - [#34944]) ([surepetcare docs]) +- Tibber config flow ([@Danielhiversen] - [#34469]) ([tibber docs]) +- Use suggestd_value instead of default in Monoprice options flow ([@OnFreund] - [#35107]) ([monoprice docs]) +- Simplify MQTT light brightness logic ([@LordMike] - [#35097]) ([mqtt docs]) +- Use asynctest-mock in most places ([@balloob] - [#35109]) +- Make alexa and google aware of DEVICE_CLASS_GATE ([@bdraco] - [#35103]) ([alexa docs]) ([google_assistant docs]) +- Add type to device registry ([@balloob] - [#35095]) ([adguard docs]) ([config docs]) +- Add required features to cover service registration ([@MartinHjelmare] - [#35073]) ([cover docs]) +- Upgrade spotipy to 2.12.0 ([@frenck] - [#35149]) ([spotify docs]) +- Upgrade numpy to 1.18.4 ([@frenck] - [#35150]) ([iqvia docs]) ([opencv docs]) ([tensorflow docs]) ([trend docs]) +- Add support for refreshing synology_dsm sensors ([@ronaldheft] - [#35141]) ([synology_dsm docs]) +- Return emulated hue id for update requests ([@Tho85] - [#35139]) ([emulated_hue docs]) +- Support multiple EDL21 meters ([@mtdcr] - [#33594]) ([edl21 docs]) +- Improve emulated_hue compatibility with newer systems ([@Tho85] - [#35148]) ([emulated_hue docs]) +- Upgrade pyupgrade to v2.3.0 ([@frenck] - [#35159]) +- Upgrade cryptography to 2.9.2 ([@BKPepe] - [#35084]) +- scrape: extract strings from new non-text tags ([@davidjb] - [#35021]) ([scrape docs]) +- Upgrade zeroconf to 0.26.0 ([@fabaff] - [#35176]) ([zeroconf docs]) +- Upgrade alpha_vantage to 2.2.0 ([@fabaff] - [#35172]) ([alpha_vantage docs]) +- Upgrade pytz to 2020.1 ([@fabaff] - [#35174]) +- Squeezebox add query and sync ([@rajlaud] - [#31748]) ([squeezebox docs]) +- UniFi - Improve signalling and handling of adding new entities ([@Kane610] - [#34925]) ([unifi docs]) +- Simplification of upnp component ([@StevenLooman] - [#35191]) ([upnp docs]) (breaking-change) +- Some Sonos fixes ([@amelchio] - [#35115]) ([sonos docs]) +- Extract instance ID helper from updater ([@balloob] - [#35043]) ([updater docs]) +- Group by endpoints and not by devices for ZHA Zigbee groups ([@dmulcahey] - [#34583]) ([zha docs]) +- Move life360 I/O out of event loop in config flow ([@pnbruckner] - [#35193]) ([life360 docs]) +- Allow use of common entity update service in AirVisual ([@bachya] - [#35203]) ([airvisual docs]) +- Make sure MQTT light brightness is not rounded to 0 ([@emontnemery] - [#35207]) ([mqtt docs]) +- Add homekit camera support ([@xdissent] - [#32527]) ([homekit docs]) +- ISY994 migration to PyISY v2 (Structure Changes to enable upgrade, Part 1) ([@shbatm] - [#35212]) ([isy994 docs]) (breaking-change) +- Fix AdGuard device info ([@balloob] - [#35217]) ([adguard docs]) +- Add zwave_mqtt sensor platform ([@cgarwood] - [#35135]) ([zwave_mqtt docs]) (new-platform) +- Bump up pyserial dependency ([@Adminiuga] - [#35201]) ([acer_projector docs]) +- Add config flow base strings ([@balloob] - [#34523]) +- Strict creation of the config for dynalite ([@ziv1234] - [#34663]) ([dynalite docs]) +- ISY994 Structure updates in prep for PyISYv2 (Part 2) ([@shbatm] - [#35225]) ([isy994 docs]) +- Add Home Connect integration ([@DavidMStraub] - [#29214]) ([homeconnect docs]) (new-integration) +- Add BleBox integration ([@gadgetmobile] - [#32664]) ([blebox docs]) (new-integration) +- Updated frontend to 20200505.0 ([@bramkragten] - [#35253]) ([frontend docs]) +- Clean up device registry if entity registry updates ([@balloob] - [#35106]) +- Add issue_tracker property to manifest ([@frenck] - [#35153]) +- Guard bad entity ID in entity registry ([@balloob] - [#35271]) +- Add manual config flow for Plex ([@jjlawren] - [#34476]) ([plex docs]) +- Fix pyload API statusServer doesn't take parameters ([@h4de5] - [#35242]) ([pyload docs]) +- Add zwave workaround identification for Kwikset 916 and Kwikset Obsidian ([@bryantlee] - [#35277]) ([zwave docs]) +- Add current step that is in progress ([@balloob] - [#35272]) ([config docs]) +- Fix fan not checking supported_features ([@shenxn] - [#35248]) ([fan docs]) +- New configuration flow for ZHA integration ([@Adminiuga] - [#35161]) ([zha docs]) (breaking-change) +- Update pydaikin to 2.0.0 ([@fredrike] - [#34807]) ([daikin docs]) +- Provide zeroconf option to bind to only the default interface ([@bdraco] - [#35281]) ([zeroconf docs]) +- Clean up script for WLED translations ([@balloob] - [#35260]) +- Refactor ONVIF ([@hunterjm] - [#35222]) ([onvif docs]) +- Upgrade zeroconf to 0.26.1 to resolve performance regression ([@bdraco] - [#35291]) ([zeroconf docs]) +- Fail tests if wrapped callbacks or coroutines throw ([@emontnemery] - [#35010]) ([mqtt docs]) +- Add Synology DSM scan interval option flow ([@Quentame] - [#35183]) ([synology_dsm docs]) +- Reset imap email content state if no email ([@isk0001y] - [#35123]) ([imap_email_content docs]) (breaking-change) +- Add config flow support to songpal integration ([@shenxn] - [#34714]) ([songpal docs]) (breaking-change) +- Add state reproduction to the alert component ([@bachya] - [#35267]) ([alert docs]) +- Fix broken CI ([@balloob] - [#35314]) ([unifi docs]) +- Fix incorrect device registry call in Notion ([@bachya] - [#35306]) ([notion docs]) +- Handle config with a limited Plex account ([@jjlawren] - [#35218]) ([plex docs]) +- UniFi - Make devices proper push based ([@Kane610] - [#35152]) ([unifi docs]) +- Add devolo home control ([@2Fake] - [#33181]) ([devolo_home_control docs]) (new-integration) +- Add Homekit cameras codecs ([@stickpin] - [#35238]) ([homekit docs]) +- Add zwave_mqtt light platform ([@MartinHjelmare] - [#35337]) ([zwave_mqtt docs]) (new-platform) +- Add get_url helper, deprecate base_url ([@frenck] - [#35224]) ([config docs]) ([http docs]) (breaking-change) +- Bump plexwebsocket to 0.0.8 ([@jjlawren] - [#35351]) ([plex docs]) +- Enable async_update for entities in NWS ([@MatthewFlamm] - [#35048]) ([nws docs]) +- Migrate ISY994 to PyISY v2 ([@shbatm] - [#35338]) ([isy994 docs]) (breaking-change) +- Delete flapping automatic tests ([@bdraco] - [#35356]) ([automatic docs]) +- Rewrite JuiceNet for async and config flow ([@jesserockz] - [#34365]) ([juicenet docs]) +- Add modbus sensor string data_type ([@bradkeifer] - [#35269]) ([modbus docs]) +- Capitalize kane610 in codeowners since scripts are case sensitive ([@Kane610] - [#35375]) ([axis docs]) ([deconz docs]) ([unifi docs]) +- Remove unused decorator in Airly ([@bieniu] - [#35361]) ([airly docs]) +- Upgrade youtube_dl to version 2020.05.08 ([@BKPepe] - [#35376]) ([media_extractor docs]) +- Update devolo_home_control strings ([@2Fake] - [#35362]) ([devolo_home_control docs]) +- Add agent_dvr integration ([@ispysoftware] - [#32711]) ([agent_dvr docs]) (new-integration) +- Detect use of deprecated base_url ([@frenck] - [#35353]) +- Add config option to ignore Plex Web clients ([@jjlawren] - [#34708]) ([plex docs]) +- Bump up zha-device-handlers dependecy for ZHA ([@Adminiuga] - [#35379]) ([zha docs]) +- Add Daikin total/cool/heat power sensors ([@mlemainque] - [#34391]) ([daikin docs]) +- Upgrade pytest to 5.4.2 ([@frenck] - [#35381]) +- Fix devolo switch on and off ([@2Fake] - [#35357]) ([devolo_home_control docs]) +- async_get_url -> get_url ([@frenck] - [#35382]) +- Add Universal Powerline Bus ([@gwww] - [#34692]) ([upb docs]) (new-integration) +- UniFi - Make clients proper push based ([@Kane610] - [#35273]) ([unifi docs]) +- Update ZHA zigpy-deconz dependency ([@Adminiuga] - [#35389]) ([zha docs]) +- Make roku async ([@ctalkington] - [#35104]) ([roku docs]) +- Small collection of random styling tweaks, fixes and Pythonism ([@frenck] - [#35390]) +- Improve ISY994 Z-Wave and binary sensor device sorting ([@shbatm] - [#35391]) ([isy994 docs]) (breaking-change) +- Upgrade bravia-tv backend to 1.0.4 ([@dcnielsen90] - [#35393]) ([braviatv docs]) +- UniFi - Additional consolidation for cleanliness sake ([@Kane610] - [#35395]) ([unifi docs]) +- Update rokuecp to 0.2.1 ([@ctalkington] - [#35400]) ([roku docs]) +- Universal Powerline Bus Scene support ([@gwww] - [#35401]) ([upb docs]) (new-platform) +- Update rokuecp to 0.2.2 ([@ctalkington] - [#35404]) +- Add service to turn on the switcher device with timer ([@thecode] - [#33235]) ([switcher_kis docs]) +- Pylint cleanups ([@scop] - [#35409]) +- Refactor ZHA config flow ([@Adminiuga] - [#35397]) ([zha docs]) +- Update rokuecp to 0.2.3 ([@ctalkington] - [#35420]) ([roku docs]) +- Add config flow, use async loading, and restore brightness option to ISY994 ([@shbatm] - [#35413]) ([isy994 docs]) (breaking-change) +- Add battery information to BLE devices ([@guillempages] - [#33222]) ([bluetooth_le_tracker docs]) +- UniFi - Use more common strings for config flow ([@Kane610] - [#35399]) ([unifi docs]) +- Updated frontend to 20200509.0 ([@bramkragten] - [#35427]) ([frontend docs]) +- Activate Calendar Panel ([@zsarnett] - [#35276]) ([calendar docs]) +- Improve roku remote ([@ctalkington] - [#35419]) ([roku docs]) +- Update rokuecp to 0.3.2 ([@ctalkington] - [#35429]) ([roku docs]) +- Fix permissions on bluetooth_le_tracker ([@bdraco] - [#35432]) ([bluetooth_le_tracker docs]) +- Fix scaffold and hassfest references ([@balloob] - [#35431]) +- reduce roku scan interval by 10s ([@ctalkington] - [#35433]) ([roku docs]) +- Add Device Registry support and Device Info for ISY994 ([@shbatm] - [#35435]) ([isy994 docs]) +- Add Flick Electric NZ integration ([@ZephireNZ] - [#30696]) ([flickelectric docs]) (new-integration) +- Add BSBLan Climate integration ([@liudger] - [#32375]) ([bsblan docs]) (new-integration) +- Only add SAJ sensors that are enabled and available ([@fredericvl] - [#34978]) ([saj docs]) +- Kodi: Correctly report media content type for PVR channels ([@Tho85] - [#35091]) ([kodi docs]) (breaking-change) +- Songpal code and test improvement ([@shenxn] - [#35318]) ([songpal docs]) (breaking-change) +- Make upnp update interval configurable ([@StevenLooman] - [#35298]) ([upnp docs]) +- Add Climate Platform Support to ISY994 ([@shbatm] - [#35440]) ([isy994 docs]) (new-platform) +- Add min_mireds and max_mireds to MQTT Light ([@314eter] - [#32613]) ([mqtt docs]) +- Add const module to oauth2 scaffold template ([@MartinHjelmare] - [#35438]) +- Increase coverage and cleanup BleBox cover ([@gadgetmobile] - [#35369]) ([blebox docs]) +- Fix Daikin power sensors ([@mlemainque] - [#35428]) ([daikin docs]) +- Fix roomba bin full binary sensor ([@shenxn] - [#35443]) ([roomba docs]) +- Add Mill config flow ([@Danielhiversen] - [#35136]) ([mill docs]) (breaking-change) +- Add support for ISY994 Variables as Sensors ([@shbatm] - [#35453]) ([isy994 docs]) +- Remove logo & icon from manifest ([@frenck] - [#35410]) +- UniFi - Update device registry after device has been upgraded ([@Kane610] - [#35430]) ([unifi docs]) +- Listen for group member state changes when using `expand` in templates ([@Tho85] - [#35398]) +- Add names for the homematic garage door states ([@guillempages] - [#35349]) ([homematic docs]) (breaking-change) +- Whitelist edl21 negative active energy sensors ([@mtdcr] - [#34662]) ([edl21 docs]) +- Bump envoy_reader version ([@gtdiehl] - [#35465]) ([enphase_envoy docs]) +- Remove constants from myq that are now upstream ([@bdraco] - [#35463]) ([myq docs]) +- Open garage, move code to an external library. ([@Danielhiversen] - [#35462]) ([opengarage docs]) +- Make interface_choice option effective ([@bdraco] - [#35444]) ([zeroconf docs]) +- Make homekit TV media players aware of STATE_STANDBY ([@bdraco] - [#35282]) ([homekit docs]) +- Update rokuecp to 0.4.0 ([@ctalkington] - [#35436]) ([roku docs]) +- Add config flow for Tuya ([@ollo69] - [#35422]) ([tuya docs]) (breaking-change) +- Use common strings for directv config flow ([@ctalkington] - [#35471]) ([directv docs]) ([directv docs]) +- Fix exception in hunterdouglas_powerview with ignored config entry ([@bdraco] - [#35482]) ([hunterdouglas_powerview docs]) +- Make homekit camera snapshots HAP spec compliant ([@bdraco] - [#35299]) ([homekit docs]) +- Reduce context switching in homekit state updates ([@bdraco] - [#35147]) ([homekit docs]) +- Bump pyatmo version to 3.3.1 ([@cgtobi] - [#35476]) ([netatmo docs]) +- Allow zeroconf instance sharing ([@balloob] - [#35484]) ([zeroconf docs]) +- Add lutron_caseta config entries ([@chrisaljoudi] - [#34133]) ([lutron_caseta docs]) +- Change unique_id for webostv ([@jjlawren] - [#34979]) ([webostv docs]) (breaking-change) +- Correctly handle failed Atag update in coordinator ([@MatsNl] - [#35473]) ([atag docs]) +- Use common strings and fix key name for error in vizio ([@raman325] - [#35487]) ([vizio docs]) +- Fix light toggle service attributes ([@shenxn] - [#35483]) ([light docs]) +- Upgrade slixmpp library to 1.5.1 ([@flowolf] - [#35495]) ([xmpp docs]) +- Handle error fetching available account link services ([@balloob] - [#35485]) ([cloud docs]) +- Minor Tuya Fix ([@ollo69] - [#35497]) ([tuya docs]) +- Ensure homekit camera stream can be restarted after failure ([@bdraco] - [#35384]) ([homekit docs]) +- Use config flow base strings ([@fredrike] - [#35494]) ([point docs]) +- Show device details in homekit accessory service info ([@bdraco] - [#35100]) ([homekit docs]) +- Add Device and Integration Services to ISY994 ([@shbatm] - [#35467]) ([isy994 docs]) +- ONVIF Event Implementation ([@hunterjm] - [#35406]) ([onvif docs]) (new-platform) +- Add cast app media ([@Eerovil] - [#35114]) ([cast docs]) +- Bump pydaikin to 2.0.1, catch HTTPForbidden exception ([@fredrike] - [#35466]) ([daikin docs]) +- Fix Home Connect datetime comparison ([@DavidMStraub] - [#35501]) ([home_connect docs]) +- Move upnp update_interval options flow ([@StevenLooman] - [#35474]) ([upnp docs]) +- Use system zeroconf singleton for homekit ([@bdraco] - [#35502]) ([homekit docs]) +- Compare uvc rtsp stream uri to host config ([@danjenkins] - [#31107]) ([uvc docs]) +- Pre-filter zeroconf service browser updates ([@bdraco] - [#35518]) ([zeroconf docs]) +- Upgrade pre-commit to 2.4.0 ([@frenck] - [#35520]) +- Fix bsblan get key CONF_PASSKEY ([@liudger] - [#35513]) ([bsblan docs]) +- Bumped aioswitcher to 1.2.0. ([@TomerFi] - [#35510]) ([switcher_kis docs]) +- Bump up ZHA dependecy ([@Adminiuga] - [#35521]) ([zha docs]) +- Code conformance and sensor value clean-up on ISY994 ([@shbatm] - [#35514]) ([isy994 docs]) +- Universal Powerline Bus -- Link Events ([@gwww] - [#35526]) ([upb docs]) +- Use common strings for songpal config flow ([@shenxn] - [#35517]) ([songpal docs]) +- Use common strings for ipp config flow ([@ctalkington] - [#35505]) ([ipp docs]) +- Fix zwave_mqtt discovery of switch entities ([@marcelveldt] - [#35533]) ([zwave_mqtt docs]) +- Rewrite Atag ([@MatsNl] - [#35496]) ([atag docs]) +- support BleBox sensor ([@gadgetmobile] - [#35374]) ([blebox docs]) (new-platform) +- Return fan_speed_list based on SUPPORT_FAN_SPEED. ([@ochlocracy] - [#35347]) +- Meteo-France Vigilance Dependancy Update ([@Imbuzi] - [#35537]) ([meteo_france docs]) +- Add validator for battery scan option ([@guillempages] - [#35506]) ([bluetooth_le_tracker docs]) +- Use common strings for roku config flow ([@ctalkington] - [#35504]) ([roku docs]) +- Update HAP-python to 2.8.4 ([@bdraco] - [#35541]) ([homekit docs]) +- Fix sense doing I/O in the event loop ([@bdraco] - [#35523]) ([sense docs]) +- Add email as common data string ([@balloob] - [#35546]) +- Add temperature device class to Darksky sensors ([@balloob] - [#35544]) ([darksky docs]) +- Use config flow references for data ([@balloob] - [#35529]) +- Add binary sensor platform to zwave_mqtt ([@marcelveldt] - [#35519]) ([zwave_mqtt docs]) (new-platform) +- Upgrade opengarage library ([@Danielhiversen] - [#35549]) ([opengarage docs]) +- Fix examples in services.yaml for squeezebox component ([@rajlaud] - [#35548]) ([squeezebox docs]) +- Bump bsblan lib to version 0.3.7 ([@liudger] - [#35551]) ([bsblan docs]) +- Ensure homekit_controller recieves zeroconf c# updates ([@bdraco] - [#35545]) ([homekit_controller docs]) ([zeroconf docs]) +- Try to automatically detect zones on first run of Monoprice integration ([@OnFreund] - [#35127]) ([monoprice docs]) +- Implement soundtouch select source ([@jtommi] - [#31669]) ([soundtouch docs]) +- Updated frontend to 20200512.0 ([@bramkragten] - [#35558]) ([frontend docs]) +- Add Zerproc integration ([@emlove] - [#35477]) ([zerproc docs]) (new-integration) +- Add more system information from Supervisor ([@frenck] - [#35560]) ([hassio docs]) ([updater docs]) +- UniFi - Sites don't declare role on UniFiOS 1.7.0 beta ([@Kane610] - [#35555]) ([unifi docs]) +- Fix synology temperature rounding ([@shenxn] - [#35556]) ([synology_dsm docs]) +- Bump plexapi to 3.6.0 ([@jjlawren] - [#35563]) ([plex docs]) +- Patch aiohttp client session close ([@MartinHjelmare] - [#34769]) +- Fix connection problems in the Broadlink integration ([@felipediel] - [#34670]) ([broadlink docs]) +- Add wiffi integration ([@mampfes] - [#30784]) ([wiffi docs]) (new-integration) +- Plex discovery on demand ([@jjlawren] - [#35303]) ([plex docs]) +- Add forked_daapd integration ([@uvjustin] - [#31953]) ([forked_daapd docs]) (new-integration) +- update knx module to xknx 0.11.3 ([@farmio] - [#35154]) ([knx docs]) +- Add config flow to pi_hole integration ([@shenxn] - [#35442]) ([pi_hole docs]) +- Updated frontend to 20200513.0 ([@bramkragten] - [#35574]) ([frontend docs]) +- Add config flow and 2FA support for Blink ([@fronzbot] - [#35396]) ([blink docs]) (breaking-change) +- Add ssdp discovery for isy994 ([@bdraco] - [#35568]) ([isy994 docs]) +- Properly handle incomplete upnp ssdp discovery ([@StevenLooman] - [#35553]) ([upnp docs]) (beta fix) +- Bump haanna to 0.15.0 ([@bouwew] - [#35579]) ([plugwise docs]) (beta fix) +- Clean up forked_daapd volume saving/setting in async_play_media ([@uvjustin] - [#35584]) ([forked_daapd docs]) (beta fix) +- Fix reversed logic in zeroconf homekit pairing check ([@bdraco] - [#35596]) ([zeroconf docs]) (beta fix) +- Updated frontend to 20200514.0 ([@bramkragten] - [#35598]) ([frontend docs]) (beta fix) +- Additional checks for ONVIF event capabilities ([@hunterjm] - [#35599]) ([onvif docs]) (beta fix) +- Fix zwave_mqtt creating the device name ([@marcelveldt] - [#35603]) ([zwave_mqtt docs]) (beta fix) +- Fix zwave thermostat specific device type ([@zacpotts] - [#35609]) ([zwave docs]) (beta fix) +- Add check for HTML in translations ([@bramkragten] - [#35615]) ([ambiclimate docs]) ([logi_circle docs]) ([point docs]) ([starline docs]) (beta fix) +- Upgrade to pysonos 0.0.29 ([@amelchio] - [#35617]) ([sonos docs]) (beta fix) +- Upgrade huawei-lte-api to 1.4.12 ([@scop] - [#35618]) ([huawei_lte docs]) (beta fix) +- additional log info and strings fix ([@hunterjm] - [#35622]) ([onvif docs]) (beta fix) +- Don't remove deprecated ZHA config option yet ([@Adminiuga] - [#35627]) ([zha docs]) (beta fix) +- Rename zwave_mqtt to ozw ([@frenck] - [#35631]) ([ozw docs]) (beta fix) +- Updated frontend to 20200514.1 ([@bramkragten] - [#35632]) ([frontend docs]) (beta fix) +- Bump python-synology to 0.8.1 ([@Quentame] - [#35640]) ([synology_dsm docs]) (beta fix) +- Prevent discovery of IPP printers lacking identifier ([@ctalkington] - [#35630]) ([ipp docs]) (beta fix) +- Update Universal Powerline Bus event name ([@gwww] - [#35644]) ([upb docs]) (breaking-change) (beta fix) +- Bump roombapy to 1.6.1 ([@shenxn] - [#35650]) ([roomba docs]) (beta fix) +- Fix caldav event for calendar panel ([@bramkragten] - [#35653]) ([caldav docs]) (beta fix) +- ONVIF: Add check around media capabilities ([@hunterjm] - [#35667]) ([onvif docs]) (beta fix) +- Updated frontend to 20200515.0 ([@bramkragten] - [#35677]) ([frontend docs]) (beta fix) +- Change MediaPlayerDevice to MediaPlayerEntity ([@uvjustin] - [#35692]) ([forked_daapd docs]) (beta fix) +- Fix handling of additional data in core config storage ([@frenck] - [#35660]) (beta fix) +- Bump up ZHA dependencies ([@Adminiuga] - [#35706]) ([zha docs]) (beta fix) +- Abort forked-daapd zeroconf flow if version < 27 ([@uvjustin] - [#35709]) ([forked_daapd docs]) (beta fix) +- Upgrade opengarage lib to 0.1.4 ([@Danielhiversen] - [#35729]) ([opengarage docs]) (beta fix) +- Ensure homekit version strings conform to spec ([@bdraco] - [#35741]) ([homekit docs]) (beta fix) +- Update mill manifest to reflect config flow ([@Danielhiversen] - [#35748]) (beta fix) +- Handle UPS disconnects in NUT ([@bdraco] - [#35758]) ([nut docs]) (beta fix) +- Fix daikin discovery flow ([@fredrike] - [#35767]) ([daikin docs]) (beta fix) +- Skip forked_daapd ignored entries with empty entry.data ([@uvjustin] - [#35772]) ([forked_daapd docs]) (beta fix) +- Bump Atag dependency to 0.3.1.2 ([@MatsNl] - [#35776]) ([atag docs]) (beta fix) +- Updated frontend to 20200518.0 ([@bramkragten] - [#35785]) ([frontend docs]) (beta fix) +- Fix ONVIF subscription renewal ([@hunterjm] - [#35792]) ([onvif docs]) (beta fix) +- Upgrade pysonos to 0.0.30 ([@amelchio] - [#35793]) ([sonos docs]) (beta fix) +- Change version check in forked-daapd zeroconf step ([@uvjustin] - [#35796]) ([forked_daapd docs]) (beta fix) +- Bump up ZHA dependencies. ([@Adminiuga] - [#35797]) ([zha docs]) (beta fix) +- Updated frontend to 20200519.0 ([@bramkragten] - [#35813]) ([frontend docs]) (beta fix) +- UniFi - Fix disabled entities being enabled after a restart ([@Kane610] - [#35819]) ([unifi docs]) (beta fix) + + +
+ +[#29214]: https://github.com/home-assistant/core/pull/29214 +[#30696]: https://github.com/home-assistant/core/pull/30696 +[#30784]: https://github.com/home-assistant/core/pull/30784 +[#31107]: https://github.com/home-assistant/core/pull/31107 +[#31669]: https://github.com/home-assistant/core/pull/31669 +[#31748]: https://github.com/home-assistant/core/pull/31748 +[#31953]: https://github.com/home-assistant/core/pull/31953 +[#32091]: https://github.com/home-assistant/core/pull/32091 +[#32375]: https://github.com/home-assistant/core/pull/32375 +[#32527]: https://github.com/home-assistant/core/pull/32527 +[#32613]: https://github.com/home-assistant/core/pull/32613 +[#32664]: https://github.com/home-assistant/core/pull/32664 +[#32711]: https://github.com/home-assistant/core/pull/32711 +[#32815]: https://github.com/home-assistant/core/pull/32815 +[#32950]: https://github.com/home-assistant/core/pull/32950 +[#33181]: https://github.com/home-assistant/core/pull/33181 +[#33222]: https://github.com/home-assistant/core/pull/33222 +[#33235]: https://github.com/home-assistant/core/pull/33235 +[#33426]: https://github.com/home-assistant/core/pull/33426 +[#33594]: https://github.com/home-assistant/core/pull/33594 +[#33816]: https://github.com/home-assistant/core/pull/33816 +[#33939]: https://github.com/home-assistant/core/pull/33939 +[#34057]: https://github.com/home-assistant/core/pull/34057 +[#34079]: https://github.com/home-assistant/core/pull/34079 +[#34133]: https://github.com/home-assistant/core/pull/34133 +[#34259]: https://github.com/home-assistant/core/pull/34259 +[#34365]: https://github.com/home-assistant/core/pull/34365 +[#34391]: https://github.com/home-assistant/core/pull/34391 +[#34397]: https://github.com/home-assistant/core/pull/34397 +[#34419]: https://github.com/home-assistant/core/pull/34419 +[#34420]: https://github.com/home-assistant/core/pull/34420 +[#34461]: https://github.com/home-assistant/core/pull/34461 +[#34462]: https://github.com/home-assistant/core/pull/34462 +[#34469]: https://github.com/home-assistant/core/pull/34469 +[#34476]: https://github.com/home-assistant/core/pull/34476 +[#34481]: https://github.com/home-assistant/core/pull/34481 +[#34520]: https://github.com/home-assistant/core/pull/34520 +[#34523]: https://github.com/home-assistant/core/pull/34523 +[#34547]: https://github.com/home-assistant/core/pull/34547 +[#34553]: https://github.com/home-assistant/core/pull/34553 +[#34560]: https://github.com/home-assistant/core/pull/34560 +[#34563]: https://github.com/home-assistant/core/pull/34563 +[#34571]: https://github.com/home-assistant/core/pull/34571 +[#34580]: https://github.com/home-assistant/core/pull/34580 +[#34583]: https://github.com/home-assistant/core/pull/34583 +[#34590]: https://github.com/home-assistant/core/pull/34590 +[#34591]: https://github.com/home-assistant/core/pull/34591 +[#34592]: https://github.com/home-assistant/core/pull/34592 +[#34593]: https://github.com/home-assistant/core/pull/34593 +[#34594]: https://github.com/home-assistant/core/pull/34594 +[#34595]: https://github.com/home-assistant/core/pull/34595 +[#34599]: https://github.com/home-assistant/core/pull/34599 +[#34604]: https://github.com/home-assistant/core/pull/34604 +[#34606]: https://github.com/home-assistant/core/pull/34606 +[#34607]: https://github.com/home-assistant/core/pull/34607 +[#34608]: https://github.com/home-assistant/core/pull/34608 +[#34609]: https://github.com/home-assistant/core/pull/34609 +[#34616]: https://github.com/home-assistant/core/pull/34616 +[#34618]: https://github.com/home-assistant/core/pull/34618 +[#34621]: https://github.com/home-assistant/core/pull/34621 +[#34624]: https://github.com/home-assistant/core/pull/34624 +[#34628]: https://github.com/home-assistant/core/pull/34628 +[#34629]: https://github.com/home-assistant/core/pull/34629 +[#34647]: https://github.com/home-assistant/core/pull/34647 +[#34648]: https://github.com/home-assistant/core/pull/34648 +[#34649]: https://github.com/home-assistant/core/pull/34649 +[#34650]: https://github.com/home-assistant/core/pull/34650 +[#34652]: https://github.com/home-assistant/core/pull/34652 +[#34654]: https://github.com/home-assistant/core/pull/34654 +[#34658]: https://github.com/home-assistant/core/pull/34658 +[#34662]: https://github.com/home-assistant/core/pull/34662 +[#34663]: https://github.com/home-assistant/core/pull/34663 +[#34668]: https://github.com/home-assistant/core/pull/34668 +[#34670]: https://github.com/home-assistant/core/pull/34670 +[#34672]: https://github.com/home-assistant/core/pull/34672 +[#34673]: https://github.com/home-assistant/core/pull/34673 +[#34674]: https://github.com/home-assistant/core/pull/34674 +[#34675]: https://github.com/home-assistant/core/pull/34675 +[#34676]: https://github.com/home-assistant/core/pull/34676 +[#34680]: https://github.com/home-assistant/core/pull/34680 +[#34681]: https://github.com/home-assistant/core/pull/34681 +[#34687]: https://github.com/home-assistant/core/pull/34687 +[#34692]: https://github.com/home-assistant/core/pull/34692 +[#34693]: https://github.com/home-assistant/core/pull/34693 +[#34698]: https://github.com/home-assistant/core/pull/34698 +[#34699]: https://github.com/home-assistant/core/pull/34699 +[#34703]: https://github.com/home-assistant/core/pull/34703 +[#34706]: https://github.com/home-assistant/core/pull/34706 +[#34707]: https://github.com/home-assistant/core/pull/34707 +[#34708]: https://github.com/home-assistant/core/pull/34708 +[#34714]: https://github.com/home-assistant/core/pull/34714 +[#34726]: https://github.com/home-assistant/core/pull/34726 +[#34731]: https://github.com/home-assistant/core/pull/34731 +[#34733]: https://github.com/home-assistant/core/pull/34733 +[#34737]: https://github.com/home-assistant/core/pull/34737 +[#34739]: https://github.com/home-assistant/core/pull/34739 +[#34740]: https://github.com/home-assistant/core/pull/34740 +[#34741]: https://github.com/home-assistant/core/pull/34741 +[#34745]: https://github.com/home-assistant/core/pull/34745 +[#34749]: https://github.com/home-assistant/core/pull/34749 +[#34750]: https://github.com/home-assistant/core/pull/34750 +[#34751]: https://github.com/home-assistant/core/pull/34751 +[#34753]: https://github.com/home-assistant/core/pull/34753 +[#34755]: https://github.com/home-assistant/core/pull/34755 +[#34758]: https://github.com/home-assistant/core/pull/34758 +[#34769]: https://github.com/home-assistant/core/pull/34769 +[#34775]: https://github.com/home-assistant/core/pull/34775 +[#34783]: https://github.com/home-assistant/core/pull/34783 +[#34786]: https://github.com/home-assistant/core/pull/34786 +[#34789]: https://github.com/home-assistant/core/pull/34789 +[#34795]: https://github.com/home-assistant/core/pull/34795 +[#34796]: https://github.com/home-assistant/core/pull/34796 +[#34799]: https://github.com/home-assistant/core/pull/34799 +[#34800]: https://github.com/home-assistant/core/pull/34800 +[#34803]: https://github.com/home-assistant/core/pull/34803 +[#34807]: https://github.com/home-assistant/core/pull/34807 +[#34815]: https://github.com/home-assistant/core/pull/34815 +[#34816]: https://github.com/home-assistant/core/pull/34816 +[#34827]: https://github.com/home-assistant/core/pull/34827 +[#34832]: https://github.com/home-assistant/core/pull/34832 +[#34833]: https://github.com/home-assistant/core/pull/34833 +[#34834]: https://github.com/home-assistant/core/pull/34834 +[#34837]: https://github.com/home-assistant/core/pull/34837 +[#34854]: https://github.com/home-assistant/core/pull/34854 +[#34855]: https://github.com/home-assistant/core/pull/34855 +[#34879]: https://github.com/home-assistant/core/pull/34879 +[#34882]: https://github.com/home-assistant/core/pull/34882 +[#34899]: https://github.com/home-assistant/core/pull/34899 +[#34901]: https://github.com/home-assistant/core/pull/34901 +[#34911]: https://github.com/home-assistant/core/pull/34911 +[#34917]: https://github.com/home-assistant/core/pull/34917 +[#34925]: https://github.com/home-assistant/core/pull/34925 +[#34944]: https://github.com/home-assistant/core/pull/34944 +[#34959]: https://github.com/home-assistant/core/pull/34959 +[#34962]: https://github.com/home-assistant/core/pull/34962 +[#34964]: https://github.com/home-assistant/core/pull/34964 +[#34965]: https://github.com/home-assistant/core/pull/34965 +[#34975]: https://github.com/home-assistant/core/pull/34975 +[#34978]: https://github.com/home-assistant/core/pull/34978 +[#34979]: https://github.com/home-assistant/core/pull/34979 +[#34987]: https://github.com/home-assistant/core/pull/34987 +[#34988]: https://github.com/home-assistant/core/pull/34988 +[#34989]: https://github.com/home-assistant/core/pull/34989 +[#34990]: https://github.com/home-assistant/core/pull/34990 +[#34994]: https://github.com/home-assistant/core/pull/34994 +[#34995]: https://github.com/home-assistant/core/pull/34995 +[#34998]: https://github.com/home-assistant/core/pull/34998 +[#35005]: https://github.com/home-assistant/core/pull/35005 +[#35007]: https://github.com/home-assistant/core/pull/35007 +[#35010]: https://github.com/home-assistant/core/pull/35010 +[#35011]: https://github.com/home-assistant/core/pull/35011 +[#35016]: https://github.com/home-assistant/core/pull/35016 +[#35018]: https://github.com/home-assistant/core/pull/35018 +[#35021]: https://github.com/home-assistant/core/pull/35021 +[#35023]: https://github.com/home-assistant/core/pull/35023 +[#35035]: https://github.com/home-assistant/core/pull/35035 +[#35043]: https://github.com/home-assistant/core/pull/35043 +[#35048]: https://github.com/home-assistant/core/pull/35048 +[#35054]: https://github.com/home-assistant/core/pull/35054 +[#35056]: https://github.com/home-assistant/core/pull/35056 +[#35058]: https://github.com/home-assistant/core/pull/35058 +[#35070]: https://github.com/home-assistant/core/pull/35070 +[#35073]: https://github.com/home-assistant/core/pull/35073 +[#35076]: https://github.com/home-assistant/core/pull/35076 +[#35078]: https://github.com/home-assistant/core/pull/35078 +[#35084]: https://github.com/home-assistant/core/pull/35084 +[#35087]: https://github.com/home-assistant/core/pull/35087 +[#35088]: https://github.com/home-assistant/core/pull/35088 +[#35089]: https://github.com/home-assistant/core/pull/35089 +[#35090]: https://github.com/home-assistant/core/pull/35090 +[#35091]: https://github.com/home-assistant/core/pull/35091 +[#35093]: https://github.com/home-assistant/core/pull/35093 +[#35095]: https://github.com/home-assistant/core/pull/35095 +[#35096]: https://github.com/home-assistant/core/pull/35096 +[#35097]: https://github.com/home-assistant/core/pull/35097 +[#35100]: https://github.com/home-assistant/core/pull/35100 +[#35103]: https://github.com/home-assistant/core/pull/35103 +[#35104]: https://github.com/home-assistant/core/pull/35104 +[#35106]: https://github.com/home-assistant/core/pull/35106 +[#35107]: https://github.com/home-assistant/core/pull/35107 +[#35109]: https://github.com/home-assistant/core/pull/35109 +[#35111]: https://github.com/home-assistant/core/pull/35111 +[#35112]: https://github.com/home-assistant/core/pull/35112 +[#35114]: https://github.com/home-assistant/core/pull/35114 +[#35115]: https://github.com/home-assistant/core/pull/35115 +[#35123]: https://github.com/home-assistant/core/pull/35123 +[#35127]: https://github.com/home-assistant/core/pull/35127 +[#35135]: https://github.com/home-assistant/core/pull/35135 +[#35136]: https://github.com/home-assistant/core/pull/35136 +[#35139]: https://github.com/home-assistant/core/pull/35139 +[#35141]: https://github.com/home-assistant/core/pull/35141 +[#35147]: https://github.com/home-assistant/core/pull/35147 +[#35148]: https://github.com/home-assistant/core/pull/35148 +[#35149]: https://github.com/home-assistant/core/pull/35149 +[#35150]: https://github.com/home-assistant/core/pull/35150 +[#35152]: https://github.com/home-assistant/core/pull/35152 +[#35153]: https://github.com/home-assistant/core/pull/35153 +[#35154]: https://github.com/home-assistant/core/pull/35154 +[#35159]: https://github.com/home-assistant/core/pull/35159 +[#35161]: https://github.com/home-assistant/core/pull/35161 +[#35172]: https://github.com/home-assistant/core/pull/35172 +[#35174]: https://github.com/home-assistant/core/pull/35174 +[#35176]: https://github.com/home-assistant/core/pull/35176 +[#35183]: https://github.com/home-assistant/core/pull/35183 +[#35191]: https://github.com/home-assistant/core/pull/35191 +[#35193]: https://github.com/home-assistant/core/pull/35193 +[#35201]: https://github.com/home-assistant/core/pull/35201 +[#35203]: https://github.com/home-assistant/core/pull/35203 +[#35207]: https://github.com/home-assistant/core/pull/35207 +[#35212]: https://github.com/home-assistant/core/pull/35212 +[#35217]: https://github.com/home-assistant/core/pull/35217 +[#35218]: https://github.com/home-assistant/core/pull/35218 +[#35222]: https://github.com/home-assistant/core/pull/35222 +[#35224]: https://github.com/home-assistant/core/pull/35224 +[#35225]: https://github.com/home-assistant/core/pull/35225 +[#35238]: https://github.com/home-assistant/core/pull/35238 +[#35242]: https://github.com/home-assistant/core/pull/35242 +[#35248]: https://github.com/home-assistant/core/pull/35248 +[#35253]: https://github.com/home-assistant/core/pull/35253 +[#35260]: https://github.com/home-assistant/core/pull/35260 +[#35267]: https://github.com/home-assistant/core/pull/35267 +[#35269]: https://github.com/home-assistant/core/pull/35269 +[#35271]: https://github.com/home-assistant/core/pull/35271 +[#35272]: https://github.com/home-assistant/core/pull/35272 +[#35273]: https://github.com/home-assistant/core/pull/35273 +[#35276]: https://github.com/home-assistant/core/pull/35276 +[#35277]: https://github.com/home-assistant/core/pull/35277 +[#35281]: https://github.com/home-assistant/core/pull/35281 +[#35282]: https://github.com/home-assistant/core/pull/35282 +[#35291]: https://github.com/home-assistant/core/pull/35291 +[#35298]: https://github.com/home-assistant/core/pull/35298 +[#35299]: https://github.com/home-assistant/core/pull/35299 +[#35303]: https://github.com/home-assistant/core/pull/35303 +[#35306]: https://github.com/home-assistant/core/pull/35306 +[#35314]: https://github.com/home-assistant/core/pull/35314 +[#35318]: https://github.com/home-assistant/core/pull/35318 +[#35337]: https://github.com/home-assistant/core/pull/35337 +[#35338]: https://github.com/home-assistant/core/pull/35338 +[#35347]: https://github.com/home-assistant/core/pull/35347 +[#35349]: https://github.com/home-assistant/core/pull/35349 +[#35351]: https://github.com/home-assistant/core/pull/35351 +[#35353]: https://github.com/home-assistant/core/pull/35353 +[#35356]: https://github.com/home-assistant/core/pull/35356 +[#35357]: https://github.com/home-assistant/core/pull/35357 +[#35361]: https://github.com/home-assistant/core/pull/35361 +[#35362]: https://github.com/home-assistant/core/pull/35362 +[#35369]: https://github.com/home-assistant/core/pull/35369 +[#35374]: https://github.com/home-assistant/core/pull/35374 +[#35375]: https://github.com/home-assistant/core/pull/35375 +[#35376]: https://github.com/home-assistant/core/pull/35376 +[#35379]: https://github.com/home-assistant/core/pull/35379 +[#35381]: https://github.com/home-assistant/core/pull/35381 +[#35382]: https://github.com/home-assistant/core/pull/35382 +[#35384]: https://github.com/home-assistant/core/pull/35384 +[#35389]: https://github.com/home-assistant/core/pull/35389 +[#35390]: https://github.com/home-assistant/core/pull/35390 +[#35391]: https://github.com/home-assistant/core/pull/35391 +[#35393]: https://github.com/home-assistant/core/pull/35393 +[#35395]: https://github.com/home-assistant/core/pull/35395 +[#35396]: https://github.com/home-assistant/core/pull/35396 +[#35397]: https://github.com/home-assistant/core/pull/35397 +[#35398]: https://github.com/home-assistant/core/pull/35398 +[#35399]: https://github.com/home-assistant/core/pull/35399 +[#35400]: https://github.com/home-assistant/core/pull/35400 +[#35401]: https://github.com/home-assistant/core/pull/35401 +[#35404]: https://github.com/home-assistant/core/pull/35404 +[#35406]: https://github.com/home-assistant/core/pull/35406 +[#35409]: https://github.com/home-assistant/core/pull/35409 +[#35410]: https://github.com/home-assistant/core/pull/35410 +[#35413]: https://github.com/home-assistant/core/pull/35413 +[#35419]: https://github.com/home-assistant/core/pull/35419 +[#35420]: https://github.com/home-assistant/core/pull/35420 +[#35422]: https://github.com/home-assistant/core/pull/35422 +[#35427]: https://github.com/home-assistant/core/pull/35427 +[#35428]: https://github.com/home-assistant/core/pull/35428 +[#35429]: https://github.com/home-assistant/core/pull/35429 +[#35430]: https://github.com/home-assistant/core/pull/35430 +[#35431]: https://github.com/home-assistant/core/pull/35431 +[#35432]: https://github.com/home-assistant/core/pull/35432 +[#35433]: https://github.com/home-assistant/core/pull/35433 +[#35435]: https://github.com/home-assistant/core/pull/35435 +[#35436]: https://github.com/home-assistant/core/pull/35436 +[#35438]: https://github.com/home-assistant/core/pull/35438 +[#35440]: https://github.com/home-assistant/core/pull/35440 +[#35442]: https://github.com/home-assistant/core/pull/35442 +[#35443]: https://github.com/home-assistant/core/pull/35443 +[#35444]: https://github.com/home-assistant/core/pull/35444 +[#35453]: https://github.com/home-assistant/core/pull/35453 +[#35462]: https://github.com/home-assistant/core/pull/35462 +[#35463]: https://github.com/home-assistant/core/pull/35463 +[#35465]: https://github.com/home-assistant/core/pull/35465 +[#35466]: https://github.com/home-assistant/core/pull/35466 +[#35467]: https://github.com/home-assistant/core/pull/35467 +[#35471]: https://github.com/home-assistant/core/pull/35471 +[#35473]: https://github.com/home-assistant/core/pull/35473 +[#35474]: https://github.com/home-assistant/core/pull/35474 +[#35476]: https://github.com/home-assistant/core/pull/35476 +[#35477]: https://github.com/home-assistant/core/pull/35477 +[#35482]: https://github.com/home-assistant/core/pull/35482 +[#35483]: https://github.com/home-assistant/core/pull/35483 +[#35484]: https://github.com/home-assistant/core/pull/35484 +[#35485]: https://github.com/home-assistant/core/pull/35485 +[#35487]: https://github.com/home-assistant/core/pull/35487 +[#35494]: https://github.com/home-assistant/core/pull/35494 +[#35495]: https://github.com/home-assistant/core/pull/35495 +[#35496]: https://github.com/home-assistant/core/pull/35496 +[#35497]: https://github.com/home-assistant/core/pull/35497 +[#35501]: https://github.com/home-assistant/core/pull/35501 +[#35502]: https://github.com/home-assistant/core/pull/35502 +[#35504]: https://github.com/home-assistant/core/pull/35504 +[#35505]: https://github.com/home-assistant/core/pull/35505 +[#35506]: https://github.com/home-assistant/core/pull/35506 +[#35510]: https://github.com/home-assistant/core/pull/35510 +[#35513]: https://github.com/home-assistant/core/pull/35513 +[#35514]: https://github.com/home-assistant/core/pull/35514 +[#35517]: https://github.com/home-assistant/core/pull/35517 +[#35518]: https://github.com/home-assistant/core/pull/35518 +[#35519]: https://github.com/home-assistant/core/pull/35519 +[#35520]: https://github.com/home-assistant/core/pull/35520 +[#35521]: https://github.com/home-assistant/core/pull/35521 +[#35523]: https://github.com/home-assistant/core/pull/35523 +[#35526]: https://github.com/home-assistant/core/pull/35526 +[#35529]: https://github.com/home-assistant/core/pull/35529 +[#35533]: https://github.com/home-assistant/core/pull/35533 +[#35537]: https://github.com/home-assistant/core/pull/35537 +[#35541]: https://github.com/home-assistant/core/pull/35541 +[#35544]: https://github.com/home-assistant/core/pull/35544 +[#35545]: https://github.com/home-assistant/core/pull/35545 +[#35546]: https://github.com/home-assistant/core/pull/35546 +[#35548]: https://github.com/home-assistant/core/pull/35548 +[#35549]: https://github.com/home-assistant/core/pull/35549 +[#35551]: https://github.com/home-assistant/core/pull/35551 +[#35553]: https://github.com/home-assistant/core/pull/35553 +[#35555]: https://github.com/home-assistant/core/pull/35555 +[#35556]: https://github.com/home-assistant/core/pull/35556 +[#35558]: https://github.com/home-assistant/core/pull/35558 +[#35560]: https://github.com/home-assistant/core/pull/35560 +[#35563]: https://github.com/home-assistant/core/pull/35563 +[#35568]: https://github.com/home-assistant/core/pull/35568 +[#35574]: https://github.com/home-assistant/core/pull/35574 +[#35579]: https://github.com/home-assistant/core/pull/35579 +[#35584]: https://github.com/home-assistant/core/pull/35584 +[#35596]: https://github.com/home-assistant/core/pull/35596 +[#35598]: https://github.com/home-assistant/core/pull/35598 +[#35599]: https://github.com/home-assistant/core/pull/35599 +[#35603]: https://github.com/home-assistant/core/pull/35603 +[#35609]: https://github.com/home-assistant/core/pull/35609 +[#35615]: https://github.com/home-assistant/core/pull/35615 +[#35617]: https://github.com/home-assistant/core/pull/35617 +[#35618]: https://github.com/home-assistant/core/pull/35618 +[#35622]: https://github.com/home-assistant/core/pull/35622 +[#35627]: https://github.com/home-assistant/core/pull/35627 +[#35630]: https://github.com/home-assistant/core/pull/35630 +[#35631]: https://github.com/home-assistant/core/pull/35631 +[#35632]: https://github.com/home-assistant/core/pull/35632 +[#35640]: https://github.com/home-assistant/core/pull/35640 +[#35644]: https://github.com/home-assistant/core/pull/35644 +[#35650]: https://github.com/home-assistant/core/pull/35650 +[#35653]: https://github.com/home-assistant/core/pull/35653 +[#35660]: https://github.com/home-assistant/core/pull/35660 +[#35667]: https://github.com/home-assistant/core/pull/35667 +[#35677]: https://github.com/home-assistant/core/pull/35677 +[#35692]: https://github.com/home-assistant/core/pull/35692 +[#35706]: https://github.com/home-assistant/core/pull/35706 +[#35709]: https://github.com/home-assistant/core/pull/35709 +[#35729]: https://github.com/home-assistant/core/pull/35729 +[#35741]: https://github.com/home-assistant/core/pull/35741 +[#35748]: https://github.com/home-assistant/core/pull/35748 +[#35758]: https://github.com/home-assistant/core/pull/35758 +[#35767]: https://github.com/home-assistant/core/pull/35767 +[#35772]: https://github.com/home-assistant/core/pull/35772 +[#35776]: https://github.com/home-assistant/core/pull/35776 +[#35785]: https://github.com/home-assistant/core/pull/35785 +[#35792]: https://github.com/home-assistant/core/pull/35792 +[#35793]: https://github.com/home-assistant/core/pull/35793 +[#35796]: https://github.com/home-assistant/core/pull/35796 +[#35797]: https://github.com/home-assistant/core/pull/35797 +[#35813]: https://github.com/home-assistant/core/pull/35813 +[#35819]: https://github.com/home-assistant/core/pull/35819 +[@2Fake]: https://github.com/2Fake +[@314eter]: https://github.com/314eter +[@Adminiuga]: https://github.com/Adminiuga +[@BKPepe]: https://github.com/BKPepe +[@Danielhiversen]: https://github.com/Danielhiversen +[@DavidMStraub]: https://github.com/DavidMStraub +[@Eerovil]: https://github.com/Eerovil +[@Geronimo2015]: https://github.com/Geronimo2015 +[@Imbuzi]: https://github.com/Imbuzi +[@Kane610]: https://github.com/Kane610 +[@LordMike]: https://github.com/LordMike +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MatsNl]: https://github.com/MatsNl +[@MatthewFlamm]: https://github.com/MatthewFlamm +[@Mich-b]: https://github.com/Mich-b +[@OnFreund]: https://github.com/OnFreund +[@Quentame]: https://github.com/Quentame +[@StevenLooman]: https://github.com/StevenLooman +[@Tho85]: https://github.com/Tho85 +[@TomerFi]: https://github.com/TomerFi +[@YarmoM]: https://github.com/YarmoM +[@ZephireNZ]: https://github.com/ZephireNZ +[@alxrdn]: https://github.com/alxrdn +[@amelchio]: https://github.com/amelchio +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bbernhard]: https://github.com/bbernhard +[@bdraco]: https://github.com/bdraco +[@benleb]: https://github.com/benleb +[@bieniu]: https://github.com/bieniu +[@bouwew]: https://github.com/bouwew +[@bradkeifer]: https://github.com/bradkeifer +[@bramkragten]: https://github.com/bramkragten +[@breiti]: https://github.com/breiti +[@brendongo]: https://github.com/brendongo +[@brg468]: https://github.com/brg468 +[@bryantlee]: https://github.com/bryantlee +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@chrisaljoudi]: https://github.com/chrisaljoudi +[@clssn]: https://github.com/clssn +[@ctalkington]: https://github.com/ctalkington +[@danielperna84]: https://github.com/danielperna84 +[@danjenkins]: https://github.com/danjenkins +[@davidjb]: https://github.com/davidjb +[@dcnielsen90]: https://github.com/dcnielsen90 +[@dmulcahey]: https://github.com/dmulcahey +[@elupus]: https://github.com/elupus +[@emlove]: https://github.com/emlove +[@emontnemery]: https://github.com/emontnemery +[@fabaff]: https://github.com/fabaff +[@farmio]: https://github.com/farmio +[@felipediel]: https://github.com/felipediel +[@flowolf]: https://github.com/flowolf +[@fredericvl]: https://github.com/fredericvl +[@fredrike]: https://github.com/fredrike +[@frenck]: https://github.com/frenck +[@fronzbot]: https://github.com/fronzbot +[@gadgetmobile]: https://github.com/gadgetmobile +[@gladhorn]: https://github.com/gladhorn +[@gtdiehl]: https://github.com/gtdiehl +[@guiguid]: https://github.com/guiguid +[@guillempages]: https://github.com/guillempages +[@gwww]: https://github.com/gwww +[@h4de5]: https://github.com/h4de5 +[@hunterjm]: https://github.com/hunterjm +[@isk0001y]: https://github.com/isk0001y +[@ispysoftware]: https://github.com/ispysoftware +[@jesserockz]: https://github.com/jesserockz +[@jjlawren]: https://github.com/jjlawren +[@joogps]: https://github.com/joogps +[@jrester]: https://github.com/jrester +[@jtommi]: https://github.com/jtommi +[@kifeo]: https://github.com/kifeo +[@liudger]: https://github.com/liudger +[@mampfes]: https://github.com/mampfes +[@marcelveldt]: https://github.com/marcelveldt +[@merdok]: https://github.com/merdok +[@mhorst314]: https://github.com/mhorst314 +[@mlemainque]: https://github.com/mlemainque +[@mtdcr]: https://github.com/mtdcr +[@ochlocracy]: https://github.com/ochlocracy +[@ollo69]: https://github.com/ollo69 +[@pdcemulator]: https://github.com/pdcemulator +[@pnbruckner]: https://github.com/pnbruckner +[@pvizeli]: https://github.com/pvizeli +[@rajlaud]: https://github.com/rajlaud +[@rako77]: https://github.com/rako77 +[@raman325]: https://github.com/raman325 +[@ronaldheft]: https://github.com/ronaldheft +[@rytilahti]: https://github.com/rytilahti +[@scop]: https://github.com/scop +[@shbatm]: https://github.com/shbatm +[@shenxn]: https://github.com/shenxn +[@starkillerOG]: https://github.com/starkillerOG +[@stickpin]: https://github.com/stickpin +[@thecode]: https://github.com/thecode +[@tschamm]: https://github.com/tschamm +[@unixko]: https://github.com/unixko +[@uphillbattle]: https://github.com/uphillbattle +[@uvjustin]: https://github.com/uvjustin +[@vangorra]: https://github.com/vangorra +[@vilppuvuorinen]: https://github.com/vilppuvuorinen +[@xdissent]: https://github.com/xdissent +[@zacpotts]: https://github.com/zacpotts +[@ziv1234]: https://github.com/ziv1234 +[@zsarnett]: https://github.com/zsarnett +[acer_projector docs]: /integrations/acer_projector/ +[adguard docs]: /integrations/adguard/ +[agent_dvr docs]: /integrations/agent_dvr/ +[airly docs]: /integrations/airly/ +[airvisual docs]: /integrations/airvisual/ +[alert docs]: /integrations/alert/ +[alexa docs]: /integrations/alexa/ +[alpha_vantage docs]: /integrations/alpha_vantage/ +[ambiclimate docs]: /integrations/ambiclimate/ +[arcam_fmj docs]: /integrations/arcam_fmj/ +[arest docs]: /integrations/arest/ +[atag docs]: /integrations/atag/ +[august docs]: /integrations/august/ +[automatic docs]: /integrations/automatic/ +[automation docs]: /integrations/automation/ +[axis docs]: /integrations/axis/ +[blebox docs]: /integrations/blebox/ +[blink docs]: /integrations/blink/ +[bluetooth_le_tracker docs]: /integrations/bluetooth_le_tracker/ +[braviatv docs]: /integrations/braviatv/ +[broadlink docs]: /integrations/broadlink/ +[bsblan docs]: /integrations/bsblan/ +[caldav docs]: /integrations/caldav/ +[calendar docs]: /integrations/calendar/ +[cast docs]: /integrations/cast/ +[cert_expiry docs]: /integrations/cert_expiry/ +[cloud docs]: /integrations/cloud/ +[config docs]: /integrations/config/ +[cover docs]: /integrations/cover/ +[daikin docs]: /integrations/daikin/ +[darksky docs]: /integrations/darksky/ +[deconz docs]: /integrations/deconz/ +[default_config docs]: /integrations/default_config/ +[devolo_home_control docs]: /integrations/devolo_home_control/ +[directv docs]: /integrations/directv/ +[discovery docs]: /integrations/discovery/ +[doods docs]: /integrations/doods/ +[dynalite docs]: /integrations/dynalite/ +[edl21 docs]: /integrations/edl21/ +[emulated_hue docs]: /integrations/emulated_hue/ +[enphase_envoy docs]: /integrations/enphase_envoy/ +[esphome docs]: /integrations/esphome/ +[fan docs]: /integrations/fan/ +[flickelectric docs]: /integrations/flick_electric/ +[forked_daapd docs]: /integrations/forked_daapd/ +[fortigate docs]: /integrations/fortigate/ +[frontend docs]: /integrations/frontend/ +[google_assistant docs]: /integrations/google_assistant/ +[hassio docs]: /integrations/hassio/ +[home_connect docs]: /integrations/home_connect/ +[homeassistant docs]: /integrations/homeassistant/ +[homeconnect docs]: /integrations/home_connect/ +[homekit docs]: /integrations/homekit/ +[homekit_controller docs]: /integrations/homekit_controller/ +[homematic docs]: /integrations/homematic/ +[homematicip_cloud docs]: /integrations/homematicip_cloud/ +[http docs]: /integrations/http/ +[huawei_lte docs]: /integrations/huawei_lte/ +[hunterdouglas_powerview docs]: /integrations/hunterdouglas_powerview/ +[imap_email_content docs]: /integrations/imap_email_content/ +[influxdb docs]: /integrations/influxdb/ +[ipp docs]: /integrations/ipp/ +[iqvia docs]: /integrations/iqvia/ +[isy994 docs]: /integrations/isy994/ +[juicenet docs]: /integrations/juicenet/ +[knx docs]: /integrations/knx/ +[kodi docs]: /integrations/kodi/ +[life360 docs]: /integrations/life360/ +[light docs]: /integrations/light/ +[logi_circle docs]: /integrations/logi_circle/ +[lutron_caseta docs]: /integrations/lutron_caseta/ +[manual docs]: /integrations/manual/ +[media_extractor docs]: /integrations/media_extractor/ +[melcloud docs]: /integrations/melcloud/ +[meteo_france docs]: /integrations/meteo_france/ +[microsoft_face docs]: /integrations/microsoft_face/ +[mill docs]: /integrations/mill/ +[modbus docs]: /integrations/modbus/ +[monoprice docs]: /integrations/monoprice/ +[mqtt docs]: /integrations/mqtt/ +[myq docs]: /integrations/myq/ +[mystrom docs]: /integrations/mystrom/ +[nad docs]: /integrations/nad/ +[nederlandse_spoorwegen docs]: /integrations/nederlandse_spoorwegen/ +[netatmo docs]: /integrations/netatmo/ +[notion docs]: /integrations/notion/ +[numato docs]: /integrations/numato/ +[nut docs]: /integrations/nut/ +[nws docs]: /integrations/nws/ +[onvif docs]: /integrations/onvif/ +[opencv docs]: /integrations/opencv/ +[opengarage docs]: /integrations/opengarage/ +[ozw docs]: /integrations/ozw/ +[panasonic_viera docs]: /integrations/panasonic_viera/ +[pi_hole docs]: /integrations/pi_hole/ +[plex docs]: /integrations/plex/ +[plugwise docs]: /integrations/plugwise/ +[point docs]: /integrations/point/ +[powerwall docs]: /integrations/powerwall/ +[proliphix docs]: /integrations/proliphix/ +[proxy docs]: /integrations/proxy/ +[ps4 docs]: /integrations/ps4/ +[pulseaudio_loopback docs]: /integrations/pulseaudio_loopback/ +[pyload docs]: /integrations/pyload/ +[qrcode docs]: /integrations/qrcode/ +[qwikswitch docs]: /integrations/qwikswitch/ +[rachio docs]: /integrations/rachio/ +[rflink docs]: /integrations/rflink/ +[roku docs]: /integrations/roku/ +[roomba docs]: /integrations/roomba/ +[rpi_camera docs]: /integrations/rpi_camera/ +[saj docs]: /integrations/saj/ +[scrape docs]: /integrations/scrape/ +[sense docs]: /integrations/sense/ +[serial docs]: /integrations/serial/ +[seven_segments docs]: /integrations/seven_segments/ +[shell_command docs]: /integrations/shell_command/ +[sighthound docs]: /integrations/sighthound/ +[signal_messenger docs]: /integrations/signal_messenger/ +[simplisafe docs]: /integrations/simplisafe/ +[smartthings docs]: /integrations/smartthings/ +[snmp docs]: /integrations/snmp/ +[songpal docs]: /integrations/songpal/ +[sonos docs]: /integrations/sonos/ +[soundtouch docs]: /integrations/soundtouch/ +[spotify docs]: /integrations/spotify/ +[squeezebox docs]: /integrations/squeezebox/ +[starline docs]: /integrations/starline/ +[stream docs]: /integrations/stream/ +[surepetcare docs]: /integrations/surepetcare/ +[switcher_kis docs]: /integrations/switcher_kis/ +[synology_dsm docs]: /integrations/synology_dsm/ +[tado docs]: /integrations/tado/ +[tensorflow docs]: /integrations/tensorflow/ +[tibber docs]: /integrations/tibber/ +[tplink docs]: /integrations/tplink/ +[tradfri docs]: /integrations/tradfri/ +[trend docs]: /integrations/trend/ +[tuya docs]: /integrations/tuya/ +[unifi docs]: /integrations/unifi/ +[upb docs]: /integrations/upb/ +[updater docs]: /integrations/updater/ +[upnp docs]: /integrations/upnp/ +[uvc docs]: /integrations/uvc/ +[velux docs]: /integrations/velux/ +[vera docs]: /integrations/vera/ +[vilfo docs]: /integrations/vilfo/ +[vizio docs]: /integrations/vizio/ +[webhook docs]: /integrations/webhook/ +[webostv docs]: /integrations/webostv/ +[wiffi docs]: /integrations/wiffi/ +[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_mqtt docs]: /integrations/ozw/ diff --git a/source/images/blog/2020-05-0.110/calendar_panel.png b/source/images/blog/2020-05-0.110/calendar_panel.png new file mode 100644 index 00000000000..3c115c72768 Binary files /dev/null and b/source/images/blog/2020-05-0.110/calendar_panel.png differ diff --git a/source/images/blog/2020-05-0.110/components.png b/source/images/blog/2020-05-0.110/components.png new file mode 100644 index 00000000000..533e7e0f292 Binary files /dev/null and b/source/images/blog/2020-05-0.110/components.png differ diff --git a/source/images/blog/2020-05-0.110/custom_logo.png b/source/images/blog/2020-05-0.110/custom_logo.png new file mode 100644 index 00000000000..5c25b186917 Binary files /dev/null and b/source/images/blog/2020-05-0.110/custom_logo.png differ diff --git a/source/images/blog/2020-05-0.110/homekit.png b/source/images/blog/2020-05-0.110/homekit.png new file mode 100644 index 00000000000..b0b85692eb3 Binary files /dev/null and b/source/images/blog/2020-05-0.110/homekit.png differ diff --git a/source/images/blog/2020-05-0.110/ignore.png b/source/images/blog/2020-05-0.110/ignore.png new file mode 100644 index 00000000000..b9fe80c4512 Binary files /dev/null and b/source/images/blog/2020-05-0.110/ignore.png differ diff --git a/source/images/blog/2020-05-0.110/integrations.png b/source/images/blog/2020-05-0.110/integrations.png new file mode 100644 index 00000000000..42e2acc572a Binary files /dev/null and b/source/images/blog/2020-05-0.110/integrations.png differ diff --git a/source/images/blog/2020-05-0.110/not_condition.png b/source/images/blog/2020-05-0.110/not_condition.png new file mode 100644 index 00000000000..1a899c61fcd Binary files /dev/null and b/source/images/blog/2020-05-0.110/not_condition.png differ diff --git a/source/images/blog/2020-05-0.110/onvif.png b/source/images/blog/2020-05-0.110/onvif.png new file mode 100644 index 00000000000..f979b99d124 Binary files /dev/null and b/source/images/blog/2020-05-0.110/onvif.png differ diff --git a/source/images/blog/2020-05-0.110/social.png b/source/images/blog/2020-05-0.110/social.png new file mode 100644 index 00000000000..96672fa752b Binary files /dev/null and b/source/images/blog/2020-05-0.110/social.png differ diff --git a/source/images/blog/2020-05-0.110/supervisor_panel.png b/source/images/blog/2020-05-0.110/supervisor_panel.png new file mode 100644 index 00000000000..9d09bff4a03 Binary files /dev/null and b/source/images/blog/2020-05-0.110/supervisor_panel.png differ diff --git a/source/images/blog/2020-05-0.110/urls.png b/source/images/blog/2020-05-0.110/urls.png new file mode 100644 index 00000000000..00ec29242c1 Binary files /dev/null and b/source/images/blog/2020-05-0.110/urls.png differ diff --git a/source/images/blog/2020-05-0.110/weather_card.png b/source/images/blog/2020-05-0.110/weather_card.png new file mode 100644 index 00000000000..cc7dbd7545e Binary files /dev/null and b/source/images/blog/2020-05-0.110/weather_card.png differ diff --git a/source/images/lovelace/lovelace_weather.png b/source/images/lovelace/lovelace_weather.png index 5a69fb7a2da..1f4976a10c3 100644 Binary files a/source/images/lovelace/lovelace_weather.png and b/source/images/lovelace/lovelace_weather.png differ diff --git a/source/images/screenshots/agent_dvr.jpg b/source/images/screenshots/agent_dvr.jpg new file mode 100644 index 00000000000..5603681952f Binary files /dev/null and b/source/images/screenshots/agent_dvr.jpg differ diff --git a/source/images/supported_brands/bsblan.png b/source/images/supported_brands/bsblan.png new file mode 100644 index 00000000000..896455dc7ad Binary files /dev/null and b/source/images/supported_brands/bsblan.png differ diff --git a/source/images/supported_brands/homeconnect.png b/source/images/supported_brands/homeconnect.png new file mode 100644 index 00000000000..7f744b03ef1 Binary files /dev/null and b/source/images/supported_brands/homeconnect.png differ diff --git a/source/images/supported_brands/numato.png b/source/images/supported_brands/numato.png new file mode 100644 index 00000000000..835c262be3e Binary files /dev/null and b/source/images/supported_brands/numato.png differ diff --git a/source/images/supported_brands/wiffi.png b/source/images/supported_brands/wiffi.png new file mode 100644 index 00000000000..c96f270bc2d Binary files /dev/null and b/source/images/supported_brands/wiffi.png differ