From be07f74a3f496814bd8b4b413e9eff7ceb857db2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=BCndler?= Date: Sat, 13 Jul 2019 15:04:03 +0200 Subject: [PATCH 001/156] Remove monitored conditions from syncthru (#9825) --- source/_components/syncthru.markdown | 54 ++++------------------------ 1 file changed, 7 insertions(+), 47 deletions(-) diff --git a/source/_components/syncthru.markdown b/source/_components/syncthru.markdown index d4cdfa9b77c..27da5170cba 100644 --- a/source/_components/syncthru.markdown +++ b/source/_components/syncthru.markdown @@ -23,9 +23,6 @@ sensor: - platform: syncthru resource: http://my-printer.address name: My Awesome Printer - monitored_conditions: - - toner_black - - output_tray_0 ``` {% configuration %} @@ -39,48 +36,11 @@ sensor: required: false default: Samsung Printer type: string - monitored_conditions: - description: Conditions to display in the frontend. - required: false - default: all values - type: list - keys: - toner_black: - description: Black toner fill level - toner_cyan: - description: Cyan toner fill level - toner_magenta: - description: Magenta toner fill level - toner_yellow: - description: Yellow toner fill level - drum_black: - description: Black drum state - drum_cyan: - description: Cyan drum state - drum_magenta: - description: Magenta drum state - drum_yellow: - description: Yellow drum state - tray_1: - description: First paper input tray state - tray_2: - description: Second paper input tray state - tray_3: - description: Third paper input tray state - tray_4: - description: Fourth paper input tray state - tray_5: - description: Fifth paper input tray state - output_tray_0: - description: First paper output tray state - output_tray_1: - description: Second paper output tray state - output_tray_2: - description: Third paper output tray state - output_tray_3: - description: Fourth paper output tray state - output_tray_4: - description: Fifth paper output tray state - output_tray_5: - description: Sixth paper output tray state {% endconfiguration %} + +The following information is displayed in separate sensors, if it is available: + + - Black, cyan, magenta and yellow toner fill level + - Black, cyan, magenta and yellow drum state + - First to fifth paper input tray state + - First to sixth paper output tray state From 47c6f9561b95805d8abc8b33b81fe56b07b0a164 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Sat, 13 Jul 2019 07:10:30 -0600 Subject: [PATCH 002/156] Add Apache Kafka docs (#9836) * Add Apache Kafka docs * :penil2: Cleaned up front matter --- source/_components/apache_kafka.markdown | 60 ++++++++++++++++++ .../images/supported_brands/apache_kafka.png | Bin 0 -> 8153 bytes 2 files changed, 60 insertions(+) create mode 100644 source/_components/apache_kafka.markdown create mode 100644 source/images/supported_brands/apache_kafka.png diff --git a/source/_components/apache_kafka.markdown b/source/_components/apache_kafka.markdown new file mode 100644 index 00000000000..7169c51bd3e --- /dev/null +++ b/source/_components/apache_kafka.markdown @@ -0,0 +1,60 @@ +--- +title: "Apache Kafka" +description: "Send data and events to Apache Kafka." +logo: apache_kafka.png +ha_category: + - History +ha_release: 0.97 +--- + +The `apache_kafka` integration sends all state changes to a +[Apache Kafka](https://kafka.apache.org/) topic. + +Apache Kafka is a real-time data pipeline that can read and write streams of data. It +stores its data safely in a distributed, replicated, fault-tolerant cluster. + +To use the `apache_kafka` integration in your installation, add the following to your +`configuration.yaml` file: + +```yaml +apache_kafka: + ip_address: localhost + port: 9092 + topic: home_assistant_1 +``` + +{% configuration %} +host: + description: The IP address or hostname of an Apache Kafka cluster. + required: true + type: string +port: + description: The port to use. + required: true + type: integer +topic: + description: The Kafka topic to send data to. + required: true + type: string +filter: + description: Filters for entities to be included/excluded. + required: false + type: map + keys: + include_domains: + description: Domains to be included. + required: false + type: list + include_entities: + description: Entities to be included. + required: false + type: list + exclude_domains: + description: Domains to be excluded. + required: false + type: list + exclude_entities: + description: Entities to be excluded. + required: false + type: list +{% endconfiguration %} diff --git a/source/images/supported_brands/apache_kafka.png b/source/images/supported_brands/apache_kafka.png new file mode 100644 index 0000000000000000000000000000000000000000..6e22be0279c1615be35e363f555a6fc648b6275c GIT binary patch literal 8153 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 Ys<3&>3Ty$i8UneiX>g}Z-TvwS0JO? Date: Sat, 13 Jul 2019 15:12:46 +0200 Subject: [PATCH 003/156] Added config for multiple accounts - N26 (#9577) * Added config for multiple accounts * :pencil2: Tweak --- source/_components/n26.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/n26.markdown b/source/_components/n26.markdown index 264cf0c8d3c..4842c2529c2 100644 --- a/source/_components/n26.markdown +++ b/source/_components/n26.markdown @@ -25,6 +25,17 @@ n26: password: YOUR_PASSWORD ``` +It is possible to add more than one account: + +```yaml +# Example configuration.yaml entry +n26: + - username: YOUR_EMAIL1 + password: YOUR_PASSWORD1 + - username: YOUR_EMAIL2 + password: YOUR_PASSWORD2 +``` + {% configuration %} username: description: The account username. From 6c0dd968cd040e1c02cf8da3e5a957ed0e177873 Mon Sep 17 00:00:00 2001 From: Alex S Date: Sat, 13 Jul 2019 06:23:04 -0700 Subject: [PATCH 004/156] Add documentation for Splunk Component entity filter support (#9831) * Adding documentation for Splunk Component entity filter support. * Applying recommended cleanup suggestion Co-Authored-By: Klaas Schoute * :pencil2: Tweaks --- source/_components/splunk.markdown | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/source/_components/splunk.markdown b/source/_components/splunk.markdown index ddb057ee181..9aa909d2f16 100644 --- a/source/_components/splunk.markdown +++ b/source/_components/splunk.markdown @@ -3,7 +3,7 @@ title: "Splunk" description: "Record events in Splunk." logo: splunk.png ha_category: - - "History" + - History ha_release: 0.13 --- @@ -49,4 +49,25 @@ name: required: false default: HASS type: string +filter: + description: Filters for entities to be included/excluded from Splunk. Default is to include all entities. + required: false + type: map + keys: + include_domains: + description: Domains to be included. + required: false + type: list + include_entities: + description: Entities to be included. + required: false + type: list + exclude_domains: + description: Domains to be excluded. + required: false + type: list + exclude_entities: + description: Entities to be excluded. + required: false + type: list {% endconfiguration %} From 8c09033c14ba03beceb55e4de17262491e5d0599 Mon Sep 17 00:00:00 2001 From: Markus Jankowski Date: Sat, 13 Jul 2019 15:36:16 +0200 Subject: [PATCH 005/156] Add climate services to Homematic IP Cloud (#9832) * Add climate services * :pencil2: Tweak --- source/_components/homematicip_cloud.markdown | 69 ++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/source/_components/homematicip_cloud.markdown b/source/_components/homematicip_cloud.markdown index 6d817784386..93b3c972e07 100644 --- a/source/_components/homematicip_cloud.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -144,7 +144,74 @@ authtoken: * Weather Sensor – plus (*HmIP-SWO-PL*) * Weather Sensor – pro (*HmIP-SWO-PR*) -Additional info: +## Services + +- `homematicip_cloud.activate_eco_mode_with_duration`: Activate eco mode with duration. +- `homematicip_cloud.activate_eco_mode_with_period`: Activate eco mode with period. +- `homematicip_cloud.activate_vacation`: Activates the vacation mode until the given time. +- `homematicip_cloud.deactivate_eco_mode`: Deactivates the eco mode immediately. +- `homematicip_cloud.deactivate_vacation`: Deactivates the vacation mode immediately. + +### Service Examples + +`accesspoint_id` (SGTIN) is optional for all services and only relevant if you have multiple Homematic IP Accesspoints connected to HA. If empty, service will be called for all configured Homematic IP Access Points. +The `accesspoint_id` (SGTIN) can be found on top of the integration page, or on the back of your Homematic IP Accesspoint. + +Activate eco mode with duration. + +```yaml +... +action: + service: homematicip_cloud.activate_eco_mode_with_duration + data: + duration: 60 + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +Activate eco mode with period. + +```yaml +... +action: + service: homematicip_cloud.activate_eco_mode_with_period + data: + endtime: 2019-09-17 18:00 + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +Activates the vacation mode until the given time. + +```yaml +... +action: + service: homematicip_cloud.activate_vacation + data: + endtime: 2019-09-17 18:00 + temperature: 18.5 + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +Deactivates the eco mode immediately. + +```yaml +... +action: + service: homematicip_cloud.deactivate_eco_mode + data: + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +Deactivates the vacation mode immediately. + +```yaml +... +action: + service: homematicip_cloud.deactivate_vacation_mode + data: + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +``` + +## Additional info Push button devices are only available with a battery sensor. This is due to a limitation of the vendor API (eq3). It's not possible to detect a key press event on these devices at the moment. From 9e11620ed5e45bdd889185347c09b33b5eeef8d2 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 14 Jul 2019 12:41:53 +0200 Subject: [PATCH 006/156] Add Twente Milieu integration (#9851) * Add Twente Milieu integration * Update source/_components/twentemilieu.markdown Co-Authored-By: Martin Hjelmare * Update source/_components/twentemilieu.markdown Co-Authored-By: Martin Hjelmare --- source/_components/twentemilieu.markdown | 44 ++++++++++++++++++ .../images/supported_brands/twentemilieu.png | Bin 0 -> 22403 bytes 2 files changed, 44 insertions(+) create mode 100644 source/_components/twentemilieu.markdown create mode 100644 source/images/supported_brands/twentemilieu.png diff --git a/source/_components/twentemilieu.markdown b/source/_components/twentemilieu.markdown new file mode 100644 index 00000000000..df54c4ab44f --- /dev/null +++ b/source/_components/twentemilieu.markdown @@ -0,0 +1,44 @@ +--- +title: "Twente Milieu" +description: "Instructions on how to integrate Twente Milieu with Home Assistant." +logo: twentemilieu.png +ha_category: + - Sensor + - Environment +ha_release: 0.97 +ha_iot_class: Cloud Polling +ha_config_flow: true +--- + +The Twente Milieu integration allows you to track the next scheduled waste +pickups by Twente Milieu for each of the different waste types. + +## Configuration via the frontend + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and click on **Twente Milieu**. +Follow the configuration flow, after finishing, the Twente Milieu +integration will be available. + +## Sensors + +This integration provides sensors for the following waste pickup dates from Twente Milieu: + +- Next plastic waste pickup date. +- Next organic waste pickup date. +- Next paper waste pickup date. +- Next non-recyclable waste pickup date. + +## Services + +The Twente Milieu integration exposes a service that allows you to manually update +the pickup date from Twente Milieu. + +### Service `update` + +Update pickup dates from Twente Milieu + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------------ | +| `id` | Yes | The unique address ID to update. | diff --git a/source/images/supported_brands/twentemilieu.png b/source/images/supported_brands/twentemilieu.png new file mode 100644 index 0000000000000000000000000000000000000000..2f0124dec3abb7b9d3b63b02cb033e1f52cdf82f GIT binary patch literal 22403 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 Date: Tue, 16 Jul 2019 08:10:48 +0100 Subject: [PATCH 007/156] Added Hive Water Heater (#9856) * Added Hive Water Heater * Updated Climate * Merged into one hive.markdown * removed _ * Capitalised * :pencil2: Tweak --- source/_components/hive.markdown | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/_components/hive.markdown b/source/_components/hive.markdown index ac475fd8bd1..f1532ff16f5 100644 --- a/source/_components/hive.markdown +++ b/source/_components/hive.markdown @@ -25,11 +25,12 @@ This integration uses the unofficial API used in the official Hive website [http There is currently support for the following device types within Home Assistant: -- [Binary Sensor](#binary-sensor) -- [Climate](#climate) -- [Light](#light) -- [Sensor](#sensor) -- [Switch](#switch) +- [Binary Sensor](#Binary-Sensor) +- [Climate](#Climate) +- [Light](#Light) +- [Sensor](#Sensor) +- [Switch](#Switch) +- [Water Heater](#Water-Heater) To add your Hive devices into your Home Assistant installation, add the following to your `configuration.yaml` file: @@ -102,3 +103,11 @@ The `hive` switch platform integrates your Hive plugs into Home Assistant, enabl The platform supports the following Hive products: - Hive Active Plug + +## Water Heater + +The `hive` water heater platform integrates your Hive hot water into Home Assistant, enabling control of setting the **mode**. + +The platform supports the following Hive products: + +- Hot Water Control From 1f1e40af483d1210200012fe57dc6329d25dd3c3 Mon Sep 17 00:00:00 2001 From: Austin Drummond Date: Tue, 16 Jul 2019 03:16:49 -0400 Subject: [PATCH 008/156] Add homekit reset accessory (#9860) * add homekit reset accessory * removed linkable title * :pencil2: Tweak --- source/_components/homekit.markdown | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 4717a5c62a6..64ef560e215 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -114,11 +114,11 @@ homekit: type: map keys: name: - description: Name of the entity to show in HomeKit. HomeKit will cache the name on the first run so a device must be removed and then re-added for any change to take effect. + description: Name of the entity to show in HomeKit. HomeKit will cache the name on the first run so the accessory must be [reset](#resetting-accessories) for any change to take effect. required: false type: string linked_battery_sensor: - description: The `entity_id` of a `sensor` entity to use as the battery of the accessory. HomeKit will cache an accessory's feature set on the first run so a device must be removed and then re-added for any change to take effect. + description: The `entity_id` of a `sensor` entity to use as the battery of the accessory. HomeKit will cache an accessory's feature set on the first run so a device must be [reset](#resetting-accessories) for any change to take effect. required: false type: string low_battery_threshold: @@ -141,7 +141,7 @@ homekit: required: true type: string type: - description: Only for `switch` entities. Type of accessory to be created within HomeKit. Valid types are `faucet`, `outlet`, `shower`, `sprinkler`, `switch` and `valve`. HomeKit will cache the type on the first run so a device must be removed and then re-added for any change to take effect. + description: Only for `switch` entities. Type of accessory to be created within HomeKit. Valid types are `faucet`, `outlet`, `shower`, `sprinkler`, `switch` and `valve`. HomeKit will cache the type on the first run so a device must be [reset](#resetting-accessories) for any change to take effect. required: false type: string default: '`switch`' @@ -460,12 +460,20 @@ To fix this, you need to unpair the `Home Assistant Bridge`, delete the `.homeki #### The linked battery sensor isn't recognized -Try removing the entity from HomeKit and then adding it again. If you are adding this config option to an existing entity in HomeKit, any changes you make to this entity's config options won't appear until the accessory is removed from HomeKit and then re-added. +Try removing the entity from HomeKit and then adding it again. If you are adding this config option to an existing entity in HomeKit, any changes you make to this entity's config options won't appear until the accessory is removed from HomeKit and then re-added. See [resetting accessories](#resetting-accessories). #### My media player is not showing up as a television accessory -Media Player entities with `device_class: tv` will show up as Television accessories on devices running iOS 12.2/macOS 10.14.4 or later. If needed, try removing the entity from HomeKit and then adding it again, especially if the `media_player` was previously exposed as a series of switches. Any changes, including changed supported features, made to an existing accessory won't appear until the accessory is removed from HomeKit and then re-added. +Media Player entities with `device_class: tv` will show up as Television accessories on devices running iOS 12.2/macOS 10.14.4 or later. If needed, try removing the entity from HomeKit and then adding it again, especially if the `media_player` was previously exposed as a series of switches. Any changes, including changed supported features, made to an existing accessory won't appear until the accessory is removed from HomeKit and then re-added. See [resetting accessories](#resetting-accessories). #### Can't control volume of your TV media player? 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. + +#### 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 HomeAssistant add supports 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. + +With either strategy, the accessory will behave as if it's the first time the accessory has been set up, so you will need to restore the name, group, room, scene, and/or automation settings. From 75aaa5341cee2e466f2aaca65526c51474f9e1eb Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Tue, 16 Jul 2019 09:19:24 +0200 Subject: [PATCH 009/156] UniFi device tracker part of config entry (#9847) * Change * Additional changes * Declare what host and site are required for * Clarify that old device tracker configuration will still be imported and set up --- source/_components/unifi.markdown | 170 +++++++----------------------- 1 file changed, 39 insertions(+), 131 deletions(-) diff --git a/source/_components/unifi.markdown b/source/_components/unifi.markdown index dbf3bf8684b..07fb8be98f6 100644 --- a/source/_components/unifi.markdown +++ b/source/_components/unifi.markdown @@ -8,6 +8,7 @@ ha_category: - Switch ha_release: 0.81 ha_iot_class: Local Polling +ha_qa_scale: platinum redirect_from: - /components/device_tracker.unifi/ - /components/switch.unifi/ @@ -20,74 +21,38 @@ There is currently support for the following device types within Home Assistant: - [Presence Detection](#presence-detection) - [Switch](#switch) -Currently this implementation only exposes POE control for networked devices. Device tracker implementation is not using the same code base. - ## Configuration -Home Assistant offers UniFi integration through **Configuration** -> **Integrations** -> **UniFi Controller**. +Home Assistant offers UniFi integration through **Configuration** -> **Integrations** -> **UniFi Controller**. For legacy support old device_tracker configurations are imported and set up as new integrations. -Enter `host address`, `user name` and `password` and then continue to select which `site` you want to connect to Home Assistant. The user must have administrator privileges. +Enter `host address`, `user name` and `password` and then continue to select which `site` you want to connect to Home Assistant. The user needs administrator privileges in order to control POE switches. -## Debugging integration +### Extra configuration for device tracker -If you have problems with UniFi or the integration you can add debug prints to the log. - -```yaml -logger: - default: info - logs: - aiounifi: debug -    homeassistant.components.unifi: debug -    homeassistant.components.switch.unifi: debug -``` - -## Presence detection - -This platform allows you to detect presence by looking at devices connected to a [Ubiquiti](http://ubnt.com/) [Unifi](https://www.ubnt.com/enterprise/#unifi) controller. - -To use this device tracker in your installation, add the following to your `configuration.yaml` file: +You can augment the behavior of UniFi device tracker by adding ```yaml # Example configuration.yaml entry -device_tracker: - - platform: unifi - host: unifi - username: username - password: password - ssid_filter: - - 'HomeSSID' - - 'IoTSSID' +unifi: + controllers: + - host: unifi + site: My site + ssid_filter: + - 'HomeSSID' + 'IoTSSID' ``` {% configuration %} -username: - description: A user on the controller - type: string - required: true -password: - description: The password for the account - type: string - required: true host: - description: The hostname or IP address of your controller - default: localhost + description: Same address as relevant config entry, needed to identify config entry type: string - required: false -port: - description: The port of your controller's web interface - default: 8443 - type: integer - required: false -site_id: - description: For multisite installations, you can specify `site_id` to specify which is used + required: true + default: None +site: + description: Same site as relevant config entry, needed to identify config entry type: string - required: false - default: default -verify_ssl: - description: Whether to do strict validation on SSL certificates of the Unifi controller. This can be true/false or the path to a locally trusted certificate to use for verification (i.e. "/path/to/custom_cert.pm") - type: boolean or filename - required: false - default: true + required: true + default: None detection_time: description: How long since the last seen time before the device is marked away, specified in seconds. type: integer @@ -98,103 +63,46 @@ ssid_filter: type: list of strings required: false default: None -monitored_conditions: - description: A list of extra attributes to pull from the Unifi controller. - type: list - required: false - default: None - {% endconfiguration %} -See the [device tracker integration page](/components/device_tracker/) for instructions how to configure the people to be tracked. - ### Configuring Users -The Unifi controller allows you to create multiple users on it besides the main administrator. It is recommended that you create a limited user that has `read-only` permissions for the Unifi device tracker. +The UniFi controller allows you to create multiple users on it besides the main administrator. If all you want to use is the device tracker then it is recommended that you create a limited user that has `read-only` permissions for the Unifi device tracker. If you want POE control as well you would need to have 'admin' permissions. ### Conflicts with MQTT -The Unifi controller can either be a dedicated hardware device (Unifi's cloud key), or as software any Linux system. If you run the Unifi controller on the same operating system as Home Assistant there may be conflicts in ports if you have the MQTT integration as well. +The Unifi controller can either be a dedicated hardware device (UniFi's cloud key), or as software any Linux system. If you run the Unifi controller on the same operating system as Home Assistant there may be conflicts in ports if you have the MQTT integration as well. It is recommended that you run the Unifi controller in a dedicated virtual machine to avoid that situation. -### Correctly specifying the Site ID +## Presence detection -For environments where there are multiple sites setup on the controller, or the default site is not being used you can use the `site_id` parameter to specify which site you would like to target. - -Please note that the value that is to be specificed here is not the name of the site as you would see it in controller interface, but a site ID value assigned from the software itself. - -To obtain this value for your configuration file, you can take it from the URL of your browser when on the controller webpage. - -For example, this is what would be seen in the URL bar when inside the dashboard page of a site: - -`https://127.0.0.1:8443/manage/s/ceb1m27d/dashboard` - -And your `site_id` value would be `ceb1m27d`. +This platform allows you to detect presence by looking at devices connected to a [Ubiquiti](http://ubnt.com/) [UniFi](https://www.ubnt.com/enterprise/#unifi) controller. ### Troubleshooting and Time Synchronization -Presence detection depends on accurate time configuration between Home Assistant and the Unifi controller. +Presence detection depends on accurate time configuration between Home Assistant and the UniFi controller. -If Home Assistant and the Unifi controller are running on separate machines or VMs ensure that all clocks are synchronized. Failing to have synchronized clocks will lead to Home Assistant failing to mark a device as home. +If Home Assistant and the UniFi controller are running on separate machines or VMs ensure that all clocks are synchronized. Failing to have synchronized clocks will lead to Home Assistant failing to mark a device as home. [Related Issue](https://github.com/home-assistant/home-assistant/issues/10507) -### Monitored Conditions - -The Unifi controller returns a number of additional attributes that can be used for tracking devices, including signal strength, rx/tx rates, and which AP it is connected to. The list of possible options may vary depending on your Unifi controller version and if a device is wired or wireless. - -Unifi Controller version 5.6.29 has the following options: - -- _id -- _is_guest_by_uap -- _last_seen_by_uap -- _uptime_by_uap -- ap_mac -- assoc_time -- authorized -- bssid -- bytes-r -- ccq -- channel -- essid -- first_seen -- hostname -- idletime -- ip -- is_11r -- is_guest -- is_wired -- last_seen -- latest_assoc_time -- mac -- name -- noise -- noted -- oui -- powersave_enabled -- qos_policy_applied -- radio -- radio_proto -- rssi -- rx_bytes -- rx_bytes-r -- rx_packets -- rx_rate -- signal -- site_id -- tx_bytes -- tx_bytes-r -- tx_packets -- tx_power -- tx_rate -- uptime -- user_id -- usergroup_id -- vlan - ## Switch Switches are network devices that are powered by POE switches from Ubuiqitis UniFi line of networking gear. Note that POE control actually configures the network port of the switch which the device is connected to. + +## Debugging integration + +If you have problems with UniFi or the integration you can add debug prints to the log. + +```yaml +logger: + default: info + logs: + aiounifi: debug + homeassistant.components.unifi: debug + homeassistant.components.device_tracker.unifi: debug + homeassistant.components.switch.unifi: debug +``` From 39de364172b12022c3eec5681abd4a9a3e491f29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=BCndler?= Date: Tue, 16 Jul 2019 09:19:47 +0200 Subject: [PATCH 010/156] Fronius component documentation (#9283) * Documentation for Fronius sensor component * Update fronius description * Fix templating error * Update doc according to new implementation * Update configuration description * Fixes * Update source/_components/fronius.markdown Co-Authored-By: nielstron * Update source/_components/fronius.markdown Co-Authored-By: nielstron * Remove last line * Simplify example * Escape yaml templates * Remove "token" that cannot start any token according to deploy * Rework description * Fix configuration strings * Fix configuration look * :pencil2: Tweaks * :pencil2: Tweak * Correct documentation * Change fronius ip to fronius url * :pencil2: Tweak * :pencil2: Use `state_attr()` --- source/_components/fronius.markdown | 98 +++++++++++++++++++++ source/images/supported_brands/fronius.png | Bin 0 -> 20670 bytes 2 files changed, 98 insertions(+) create mode 100644 source/_components/fronius.markdown create mode 100644 source/images/supported_brands/fronius.png diff --git a/source/_components/fronius.markdown b/source/_components/fronius.markdown new file mode 100644 index 00000000000..fb23ba7b51c --- /dev/null +++ b/source/_components/fronius.markdown @@ -0,0 +1,98 @@ +--- +title: "Fronius" +description: "Instructions on how to connect your Fronius Inverter to Home Assistant." +ha_category: + - Energy + - Sensor +logo: fronius.png +ha_iot_class: Local Polling +ha_release: 0.96 +--- + +The `fronius` sensor will poll a [Fronius](http://www.fronius.com/) solar inverter, battery system or smart meter and present the values as sensors (or attributes of sensors) in Home Assistant. + +## Configuration + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +sensor: + - platform: fronius + resource: FRONIUS_URL + monitored_conditions: + - sensor_type: inverter +``` + +{% configuration %} +resource: + description: "The IP address of the Fronius device" + required: true + type: string +monitored_conditions: + description: "Conditions to display in the frontend" + required: true + type: list + keys: + type: + description: "The kind of device, can be one of \"inverter\", \"storage\", \"meter\", or \"power_flow\"" + required: true + type: string + scope: + description: "The device type for storage and inverter, can be either \"device\" or \"system\"" + required: false + type: string + default: "device" + device: + description: "The id of the device to poll" + required: false + default: "\"1\" for inverters and \"0\" for other devices such as storages in compliance with Fronius Specs" +{% endconfiguration %} + +## Examples + +When including more of the components that one Fronius device offers, +a list of sensors that are to be integrated can be given like below. + +```yaml +sensor: + - platform: fronius + resource: FRONIUS_IP_ADDRESS + monitored_conditions: + - sensor_type: inverter + device: 1 + - sensor_type: meter + scope: system + - sensor_type: meter + device: 3 + - sensor_type: storage + device: 0 + - sensor_type: power_flow +``` + +## Sensors configuration + +To extract more detailed values from the state of each integrated sensor and to circumvent undefined values, +it is recommended to use template sensors as an interface: + +{% raw %} +```yaml +- platform: template + sensors: + electricity_inverter1_power_netto: + unit_of_measurement: 'W' + value_template: >- + {% if states.sensor.fronius_1921684247_inverter_1.attributes.power_ac is defined -%} + {{ states_attr('sensor.fronius_1921684247_inverter_1', 'power_ac') | float | round(2) }} + {%- else -%} + 0 + {%- endif %} + electricity_autonomy: + unit_of_measurement: '%' + value_template: >- + {% if states.sensor.fronius_1921684247_power_flow.attributes.relative_autonomy is defined -%} + {{ states_attr('sensor.fronius_1921684247_power_flow', 'relative_autonomy') | float | round(2) }} + {%- else -%} + 0 + {%- endif %} +``` +{% endraw %} diff --git a/source/images/supported_brands/fronius.png b/source/images/supported_brands/fronius.png new file mode 100644 index 0000000000000000000000000000000000000000..6b44d1cb351c937098b33c4513c77be81e463f83 GIT binary patch literal 20670 zcmdpd^;?wP_qB*3DJl6N0!nvENr#jS-QC>{Bhnqx-7$3cARyf_bcld-$I$cMe7^t1 z`vb$wb=`5!+2`!N_F8*~D=A82p_8J&c<}=3tBi#5ix)2)fbUnRD8MI*Dqaxq56MMY zTI@yD_^u-G$m9G+_s-F5s zS#MIwV69KBUynNx8C(C>c4+?SS`81Wr1FFAsjAvVq&5$Aj!GYu_LhK zyDl4qBZf-(|K|ri>#Qu}W5#ZVbrH$>w6;YSn8Gm=@nAe%h)9{rUs`ftO=Ei$Sd0LJ zhrzTawTK~9#F3(F@u&RSqrYy~-|8A%sEkjx=N2tKGTmEGsVzoGXEEX>U*wX7chZ5O zanch*6X0o8m33;c#&#~vh!!1q*z1jcY%=t?^rF;eah|qfA*uIx0v2BCm#s5@!?`j* z35V5re4Xv*(dVFSia7YZKJxTF1gvrMRM+)QMj_*xB5=KRPImp20`1u-QEzsA9~Eyh zNRX4K#76E|UH{zRXL-#G&p;y;--Bsv_Gv#cTZE)m9rZDdCU%`*7ko1ROT|v)@>^5) z19)vudmR7VAy$-)?7W_WHvfuQp;6IA>gFU!ZJmau&@ae3lcl*BDj=iKc-5((?zeuv zeL2$linNFgeTU4Ky!Ycgg{#4b72aDt@&NcO#DUx&u{pIMyxs0abD_84^K)W-4;<_A z;T9gbYPo59+iG{#+3q$zcU;)7c4qshb&&Yi;SNd&>xH0KKdZ@&#$7Q26%UvcEZU;~ z;jJ?NhvAj^4~8IZmdMEm3V$gi*y^eI_H`{2OPO}@(g&g|c;!9ypRSOTV@7&Tb zwKDC$rvB$@>MpJnSyMyW2um`lVlQj@ca>-DDs#CSLwH zvbXGifuW^-G4GXro!**bPw*vrU5BO%3jdHVkVd66WkTaH-;Lua#tdQ7BFji^Amw#A z$h2E2b;)%7!DhNMl;g4YmKFaUJ}1vdst~%bz$%vPldwy5l}-*u-VObEG4XHG(!jzz zeV*6ntKGHfDdof?^*PImu;ry`?q4j;!!+VwrfXT0DA@Vkz@+O0C%OxVn_0z;xe?2w3{?g6#}TAGR2{qC*3 z(z>k4gPZ*88T(l%HqAt1W=3`RD{FT)lJ0UI$klbo%HgITokJ z-@5;_f_9v5FSu->U+1{(Bf@ysHbh-^uzy_|M*WMy5$lOwSCR`nvU~ZR1B-t&jm+wy zHhX+Dm2>1N@PUuj9yai%z})+8VDA^{2U5-m^w1EJj&9WVqvZJ>=LjNWtsi8yCu6As zw`q?FZnX-A$CD^*)_^@e8Hb6EMC5Yo%shP~J;HJeBzIFx>c8h_f+QodLs#ASor~u; z45zvr#&P%x_zFtv=4D)H1KC)eQzW*=qq%(F$9@LK=XB0Al1}_?ux+Xx!MyfW83-e% z462~BqN^d)xjZBVjU2hfNDS|W-9nj-Bl+d_a?PscUSrSOT zgW&cnN*^A+ipqLGcySnZP$2gOndOA7c$_T_sf4EUla~cr?xRvBy(VoE{rQiK+isfb zI=1Gm0_lKUVP1zEZ?gKMvb>uoh-;#7Di=h+y(ZRPppexSZp@~wp@Yy`aeiVFb_w0x z3WBw;&cRqXUHN6-h!4n+Q+|B7p|R8AQbW7N zG%Bq5Z2#ftWl*Y5*|u-leBs`nB3Ou2fm9Ooj>c{ug;!y=*_#t}eBQf;w9(t~pxgfQYjt$O}>o-P-i%X-@qjC{LQN~Eo3)+(}T-dEjyS${S zNbfBtOO5PE3#{arJ&s;uy#|xcd6)nI!M@b$XlB|ju6Eqy+V$ukny_e1f)w!Vwr-h zYe`ONna1xatKhw^4gPWXU-e#Z`vxa>D(m(1(nbTKz-!hDn8;?g!Yg1LMKc`YL^kut zyJ7VbQ7g1-zm~q>nmzt?Q=v-ZS#?;q+C`=Jcu3LeT9Bj0`nf7|_<`Me=c~!7kJW$w z^4Na?CaFsb`9aS|7m+WMW~^$Lk#Pn7Eps zURsoPbNScbHbFb+BxRjUtdBqBz28c~fCn&$d;f_>`ke35c>T8scPG&Eck5y_|3F{C zHDRjR&@tJ=@edqjhB^b8s21IkFDR^)9UUhY#Ui!p3i`*clXBlc1d?jW4*_1%*Q({j zt@pLKFU?t=9_bMZ)Y5~WIY%qVkF>`X&a`(rB@}u!*7{$1S&^s}0PmG(6aHn+Da=8O z;Q4kJO{?@nX>{cu3FnRndr+Kl9T%xhBGHiuiI5&)EI;@sk#j(bMzlF#fe6y9NdrUb zpfwmeCsDNDmekQb4yKG`X5#}(D2_6!9Iawy^!%bgyZUC@xw25mIit*J7`M&&xf5w3 za5KkT-C$-`To-GU&UpLuj&7_W(hn5>6baO!*HS`GBVUH27vQ_5El>7JLbArL|9hQ@ zm!Cp~-qYIFcDjrHF9I8mzlRGA=M5)!tM4db82UjH4Nh-5h|hlrvQlTUUeX}b^a2Mb zU+lwPlmg3Y#0~#RgETk1+w7Wb4XP-cl znbVoOR z3!FaEMq1l+Wz`&}Rhg~ldJGKq22P1g_HtMKz{RakUNYo_`L7H?4*GS}PA*s>&{l_X zsK=U`pMy$Z&!eYJmGz=M(ZnB=)o;Lr7%tC?)sBMnHQu|ucVyndd8PiqlA$W#pLi4p zOr6B#WbnP-IUU(nMpJUK7OTWzd{CVJR5(LB<4BxnmxAk}sD3s2o9UlZA$wIYPrynVZs8ENBf{w4suzUIkYgVTrM-zS z8pwL9P;N@Ey>I2$_}|pN`fw{|DFa746-RT*N;hrfq0D^buAKl}8hhm3Pz6gUhU9rG8VwCLUVgD8F_(4?pk96=j zwE4%OBA;l#S6w&wl!aMi`z9xs#-xfqsi%ZcX+#7v~Zx+PgYOS(qgGl zjQ*n_l}j%A`G(5Rd+;?4=H(NyO(~EGJ(#&F9*1PdNA{gos-$=uu3lfa^S{a8NhBmQ zgw2NqE2WPKzIhnpc1s_u2ABNVb&7VtvYYB3$anM#6IA95OGH2>pV;-wqIopPOR|fW zzVUamW%-6!3m7-aK3ZZx%V$$%?(UIPo#MKD`pzmtU{-&{Msa2c!yjSau5hcaZ25x5 z&}7`Y%cgr|x)4YO_5|F?5x-TP$FNj))aFYATFUQInCRu@HX-m-J^ z0t3c#KwM2KJ6TI-9knI>HzDoEOFm=Xz=tVU0}u& z6i=lnZD|9QN^SP7dPQ?faVl&C-0FA*u)4=8$jMmqV{?_r-M!jGL2Q}n=Kg=Spie(7 z{vJvQ?mu90x>q*-1dHJF_8UT%qWQ_%l3l1}&AGI${6q~DTT9L0ek5+3x!@^dSQ|Wm z0W?qS38s(WAjr4>SyCQz@sAERztiOv96&$cR1hYT~_|=5}%mNPuYI% z=wK-`{fVe05ye~%4-dPLvb<=h3@Zd3w%vc>o?P7HwKJ96YrA?YwMu8rq^44xZt)~> z)%g^Hn0u#qQa@3?b$LbXRv`8%^)v7EX{%sLGu7vy5AhB{VQ8sTNn{;4`tyWN$(GIk zoxV=YNVl*pn9lJpp8fTGy@7tZwF*f!)dZ z&tnnYuu@-C8#l8W`Ht@HwigCJp=6Raw_?fLx3ERp8tp(N$1Z1ljTuQxW()ttDjSRh zu81rRgL0ImrHA6NC}>w#KK?_~VNJR9nyn42V=tCbpZ}YxEvfX`{~4g;wh00+vv^1@ zcJwy5DVMEmM=RJ;EiDQZZ@e~UcfzKv==X!kazeL(!%6Dc>$n+b%8Og+5KqRB<61DH zR(8d!wio+_C${bC8d7EBpv24x{!2oV)vZe^%@qgxK*}3IDxi>Au@v)IM7q0sN|xC} zEb~!qr!S>k0;|AY)oT!&aEu7s`K$GGqPNsWGP1o=U9o?H%_7lAbcP0Ks)>nG{8ofv zo7XOQ#_t4~p|RUMJ3KEwj}D?KHf#5@^78zZ%H5i$ob>7Ccg9^!f_Gw+mb0n{T(tS) z1w&!=_{om9>cOUgWPxOfHHQ|Cy$sAt$)NMlgHkB(I!9G;+>>#D^`aB+aYG>;u0tcA~1x#PHE z+uWY+w3Bq*n59)k?SuKsgGk=pJm5Hr8!dJLo z47#$P4(rtDiRe^6R>PBGmRQa9(?7xCMk+AU8~J%V20V+g+c6LCN7-jRS+(5XzpmOF zuX2oB%wUQ0KUAW1u0f7fNl+-W4s-ia`5h7K8MEd_E}^w^^cCQ$o+C9L+DM1e?)!s3 z3}3Pa6VPV5sEPdYbT40ip5NdtF#c4q@P95&5Bi!hDj-=M);5pCz#eWR^9&3ivpsdy zp0i%L##k%QjM7N3K5_H@rej5~gUF|Hvl1ay#E)R$#>_P$edV%7UhUdaGJisq58PMV z<<@O$VpWY5jW6c~wAFt54Hdlel2Vtr=@gyVia_5XzPzswHZjt6OA1FppK4$lr#}5p zL!^bGpw&aPXNLnWyz8L>kw4bL-JYBEXb0^)MQ}PUwMb@RK&D#q;`iH*6uBpjG`~Ze zH5$piGG&*_UsKTPJVhQ>>6R#$SC^#ot|>Q?yQXS4y=aZPj9k>G`s-`+z%hRx$e)zi z)MUNpTx|Wgm*+j@`sW0*pyrp(IA7yGlvV+Y)mHDUp!>&CS%s7ncPWw-@#Vt-hQ{&O z4&7kOAQwG&gpB{2eJA5?A%E~6rxC3TyGmsnJ34d9VqI5#HmttEJem_6l#t5MQFQ+= z(&gg*lqc)%w*snu6%=LH_=;-eE-Y%~z*>FZa@iRNRo*|!uSfpcjQTlA(|lN$qB~-S zw8N*Z2U+?iti$cl__(_kSkd$XvDyK1pZ0&yZKUw)c+%@0DCHV*%k~R^UbAfpTw!MV z8T1i<7E&W^oT!%Fq_JKzl}pOzHAqYD5qq5Ownj%9m`Vs)(eui;|Fi7x6t&;Brw+TH zt%txJSj#U5E>!R8Cq}+e_!erruL#|=72!{!yc5`bDU#(#_rx+x+$s-^~2N-pl`}zE?5(CI;9=H@A=)T!5Al`wD!%WFu-bh9_uAb z<~gMaY*lPdi}O&b9!?Ic2y5Y6Oc;FFrh9f5r z_plW6S-l8xEBWVwkMwH9!fAckoP1OA`;Qppp^K;;;t4@#{e0g!bVgXkvxnzbyjOcN ziEcEM;7!eQ`MZ(%a>9+v+8*S0(ovG$oZ9Mp5pqzOv)}mI*svW8kK6abvRk8tAR<`< z!Qj`Bb%j!B^O}0u6%U$1owwZ|s_V{D0<}35#mf5euJ)<^MQ2b_PA{{}Ii9<|cM+*2 zH>=3{)5whK^sUkOX6}s5nmH}ZYf%jXuLi5^O(3i~>bWs<3&eURDML`^8L7wrkt~xYuwcm}2BN5~ z@An1?izkB`KesOw-q&^8)$${L$1GQp{{j9*DQjN0S~+7_K)Lkn-Db+&6d`11L;BG` z|1+_Cl&3-c>-zdRDagUU<;QOXF)Zz$kYSkvq}btBma97@*14-Sc#;++JVxOmYJsuH z8~lBxCaW%RJ-C-$z`1`KCmQejUB8Ca-TRMV9$E(H zs#lL?Iqe7?z2ZZVE zY-^0v%37{$X)D`Quu5I>AS%#lANx|g_tlymL<<+3Qi6<=(mL_24`C?V@05E1dafLx+TUUBU z)7+WINowybbA5a^T~DH>)Us%M?jKo)Ee`xIo2f#ijx%D~!f!c?PAD9PJ>p7UbP6uZ zu*B>vB|<&cHO7S3DB-pJ;>M)f*DD5BtkL%tY9Bf~y<6WDiy_BS_hYF9YBEf9ZP_5i z)f7FN1?yvXAIbvY6~E6dNHezD1tgzocqlhIFDgEj?k>QgtNr}WD>7tdv)8BrnW%a3 zSdvrrZ>;YZrf>+CHnH2K;I%}s6e)`8fYwggRwB2cI5jz5ek}iXgwbMlO#pYi_iS`2 zn$(4jLm>b+#j&_}?}b5nhWs^~qb?n|SC&MZk!V)JS4^FR#o8n?MXp;;!I;r2ytW*~ zVHqSi9Y3?WT3NsZredAei~dAHs}?;XIvM+IXLHju457GsetJS?cIfBeCUQ63Q#cJG zBur;s2(Fg%=liqtTM6R?LW!R<|(P_ zpF6`OZ7DgmT0q_BU2J?KgpqbRYVzBQn%l`)ymY>6uTCRbh!cdbvlWVk%v$>Q6ZSj8 zsSJDKUBo;UtZvhuS}Ij0c+zc|+}L#KF{eUsa?m1UZak7z135eh0cLzd?zU_qTurTQ zmTxU^C_`>n>F$WFjm>YXYSR)&RqS^i?#-otbcr}%>{N7CwORk&k@r+;wVl#ksx!&X z(PN&FCUCGCK!bUCxx2TqmADsZ*V}?oybnOS@sY6-FuRP6@MfkVb%d3c72+y^m;*JL z%4pRzwZMMy+~t>E%&%mJq@LHh+w)jh_;^zbDlkDkbV>sacK(E_<&*bX-}Uv+uT{n? zb_X%thno&NLOnXCcQ^g1f<-?~du?;Cc`&Ur&RtvyUPU>X=2OK5VDobyHj(>Y2Yy6( zMK9HM;`Iw*=oW}XPIyk;DF5einC>NVUDbZaH45Tq@K1k)IIL{|dZ&jaNH`jUX&K*R z_RCe|e*2{ZzDk~eO(dn42JWgn__7wP{+jB9k1ClT*5^o_&K_nQ@s;rW!B9oTd7o7L zL?f&SSqotCTFg%HhWAt)+Gf898TBm%vgBF^y}bPPr7|%JM?r*orETYlTGogXWU;<{ zBFkvr6v#cAd-1iZsfo9;zWyK62=ta41xlr&x+Jkxks zuuFQy;@0t6kXaX`L{2h{_+8P9$4&6FF-W_s4jhz`?UDraA_!i3pM9zFND7BMM%Al< zRm@09ZDl7H&uiOVAIBo5Th%a;ks+Ih7Z=iN00#FVaU1!r8=BSiWcPHBg3Mu8nSXdE z59Tmve1CJX63^CPAd@M0FR}R=o;tSs`SGwD^70dI)ULVCLDp$;q40xDQ5?QQ3vM60 zpuoQC3Y=i+I;$}1Ln65vf_nb~AnD=|bIpoHZ*%}a{H1t_m)?*e|Gvs6nvDLic-qV$ z#EyL6$DhlRoO@xlv=7#~2hFn7;USeo0`82Cq_se@DnuR?LaL&BRFc^Zawps^U5?@Z z0+wb*VE0o##%o=cChQ`-%UJ3Q5ByP9IZ;8pB&OG$7gdO|9#OLZ(@kt?(zqyV6K}p3 zc$4Wr(DB>QrK?P$LrIJG_qmI$(%4>{0O{&&7835qR_H%F_gTAFS}5*$2UnS9gl;3K zQ_asJAGg&s;%=_2;lqB2Qf}sojT!0D|w)UhwD?VB(d&@cUJ0`o2fYvhF?iD zBp13OK8WWK#8rAUkR_N;K=@vp98z5)(Xn_bct)g0t0cYZ*opA$MF=Oorn2>>{X}ZN zceC_Xc$m>b3Pp6zyD*t}s@06kC_x{834Sf`M2jj?r=fRf5GD1;4__seKoCgJw!rz0 zap|A<{1&ETY_00+!&!XHW!K4MUI=o+-GHT6hqZS{GlD+kod<&B?gV#B!fN+#XJ$h(yduH(Kvs+SA$@B(&2>mcO9$oH_sHq~z^^UA3vG{O2?BQf|e2?-o z_{xGd%P5l<^Mt0@;zFutOHdp8vqZ`mhbZlK=W+k`7i<#-;;BYnEE`!Yq!M9{A;M15=j9qm)CHrNHH29U)4)H=hDvUlnfH=Q7noCxvyfq!@|c zRlPh5*6XE{PThTyLl5iz=?3VG2OiYbI_n1xgE|gPy{@^fk^oss?mpAHyP`(3-_Of5 zts*r2eUH3Yv%`VdY!)MPN4I!n_hS~!H4&qoC@@ASd-@=LGJg1q${^lq80oO#@bd{( zs{@(m`ktr3CcMBK*J=L9@@i&4nzC$&CD;{*|<9zTP#sYiB7>y3k}3D82XU9ebh$a9(#P1jtKe zZPp~1+fQtuZx!U#CUUY-Swv#50-V3a=dKVmpryIZcuHS|BsgnSSyZkBbt1W4qd|ii z$OrY5kM=~BZR|_$PJ7Y_a}lP{6mlUS(PGzg%RkW`x)Heh9Z$vGVX-{eTJt!hL#=tL zQC1t)FACCuoD%*w^vs)9QC*LB)x4v-=-@7+Q`f0=jxRcJ1rZ6kt{>-S*$b8!J)+Hl zuAE@t_6N-IJmXdV_@lI-rd{HG9Z&3o|DN-pCz5wDEa>3z;H3qW)#@mmDJ})~%E+D( zz8!8AV+n0I|D+DG?F;t__jNz;o}7^a5w-Vf^pn=Rx1$DzswBZXM=;gpDO$@wi)D4E*8u}kk6iU}2f<=uBn5FMazEIhMc^!he&NtP@3`nL7&%UI6$Vml!a zism&V!NI>t~GR=2Cw8jzJat`}F)7yqF_M4`VS6TH07x`6gYG#%8R zG=e>gMw~l!&QHQ#5^c8C)EMksF>L&LrS)nu`4W6q^uN#?qR7^M*M>B33Z?LkE&h<# zs_3k^NhoWS%mJv~ei&-}e{pwM)%1Y)Wgt&UT&;Cy958?LHnPoVOon~V-^xUDIDw-e z-c_(vOEaqPK1)NdoO3Yr+S`WoGBLqv_NaKd!}og;R~i1k+QIvK5{LJ{>X4bp2Jf?m z{A`5xTsKYo7y6>o;{yhWSt~g}WDb~I^1ssAW(USH#6;JaE66!w+8Ue7t8A(#C^jgY6)BO(06SGD+dRzUf!jV*-LPOnoS~b+zxh?Ry|gZ z$i=g(C((A)Al=G?TRNrF@im9vAbgUjggMwBM=>U;KUPQLTktCXEZ*hjOXX)nGDr0a z6w9F~F;eUFTyI!_DqgnFBXtj;1{R)KuUY$a^7XwUCKdz(Bev)kOlA2Y4Z2EB6No)r z;Sh6uY18y{8H5P$+4H(voFal!V005yv?cF%^mjaf*2}9$?mJbEZMyw*Y{X%1%X+|p zDsebo)|U{NuXWV>S#qGjSv(?h`o1~G5yD$Z?pkq%v!-_Vl*zj;T;8*naUUaV*Kj+@ z^S%dOzeeNT+)2NH7CFXyG>~0bPZ;#oZXmN%8!l+Lh>5dyu>sGIc%JPPP+)}bYOF@d zPS%+UWnVpO+OmPwjbsC8s`0qCYt73dg5~^6V^G2Tlng1GUR4RIqNdS=Vr`r9vAzD4bSHf)tJWjSPKqy!17YtQO5q zrmM`DYJGt%`a=<-J=-?%?MmD#q6&*x={s~MFEkS0?dLf6C5X4xJuy=3jnPZ@*?m2A zQNWPDmG(=?7^I2WCfD*xv}CPCeBA)zA-jze2{f3TbC@JBoR3jfO&xOO0T}2F{Jk4B zQ25lZ&Gx$13bNTFw`Dq-tOLL*P1edmzjb5ppLp^q^fER-kkrTTi^s;TAwX`ng~ToA z7J#KK^RdE17KPkKFsO8yMyCv_G3tT5>0_N;do&1t2gfX`sp{xQ3^9nJkhfIx4_(yc zN;VEQD-}`i7DB|PZ}#^xs474rZDF`YHRiS^P!aXryCW>>XrqOXJ0WGnGl?X*JMqG0 zvmu;fWNzZ5v5JLB?7BWdQ;fwflijb#Ep&s%vCs^FD4ctcesJZgQ?)~o<++?EO#XX}pC2Y=`(TGXU5~lG#U)WLuMF^=Cc59>*JFfT_PG8NOitz3 z`~IG+0yCidS~)&(S0KS=7SxQd$j-CiO}>-`e}$b}l+~kZeG&=20JlZ#o@ng7#t=d# zO5`u<*#};ii7pE+!2K%zwgAojebSB-fBT6stFHdp-j^8==f;9;u3$v}ls+J@fAilVv*lZU zMVfv0`Oas1wfpGQzOPd~C^bX}cnpV_GxMZN3xuj&C`HyibVE~RPAQAXfD$`e>m!p8 zf)nOGSg``fnlS2B1?11K{q(vu_T|88$y%&@I2?bc0=po(&>JImY&dN3IsJ|of5U9P zk7c8VhMBoSQJ6&H`hX1lk-rn9g3zZlvYQu#!0VQ=1A+cd-{T?k??ppDKc57dgF?#m(M5&{a2|gc< zi&R>lWh20LYV>u#+B0lNoDMv|vF3vbSit_n2&Ii*h6hFOTdQmYKO+BX3baTo`M!S) z62eBX-w@-BE~_sSeZo;{y1eujjZ&LOhf2R=c!n@Qd7_e9y8^D;va<>Ft2s?nbdnReW}t5?AG$s*D-hnnzasRMbzo>~c=+Cb(vXT`9# zt1nj-;GWl16aV2ACeMBsnbz9$&maXckY!~>CqLHBl<2x|T@c=toDEI0;#FUhFX6s$42=WIeZyyBWr4o>91f^XvI!&9a^!d>Z^W**W9 zRcKF8=cM0|i(|m;dr2T~wqKMJZ+ZS!{$ai3w+|e!4WMQPmdNr-XC8DqKdWn$uEbg~ z@$^WXl=D3wp?MN`qGN14h&xSNG^ZBx09OkgvUQFh4&Xvy1@DCI2u|)`w3Wy zm4g>)4@H*TZDyuxAlovt9|hD7=#3K&E!+HVAD6h`6jZ+TG2`TAq}UseEP!(L;k^dA zMP{W+$rk_HWMjjKHP6)wU+JTgtRw_<=uGK#x95(Zf%cAma1XV4*` zu|8xY;UuUR^#l-$Ff^*FRe*nc_m7$D9pUc|awghY_J>!D%5Kr#_xyyjr0gHe#r*D^Mos9ltjxwCjtZ{t;wXk|}YRyH*?e`uL!)9bOw@hPL2w0ccmKAX<=weh`g zi~gnE4;G*L9e-~K-|6Q~N?(Ts!P8$S&qs?~s3)dJH!I`8=OU_7?PO-+Hizy%iFV}! zJMA`)m$=DSJn{GD`q>b8a7qX1VC(t)2Gp)DY2WLT9f2QQ;8JPV;&pr_G6VgN)6BH)IfP}2W$>b0|fnLNtBHum?V7DNmcV&UOhqF3L#e88 zpAM&)Hop6YnBE_uhIz&;vV@6ZEY3YR__0wVw>=T%Ro1ArWJKGLM~;U@&4WNh|A9vj z&SBUX*#?=-P<@)V4RzSVcx{Cd0rPo6`P*f+0*uLws>g&WMs$i$_ahCd z>0J{L$GK|Sj|WFDBKs8Wb0H5skDq5t1;^_`Tb1!lX7o(9ZJ!TilAbPI0H}mK6@1NE zRPdHxN=g&ktA`!}@aE46%xWyTMV7{N+2=!hyZgnBf1u_VMc8e|!MTTH*eUrr25=A} zRuOm2w^-F3E|osV28jvor8ea`C(4aF#HoYd+a4=i9yx)nUfXfE^v+=IyNjj?GR$de zTi=_g7h0StVpWseiT&Rct9p7m6D>3NOJr_}L!NA?wp9^0a$X^P5N)h_A(8T2#HhX5 zO5Imtwap&N-16d)0%6)gM@HTMPXWx-C2+9PTY6Wv_SdiXW6`660^}X5?<9NAhrOG0 z(2i4;R@Oj(>2wARSwA(ewgwdSe|ZK`|+jY zFOsq_!RDvkmQ&?U^MYI{la7zk_;t}lCJk$T1FQc0iE&b^)}*e;wxn(cUN<0^?y!|G zDw+X&Vd8Td2O&)XAwx3SmbYT(YDE{5;w;udj4WTefmy!C`r7?30O%8|%_?MLlXvs# z-c-3%4t?MR2UY8HJG9sHBo=?bisD%)@{T?GufMpgX_1zcRj2zqL6S&RG1%z~+pe>4 z%^9XjYo)M|>N7W}ga)&%q3Z#y8iylTg}JU>#gipRf|${*JstE@y+ z{N-U8M26KJeCa1g`!zcc9Mdo{p;I5Py)nEvDm!HT^U1Ck&PRH@E5`a_(wMl#p<)?9 znxy(sPz3>A*FycXe`S1QPNSqw-=8zyQmdIT z>tf{FYdlFo0b*wDq@!HB@72H9wo2BMx&M(1%u@I>d3>?K2VzKf_2WM&c$Pa}2d-W% zlWjl9UD}Epd#jK+V7Wk*WVx_g@J)-WB2~m z978%_9tS8Q?vJOy7pNKYbKdOlA*^uidp9sh z|Bqy1(mtu%<*N)#c~NK~?(5yY(cL=XkWXgAH2XB?`S#{s=Z1v`~-Q?#FY@fE7U z1eK~(Q#tjG(xm3g?r|z|>HYKTk`MN}6zpBfW7!&0B=FjFpEp{y^RdcW^s-bniOz9- zzr_3XuEKnsKZij^WTuK!i-U2KYXrs&m()4=o-y2usvyk08F8+*mY`2ul zyA@^^eae%}eMg$*H(t`x96RR}lL~<7XG+2dQva=qmdtxk=H0=Kgs|OnM9Z+uO925s zN&u+lsh%)c5Wq}uk+W+E-uHnEAu2FR;IMhOv!{fZxeL^FyZb$hgUk2DySr1f+?Or| z0<&j?`FQsav*irNVQUrjciyc6ynOnA98Xe>jSO&5`=7d5U;+WVvvUHaYdZ#)0Q`u8!7BlNY)gP6Dk{GRDJF?^KE1sQAyII zxh3X8Xq_P#KQmXbqB+@bh)H-qB)+t)wZ~pGQP>I~R`e#gs5|E>S8dq^65N}Pn;bmn z{mnj-V-m(vdllizggXD@E6RF1Ld!?H1r_T7&Fr9D`rX7U4x?Yh_U&#$9{(r$C++)f zb6np|KI(g!_e`;sDVB; zYYIjgf=xH|UOv0(&8MT1SDA8)gY6c2yldKt+xVX9wSi4uo6I3=)#xfew=V~nck~X? zeyzP&r+HojfvL2nS!aEE_?}7>dKAWFEW4%&yD>kHZGua0m6D!g7wU}Bm`*O25+G-? zl`R-5MU`EPw)wcyW&<@-vS7ZLyT5XqZXzT#CUbI$8PxkBZf*i68$#3}uInyc8p)-q zGa6xvV+-1t9bOy$#AF{=$Gn)sP9HseVE36`LD-UqZdHxC0}0@Hl_*J>Xt^i~{X_*jtHgf6Mmm+u#t z07u8zI2Qsrx#Eqit1_vW1T_PekiHcK*wC+UX8ixP{wwMVin(Ax_ux-#>(Ae!E&r$_ z)9L5+x~-4+g9Wj&acVBLuk`5u(D_h(`0ShF;H5VO_QHesZZiiHiZkIx3cuRJR}1)J zUn}4QMmH*|=>~F!J++jNwCw4nF2d!YIY7}OXg2rlePvCf zPJKRB3F2DuL?+}Z>Z}H?6tAD)`J$Sq^9Fz>o9a8R#b^b>eU~8Y1R&$!f{(UOHljh_ zj%_APzTM=|0fkRb>B9Rcd3po|G9f<}Uy!T4Ut<{p^E$B4_%a&@2Na3XmGNxptEB_| zXtx(tb)5Dj50{iXeU*2fd?cSMK)XIi(ST+WCy)2_(^c}*cN^5`!oVrXx=6O@u#ZLF z-9DOQ8LlhL0!QkJ3M5G{QACbP9*1=jGt19IeRDJiJ{z{Y$Fq^c-5&fO%xpANNVNhY zb`3vkn_yR30%HC;a6{edqh1Och3ZwgAAbAPA6T+@=5`%e(b=*!?Fv zPT7t!B&k&t(b=O-FK^C?xO+8Gu`D={fpTzL$@=Y1|ENHHF3@JiKEK^I{nMeW8S;8} zfcS8F+J;H?oe^k#ZJ z!{V7S`!26#UwdCmSY>t;tqS++x_I_a=H{({POquwkxtY;Z`Q0-#kB4h8Ac+yS9xH6 zDJ*FyfnzoRXUo^?fd{&ZvOd5NMlU&#gO!>$QSf4a#z<#%0S$vF$+5RQrM_pFnJ%Jy z#GfTry|aCn7Hp&FSA{s*SOZHlxC|?O4y&gnHK}LbT`OzGx%v+>hqQqu?syLMGu>RD zPB0HBLFglF76epk3s@Q)n=QA54%?rR@3+n3c1Q)L|0Xb3lO^~)`{*gc=y3>g=y#H zoyiJ^C9(w{QOMFS82A1-?;)u9(&uDnJ%ErPhqB3&7>;OkcKU!aO~0@;jRvf|S^+Av12cjp#y;2?;Xsz~!i&dB$$8tMk}gI@Up z`z*a@*0MuvzsQ?bX-5Ez#Xiw5w$}!H3|tQZzq0mRA}h2|7!7DE#zm>A158>P*btcU%$Xz5v?z z7Mg%tJRXx;=~AdhEu$46Xfu{!%k7No(X@5@s{!nRJ7;_Kbo9<)O#OYq=i(n{wI%P& z*b&YJ_AL(Om6dH(t!qFAaM=m>e|mY@8ytq`KE39bgCK)o+pT1KD(~21M5+IMPnqs} zg8W1a`H#4nhTXojkgcN1!;Ef@1^k7$nRE_+lkoUsN1x$ycYqDwn|Ad>yC5>@wKzPP zQ62arc8I_}jq7+T(*uZ?kC#|p{v8b3rh6o>WQc7ihP$S_9=M*! zi7flVx&^0<|8$4pafDyas&`Jr%XitlOiSjkxg;YQB=dz11tjjVS(ak`UH8=5f zAXAQUyk#$~xAdZMcga-Y@guwac6+(2q^Ku5iIe;9am*m{K>Nv-uTfT7Rpy>F8hi`Zd`Fs#0mmnIG`V{ z{QXAVCk3~SXuU$8%#b#3x9|7_p1Q70)|DGMzTXcD$Y`F28ozbc!-)AbK@e4k z`-lwLiI-NBjgk_DGvm$dglBsD0pd36TJ`6x``vFJ-MHQz@Z#Fdk`*Vrbk$rIYp2K? zp8ilk>tyZ9=VjzJQ7|my!HJHK>t)7uTATb-t)70yygsZ-i^@xNNXKg)liKo4mOVPc zY7hXEs*mT>SKwB*L|LH7gL`6SQ74hy5i2jA>(DNgylnpXkL267WYAu@Bv3x$BD>6< zA;N)o2H0x1Rvz6P9=j1A=(fM%KJ;jC(-j?8 zH4sfus?RDQyXVB`RxN9$_OZplyYCsAHWw^dEmJ%Kkxj zkMd%Dp5f>3psFHju3g{Whs0FTgG$WkxmKnnPfe9!n%v`=}EPS(SGOE_rNO} zEDtjh%)#%C3G!rHZxa87|7)20%%}moYnu9DH7k+TnQp_!O9S)=O}mUB@z(E(QHMyO zV(V)*cElT`2Bi>foaY{B;=U_zL5m#TAR&u(#Ok}zzvRR_z1NWF<0n#y-f0ZFf^Kv$ zY~RKZuVfhe3U3$JbcC8vze>o)=j?KTeft@M!t~O$VBG0BGt^5Hz9|M;rGQ4ZcWV4g z>YKj%+SgcS1_iDiq6Fj7JoY%TpLsWFl8u@Fd%gw)qpYwK$3?omzsP@#n;UKZXe!w~ zCZ|3AA6zOL)O9`}8}ujfmV zVu^S49PE0f0Cd|CnWyzoX*i$O#wN-*ZBakDD%|n{nir?V4>nx znCt|I(>n88cEWYte+L}q*=D6lZ7%HXnATml+<7B04egE*IwalvPYlOoW6iD zAC~#@D4Z}3kf<(}ZQ~QrX63Fx*}*$Q(t%kDzxbZK+;-vl zSCuH6UvnQI>2FGx$K1NGqEFAQ0YIRd)KeCD+(hT*UdW%>6Y_2Ee*{4Gq?OrT6UFyM z_NfqgYDq|dk$R%%4*Og$tz^I4Z%ij1s7azYf_Pnjt_iv_+B7cMYiOu{iu4%_g zt%Vald}PK%kdmRTP|dWuu&TGSWU&Af7(l=dx6*DB2QdA{Mhd|>B>y=RS3hKp{$Ikp zdf>XjgKL?)&~6)UcJCO^FP~4hrESPFqgB0rHi#(+NmYfGv?-;SC;%ZJK1Vp@J1I=H zc2oco=aZ-QQvJ#??(FzN&!<)W02Qfst*Tnlmygb7-;vNUKzFwaCpDlpv-T_WT8~R~ zaQ$H9UL;mn`pO9K$Cq`Kp`o}G5Z}3DrVdEYD`C09jIk%jmomN|{wZZqR1C24L45_M zkg-EnR*@;s{73b#3|p!ycQ)<(u(2I0?&&3u6OY&_oRH?v#*S2zrm8bSa5h^=|Kbu; z@8q{t$m<3(7iLQgVs3|SvBKQWI4F1`G*hT^3UmOtP(2*XZ{eTYm_Mc^ZSB%Y`E&o{ zPKy-TI^dQaBn|c$^ z`cH(ec192ZxN%?JUs0vmj$@jL^P3A$p(UU?j654KbiYs+?`?#BefbzlIr+woTVtw{ zX1hFz`h)8ExguW*L+F46g$!g3v0hQm(F9_Ow0_L=EiUB_95)B9;XwMqQGR1=telUH zVrArS!P$+^+%PdE);6M5?vv`(kuq;Z>gy8pJsd!S+aYld9=Ob7fJd$UoxSYV_S${& zJ-FTi$*a_n-c=cI%;Mt3ln8b$t={xn0?;>eIqr?*#;V8Qg}VBBH$7n6IPQSq2VY!) z%@pNzt|y`eaS;#KAzE#1%W|>j&BQcRO)uj-MoY%imn!PJcfZ);_?&Lun%x5!EUd_= znp(#XqN|-ts-aEKfXyL-|CDssa$ei*J>Mg2>{~cAE?Fmar6N|u1xBR(#Nt7!d8@Vb zTfcbYsJ7jYdJ)Db(=$>Qf4l4_)d6*7e;j-$^Y>a~oOCpJ#cZYH?!b$jpuuiV-!n;v zo&O*z4MHLsRtmLd4PO{~1lI$etKMugeux!Bd)`y7XzNneqqQe_fg}>Lh?jMf1 zj&Q!{s&`e*#0qegSgR)!%%61VX4YcseGOlU=8lJOYO{H7L`TyVm7saIYjR+Dpyn+8 z9VY$3d6FwnchBVo?QSl7qZzpP{E54KF{Q0x4bd$AvjxoOO3tlh}j$;JDtD|AdVA56*gN0vRJur?0$i3ra=fJDkhd4KLOZ#&VZ1x5`IniNzO}PhM zEYrFf?KINi9}laR9pinz07IHtEt)osqjY+^a~tT3+P1aUgesp#KO+sv>YxlJGZ9IO zvM*I|ZyC9E_Psi=MCm6DzAn_h#I4Ufj#IYRL{T$CGJcrx1&?+7icY0%WMHWh`*wA2 z;e%6rehfOZ$9k-4ds@KVzL8WYOjiJ*7=!Xj>3t2=Bq@sr8pV*b? zS?4rT1NnmXkweX1@C6b3#gx23uo6>qcGl~N`N<+7AOEG*V&0~pr>T{sVC#PQmA_L# zQr~ka3u;N#sV32Fh}6M&J69c|jW*k+KQsMNtvTthM!!*%2h{a^mcDScsuOarmF&^T zz>(`J%38VfTH*B0oaU;=GX`u+fXcVd{ejZhxsV5YvA)yggG85PDA=lkMd?@HwSW^;F- zI+zpNRv1!DiFs}=8qDWLM%l?TF6FOilY7uXAT6rAg=6iuJun73R0=E#-uYpQ%~@Vz z$lq&#i>8>{WhOCnQ?X)7hwqFxI#7S(u-w@l>vSn>5v+UaVa3k?uH_ zur&+C(%{zanOyifvAzZ#xj5;=%0=eTZ;vFX&f&9E{0Wer*gct59XC?cs1jx^2}&)U zK@=uUe`d29!-!RE5ogiX-CwZtBu`@qrOF0`m-A%V zVb=%e{jai_b&>*)$RR{V!)GE-Pv9+AWt!Ha4pWM|4Y9Kh1D<%$el;XRwg^%6Z1dLWDQbx|s6rLJXT}f*C5PvbjKWp( zI^ku~(Q>ufmljCNILieivSpg3W647O9NVK{DAU`bqe?feA^Ge6Tq=ECpW-Ig! z0lkN4@PZ6s1lR}8zXE-f&G!K`z_21{u|Q6@XYNGnozaHT$04TM4-%1ArrBX=9J+XS zrR`V6>b5>rmS}j#%ULn94^JX^!NB<+d4-P((rS^CM-QFoNam*;4T9WI)V5K^t35Kc zo3z}Qz786yc%H$$c%$_t^!rPnMw&MuJ=C&?N1-QW^Pe9C)W;lR(q#edBX&6E2kmGN zS@?Vcx}G;-jUjvn;|8Lz+!+4Skpi_F!{%(Z#i8G~6)0aTh^~RFqF_bFL!+h)?4iRZ zkWX9BO2ys0xmF+1WtT3w^pO@jDEjnBwJbna@0x3$9FFNnd7*sGWvaVO3v4$6UA0Vn z|42Zw&rA>Ry-n+(Ndgrd(H$HqPa}Et7I~vlBoe*Ig%oRd__UzRAR00s`a7=W^DMx! zW}x2Rz3khxW{7tDQfqx^F6(W7ve=`+GZP?iCQ}LDkD%PrRa|rj>s|c7P}du)O=s4O zm6Q}MskJZVfp$rM8NDvH)mf}L5c9Y_Bv#Q=rQ1O)J=e)<# SfI{JxEvGDSm@>0VxBdgHeas2~ literal 0 HcmV?d00001 From f7d31811ab63ef7f6ba4e81e3f8893a884993612 Mon Sep 17 00:00:00 2001 From: michaeldavie Date: Tue, 16 Jul 2019 03:26:05 -0400 Subject: [PATCH 011/156] Add French support and two sensors to Environment Canada. (#9747) * Add French support and two sensors to Environment Canada. * Clarify name parameters, add wind bearing sensor type * Remove `monitored_conditions` config parameter * Remove `name` config parameter, add example TTS script * :pencil2: Tweak * :pencil2: Tweak * :pencil2: Jinja2 escaping --- .../_components/environment_canada.markdown | 102 ++++++++---------- 1 file changed, 47 insertions(+), 55 deletions(-) diff --git a/source/_components/environment_canada.markdown b/source/_components/environment_canada.markdown index 3c229dd4594..ce13f3edc20 100644 --- a/source/_components/environment_canada.markdown +++ b/source/_components/environment_canada.markdown @@ -40,10 +40,10 @@ weather: - platform: environment_canada ``` -- The sensor checks for new data every 10 minutes, and the source data is typically updated hourly within 10 minutes after the hour. +- The platform checks for new data every 10 minutes, and the source data is typically updated hourly within 10 minutes after the hour. - If no name is given, the weather entity will be named `weather.`. - The platform automatically determines which weather station to use based on the system's latitude/longitude settings. For greater precision, it is also possible to specify either: - - A specific station code based on [this CSV file](http://dd.weatheroffice.ec.gc.ca/citypage_weather/docs/site_list_towns_en.csv), or + - A specific station code of the form `AB/s0000123` based on those listed in [this CSV file](http://dd.weatheroffice.ec.gc.ca/citypage_weather/docs/site_list_towns_en.csv), or - A specific latitude/longitude {% configuration %} @@ -60,7 +60,7 @@ station: required: false type: string name: - description: Name to be used for the weather entity. + description: Name to be used for the entity ID, e.g. `weather.`. required: false type: string forecast: @@ -82,11 +82,34 @@ sensor: - platform: environment_canada ``` -- By default, a sensor entity is created for each monitored condition and each category of alert. Each sensor entity will be given the `device_id` of `sensor.`. -- The sensor checks for new data every 10 minutes, and the source data is typically updated hourly within 10 minutes after the hour. +- A sensor will be created for each of the following conditions, with a default name like `sensor.temperature`: + - `temperature` - The current temperature, in ºC. + - `dewpoint` - The current dewpoint, in ºC. + - `wind_chill` - The current wind chill, in ºC. + - `humidex` - The current humidex, in ºC. + - `pressure` - The current air pressure, in kPa. + - `tendency` - The current air pressure tendency, e.g. "Rising". + - `humidity` - The current humidity, in %. + - `visibility` - The current visibility, in km. + - `condition` - A brief text statement of the current weather conditions, e.g. "Sunny". + - `wind_speed` - The current sustained wind speed, in km/h. + - `wind_gust` - The current wind gust, in km/h. + - `wind_dir` - The current cardinal wind direction, e.g. "SSW". + - `wind_bearing` - The current wind direction in degrees. + - `high_temp` - The next forecast high temperature, in ºC. + - `low_temp` - The next forecast low temperature, in ºC. + - `pop` - The next forecast probability of precipitation, in %. + - `text_summary` - A textual description of the next forecast period, e.g. "Tonight. Mainly cloudy. Low -12." + - `warnings` - Current warning alerts. + - `watches` - Current watch alerts. + - `advisories` - Current advisory alerts. + - `statements` - Current special weather statements. + - `endings` - Alerts that have recently ended. +- The platform refreshes the data every minute (primarily to update alerts), and the source data is typically updated hourly within 10 minutes after the hour. - The platform automatically determines which weather station to use based on the system's latitude/longitude settings. For greater precision, it is also possible to specify either: - - A specific station code based on [this CSV file](http://dd.weatheroffice.ec.gc.ca/citypage_weather/docs/site_list_towns_en.csv), or + - A specific station code of the form `AB/s0000123` based on those listed in [this CSV file](http://dd.weatheroffice.ec.gc.ca/citypage_weather/docs/site_list_towns_en.csv), or - A specific latitude/longitude +- In the case of multiple alerts in the same category, the titles and details of each are concatenated together with a pipe (`|`) separator. {% configuration %} latitude: @@ -101,58 +124,27 @@ station: description: The station code of a specific weather station to use. If provided, this station will be used and any latitude/longitude coordinates provided will be ignored. Station codes must be in the form of `AB/s0000123`, where `AB`is a provincial abbreviation and `s0000123` is a numeric station code. required: false type: string -name: - description: Name to be used for the sensor entities. +language: + description: Language to use for entity display names and textual data (English or French). required: false type: string -monitored_conditions: - description: The conditions to monitor. A sensor will be created for each condition. - required: true - type: list - default: All keys - keys: - temperature: - description: The current temperature, in ºC. - dewpoint: - description: The current dewpoint, in ºC. - wind_chill: - description: The current wind chill, in ºC. - humidex: - description: The current humidex, in ºC. - pressure: - description: The current air pressure, in kPa. - tendency: - description: The current air pressure tendency, e.g. "Rising" or "Falling". - humidity: - description: The current humidity, in %. - visibility: - description: The current visibility, in km. - condition: - description: A brief text statement of the current weather conditions, e.g. "Sunny". - wind_speed: - description: The current sustained wind speed, in km/h. - wind_gust: - description: The current wind gust, in km/h. - wind_dir: - description: The current cardinal wind direction, e.g. "SSW". - high_temp: - description: The next forecast high temperature, in ºC. - low_temp: - description: The next forecast low temperature, in ºC. - pop: - description: The next forecast probability of precipitation, in %. - warnings: - description: Current warning alerts. - watches: - description: Current watch alerts. - advisories: - description: Current advisory alerts. - statements: - description: Current special weather statements. - endings: - description: Alerts that have recently ended. + default: english {% endconfiguration %} +###Alert TTS Script + +If you would like to have alerts announced via a text-to-speech service, you can use a script similar to the following: + +{% raw %} +```yaml +weather_alert_tts: + sequence: + - service: tts.amazon_polly_say + data_template: + message: "{{ states('sensor.warnings') }} in effect. {{ state_attr('sensor.warnings', 'alert detail') }}" +``` +{% endraw %} + ## Camera The `environment_canada` camera platform displays Environment Canada meteorological [radar imagery](https://weather.gc.ca/radar/index_e.html). @@ -184,7 +176,7 @@ station: required: false type: string name: - description: Name to be used for the camera entity. + description: Name to be used for the entity ID, e.g. `camera.`. required: false type: string loop: From d07d64511d3438b69263337af9f2495fecc7b31d Mon Sep 17 00:00:00 2001 From: Thomas Le Gentil Date: Tue, 16 Jul 2019 11:18:50 +0200 Subject: [PATCH 012/156] Added the Fortigate component documentation (#9807) * Added the Fortigate component documentation * Update source/_components/fortigate.markdown Co-Authored-By: Franck Nijhof * Update source/_components/fortigate.markdown Co-Authored-By: Franck Nijhof * Update source/_components/fortigate.markdown Co-Authored-By: Franck Nijhof * Update source/_components/fortigate.markdown Co-Authored-By: Franck Nijhof * Update source/_components/fortigate.markdown Co-Authored-By: Klaas Schoute * Update source/_components/fortigate.markdown Co-Authored-By: Klaas Schoute * Update source/_components/fortigate.markdown Co-Authored-By: Klaas Schoute * fixed some remaks * rewording * Move setup up --- source/_components/fortigate.markdown | 81 ++++++++++++++++++++ source/images/supported_brands/fortinet.jpg | Bin 0 -> 12302 bytes 2 files changed, 81 insertions(+) create mode 100644 source/_components/fortigate.markdown create mode 100644 source/images/supported_brands/fortinet.jpg diff --git a/source/_components/fortigate.markdown b/source/_components/fortigate.markdown new file mode 100644 index 00000000000..68a1c761852 --- /dev/null +++ b/source/_components/fortigate.markdown @@ -0,0 +1,81 @@ +--- +layout: page +title: "Fortigate" +description: "Instructions on how to integrate Fortigate Firewalls into Home Assistant." +date: 2019-07-07 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: fortinet.jpg +ha_category: + - Presence Detection +ha_release: 0.96 +ha_iot_class: Local Polling +--- + +This is a Fortigate presence sensor based on device detection of the Fortigate API + +## Fortigate setup + +Configure the Fortigate with a USERNAME API user and assign its minimum rights profile : + +```text +config system accprofile + edit "homeassistant_profile" + set authgrp read + next +end + +config system api-user + edit "USERNAME" + set api-key API_KEY + set accprofile "homeassistant_profile" + set vdom "root" + config trusthost + edit 1 + set ipv4-trusthost + next + end + next +end +``` + +## Configuration + +Add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +fortigate: + host: HOST_IP + username: YPUR_USERNAME + api_key: YOUR_API_KEY +``` + +{% configuration %} +host: + description: The IP address of the Fortigate device. + required: true + type: string +username: + description: The username of the user that will connect to the Fortigate device. + required: true + type: string +api_key: + description: The API key associated with the user. + required: true + type: string +devices: + description: The MAC addresses of the devices to monitor. + required: false + type: string +{% endconfiguration %} + +### Errors + +If the rights of the profile are not sufficient, you will get the following error: + +```txt +ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved +``` diff --git a/source/images/supported_brands/fortinet.jpg b/source/images/supported_brands/fortinet.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b764105fc003a910c81825be00e94dd1b40e8fc8 GIT binary patch literal 12302 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 B_4NP% literal 0 HcmV?d00001 From 68ab558422caad0c89f3a74f49ca6b8391f90b25 Mon Sep 17 00:00:00 2001 From: Ryan Claussen Date: Tue, 16 Jul 2019 11:05:22 -0500 Subject: [PATCH 013/156] Add severe weather sensor to Dark Sky (#9129) * Add severe weather sensor to Dark Sky * :pencil2: full stop. --- source/_components/darksky.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/darksky.markdown b/source/_components/darksky.markdown index 759306b4407..c7ae5bca389 100644 --- a/source/_components/darksky.markdown +++ b/source/_components/darksky.markdown @@ -143,6 +143,8 @@ monitored_conditions: description: The approximate distance to the nearest storm in miles. nearest_storm_bearing: description: The approximate direction of the nearest storm in degrees, with true north at 0° and progressing clockwise. + alerts: + description: Current severe weather advisories. units: description: Specify the unit system. Valid options are `auto`, `us`, `si`, `ca` and `uk2`. `auto` will let Dark Sky decide the unit system based on location. required: false From d77314e682ca8baaf617634c8d97a67e59d610a6 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 17 Jul 2019 08:52:58 +0200 Subject: [PATCH 014/156] FortiGate: Fixes release, spelling & front matter (#9872) --- source/_components/fortigate.markdown | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/source/_components/fortigate.markdown b/source/_components/fortigate.markdown index 68a1c761852..3d063e675d4 100644 --- a/source/_components/fortigate.markdown +++ b/source/_components/fortigate.markdown @@ -1,24 +1,18 @@ --- -layout: page title: "Fortigate" -description: "Instructions on how to integrate Fortigate Firewalls into Home Assistant." -date: 2019-07-07 22:00 -sidebar: true -comments: false -sharing: true -footer: true +description: "Instructions on how to integrate FortiGate Firewalls into Home Assistant." logo: fortinet.jpg ha_category: - Presence Detection -ha_release: 0.96 +ha_release: 0.97 ha_iot_class: Local Polling --- -This is a Fortigate presence sensor based on device detection of the Fortigate API +This is a FortiGate presence sensor based on device detection of the FortiGate API -## Fortigate setup +## FortiGate set up -Configure the Fortigate with a USERNAME API user and assign its minimum rights profile : +Configure the FortiGate with a USERNAME API user and assign its minimum rights profile: ```text config system accprofile @@ -55,11 +49,11 @@ fortigate: {% configuration %} host: - description: The IP address of the Fortigate device. + description: The IP address of the FortiGate device. required: true type: string username: - description: The username of the user that will connect to the Fortigate device. + description: The username of the user that will connect to the FortiGate device. required: true type: string api_key: @@ -72,7 +66,7 @@ devices: type: string {% endconfiguration %} -### Errors +## Errors If the rights of the profile are not sufficient, you will get the following error: From 3eea288934bfcf5998fd8be7af52a4af4ae31ec0 Mon Sep 17 00:00:00 2001 From: Daniel Lando Date: Wed, 17 Jul 2019 09:28:56 +0200 Subject: [PATCH 015/156] Added Zwave2Mqtt to hass mqtt discovery third-party tools (#9876) --- source/_docs/mqtt/discovery.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 8e3e6ec9fb5..70fca524001 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -226,6 +226,7 @@ The following software has built-in support for MQTT discovery: - [Arilux AL-LC0X LED controllers](https://github.com/mertenats/Arilux_AL-LC0X) - [room-assistant](https://github.com/mKeRix/room-assistant) (starting with 1.1.0) - [Zigbee2mqtt](https://github.com/koenkk/zigbee2mqtt) +- [Zwave2Mqtt](https://github.com/OpenZWave/Zwave2Mqtt) (starting with 2.0.1) ### Examples From fc8c1b1938038cf5e1019f2b3b2cd7ce0b8a4584 Mon Sep 17 00:00:00 2001 From: tomlut <10679300+tomlut@users.noreply.github.com> Date: Wed, 17 Jul 2019 17:44:05 +1000 Subject: [PATCH 016/156] Corected template example (#9875) The two templates under 'Considerations were identical'. --- source/_components/switch.template.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index ec083f7a53b..d98e57f85eb 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -76,7 +76,7 @@ switch: ## Considerations -If you are using the state of a platform that takes extra time to load, the Template Switch may get an `unknown` state during startup. This results in error messages in your log file until that platform has completed loading. If you use `is_state()` function in your template, you can avoid this situation. For example, you would replace {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} with this equivalent that returns `true`/`false` and never gives an unknown result: {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} +If you are using the state of a platform that takes extra time to load, the Template Switch may get an `unknown` state during startup. This results in error messages in your log file until that platform has completed loading. If you use `is_state()` function in your template, you can avoid this situation. For example, you would replace {% raw %}`{{ states.switch.source.state == 'on') }}`{% endraw %} with this equivalent that returns `true`/`false` and never gives an unknown result: {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %} ## Examples From 8c71761087a2ce5cbc7db221f077bce0ebb4fbc5 Mon Sep 17 00:00:00 2001 From: Leandro Loureiro Date: Wed, 17 Jul 2019 12:30:53 +0200 Subject: [PATCH 017/156] Add documentation for custom spotify service play_playlist (#9798) * adding documentation for custom service play_playlist_random_music * aligning documentation * improve description --- source/_components/spotify.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_components/spotify.markdown b/source/_components/spotify.markdown index 526a2e39353..6ed840a6ad5 100644 --- a/source/_components/spotify.markdown +++ b/source/_components/spotify.markdown @@ -117,6 +117,19 @@ which are part of the service. You can test this from the services control panel in the Home Assistant frontend. +## Services +Extra services besides the default ones in component [Media Player component](/components/media_player/). + +### Service `play_playlist` + +Play a Spotify playlist with an option to start on a random position of the playlist. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `media_content_id` | no | Spotify URI of playlist. Must be playlist kind of URI. +| `random_song` | yes | True to select random song at start, False to start from beginning. + + The above playlist example is a URI link to the "Reggae Infusions" playlist. [This support document from Spotify](https://support.spotify.com/us/article/sharing-music/) explains how to get this URI value to use for playlists in the Spotify component. From 583d685ea6aca31a49d515deb7ccc58310a34689 Mon Sep 17 00:00:00 2001 From: bouni Date: Wed, 17 Jul 2019 20:49:48 +0200 Subject: [PATCH 018/156] Add documentation of new login_method config option (#9881) * Add documentation of new login_method config option * :pencil2: Tweaks --- source/_components/mikrotik.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_components/mikrotik.markdown b/source/_components/mikrotik.markdown index 49199b8c8b2..1ab056dc995 100644 --- a/source/_components/mikrotik.markdown +++ b/source/_components/mikrotik.markdown @@ -53,6 +53,12 @@ password: description: The password of the given user account on the MikroTik device. required: true type: string +login_method: + description: The login method to use on the MikroTik device. The `plain` method is used by default, if you have an older RouterOS Version than 6.43, use `token` as the login method. + required: false + type: string + options: plain, token + default: plain port: description: RouterOS API port. required: false @@ -69,6 +75,15 @@ method: type: string {% endconfiguration %} +
+ + As of version 6.43 of RouterOS Mikrotik introduced a new login method (plain) in addition to the old login method (token). With Version 6.45.1 the old token login method got deprecated. + In order to support both login mechanisms, the new config option `login_method` has been introduced. If this option is not set, the component will try to login with the plain method first and the token method if that fails. + That can cause log entries on the router like `login failure for user homeassistant from 192.168.23.10 via api` but doesn't keep the component from working. + To get rid of these entries, set the `login_method` to `plain` for Routers with OS versions > 6.43 or `token` for routers with OS versions < 6.43. + +
+ ## Use a certificate To use SSL to connect to the API (via `api-ssl` instead of `api` service) further configuration is required at RouterOS side. You have to upload or generate a certificate and configure `api-ssl` service to use it. Here is an example of a self-signed certificate: From ce35c5a735a2dc0e109823118e06333c152b6c6d Mon Sep 17 00:00:00 2001 From: Markus Jankowski Date: Wed, 17 Jul 2019 21:42:58 +0200 Subject: [PATCH 019/156] Add HmIP-PCBS, HmIP-PCBS2, HmIP-PCBS-Bat to Homematic IP Cloud (#9883) * Add HmIP-PCBS, HmIP-PCBS2, HmIP-PCBS-Bat * :pencil2: Tweak --- source/_components/homematicip_cloud.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/homematicip_cloud.markdown b/source/_components/homematicip_cloud.markdown index 93b3c972e07..61cd819e32d 100644 --- a/source/_components/homematicip_cloud.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -138,6 +138,9 @@ authtoken: * Switch Actuator and Meter – flush-mount (*HmIP-FSM, -FSM16*) * Open Collector Module Receiver - 8x (*HmIP-MOD-OC8*) * Multi IO Box - 2x (*HmIP-MIOB*) + * Switch Circuit Board - 1x channels (*HmIP-PCBS*) + * Switch Circuit Board - 2x channels (*HmIP-PCBS2*) + * Printed Circuit Board Switch Battery (*HmIP-PCBS-BAT*) * homematicip_cloud.weather * Weather Sensor – basic (*HmIP-SWO-B*) From d680daeddde11827b686db9f7c5e06df894bf1a8 Mon Sep 17 00:00:00 2001 From: Petro31 <35082313+Petro31@users.noreply.github.com> Date: Wed, 17 Jul 2019 18:10:27 -0400 Subject: [PATCH 020/156] Update solaredge_local.markdown (#9878) * Update solaredge_local.markdown Remove sensors: section head. This is an incorrect section header. Adding the platform as a list item so new users can copy and paste into existing sensor sections. * :pencil2: Tweak --- source/_components/solaredge_local.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/solaredge_local.markdown b/source/_components/solaredge_local.markdown index a2f0129e713..2e146c5c9d1 100644 --- a/source/_components/solaredge_local.markdown +++ b/source/_components/solaredge_local.markdown @@ -58,11 +58,11 @@ In case you would like to convert the values for example to kWh instead of the d {% raw %} ```yaml -# Example configuration.yaml entry for template platform -sensors: - platform: template - sensors: - solaredge_energy_this_year_template: - value_template: '{{(states('sensor.solaredge_energy_this_year') | float / 1000) | round(2)}}' +# Example configuration.yaml entry for sensor template platform +sensor: + - platform: template + sensors: + solaredge_energy_this_year_template: + value_template: "{{ (states('sensor.solaredge_energy_this_year') | float / 1000) | round(2) }}" ``` {% endraw %} From 48630229caa7cd80a9d87ce0c83244f9b6adba10 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 17 Jul 2019 15:25:11 -0700 Subject: [PATCH 021/156] Mention 25k stars --- source/_posts/2019-07-17-release-96.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index 00ee3d2ea97..68238607c95 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -85,6 +85,8 @@ Big shout out to [@frenck] who has been doing a lot of clean up on the website. Last week [@balloob] showed a preview of the upcoming [Home Assistant Cast](/blog/2019/07/09/home-assistant-cast-preview/), a new interface for Home Assistant that runs on Chromecasts and Google Assistant devices with screens. +The [Home Assistant code repository on GitHub](https://github.com/home-assistant/home-assistant) has hit 25.000 stars! 🤩 + [@teachingbirds] has redone her Lovelace UI and it is looking fabulous!