From 4482a15a6d6323c76b293c8b2195c41a9b34f1c7 Mon Sep 17 00:00:00 2001 From: jgriff2 Date: Thu, 21 Feb 2019 01:12:03 -0800 Subject: [PATCH 01/74] Create remote_rpi_gpio.markdown Documentation for new platform remote_rpi_gpio --- remote_rpi_gpio.markdown | 127 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 remote_rpi_gpio.markdown diff --git a/remote_rpi_gpio.markdown b/remote_rpi_gpio.markdown new file mode 100644 index 00000000000..1a33e1fdabd --- /dev/null +++ b/remote_rpi_gpio.markdown @@ -0,0 +1,127 @@ +--- +layout: page +title: "Remote Raspberry Pi GPIO" +description: "Instructions on how to integrate the GPIO capability of a Remote Raspberry Pi into Home Assistant." +date: 2019-02-20 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: raspberry-pi.png +ha_category: + - DIY + - Binary Sensor + - Switch +ha_release: +ha_iot_class: "Local Push" +redirect_from: + - /components/binary_sensor.remote_rpi_gpio/ + - /components/switch.remote_rpi_gpio/ +--- + +The `rpi_gpio` component is the base for all related GPIO platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages. + +## {% linkable_title Binary Sensor %} + +The `remote_rpi_gpio` binary sensor platform allows you to read sensor values of the GPIOs of a [Remote Raspberry Pi](https://www.raspberrypi.org/). + +## {% linkable_title Configuration %} + +To use your Remote Raspberry Pi's GPIO in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: remote_rpi_gpio + ports: + 11: PIR Office + 12: PIR Bedroom +``` + +{% configuration %} +address: + description: IP Address of remote Raspberry Pi + required: true + type: string +ports: + description: List of used ports. + required: true + type: map + keys: + "port: name": + description: The port numbers (BCM mode pin numbers) and corresponding names. + required: true + type: string +invert_logic: + description: If `true`, inverts the output logic + required: false + type: boolean + default: "`false` (ACTIVE HIGH)" +pull_mode: + description: > + Type of internal pull resistor to use. + Options are `UP` - pull-up resistor and `DOWN` - pull-down resistor. + Pull-Up defaults to active LOW and Pull-down defaults to active HIGH. This can be adjusted with invert_logic + required: false + type: string + default: "`UP`" +{% endconfiguration %} + +For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. + +## {% linkable_title Switch %} + +The `remote_rpi_gpio` switch platform allows you to control the GPIOs of a [Remote Raspberry Pi](https://www.raspberrypi.org/). + +## {% linkable_title Configuration %} + +To use your Remote Raspberry Pi's GPIO in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: remote_rpi_gpio + address: 192.168.0.123 + ports: + 11: Fan Office + 12: Light Desk +``` + +{% configuration %} +address: + description: IP Address of remote Raspberry Pi + required: true + type: string +ports: + description: Array of used ports. + required: true + type: list + keys: + port: + description: Port numbers and corresponding names (GPIO #). + required: true + type: [integer, string] +invert_logic: + description: If true, inverts the output logic to ACTIVE LOW. + required: false + default: false + type: boolean +{% endconfiguration %} + +For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. + +

+Note that a pin managed by HASS is expected to be exclusive to HASS. +

+ +A common question is what does Port refer to, this number is the actual GPIO #, not the pin #. +For example, if you have a relay connected to pin 11 its GPIO # is 17. + +```yaml +# Example configuration.yaml entry +switch: + - platform: remote_rpi_gpio + address: 192.168.0.123 + ports: + 17: Speaker Relay +``` From 45f595764e571e4bfc5a9491d60525e3a5527cf7 Mon Sep 17 00:00:00 2001 From: Lewys Martin Date: Sun, 31 Mar 2019 15:21:53 +1100 Subject: [PATCH 02/74] Create sensor.solax --- source/_components/sensor.solax | 71 +++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 source/_components/sensor.solax diff --git a/source/_components/sensor.solax b/source/_components/sensor.solax new file mode 100644 index 00000000000..1bccb720cf0 --- /dev/null +++ b/source/_components/sensor.solax @@ -0,0 +1,71 @@ +# ha-solax +--- +layout: page +title: "Solax Sensor" +description: "Instructions on how to integrate Solax sensor within Home Assistant." +date: 2019-03-31 14:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: solax-logo.png +ha_category: Sensor +ha_release: 0.91 +ha_iot_class: Local Polling +--- + +The `solax` platform uses the [ha-solax](https://github.com/squishykid/ha-solax) API to allow you to get details from your Solax solar power setup and integrate these in your Home Assistant installation. + +## {% linkable_title Configuration %} + +To use the Solax sensors in your installation, add the following to your configuration.yaml file: + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: solax + ip_address: IP_ADDRESS +``` +{% endraw %} +{% configuration %} +### CONFIGURATION VARIABLES +ip_address: + description: The IP address of your Solax system. + required: true + type: string +{% endconfiguration %} + + +### {% linkable_title Full configuration sample %} + +{% raw %} +A full configuration entry would look like the sample below. + + +```yaml +# Example configuration.yaml entry +sensor: + - platform: solax + ip_address: 192.168.0.3 +``` +{% endraw %} + +If you would like to convert the values from multiple panels or view the total power the house is using, you can use the [template platform](/components/sensor.template/). + +{% raw %} +```yaml +# Example configuration.yaml entry for template platform +sensors: +- platform: template + sensors: + total_pv_power: + friendly_name: "Total PV Power" + unit_of_measurement: 'W' + value_template: "{{ (states('sensor.pv1_power') | float) + (states('sensor.pv2_power') | float) }}" + load_power: + friendly_name: "Load Power" + unit_of_measurement: 'W' + value_template: "{{ (states('sensor.power_now') | float) - (states('sensor.exported_power') | float) }}" +``` +{% endraw %} From 7c1ba702c3c4c41b546d9ffacc960edfba58c308 Mon Sep 17 00:00:00 2001 From: Lewys Martin Date: Sun, 31 Mar 2019 15:36:32 +1100 Subject: [PATCH 03/74] Update sensor.solax remove all caps line - not needed with {% configuration %} markdown --- source/_components/sensor.solax | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.solax b/source/_components/sensor.solax index 1bccb720cf0..9547c7e04c7 100644 --- a/source/_components/sensor.solax +++ b/source/_components/sensor.solax @@ -29,7 +29,7 @@ sensor: ``` {% endraw %} {% configuration %} -### CONFIGURATION VARIABLES + ip_address: description: The IP address of your Solax system. required: true From 6fd9cca290061c359f9b7fe986dad9b801bad65e Mon Sep 17 00:00:00 2001 From: Lewys Martin Date: Sun, 31 Mar 2019 15:47:04 +1100 Subject: [PATCH 04/74] Update and rename sensor.solax to sensor.solax.markdown --- source/_components/{sensor.solax => sensor.solax.markdown} | 1 - 1 file changed, 1 deletion(-) rename source/_components/{sensor.solax => sensor.solax.markdown} (99%) diff --git a/source/_components/sensor.solax b/source/_components/sensor.solax.markdown similarity index 99% rename from source/_components/sensor.solax rename to source/_components/sensor.solax.markdown index 9547c7e04c7..80a19306400 100644 --- a/source/_components/sensor.solax +++ b/source/_components/sensor.solax.markdown @@ -1,4 +1,3 @@ -# ha-solax --- layout: page title: "Solax Sensor" From 238db9f3310e17d926a8c08122e0671b51976727 Mon Sep 17 00:00:00 2001 From: Lewys Martin Date: Sun, 31 Mar 2019 16:00:29 +1100 Subject: [PATCH 05/74] Add files via upload --- source/images/supported_brands/solax-logo.png | Bin 0 -> 23738 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/supported_brands/solax-logo.png diff --git a/source/images/supported_brands/solax-logo.png b/source/images/supported_brands/solax-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a9dce20ba7b23afdfad3b522d4c190bee47dff6a GIT binary patch literal 23738 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 Date: Sun, 31 Mar 2019 16:32:44 +1100 Subject: [PATCH 06/74] Fix wording --- source/_components/sensor.solax.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.solax.markdown b/source/_components/sensor.solax.markdown index 80a19306400..44f8fbd51e6 100644 --- a/source/_components/sensor.solax.markdown +++ b/source/_components/sensor.solax.markdown @@ -2,7 +2,7 @@ layout: page title: "Solax Sensor" description: "Instructions on how to integrate Solax sensor within Home Assistant." -date: 2019-03-31 14:00 +date: 2019-03-31 04:20 sidebar: true comments: false sharing: true @@ -13,7 +13,7 @@ ha_release: 0.91 ha_iot_class: Local Polling --- -The `solax` platform uses the [ha-solax](https://github.com/squishykid/ha-solax) API to allow you to get details from your Solax solar power setup and integrate these in your Home Assistant installation. +The `solax` component connects home-assistant to Solax solar power inverters. Solax inverters may be connected to a home Wi-Fi network and expose a REST api. This component retrieves information such as photo voltaic power productionm, battery levels and power, and how much power is being fed back into the grid. ## {% linkable_title Configuration %} From f48b60396a2289e13f424f9b5e1fe5797e84f7dd Mon Sep 17 00:00:00 2001 From: Lewys Martin Date: Sun, 31 Mar 2019 16:38:48 +1100 Subject: [PATCH 07/74] typo --- source/_components/sensor.solax.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.solax.markdown b/source/_components/sensor.solax.markdown index 44f8fbd51e6..546d9e13a2e 100644 --- a/source/_components/sensor.solax.markdown +++ b/source/_components/sensor.solax.markdown @@ -13,7 +13,7 @@ ha_release: 0.91 ha_iot_class: Local Polling --- -The `solax` component connects home-assistant to Solax solar power inverters. Solax inverters may be connected to a home Wi-Fi network and expose a REST api. This component retrieves information such as photo voltaic power productionm, battery levels and power, and how much power is being fed back into the grid. +The `solax` component connects home-assistant to Solax solar power inverters. Solax inverters may be connected to a home Wi-Fi network and expose a REST api. This component retrieves information such as photo voltaic power production, battery levels and power, and how much power is being fed back into the grid. ## {% linkable_title Configuration %} From 0d2a3730ca2080c6d05ec86fe46d46b7d9214253 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 31 Mar 2019 18:53:19 +1100 Subject: [PATCH 08/74] Update source/_components/sensor.solax.markdown Co-Authored-By: CountParadox --- source/_components/sensor.solax.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.solax.markdown b/source/_components/sensor.solax.markdown index 546d9e13a2e..1d41cf5746d 100644 --- a/source/_components/sensor.solax.markdown +++ b/source/_components/sensor.solax.markdown @@ -13,7 +13,7 @@ ha_release: 0.91 ha_iot_class: Local Polling --- -The `solax` component connects home-assistant to Solax solar power inverters. Solax inverters may be connected to a home Wi-Fi network and expose a REST api. This component retrieves information such as photo voltaic power production, battery levels and power, and how much power is being fed back into the grid. +The `solax` component connects home-assistant to Solax solar power inverters. Solax inverters may be connected to a home Wi-Fi network and expose a REST API. This component retrieves information such as photovoltaic power production, battery levels and power, and how much power is being fed back into the grid. ## {% linkable_title Configuration %} From 507770053bb7f62bf71607c0ef92548160e41251 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 31 Mar 2019 18:53:29 +1100 Subject: [PATCH 09/74] Update source/_components/sensor.solax.markdown Co-Authored-By: CountParadox --- source/_components/sensor.solax.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/sensor.solax.markdown b/source/_components/sensor.solax.markdown index 1d41cf5746d..b21f1c015c6 100644 --- a/source/_components/sensor.solax.markdown +++ b/source/_components/sensor.solax.markdown @@ -19,7 +19,6 @@ The `solax` component connects home-assistant to Solax solar power inverters. So To use the Solax sensors in your installation, add the following to your configuration.yaml file: -{% raw %} ```yaml # Example configuration.yaml entry sensor: From 8843b2c415aef828595ec427e15b715563df5cdd Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 31 Mar 2019 18:53:39 +1100 Subject: [PATCH 10/74] Update source/_components/sensor.solax.markdown Co-Authored-By: CountParadox --- source/_components/sensor.solax.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/sensor.solax.markdown b/source/_components/sensor.solax.markdown index b21f1c015c6..815647708c8 100644 --- a/source/_components/sensor.solax.markdown +++ b/source/_components/sensor.solax.markdown @@ -25,7 +25,6 @@ sensor: - platform: solax ip_address: IP_ADDRESS ``` -{% endraw %} {% configuration %} ip_address: From 485c49580028278c66c46902bd73b357975ecee8 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 31 Mar 2019 18:54:05 +1100 Subject: [PATCH 11/74] Update source/_components/sensor.solax.markdown Co-Authored-By: CountParadox --- source/_components/sensor.solax.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/sensor.solax.markdown b/source/_components/sensor.solax.markdown index 815647708c8..9a64cfc803a 100644 --- a/source/_components/sensor.solax.markdown +++ b/source/_components/sensor.solax.markdown @@ -46,7 +46,6 @@ sensor: - platform: solax ip_address: 192.168.0.3 ``` -{% endraw %} If you would like to convert the values from multiple panels or view the total power the house is using, you can use the [template platform](/components/sensor.template/). From ff4b641ff94bb16708a3f30bbb6962b0f00b22f6 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 31 Mar 2019 18:54:10 +1100 Subject: [PATCH 12/74] Update source/_components/sensor.solax.markdown Co-Authored-By: CountParadox --- source/_components/sensor.solax.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/sensor.solax.markdown b/source/_components/sensor.solax.markdown index 9a64cfc803a..1ef2d17e5d0 100644 --- a/source/_components/sensor.solax.markdown +++ b/source/_components/sensor.solax.markdown @@ -36,7 +36,6 @@ ip_address: ### {% linkable_title Full configuration sample %} -{% raw %} A full configuration entry would look like the sample below. From d2d20e55bcf54d3e2cbbf3dd7f6ad6b39794a062 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 31 Mar 2019 18:54:17 +1100 Subject: [PATCH 13/74] Update source/_components/sensor.solax.markdown Co-Authored-By: CountParadox --- source/_components/sensor.solax.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/sensor.solax.markdown b/source/_components/sensor.solax.markdown index 1ef2d17e5d0..9c3e8d61bd4 100644 --- a/source/_components/sensor.solax.markdown +++ b/source/_components/sensor.solax.markdown @@ -26,7 +26,6 @@ sensor: ip_address: IP_ADDRESS ``` {% configuration %} - ip_address: description: The IP address of your Solax system. required: true From a3b094d49945decfc5fe8b25befc58b98bd13abf Mon Sep 17 00:00:00 2001 From: Lewys Martin Date: Sun, 31 Mar 2019 18:55:16 +1100 Subject: [PATCH 14/74] Rename sensor.solax.markdown to solax.markdown --- source/_components/{sensor.solax.markdown => solax.markdown} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/_components/{sensor.solax.markdown => solax.markdown} (100%) diff --git a/source/_components/sensor.solax.markdown b/source/_components/solax.markdown similarity index 100% rename from source/_components/sensor.solax.markdown rename to source/_components/solax.markdown From 33e0d136da5629aff90ba17b4846c84b944d393f Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 31 Mar 2019 10:11:07 +0200 Subject: [PATCH 15/74] :pencil2: Tweak --- source/_components/solax.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/solax.markdown b/source/_components/solax.markdown index 9c3e8d61bd4..18c0d21321f 100644 --- a/source/_components/solax.markdown +++ b/source/_components/solax.markdown @@ -25,6 +25,7 @@ sensor: - platform: solax ip_address: IP_ADDRESS ``` + {% configuration %} ip_address: description: The IP address of your Solax system. @@ -37,7 +38,6 @@ ip_address: A full configuration entry would look like the sample below. - ```yaml # Example configuration.yaml entry sensor: From bc0b298775b1c17cd92e596816ef3a23f324dcaa Mon Sep 17 00:00:00 2001 From: "Jardi A.M. Jordan" <1088732+jardiamj@users.noreply.github.com> Date: Mon, 15 Apr 2019 13:53:42 -0700 Subject: [PATCH 16/74] Added documentation for MCP23017 component: binary sensor and switch platforms. --- source/_components/mcp23017.markdown | 128 +++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 source/_components/mcp23017.markdown diff --git a/source/_components/mcp23017.markdown b/source/_components/mcp23017.markdown new file mode 100644 index 00000000000..af488631203 --- /dev/null +++ b/source/_components/mcp23017.markdown @@ -0,0 +1,128 @@ +--- +layout: page +title: "MCP23017 I2C GPIO expander" +description: "Instructions on how to integrate the MCP23017 GPIO pin expander with I2C interface into Home Assistant." +date: 2019-04-14 07:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: raspberry-pi.png +ha_category: + - DIY + - Binary Sensor + - Switch +ha_release: 0.92 +ha_iot_class: Local Polling +redirect_from: + - /components/binary_sensor.mcp23017/ + - /components/switch.mcp23017/ +--- + +The `mcp23017` component is the base for all related mcp23017 platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages. + +## {% linkable_title Binary Sensor %} + +The `mcp23017` binary sensor platform allows you to read sensor values from the I/O pins of your [MCP23017 I2C I/O expander](https://www.adafruit.com/product/732). + +The pin numbers are from 0 to 15 where: 0-7 correspond to port A (A1-A8) and 8-15 to port B (B1-B8). + +## {% linkable_title Configuration %} + +To use the I/O pins of an mcp23017 connected to and I2C bus of your Raspberry Pi as binary sensors, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: mcp23017 + i2c_address: 0x20 + pins: + 0: PIR Office + 1: PIR Bedroom +``` + +{% configuration %} +i2c_address: + description: i2c address of MCP23017 chip. + required: false + type: integer + default: "`0x20`" +pins: + description: List of used pins. + required: true + type: map + keys: + "pin: name": + description: The pin numbers (from 0 to 15) and corresponding names. + required: true + type: [integer, string] +scan_interval: + description: Interval to scan for sensor state changes in seconds. + required: false + type: integer + default: 15 +invert_logic: + description: If `true`, inverts the output logic to ACTIVE LOW. + required: false + type: boolean + default: "`false` (ACTIVE HIGH)" +pull_mode: + description: > + Type of internal pull resistor to use. + Options are `UP` - pull-up resistor and `DOWN` - pull-down resistor. + required: false + type: string + default: "`UP`" +{% endconfiguration %} + +NOTE: MCP23017 only has internal pull-up resistors, if you want to use pull-down you will have to wire your own pull-down resistors. + +For more details about the MCP23017 I2C I/O port expander you can find its datasheet here: [MCP23017](https://www.microchip.com/wwwproducts/en/MCP23017). + +## {% linkable_title Switch %} + +The `mcp23017` switch platform allows you to write to the I/O pins of your [MCP23017 I2C I/O expander](https://www.adafruit.com/product/732). + +The pin numbers are from 0 to 15 where: 0-7 correspond to port A (A1-A8) and 8-15 to port B (B1-B8). + +## {% linkable_title Configuration %} + +To use the I/O pins of an mcp23017 connected to and I2C bus of your Raspberry Pi as switches, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: mcp23017 + i2c_address: 0x20 + ports: + 11: Fan Office + 12: Light Desk +``` + +{% configuration %} +i2c_address: + description: i2c address of MCP23017 chip. + required: false + type: integer + default: "`0x20`" +ports: + description: Array of used pins. + required: true + type: list + keys: + port: + description: The pin numbers (from 0 to 15) and corresponding names. + required: true + type: [integer, string] +invert_logic: + description: If true, inverts the output logic to ACTIVE LOW. + required: false + default: false + type: boolean +{% endconfiguration %} + +For more details about the MCP23017 I2C I/O port expander you can find its datasheet here: [MCP23017](https://www.microchip.com/wwwproducts/en/MCP23017). + +

+Note that a pin managed by HASS is expected to be exclusive to HASS. +

From 66ae490ec220cfbd3b0fea74d36db3127948d03b Mon Sep 17 00:00:00 2001 From: "Jardi A.M. Jordan" <1088732+jardiamj@users.noreply.github.com> Date: Mon, 15 Apr 2019 15:50:01 -0700 Subject: [PATCH 17/74] Removed redirect_from: label. --- source/_components/mcp23017.markdown | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/_components/mcp23017.markdown b/source/_components/mcp23017.markdown index af488631203..8cc30cfefbe 100644 --- a/source/_components/mcp23017.markdown +++ b/source/_components/mcp23017.markdown @@ -14,9 +14,6 @@ ha_category: - Switch ha_release: 0.92 ha_iot_class: Local Polling -redirect_from: - - /components/binary_sensor.mcp23017/ - - /components/switch.mcp23017/ --- The `mcp23017` component is the base for all related mcp23017 platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages. From 17bd0f86bc79487ab35e5b3323771310646bc03e Mon Sep 17 00:00:00 2001 From: jgriff2 Date: Sun, 28 Apr 2019 13:10:51 -0700 Subject: [PATCH 18/74] Create remote_rpi_gpio.markdown --- source/_components/remote_rpi_gpio.markdown | 127 ++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 source/_components/remote_rpi_gpio.markdown diff --git a/source/_components/remote_rpi_gpio.markdown b/source/_components/remote_rpi_gpio.markdown new file mode 100644 index 00000000000..1a33e1fdabd --- /dev/null +++ b/source/_components/remote_rpi_gpio.markdown @@ -0,0 +1,127 @@ +--- +layout: page +title: "Remote Raspberry Pi GPIO" +description: "Instructions on how to integrate the GPIO capability of a Remote Raspberry Pi into Home Assistant." +date: 2019-02-20 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: raspberry-pi.png +ha_category: + - DIY + - Binary Sensor + - Switch +ha_release: +ha_iot_class: "Local Push" +redirect_from: + - /components/binary_sensor.remote_rpi_gpio/ + - /components/switch.remote_rpi_gpio/ +--- + +The `rpi_gpio` component is the base for all related GPIO platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages. + +## {% linkable_title Binary Sensor %} + +The `remote_rpi_gpio` binary sensor platform allows you to read sensor values of the GPIOs of a [Remote Raspberry Pi](https://www.raspberrypi.org/). + +## {% linkable_title Configuration %} + +To use your Remote Raspberry Pi's GPIO in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: remote_rpi_gpio + ports: + 11: PIR Office + 12: PIR Bedroom +``` + +{% configuration %} +address: + description: IP Address of remote Raspberry Pi + required: true + type: string +ports: + description: List of used ports. + required: true + type: map + keys: + "port: name": + description: The port numbers (BCM mode pin numbers) and corresponding names. + required: true + type: string +invert_logic: + description: If `true`, inverts the output logic + required: false + type: boolean + default: "`false` (ACTIVE HIGH)" +pull_mode: + description: > + Type of internal pull resistor to use. + Options are `UP` - pull-up resistor and `DOWN` - pull-down resistor. + Pull-Up defaults to active LOW and Pull-down defaults to active HIGH. This can be adjusted with invert_logic + required: false + type: string + default: "`UP`" +{% endconfiguration %} + +For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. + +## {% linkable_title Switch %} + +The `remote_rpi_gpio` switch platform allows you to control the GPIOs of a [Remote Raspberry Pi](https://www.raspberrypi.org/). + +## {% linkable_title Configuration %} + +To use your Remote Raspberry Pi's GPIO in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: remote_rpi_gpio + address: 192.168.0.123 + ports: + 11: Fan Office + 12: Light Desk +``` + +{% configuration %} +address: + description: IP Address of remote Raspberry Pi + required: true + type: string +ports: + description: Array of used ports. + required: true + type: list + keys: + port: + description: Port numbers and corresponding names (GPIO #). + required: true + type: [integer, string] +invert_logic: + description: If true, inverts the output logic to ACTIVE LOW. + required: false + default: false + type: boolean +{% endconfiguration %} + +For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. + +

+Note that a pin managed by HASS is expected to be exclusive to HASS. +

+ +A common question is what does Port refer to, this number is the actual GPIO #, not the pin #. +For example, if you have a relay connected to pin 11 its GPIO # is 17. + +```yaml +# Example configuration.yaml entry +switch: + - platform: remote_rpi_gpio + address: 192.168.0.123 + ports: + 17: Speaker Relay +``` From b5ffa4681ccddeeeec38df05234533d810e2d071 Mon Sep 17 00:00:00 2001 From: jgriff2 Date: Sun, 28 Apr 2019 13:11:05 -0700 Subject: [PATCH 19/74] Delete remote_rpi_gpio.markdown --- remote_rpi_gpio.markdown | 127 --------------------------------------- 1 file changed, 127 deletions(-) delete mode 100644 remote_rpi_gpio.markdown diff --git a/remote_rpi_gpio.markdown b/remote_rpi_gpio.markdown deleted file mode 100644 index 1a33e1fdabd..00000000000 --- a/remote_rpi_gpio.markdown +++ /dev/null @@ -1,127 +0,0 @@ ---- -layout: page -title: "Remote Raspberry Pi GPIO" -description: "Instructions on how to integrate the GPIO capability of a Remote Raspberry Pi into Home Assistant." -date: 2019-02-20 19:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: raspberry-pi.png -ha_category: - - DIY - - Binary Sensor - - Switch -ha_release: -ha_iot_class: "Local Push" -redirect_from: - - /components/binary_sensor.remote_rpi_gpio/ - - /components/switch.remote_rpi_gpio/ ---- - -The `rpi_gpio` component is the base for all related GPIO platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages. - -## {% linkable_title Binary Sensor %} - -The `remote_rpi_gpio` binary sensor platform allows you to read sensor values of the GPIOs of a [Remote Raspberry Pi](https://www.raspberrypi.org/). - -## {% linkable_title Configuration %} - -To use your Remote Raspberry Pi's GPIO in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: remote_rpi_gpio - ports: - 11: PIR Office - 12: PIR Bedroom -``` - -{% configuration %} -address: - description: IP Address of remote Raspberry Pi - required: true - type: string -ports: - description: List of used ports. - required: true - type: map - keys: - "port: name": - description: The port numbers (BCM mode pin numbers) and corresponding names. - required: true - type: string -invert_logic: - description: If `true`, inverts the output logic - required: false - type: boolean - default: "`false` (ACTIVE HIGH)" -pull_mode: - description: > - Type of internal pull resistor to use. - Options are `UP` - pull-up resistor and `DOWN` - pull-down resistor. - Pull-Up defaults to active LOW and Pull-down defaults to active HIGH. This can be adjusted with invert_logic - required: false - type: string - default: "`UP`" -{% endconfiguration %} - -For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. - -## {% linkable_title Switch %} - -The `remote_rpi_gpio` switch platform allows you to control the GPIOs of a [Remote Raspberry Pi](https://www.raspberrypi.org/). - -## {% linkable_title Configuration %} - -To use your Remote Raspberry Pi's GPIO in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -switch: - - platform: remote_rpi_gpio - address: 192.168.0.123 - ports: - 11: Fan Office - 12: Light Desk -``` - -{% configuration %} -address: - description: IP Address of remote Raspberry Pi - required: true - type: string -ports: - description: Array of used ports. - required: true - type: list - keys: - port: - description: Port numbers and corresponding names (GPIO #). - required: true - type: [integer, string] -invert_logic: - description: If true, inverts the output logic to ACTIVE LOW. - required: false - default: false - type: boolean -{% endconfiguration %} - -For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. - -

-Note that a pin managed by HASS is expected to be exclusive to HASS. -

- -A common question is what does Port refer to, this number is the actual GPIO #, not the pin #. -For example, if you have a relay connected to pin 11 its GPIO # is 17. - -```yaml -# Example configuration.yaml entry -switch: - - platform: remote_rpi_gpio - address: 192.168.0.123 - ports: - 17: Speaker Relay -``` From 25c026681830e5768ff36c686ec6695ea518f498 Mon Sep 17 00:00:00 2001 From: jgriff2 Date: Sun, 28 Apr 2019 13:15:27 -0700 Subject: [PATCH 20/74] Update remote_rpi_gpio.markdown --- source/_components/remote_rpi_gpio.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_components/remote_rpi_gpio.markdown b/source/_components/remote_rpi_gpio.markdown index 1a33e1fdabd..e5fe106fe08 100644 --- a/source/_components/remote_rpi_gpio.markdown +++ b/source/_components/remote_rpi_gpio.markdown @@ -38,6 +38,18 @@ binary_sensor: 12: PIR Bedroom ``` +or + +```yaml +# Example configuration.yaml entry +remote_rpi_gpio: + host: 10.0.1.9 + binary_sensors: + 6: Pin6 + switches: + 4: Pin4 +``` + {% configuration %} address: description: IP Address of remote Raspberry Pi From 6c0aaf8a4e4d753f2109c98e2ea971b07c3f9f02 Mon Sep 17 00:00:00 2001 From: Jardi Martinez <1088732+jardiamj@users.noreply.github.com> Date: Tue, 7 May 2019 16:00:08 -0700 Subject: [PATCH 21/74] Update mcp23017.markdown --- source/_components/mcp23017.markdown | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/source/_components/mcp23017.markdown b/source/_components/mcp23017.markdown index 8cc30cfefbe..b5b9ca0338e 100644 --- a/source/_components/mcp23017.markdown +++ b/source/_components/mcp23017.markdown @@ -91,7 +91,7 @@ To use the I/O pins of an mcp23017 connected to and I2C bus of your Raspberry Pi switch: - platform: mcp23017 i2c_address: 0x20 - ports: + pins: 11: Fan Office 12: Light Desk ``` @@ -119,7 +119,3 @@ invert_logic: {% endconfiguration %} For more details about the MCP23017 I2C I/O port expander you can find its datasheet here: [MCP23017](https://www.microchip.com/wwwproducts/en/MCP23017). - -

-Note that a pin managed by HASS is expected to be exclusive to HASS. -

From 611df65d75bb7ccc8912543ab9f27fcefc3ea2ad Mon Sep 17 00:00:00 2001 From: Jerry Chong Date: Tue, 30 Apr 2019 16:48:10 +0800 Subject: [PATCH 22/74] Updated sesame component docs --- source/_components/sesame.markdown | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/source/_components/sesame.markdown b/source/_components/sesame.markdown index d040299e97d..ec1af65421a 100644 --- a/source/_components/sesame.markdown +++ b/source/_components/sesame.markdown @@ -21,23 +21,20 @@ The `sesame` platform allows you to control your [Sesame](https://candyhouse.co/ Your Sesame needs to be paired with a mobile device running the app in *virtual station* mode, or a standalone [Wi-Fi Access Point](https://candyhouse.co/collections/frontpage/products/wi-fi-access-point). +You will also need to generate an API key from [my.candyhouse.co](https://my.candyhouse.co/#/credentials). + Once you have remote access enabled using one of the above AND the Integration - cloud option enabled on the Sesame app for that lock settings, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry lock: - platform: sesame - email: YOUR_E_MAIL_ADDRESS - password: YOUR_PASSWORD + api_key: YOUR_API_KEY ``` {% configuration %} -email: - description: The email address for your Sesame account. - required: true - type: string -password: - description: The password for your Sesame account. +api_key: + description: The API key for your Sesame account. required: true type: string {% endconfiguration %} From 2901029d10508d9c2d0cb73d52c6c5d35f4c3dc8 Mon Sep 17 00:00:00 2001 From: jgriff2 Date: Thu, 9 May 2019 22:20:38 -0700 Subject: [PATCH 23/74] Update source/_components/remote_rpi_gpio.markdown Co-Authored-By: Klaas Schoute --- source/_components/remote_rpi_gpio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/remote_rpi_gpio.markdown b/source/_components/remote_rpi_gpio.markdown index e5fe106fe08..e007f2e2eff 100644 --- a/source/_components/remote_rpi_gpio.markdown +++ b/source/_components/remote_rpi_gpio.markdown @@ -13,7 +13,7 @@ ha_category: - Binary Sensor - Switch ha_release: -ha_iot_class: "Local Push" +ha_iot_class: Local Push redirect_from: - /components/binary_sensor.remote_rpi_gpio/ - /components/switch.remote_rpi_gpio/ From 0f37cbda36f30b71f5b33d04cc84d34bab503436 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Fri, 10 May 2019 11:19:57 +0200 Subject: [PATCH 24/74] :pencil2: Remove redirect_from --- source/_components/remote_rpi_gpio.markdown | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/_components/remote_rpi_gpio.markdown b/source/_components/remote_rpi_gpio.markdown index e007f2e2eff..9cc1eef6b6b 100644 --- a/source/_components/remote_rpi_gpio.markdown +++ b/source/_components/remote_rpi_gpio.markdown @@ -14,9 +14,6 @@ ha_category: - Switch ha_release: ha_iot_class: Local Push -redirect_from: - - /components/binary_sensor.remote_rpi_gpio/ - - /components/switch.remote_rpi_gpio/ --- The `rpi_gpio` component is the base for all related GPIO platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages. From b3da86795f55eaac2d7083f2d0c22708e69d48c9 Mon Sep 17 00:00:00 2001 From: Tungsteno74 Date: Thu, 16 May 2019 09:05:52 +0200 Subject: [PATCH 25/74] Add description to solve self-signed access certificate error (#9457) * error about self-signed access certificate Same for self-signed certificate: https://community.home-assistant.io/t/homeassistan-doesnt-read-letsencrypt-certificate/3308 * Minor changes --- .../certificates/tls_self_signed_certificate.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown index c4f7c536741..5efe94ec42e 100644 --- a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown +++ b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown @@ -44,4 +44,11 @@ http: A restart of Home Assistant is required for the changes to take effect. +If you get any log error about *ssl_key* or *ssl_certificate* that is **not a file for dictionary value** when run Home Assistant, you need to change owner or access permission of the `.pem` files as following: + +```bash +$ sudo chown homeassistant:homeassistant certificate.pem privkey.pem +$ sudo chmod 755 certificate.pem privkey.pem +``` + A tutorial "[Working with SSL Certificates, Private Keys and CSRs](https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs)" could give you some insight about special cases. From d658e09e9e9778f974af58ad1608fdd251bedb0f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 16 May 2019 09:15:08 +0200 Subject: [PATCH 26/74] Updates --- source/_posts/2019-05-16-release-93.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_posts/2019-05-16-release-93.markdown b/source/_posts/2019-05-16-release-93.markdown index a17cfe0b8dd..d19deb64144 100644 --- a/source/_posts/2019-05-16-release-93.markdown +++ b/source/_posts/2019-05-16-release-93.markdown @@ -28,6 +28,11 @@ If you are a Nest user, we have some sad news: Google announced that they are [s As always, this release is accompanied by [a new episode of the Home Assistant podcast](https://hasspodcast.io/ha050/). Rohan and Phil discuss the new release, the Nest API and a lot more. This episode is their 50th episode already, congratulations on this milestone! +Pascal has updated the way we are building Hass.io. It is now keeping the build up to date while we develop Home Assistant, which means that the Hass.io build was ready before the release blog post was up! + + + ## {% linkable_title Home Assistant 1.0 %} As we mentioned in [our updated plans post](/blog/2019/05/03/update-from-the-field/), we're working hard on Home Assistant 1.0. Over the next releases we will work on polishing the UI, the backend architecture, and everything in between. @@ -154,6 +159,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - platform: sesame api_key: !secret sesame_api_key ``` +- __Z-Wave__ - Not a breaking change perse, just a note: Open Z-Wave has released version 1.6. The configuration files are not compatible with Open Z-Wave 1.4, the version that we are currently using. Don't copy config files over! We're waiting for Open Z-Wave Python bindings to update before we can update our code. ## {% linkable_title Beta Fixes %} From 948c19a607557dd37cb8119429bd6ed65fa340b2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 16 May 2019 17:05:08 +0200 Subject: [PATCH 27/74] Update blog post --- source/_posts/2019-05-08-nest-data-bye-bye.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_posts/2019-05-08-nest-data-bye-bye.markdown b/source/_posts/2019-05-08-nest-data-bye-bye.markdown index 9a070545e14..7387fa3fe22 100644 --- a/source/_posts/2019-05-08-nest-data-bye-bye.markdown +++ b/source/_posts/2019-05-08-nest-data-bye-bye.markdown @@ -11,6 +11,12 @@ categories: Public-Service-Announcement og_image: /images/blog/2019-05-nest-data-bye-bye/notice.png --- +**Update May 16:** Nest just announced [in a blog post](https://blog.google/products/google-nest/updates-works-with-nest/) that they changed their plan. It will still retire the Works with Nest program at the end of August, but it will no longer cut off existing users of the API. It will however still stop accepting new users at the end of August. + +Currently each Home Assistant user is required to create their own developer account to configure their Nest integration. We will reach out to Nest to see if we can become a partner so that users joining Home Assistant after August can still use Nest. + +--- + Sigh. Another one. This time it's not a small one either: Nest is disabling their APIs. We already saw [the writing on the wall in January](/blog/2019/01/24/nest-cannot-access-data/), but now [it's official](https://developers.nest.com/): Google announced that the Nest API will be turned off at the end of August, 2019. This means that in a little over three months, you will no longer be able to get your own data, that Google has collected in your home, and use it like you see fit. From 8a9fbc1feec26ee8a71ce8543238a41e058a16e3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 16 May 2019 17:08:51 +0200 Subject: [PATCH 28/74] Update title --- source/_posts/2019-05-08-nest-data-bye-bye.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-05-08-nest-data-bye-bye.markdown b/source/_posts/2019-05-08-nest-data-bye-bye.markdown index 7387fa3fe22..ce0a0a5886e 100644 --- a/source/_posts/2019-05-08-nest-data-bye-bye.markdown +++ b/source/_posts/2019-05-08-nest-data-bye-bye.markdown @@ -1,6 +1,6 @@ --- layout: post -title: "Nest to turn off their API" +title: "[Update: new users only] Nest to turn off their API" description: "Nest has announced that they will shut down their API in August, no longer allowing you to access your data." date: 2019-05-08 00:01:00 date_formatted: "May 8, 2019" From 02fa6c858b44297baa1f52b78e8fafb77418ed37 Mon Sep 17 00:00:00 2001 From: Bogdan Alexe Date: Thu, 16 May 2019 22:24:58 +0300 Subject: [PATCH 29/74] Update sesame documentation (#9467) --- source/_components/sesame.markdown | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/source/_components/sesame.markdown b/source/_components/sesame.markdown index 9502fd58853..534f22473b2 100644 --- a/source/_components/sesame.markdown +++ b/source/_components/sesame.markdown @@ -28,18 +28,12 @@ Once you have remote access enabled using one of the above AND the Integration - # Example configuration.yaml entry lock: - platform: sesame - email: YOUR_E_MAIL_ADDRESS - password: YOUR_PASSWORD + apy_key: YOUR_SESAPE_API_KEY ``` {% configuration %} -email: - description: The email address for your Sesame account. - required: true - type: string -password: - description: The password for your Sesame account. +apy_key: + description: Api Key obtained from the Sesame account required: true type: string {% endconfiguration %} - From dffecead050e8e35d8d837abda7fbd7eea3fccee Mon Sep 17 00:00:00 2001 From: Erik-jan Riemers Date: Fri, 17 May 2019 00:09:22 +0200 Subject: [PATCH 30/74] Remove 24 link (#9469) --- source/lovelace/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/lovelace/index.markdown b/source/lovelace/index.markdown index 65e8f8753f9..20364d518e3 100644 --- a/source/lovelace/index.markdown +++ b/source/lovelace/index.markdown @@ -12,7 +12,7 @@ redirect_from: /components/lovelace/ Lovelace is the name of the Home Assistant user interface. It is a fast, customizable and powerful way for users to manage their homes, working both on mobile and desktop. - - [24 cards](https://www.home-assistant.io/lovelace/alarm-panel/) to place and configure as you like. + - 24 different cards to place and configure as you like. - UI Editor. A configuration UI to manage your Lovelace UI including live preview when editing cards. - Fast. Using a static config allows us to build up the UI once. - Customizable. From a01619a46bf276223aa530c745cbdde2fd611a60 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 17 May 2019 06:37:10 +0200 Subject: [PATCH 31/74] Release 93.1 --- _config.yml | 4 ++-- source/_posts/2019-05-16-release-93.markdown | 21 +++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 018bcd66b51..05a445c3601 100644 --- a/_config.yml +++ b/_config.yml @@ -139,8 +139,8 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 93 -current_patch_version: 0 -date_released: 2019-05-16 +current_patch_version: 1 +date_released: 2019-05-17 # 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/_posts/2019-05-16-release-93.markdown b/source/_posts/2019-05-16-release-93.markdown index d19deb64144..bae22fde63f 100644 --- a/source/_posts/2019-05-16-release-93.markdown +++ b/source/_posts/2019-05-16-release-93.markdown @@ -24,7 +24,7 @@ It's time for our 0.93 release and it is a whopping cool one. It's a day later t Last week we also wrote about [our updated plans](/blog/2019/05/03/update-from-the-field/) for Home Assistant for this year. If you haven't read it yet, worth the read! -If you are a Nest user, we have some sad news: Google announced that they are [shutting down the Nest API](/blog/2019/05/08/nest-data-bye-bye/) at the end of August. This will cause Nest hardware to no longer work with Home Assistant (╯°□°)╯︵ ┻━┻ +If you are a Nest user, we have some sad news: Google announced that they are [shutting down the Nest API](/blog/2019/05/08/nest-data-bye-bye/) at the end of August. This will cause Nest hardware to no longer work with Home Assistant (╯°□°)╯︵ ┻━┻. **Update:** they have changed their plans, will only impact new users. As always, this release is accompanied by [a new episode of the Home Assistant podcast](https://hasspodcast.io/ha050/). Rohan and Phil discuss the new release, the Nest API and a lot more. This episode is their 50th episode already, congratulations on this milestone! @@ -99,6 +99,25 @@ For those of you that like to power down your Sonos, Home Assistant should now h - Add water_heater to geniushub, bump client library ([@zxdavb] - [#23384]) ([geniushub docs]) (new-platform) - New cover platform for ADS integration ([@carstenschroeder] - [#23377]) ([ads docs]) (new-platform) +## {% linkable_title Release 0.93.1 - May 17 %} + +- Fix Hassio-version for Azure Pipelines ([@pvizeli] - [#23895]) +- Update Honeywell warning ([@balloob] - [#23913]) ([honeywell docs]) +- Switch media player to SWITCH type ([@elupus] - [#23914]) ([google_assistant docs]) +- Fix problem with cameras that don't support time ([@karlkar] - [#23924]) ([onvif docs]) + +[#23895]: https://github.com/home-assistant/home-assistant/pull/23895 +[#23913]: https://github.com/home-assistant/home-assistant/pull/23913 +[#23914]: https://github.com/home-assistant/home-assistant/pull/23914 +[#23924]: https://github.com/home-assistant/home-assistant/pull/23924 +[@balloob]: https://github.com/balloob +[@elupus]: https://github.com/elupus +[@karlkar]: https://github.com/karlkar +[@pvizeli]: https://github.com/pvizeli +[google_assistant docs]: /components/google_assistant/ +[honeywell docs]: /components/honeywell/ +[onvif docs]: /components/onvif/ + ## {% linkable_title 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). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. From 2b8884f2dc23aeea9b4553fc048126f059a43e28 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Fri, 17 May 2019 09:38:14 +0200 Subject: [PATCH 32/74] Updated SET_AWAY_MODE and TURN_ON/OFF on Daikin Climate (#9370) (#9468) --- source/_components/daikin.markdown | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown index c01d5d8dff3..55079e1a5cf 100644 --- a/source/_components/daikin.markdown +++ b/source/_components/daikin.markdown @@ -61,10 +61,12 @@ hosts: The `daikin` climate platform integrates Daikin air conditioning systems into Home Assistant, enabling control of setting the following parameters: -- **mode** (cool, heat, dry, fan only or auto) -- **target temperature** -- **fan speed** -- **swing mode** +- [**mode**](https://www.home-assistant.io/components/climate#service-climateset_operation_mode) (cool, heat, dry, fan only or auto) +- [**target temperature**](https://www.home-assistant.io/components/climate#service-climateset_temperature) +- [**fan mode**](https://www.home-assistant.io/components/climate#service-climateset_fan_mode) (speed) +- [**swing mode**](https://www.home-assistant.io/components/climate#service-climateset_swing_mode) +- [**turn on/off**](https://www.home-assistant.io/components/climate#service-climateturn_on) +- [**away mode**](https://www.home-assistant.io/components/climate#service-climateset_away_mode) Current inside temperature is displayed. @@ -89,4 +91,4 @@ Daikin AirBase units exposes zones (typically rooms) that can be switched on/off

Zones with the name `-` will be ignored, just as the AirBase application is working. -

\ No newline at end of file +

From a0cc366830bf1807f2b821eb6ca2d8a3a03edfd9 Mon Sep 17 00:00:00 2001 From: Patrick Kishino Date: Fri, 17 May 2019 16:43:24 +0900 Subject: [PATCH 33/74] Fixed some bad spelling (#9470) --- source/_components/sesame.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sesame.markdown b/source/_components/sesame.markdown index c7d05b0062e..68c0852b70c 100644 --- a/source/_components/sesame.markdown +++ b/source/_components/sesame.markdown @@ -30,7 +30,7 @@ Once you have remote access enabled using one of the above AND the Integration - # Example configuration.yaml entry lock: - platform: sesame - api_key: YOUR_API_KEY + api_key: YOUR_SESAME_API_KEY ``` {% configuration %} From f1a986315b7b2f83ad21250cfbd3100476ca0fbd Mon Sep 17 00:00:00 2001 From: Vincent Masselis Date: Fri, 17 May 2019 12:51:05 +0200 Subject: [PATCH 34/74] Added a note relating to a Netgear Issue (#9471) See this issue https://github.com/MatMaul/pynetgear/issues/71 for additional informations --- source/_components/netgear.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/netgear.markdown b/source/_components/netgear.markdown index 1aade18f142..689bbc7b193 100644 --- a/source/_components/netgear.markdown +++ b/source/_components/netgear.markdown @@ -18,6 +18,10 @@ redirect_from: This platform allows you to detect presence by looking at connected devices to a [Netgear](http://www.netgear.com/) device. +

+A recent updates of Orbi APs introduced a bug which takes several hours to detects presence on your local network. The current workaround is to force this component to use the Orbi's API v2 by adding the `accesspoints:` node to your configuration. +

+ To use this device tracker in your installation, add the following to your `configuration.yaml` file: ```yaml From a31f6e444092286862c5f1d9ade010e3069af0b8 Mon Sep 17 00:00:00 2001 From: Federico Ariel Castagnini Date: Sat, 18 May 2019 04:00:47 -0700 Subject: [PATCH 35/74] fixing minor typo (#9475) --- source/_components/roomba.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/roomba.markdown b/source/_components/roomba.markdown index 4633d20ca54..ec0f7b30b6a 100644 --- a/source/_components/roomba.markdown +++ b/source/_components/roomba.markdown @@ -18,7 +18,7 @@ redirect_from: The `roomba` component allows you to control your [iRobot Roomba](http://www.irobot.com/For-the-Home/Vacuuming/Roomba.aspx) vacuum.

-This platform has only been tested with an iRobot Roomba 980 but should work find with any Wi-Fi enabled Roomba like the 690, 890 or the 960. +This platform has only been tested with an iRobot Roomba 980 but should work fine with any Wi-Fi enabled Roomba like the 690, 890 or the 960.

## {% linkable_title Configuration %} From aace4121d5bf0d8ed443470bf8ccb0a971697bef Mon Sep 17 00:00:00 2001 From: Andy Cordill Date: Sat, 18 May 2019 15:18:36 -0400 Subject: [PATCH 36/74] Added Epson ET-2650 to tested printers. (#9482) --- source/_components/epsonworkforce.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/epsonworkforce.markdown b/source/_components/epsonworkforce.markdown index 50cca9c1754..135767fa12f 100644 --- a/source/_components/epsonworkforce.markdown +++ b/source/_components/epsonworkforce.markdown @@ -67,6 +67,7 @@ Tested devices: - Epson WF3620 - Epson WF3640 - Epson EcoTank ET-77x0 +- Epson ET-2650 To make this module work you need to connect your printer to your LAN. The best is to navigate to the status page of the printer to check if it shows the page with the ink levels on the URL http:///PRESENTATION/HTML/TOP/PRTINFO.HTML From bfd23b12284666cb850d9bb016c1f4f9e2fcc718 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 18 May 2019 21:12:45 +0100 Subject: [PATCH 37/74] Fixed formatting (#9484) --- source/_components/meteoalarm.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/meteoalarm.markdown b/source/_components/meteoalarm.markdown index a8ec7771e5c..0dfd60cd43f 100644 --- a/source/_components/meteoalarm.markdown +++ b/source/_components/meteoalarm.markdown @@ -54,7 +54,7 @@ language: You will find an example below when the state is "on". -{% raw %} +``` attribution: Information provided by MeteoAlarm language: en-GB category: Met @@ -76,7 +76,7 @@ awareness_type: 8; forest-fire unit_of_measurement: friendly_name: meteoalarm icon: mdi:alert -{% endraw %} +``` There are a few awareness levels: @@ -89,6 +89,7 @@ There are a few awareness levels: Below you find an example of an automation. {% raw %} +```yaml automation: - alias: Alert me about weather warnings trigger: @@ -100,6 +101,7 @@ automation: data_template: title: '{{state_attr('binary_sensor.meteoalarm', 'headline')}}' message: "{{state_attr('binary_sensor.meteoalarm', 'description')}} is effective on {{state_attr('binary_sensor.meteoalarm', 'effective')}}" +``` {% endraw %}

From 9e4cc48e0de50e7e8a86654f0124bce3a8edbd6f Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Sun, 19 May 2019 00:13:35 +0200 Subject: [PATCH 38/74] :pencil2: Fix broken link to appdaemon (#9478) --- source/_docs/ecosystem/hadashboard.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/hadashboard.markdown b/source/_docs/ecosystem/hadashboard.markdown index 8f06247ee0d..9daa0518206 100755 --- a/source/_docs/ecosystem/hadashboard.markdown +++ b/source/_docs/ecosystem/hadashboard.markdown @@ -37,4 +37,4 @@ HADashboard is a modular, skinnable dashboard for [Home Assistant](/) that is in Glassic Theme

-For full installation instructions see the HADashboard section in the [AppDaemon Project Documentation](http://appdaemon.readthedocs.io/en/stable/DASHBOARD_INSTALL.html). If you're using Hassbian, then the [Hassbian scripts](https://github.com/home-assistant/hassbian-scripts/blob/dev/docs/appdaemon.md) make it easy to install AppDaemon. +For full installation instructions see the HADashboard section in the [AppDaemon Project Documentation](http://appdaemon.readthedocs.io/en/stable/DASHBOARD_INSTALL.html). If you're using Hassbian, then the [Hassbian scripts](https://github.com/home-assistant/hassbian-scripts/blob/dev/docs/suites/appdaemon.md) make it easy to install AppDaemon. From de3d650417bfbb91f0812a7d477fd7c9ac159b21 Mon Sep 17 00:00:00 2001 From: Dominik Palo Date: Sun, 19 May 2019 15:14:43 +0200 Subject: [PATCH 39/74] Fix link to the "DuckDNS suite" (#9487) --- source/_docs/ecosystem/certificates/lets_encrypt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index bcbecfaccce..024044abddc 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -10,7 +10,7 @@ footer: true ---

-If you are using Hass.io or Hassbian, do not use this guide. Instead, use the [DuckDNS add-on](/addons/duckdns/) for Hass.io or the [DuckDNS suite](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/duckdns.md) for Hassbian to automatically maintain a subdomain including HTTPS certificates via Let's Encrypt. +If you are using Hass.io or Hassbian, do not use this guide. Instead, use the [DuckDNS add-on](/addons/duckdns/) for Hass.io or the [DuckDNS suite](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/duckdns.md) for Hassbian to automatically maintain a subdomain including HTTPS certificates via Let's Encrypt.

From 8128db038603d57c4be113629e62fa5aa19da6e4 Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Sun, 19 May 2019 22:45:31 +0200 Subject: [PATCH 40/74] Add documentation for newly added types of Axis component https://github.com/home-assistant/home-assistant/pull/23312 --- source/_components/axis.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index 824fc2ada6a..0f68a2a300a 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -11,12 +11,14 @@ logo: axis.png ha_category: - Camera - Binary Sensor + - Switch ha_config_flow: true ha_release: 0.45 ha_iot_class: Local Push redirect_from: - /components/binary_sensor.axis/ - /components/camera.axis/ + - /components/switch.axis/ --- [Axis Communications](https://www.axis.com/) devices are surveillance cameras, speakers, access control and other security-related network connected hardware. Event API works with firmware 5.50 and newer. @@ -43,3 +45,11 @@ The following sensor types are supported: - Passive IR motion detection - Sound detection - Day/night mode +- Inputs and Supervised Inputs + +## {% linkable_title Switch %} + +The following controllable port types are supported: + +- Output +- Relay From bc8af817675bfb676553b6367d1a4c4c560a1045 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Sun, 19 May 2019 22:58:10 +0200 Subject: [PATCH 41/74] :pencil2: Tweak Redirect_from is only for existing pages --- source/_components/axis.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index 0f68a2a300a..b1f99ee480c 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -18,7 +18,6 @@ ha_iot_class: Local Push redirect_from: - /components/binary_sensor.axis/ - /components/camera.axis/ - - /components/switch.axis/ --- [Axis Communications](https://www.axis.com/) devices are surveillance cameras, speakers, access control and other security-related network connected hardware. Event API works with firmware 5.50 and newer. From 7509aaff11ce7e819c4e1ed490fbe39fe93eb181 Mon Sep 17 00:00:00 2001 From: bouni Date: Tue, 14 May 2019 09:49:12 +0200 Subject: [PATCH 42/74] extended spaceapi component documentation --- source/_components/spaceapi.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/spaceapi.markdown b/source/_components/spaceapi.markdown index 8f83f10ab3c..29de8f0f27c 100644 --- a/source/_components/spaceapi.markdown +++ b/source/_components/spaceapi.markdown @@ -114,6 +114,8 @@ sensors: type: entity_id {% endconfiguration %} +The list of sensors can be any sensor, not just temperature or humidity. + ## {% linkable_title Examples %} In this section you find some real-life examples of how to use this component. From 2de75f5f7994382ead7f39fb4aaac9778f82b2c6 Mon Sep 17 00:00:00 2001 From: bouni Date: Mon, 20 May 2019 12:09:11 +0200 Subject: [PATCH 43/74] added description how to set the location attribute of a sensor --- source/_components/spaceapi.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_components/spaceapi.markdown b/source/_components/spaceapi.markdown index 29de8f0f27c..beb7cd8d5e1 100644 --- a/source/_components/spaceapi.markdown +++ b/source/_components/spaceapi.markdown @@ -116,6 +116,18 @@ sensors: The list of sensors can be any sensor, not just temperature or humidity. +## Sensor specific location + +The [SpaceAPI specification](https://spaceapi.io/pages/docs.html) requires every sensor to provide a location. +In order to set a sensor specific location do the following steps: + +1. Go to Configuration -> Customization +2. Select the sensor entity +3. Pick "Other" from the attribute override pulldown +4. Set the attribute name to location and the attribute value to your desired location + +If no location is set, the location defined in the HA config is used. + ## {% linkable_title Examples %} In this section you find some real-life examples of how to use this component. From 1d6d713ee9eb7160d9f18e102d8a3b1253726e52 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Mon, 20 May 2019 13:12:22 +0200 Subject: [PATCH 44/74] :x: Remove epsonworkforce file (wrong location) (#9489) --- source/components/epsonworkforce.markdown | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 source/components/epsonworkforce.markdown diff --git a/source/components/epsonworkforce.markdown b/source/components/epsonworkforce.markdown deleted file mode 100644 index 9fa39a3d101..00000000000 --- a/source/components/epsonworkforce.markdown +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: page -title: "Epson Workforce" -description: "Instructions on how to setup Epson Workforce with Home Assistant." -date: 2019-04-24 07:00 -sidebar: true -comments: false -sharing: true -footer: true -ha_release: 0.92 ---- - -The Epson workforce integration. From f3c6ba044f4d66239dc29bf3e7ee91f21653497e Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Mon, 20 May 2019 13:27:24 +0200 Subject: [PATCH 45/74] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Google=20pub/sub=20-?= =?UTF-8?q?=20Filter=20is=20required=20(#9479)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :pencil: Google pub/sub - Filter is required * There is no default for required keys --- source/_components/google_pubsub.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_components/google_pubsub.markdown b/source/_components/google_pubsub.markdown index f644e671fe3..52413354f72 100644 --- a/source/_components/google_pubsub.markdown +++ b/source/_components/google_pubsub.markdown @@ -55,9 +55,8 @@ credentials_json: type: string filter: description: Filter domains and entities for Google Cloud Pub/Sub. - required: false + required: true type: map - default: Includes all entities from all domains keys: include_domains: description: List of domains to include (e.g., `light`). From 4fa6a00bababcce3623c5efc3e00e94658db1447 Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Wed, 22 May 2019 09:55:17 -0500 Subject: [PATCH 46/74] Remove 'include_non_clients' config option --- source/_components/plex.markdown | 6 ------ 1 file changed, 6 deletions(-) diff --git a/source/_components/plex.markdown b/source/_components/plex.markdown index 96897830e66..7f79d25cbc0 100644 --- a/source/_components/plex.markdown +++ b/source/_components/plex.markdown @@ -94,7 +94,6 @@ You can customize the Plex component by adding any of the variables below to you media_player: - platform: plex entity_namespace: 'plex' - include_non_clients: true scan_interval: 5 show_all_controls: false use_custom_entity_ids: true @@ -108,11 +107,6 @@ entity_namespace: description: "Prefix for entity ID's. Useful when using overlapping components (ex. Apple TV and Plex components when you have Apple TV's you use as Plex clients). Go from _media_player.playroom2_ to _media_player.plex_playroom_" required: false type: string -include_non_clients: - description: "Display non-recontrollable clients (ex. remote clients, PlexConnect Apple TV's)." - required: false - default: false - type: boolean scan_interval: description: "Amount in seconds in between polling for device’s current activity." required: false From 9c2bbfd1ec020e8ed10a6e7ba98184040d4397fa Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 22 May 2019 21:45:13 +0200 Subject: [PATCH 47/74] Update monitored_conditions (#9385) * Update monitored_conditions * Fix lint * Add missing colons --- source/_components/iqvia.markdown | 54 +++++++++++++++---------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/source/_components/iqvia.markdown b/source/_components/iqvia.markdown index cb04396076a..12969ba0c89 100644 --- a/source/_components/iqvia.markdown +++ b/source/_components/iqvia.markdown @@ -17,7 +17,7 @@ redirect_from: - /components/pollen/ --- -The `iqvia` sensor platform collects and displays allergy, asthma, and disease +The `iqvia` sensor platform collects and displays allergy, asthma and disease information (based on a U.S. ZIP code) from [IQVIA](https://www.iqvia.com/). Data measured includes: @@ -39,25 +39,39 @@ iqvia: - allergy_average_forecasted - allergy_index_today - allergy_index_tomorrow - - allergy_index_yesterday - asthma_average_forecasted - asthma_index_today - asthma_index_tomorrow - - asthma_index_yesterday - disease_average_forecasted - disease_index_today - - disease_index_yesterday ``` {% configuration %} - zip_code: - description: the U.S. ZIP code to gather data for (as a quoted string) - required: true - type: string - monitored_conditions: - description: the metric types to monitor; valid values are specified below - required: true - type: list +zip_code: + description: The U.S. ZIP code to gather data for (as a quoted string). + required: true + type: string +monitored_conditions: + description: The metric types to monitor. + required: true + type: list + keys: + allergy_average_forecasted: + description: "The average forecasted allergy index over the next 5 days." + allergy_index_today: + description: "The allergy index for today." + allergy_index_tomorrow: + description: "The allergy index for tomorrow." + asthma_average_forecasted: + description: "The average forecasted asthma index over the next 5 days." + asthma_index_today: + description: "The asthma index for today." + asthma_index_tomorrow: + description: "The asthma index for tomorrow." + disease_average_forecasted: + description: "The average forecasted cold/flu index over the next 5 days." + disease_index_today: + description: "The cold/flu index for today." {% endconfiguration %}

@@ -65,22 +79,6 @@ It is important to ensure the ZIP code is quoted if it starts with a 0. Unquoted ZIP codes that start with 0 will cause errors.

-## {% linkable_title Available Metrics %} - -The following metrics can be monitored: - -* Allergy Index: Forecasted Average (`allergy_average_forecasted`): the average forecasted allergy index over the next 5 days -* Allergy Index: Today (`allergy_index_today`): the allergy index for today -* Allergy Index: Tomorrow (`allergy_index_tomorrow`): the allergy index for tomorrow -* Allergy Index: Yesterday (`allergy_index_yesterday`): the allergy index for yesterday -* Asthma Index: Forecasted Average (`asthma_average_forecasted`): the average forecasted asthma index over the next 5 days -* Asthma Index: Today (`asthma_index_today`): the asthma index for today -* Asthma Index: Tomorrow (`asthma_index_tomorrow`): the asthma index for tomorrow -* Asthma Index: Yesterday (`asthma_index_yesterday`): the asthma index for yesterday -* Cold & Flu: Forecasted Average (`disease_average_forecasted`): the average forecasted cold/flu index over the next 5 days -* Cold & Flu Index: Today (`disease_index_today`): the cold/flu index for today -* Cold & Flu Index: Yesterday (`disease_index_yesterday`): the cold/flu index for yesterday - ## {% linkable_title Understanding the Indices %} Any index-related sensor will have a value between 0.0 and 12.0. The values From 9598d3cc8ccb39d505e8627a6f9a7227c23e2875 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 22 May 2019 22:44:58 +0200 Subject: [PATCH 48/74] Add UE46ES5500 (fixes #9495) (#9501) --- source/_components/samsungtv.markdown | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/source/_components/samsungtv.markdown b/source/_components/samsungtv.markdown index f1368c96cad..9ea5d6c3fdc 100644 --- a/source/_components/samsungtv.markdown +++ b/source/_components/samsungtv.markdown @@ -16,11 +16,13 @@ redirect_from: - /components/media_player.samsungtv/ --- -The `samsungtv` platform allows you to control a -[Samsung Smart TV](http://www.samsung.com/uk/consumer/tv-audio-video/televisions/). +The `samsungtv` platform allows you to control a [Samsung Smart TV](http://www.samsung.com/uk/consumer/tv-audio-video/televisions/). -When the TV is first connected, -you will need to accept Home Assistant on the TV to allow communication. +### {% linkable_title Setup %} + +When the TV is first connected, you will need to accept Home Assistant on the TV to allow communication. + +### {% linkable_title Configuration %} To add a TV to your installation without relying on the [discovery component](/components/discovery/), add the following to your `configuration.yaml` file: @@ -28,7 +30,7 @@ To add a TV to your installation without relying on the [discovery component](/c # Example configuration.yaml entry media_player: - platform: samsungtv - host: 192.168.0.10 + host: IP_ADDRESS ``` {% configuration %} @@ -100,6 +102,7 @@ Currently known supported models: - UE6199UXZG (port must be set to 8001, On/Off, Forward/Backward, Volume control, but no Play button) - UE65KS8005 (port must be set to 8001, On/Off, Forward/Backward, Volume are OK, but no Play button) - UE49KU6470 (port must be set to 8001, On/Off, Forward/Backward, Volume are OK, but no Play button) +- UE46ES5500 (partially supported, turn on doesn't works) Currently tested but not working models: @@ -116,16 +119,11 @@ Currently tested but not working models: - MU6125 - Unable to see state and unable to control (Tested on UE58MU6125 on port 8001 and 8801) - MU6300 - Port set to 8001, `pip3 install websocket-client` must be executed, turning on works, status not working reliably, turning off is not permanent (it comes back on) -None of the 2014 (H) and 2015 (J) model series (e.g., J5200) will work, -since Samsung have used a different (encrypted) type of interface for these. +None of the 2014 (H) and 2015 (J) model series (e.g., J5200) will work, since Samsung have used a different (encrypted) type of interface for these. -If your model is not on the list then give it a test, -if everything works correctly then add it to the list on +If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/samsungtv.markdown). -The first letter (U, P, L, H & K) represent the screen type, e.g., LED or -Plasma. The second letter represents the region, E is Europe, N is North America -and A is Asia & Australia. -The two numbers following that represent the screen size. +The first letter (U, P, L, H & K) represent the screen type, e.g., LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these first 4 characters before adding to the list. Changing channels can be done by calling the `media_player.play_media` service From 68b52b73655fb6290187b4b32b0297af03d6c6c4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 22 May 2019 23:03:47 +0200 Subject: [PATCH 49/74] Add Arch Linux package list (fixes #9455) (#9502) --- source/hassio/installation.markdown | 42 ++++++++++++++++++----------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index bef555bf76c..2ff644bea37 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -95,12 +95,14 @@ If you would like to test next release before anyone else, you can install the b 3. Select _System_ from the _Hass.io_ menu, then select _Join Beta Channel_ under _Hass.io supervisor_, then select _Reload_. 4. Select _Dashboard_ from the _Hass.io_ menu, and then select _Update_. -## {% linkable_title Alternative: install on generic Linux server %} +## {% linkable_title Alternative: install on a generic Linux host %} For advanced users, it is also possible to try Hass.io on your [Linux server or inside a virtual machine][linux]. -Examples given here are tested on Ubuntu, but the instructions should work as a guideline for installing on other Linux distrubutions. +Examples given here are tested on Ubuntu and Arch Linux, but the instructions should work as a guideline for installing on other Linux distrubutions. -This is the list of packages you need to have available on your system that will run Hass.io if you are using Debian/Ubuntu: +The packages you need to have available on your system that will run Hass.io may vary. + +### {% linkable_title Debian/Ubuntu %} - apparmor-utils - apt-transport-https @@ -113,6 +115,17 @@ This is the list of packages you need to have available on your system that will - socat - software-properties-common +### {% linkable_title Arch Linux %} + + - apparmor + - avahi + - ca-certificates + - curl + - dbus + - docker + - jq + - socat + You also need to have Docker-CE installed. There are well-documented procedures for installing Docker on Ubuntu at [Docker.com](https://docs.docker.com/install/linux/docker-ce/ubuntu/), you can find installation steps for your Linux distribution in the menu on the left.

@@ -120,22 +133,21 @@ You also need to have Docker-CE installed. There are well-documented procedures Be sure to install the official Docker-CE from the above listed URL.

-To perform the Hass.io installation, run the following commands: +To perform the Hass.io installation on Ubuntu, run the following commands: ```bash -sudo -i +$ sudo -i +# apt-get install software-properties-common +# add-apt-repository universe +# apt-get update +# apt-get install -y apparmor-utils apt-transport-https avahi-daemon ca-certificates curl dbus jq network-manager socat +# curl -fsSL get.docker.com | sh +``` -apt-get install software-properties-common +And to intall Hass.io the one below. That one is used also for other distributions. -add-apt-repository universe - -apt-get update - -apt-get install -y apparmor-utils apt-transport-https avahi-daemon ca-certificates curl dbus jq network-manager socat - -curl -fsSL get.docker.com | sh - -curl -sL "https://raw.githubusercontent.com/home-assistant/hassio-installer/master/hassio_install.sh" | bash -s +```bash +# curl -sL "https://raw.githubusercontent.com/home-assistant/hassio-installer/master/hassio_install.sh" | bash -s ```

From 5df1565f163167921e5c62170e50f755cc54c89a Mon Sep 17 00:00:00 2001 From: Claudio Barca Date: Wed, 22 May 2019 23:04:27 +0200 Subject: [PATCH 50/74] Add note for ARM architecture (#9497) * Add note for ARM architecture * Minor change --- source/_docs/installation/docker.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 01bf2e37a54..f9c7affff37 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -49,7 +49,8 @@ $ docker run --init -d --name="home-assistant" -v /PATH_TO_YOUR_CONFIG:/config - ``` When running Home Assistant in Docker on Windows, you may have some difficulty getting ports to map for routing (since the `--net=host` switch actually applies to the hypervisor's network interface). To get around this, you will need to add port proxy ipv4 rules to your local Windows machine, like so (Replacing '192.168.1.10' with whatever your Windows IP is, and '10.0.50.2' with whatever your Docker container's IP is): -``` + +```bash netsh interface portproxy add v4tov4 listenaddress=192.168.1.10 listenport=8123 connectaddress=10.0.50.2 connectport=8123 netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8123 connectaddress=10.0.50.2 connectport=8123 ``` @@ -125,7 +126,8 @@ The steps would be: - Install "Container Station" package on your Qnap NAS - Launch Container Station and move to "Create Container"-section - - Search image "homeassistant/home-assistant" with Docker hub and click on "Install" + - Search image "homeassistant/home-assistant" with Docker hub and click on "Install" + Make attention to CPU architecture of your NAS. For ARM CPU types the correct image is "homeassistant/armhf-homeassistant" - Choose "latest" version and click next - Choose a container-name you want (e.g., "homeassistant") - Click on "Advanced Settings" From e5ea97bc9f4bb6f84799500450e78585e444920a Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Thu, 23 May 2019 10:31:06 -0500 Subject: [PATCH 51/74] Remove scan interval config option --- source/_components/plex.markdown | 6 ------ 1 file changed, 6 deletions(-) diff --git a/source/_components/plex.markdown b/source/_components/plex.markdown index 96897830e66..d0c56a1f492 100644 --- a/source/_components/plex.markdown +++ b/source/_components/plex.markdown @@ -95,7 +95,6 @@ media_player: - platform: plex entity_namespace: 'plex' include_non_clients: true - scan_interval: 5 show_all_controls: false use_custom_entity_ids: true use_episode_art: true @@ -113,11 +112,6 @@ include_non_clients: required: false default: false type: boolean -scan_interval: - description: "Amount in seconds in between polling for device’s current activity." - required: false - default: 10 - type: int show_all_controls: description: "Forces all controls to display. Ignores dynamic controls (ex. show volume controls for client A but not for client B) based on detected client capabilities. This option allows you to override this detection if you suspect it to be incorrect." required: false From 0825525a01dc4efa9e6fc224b716425b4679d50a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 23 May 2019 11:03:31 -0700 Subject: [PATCH 52/74] Release 93.2 --- _config.yml | 4 ++-- source/_posts/2019-05-16-release-93.markdown | 25 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 05a445c3601..d5aa5c751ed 100644 --- a/_config.yml +++ b/_config.yml @@ -139,8 +139,8 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 93 -current_patch_version: 1 -date_released: 2019-05-17 +current_patch_version: 2 +date_released: 2019-05-22 # 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/_posts/2019-05-16-release-93.markdown b/source/_posts/2019-05-16-release-93.markdown index bae22fde63f..685225332f2 100644 --- a/source/_posts/2019-05-16-release-93.markdown +++ b/source/_posts/2019-05-16-release-93.markdown @@ -118,6 +118,31 @@ For those of you that like to power down your Sonos, Home Assistant should now h [honeywell docs]: /components/honeywell/ [onvif docs]: /components/onvif/ +## {% linkable_title Release 0.93.2 - May 22 %} + +- Fix auto version update Hass.io ([@pvizeli] - [#23935]) +- Bump pytraccar ([@ludeeus] - [#23939]) ([traccar docs]) +- Fixes issue with multiple alerts ([@ludeeus] - [#23945]) ([alert docs]) +- Setup integration dependencies before loading it ([@aerialls] - [#23957]) +- Make Discord payload data key not required ([@cyrosy] - [#23964]) ([discord docs]) +- upgrade broadlink library ([@Danielhiversen] - [#23966]) ([broadlink docs]) + +[#23935]: https://github.com/home-assistant/home-assistant/pull/23935 +[#23939]: https://github.com/home-assistant/home-assistant/pull/23939 +[#23945]: https://github.com/home-assistant/home-assistant/pull/23945 +[#23957]: https://github.com/home-assistant/home-assistant/pull/23957 +[#23964]: https://github.com/home-assistant/home-assistant/pull/23964 +[#23966]: https://github.com/home-assistant/home-assistant/pull/23966 +[@Danielhiversen]: https://github.com/Danielhiversen +[@aerialls]: https://github.com/aerialls +[@cyrosy]: https://github.com/cyrosy +[@ludeeus]: https://github.com/ludeeus +[@pvizeli]: https://github.com/pvizeli +[alert docs]: /components/alert/ +[broadlink docs]: /components/broadlink/ +[discord docs]: /components/discord/ +[traccar docs]: /components/traccar/ + ## {% linkable_title 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). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. From bad2816aadad35637924db8d82b3513d65625471 Mon Sep 17 00:00:00 2001 From: Joost Boomkamp Date: Fri, 24 May 2019 10:02:25 +0200 Subject: [PATCH 53/74] tiny typo (#9511) --- source/_docs/ecosystem/nginx_subdomain.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/nginx_subdomain.markdown b/source/_docs/ecosystem/nginx_subdomain.markdown index 64831bd8194..2c15ad8d7fb 100644 --- a/source/_docs/ecosystem/nginx_subdomain.markdown +++ b/source/_docs/ecosystem/nginx_subdomain.markdown @@ -64,7 +64,7 @@ You want another instance available at https://countryside.example.org You can either : * Create a new user, `bob`, to hold the configuration file in `/home/bob/.homeassistant/configuration.yaml` and run Home Assistant as this new user - * Create another configuration directory in `/home/alice/.homeassistan2/configuration.yaml` and run Home Assistant using `hass --config /home/alice/.homeassistant2/` + * Create another configuration directory in `/home/alice/.homeassistant2/configuration.yaml` and run Home Assistant using `hass --config /home/alice/.homeassistant2/` In both solution, change port number used by modifying `configuration.yaml` file. From 3130ec0653474996cc5c6e547f15fd4e740b3fe4 Mon Sep 17 00:00:00 2001 From: David Bonnes Date: Fri, 24 May 2019 22:52:05 +0100 Subject: [PATCH 54/74] Add geniushub sensors for issues (#9492) * Initial commit * :pencil2: Tweak * Initial commit --- source/_components/geniushub.markdown | 41 ++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/source/_components/geniushub.markdown b/source/_components/geniushub.markdown index 00789f70031..23aa01aa395 100644 --- a/source/_components/geniushub.markdown +++ b/source/_components/geniushub.markdown @@ -11,17 +11,47 @@ logo: geniushub.png ha_category: - Climate - Water heater + - Sensor + - Binary sensor ha_release: 0.92 ha_iot_class: Local Polling --- -The `geniushub` integration links Home Assistant with your Genius Hub (the hub does not have to be in the same network as HA). +The `geniushub` integration links Home Assistant with your Genius Hub for controlling its Zones and Devices. Currently, there is no support for Zone schedules. -Currently only **Radiator** and **Hot Water Temperature** zones are supported. Within HA, each **Radiator** zone will appear as a `Climate` device, and each **Hot Water Temperature** zone will appear as a `WaterHeater` device. +It uses the [geniushub-client](https://pypi.org/project/geniushub-client/) library. -The device's `operating_mode` can be set to one of `off`, `timer`, `on` (i.e. **Override** mode) or `eco`. The `eco` mode is a proxy for the **Footprint** mode and so is only available to **Radiator** zones that have room sensors. +### {% linkable_title Zones %} -Other properties are available via the device's state attributes, which includes a JSON data structure called `status`. For example, in the case of **Radiator** zones/`Climate` devices: +Each Zone controlled by your Genius hub will be exposed as either a: + + - `Climate` entity, for **Radiator** Zones, and + - `Water Heater`, for **Hot Water Temperature** Zones + +Other Zone types, such as **On / Off** Zones, are not currently supported. + +Each such entity will report back its mode, state, setpoint and current temperature; other properties are available via its attributes (see below). + +In addition, the entity's mode and setpoint can be changed. The entity's `operating_mode` can be set to one of `off`, `timer`, `on` (i.e. **Override** mode) or `eco`. The `eco` mode is a proxy for the **Footprint** mode and so is only available to **Radiator** Zones that have room sensors. + +### {% linkable_title Devices %} + +If the Hub is directly polled using the v3 API (see below), then each Device controlled by your Genius hub will be exposed as either a: + + - `Sensor` entity with a % battery, for any Device with a battery (e.g. a Genius Valve), or + - `Binary Sensor` entity with on/off state for any Device that is a switch (e.g. a Smart Plug) + +Each such entity will report back its primary state; in addition, `assigned_zone` and `last_comms` (last communications time) are available via the entity's attributes. + +### {% linkable_title Issues %} + +There are three `Sensor` entities that will indicate the number of **Errors**, **Warnings** and **Information** issues. + +Each such entity has a state attribute that will contain a list of any such issues. For example, `error_list`. + +### {% linkable_title State Attributes %} + +Other properties are available via each entity's state attributes. For example, in the case of **Radiator** Zones/`Climate` devices: ```json { @@ -35,7 +65,6 @@ Other properties are available via the device's state attributes, which includes } } } - ``` This data can be accessed in automations, etc. via a value template. For example: @@ -54,8 +83,6 @@ value_template: "{{ state_attr('climate.main_room', 'status').occupied }}" ``` {% endraw %} -Currently, there is no support for modifying schedules and neither do they appear in the state attributes. - ## {% linkable_title Configuration %} To add your Genius Hub into your Home Assistant installation, add one of the following to your `configuration.yaml` file. From ea232283b3c14a4c70924a4df64eb38edb7d0972 Mon Sep 17 00:00:00 2001 From: Jardi Martinez <1088732+jardiamj@users.noreply.github.com> Date: Sat, 25 May 2019 17:34:41 -0700 Subject: [PATCH 55/74] Update source/_components/mcp23017.markdown Co-Authored-By: Anders Melchiorsen --- source/_components/mcp23017.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/mcp23017.markdown b/source/_components/mcp23017.markdown index b5b9ca0338e..6eb6cf88fcc 100644 --- a/source/_components/mcp23017.markdown +++ b/source/_components/mcp23017.markdown @@ -16,7 +16,7 @@ ha_release: 0.92 ha_iot_class: Local Polling --- -The `mcp23017` component is the base for all related mcp23017 platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages. +The `mcp23017` component is the base for all related mcp23017 platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding sections. ## {% linkable_title Binary Sensor %} From 29f831a0fd51a16ee7e24e0c719de3e7d1073998 Mon Sep 17 00:00:00 2001 From: Jardi Martinez <1088732+jardiamj@users.noreply.github.com> Date: Sat, 25 May 2019 17:34:50 -0700 Subject: [PATCH 56/74] Update source/_components/mcp23017.markdown Co-Authored-By: Anders Melchiorsen --- source/_components/mcp23017.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/mcp23017.markdown b/source/_components/mcp23017.markdown index 6eb6cf88fcc..bad3108f9b1 100644 --- a/source/_components/mcp23017.markdown +++ b/source/_components/mcp23017.markdown @@ -26,7 +26,7 @@ The pin numbers are from 0 to 15 where: 0-7 correspond to port A (A1-A8) and 8-1 ## {% linkable_title Configuration %} -To use the I/O pins of an mcp23017 connected to and I2C bus of your Raspberry Pi as binary sensors, add the following to your `configuration.yaml` file: +To use the I/O pins of an mcp23017 connected to an I2C bus of your Raspberry Pi as binary sensors, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry From 1094afdcde75b16278526a6bf6b17ccf1025ad60 Mon Sep 17 00:00:00 2001 From: Jardi Martinez <1088732+jardiamj@users.noreply.github.com> Date: Sat, 25 May 2019 17:35:03 -0700 Subject: [PATCH 57/74] Update source/_components/mcp23017.markdown Co-Authored-By: Anders Melchiorsen --- source/_components/mcp23017.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/mcp23017.markdown b/source/_components/mcp23017.markdown index bad3108f9b1..b3584bf9a63 100644 --- a/source/_components/mcp23017.markdown +++ b/source/_components/mcp23017.markdown @@ -84,7 +84,7 @@ The pin numbers are from 0 to 15 where: 0-7 correspond to port A (A1-A8) and 8-1 ## {% linkable_title Configuration %} -To use the I/O pins of an mcp23017 connected to and I2C bus of your Raspberry Pi as switches, add the following to your `configuration.yaml` file: +To use the I/O pins of an mcp23017 connected to an I2C bus of your Raspberry Pi as switches, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry From b074788c96b08e0ad8e36d8c0eec01de6e49a5b1 Mon Sep 17 00:00:00 2001 From: "Jardi A. Martinez Jordan" <1088732+jardiamj@users.noreply.github.com> Date: Sat, 25 May 2019 18:18:59 -0700 Subject: [PATCH 58/74] Updated documentation for mcp23017 component. --- source/_components/mcp23017.markdown | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/source/_components/mcp23017.markdown b/source/_components/mcp23017.markdown index b3584bf9a63..f7c71b9119b 100644 --- a/source/_components/mcp23017.markdown +++ b/source/_components/mcp23017.markdown @@ -18,13 +18,15 @@ ha_iot_class: Local Polling The `mcp23017` component is the base for all related mcp23017 platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding sections. +For more details about the MCP23017 I2C I/O port expander you can find its datasheet here: [MCP23017](https://www.microchip.com/wwwproducts/en/MCP23017). + ## {% linkable_title Binary Sensor %} The `mcp23017` binary sensor platform allows you to read sensor values from the I/O pins of your [MCP23017 I2C I/O expander](https://www.adafruit.com/product/732). The pin numbers are from 0 to 15 where: 0-7 correspond to port A (A1-A8) and 8-15 to port B (B1-B8). -## {% linkable_title Configuration %} +### {% linkable_title Configuration %} To use the I/O pins of an mcp23017 connected to an I2C bus of your Raspberry Pi as binary sensors, add the following to your `configuration.yaml` file: @@ -74,15 +76,13 @@ pull_mode: NOTE: MCP23017 only has internal pull-up resistors, if you want to use pull-down you will have to wire your own pull-down resistors. -For more details about the MCP23017 I2C I/O port expander you can find its datasheet here: [MCP23017](https://www.microchip.com/wwwproducts/en/MCP23017). - ## {% linkable_title Switch %} The `mcp23017` switch platform allows you to write to the I/O pins of your [MCP23017 I2C I/O expander](https://www.adafruit.com/product/732). The pin numbers are from 0 to 15 where: 0-7 correspond to port A (A1-A8) and 8-15 to port B (B1-B8). -## {% linkable_title Configuration %} +### {% linkable_title Configuration %} To use the I/O pins of an mcp23017 connected to an I2C bus of your Raspberry Pi as switches, add the following to your `configuration.yaml` file: @@ -117,5 +117,3 @@ invert_logic: default: false type: boolean {% endconfiguration %} - -For more details about the MCP23017 I2C I/O port expander you can find its datasheet here: [MCP23017](https://www.microchip.com/wwwproducts/en/MCP23017). From 28aa919d0b67d303c0ba40ad2154a8116c0c8255 Mon Sep 17 00:00:00 2001 From: jgriff2 Date: Sun, 26 May 2019 14:54:40 -0700 Subject: [PATCH 59/74] Update remote_rpi_gpio.markdown --- source/_components/remote_rpi_gpio.markdown | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/source/_components/remote_rpi_gpio.markdown b/source/_components/remote_rpi_gpio.markdown index 9cc1eef6b6b..ab7112f0eb8 100644 --- a/source/_components/remote_rpi_gpio.markdown +++ b/source/_components/remote_rpi_gpio.markdown @@ -30,21 +30,16 @@ To use your Remote Raspberry Pi's GPIO in your installation, add the following t # Example configuration.yaml entry binary_sensor: - platform: remote_rpi_gpio + address:

ports: 11: PIR Office 12: PIR Bedroom -``` - -or - -```yaml -# Example configuration.yaml entry -remote_rpi_gpio: - host: 10.0.1.9 - binary_sensors: - 6: Pin6 - switches: - 4: Pin4 + +switch: + - platform: remote_rpi_gpio + address:
+ ports: + 4: Garage Relay ``` {% configuration %} From be34da7215bf5e1a1646b5c95a9686ad36abb260 Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Mon, 27 May 2019 06:22:58 -0400 Subject: [PATCH 60/74] Update Blink docs with new options (#9508) * Update example configs with new options * Minor changes --- source/_components/blink.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_components/blink.markdown b/source/_components/blink.markdown index 0232e4de8d4..483831ff3c7 100644 --- a/source/_components/blink.markdown +++ b/source/_components/blink.markdown @@ -73,6 +73,16 @@ sensors: 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` component will create the following platforms: From 13e2a2d0d57119c36557fbafbcbd01e3a03ae442 Mon Sep 17 00:00:00 2001 From: Honza Slesinger Date: Tue, 28 May 2019 14:15:22 +0200 Subject: [PATCH 61/74] Fixing service name to call (#9524) --- source/_components/python_script.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/python_script.markdown b/source/_components/python_script.markdown index b6ff87d258e..574a426b159 100644 --- a/source/_components/python_script.markdown +++ b/source/_components/python_script.markdown @@ -38,7 +38,7 @@ hass.bus.fire(name, { "wow": "from a Python script!" }) ``` - Start Home Assistant - - Call service `python_script/hello_world` with parameters + - Call service `python_script.hello_world` with parameters ```json { From f8349115ffc18b6a0f8bf9f119825b13e1597cd2 Mon Sep 17 00:00:00 2001 From: Dylan Date: Tue, 28 May 2019 08:16:45 -0400 Subject: [PATCH 62/74] adding icon_template example (#9527) --- .../binary_sensor.template.markdown | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index a5648394bca..71cb01894b7 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -215,3 +215,30 @@ binary_sensor: or is_state('binary_sensor.family_room_144', 'on') }} ``` {% endraw %} + +### {% linkable_title Change the icon when state changes %} + +This example demonstrates how to use `icon_template` to change the entity's +icon as its state changes, it evaluates the state of its own sensor and uses a +conditional statement to output the appropriate icon. + + +{% raw %} +```yaml +sun: +binary_sensor: + - platform: template + sensors: + sun_up: + entity_id: + - sun.sun + value_template: >- + {{ is_state("sun.sun", "above_horizon") }} + icon_template: >- + {% if is_state("binary_sensor.sun_up", "on") %} + mdi:weather-sunset-up + {% else %} + mdi:weather-sunset-down + {% endif %} +``` +{% endraw %} From dda0e1af18483e1c962926f31506d433fe4a6b49 Mon Sep 17 00:00:00 2001 From: Jef D Date: Tue, 28 May 2019 14:44:18 +0200 Subject: [PATCH 63/74] Link to where the parameters can typically be found (#9526) * Link to where the parameters can typically be found * Update link --- source/_docs/scripts/service-calls.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown index 6a706456f13..616ef6ffd3e 100644 --- a/source/_docs/scripts/service-calls.markdown +++ b/source/_docs/scripts/service-calls.markdown @@ -41,6 +41,8 @@ data: rgb_color: [255, 0, 0] ``` +A full list of the parameters for a service can be found on the documentation page of each component, in the same way as it's done for the `light.turn_on` [service](/components/light/#service-lightturn_on). + ### {% linkable_title Use templates to decide which service to call %} You can use [templating] support to dynamically choose which service to call. For example, you can call a certain service based on if a light is on. From 110d939767d53560ae3cc40074ca4bae10e71860 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Wed, 29 May 2019 10:18:13 +0200 Subject: [PATCH 64/74] =?UTF-8?q?=20=E2=9C=8F=EF=B8=8F=20Extra=20info=20fo?= =?UTF-8?q?r=20DB=20size=20sensor=20(#9528)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :pencil2: Extra info for a good working sensor * Minor change --- source/_components/sql.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/sql.markdown b/source/_components/sql.markdown index bf3ba0cfb08..a2ee887e342 100644 --- a/source/_components/sql.markdown +++ b/source/_components/sql.markdown @@ -131,6 +131,8 @@ sensor: #### {% linkable_title MariaDB/MySQL %} +Change `table_schema="hass"` to the name that you use as the database name, to ensure that your sensor will work properly. + {% raw %} ```yaml sensor: From ff5ce7bfec26050409a32f2067cb78bf5ea413a7 Mon Sep 17 00:00:00 2001 From: jeff-h Date: Wed, 29 May 2019 20:25:59 +1200 Subject: [PATCH 65/74] Add camera example. (#9521) * Add camera example. * :pencil2: Tweak * :pencil2: Tweak * Needs raw --- source/_lovelace/picture-entity.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_lovelace/picture-entity.markdown b/source/_lovelace/picture-entity.markdown index 792ea1ab73f..e375c25a9cb 100644 --- a/source/_lovelace/picture-entity.markdown +++ b/source/_lovelace/picture-entity.markdown @@ -132,3 +132,21 @@ state_image: "on": /local/bed_light_on.png "off": /local/bed_light_off.png ``` + +Displaying a live feed from an FFMPEG camera: + +{% raw %} +```yaml +type: picture-entity +entity: camera.backdoor +camera_view: live +tap_action: + action: call-service + service: camera.snapshot + service_data: + entity_id: camera.backdoor + filename: '/shared/backdoor-{{ now().strftime("%Y-%m-%d-%H%M%S") }}.jpg' +``` +{% endraw %} + +The filename needs to be a path that is writable by Home Assistant in your system. You may need to configure `whitelist_external_dirs` ([documentation](https://www.home-assistant.io/docs/configuration/basic/)). From 7733304ca79b2980bf25ae3f293e1cfe3a6a8854 Mon Sep 17 00:00:00 2001 From: Ian Date: Wed, 29 May 2019 09:27:42 -0500 Subject: [PATCH 66/74] Update travis.yml Recent compartmentalization of the HASS install has caused some things to break within Travis, and [this fix has been demonstrated to correct the issue](https://github.com/Apocrathia/home-assistant-config/pull/25). --- source/_docs/ecosystem/backup/backup_github.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/ecosystem/backup/backup_github.markdown b/source/_docs/ecosystem/backup/backup_github.markdown index 497b788520c..397b7cbc608 100644 --- a/source/_docs/ecosystem/backup/backup_github.markdown +++ b/source/_docs/ecosystem/backup/backup_github.markdown @@ -162,6 +162,7 @@ python: - "3.5" before_install: - mv travis_secrets.yaml secrets.yaml + - sudo apt-get install -y libudev-dev install: - pip3 install homeassistant script: From 538bf59b5c7ea05bcf6066c303845d87490890db Mon Sep 17 00:00:00 2001 From: Koen Ekelschot Date: Wed, 29 May 2019 20:23:57 +0200 Subject: [PATCH 67/74] Fix new log entry example --- source/_components/system_log.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_components/system_log.markdown b/source/_components/system_log.markdown index 79229d5cdc8..3096336ea0f 100644 --- a/source/_components/system_log.markdown +++ b/source/_components/system_log.markdown @@ -141,8 +141,9 @@ automation: to: 'on' action: service: system_log.write - message: 'Door opened!' - level: info + data_template: + message: 'Door opened!' + level: info ``` {% endraw %} From 89d2eac7135d7cd9c4588129d703557e30e9b2b7 Mon Sep 17 00:00:00 2001 From: IIIdefconIII Date: Wed, 29 May 2019 22:33:22 +0200 Subject: [PATCH 68/74] Update apache.markdown --- source/_docs/ecosystem/apache.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/apache.markdown b/source/_docs/ecosystem/apache.markdown index 92c27eb51a7..ec06ed63eb9 100644 --- a/source/_docs/ecosystem/apache.markdown +++ b/source/_docs/ecosystem/apache.markdown @@ -28,7 +28,7 @@ Enable [`mod_proxy_wstunnel`](https://httpd.apache.org/docs/2.4/mod/mod_proxy_ws $ sudo a2enmod proxy_wstunnel ``` -To be able to access to your Home Assistant instance by using https://home.example.org, add to following file to `/etc/httpd/conf/extra/` as `hass.conf` +To be able to access to your Home Assistant instance by using https://home.example.org, add the following file to `/etc/httpd/conf/extra/` as `hass.conf` ```text From 72a5b68b43d3a5abbb132cfb0fdc85a2f1a5ac06 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Wed, 29 May 2019 23:39:18 +0200 Subject: [PATCH 69/74] :pencil2: Tweak After this we will merge it --- source/_components/solax.markdown | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/source/_components/solax.markdown b/source/_components/solax.markdown index 18c0d21321f..180fee62291 100644 --- a/source/_components/solax.markdown +++ b/source/_components/solax.markdown @@ -8,8 +8,10 @@ comments: false sharing: true footer: true logo: solax-logo.png -ha_category: Sensor -ha_release: 0.91 +ha_category: + - Energy + - Sensor +ha_release: 0.94 ha_iot_class: Local Polling --- @@ -33,17 +35,7 @@ ip_address: type: string {% endconfiguration %} - -### {% linkable_title Full configuration sample %} - -A full configuration entry would look like the sample below. - -```yaml -# Example configuration.yaml entry -sensor: - - platform: solax - ip_address: 192.168.0.3 -``` +### {% linkable_title Optional template sensor %} If you would like to convert the values from multiple panels or view the total power the house is using, you can use the [template platform](/components/sensor.template/). From 5492da48660e9e6bfa00195256fef9c6ba39e1d9 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Wed, 29 May 2019 23:41:30 +0200 Subject: [PATCH 70/74] :pencil2: Tweak After this we will merge it --- source/_components/remote_rpi_gpio.markdown | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/source/_components/remote_rpi_gpio.markdown b/source/_components/remote_rpi_gpio.markdown index ab7112f0eb8..50f75828065 100644 --- a/source/_components/remote_rpi_gpio.markdown +++ b/source/_components/remote_rpi_gpio.markdown @@ -12,7 +12,7 @@ ha_category: - DIY - Binary Sensor - Switch -ha_release: +ha_release: 0.94 ha_iot_class: Local Push --- @@ -22,8 +22,6 @@ The `rpi_gpio` component is the base for all related GPIO platforms in Home Assi The `remote_rpi_gpio` binary sensor platform allows you to read sensor values of the GPIOs of a [Remote Raspberry Pi](https://www.raspberrypi.org/). -## {% linkable_title Configuration %} - To use your Remote Raspberry Pi's GPIO in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -77,8 +75,6 @@ For more details about the GPIO layout, visit the Wikipedia [article](https://en The `remote_rpi_gpio` switch platform allows you to control the GPIOs of a [Remote Raspberry Pi](https://www.raspberrypi.org/). -## {% linkable_title Configuration %} - To use your Remote Raspberry Pi's GPIO in your installation, add the following to your `configuration.yaml` file: ```yaml From e7e18cc24b96752c041f492503e6da7914feea80 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Wed, 29 May 2019 23:43:35 +0200 Subject: [PATCH 71/74] :pencil2: Tweak After this we will merge it --- source/_components/mcp23017.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/mcp23017.markdown b/source/_components/mcp23017.markdown index f7c71b9119b..2ac764d35ec 100644 --- a/source/_components/mcp23017.markdown +++ b/source/_components/mcp23017.markdown @@ -12,7 +12,7 @@ ha_category: - DIY - Binary Sensor - Switch -ha_release: 0.92 +ha_release: 0.94 ha_iot_class: Local Polling --- From 11e131ccfb83c9675041dfe701ecf4ab2b480ebf Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Wed, 29 May 2019 23:45:19 +0200 Subject: [PATCH 72/74] :pencil2: Tweak After this we will merge it --- source/_components/spaceapi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/spaceapi.markdown b/source/_components/spaceapi.markdown index beb7cd8d5e1..34d9add3420 100644 --- a/source/_components/spaceapi.markdown +++ b/source/_components/spaceapi.markdown @@ -116,7 +116,7 @@ sensors: The list of sensors can be any sensor, not just temperature or humidity. -## Sensor specific location +## {% linkable_title Sensor specific location %} The [SpaceAPI specification](https://spaceapi.io/pages/docs.html) requires every sensor to provide a location. In order to set a sensor specific location do the following steps: From fae2293b1552927bb15ff7621e3f3cdba46f882a Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Wed, 29 May 2019 23:53:13 +0200 Subject: [PATCH 73/74] :pencil2: Put something in a html note --- source/_components/mcp23017.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/mcp23017.markdown b/source/_components/mcp23017.markdown index 2ac764d35ec..4629de4e426 100644 --- a/source/_components/mcp23017.markdown +++ b/source/_components/mcp23017.markdown @@ -74,7 +74,9 @@ pull_mode: default: "`UP`" {% endconfiguration %} -NOTE: MCP23017 only has internal pull-up resistors, if you want to use pull-down you will have to wire your own pull-down resistors. +

+ MCP23017 only has internal pull-up resistors, if you want to use pull-down you will have to wire your own pull-down resistors. +

## {% linkable_title Switch %} From 5d99d95c0c87ea58d691c3919a88b127fc8f6715 Mon Sep 17 00:00:00 2001 From: Morten Trab Date: Thu, 30 May 2019 10:37:08 +0200 Subject: [PATCH 74/74] Add Repetier-Server component documentation (#9362) * Updated to newest developer version of Repetier platform * :pencil2: Tweak After this we will merge it * Added Repetier Logo file --- source/_components/repetier.markdown | 111 ++++++++++++++++++++ source/images/supported_brands/repetier.png | Bin 0 -> 27990 bytes 2 files changed, 111 insertions(+) create mode 100644 source/_components/repetier.markdown create mode 100755 source/images/supported_brands/repetier.png diff --git a/source/_components/repetier.markdown b/source/_components/repetier.markdown new file mode 100644 index 00000000000..15654ed411a --- /dev/null +++ b/source/_components/repetier.markdown @@ -0,0 +1,111 @@ +--- +layout: page +title: Repetier-Server Component +description: "Instructions how to add Repetier-Server sensors to Home Assistant." +date: 2019-05-01 +sidebar: true +comments: false +sharing: true +footer: true +logo: repetier.png +ha_category: + - Hub + - Sensor +featured: false +ha_release: 0.94 +ha_iot_class: Local Polling +--- + +[Repetier-Server](https://www.repetier-server.com/) is a 3D printer/CNC server, able to control multiple devices on the same server. +This component handles the main integration to the server. + +There is currently support for the following device types within Home Assistant: + +- Sensor + +## {% linkable_title Configuration %} + +```yaml +repetier: + - host: REPETIER_HOST + api_key: YOUR_API_KEY +``` + +{% configuration %} +repetier: + type: list + required: true + keys: + host: + description: The host IP or hostname of your Repetier-Server. + required: true + type: string + api_key: + description: API-key for the user used to connect to Repetier-Server + required: true + type: string + port: + description: The port used to connect to the host + required: false + type: integer + default: 3344 + sensors: + description: Configuration for the sensors. + required: false + type: map + keys: + monitored_conditions: + description: The sensors to activate. + type: list + default: all + keys: + "current_state": + description: Text of current state. + "extruder_temperature": + description: Temperatures of all available extruders. These will be displayed as `printer_name_extruder_N`. + "bed_temperature": + description: Temperatures of all available heated beds. These will be displayed as `printer_name_bed_N`. + "chamber_temperature": + description: Temperatures of all available heated chambers. These will be displayed as `printer_name_chamber_N`. + "current_job": + description: Returns percentage done of current job in state, and current job information as attributes. + "job_start": + description: Start timestamp of job start. + "job_end": + description: Estimated job end timestamp. +{% endconfiguration %} + +Example with multiple Repetier Servers: + +```yaml +repetier: + - host: REPETIER_HOST + api_key: YOUR_API_KEY + sensors: + monitored_conditions: + - 'current_state' + - 'current_job' + - host: REPETIER_HOST + api_key: YOUR_API_KEY + port: 3344 +``` + +If the Repetier-Server host is equipped with a web camera it is possible to add this as well. + +```yaml +camera: + - platform: mjpeg + name: Repetier + still_image_url: http://YOUR_REPETIER_HOST_IP:8080/?action=snapshot + mjpeg_url: http://YOUR_REPETIER_HOST_IP:8080/?action=stream +``` + +### {% linkable_title Retrieve API-key %} + +To generate the needed API-key do the following: + +* Go to your Repetier Server web-console +* Push the settings icon (the gear icon) +* Select User Profiles. +* Create a new user, deselect all options and click Create User. +* Edit the newly created user and take note of the API-key for this user, that's the one to use in the Home Assistant Settings diff --git a/source/images/supported_brands/repetier.png b/source/images/supported_brands/repetier.png new file mode 100755 index 0000000000000000000000000000000000000000..7cbba43ad45cdc70bc56f6c84f95c0013b2b45a2 GIT binary patch literal 27990 zcmeFZEBgNjFG?v~-t%bo-+_lGv0sU zjPrpH)aJVOUTdzo=9-&G6(wm@Btj%8C@54}83{EgDCp7G4+J>y6`iHDa40By5?P54 z8lG8)EAXD`JJ0Z^j?={-Y3s(UGLNB?ipYO!NMJ88=&54gH0K8*Y_@w}8De5fXj~#W zbOdr}zU^RfBF_&duPZ8~{5NVy@j!sYFH?5xnbXWoFwJOzcPOF;o`rXLOFO3&RfJ4a5DxyvkjreG<#xTS?@wA@?_u^?HQhxp-b1?Q6E7bqvrz$AQqm+H#> zzscA8U$fbpaVZcZ-Xwmbo3XmGCbZvACN$X3hH^3W_3B#N^BbJf=~|xBx$){gDJatw z%MX41NmUM;0jtJQ6ODa>Bd)7OEkQfYKW&F|e^{GYLNO@5cT-UzMO(<{(69W&c`pEI zcuZf~d9*BQxHKfR$8xbqXa?KnsXbe}bfs&sKVbSm>qRTcK=RFo&EvW`J5#LZec*vN zLZmiVFV!{|!C1;0^;UC{z>(%EYBBew5wEU}#d}BaZliAOp}&a0i7d(tm2%%nQr|$| z5<$^JuCl@n98y0^{p%6d1JCo#^Y#5h!M?MMrHP2=X{g;5?}N3pW`*!dR@D%7-F~4U;`3WIBepl z>{=33%gAiSyC9x(NbAgc$!@V7i{42GpAa@E!DA`CFPOu#+{5W|ui*E7cP2o%??BHg zc*+0?!|3I$uMGXRh8V}dya20?S{$7Wh160N0fUvU@0?D*GL6{nLE2Ooe-MnYflO$E zb$);w?*P^NfgS0+a@D~GViyR5g)R5v^XBXkVF%iy4JyQ#H;GjBm!nz8GtvJ(L!rQt z@3xYX)_Dn6-TgW5lZWvqV=kjcj08VKMO~o8k--dMXShPvhhSMYF8ru~%$HZfziyRI zK{pj5ZFP+qLV+6V+sWhu-AxUQ?u0)0Yay`-KG}D9;M;vxjjn7(dO2^|5)O3V=Kncz z5z(+__G4MUnd+I7IHhBg6{FjqKXOmk$0XI1Yp#+E{6i*Evqu=W^l`$CBD9_sN#UIi zVWr5`{D*M}6kq0n_uKKK8!v4V!RC8p0l8=dOjsIB;xYx6v6}5MQ;q#}C~SR5Vqjxx z>T%aF2*$VrF@#7Oum~Lpdq|Rl7tDLnDqC46RB-0SAT+)X9u@9oN?_2jMUsP~90o^e zuCd<+^}D$$;&J!EG-gF~3!LLPHY`n~t(+7yPX_Z0e)2sglttA+BwQrbg64Et;>}>L zdpZcXud5B3A1#;4D+ggHzCQ2irgCUGgea;6`f>ofRqnBi7P1HL`lK zKD%meZmQ*j`-2B_(0g)H^s?tVrD!?7M5*#72xQUS$pD3-Bt$BWs!GP(#j3u{k6ZVt zfum(pj)G|)Gg2Zb27`Df#^FgyRkJ~{&mdW~VP#6C zsaMP1k8%Bm`*p$i{B9~|@uAWksk$A0siK@=H)hpoj=zsV+#VBIEF(Y7ayU@5yP6vB z|MgE4@e!l>*$vxzh%Wx9;9V@QTyrr%poj-K+m1)7X`ypoWvsD32yOP+K$*++uZjkz z&u;c#Hzjm&y=T!bQ4CLq1$j3{LodpPh6YUp^#*3BRVLPzfRcjR&R7umcZ>kJAW6}> z@g_rlA851{Hd<5YtaIGQG#dp^nz^?WM24UV9819>{^wSM@l+v)y*SdQ3)KI?z7JIFs>WDKAc`abtfNCWQ$A8a zt|a!MQ&uVmhJLAr_t4;=>^$SZSWHTG@gUhxQbVO~B!an5d;mi5hW&@5T|Xaz)R628 zH~h79L}Fc5_H&9dBCo1y{CT7kMh*J0Behtjh|;wzyjD)iuco#${C*}O?K}O)>Eonm zfd#9^<an))ye2Der3nXA?E>I^#>Ik~TyQ1|9*L9KVlISz}@D>q^`htHjr z!vZ6Q_A4W96cY0QjN0Tl(#&G;_fN^!dE{S#VEtkHR-UC3>CW?`zL&^ z1q>f=7{_uSZ#bEu*ug%2s4K{G2(Mhc7wbMj204Za5NDbN6t!6Tm2+jNM1T#12?+^8 zGgaxE?RUios0sLXn32iZqK`TkzY?Q#16J#_5z4Lm7(g)=0>P~rw^APMH;AD8mp8r)OVrW=YLdqER;)=Uz+0#G( z66R#Ghc3#!>Nnx1c%4C*w@jA=^21gh{rE2FKupFLREm-v0O5YIB-=um@0ZCO?05*W z3#3sUNrY`e`2#HZ^P!e?zEaMAs5tBWG zdCy`8yFwvFrV95rU4i*2?A{VC^JD7AcbMZm@z=9urtrImb*I>_3khHP5$sjnL8rxgrMxDpx+O>mD+Abm?S(yg`Pf za4s5cF~Uz+>0hN#)tm*Oq32u5Zu{;&qaKYi;oz@L@;!;Vtp~C!*3SBTuO-MD8`S30 zorO+FLEbT`Uc*&(;M(4HD}FB-h$CL9x}t~Lx$2Ntj7*Y~+*)&J8xpndjf|>Jg;RXT}An~XX1+E-=xYRW_vgj@NA0Y$UVV{ zv@z8kTaB5naz$zgQRWbf`XPY6ApPYW<`weLWZ zUI1j3j$68G9XztzZ6(L@!A?U2yt3hySHd)t1Y!s@hf2i}YYA?Rca>dwlk~Z<8 zDq9jua;XmyQ>rR!X}Oz&tk$!BY*m<_XgId z!3`wYGZaX$YsnybV?cKR_frRShaCzR(4BC!{;(YWI!kY#Yd(2|iGD0Catwr3;l0j9 zWzh$Y5D*iE|5sU+dBEuXD&z779Cv`0QqK?UvP*X;F&(HG-?MK$*U~Tk0WQv}6pCE~ zE!*4Mg(j)`6+g`^7X2TcwY&E&`X9LLJx`~SRm&W;IBe1<4xWFsl$Avu-5OTfpl!IBI8;QC))C<#_d0l+bTlH*m< ztOptA`k_Gn3a;np5S!E|AO8Q4xDj_SPCV>2|11FZKmk~cW%wJ;SXpzI$RWEHr2_eE z81je%?{N*eufIfHezCn26-a*_-(O9ZNAY35-Ji?~qLfZ|;o&S@=n5m?f(ZADMn{j-;A5`z5>U_>HBs-UXtB34h_ zl$A(a+95vir zmvCxFfdaKP`1croYHc0|n?8S^eV$-py#%UkDSBt7r>D>VER`R=c%RdAf*qVnIiG%l z0E$;OMjAJn#1seGjoKPnyls!dhd1eIEP9RL_N$Pg$VRki`BCniVVJJI3aQe&ey8KCE3(ujhkX8{!& zDxJMSDm-Dtms)TdwC9DVRl>JL>B?&uQp( z9d;7#@nwj6WH^>fsMc6@9hBkpx0lb?Wq>O60jdOWCNfqkjd+BSiNI2>sX{hhZV=|n z!(9Hm_}?Bo+mYN8EdFY4*9$8RM>r`af*!}cJ_jP*gSr0DQhDzk9B>!UTnbSeHTc;* zFFyFH{0kPLMr?BbGPc2?Td5`T=~iX8;&{d8`uXSD%;Y3_Xfb>X=!ZJ!R}zk#1-npT zVH~QEoU@4(r`KuHPk~=nIoO6*ijBtW_Vj(yZcOFITOI3jV2Bnr}UOQXDd@CP%9h*}w5J5_WgG`cM@m zi;bPePM$mj+NQQwQ2~AJ(dD%PJ5jL=if#3v+dmq%2DJWf zpB5VXrY;+BKaReHHU%1O{T=|g-E_&vKF6ISoEDb|<9Z8{SZTLcw{-eGR}#_qJXADp z)WPVC*=a2WZ+wWK)t?PTV0WE0=jLKR)}7d{HauA75li_`YME!-R5v<+{+c4{hW^7U zK&^P{Hsc?FGaLStco#YV^H+bm%;Fy>a^n5vzhuy--mY+ts$1LJ_uq&f_CCWz#OJ2M z#OTtMNcFEmTSBQfrfh8F{!r$7@_wf;)F*_4)AxHInvliX-n!xGbcRLM*4DONbZeHA z;fhPWwTLqC1n{nxoYo7gQKVw#ZaD7rsx!D*<(w&C(>)Vh}H6bljTlJ-PHj(bYOZE50UpiR)!GC5nns{XZa$UtQ&{C6eS|X`)HOKszMW!IFpASpR8=)m`XRom(j2tm544 zmXF%!o#=CY+jS@WGYh|(zXn~*N;wItoBHqwnlIoOVjn0+=_akNyZ{&UC?*_bh56g> zCOkD+ebT}`A@o$Zolg;RB`Yi2{>X2AfN*gmmWT21vh?HV_ozaN_2Pf?Tc@Vaq(oIu z`=I9Uzb`Gisuw{wl1>Y-;32?CjUk{{Qk)a?@O=@Ff@;iX10n?y*kf8KBX#w^PM>G2 zm(RYfO(I;NfPHpVZ`~n-DjvAg7d#RXc5oUKAzCF#f z&=4^as=E_wwr|5JA0a9@zuPnqz4I}wp6J?cF~4$bzl*H`!os+lu&Ua=JO4?oww|{4 zvJ$Al^6kX@r`Z}b%0uJKIR(nx?J(>56w98ab3ej;ELL`W{|5QQeEgWwtm6++HK)tm})NRfObPpso%IKfyr}@#5>vJwdy#V?bE!R;o%jV0y5n3a1+NEGu&OJfPPrHFLan?r3rmN_hPN5kE_bprOY;iMI zvp)ef8ckCe$e8Gwr?IiO$LY=1xUL;IUgP-#A>L?B1Cr$e9H2AHfX*aC!MOl}Z`F`- z-%@8OaFXHQ_7N*$&|gB3Ee`o@@U6>1)2Vkm9mBA=+*k7BD5X-0`A{!GM&~i@oq3|3 zoZ%VFi6Ae1z&Mi%q|k1(v^9BCQb;g+d*+5utrF3y9Egxc5x@~vJmx3t0b*!P;kqv? zCwH#Uw)>;CUs*Ws-*gd`gZA4-ZR5@P)iFPKwAup2GOn$^_WNci0@aTCB-FU1?>pU_NpFrTB*Iu5>m0>UN4Gj}T{8VZQ<@Kg=S(#E zc@Da1gunc9J;zNSub0=E3~s8>Y?eOdFqoj&bwmyd=Iv=#enUW)$aTN+gd+*3O(+Fv zuKIKGbyk9Kx-na*V`D%ZiC}&C%s?gzL5YH#A%ei3!NTsc18mqUw%ql74d1sI zC!(jnCq^p04yWLS0c-1!Etx?wCtDzM!b}^S~viPL~OsrCXDJw&P;{q19C<)ts@b61|F z!ceI>cT+@nxP0)3zZVdXO+5Yvm^2mk!HPoF3Zgb6$xJe&c)z8e{*Gn9*J zeW7h%6jClIlCQ{oiK zKViEqW5Zi<8f^~t1K036j&YseZM;!0n6m_pYZsI;6(EK36Qq_)784mc%Rm))7FCIQ z*9j^mb@o>fNL1L{djp3Vox8X~4UkxAcg?=Ftes5Y4eQY z;^JnbY=4DUnZyS4xHl~{U1CovlO{fVdP| z4N_hA2Wiu)FY5U5YSBtnZP{>S`kLnYp1X|z25KZ}T33_B5!{k`R8BG%7Y~v-Baq8o z#+$VD_I#F=SRwuOygj0QLhj!#)~?FJwL>Rep$-v>L!Kf7Lm0mRj0pBWnxe#%CEGuE#W-z`0q^ddS0AC>~zVv4F)WhX`#4@;xUDI--t&U_80k^}+({p+GOlcG{ z8yVSI^=L|LW%Zx5TQ~4EPihZ*fBs||j@)9^ zZeBV5k?a1%loV1Sg08fljuvX`=V}Dqd z`^Edv#NdY^*~uVWe<;SAi{=3-_$9+?pQiD{K|DWS1feA*uSGhxB_%4X$ordvf_>-f zj}2XiODC1pj$a;bLd_z#?F@dHd`(c*jtCCQ-Kw24T#oq-6pI{f9hWXJVL@Sp<{pr3d1^eGfxkAj;fidfg5ARFb4KtaoO{gb_T zjI2UEhqtCn#k=L2vq-O#0nFT>sS9E==`B~`ivdppLQh|mfV*DVRFOYZ=q?OBJ=RHs zdI{fin^!?8gkRXI>MMqe97noFtJzfIzqpsJy!+nXHxyh57$e(XBl<$VgM;(o*6j#8 z2v!P%>{0IGq@aL-uO&40XCM{79f<3we;yZfm@Cy_AXLQ?TeSOClXs8V7ruGH+PIjj zQzN5c=+Cw4*c!#vIvZf+T80ke`Ft8Ad;>}o9z-%5!BINRD~#F$%ps-45J&v|yq8w> zu8MD-y>1H2HGYJiOp7D%bMB!YI_lpXFO}VlwwCKMC}Q>wQEWgj9|2Xat%!r4wQ1&z zgAKf8TZn2I9+ELXw*)BU$HJWU6RZYi48JF4oDI+^B=~-Ps=Xa%q)9WJY7*)L8jHi`BQq393=&Nb;m$lTz=V?XEPCkj`xkby`c^ zLBBKR)xyv9gDSKh#3WS)mve>JNW_7ewo;A`JyzsqTP4~gFVNu`3l@4a2VL3`6v`B; zCRiCh0-FGsOpm0$Hh`$COa`;JtHZpguhe=j8H9ZWFpggw^M&(4akn6;JD4`q~; zV)xdWz<{=MY?zsF(2ZhU+?au&p}1N7Mj1MKvo&QVIo_el;C6e9o3*Q11Jb1INWrB< z6Z)&AzFuReg22N{WVOE2YxFOsCRDIK#5IEp%;<;PdlReyp|LiWGk4j>OKykx&Y0?! z#geYD-)?(vKSufV2VsbOwz%iU$#I=v1P?0C7kOTWFo!HcUK%Rh~}&7Hlu!QKQ6vCZ+z zu9bwdU!r8r)YQ~1EmcJ^0z_jeg3YabmXxC?@(#CJv@zueO<)2_P5`iSMF~lAFj#1L>-#~X(COx{AGSYr%Uh;WY;Vd08aSt z?XUFu`fV})BU#_Oj!2!Yk+mu>)eU}hK7)}2v(-r}uJiJ$tU`mk>++1f6d_GhF2XE* z2sX5&lHu8Bef_k=ZZ3et+ncTSJ!}en)6~jdd*eCrRT>Ol3&oKbV);dYFoyFQ`S4pC zzxeY&`HIH41p@a0+aJ6bFJk~7u^X(QafnHhp*mM=aZ#H~L5B>%Uml3-Ngz;wdA*Ff z$iwKH8Dx39Ib7WBi`F?{%y99ms3y4R*5KHet?jf3)rHUI?QS#~3wTp!sidq;x7~hV zDuX~#I|;(0Z~vv;!P9tEn5RX591`}S0N@_M2=ags8$q(SOGUL8!>8K$he?>vwz#6g zYe~uGd8*VDR2z{J@1lu(%KpV@8`{vbuxxKxsh63}7MObVq*WzwXE1l%x$0|w_|R!O zTDnmQc)s$~ftys-0YxZACq2`scD45dw{M$YgejP+R%Y@9WMLtNc{)qv(XVjy15J`q z3le1w0{d!R$MD4LCsRsBo2BC5_Y1g5Tuk5(cz7Z)};0oVT);dfUO#S7%b5Uk07sF>_{=hWePUU-&VDJz$oq$D2TchZx%ldp)7koaj(it#}#5yQ-uBsR4e;7ku5Cl52VqYRPFZtC#M-) zR47#+qg2(hFy7v`7(dFuhX68Ae!VbEop!R@^^Zv)aZ|mlU!ga z3@qsX+XDsW^%SAs5LAq@fHMjcjLU#C>fQSw@NS_Jfo~GQN|8{oH2?oE{(ow7uu|Uy zL4lcGUPD9jff}$(QOojeBDxsBQCKpiAG|@Zj!H?vt?>3>&hfg21%?yQ_s6GL1ncK* zw{o4+638LmXUtBHB%J;2)O9sebF#0(y~p-mqBx86cadFoYFkMYJfZNt?*Fsq&y0`q z{pU|&BzKC~(0|R%CWRI6B8-;y&^F1sW;cJ>p^i@v^H;`yoB0qV>&Ytg z!`E`BP3Na8fj$caF(3}IHK1AzPZ)zH&;k94UD$p-_#?#!qdFvOjv>UCw(>Gqd34_I zI{yX=nV6Zr{`VpxcKZcbKQdFG_)>!9aOASd!CN@cSDl1Xr? ziu};2i#v6)c7kX!l;<7YR63LMNLh~J%$jjI`id% ztB8>bKdH>5#JHf6VKQ1WVt=9R%20rRK#yy(Na95xG>ZlJYRZItZcLtoOBUkIeQX^Z zf>*QOJQXiM|L-SP zeL$j9tp6L?(WBK4_?y)iw&B>M&$`C%E6-;pwqk zu7)_Z3G1i2h=C^FiR(`tYmr(%3yR#Va8|!A!F`&>w{x!OH_VmuDn|nmJiJmFn$5o| z-k|cyR=h58wSVAfvN0n+?;w2E4GxxaoGT=q#F+*u@ezV14Cm$Rx@v6$`$wbY)VdOW zi5=c?~M_XG)n?uc0ua(J?4D$G2(qFRBiX@^x z$1rT$ntd4z(lsrGWliB;-y-C-@L-!flP@%QHKhD-wCc{c%o)sRIM{mr%iOdC8#jnr z$%CV7@MHac2G_<6KdnmYC)6$%x{p}ei#)0W!=(5UnvVn`H1N=+?Cx4rcwV70`B?M& ziikpXBoz5Bi3n{rTzQa+{{@}T^Tdl)3b9Bh(|-O<)SG3%gTl#)kJ*WdF^wnf38Enj zvuiC5DDXXBwG9XJ`ik^ZXB?ip{(Ycyz1R4?Gu(_ku3(NNV72pGQ#PI|P<1D=9%^3a zXkgGC{l0K`%BcE%EC)NDQ~cjoLrPIm5$wyyJJJ*;Kj`s9;udNN|1LbuWJC7{S(^;R zuY7#X0+LLFy;xM(aR?ZP4Y!cayf3sNNfV|;T#Mdg*q<0jfCv0_5Y8P!kQD5n>W{2N7J zM;$}vnE+_WkkvJCvq!TXgFqMz0Xd&z*49VdamYE=?+DfJ470M-F z4g+bwNMA2bX;*h|+o5g?*-yT|1vbyeBF|N20$c8D20mg`8F|hREOAeWL_?o2$K|yP z0>={{B*uHe|2wIhUdu_fL~1j#D>{j18DBJzT@`f^&(yrxVb-xEldj3Yf? z&{yB8(Ku)5BcDuNS8jyN&9T~8zeTC{ognT>Ekuk4_DLP*Z>4q(av=gg0kD?9Gcz-L z-gI2)v~Tls2@vb2{@3*APxhm{;u~Yq;g>q$j85r@ekMwR1}2ue3@H)Iu=uZOjT*mt9g z9&fg0h0ZQ6e!agZT;He4 zz)|J{mX+_FozPLaexxUrkuQ`@p>iea1X=;-bAS~ieI zkIa7OCDG4Tp<{z(!nWzPb!-pAGt@`Rja&7-lgU$APsywrOk$*YG=V)*yz|!IM%!F7 zM=eF<`K(KMXB3l%+ph5^kc>n`KeN1~;1||g*y8to^>_a<`Q8&~XlZ^nK;nn4)rqc6 zjp+e?AVl5D@Rb)`b@dQqwlC4qDDF6RB8kBd0tBZ6@luVPsP+^axksq}ho3b~^@|Dp z)J)e_B7fn+7I(i5p%8lfyQR~$0aGPUL942v@g?AS%LE%|w~ow5h?I+qtH#9Z?<57W zus61_&vmH8I}^M#eKJye?_kfR{q7GQ2uYcbn|3xmBhrLt&N1-+G1*|NQX=-`cVi>u zPE5G(Eu20_IPqoar;00m2llyU*GrjbV)mqLe>Xm2Kt=*|4*%PAX*u0VHR?6vprECN zmn%vTetVaL21o1;Ut75vW$$Kq?M1i|N4biTGp`-tTlBVX45iif-(B&fit#`T;6m+J z;|xL%%Tb4!tQ)y3+45|!L)~&8?Q7GLnW0#^7Z5j$3=AronqlqjLOgtZ6qyr+HPy(d za_t(6fd$XS_K3Gn$hv97m_*?z+nt(}N&oQSI4soBNTNmlyxnsHnWT=f#8ilUj8i9u0xB&N0-livEae%k3(Q zfnsg&kX;*-?>s)vF`YinyNNIU;k3Ela9XyouYt~nKh0)(e}vEOOZQOQw_$8FwfI8# ztiR@WL*nxJv#N?pcP9mHWFULG4GITC?WKyaAhpcx&Uf11q}1+`DYzY0Cl<^3-O>Ny z;3PM{Yy_;gopkQCV!L4Ru6dGFWx8`0($gQ7{%mZ#E}W^hd`H{~N=9jUxv6xfKz8ht zTMQNAjVssslN>FNM%xtD6=NdjhP6X~lsW3{{INx5>mH}8lUsXU_jU^mJetW^E2^i* zn78`_^hWOU)BSq*LDh%2y0$vhcQ!UQ^8t-+8Vi5^lgUz|6?$_B;IX+UgS~#P4yH&#*I(Rde|1JKz(T_KNS8_Ioq_lKwUOx_H_;d7|@qtV6 zm1oOt@9bP5^&ppTemQJyhdziHVGd-S|dFS?x=_E@kM?iFQ7MrvB~rlg5( zi(c8sBvt(L=g-f)p`zkq8g~;F0|Sx=Uv-+q+OAc->OkFu&^>fWpM1HsS4r<$XvEDQ zW8)uhQZ0Yv6>iWtsv4jF24y_$^GV2j(+dV4Wwu{PX5+2R`mi&Ihebs*eEH||3tWm3 zT6f|*8=c0hvAH4~m!{wTHEV<8&~_!IKP6?9UZyaC8hddQ03{9Y!G(%Cg8Ix8QnTb6~fLEQpd9y`0v4Hpr zE!oaHMQ{OXTl4W^d3?6HiQr|Z_|N=23KmPKUQtu&SYne*(opG)jdd=36h1v#OC!oL z2D{3O&2n$nA24H=1Ec?Kc!bBApTRi zCIioZF$+`&C*bI|i^y?OS+r|(Uy%3W*oZgud9n)?b$mVJ1i7L^4SO3K1}=J8{G6&! zMuLRCo*nJ+x<_XU;-#=B+HDI&nM4<^uJ4ef>DWxamz5!oXt&4W8TnHeJ9bjJ0ISp? zZoI$Wgt=&J;RkOadvk4#gLIGxquja}5Yn`xZijanG~B zDc-Gz>{N^! z6HiGVM;HwU!G|O{uxk*zyx9o!1;c!7Je;2scl-PMe4_6vg-gtoX?zoFJWfCs*{iBz z3Mvx0r)Z6L@+>XusQ;7rVqxvoKQ|kUBTcw401w%*S@_RR<^kZ&Php>co<%pJ+OrTv zCjo=knnKP?n`to1>Ame_#bwj@FA#E|c)K^ul8U?*@FEO6W%JgHTeSK5W}looKMb+F zU$FD&lb+!9Dq6LQ^|d53Fa){0~>r`GOOk6C0W(43*%TktYr+i_U_ zMYiW{6d^wn(zsPYcXY6_$P+O#u1H9M7UOHu;&Z#;lcsr~w+V1zBh^mO`-zZ2%+E6V zHoC8mmKIj)!@|P8jqLnZEjD(Lrfh^f%!ibdC|>#|I-)g)+zzhlUdkq$s-?hvrLt+j zW5!OiTu=3TU=QedXIDbm_H`8Mj-X%o&)UIZAV=6|UUcx(ic{axbD86vL70*aeF{mHv@ifcl2`J2RNmhL zy4#PllXBoz8hw?jaic05{;#AmNJ0G}!vA0wP~LALTLBRi%rR2Qs#;oF;rI9VqQv^y z)e1dZ24lCSi(w7PER!>@1uoccY27qa?KPaG9(a|BU@b!Z7d)U|iQvEuZ{F0#dMoic z?WbCNAmR0!n@VkhanZtF(gtSH;8xzpKsrHxrv}|hi>1S&l9IX@^zaN#d^6)yw~kZ; zRlWZT8{>Sjo*nE;-M6*~(OEb+ntzvuCgnIbBEs&{6AS2v)8eu80+;kF?~1&DyS8k* z1R`ZElK`G%(CTUeqme=Nsp&h4g8C=FqW?~omcK9I_@8k% zeKJT!7Uh3z7SKbE3chxf`ugUAwf%Wl(9>n()2ir=oCZxICb}pe`qTZTg(zBtnYcI% zcYR##Y3@VQn*T^FR~(r>GcL3##~i+y$|gy9NH!Ms;MCarcXSuwr#D76lcJijwdsUx zu1;6z5zjSZd=zUt?V{6C4*cksSh+K<-p3A5k=B4~ zZZ%hn3AZk0#c>p}^-lSleVxZV5!qlqbwZ_^h_BvBU#Tk&3lF%8764|!9)yI1wYLj< z3#LtfTku48cFj!3g*hjyCt40=eij#p8??yYQalRt``)toz|0iM(3;7?i0O%2I6o`F=h=6u@b_R2qgKuiFbrVw zv!EbK@$brAA(Jr~QjUpI2(~}(^P$-w-CiPLXxjh^MMsVeqjB&Jc#^tkaQSHOlF^w znp!u(+s7Is6=Ele1RDAE5-Cw0jTV)CRHXfbSP#X@?nMT?#`zUK&=q17B%oD_&``W! zi!45}0~aP)`KrN48}n5 zyS5GoU4jRJb)@w+I8l)@XLYCZFC{HFxwD?9l9ljygal^8i3?DQW{5axLGPi^h0pog zQWH)SwaR-cdDjBZ2FFW;R>_4`wK|c6*?M_}Hz4tp(kg0dy$+J}YO)KEJ2==jHmf*B z8F=jrnNpnF$?Jn!54}TDh2M`?J}F^P$clU$MzrPa%>mJSx)NP&=@egc6$QGNpU& z?CjN={o`oAyO#5&+>P8S7)IP;F%>P=a*w3IM%qX<@;5=RI-V{<)?mPSI56PixV~B= zMA!OA;_AeW9t!^mGlSjCC7wO`!2RDbW9rCGGq}4^;df)N&-PcSYDCs*Xh=5AW#`wL zRI+~;84eB(B1wu^Zh|mo)6y6zrIw-La|8_q9)42VQcobtN3j*ih0^WB%d--k!q6WY zSDklLQfXbO+2%d@VK2Qs;t{nDPY*gztGd_NSkupHYE<~5*Bro?#ZXvO^m9*b@yJ~u zmm`Rqm)CTy)6een&E=(QqjaTOnb}gKu*RofhL%uz2SSIN zf`L$zN8q16W&x}ZNlDn(2(_oSE?USrq8br?r2F`@hD_&X3N==f>>u#1ACp7TN4KWO zXqbE)FhyQI5#fqFp#Zhm*&yM2)?5dp#YF3W1_G%yGY;Sqq4N@XhcNYK(&3PXwszf8 zr+~-t|`Cqv8VV8P{>ol%NZk({(s1;X!X(<9yfAs?tD@Pd{xnks;7OhD6 z)nv>7!SFX~(|pOk*v+9K07dWB)Uaq2i6cmb$9tC_NIzxPCN?IHn0cNCwcz^?^#|L0 zQ~EUF&{S84_3`7!!$`V~u7Yza_Tp_T=e#q>f2!Bbe=W-^lVm?d52~C7~Fh07EnLj@Zz(kld8de8)8ev#SIN$WK5+H?%DWOg;1xm@$LZ+vC zd4v!mER~ed9-`IX#giMb^khp~dv*60{hn| zcHn%E@*B%>qfHTNLt)hJ8g%>EuJJ85;v?tr`xk$|`LVw&sZmGM;$w%hTz9@A?k~GR zF!0|pGe^QLJ%8~F8HCACYu?rjhh1s1OcuUG?l4d_vuMNrXAiOFy#LP@CR;1&VQv1Cq35$TxM5?N#C0!V`C_n!VAP9%zjgM zV>X1$$`r!F#5AOrb|Cm>W)J=T{o6PoMizH#QHUfw4ZmGOH}1##%~;+<$!9kK=R&CEjTD;ImAME}9XkGbN0WIF2>w6`cmmL@pDKwpKOy=O z-P$VPUhnm|zRwi)_QsuSouoWb*o|^ZD$@%I(c$;Z)S14jSQC*YIXyk%e}i%T5ky+1 z`J4Ie&xF-r8;Jfq!-LyO;_~vGZAP)Z90FKJsKSfAqESnY_NKXxqybbIq?!iV z1?GZqZf0uV5aMS03WoD&;5egZ=$Hz=JX00CFVpz6YY@;^8sAs5nao?0ZlFlC-da(b zAVbw`Joz4^yp8MO>A{Eb4PM$jzig`KhWh%N?BEJ5# z`$is05QTfY-KpQ@d;f|T*1{nW-a(shgZGAWl z$;co?8gZ9U|2c*C>?Q1ZN-n6WXJGKOR83?)lr}RJNc6d3a^Q@f7*-B(*HxyVCK{U1 zq_H6QQAnt1o4y@fDY<=&s=PIx*=?RrES)N4H#szKzW*@SQpDSR0i_qaUm1&`!#L)7SX3pkJs~l5+GK?>QZ<3+%j{oZPpR zlmVp%RCe~m1F++U{L{aeP9*UfuxDJ{5CeFq@j!=ETBt6~6!4GV?rvLM=zjjc(rU-` z*1|PlW=vgCPR~sp5qYRxI;#I3fuMW4=d(ASeP~tJ+>DRXSJOpG+LB&4^r~Q~l67S` zX5|)lgZWg#ZTe2IbkI-`MF@P}-h$;ucJj$)7@pDY<#sHorN`jaO!3bkK!nRq7-jj~ z+}v*O52_a^f1RJ7e}^2X7A9;yD@h%Cz}7U3M>!t&Wi>1&(nd~#wi5mGxMs1F1}sqY zJzNEt9Xg!}SxAK6Ama%~q4V0u{<~^(JBnVYJO1=S&^c38TKZkfU8oyk{XWmu-rk(- zL#UBd0p?1Zhh;#A4z;-vpatzZy6Ac+f^d;%wh=j)7H}Nr!R2|KXI^xrWZno za8b?J`QYV~nFdJ0%J4JGifgtp@0Cs^JPU6YznV8c{mERkPhtmmPAYs(NUn211z5?& z^;iEAk=zy;ES2`S?$QGKlz_*xK~bUn=I+v8k5v}>Rx00xb>XNZ1Ho`dXmQ~SmcVGb zhm~B4C9v!hUVCj;ms@*C?R*ZGPWD)JW^7aA1^p1E9H<7r%Sc3sbQ6!ivKnZ|G@VuTR^0l}++LBzGPd@9e!cCf!cuUVg-o(`Cw3~m(rc)kfy zwqyCtX1M?v!=oZ*Hm`LOO&*Y__DbmU3WbxM!C&43*PxxAyJW&IQR#l_c! zT^_x+BWzFCdjF@U?+%Cad*0qilpuVR5MA^ZM7LUWs|V40joy2W8ia`6Men^u7bK$h z=tK&ZRaa;E9pCqQ{pZ57&pBu2o_p?@GZyfeKzcK07w0?1z{3i}w=8EN?qIcIjeMP2 zW5l`h`TlCtSd_fJfx+S=ZcpEOYmHGy!}4pbLHM;{50wgaN>1P8W*xq7Y-%DlXmzr3*7!J6%&;+Dz^BYL+elNH^ex>uA!dYU7IB%) zAU>7skj+z6yg?J(L*sqBM*?ym1QG`IitXtW6oBS%{{DQ^c=)#Qe!sA{P}k=(Y&N-% zF~SxaZSa>Dx`6rR*x~OMd@>8tAp*o;uap>qJt|bH@v=!JeDJTE@N%J6zPijmWQH=6 zS3T@vv#hG>L-&E`AK(hMOTe_axIT7GO-)LUhf2O9+p@E_7v7UqQbk<254)JQ3~r4N z51X3+87&Hr%3NM3T;g8ZoDX^MaOs~-h)dZ0G#J8Y83fz>;SV}WhrKcL`nm}jB_*ZT z#>T3e$Kg%)lTZp|^404mSd)@0uIJeTx(W*DyqtgSuXZf%v4kgV7nV+j%Sigj3^`eT zbk)5z7OL|+oO%3|q==%W+CAy>OdhywhrX{hhI^1(fGT-3Mljum|Pk z<%mAeSiqzIOy-9z7@xs_21I?M$)sfBJpY|O`VF8fd6`WDiUhRJF;7_d02O$~ZKxKT zRoHQ@U-x&S4CU_vxD(^!CExeMn+POmdjIRIKYTxG%3bGA89|uZBf3Zs+E)xm1 zNa8W3rJtYQ?9$><3Mfy=XU#6;B>VtZ2A>bgC2xdSK9ftJAMSAje_~-l&&JOF`pp|z zoG>h5&})-;*!M19yVAEqmO;C(aP*K}M1%t9?4iqho9zrzK8*G2&lUQ3Gn5?^82rHI z`6RElI-7Xx%tq(5Foxg6fJr0Ii;Ift{Mm>cubN-P3wlX_WEYstedk6Z)&`h@0%Ni9 zOK>lMfhdYEbAQ^Uw&nFAFiSpsS;9~S2J=#5ULGEBZ9dG9(}tphB2EsZ>EXQKSVBqg zhFxA&%-Q)-dq?&aBEg9kc6a9*sn|CzzU6-bVT9>{Oj#lYVe}&^5iiTu0>pX`4TyY(X)+44 zQyn-2|?ZZ!v|L z3#zI(&a7;_ok+j%|Jc5vEFTN zhr*bX=&ra@J;ktk{hEwK_7(AeeRRJf%l=@{ z8H6w}yeuzD^YCu3sPr>gn-Lp2;Eq>FRh2MGxfYI+$aassicG37I4`$hRk=~6J;I8R z$`@QWUU9p8GjDU#WaBK!R_oZv&FbG>deS;=%Cn9M$<#8Qv2N8A@e2CKH3?t%S{zoU zWi0YkD4u9f+Y*GnXe&%~bo7PS1>x})3s|aqxv`INxN6w{_)S-AeOqAi{mD1i>hjh+WRT-AX~-9 znS zh_8Lo641H&U)=Zic=(S+1@(Rjo3PcSOw&`H$RTyZhB`S@=0$UZP%#Tr^Tt#Z?yGZp zva(Ex&hlb?+#guHRHMCdkD_Q~UxRIMI=V(hhgD`}X3{>xO^lymrI(LS9+fEp=D&J5 zCy2Nj9;>G^2`Y|}E5x48fS4ZKimm75R>T&!o7&+rHBv#QH)z_W53gR%Lv56EvP-oq zXIOPg-{+fdZf!A>RM98n9+~_8{XtNtUtLs~ouGxixn&Yyn&IgC<6i76@Q7-7#}>V4Sq#d@S6aM?XFAkIJ$FVn}H=lhk%`KwgYV1Maq+{&h1 zm&q?-|B4#<-}D;E)02Xr{&HaF-tpA_r{fQ^bdqbb(zL;KY}uENyi_>Wa&mI!ul+i8 ze{+hJwXzV$44kW^D5iYD@7v&pE8IzsqPt(0<}FkEl+o4gmgdD3HBt_~1FNvn@RcM) zZxmP4xpw0*6aIpLV^CeTK97F6>RUrj6)^?|Ii7xm?oeno2~k|Ccr=o!$BJPU~SDYnEqN zm8|;oNh4f}r_Cblhb*Rodm#Ez8Pjp&2Bw0!C zazNaO-dOZl%F=c~M~=0o@ktzCDCf*s&m@k!p;6BGoPgOS35kpKRPUQ0ZV`#(q8=9? zA>82uryX?c>@$Kp(@HlM-wl&q9)}Vvec-dtQc$~!mcV6+>07L2arEh08*tE%{g#-n zrUR5+dKejJ@VUMoMjSQPzMSpN&p*qddg>W1c5^C+WW-3i#L<{Ph);^S zUM_v392(2juC4}E!qhqrWP(%L`1OCEX{LLs~=lP;f z7!_ACK!E~sJE=g;!N0tzR?$_f%Ja|lV&^t9_^jkMw?w*UqY>%yJ!5@_jE9t;3LW3$ zaoM>eProsS*=u(7IPic96gCm_2b;TfvEUh2ET{0y3OrEP6seD+;v|qXe;Oy3Utj;y zHCeX;I_|N{?Y*~Vac}g9$qjmpX}$I^NB7(6`h4rh<-0_ySscI4AKS%z`3)s z3|2rbCt$e~-I*9lsXE2ave)hGQ06N{h)0yw^oc}P(V5T0f;(gV0fY+9v1-Lbwir$H zUEZnPtV)1ABCF_38$3Ie=N6M0Ny}=kN3yfK`*p+RWJ!q`j_1C9`!H8FcKz|*%?^bp zhn&~MeD2|OXC(!N-9ETSFM~g!5F1LS!&8RPQj`uRtQ9M2JPH5$*;_g1Sp9Fzh+MJd zk3vCg>&~QExCcNS@vmD*Nfi|pb1IvLPi*O`X(Pzt%35Cmr(0dF2Iu4+D<>nBxqdXY z+t1}qtm&?HF`U%8`YmLT$WPV*=IY8b59ORrlulwUYF>|HQe1i9_bmSW4LRQ9dU|ecojT%{47(Ie)PFx*K_jFd$Q8aU z&!Qif|CKx$&($N4AoN3c2(2@!qpiEejulQjs8|{L_>ML6UC6pY`PdBV zHKM-}lAvecuZ4u$h;&+6NsGx9K8I^6`|ET6F)IEa8rZflKa^sfudf$r3jTwDkGy5W zwg&e-#IFWsT0r1)IQHu*fQtV1SrFLzVzLwOK%4Vte!9lAFW7p*?@{hGA84z>fMm-+ z)zs=KOE2E`%YB<__gg+Zo+%(s>9iPVH{ce*bNhapjD@Pbxd~ulV^geJMZj7Ym(ks4 zHmjp+-0p6}3aCGcL;|d_?U|+0Q-%I;hV7y)b@wE-cSjzmv%Cq$fJ_A&j*O0; zm|R8026(St&Sz_?Q7!$+E3I6=|A_cI*oLKXxXj4zDU}(v2@} zNV-sGtAx?dS9+aWn{&#$ylFVxp2M!!IwA=jJu342Dw>*E;Q3H#WbHwSy@Cxa@$k#8 z{BmB<&Qw9}4Wkijx=#YH)G9NUlzEm|R3UN#X-PVocXq>}oN=bR@XszuG2hY$-`hLT zac;0E%p>xx{s(pLUlyz5b8ZpC&yz+b&>{67=WM8<0W!!xHDWDa!;~IIptn1rM03az zP%Or!WWFT-pqi`URpMe70a5(7fm=-`T23sD9a;2EJmDhLs zeP}Lr#fQ`8FlOQ*b?sutDRhB;4_U#7Xk0)@Dcx83$61qTJ|7>ub+DQ?tgc+fnj8DL|qTM^M<9F2vp423kFx30^-NC7V3KOG=J?IQWOy5yDvmx zej40a>DK#0856$2OO5jj{ps+~KVmDm9VvPYhm>u+kNscqNjLP!{t{;1^{SbCO8yVx zlDgpC1p1Ya_ws@`o$c&ea>P4DOEg&3zNGHVOE>Uj;6|AcD1N#?{p<<88@RGcwIZVE zq^azXZdh&!w$9?S@>7+TE_~aHgG%WVP?~8Ti}N&)`U<%uI_QASQf<~ZwOz_N*6a&7 z<~q?qvK4{Jg6jUI9O{VhZsFy;r6Kq4n?KZst5asb580(Gza2<-tmZzeaJ0XkfNL7T zx%bYryWM6|CqZQ43A!wPO^hj=7czf2GqZYB*pA;^;}d1Y$s^mZdvqvGl${!n9E12U)3!-xE%hHeD>0O;PHV<&pM5d z)xLfF98Jy4H}jXQokwyI)7Jo;G|?uS6Y-Li6WP~!KCRCEOu5SQw(E4fS$;SBqo@FHV|$4JSMi3Q8pZNvXCnv& zVsP3n$p-XB>7maJyDU#oY>;eas1nb~fpd#mW%?sf9@J2S;z*VG3w@MN7rc9N*5ADA z386g;H2Kp9In)O4HG?)$y!ZW~7~>@X9J6qkF_f8{XwSsy~u-94t7y|Sv>~5(@^hj9y$&7t(Yyl|(g27c%=0e@@(% zkrSfji1l@jvwjN#!fFKuLcIo$w!LaurLxZ#_-^}kYu08Zi`B|6;Iu_2@c&uG(z{|S zC5R~{oMY(K4Bz=c;Y@&z@ey-5#8uP0^??8K@;%`Pu2swZh8{mkfMPUh% z=#4ps`J*g6X)Cg}+gp%Vgb^h-O=d0dr%4UNBT=4ym15!Q=iyTMlRc@O%k6KEcvOTa zQ-`~g?J0IE4=h$WMc}k>2+n408LNJwU?xo=--#t8p^xtOVT#U8x#vzle);K@R5|XG z=gHav&WqMLyxx*6{Ts={BXFmzhz#>q9uXKOj9HiaqjXl5iSB1Xl{e-5=YzW}Ab_Q0 zWWakazq{T>2Y0<#w&YVVJANP~BU?DN-F`~3shnWG3OKF#yBt~4Hlylh z>!86dJ{~=} z?yTh#n7uLjCCmlqFb}1&7A$9ldYjrVCP5BEwAO^;Fr;^9S@Gq#dK{7&Qs-!Ai8yt# zY{pm6bK|na<4K2W^3ZZ}&yJ{T3c6c%G^Zs8uyCyLn`sOK{ja~ySrs7}`T_dfQ!mWH zII0&Z5%XA{`u3G!_tbDZX`)+QhK_)hl5h9)x|4>=J;6QMgSNgeG=sq|CXx;rLWW(u zgIT8?J6|?uH-#@oKTCE{Yi!}``jfq_URN1Ag2$<2tWUYlfDCMhMhH6Z z5XcH$!iH|xAcl$nQOdL`S}+fKm=DvkoG1UBt1!Ir^n6mI=e~(?huS;W$UyCEiml+h zP)4nUtVcDPBt62h2IE<^1R|#=8y|d5_DHp4;oNu5Gk*D)vwK^ryh=nGOO)C;z11}T zI*fnULt}9f2SPG8rzOVtFDx7OX<*U}>eiwE5li&kI$n8=DQQGLCeZx95x1Qe2CbEQ z)$yCL^2VRXfBfimB8pxDOv+95%b)#)wZQ9BLOrIIF>AB$bMx9SaL^wLT{n}OMrEM+ zS@iHeDY<2bm|_9fHQm>lg*xv1T__Izg4LnI0Oc4wa^LD2uSS(=ur-=U2jzL&jco)X zVVIww9O{H8M$ ze#er4mQ$!>UH~V4gp@}553g`XcTPYh{#7l{DMOV_LeP^ST~jM+`RZ$hV>7EbkOGNS zT3+56|K)1I{y80^{TCEanG*^8#CR7W${^=|c6TLX1`#`%`midlv+K@-2B&$scUwQP zMCGBXd7kC2(Hmc08I0+s&<^_%IGD`p4}< zOaq&V3{sTuK@iL%dGF^U$EZg~im)P7!6Xu$SEYlsA=S) zP3}w4G!GJnK+3J7?!#$`#gDB{T**JG=D&yu;2`T(hXY_xEMTc#F__8m)0^?Hs67gKO{mL7L1irdp)2U5xxTWt-LP7VO;$qsS#eZ_bkyRLlq?GhLFcjG zzQ)+=V+J?k2X27Qd~Y|3f<;N*J;AZgoS_&iZ2`WA4y@#}7R$o*z6zzGV{i4Dy7!y; zS?K*XT-`<)B|eLO03kit$Za;r5PX!2^9e63h=N4<6AP7wI4oalEOq#N%zZ+*!*jff zG+FoaS2{u~&!O#jP z7Nqvx?U)aW3H%oovxajKXc?XlVA*kT^7B$iy z>r>&GEsC&9S84~-;zZGFEDXn+EoUS3T9INu_ZkxL!rJk0N`8Q&xsP|RY`4=Mn9{;U zhg^<(39p-CU@l+ZBN^&HJ=`Jxx_kP<2ceG8Laf`rbKZi0SpjMglBdJRLg!tH7JM%I?(?%xk;6G;~bJ!yI zy|#t$sKoo$JkKBIs${j2OXnwOwGX%M+Esi9!NIer|MOq4!=eA5zBM`f(LSah7a0Ud zV!8M^3Ddll_4!ea+rJ8Y2X|7AqOh-@wc_8~TLAS!Kw!3tnd%WEDT(r9b}}t5s^a{+ z$B;0<#uIz#XG(;eQ6q7(MPZ+FuWcucZ-+|r&ILfMyws+`2x;B1tH>qs8JC3ODvEQY z6V3;@oIYJzxrqkA?#Jp7z`gzV9T4N3pLuu16wGSqb*|am9RAsFIZeqjT|S#Aa!YVO zeTgZ|3*LS$480Mbm0BIDkyUE&7=i*HA4!)K9e4&Ge7KeCo~i{Uh9R#}w`3p39Inj= zRf*snFhUSk)LOZpOyG!;(oyeu4CzzmM_jHrv=^ zAXT)O^$+*yXKE*mhX*ZZdQw!KOXw1a1r+JCaS5(3aE!*OJmIedtRBw6B3svwC_IsK zCx9pe0dMPJuO|q*T5@uc=Oq;1Lbe2u_1GnhPF<1t4$5*LL4}-y{#@6 zV~a4#Ms!9Q&>gOD0zAY9c!;m~k|P~UF)DezTD@XZ$%=QESCwWzop%>qPx4(nQ%-TM zA99az%(=5ofh)p!bMGf`!d2EoO6?(W-1R;0W z(vc?{rL1+!$~l48cum@)KH2L{zLhY#2~zfh4JN@^s-RKef{5mi{dhzuQb(ttjJ3D9 zW$G17kdW=DDL(RHkkIMKI#C42j;_=yVDs|KsDj$5<4WgTW4@c__X+>=8A8_NWk(Wg zvR$tr;=}73a9$@N=tL+ce%U;px+cU!2n%x#Bbg;n1~>exf7?-T+hhD1)q>2W!f|=( ztPDL(e=RnH#mAjd{tW=$-%LxYUwsXYj#sKtx5L1vx}}4x(0@W==J&Ljm|L7H-MW0z zvbHDu>Y9DHb0fIWyeqI>bi79a!CU4~Xgg?e%fGPLH-*n;$?0Ph2F@7n$m8_}gS=9I*3@4A~2tEj0rf`0tagBQL0xk;s{a0*-*NeST{Z|_|oSP-k z?5j+UHc)yL6{We*AiVcRWq7%7zFuc$rQv&c&L(+y#jKLCf44EX+IH{ZUr@ALHt4zb zz}$)@SOc=B}|YWm2Vz)&jT|95@t>)71It0Sjbwp#NNe4aN_ukW}E&C@6~3VZ{I(3V_>A= zfwTmI_RiF0w?*yZ-gC~?BxVRN;;GO>xE2MrG_q3kD1dxb^zgYW*i=6ml__kHQ)f(1 zsyzrH9)J14$YTR*d9;+e@FW7=Ttc%6)RJ@^PNR0KkR}FYzkG)%|919+RAQkTS9M!* zH4>eOQT8Zg8rkIA{uJWEb02EvNgF0aPj!C*bR!KsUwIlz>r*Or9KHqm?TAq1D_#UW z6W6*pGu$|>4box}-~n-&1y+8AzJ$g3G?)-pT>I~w&s=jI{k}0Q_P%3G6#oJxkCW4> zHnuQ0yfVP9oo7#}Ic_|waif9LDv;Ni78Ge}dTjJgH`qM*#rZhkJO;V$(XYEzgn2MB z_m+hp&OOwEtaNs0+#DTw>)?>6C}=bW)Sc7jHz`G7w6^zq5GNqm6Z~$CPrCT$3S-2# zJs!Py?prRwC@^X?FDWgJ{mSu7Ah>g^*%E#{3XC){{gNCTquWc^z{GNO-0?vVmlPB~ zk(wjDZ2q3O18x04(Fz5Gh!SqszG_6*`ATup$iD)Af`#U5=Ig59@mMNxjTb2g$uA+g zdVy~bz!N?KZega&{aO)ZM8$%cr5faZem4@ZEf_|1s+ai9Br4z4LY@L<1II0CTNLvj z4_GG^@%oNato1WH$i9&qf4O?}9IOW39~!Lzq|S4YgxoBJ_m#Nw}*<(Q=4#-2O$hU zq0{7X_WzE*k$wAynz4(t{$5w=>kOOZt$|PDAgS+ZRrB*{_ukT3KOwsAaqfVw z^{`C%ScGLJ0o$zQoZnGi4XroY==dxPkqFZi;+^Ns8RgP)JD^@XIy~x3Q z5)A)cZUG7A0um`+4oox6(S5u@FXJOx5Y70uqzv#^TUlqmGz#TS9f&FMy>)7oui&qE zw;ud7a6-(5Req$d_8!aR6};Hj2i& zc*-O}Mew|5!r-;L&pO()N;QgTCQ{@=Um&ikGIeZ$SCiV8z}S@6`#j|u8G9C% z9elsw+=SsL(f@77S$BQ445|SsMLDinjNX%jjgt9!?P@@P@-2HqqZvwlUcpZRmTN!~ zhOcC%j;=d#4ALWq&?eAfHj*rQb*6N%MD}Fzu&IC~0X1(-h@k>hjb`Kcx)aE~_GAFi zHNw$}V7Y5=sm<=I6CoPYdJJqpeNIDYTc`HA8&8}4xAQ_si3FD0>#p2;V3a>LbNVpE z?4lrDE6yPcc?DGPP6})cDPU}~S%+WWT@eG#%IVscMM!y>SM*@RxWynt7;R#s-k?kk zyzdnyzw98+)>v|6&|?Tj!ZQSnWjFlZU-M_tcNjrzQpbeEI>2a(Ixe%2WeL>e~SKGoIGNTC{28{~WwOk}7XI#~<;%f|Z=v*oIi?Ny$(8)XO!Z4RsKZ=-*GJJSAx?oOoAP+TcEh6s38 zRAzyDyzm!jo=2|nN&Q%#)DmQfzyz z?d6k*CB+PwNj@jIq}@R0KIEY&JpqBlc;r%Fv;$$AZr6+Ie$n;4&god5k_?pbUyQ0n z9+;99=OZ7Oe)(Z6y6cPYjX&e#Q4!_d3KFM;^!IQ%d6qo@T)a=1kZuIHGgm(N=T)o2 zoot7OAz<+XSm1^IUi}hQy8gZog$TuZ&Le0An3Z{x!2!#Q$Ea|G8dxqC$=O^dO~S;Dh{UoIMjA6@h2F zoKj@}B~k+Vc$)b8K`{|ncm(9L;v7E!>tO)aPVctDwTy`JyV0U733eE(mYYc-shZ?a zV{WyFAqeBn6-khbS(ASh|AWN7uQhZ*z&mTa`hRg{2J-6wwl5U?8;B%c?8r~O?)SUc zg@wZ;#abko*$nu6#}eqdY0C;$fk3nYOQt}Z*dy`b9AYJq>Olv;_6UH{Z7C&Wod187 zZZZfrLeL8z`@t(-2x3EQh5Fsr8KhUWBjqbww0aEK36{9G?ntX6KWvCFgw_XrjRG6p wwd^UFuLB0{NHf79VD3)Bvzt5cFVgPrS|=;4toXl|fNvl$Syh=DDbvvZ1B=O|NdN!< literal 0 HcmV?d00001