From 197a87b5e62d8dc4780017d296953dd429dbc01a Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Fri, 31 Aug 2018 23:34:36 -0700 Subject: [PATCH 001/176] Add notify MFA module --- .../authentication/multi-factor-auth.markdown | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/source/_docs/authentication/multi-factor-auth.markdown b/source/_docs/authentication/multi-factor-auth.markdown index fd229645c24..86ce2ad13c8 100644 --- a/source/_docs/authentication/multi-factor-auth.markdown +++ b/source/_docs/authentication/multi-factor-auth.markdown @@ -42,7 +42,7 @@ Below is a list of currently available auth providers. [Time-based One-Time Password](https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm) is widely adopted in modern authencation system, it combines a secret key with the current timestamp using a cryptographic hash function to generate a one-time password. Whoever possessed the secret key will get same one-time password in certain time period. By verifying that password, Home Assistant knows the user have the right secrt key. -When try to set up TOTP module, a QR code will show up, user can scan it by an authenticator app, or set it up manauly using the code showed in UI. After setup, user need to input a six digit number generate in the autendicator app to verify the setup is good. If the verificaiton keep falling, you need to check whether the clock on Home Asistant is accurate. +When try to set up TOTP module, a QR code will show up, user can scan it by an authenticator app, or set it up manauly using the code showed in UI. After setup, user need to input a six digit number generate in the authenticator app to verify the setup is good. If the verificaiton keep falling, you need to check whether the clock on Home Asistant is accurate. There are several authenctior apps on the market, we recommend either [Google Authenticator](https://support.google.com/accounts/answer/1066447) or [Authy](https://authy.com/) @@ -51,7 +51,7 @@ Please treat the secret key like a password, never exposure it to others.

-By default one TOTP multi-factor named "Authenticator app" will be auto loaded if no `auth_mfa_modules` config section defined in `configuration.yaml`. +By default one TOTP multi-factor auth module named "Authenticator app" will be auto loaded if no `auth_mfa_modules` config section defined in `configuration.yaml`. Example of configuration @@ -59,4 +59,42 @@ Example of configuration homeassistant: auth_mfa_modules: - type: totp -``` \ No newline at end of file +``` + +### {% linkable_title Notify mutli-factor authentication module %} + +Notify MFA module using [notify component](https://www.home-assistant.io/components/notify/) to delivery a [HMAC-based One-Time Password](https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_algorithm) to user configured target. + +User need first set up the MFA module by select one of the aviliable notify service. A six digit one-time password will be sent by this notify service, user need to input it to verify the setup. + +During the login process, a six digit one-time password will be sent again, user need to input it to verify his/her identity. If the validation failed, a new one-time password will be sent again. + +

+Notify MFA module would not verify the one-time password deliveried success, so that if user cannot received the message due any reason, he/she may not be login again. Edit or remove `[your_config_dir]/.storage/auth_module.notify` can disable nofiy MFA module to resolve the issue. +

+ +By default notify MFA module will be auto loaded if no `auth_mfa_modules` config section defined in `configuration.yaml`. However if you don't have any notify component configured, user cannot enable notify MFA module. + +Example of configuration + +```yaml +homeassistant: + auth_mfa_modules: + - type: notify +``` + +Optional configuration variables: + +- **exclude** (*Optional*): The list of notify services you do not want to include in. +- **include** (*Optional*): The list of notify services you want to include in. +- **message** (*Optional*): The message template + +```yaml +# Example configure with message template +homeassistant: + auth_mfa_modules: + - type: totp + name: Authenticator app + - type: notify + message: 'I almost forget, to get into my clubhouse, you need to say {}' +``` From bf00119cfa076c86506ffb16fa8fe4532fc7424d Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Sat, 1 Sep 2018 09:34:02 +0200 Subject: [PATCH 002/176] deCONZ - documentation for new refresh device service --- source/_components/deconz.markdown | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index ae079650aef..4ca7b31935c 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -29,7 +29,7 @@ See [deCONZ wiki](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/ Home Assistant will automatically discover deCONZ presence on your network, if `discovery:` is present in your `configuration.yaml` file. -If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to **Menu** -> **Settings** -> **Unlock Gateway** in deCONZ and then use the deCONZ configurator in Home Assistant frontend to create an API key. When you're done setting up deCONZ it will be stored as a config entry. +If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to **Settings** -> **Gateway** -> **Advanced** -> **Authenticate app** in deCONZ and then use the deCONZ configurator in Home Assistant frontend to create an API key. When you're done setting up deCONZ it will be stored as a config entry. You can add the following to your configuration.yaml file if you are not using the `discovery:` component: @@ -79,11 +79,11 @@ logger: ## {% linkable_title Device services %} -Available services: `configure`. +Available services: `configure` and `deconz.refresh_devices`. #### {% linkable_title Service `deconz.configure` %} -Set attribute of device in Deconz using [Rest API](http://dresden-elektronik.github.io/deconz-rest-doc/rest/). +Set attribute of device in deCONZ using [Rest API](http://dresden-elektronik.github.io/deconz-rest-doc/rest/). | Service data attribute | Optional | Description | |-----------|----------|-------------| @@ -99,9 +99,13 @@ Field and entity are exclusive, i.e you can only use one in a request. { "field": "/config", "data": {"permitjoin": 60} } +#### {% linkable_title Service `deconz.refresh_devices` %} + +Refresh with devices added to deCONZ after Home Assistants latest restart. + ## {% linkable_title Remote control devices %} -Remote controls (ZHASwitch category) will be not be exposed as a regular entity, but as events named 'deconz_event' with a payload of 'id' and 'event'. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. +Remote controls (ZHASwitch category) will be not be exposed as regular entities, but as events named `deconz_event` with a payload of `id` and `event`. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. Typical values for switches, the event codes are 4 numbers where the first and last number are of interest here. From 4ae009940d44dacc0bf70fb5b40dd26317491477 Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Sat, 1 Sep 2018 09:37:29 +0200 Subject: [PATCH 003/176] Update deconz.markdown --- source/_components/deconz.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index 4ca7b31935c..5d17fde193f 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -88,7 +88,7 @@ Set attribute of device in deCONZ using [Rest API](http://dresden-elektronik.git | Service data attribute | Optional | Description | |-----------|----------|-------------| | `field` | No | String representing a specific device in deCONZ. | -| `entity` | No | String representing a specific HASS entity of a device in deCONZ. | +| `entity` | No | String representing a specific Home Assistant entity of a device in deCONZ. | | `data` | No | Data is a JSON object with what data you want to alter. | Field and entity are exclusive, i.e you can only use one in a request. @@ -103,6 +103,8 @@ Field and entity are exclusive, i.e you can only use one in a request. Refresh with devices added to deCONZ after Home Assistants latest restart. +Note: deCONZ automatically signals Home Assistant when new sensors are added, but other devices must at this point in time (deCONZ v2.05.35) be added manually using this service or a restart of Home Assistant. + ## {% linkable_title Remote control devices %} Remote controls (ZHASwitch category) will be not be exposed as regular entities, but as events named `deconz_event` with a payload of `id` and `event`. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. From 9a5780476a58d1cf55bcc473f395280bf5bfef9d Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Sun, 2 Sep 2018 10:27:17 +0200 Subject: [PATCH 004/176] Clarify and make sure users add config entry. --- source/_docs/z-wave/installation.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 586f319a68a..b5c9796424b 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -44,6 +44,7 @@ On Raspberry Pi you will need to enable the serial interface in the `raspi-confi # Example configuration.yaml entry zwave: usb_path: /dev/ttyACM0 + device_config: !include zwave_device_config.yaml ``` {% configuration zwave %} @@ -78,7 +79,7 @@ debug: type: boolean default: False device_config / device_config_domain / device_config_glob: - description: This attribute contains node-specific override values. (For releases prior to 0.39 this variable is called **customize**) See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format. + description: This attribute contains node-specific override values. NOTE: This needs to be specified if you are going to use any of the bellow options. See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format. required: false type: string, list keys: From 920d90f747af25d04f51ba6e3b5b573385af1dae Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 3 Sep 2018 14:27:06 +0200 Subject: [PATCH 005/176] Release 77.3 --- _config.yml | 6 +++--- source/_posts/2018-08-29-release-77.markdown | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index e56a21fade4..c4e08b970b8 100644 --- a/_config.yml +++ b/_config.yml @@ -142,13 +142,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 77 -current_patch_version: 2 -date_released: 2018-08-31 +current_patch_version: 3 +date_released: 2018-09-03 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0772---august-31" +patch_version_notes: "#release-0773---september-3" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-08-29-release-77.markdown b/source/_posts/2018-08-29-release-77.markdown index 84b3c8906d6..d57d9910198 100644 --- a/source/_posts/2018-08-29-release-77.markdown +++ b/source/_posts/2018-08-29-release-77.markdown @@ -81,6 +81,18 @@ You didn't think we would forget about Lovelace, did you? This release include a [light.lifx docs]: /components/light.lifx/ [wemo docs]: /components/wemo/ +## {% linkable_title Release 0.77.3 - September 3 %} + +Frontend changes only: + +- Ask "save login" after hass connected [PR](https://github.com/home-assistant/home-assistant-polymer/pull/1631) [@awarecan] +- Show an error when invalid client id or redirect uri [PR](https://github.com/home-assistant/home-assistant-polymer/pull/1620) [@balloob] +- Disable autocapitalization of username field [PR](https://github.com/home-assistant/home-assistant-polymer/pull/1627) [@timmo001] +- Upgrade MDI icons [PR](https://github.com/home-assistant/home-assistant-polymer/pull/1630) [@balloob] +- Update translations + +[@timmo001]: https://github.com/timmo001 + ## {% 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 f8f79877eb3ce8f7c60a1a1aa421fe6e367e6c18 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 3 Sep 2018 17:05:19 +0200 Subject: [PATCH 006/176] Update category --- source/_components/august.markdown | 2 +- .../_components/binary_sensor.august.markdown | 3 +- .../binary_sensor.upcloud.markdown | 2 ++ source/_components/digital_ocean.markdown | 4 +-- source/_components/doorbird.markdown | 6 ++-- .../light.blinksticklight.markdown | 2 +- source/_components/light.blinkt.markdown | 2 +- source/_components/plant.markdown | 4 ++- .../_components/sensor.cert_expiry.markdown | 4 ++- .../sensor.mold_indicator.markdown | 2 +- .../sensor.swiss_hydrological_data.markdown | 32 ++++++++++++++----- source/_components/sensor.syncthru.markdown | 2 +- source/_components/sensor.tradfri.markdown | 2 +- source/_components/sensor.upnp.markdown | 2 +- .../switch.acer_projector.markdown | 4 ++- source/_components/switch.upcloud.markdown | 4 ++- .../_components/switch.wake_on_lan.markdown | 2 +- source/_components/upcloud.markdown | 6 +++- source/_components/upnp.markdown | 4 +-- source/_components/wake_on_lan.markdown | 4 ++- source/_components/zeroconf.markdown | 2 +- 21 files changed, 65 insertions(+), 30 deletions(-) diff --git a/source/_components/august.markdown b/source/_components/august.markdown index 2d079065ec7..9231f7d2f13 100644 --- a/source/_components/august.markdown +++ b/source/_components/august.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: august.png -ha_category: Door bell +ha_category: Doorbell ha_release: "0.64" ha_iot_class: "Cloud Polling" --- diff --git a/source/_components/binary_sensor.august.markdown b/source/_components/binary_sensor.august.markdown index 20d2aec19d0..4af76c345bc 100644 --- a/source/_components/binary_sensor.august.markdown +++ b/source/_components/binary_sensor.august.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: august.png -ha_category: Door bell +ha_category: Doorbell ha_release: "0.64" ha_iot_class: "Cloud Polling" --- @@ -20,3 +20,4 @@ If you have August Doorbell, once you have enabled the [August component](/compo * Doorbell ding sensor * Doorbell motion sensor * Doorbell online sensor + diff --git a/source/_components/binary_sensor.upcloud.markdown b/source/_components/binary_sensor.upcloud.markdown index 6cae22e876c..2723cefa5bf 100644 --- a/source/_components/binary_sensor.upcloud.markdown +++ b/source/_components/binary_sensor.upcloud.markdown @@ -15,6 +15,8 @@ ha_iot_class: Cloud Polling The `upcloud` binary sensor platform allows you to monitor your UpCloud servers. +## {% linkable_title Configuration %} + To use your UpCloud servers, you first have to set up your [UpCloud hub](/components/upcloud/) and then add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/digital_ocean.markdown b/source/_components/digital_ocean.markdown index fd5d744376b..c0dc3175c29 100644 --- a/source/_components/digital_ocean.markdown +++ b/source/_components/digital_ocean.markdown @@ -16,11 +16,11 @@ ha_iot_class: "Local Polling" The `digital_ocean` component allows you to access the information about your [Digital Ocean](https://www.digitalocean.com/) droplets from Home Assistant. -### {% linkable_title Setup %} +## {% linkable_title Setup %} Obtain your API key from your [Digital Ocean dashboard](https://cloud.digitalocean.com/settings/api/tokens). -### {% linkable_title Configuration %} +## {% linkable_title Configuration %} To integrate your Digital Ocean droplets with Home Assistant, add the following section to your `configuration.yaml` file: diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 43f30816d94..839a77a2e91 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -8,13 +8,15 @@ comments: false sharing: true footer: true logo: doorbird.png -ha_category: Hub +ha_category: Doorbell ha_release: "0.54" ha_iot_class: "Local Polling" --- The `doorbird` implementation allows you to integrate your [DoorBird](http://www.doorbird.com/) device in Home Assistant. +## {% linkable_title Configuration %} + To connect your device, add the following to your `configuration.yaml` file: ```yaml @@ -94,4 +96,4 @@ Enabling any monitored condition will delete all registered notification service action: service: light.turn_on entity_id: light.side_entry_porch -``` \ No newline at end of file +``` diff --git a/source/_components/light.blinksticklight.markdown b/source/_components/light.blinksticklight.markdown index d5cc53a99fc..bdd41852704 100644 --- a/source/_components/light.blinksticklight.markdown +++ b/source/_components/light.blinksticklight.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Blinkstick" +title: "Blinkstick Light" description: "Instructions on how to setup Blinkstick lights within Home Assistant." date: 2015-10-08 10:00 sidebar: true diff --git a/source/_components/light.blinkt.markdown b/source/_components/light.blinkt.markdown index 69b72eb1d13..cee02bd7118 100644 --- a/source/_components/light.blinkt.markdown +++ b/source/_components/light.blinkt.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Blinkt!" +title: "Blinkt! Light" description: "Instructions on how to setup Blinkt! RGB LED lights within Home Assistant." date: 2017-04-30 9:00 sidebar: true diff --git a/source/_components/plant.markdown b/source/_components/plant.markdown index 6beaa00557f..df2947e19da 100644 --- a/source/_components/plant.markdown +++ b/source/_components/plant.markdown @@ -8,12 +8,14 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_category: Other +ha_category: Environment ha_release: 0.44 --- This`plant`component lets you merge moisture, conductivity, light intensity, temperature and battery level for a plant into a single UI element. It also supports setting minimum and maximum values for each measurement and will change its state to "problem" if it is not within those limits. +## {% linkable_title Configuration %} + To use your `plant` sensor in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.cert_expiry.markdown b/source/_components/sensor.cert_expiry.markdown index 23682318933..99b0578b76b 100644 --- a/source/_components/sensor.cert_expiry.markdown +++ b/source/_components/sensor.cert_expiry.markdown @@ -8,13 +8,15 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_category: System Monitor +ha_category: Network ha_release: 0.44 ha_iot_class: "depends" --- The `cert_expiry` sensor fetches information from a configured URL and displays the certificate expiry in days. +## {% linkable_title Configuration %} + To add the Certificate Expiry sensor to your installation, add these options to `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.mold_indicator.markdown b/source/_components/sensor.mold_indicator.markdown index 6b337c6967f..e2d870f7924 100644 --- a/source/_components/sensor.mold_indicator.markdown +++ b/source/_components/sensor.mold_indicator.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_category: Climate +ha_category: Environment ha_release: '0.20' ha_iot_class: "Local Polling" --- diff --git a/source/_components/sensor.swiss_hydrological_data.markdown b/source/_components/sensor.swiss_hydrological_data.markdown index 44f4d6100bd..c6110b8f7c5 100644 --- a/source/_components/sensor.swiss_hydrological_data.markdown +++ b/source/_components/sensor.swiss_hydrological_data.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: swiss-hydrological-data.png -ha_category: Weather +ha_category: Environment ha_iot_class: "Cloud Polling" ha_release: 0.22 --- @@ -19,33 +19,49 @@ ha_release: 0.22 The `swiss_hydrological_data` sensor will show you details (temperature, level, and discharge) of rivers and lakes in Switzerland. +## {% linkable_title Setup %} + The [station overview](http://www.hydrodaten.admin.ch/en/danger-levels-table.html) contains a list of all available measuring points and will help to determine the ID of station which is needed for the configuration. +## {% linkable_title Configuration %} + To enable this sensor, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: swiss_hydrological_data - station: STATION_ID + - platform: swiss_hydrological_data + station: STATION_ID ``` -Configuration variables: - -- **name** (*Optional*): Name to use in the frontend. -- **station** (*Required*): The ID of the measurement point. +{% configuration %} +station: + description: The ID of the measurement point. + required: true + type: string +name: + description: Name to use in the frontend. + required: false + type: string + default: +{% endconfiguration %} The hydrological measurings are coming from the [Swiss Federal Office for the Environment (Bundesamt für Umwelt - Abt. Hydrologie)](http://www.hydrodaten.admin.ch) and are updated almost in real-time. +## {% linkable_title Example %} + This sensor contains additional information which an easily accessed by a [template sensor](/components/sensor.template/). +{% raw %} ```yaml # Example configuration.yaml entry sensor: platform: template sensors: discharge: - value_template: '{% raw %}{{ states.sensor.aare.attributes.Discharge }}{% endraw %}' + value_template: '{{ states.sensor.aare.attributes.Discharge }}' friendly_name: 'Discharge' ``` +{% endraw %} + diff --git a/source/_components/sensor.syncthru.markdown b/source/_components/sensor.syncthru.markdown index 19b2e5d1399..f2238dda257 100644 --- a/source/_components/sensor.syncthru.markdown +++ b/source/_components/sensor.syncthru.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: samsung.png -ha_category: Sensor +ha_category: System Monitor ha_iot_class: "Local Polling" ha_release: 0.66 --- diff --git a/source/_components/sensor.tradfri.markdown b/source/_components/sensor.tradfri.markdown index 98d673d16a6..91827191509 100644 --- a/source/_components/sensor.tradfri.markdown +++ b/source/_components/sensor.tradfri.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "IKEA Trådfri sensor" +title: "IKEA Trådfri Sensor" description: "Access and control your ZigBee-based IKEA Trådfri (Tradfri) Sensors." date: 2017-04-12 22.04 sidebar: true diff --git a/source/_components/sensor.upnp.markdown b/source/_components/sensor.upnp.markdown index c9d31bcca21..027d76d9ede 100644 --- a/source/_components/sensor.upnp.markdown +++ b/source/_components/sensor.upnp.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: upnp.png -ha_category: "Other" +ha_category: Network ha_release: 0.48 ha_iot_class: "Local Polling" --- diff --git a/source/_components/switch.acer_projector.markdown b/source/_components/switch.acer_projector.markdown index 70e1ae5499f..7599cd6d96e 100644 --- a/source/_components/switch.acer_projector.markdown +++ b/source/_components/switch.acer_projector.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: acer.png -ha_category: Switch +ha_category: Multimedia ha_iot_class: "Local Polling" ha_release: 0.19 --- @@ -16,6 +16,8 @@ ha_release: 0.19 The `acer_projector` switch platform allows you to control the state of RS232 connected projectors from [Acer](http://www.acer.com). +## {% linkable_title Configuration %} + To use your Acer Projector in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/switch.upcloud.markdown b/source/_components/switch.upcloud.markdown index 98f45d0e68d..bdd03f6af5e 100644 --- a/source/_components/switch.upcloud.markdown +++ b/source/_components/switch.upcloud.markdown @@ -8,13 +8,15 @@ comments: false sharing: true footer: true logo: upcloud.png -ha_category: Switch +ha_category: System Monitor ha_release: 0.65 ha_iot_class: Cloud Polling --- The `upcloud` switch platform allows you to control (start/stop) your UpCloud servers. +## {% linkable_title Configuration %} + To use your UpCloud servers, you first have to set up your [UpCloud hub](/components/upcloud/) and then add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/switch.wake_on_lan.markdown b/source/_components/switch.wake_on_lan.markdown index 161cfcd1b50..c487c602dac 100644 --- a/source/_components/switch.wake_on_lan.markdown +++ b/source/_components/switch.wake_on_lan.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: ethernet.png -ha_category: Switch +ha_category: Network ha_release: 0.16 ha_iot_class: "Local Polling" --- diff --git a/source/_components/upcloud.markdown b/source/_components/upcloud.markdown index dcb15e41fc4..abd6d945431 100644 --- a/source/_components/upcloud.markdown +++ b/source/_components/upcloud.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -ha_category: Hub +ha_category: System Monitor ha_release: 0.65 logo: upcloud.png ha_iot_class: Cloud Polling @@ -16,8 +16,12 @@ ha_iot_class: Cloud Polling The `upcloud` component allows you to access the information about your [UpCloud](https://www.upcloud.com/) servers from Home Assistant. +## {% linkable_title Setup %} + Set up your API user credentials in your [UpCloud control panel](https://my.upcloud.com/). +## {% linkable_title Configuration %} + To integrate your UpCloud servers with Home Assistant, add the following section to your `configuration.yaml` file: ```yaml diff --git a/source/_components/upnp.markdown b/source/_components/upnp.markdown index 842e3b25ba4..02ba10a72fd 100644 --- a/source/_components/upnp.markdown +++ b/source/_components/upnp.markdown @@ -8,13 +8,13 @@ comments: false sharing: true footer: true logo: upnp.png -ha_category: "Other" +ha_category: Network ha_release: 0.18 --- The `upnp` component enables you to collect network statistics from your router such as bytes in/out and packets in/out. This information is provided by the Internet Gateway Device (IGD) Protocol if enabled on your router. -The IGD automatically creates port forwarding mappings on your router for Home Assistant, exposing your installation to the internet. The mapping will never automatically expire. Upon stopping Home Assistant, the mapping will be removed from your router. +The IGD automatically creates port forwarding mappings on your router for Home Assistant, exposing your installation to the internet. The mapping will never automatically expire. Upon stopping Home Assistant, the mapping will be removed from your router. Please note that UPnP or NAT-PMP needs to be enabled on your router for this component to work. diff --git a/source/_components/wake_on_lan.markdown b/source/_components/wake_on_lan.markdown index 2f7b1d4532d..93787c4aaef 100644 --- a/source/_components/wake_on_lan.markdown +++ b/source/_components/wake_on_lan.markdown @@ -8,13 +8,15 @@ comments: false sharing: true footer: true logo: ethernet.png -ha_category: Utility +ha_category: Network ha_release: "0.49" ha_iot_class: "Local Push" --- The `wake_on_lan` component enables the ability to send _magic packets_ to [Wake on LAN](https://en.wikipedia.org/wiki/Wake-on-LAN) capable devices, to turn them on. +## {% linkable_title Configuration %} + To use this component in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/zeroconf.markdown b/source/_components/zeroconf.markdown index 3d054ea4d59..d1459fdd1b1 100644 --- a/source/_components/zeroconf.markdown +++ b/source/_components/zeroconf.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: avahi.png -ha_category: "Other" +ha_category: Network ha_release: 0.18 --- From 458bcdd73737791065f773173895fea3bf38c16f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 3 Sep 2018 17:07:04 +0200 Subject: [PATCH 007/176] Update category --- source/_components/sensor.miflora.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.miflora.markdown b/source/_components/sensor.miflora.markdown index 85ad3cd03b5..92d2a4ea4fd 100644 --- a/source/_components/sensor.miflora.markdown +++ b/source/_components/sensor.miflora.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: miflora.png -ha_category: DIY +ha_category: Environment ha_release: 0.29 ha_iot_class: "Local Polling" --- From cd5f5dc54044269924564523848e959bf658ea1f Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 3 Sep 2018 18:48:10 +0200 Subject: [PATCH 008/176] Revert --- source/hassio/installation.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index 88aac017cc6..1b17327d575 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -77,14 +77,14 @@ A detailed guide about running Hass.io as a virtual machine is available in the [etcher]: https://etcher.io/ [Virtual Appliance]: https://github.com/home-assistant/hassos/blob/dev/Documentation/boards/ova.md [hassos-network]: https://github.com/home-assistant/hassos/blob/dev/Documentation/network.md -[pi0-w]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_rpi0-w-2.2.img.gz -[pi1]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_rpi-2.2.img.gz -[pi2]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_rpi2-2.2.img.gz -[pi3-32]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_rpi3-2.2.img.gz -[pi3-64]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_rpi3-64-2.2.img.gz +[pi0-w]: https://github.com/home-assistant/hassos/releases/download/1.10/hassos_rpi0-w-1.10.img.gz +[pi1]: https://github.com/home-assistant/hassos/releases/download/1.10/hassos_rpi-1.10.img.gz +[pi2]: https://github.com/home-assistant/hassos/releases/download/1.10/hassos_rpi2-1.10.img.gz +[pi3-32]: https://github.com/home-assistant/hassos/releases/download/1.10/hassos_rpi3-1.10.img.gz +[pi3-64]: https://github.com/home-assistant/hassos/releases/download/1.10/hassos_rpi3-64-1.10.img.gz [tinker]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_tinker-2.2.img.gz [odroid-c2]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_odroid-c2-2.2.img.gz -[vmdk]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_ova-2.2.vmdk.gz +[vmdk]: https://github.com/home-assistant/hassos/releases/download/1.10/hassos_ova-1.10.vmdk.gz [linux]: https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio [local]: http://hassio.local:8123 [samba]: /addons/samba/ From eda7b8ce9dcf9fadb251c58e6a4a14d0cddf1b30 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 3 Sep 2018 22:29:00 +0200 Subject: [PATCH 009/176] Update link --- source/_docs/configuration/securing.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/securing.markdown b/source/_docs/configuration/securing.markdown index 4ed3e20243e..664acbe217b 100644 --- a/source/_docs/configuration/securing.markdown +++ b/source/_docs/configuration/securing.markdown @@ -14,7 +14,7 @@ One major advantage of Home Assistant is that it's not dependent on cloud servic ### {% linkable_title Checklist %} -- [Protect your web interface with a password](/getting-started/basic/#password-protecting-the-web-interface) +- [Choose a strong password](/docs/authentication/). - Secure your host. Sources could be [Red Hat Enterprise Linux 7 Security Guide](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/pdf/Security_Guide/Red_Hat_Enterprise_Linux-7-Security_Guide-en-US.pdf), [CIS Red Hat Enterprise Linux 7 Benchmark](https://benchmarks.cisecurity.org/tools2/linux/CIS_Red_Hat_Enterprise_Linux_7_Benchmark_v1.0.0.pdf), or the [Securing Debian Manual](https://www.debian.org/doc/manuals/securing-debian-howto/index.en.html). - Restrict network access to your devices. Set `PermitRootLogin no` in your sshd config (usually `/etc/ssh/sshd_config`) and to use SSH keys for authentication instead of passwords. - Don't run Home Assistant as root – consider the Principle of Least Privilege. From f1c91676f6a82c83396344234713d30c3702eac8 Mon Sep 17 00:00:00 2001 From: "Andrey Mikhaylov (lolmaus)" Date: Tue, 4 Sep 2018 09:50:05 +0300 Subject: [PATCH 010/176] Added Razberry Board to supported devices table (#6193) since it already has it's own support page --- source/_docs/z-wave/controllers.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown index fdaac560c3c..128b122649b 100644 --- a/source/_docs/z-wave/controllers.markdown +++ b/source/_docs/z-wave/controllers.markdown @@ -24,6 +24,7 @@ You need to have a [supported Z-Wave USB stick or module](https://github.com/Ope | Sigma Designs UZB Stick | | | | | Tricklestar | | | | | Vision USB Stick | | | | +| ZWave.me Razberry Board | ✓ | | | | ZWave.me UZB1 | ✓ | | |

From 5966611f26fe1888f000264829bbfc3eb5374473 Mon Sep 17 00:00:00 2001 From: jma89 Date: Tue, 4 Sep 2018 02:51:01 -0400 Subject: [PATCH 011/176] Clarify MQTT Advanced Configuration (#6192) Properly describe the flag that needs to be changed and provide additional info on where the .conf files need to live. (Information that took me far longer than necessary to figure out.) --- source/_addons/mosquitto.markdown | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index 2150b1a3080..70f591520c0 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -89,10 +89,11 @@ See the following links for more information: Add the following configuration to enable ACLs: -1. Set `customize` flag to `true` in your configuration. +1. Set the `active` flag within the `customize` section to `true` in your configuration. 2. Create a file in `/share/mosquitto` named `acl.conf` with the following contents: - ```text acl_file /share/mosquitto/accesscontrollist ``` 3. Create a file in `/share/mosquitto` named `accesscontrollist` and add contents according to your requirements. + +The `/share` folder can be found on the host filesystem under `/usr/share/hassio/share`, or via the `Share` folder through SMB (Samba). From 53c82a60675196bde2dd45e89ce2a70fa55c981a Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 4 Sep 2018 07:53:31 +0100 Subject: [PATCH 012/176] For the updates to the customize docs (#6188) For the updates to the customize docs, to explain how to change an entity ID --- source/images/frontend/entity_box.png | Bin 0 -> 351 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/frontend/entity_box.png diff --git a/source/images/frontend/entity_box.png b/source/images/frontend/entity_box.png new file mode 100644 index 0000000000000000000000000000000000000000..8336a978d985f1708815d427acee02f032a271f4 GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7l!{JxM1({$v_d#0*}aI z1_nK45N51cYF`EvWH0gbb!C6V$t=pKupxEr5}=S|iEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8f1XPZ!4!i_>c_+h;L3iX8uVUdlU|MeNEUC+U;Edm5j~%{!px z9=Lu2^AoxVC!{2KwKgYF6PMfh~Zf2#}cDa&`PVdg8 z+;9zj{e&~Sr(WMmx2t`^`E3hq8fp>+zpda*X%6I^`S`{ajTV_CkJ!Z$n+|Bo^-c-2 zXIz|y=(@5#c2-Z#aeLLn p)@ Date: Tue, 4 Sep 2018 07:54:35 +0100 Subject: [PATCH 013/176] Reworking the customize docs (#6189) Reworking the customize docs: 1. Add information on using the UI to change the entity ID and name (where supported) 2. Document the use of the UI to customize 3. Rewrite the configuration block to use the new configuration block standard 4. Move the manual editing section towards the end [This change](https://github.com/home-assistant/home-assistant.io/pull/6188) provides the image referenced --- .../customizing-devices.markdown | 103 +++++++++++++----- 1 file changed, 78 insertions(+), 25 deletions(-) diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown index a3dc6cc91a3..8de3aa169e0 100644 --- a/source/_docs/configuration/customizing-devices.markdown +++ b/source/_docs/configuration/customizing-devices.markdown @@ -10,8 +10,86 @@ footer: true redirect_from: /getting-started/customizing-devices/ --- +## {% linkable_title Changing the entity_id %} + +You can use the UI to change the `entity_id` and friendly name of supported entities. To do this: + +1. Select the entity, either from or from the frontend, or by clicking next to the entity in the dev-states menu +2. Click on the cog in the right corner of the entity's dialog +3. Enter the new name or the new entity ID (remember not to change the domain of the entity - the part before the `.`) +4. Select *Save* + +## {% linkable_title Customizing entities %} + By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by overriding attributes of specific entities. +### {% linkable_title Customization using the UI %} + +Under the *Configuration* menu you'll find the *Customization* menu. When you select an entity to customize, you'll see all the existing attributes listed and you can customize those, or select an additional supported attribute ([see below](/docs/configuration/customizing-devices/#possible-values)). + +#### {% linkable_title Possible values %} + +{% configuration customize %} +friendly_name: + description: Name of the entity as displayed in the UI. + required: false + type: string +homebridge_name: + description: Name of the entity in `HomeBridge`. + required: false + type: string +hidden: + description: Set to `true` to hide the entity. + required: false + type: boolean + default: False +homebridge_hidden: + description: Set to `true` to hide the entity from `HomeBridge`. + required: false + type: boolean + default: False +emulated_hue_hidden: + description: Set to `true` to hide the entity from `emulated_hue` (this will be deprecated in the near future and should be configured in [`emulated_hue`](/components/emulated_hue)). + required: false + type: boolean + default: False +entity_picture: + description: URL to use as picture for entity. + required: false + type: string +icon: + description: Any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com) ([Cheatsheet](https://materialdesignicons.com/cheatsheet)). Prefix name with `mdi:`, ie `mdi:home`. + required: false + type: string +assumed_state: + description: For switches with an assumed state two buttons are shown (turn off, turn on) instead of a switch. By setting `assumed_state` to `false` you will get the default switch icon. + required: false + type: boolean + default: True +device_class: + description: Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). + required: false + type: boolean +initial_state: + description: Sets the initial state for automations, `on` or `off`. + required: false + type: string +unit_of_measurement: + description: Defines the units of measurement, if any. + required: false + type: string +{% endconfiguration %} + +#### {% linkable_title Device Class %} + +Device class is currently supported by the following components: + +* [Binary Sensor](/components/binary_sensor/) +* [Sensor](/components/sensor/) +* [Cover](/components/cover/) + +### {% linkable_title Manual customization %} +

If you implement `customize`, `customize_domain`, or `customize_glob` you must make sure it is done inside of `homeassistant:` or it will fail.

@@ -53,30 +131,6 @@ homeassistant: homebridge_hidden: true ``` -### {% linkable_title Possible values %} - -| Attribute | Description | -| --------- | ----------- | -| `friendly_name` | Name of the entity. -| `homebridge_name` | Name of the entity in `HomeBridge`. -| `hidden` | Set to `true` to hide the entity. -| `homebridge_hidden` | Set to `true` to hide the entity from `HomeBridge`. -| `emulated_hue_hidden` | Set to `true` to hide the entity from `emulated_hue` (this will be deprecated in the near future and should be configured in [`emulated_hue`](/components/emulated_hue)). -| `entity_picture` | Url to use as picture for entity. -| `icon` | Any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com) ([Cheatsheet](https://materialdesignicons.com/cheatsheet)). Prefix name with `mdi:`, ie `mdi:home`. -| `assumed_state` | For switches with an assumed state two buttons are shown (turn off, turn on) instead of a switch. By setting `assumed_state` to `false` you will get the default switch icon. -| `device_class` | Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). -| `initial_state` | Sets the initial state for automations. `on` or `off`. -| `unit_of_measurement` | Defines the units of measurement, if any. - -### {% linkable_title Device Class %} - -Device class is currently supported by the following components: - -* [Binary Sensor](/components/binary_sensor/) -* [Sensor](/components/sensor/) -* [Cover](/components/cover/) - ### {% linkable_title Reloading customize %} Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant.reload_core_config`. This allows you to change your customize section and see it being applied without having to restart Home Assistant. To call this service, go to the service developer tool icon service developer tools, select the service `homeassistant.reload_core_config` and click "CALL SERVICE". @@ -84,4 +138,3 @@ Home Assistant offers a service to reload the core configuration while Home Assi

New customize information will be applied the next time the state of the entity gets updated.

- From e2dcd24aabc00467cb706878d3ba5f0d9a13538b Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Tue, 4 Sep 2018 03:24:27 -0400 Subject: [PATCH 014/176] Update note about default auth_providers (#6184) * Update note about default auth_providers Update the warning note to specify that HA automatically configures auth_providers, and manually specifying auth_providers in configuration.yaml can cause issues * Minor changes --- source/_docs/authentication/providers.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/authentication/providers.markdown b/source/_docs/authentication/providers.markdown index b672beb0967..728ecb58b2d 100644 --- a/source/_docs/authentication/providers.markdown +++ b/source/_docs/authentication/providers.markdown @@ -27,7 +27,7 @@ To make the transition from API password to authentication system easier, we've ## {% linkable_title Configuring auth providers %}

-By configuring your own instead of using the default configuration, you take full responsibility for the authentication of the system. +Home Assistant automatically configures the standard auth providers and you **do not** need to specify `auth_providers` in your `configuration.yaml` file. Specifying `auth_providers` in your configuration will disable all auth providers that are not listed and can reduce your security or create difficulties logging in.

Authentication providers are configured in your `configuration.yaml` under the `homeassistant:` block: From 02f5a1eca7bf402a4a7707c9e6657b786d693f2b Mon Sep 17 00:00:00 2001 From: Alexander Date: Tue, 4 Sep 2018 13:25:01 +0600 Subject: [PATCH 015/176] return_to_home -> return_to_base (#6185) --- source/_components/vacuum.xiaomi_miio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 3adcbc43c45..5864b32bffb 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -48,7 +48,7 @@ Configuration variables: ## {% linkable_title Platform Services %} -In addition to all of the services provided by the `vacuum` component (`start`, `pause`, `stop`, `return_to_home`, `locate`, `set_fan_speed` and `send_command`), the `xiaomi` platform introduces specific services to access the remote control mode of the robot. These are: +In addition to all of the services provided by the `vacuum` component (`start`, `pause`, `stop`, `return_to_base`, `locate`, `set_fan_speed` and `send_command`), the `xiaomi` platform introduces specific services to access the remote control mode of the robot. These are: - `xiaomi_remote_control_start` - `xiaomi_remote_control_stop` From d5c4ec7e304a914e3128f4cb9a8a44cfa4e922e7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 4 Sep 2018 10:59:49 +0200 Subject: [PATCH 016/176] Update category and other minor changes --- source/_components/apcupsd.markdown | 20 +++++++++++++++----- source/_components/apple_tv.markdown | 2 +- source/_components/axis.markdown | 6 +++--- source/_components/bloomsky.markdown | 15 +++++++++++---- source/_components/camera.bloomsky.markdown | 2 ++ source/_components/eufy.markdown | 18 +++++++++++------- source/_components/microsoft_face.markdown | 6 +++++- source/_components/sensor.bloomsky.markdown | 2 ++ 8 files changed, 50 insertions(+), 21 deletions(-) diff --git a/source/_components/apcupsd.markdown b/source/_components/apcupsd.markdown index fd25d00d0d5..44265218d24 100644 --- a/source/_components/apcupsd.markdown +++ b/source/_components/apcupsd.markdown @@ -8,12 +8,14 @@ comments: false sharing: true footer: true logo: apcupsd.png -ha_category: Hub +ha_category: System Monitor ha_release: 0.13 --- [APCUPSd](http://www.apcupsd.org/) status information can be integrated into Home Assistant when the Network Information Server (NIS) [is configured](http://www.apcupsd.org/manual/manual.html#nis-server-client-configuration-using-the-net-driver) is enabled on the APC device. +## {% linkable_title Configuration %} + To enable this sensor, add the following lines to your `configuration.yaml`: ```yaml @@ -21,8 +23,16 @@ To enable this sensor, add the following lines to your `configuration.yaml`: apcupsd: ``` -Configuration variables: - -- **host** (*Optional*): The hostname/IP address on which the APCUPSd NIS is being served. Defaults to `localhost`. -- **port** (*Optional*): The port on which the APCUPSd NIS is listening. Defaults to `3551`. +{% configuration %} +host: + description: The hostname/IP address on which the APCUPSd NIS is being served. + required: false + type: string + default: localhost +port: + description: The port on which the APCUPSd NIS is listening. + required: false + type: int + default: 3551 +{% endconfiguration %} diff --git a/source/_components/apple_tv.markdown b/source/_components/apple_tv.markdown index 93d192a00c2..e9008af6385 100644 --- a/source/_components/apple_tv.markdown +++ b/source/_components/apple_tv.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: apple.png -ha_category: Hub +ha_category: Multimedia ha_iot_class: "Local Push" ha_release: 0.49 --- diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index 6f9a2cc4826..6662b55300a 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: axis.png -ha_category: Hub +ha_category: Camera ha_release: "0.45" ha_iot_class: "Local Polling" --- @@ -17,6 +17,8 @@ ha_iot_class: "Local Polling" Home Assistant will automatically discover their presence on your network. +## {% linkable_title Configuration %} + You can also manually configure your devices by adding the following lines to your `configuration.yaml` file: ```yaml @@ -28,8 +30,6 @@ axis: - camera ``` -Configuration variables: - ## {% linkable_title Configuration variables %} - **device** (*Required*): Unique name diff --git a/source/_components/bloomsky.markdown b/source/_components/bloomsky.markdown index 620b390e69b..1139ee7a9ad 100644 --- a/source/_components/bloomsky.markdown +++ b/source/_components/bloomsky.markdown @@ -8,15 +8,19 @@ comments: false sharing: true footer: true logo: bloomsky.png -ha_category: Hub +ha_category: Environment ha_release: 0.14 ha_iot_class: "Cloud Polling" --- The `bloomsky` component allows you to access your [BloomSky](https://www.bloomsky.com/) weather station's [sensors](/components/sensor.bloomsky), [binary sensors](/components/binary_sensor.bloomsky), and [camera](/components/camera.bloomsky) from Home Assistant. +## {% linkable_title Setup %} + Obtain your API key from your [BloomSky dashboard](https://dashboard.bloomsky.com). Click `developers` in the bottom left of the screen. +## {% linkable_title Configuration %} + To integrate your BloomSky hub with Home Assistant, add the following section to your `configuration.yaml` file: ```yaml @@ -25,6 +29,9 @@ bloomsky: api_key: YOUR_API_KEY ``` -Configuration variables: - -- **api_key** (*Required*): Your BloomSky API key. +{% configuration %} +api_key: + description: Your BloomSky API key. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/camera.bloomsky.markdown b/source/_components/camera.bloomsky.markdown index bd6f8a58b9e..6c600b20a84 100644 --- a/source/_components/camera.bloomsky.markdown +++ b/source/_components/camera.bloomsky.markdown @@ -16,6 +16,8 @@ ha_iot_class: "Local Polling" The `bloomsky` camera component allows you to view the current photo created by the camera in the [BloomSky](https://www.bloomsky.com) weather station. This can work in concert with [BloomSky sensors](/components/sensor.bloomsky). +## {% linkable_title Configuration %} + To enable this camera in your installation, set up the [BloomSky component](/components/bloomsky) with your API key and add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/eufy.markdown b/source/_components/eufy.markdown index 60ec2a470dd..e2c00424fd5 100644 --- a/source/_components/eufy.markdown +++ b/source/_components/eufy.markdown @@ -38,17 +38,21 @@ eufy: name: Smart Switch ``` -access_token can be obtained by running: +`access_token can be obtained by running: -``` -curl -H "Content-Type: application/json" -d '{"client_id":"eufyhome-app", "client_Secret":"GQCpr9dSp3uQpsOMgJ4xQ", "email":"USERNAME", "password":"PASSWORD"}' https://home-api.eufylife.com/v1/user/email/login | jq +```bash +$ curl -H "Content-Type: application/json" \ + -d '{"client_id":"eufyhome-app", "client_Secret":"GQCpr9dSp3uQpsOMgJ4xQ", "email":"USERNAME", "password":"PASSWORD"}' \ + https://home-api.eufylife.com/v1/user/email/login \ + | jq ``` -replacing USERNAME and PASSWORD with the Eufy username and password. This will give an access_token. Then run: +replacing USERNAME and PASSWORD with the Eufy username and password. This will give an `access_token`. Then run: -``` -curl -H token:TOKEN -H category:Home https://home-api.eufylife.com/v1/device/list/devices-and-groups | jq +```bash +$ curl -H token:TOKEN -H category:Home \ + https://home-api.eufylife.com/v1/device/list/devices-and-groups | jq ``` -replacing TOKEN with the access_token from the previous command. This will provide the local_code for each device. +replacing TOKEN with the `access_token` from the previous command. This will provide the local_code for each device. diff --git a/source/_components/microsoft_face.markdown b/source/_components/microsoft_face.markdown index d7d8cdc7ed0..2d9cb4318f4 100644 --- a/source/_components/microsoft_face.markdown +++ b/source/_components/microsoft_face.markdown @@ -8,14 +8,18 @@ comments: false sharing: true footer: true logo: microsoft.png -ha_category: Hub +ha_category: Image Processing ha_release: "0.37" --- The `microsoft_face` component platform is the main component for Microsoft Azure Cognitive service [Face](https://www.microsoft.com/cognitive-services/en-us/face-api). All data are stored in your own private instance in the Azure cloud. +## {% linkable_title Setup %} + You need an API key, which is free, but requires an [Azure registration](https://azure.microsoft.com/de-de/free/) using your Microsoft ID. The free resource (*F0*) is limited to 20 requests per minute and 30k requests in a month. If you don't want to use the Azure cloud, you can also get an API key by registering with [cognitive-services](https://www.microsoft.com/cognitive-services/en-us/subscriptions). Please note that all keys on cognitive services must be recreated every 90 days. +## {% linkable_title Configuration %} + To enable the Microsoft Face component, add the following to your `configuration.yaml`: ```yaml diff --git a/source/_components/sensor.bloomsky.markdown b/source/_components/sensor.bloomsky.markdown index 61b850de1e1..d2e1ca31a50 100644 --- a/source/_components/sensor.bloomsky.markdown +++ b/source/_components/sensor.bloomsky.markdown @@ -16,6 +16,8 @@ ha_iot_class: "Cloud Polling" The `bloomsky` sensor component allows you to view the measurements made by sensors in the [BloomSky](https://www.bloomsky.com) weather station. This can work in concert with the [BloomSky camera](/components/camera.bloomsky). +## {% linkable_title Configuration %} + To enable these sensors in your installation, set up the [BloomSky component](/components/bloomsky) with your API key add the following to your `configuration.yaml` file: ```yaml From 7eb35fcac71ba53768413eccb27b6d68992577d5 Mon Sep 17 00:00:00 2001 From: itineric <35140497+itineric@users.noreply.github.com> Date: Tue, 4 Sep 2018 11:04:15 +0200 Subject: [PATCH 017/176] Add missing color_state_address (#6194) --- source/_components/light.knx.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/light.knx.markdown b/source/_components/light.knx.markdown index 5587f134ecc..4e0e7560801 100644 --- a/source/_components/light.knx.markdown +++ b/source/_components/light.knx.markdown @@ -37,6 +37,7 @@ Configuration variables: - **state_address** (*Optional*): separate KNX group address for retrieving the switch state of the light. - **brightness_state_address** (*Optional*): separate KNX group address for retrieving the dimmed state of the light. - **color_address** (*Optional*): separate KNX group address for setting the color of the light. +- **color_state_address** (*Optional*): separate KNX group address for retrieving the color of the light. Some KNX devices can change their state internally without any messages on the KNX bus, e.g., if you configure a timer on a channel. The optional `state_address` can be used to inform Home Assistant about these state changes. If a KNX message is seen on the bus addressed to the given state address, this will overwrite the state of the switch object. For switching/light actuators that are only controlled by a single group address and can't change their state internally, you don't have to configure the state address. From ae19e9e8db12209cb2d7a131678dddb9da60c9f8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 4 Sep 2018 14:55:32 +0200 Subject: [PATCH 018/176] Remove reference to HASS alexa skill via website --- source/cloud/alexa.markdown | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/source/cloud/alexa.markdown b/source/cloud/alexa.markdown index 7e140825afd..8e90a4d8eef 100644 --- a/source/cloud/alexa.markdown +++ b/source/cloud/alexa.markdown @@ -10,13 +10,13 @@ footer: true redirect_from: /components/cloud.alexa/ --- -The Alexa integration allows users to control the entities via the [Home Assistant Smart Home skill for Alexa][alexa skill]. This means that you can say things like "Alexa, turn on the kitchen light" to control your local Home Assistant. +The Alexa integration allows users to control the entities via the Home Assistant Smart Home skill for Alexa. This means that you can say things like "Alexa, turn on the kitchen light" to control your local Home Assistant. To use this integration, you need to have: - The cloud component set up. [Learn more](/components/cloud/) - An Alexa enabled device like the Amazon Echo - - Activated the [Home Assistant Smart Home skill for Alexa][alexa skill] + - Activated the Home Assistant Smart Home skill via the Alexa app You can use `configuration.yaml` to configure the entities that are being shown to Alexa and how they are exposed. @@ -110,5 +110,3 @@ Currently, the following domains are available to be used with Alexa: - scene - script (enables/disables) - switch - -[alexa skill]: https://alexa.amazon.com/spa/index.html#skills/dp/B0772J1QKB/?ref=skill_dsk_skb_sr_2 From 90246b21673c1d3d4127b86abab52265c5d729da Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 4 Sep 2018 15:08:39 +0200 Subject: [PATCH 019/176] Remove duplicate content --- source/_components/climate.daikin.markdown | 6 +----- source/_components/daikin.markdown | 18 +++++++++--------- source/_components/sensor.daikin.markdown | 11 ++--------- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/source/_components/climate.daikin.markdown b/source/_components/climate.daikin.markdown index 2201872a15b..904b3e5fa13 100644 --- a/source/_components/climate.daikin.markdown +++ b/source/_components/climate.daikin.markdown @@ -23,11 +23,7 @@ The `daikin` climate platform integrates Daikin air conditioning systems into Ho Current temperature is displayed. -

-Please note, the `daikin` platform integrates **ONLY the european versions of Daikin ACs (models BRP069A41, 42, 43, 45)** into Home Assistant. BRP069A42 does not support setting of fan speed or fan swing mode. -

- -The platform has been integrated with discovery so all your Daikin AC's climate devices can be automatically discovered. +## {% linkable_title Configuration %} To enable the platform, add the following lines to your `configuration.yaml` file: diff --git a/source/_components/daikin.markdown b/source/_components/daikin.markdown index 84624b5af04..d4b25765958 100644 --- a/source/_components/daikin.markdown +++ b/source/_components/daikin.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: daikin.png -ha_category: Hub +ha_category: Climate ha_release: 0.59 ha_iot_class: "Local Polling" --- @@ -16,11 +16,15 @@ ha_iot_class: "Local Polling" The `daikin` component integrates Daikin air conditioning systems into Home Assistant. -To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your 'configuration.yaml' file: +## {% linkable_title Supported hardware %} -

-Please note, the Daikin platform integrates **ONLY the european versions of Daikin ACs (models BRP069A41, 42, 43, 45)** into Home Assistant. -

+**Only** the european versions of Daikin ACs (models BRP069A41, 42, 43, 45). + +The model BRP069A42 does not support setting of fan speed or fan swing mode. + +Please note that some AC devices may report outside temperature only when they are turned on. + +## {% linkable_title Configuration %} To automatically add all your Daikin devices (ACs and associated sensors) into your Home Assistant installation, add the following to your `configuration.yaml` file: @@ -52,7 +56,3 @@ monitored_conditions: description: The current temperature measured outside the house. {% endconfiguration %} -

-Please note that some AC devices may report outside temperature only when they are turned on. -

- diff --git a/source/_components/sensor.daikin.markdown b/source/_components/sensor.daikin.markdown index 250da44a727..5d9ba959592 100644 --- a/source/_components/sensor.daikin.markdown +++ b/source/_components/sensor.daikin.markdown @@ -16,12 +16,8 @@ ha_iot_class: "Local Polling" The `daikin` sensor platform integrates Daikin air conditioning systems into Home Assistant, enabling displaying the following parameters: -- **inside temperature** -- **outside temperature** - -

-Please note, the `daikin` platform integrates **ONLY the european versions of Daikin ACs (models BRP069A41, 42, 43, 45)** into Home Assistant. -

+- Inside temperature +- Outside temperature ## {% linkable_title Configuration %} @@ -54,6 +50,3 @@ monitored_conditions: description: The current temperature measured outside the house. {% endconfiguration %} -

- Please note that some AC devices may report outside temperature only when they are turned on. -

From bec5ecc5ba39ee38031f64fd44def9e22fb5af36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Tue, 4 Sep 2018 21:40:59 +0200 Subject: [PATCH 020/176] Clarify what components work with weather-card (#6195) * Clarify what components work with weather-card The weathe card only works with weather components, not weather sensors - a fact that seems to be causing a bit of confusion judging from the frequent questions on discord. I know it took me a while to figure out... I hope I used the correct nomenclature. * Minor fixes. --- source/_lovelace/weather-forecast.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_lovelace/weather-forecast.markdown b/source/_lovelace/weather-forecast.markdown index b92588bd2c2..c636319db9a 100644 --- a/source/_lovelace/weather-forecast.markdown +++ b/source/_lovelace/weather-forecast.markdown @@ -34,3 +34,9 @@ entity: - type: weather-forecast entity: weather.demo_weather_north ``` + +

+ This card works only with platforms that define a `weather` entity. + + E.g., it works with [Dark Sky](https://www.home-assistant.io/components/weather.darksky/) but not [Dark Sky Sensor](https://www.home-assistant.io/components/sensor.darksky/) +

From bb68802e9b7cbebd37f5036035f5b4ed41d813d6 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 5 Sep 2018 06:50:50 +0100 Subject: [PATCH 021/176] Making title linkable (#6198) --- source/_docs/autostart/systemd.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/autostart/systemd.markdown b/source/_docs/autostart/systemd.markdown index 17211e5ed9d..6b43b19c2e1 100644 --- a/source/_docs/autostart/systemd.markdown +++ b/source/_docs/autostart/systemd.markdown @@ -78,7 +78,7 @@ ExecStopPost=/usr/bin/docker rm -f home-assistant-%i WantedBy=multi-user.target ``` -### Next Steps +### {% linkable_title Next Steps %} You need to reload `systemd` to make the daemon aware of the new configuration. From 3530b131e2b0c28854bf4ada9e2ab66f1ac6179c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 5 Sep 2018 06:51:21 +0100 Subject: [PATCH 022/176] Trying to direct people away from this (#6197) Given the pain that uninformed people run into with a non-venv install, trying to push people towards the venv installs. --- source/_docs/installation/python.markdown | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/_docs/installation/python.markdown b/source/_docs/installation/python.markdown index a7dda882e25..7f8c01ad421 100644 --- a/source/_docs/installation/python.markdown +++ b/source/_docs/installation/python.markdown @@ -10,6 +10,10 @@ footer: true redirect_from: /getting-started/installation-python/ --- +

+If you're running a Linux-based platform, we strongly recommend you follow the instructions for a [virtual environment](/docs/installation/virtualenv/) instead. If you're running on Windows then [see here](/docs/installation/windows/#installing-in-a-python-virtual-environment) instead. +

+ Once Python is installed, execute the following code in a console: ```bash @@ -22,12 +26,10 @@ Running these commands will: - Install Home Assistant - Launch Home Assistant and serve the web interface on [http://localhost:8123](http://localhost:8123) -If you're running a Linux-based platform, we suggest you follow the instructions for a [virtual environment](/docs/installation/virtualenv/) to avoid using `root`. - Video tutorials of this process for various operating systems are available here: - [Windows 10](https://www.youtube.com/watch?v=X27eVvuqwnY) - [macOS](https://www.youtube.com/watch?v=hej6ipN86ls) - [Ubuntu 14.04](https://www.youtube.com/watch?v=SXaAG1lGNH0) -Keep in mind that the used operating systems and the shown software releases may be outdated. +Keep in mind that the operating systems used and the software releases shown may be outdated. From c1a0c4e87e0c67d986282f19d67c2cb9ddbfcf8c Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Wed, 5 Sep 2018 00:04:08 -0700 Subject: [PATCH 023/176] Update multi-factor-auth.markdown --- source/_docs/authentication/multi-factor-auth.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_docs/authentication/multi-factor-auth.markdown b/source/_docs/authentication/multi-factor-auth.markdown index 86ce2ad13c8..ceefb1b39d8 100644 --- a/source/_docs/authentication/multi-factor-auth.markdown +++ b/source/_docs/authentication/multi-factor-auth.markdown @@ -73,8 +73,6 @@ During the login process, a six digit one-time password will be sent again, user Notify MFA module would not verify the one-time password deliveried success, so that if user cannot received the message due any reason, he/she may not be login again. Edit or remove `[your_config_dir]/.storage/auth_module.notify` can disable nofiy MFA module to resolve the issue.

-By default notify MFA module will be auto loaded if no `auth_mfa_modules` config section defined in `configuration.yaml`. However if you don't have any notify component configured, user cannot enable notify MFA module. - Example of configuration ```yaml From 426d08b5a992a5508391aa2c9069621c4119e329 Mon Sep 17 00:00:00 2001 From: Paul Annekov Date: Wed, 5 Sep 2018 12:12:15 +0300 Subject: [PATCH 024/176] Fixed branches definition in PR template (#6199) * fixed pull request template branches definition * Improve the change --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index bfbe7bd2c02..9938ea6ddb2 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,7 +5,7 @@ ## Checklist: -- [ ] Branch: Fixes, changes and adjustments should be created against `current`. New documentation for platforms/components and features should go to `next`. +- [ ] Branch: `next` is for changes and new documentation that will go public with the next [home-assistant](https://github.com/home-assistant/home-assistant) release. Fixes, changes and adjustments for the current release should be created against `current`. - [ ] The documentation follow the [standards][standards]. [standards]: https://home-assistant.io/developers/documentation/standards/ From 825a067ec51ea3f80d0d4da559d0fba53993d898 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 5 Sep 2018 12:42:36 +0200 Subject: [PATCH 025/176] Update KNX docs --- source/_components/knx.markdown | 23 +++++++++++------------ source/_components/light.knx.markdown | 5 ++++- source/_components/notify.knx.markdown | 7 ++++++- source/_components/scene.knx.markdown | 9 ++++++--- source/_components/sensor.knx.markdown | 23 ++++++++++++++++++----- source/_components/switch.knx.markdown | 11 +++++++---- 6 files changed, 52 insertions(+), 26 deletions(-) diff --git a/source/_components/knx.markdown b/source/_components/knx.markdown index 89e9a0c4129..802b288f4c2 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -33,7 +33,7 @@ There is currently support for the following device types within Home Assistant: - [Notify](/components/notify.knx) - [Scene](/components/scene.knx) -### {% linkable_title Configuration %} +## {% linkable_title Configuration %} To use your KNX in your installation, add the following lines to your `configuration.yaml` file: @@ -77,8 +77,8 @@ knx: ```yaml knx: - fire_event: True - fire_event_filter: ["1/0/*", "6/2,3,4-6/*"] + fire_event: True + fire_event_filter: ["1/0/*", "6/2,3,4-6/*"] ``` - **fire_event** (*Optional*): If set to True, platform will write all received KNX messages to event bus @@ -105,21 +105,20 @@ KNX component is able to expose time or sensor values to KNX bus. The component ```yaml # Example configuration.yaml entry knx: - expose: - - type: 'temperature' - entity_id: 'sensor.owm_temperature' - address: '0/0/2' - - type: 'time' - address: '0/0/1' - - type: 'datetime' - address: '0/0/23' + expose: + - type: 'temperature' + entity_id: 'sensor.owm_temperature' + address: '0/0/2' + - type: 'time' + address: '0/0/1' + - type: 'datetime' + address: '0/0/23' ``` * **type**: Type of the exposed value. Either time or datetime or any supported type of [KNX Sensor](/components/sensor.knx/) (e.g., "temperature" or "humidity"). * **entity_id**: Entity id of the HASS component to be exposed. Not necessary for types time and datetime. * **address**: KNX group address. - ### {% linkable_title Known issues %} Due to lame multicast support the routing abstraction and the gateway scanner only work with Python >=3.5. diff --git a/source/_components/light.knx.markdown b/source/_components/light.knx.markdown index 4e0e7560801..4a229b62586 100644 --- a/source/_components/light.knx.markdown +++ b/source/_components/light.knx.markdown @@ -18,6 +18,8 @@ The `knx` light component is used as in interface to switching/light actuators. The `knx` component must be configured correctly, see [KNX Component](/components/knx). +## {% linkable_title Configuration %} + To use your KNX light in your installation, add the following lines to your `configuration.yaml` file: ```yaml @@ -31,8 +33,8 @@ light: Configuration variables: +- **address** (*Required*): KNX group address for switching the light on and off. - **name** (*Optional*): A name for this device used within Home Assistant. -- **address**: KNX group address for switching the light on and off. - **brightness_address** (Optional): KNX group address for dimming light. - **state_address** (*Optional*): separate KNX group address for retrieving the switch state of the light. - **brightness_state_address** (*Optional*): separate KNX group address for retrieving the dimmed state of the light. @@ -41,3 +43,4 @@ Configuration variables: Some KNX devices can change their state internally without any messages on the KNX bus, e.g., if you configure a timer on a channel. The optional `state_address` can be used to inform Home Assistant about these state changes. If a KNX message is seen on the bus addressed to the given state address, this will overwrite the state of the switch object. For switching/light actuators that are only controlled by a single group address and can't change their state internally, you don't have to configure the state address. + diff --git a/source/_components/notify.knx.markdown b/source/_components/notify.knx.markdown index 78945fc3761..4e81f1e2362 100644 --- a/source/_components/notify.knx.markdown +++ b/source/_components/notify.knx.markdown @@ -17,6 +17,8 @@ The `knx` notify platform allows you to send notifications to [KNX](http://www.k The `knx` component must be configured correctly, see [KNX Component](/components/knx). +## {% linkable_title Configuration %} + To use your KNX switch in your installation, add the following lines to your `configuration.yaml` file: ```yaml @@ -26,5 +28,8 @@ notify: address: '5/1/10' ``` +Configuration variables: + +* **address** (*Required*): KNX group address of the notification. * **name** (*Optional*): A name for this device used within Home Assistant. -* **address**: KNX group address of the notification + diff --git a/source/_components/scene.knx.markdown b/source/_components/scene.knx.markdown index e77b6571811..c9752de20c3 100644 --- a/source/_components/scene.knx.markdown +++ b/source/_components/scene.knx.markdown @@ -16,6 +16,10 @@ The `knx` scenes platform allows you to trigger [KNX](http://www.knx.org) scenes The `knx` component must be configured correctly, see [KNX Component](/components/knx). +## {% linkable_title Configuration %} + +To use your KNX scence in your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry scene: @@ -27,8 +31,7 @@ scene: Configuration variables: +- **address** (*Required*): KNX group address of the binary sensor. +- **scene_number** (*Required*): KNX scene number to be activated. - **name** (*Optional*): A name for this device used within Home Assistant. -- **address**: KNX group address of the binary sensor. -- **scene_number** KNX scene number to be activated. - diff --git a/source/_components/sensor.knx.markdown b/source/_components/sensor.knx.markdown index f7e78920229..6e0921c341a 100644 --- a/source/_components/sensor.knx.markdown +++ b/source/_components/sensor.knx.markdown @@ -17,8 +17,26 @@ The `knx` sensor platform allows you to monitor [KNX](http://www.knx.org) sensor The `knx` component must be configured correctly, see [KNX Component](/components/knx). +## {% linkable_title Configuration %} + To use your KNX sensor in your installation, add the following lines to your `configuration.yaml` file: +```yaml +# Example configuration.yaml entry +sensor: + - platform: knx + name: Heating.Valve1 + address: '2/0/0' +``` + + + +- **address** (*Required*): KNX group address of the sensor. +- **name** (*Optional*): A name for this device used within Home Assistant. +- **type** (*Optional*): "percent", "temperature", "humidity", "illuminance", "brightness", "speed_ms", "current", "power", "electric_current", "electric_potential", "energy", "frequency", "heatflowrate", "phaseanglerad", "phaseangledeg", "powerfactor" or "speed". + +## {% linkable_title Full example %} + ```yaml # Example configuration.yaml entry sensor: @@ -31,8 +49,3 @@ sensor: address: '6/2/1' type: 'temperature' ``` - -- **name** (*Optional*): A name for this device used within Home Assistant. -- **address**: KNX group address of the sensor. -- **type** (Optional): "percent", "temperature", "humidity", "illuminance", "brightness", "speed_ms", "current", "power", "electric_current", "electric_potential", "energy", "frequency", "heatflowrate", "phaseanglerad", "phaseangledeg", "powerfactor" or "speed". - diff --git a/source/_components/switch.knx.markdown b/source/_components/switch.knx.markdown index dbddf761518..92c04b6e4c2 100644 --- a/source/_components/switch.knx.markdown +++ b/source/_components/switch.knx.markdown @@ -18,6 +18,8 @@ The `knx` switch component is used as in interface to switching actuators. The `knx` component must be configured correctly, see [KNX Component](/components/knx). +## {% linkable_title Configuration %} + To use your KNX switch in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -26,12 +28,13 @@ switch: name: Kitchen.Coffee address: '1/1/6' ``` + +Configuration variables: + +* **address** (*Required*): KNX group address for switching the switch on/off. * **name** (*Optional*): A name for this device used within Home Assistant. -* **address**: KNX group address for switching the switch on/off -* **state_address**: (*Optional*) separate KNX group address for retrieving the switch state. +* **state_address** (*Optional*): separate KNX group address for retrieving the switch state. Some KNX devices can change their state internally without any messages on the KNX bus, e.g., if you configure a timer on a channel. The optional `state_address` can be used to inform Home Assistant about these state changes. If a KNX message is seen on the bus addressed to the given state address, this will overwrite the state of the switch object. For switching actuators that are only controlled by a single group address and can't change their state internally, you don't have to configure the state address. - - From fdf1d1c9f7c6bc89703f5706bfd994976089c96a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 5 Sep 2018 12:47:00 +0200 Subject: [PATCH 026/176] Remove exec permission --- source/_components/binary_sensor.bmw_connected_drive.markdown | 0 source/_components/cover.mqtt.markdown | 0 source/_components/light.template.markdown | 0 source/_components/lock.bmw_connected_drive.markdown | 0 source/_components/map.markdown | 0 source/_components/remote.harmony.markdown | 0 source/_components/remote.itach.markdown | 0 source/_components/remote.markdown | 0 source/_components/switch.digitalloggers.markdown | 0 9 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 source/_components/binary_sensor.bmw_connected_drive.markdown mode change 100755 => 100644 source/_components/cover.mqtt.markdown mode change 100755 => 100644 source/_components/light.template.markdown mode change 100755 => 100644 source/_components/lock.bmw_connected_drive.markdown mode change 100755 => 100644 source/_components/map.markdown mode change 100755 => 100644 source/_components/remote.harmony.markdown mode change 100755 => 100644 source/_components/remote.itach.markdown mode change 100755 => 100644 source/_components/remote.markdown mode change 100755 => 100644 source/_components/switch.digitalloggers.markdown diff --git a/source/_components/binary_sensor.bmw_connected_drive.markdown b/source/_components/binary_sensor.bmw_connected_drive.markdown old mode 100755 new mode 100644 diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown old mode 100755 new mode 100644 diff --git a/source/_components/light.template.markdown b/source/_components/light.template.markdown old mode 100755 new mode 100644 diff --git a/source/_components/lock.bmw_connected_drive.markdown b/source/_components/lock.bmw_connected_drive.markdown old mode 100755 new mode 100644 diff --git a/source/_components/map.markdown b/source/_components/map.markdown old mode 100755 new mode 100644 diff --git a/source/_components/remote.harmony.markdown b/source/_components/remote.harmony.markdown old mode 100755 new mode 100644 diff --git a/source/_components/remote.itach.markdown b/source/_components/remote.itach.markdown old mode 100755 new mode 100644 diff --git a/source/_components/remote.markdown b/source/_components/remote.markdown old mode 100755 new mode 100644 diff --git a/source/_components/switch.digitalloggers.markdown b/source/_components/switch.digitalloggers.markdown old mode 100755 new mode 100644 From 2c1fdc2cd86e620e6109b5b14d8586cf3b240fad Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 5 Sep 2018 12:54:48 +0200 Subject: [PATCH 027/176] Add title --- source/_components/binary_sensor.knx.markdown | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source/_components/binary_sensor.knx.markdown b/source/_components/binary_sensor.knx.markdown index d51c9effbb4..6f5ff097906 100644 --- a/source/_components/binary_sensor.knx.markdown +++ b/source/_components/binary_sensor.knx.markdown @@ -15,26 +15,24 @@ ha_iot_class: "Local Polling" The `knx` sensor platform allows you to monitor [KNX](http://www.knx.org) binary sensors. +## {% linkable_title Configuration %} + The `knx` component must be configured correctly, see [KNX Component](/components/knx). ```yaml # Example configuration.yaml entry binary_sensor: - platform: knx - name: "Entrance.Motion.Sensor" address: '6/0/2' - device_class: 'motion' - #significant_bit: 2 - #reset_after: 100 ``` Configuration variables: +- **address** (*Required*): KNX group address of the binary sensor. - **name** (*Optional*): A name for this device used within Home Assistant. -- **address**: KNX group address of the binary sensor. -- **device_class** (Optional): HASS device class e.g., "motion". -- **significant_bit** (Optional): Specify which significant bit of the KNX value should be used. Default is 1. -- **reset_after** (Optional): Reset back to OFF state after specified milliseconds. +- **device_class** (*Optional*): HASS device class e.g., "motion". +- **significant_bit** (*Optional*): Specify which significant bit of the KNX value should be used. Default is 1. +- **reset_after** (*Optional*): Reset back to OFF state after specified milliseconds. You can also attach actions to binary sensors (e.g., to switch on a light when a switch was pressed). In this example, one light is switched on when the button was pressed once and two others when the button was pressed a second time. From d383a4ab128ee5ec5ce74e96a469600cb110a4df Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Wed, 5 Sep 2018 16:02:51 +0200 Subject: [PATCH 028/176] Update installation.markdown Sneaky little.... --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index b5c9796424b..578804d2daa 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -79,7 +79,7 @@ debug: type: boolean default: False device_config / device_config_domain / device_config_glob: - description: This attribute contains node-specific override values. NOTE: This needs to be specified if you are going to use any of the bellow options. See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format. + description: "This attribute contains node-specific override values. NOTE: This needs to be specified if you are going to use any of the bellow options. See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format." required: false type: string, list keys: From 0192766d3bc08e9eec6d4e8391b5bbeb2c418772 Mon Sep 17 00:00:00 2001 From: Paul Annekov Date: Thu, 6 Sep 2018 08:06:02 +0300 Subject: [PATCH 029/176] Update Miflora documentation (#6163) * Update sensor.miflora.markdown * removed scan_interval from parameters list, added to note --- source/_components/sensor.miflora.markdown | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/source/_components/sensor.miflora.markdown b/source/_components/sensor.miflora.markdown index 92d2a4ea4fd..0e82f9a6e32 100644 --- a/source/_components/sensor.miflora.markdown +++ b/source/_components/sensor.miflora.markdown @@ -70,13 +70,10 @@ sensor: - **name** (*Optional*): The name displayed in the frontend. - **force_update** (*Optional*): Sends update events even if the value hasn't changed. - **median** (*Optional*): Sometimes the sensor measurements show spikes. Using this parameter, the poller will report the median of the last 3 (you can also use larger values) measurements. This filters out single spikes. Median: 5 will also filter double spikes. If you never have problems with spikes, `median: 1` will work fine. -- **timeout** (*Optional*): Define the timeout value in seconds when polling (defaults to 10 if not defined) -- **retries** (*Optional*): Define the number of retries when polling (defaults to 2 if not defined) -- **cache_value** (*Optional*): Define cache expiration value in seconds (defaults to 1200 if not defined) - **adapter** (*Optional*): Define the Bluetooth adapter to use (defaults to hci0). Run `hciconfig` to get a list of available adapters.

-By default the sensor is only polled once every 20 minutes. So, if you set `median: 3` it will take _at least_ 40 minutes before the sensor will report a value after a Home Assistant restart. Since the values usually change very slowly, this usually isn't a big problem. Keep in mind though that reducing polling intervals will have a negative effect on the battery life. +By default the sensor is only polled once every 20 minutes (`scan_interval` is 1200 seconds by default). On a Home Assistant restart sensor will report initial value. If you set `median: 3`, it will take _at least_ 40 minutes before the sensor will report an average value. Keep in mind though that reducing polling intervals will have a negative effect on the battery life.

A full configuration example could look like the one below: From 4ef8be77ce945f70dc1874f3239fa66bfce3273b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Thu, 6 Sep 2018 11:17:31 +0200 Subject: [PATCH 030/176] Create switch.switchbot.markdown (#6186) * Create switch.switchbot.markdown * Add files via upload --- source/_components/switch.switchbot.markdown | 35 +++++++++++++++++++ source/images/supported_brands/switchbot.png | Bin 0 -> 28540 bytes 2 files changed, 35 insertions(+) create mode 100644 source/_components/switch.switchbot.markdown create mode 100644 source/images/supported_brands/switchbot.png diff --git a/source/_components/switch.switchbot.markdown b/source/_components/switch.switchbot.markdown new file mode 100644 index 00000000000..3eca50f1113 --- /dev/null +++ b/source/_components/switch.switchbot.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "Switchbot" +description: "Instructions on how to set up Switchmate switches." +date: 2018-09-03 22:41 +sidebar: true +comments: false +sharing: true +footer: true +logo: switchbot.png +ha_category: Switch +ha_release: 0.78 +ha_iot_class: "Local Polling" +--- + +This `Switchbot` switch platform allow you to control Switchbot [devices]( https://www.switch-bot.com/). + +To enable it, add the following lines to your `configuration.yaml`: + +```yaml +switch: + - platform: switchbot + mac: 'cb:25:0b......' +``` + +{% configuration %} +mac: + description: Device MAC address. + required: true + type: string +name: + description: The name used to display the switch in the frontend. + required: false + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/switchbot.png b/source/images/supported_brands/switchbot.png new file mode 100644 index 0000000000000000000000000000000000000000..da31c5feb002fbe93c134b29efcb889d067c4386 GIT binary patch literal 28540 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

^@tVWk0P0d;X_w(6A|J}9 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 Date: Thu, 6 Sep 2018 13:53:53 +0100 Subject: [PATCH 031/176] Update sensor.twitch.markdown (#6201) * Update sensor.twitch.markdown * Add setup instructions --- source/_components/sensor.twitch.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/sensor.twitch.markdown b/source/_components/sensor.twitch.markdown index d1265c1b1d5..660488a7675 100644 --- a/source/_components/sensor.twitch.markdown +++ b/source/_components/sensor.twitch.markdown @@ -16,6 +16,10 @@ ha_iot_class: "Cloud Polling" The `twitch` platform will allow you to monitor [Twitch](http://www.twitch.tv/) channel status from within Home Assistant and setup automation based on the information. +## {% linkable_title Setup %} + +Create a new app at "Register Your Application" in the [Twitch developer portal](https://glass.twitch.tv/console/apps). Then get the **Client ID** for the new app. + ## {% linkable_title Configuration %} To use Twitch with your installation, add the following to your `configuration.yaml` file: @@ -24,12 +28,17 @@ To use Twitch with your installation, add the following to your `configuration.y # Example configuration.yaml entry sensor: platform: twitch + client_id: YOUR_TWITCH_CLIENT_ID channels: - channel1 - channel2 ``` {% configuration %} +clientid: + description: Your Twitch client ID. + required: true + type: string channels: description: List of channels. required: true From 97fef7f0e918d8aff80ce7f048576507ba431a0f Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Thu, 6 Sep 2018 13:59:36 -0700 Subject: [PATCH 032/176] Update multi-factor-auth.markdown --- source/_docs/authentication/multi-factor-auth.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/authentication/multi-factor-auth.markdown b/source/_docs/authentication/multi-factor-auth.markdown index d1528a8197b..19fc53d8d98 100644 --- a/source/_docs/authentication/multi-factor-auth.markdown +++ b/source/_docs/authentication/multi-factor-auth.markdown @@ -66,9 +66,9 @@ homeassistant: Notify MFA module using [notify component](https://www.home-assistant.io/components/notify/) to delivery a [HMAC-based One-Time Password](https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_algorithm) to user configured target. -User need first set up the MFA module by select one of the aviliable notify service. A six digit one-time password will be sent by this notify service, user need to input it to verify the setup. +User need first set up the MFA module by select one of the aviliable notify service. A 8 digit one-time password will be sent by this notify service, user need to input it to verify the setup. -During the login process, a six digit one-time password will be sent again, user need to input it to verify his/her identity. If the validation failed, a new one-time password will be sent again. +During the login process, an 8 digit one-time password will be sent again, user need to input it to verify his/her identity. If the validation failed, a new one-time password will be sent again.

Notify MFA module would not verify the one-time password deliveried success, so that if user cannot received the message due any reason, he/she may not be login again. Edit or remove `[your_config_dir]/.storage/auth_module.notify` can disable nofiy MFA module to resolve the issue. From 3e278811c54b8311bb29e7aa05e19c11f83bdbd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Fri, 7 Sep 2018 09:35:09 +0200 Subject: [PATCH 033/176] Minor fix in switchbot doc (#6212) --- source/_components/switch.switchbot.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.switchbot.markdown b/source/_components/switch.switchbot.markdown index 3eca50f1113..ff7e8911b50 100644 --- a/source/_components/switch.switchbot.markdown +++ b/source/_components/switch.switchbot.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Switchbot" -description: "Instructions on how to set up Switchmate switches." +description: "Instructions on how to set up Switchbot switches." date: 2018-09-03 22:41 sidebar: true comments: false From 995aeb83731df169d71584d71b5458aa16300b8b Mon Sep 17 00:00:00 2001 From: DubhAd Date: Fri, 7 Sep 2018 09:07:05 +0100 Subject: [PATCH 034/176] Word fix (#6208) The main page calls them services, here we call them features, causing confusion. --- source/_components/vacuum.neato.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/vacuum.neato.markdown b/source/_components/vacuum.neato.markdown index 51cf2cc1d81..544d60f62c3 100644 --- a/source/_components/vacuum.neato.markdown +++ b/source/_components/vacuum.neato.markdown @@ -19,7 +19,7 @@ The status will contain attributes on the robots last clean session. To add `neato` vacuum to your installation, please follow instructions in [Neato component](/components/neato/). -Currently supported features are: +Currently supported services are: - `start` - `pause` From 5b5c16f2f4b37bd3a810621fd72af59cbde6c495 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Fri, 7 Sep 2018 09:07:25 +0100 Subject: [PATCH 035/176] Word fix (#6209) The main page calls them services, here we call them features, causing confusion. --- source/_components/vacuum.xiaomi_miio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 5864b32bffb..cc93a36c8ab 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The `xiaomi miio` vacuum platform allows you to control the state of your [Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/). -Currently supported features are: +Currently supported services are: - `start` - `pause` From 2bd35c0c12cbe6e09e73ea4975ec224aa4063931 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Fri, 7 Sep 2018 09:07:47 +0100 Subject: [PATCH 036/176] Clarity updates (#6210) Given that turn_on and off don't work on some, would be handy to mention that ;) --- source/_components/vacuum.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/vacuum.markdown b/source/_components/vacuum.markdown index 3df2abbca45..041edb7d661 100644 --- a/source/_components/vacuum.markdown +++ b/source/_components/vacuum.markdown @@ -29,7 +29,7 @@ Before calling one of these services, make sure your vacuum platform supports it #### {% linkable_title Service `vacuum.turn_on` %} -Start a new cleaning task. +Start a new cleaning task. For the Xiaomi Vacuum and neato use `vacuum.start` instead. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| @@ -37,7 +37,7 @@ Start a new cleaning task. #### {% linkable_title Service `vacuum.turn_off` %} -Stop the current cleaning task and return to the dock. +Stop the current cleaning task and return to the dock. For the Xiaomi Vacuum and neato use `vacuum.stop` instead. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| From 65e6d11a32610524be76428eb059749cc527a455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isabella=20Gross=20Alstr=C3=B6m?= Date: Fri, 7 Sep 2018 10:08:49 +0200 Subject: [PATCH 037/176] Update deconz.markdown (#6213) * Update deconz.markdown Added a helper app in appdaemon for deconz events * Update deconz.markdown changes in variables --- source/_components/deconz.markdown | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index 211e683fe15..500efaa947c 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -173,6 +173,36 @@ automation: ### {% linkable_title Appdaemon %} +#### {% linkable_title Appdaemon event helper %} +Helper app that creates a sensor `sensor.deconz_event` with a state that represents the id from the last event and an attribute to show the event data. + +{% raw %} +```yaml +deconz_helper: + module: deconz_helper + class: DeconzHelper +``` + +```python +import appdaemon.plugins.hass.hassapi as hass +import datetime +from datetime import datetime + +class DeconzHelper(hass.Hass): + def initialize(self) -> None: + self.listen_event(self.event_received, "deconz_event") + + def event_received(self, event_name, data, kwargs): + event_data = data["event"] + event_id = data["id"] + event_received = datetime.now() + + self.log("Deconz event received from {}. Event was: {}".format(event_id, event_data)) + self.set_state("sensor.deconz_event", state = event_id, attributes = {"event_data": event_data, "event_received": str(event_received)}) +``` +{% endraw %} + + #### {% linkable_title Appdaemon remote template %} {% raw %} From 37aced25852ab5d490b4522adf38b6e0c93bd69b Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 7 Sep 2018 11:23:08 +0100 Subject: [PATCH 038/176] Yale Smart Alarm component docs (#6176) * Add New Yale Smart Alarm Component Documentation * Update Yale Alarm Documentation --- ...rm_control_panel.yale_smart_alarm.markdown | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 source/_components/alarm_control_panel.yale_smart_alarm.markdown diff --git a/source/_components/alarm_control_panel.yale_smart_alarm.markdown b/source/_components/alarm_control_panel.yale_smart_alarm.markdown new file mode 100644 index 00000000000..f2dc607b157 --- /dev/null +++ b/source/_components/alarm_control_panel.yale_smart_alarm.markdown @@ -0,0 +1,60 @@ +--- +layout: page +title: "Yale Smart Alarm Control" +description: "Instructions on how to integrate Yale Smart Alarms into Home Assistant." +date: 2018-09-01 11:11 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Alarm +ha_release: 0.78 +--- + +The `yale_smart_alarm` platform provides connectivity with the Yale Smart Alarm systems and Smart Hub through Yale's API. + +This platform supports the following services: `alarm_arm_away`, `alarm_arm_home`, `alarm_arm_night` (duplicate of home) and `alarm_disarm`. +Currently only one alarm is supported. + + +To enable, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +alarm_control_panel: + - platform: yale_smart_alarm + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +Configuration variables: + +- **name** (*Optional*): Name of device in Home Assistant. +- **username** (*Required*): Username used to sign into the Yale app/web client. +- **password** (*Required*): Password used to sign into the Yale app/web client. +- **area_id** (*Optional*): Area ID of the device when talking to Yale's API if required ('1' by default). + +Automation example: + +```yaml +automation: + - alias: "Alarm: Disarmed Daytime" + trigger: + platform: state + entity_id: alarm_control_panel.yale_smart_alarm + to: 'disarmed' + condition: + condition: sun + before: sunset + action: + service: scene.turn_on + entity_id: scene.OnDisarmedDaytime + - alias: "Alarm: Armed Away" + trigger: + platform: state + entity_id: alarm_control_panel.yale_smart_alarm + to: 'armed_away' + action: + service: scene.turn_on + entity_id: scene.OnArmedAway +``` From baba8e85ec4c1fb731b8500173498deb8b9886fd Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Fri, 7 Sep 2018 13:29:55 +0200 Subject: [PATCH 039/176] Update switch.snmp.markdown (#5483) * Update switch.snmp.markdown Depends on https://github.com/home-assistant/home-assistant/pull/14754 * :pencil2: Removed old configuration variables header --- source/_components/switch.snmp.markdown | 123 +++++++++++++++++++++--- 1 file changed, 108 insertions(+), 15 deletions(-) diff --git a/source/_components/switch.snmp.markdown b/source/_components/switch.snmp.markdown index 59d9b239044..0d2cb6fd0fa 100644 --- a/source/_components/switch.snmp.markdown +++ b/source/_components/switch.snmp.markdown @@ -15,7 +15,7 @@ ha_release: 0.57 The `snmp` switch platform allows you to control SNMP-enabled equipment. -Currently, only SNMP OIDs that accept integer values are supported. SNMP v1 and v2c are supported. SNMP v3 is **not** supported. +Currently, only SNMP OIDs that accept integer values are supported. SNMP v1, v2c and v3 are supported. To use an SNMP switch in your installation: @@ -27,30 +27,123 @@ switch: baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0 ``` -Configuration variables: - -- **baseoid** (*Required*): The SNMP BaseOID which to poll for the state of the switch. -- **command_oid** (*Optional*): The SNMP OID which to set in order to turn the switch on and off, if different from `baseoid`. -- **host** (*Optional*): The IP/host which to control. Defaults to `localhost`. -- **port** (*Optional*): The port on which to communicate. Defaults to `161`. -- **community** (*Optional*): community string to use for authentication. Defaults to `private`. -- **version** (*Optional*): SNMP version to use - either `1` or `2c`. Defaults to `1`. -- **payload_on** (*Optional*): What return value represents an `On` state for the switch. The same value is used in writes to turn on the switch if `command_payload_on` is not set. Defaults to `1`. -- **payload_off** (*Optional*): What return value represents an `Off` state for the switch. The same value is used in writes to turn off the switch if `command_payload_off` is not set. Defaults to `0`. -- **command_payload_on** (*Optional*): The value to write to turn on the switch, if different from `payload_on`. -- **command_payload_off** (*Optional*): The value to write to turn off the switch, if different from `payload_off`. +{% configuration %} +baseoid: + description: The SNMP BaseOID which to poll for the state of the switch. + required: true + type: string +command_oid: + description: The SNMP OID which to set in order to turn the switch on and off, if different from `baseoid`. + required: false + type: string +host: + description: The IP/host which to control. + required: false + type: string + default: 'localhost' +port: + description: The port on which to communicate. + required: false + type: string + default: '161' +community: + description: community string to use for authentication (SNMP v1 and v2c). + required: false + type: string + default: 'private' +username: + description: Username to use for authentication. + required: false + type: string + default: '' +auth_key: + description: Authentication key to use for SNMP v3. + required: false + type: string + default: no key +auth_protocol: + description: Authentication protocol to use for SNMP v3. + required: false + type: string + default: 'none' +priv_key: + description: Privacy key to use for SNMP v3. + required: false + type: string + default: no key +priv_protocol: + description: Privacy protocol to use for SNMP v3. + required: false + type: string + default: 'none' +version: + description: SNMP version to use - either `1`, `2c` or `3`. + required: false + type: string + default: '1' +payload_on: + description: What return value represents an `On` state for the switch. The same value is used in writes to turn on the switch if `command_payload_on` is not set. + required: false + type: string + default: '1' +payload_off: + description: What return value represents an `Off` state for the switch. The same value is used in writes to turn off the switch if `command_payload_off` is not set. + required: false + type: string + default: '0' +command_payload_on: + description: The value to write to turn on the switch, if different from `payload_on`. + required: false + type: string +command_payload_off: + description: The value to write to turn off the switch, if different from `payload_off`. + required: false + type: string +{% endconfiguration %} You should check with your device's vendor to find out the correct BaseOID and what values turn the switch on and off. -A complete example: +Valid values for auth_protocol: + +- **none** +- **hmac-md5** +- **hmac-sha** +- **hmac128-sha224** +- **hmac192-sha256** +- **hmac256-sha384** +- **hmac384-sha512** + +Valid values for priv_protocol: + +- **none** +- **des** +- **3des-ede** +- **aes-cfb-128** +- **aes-cfb-192** +- **aes-cfb-256** + +Complete examples: ```yaml switch: - platform: snmp - name: SNMP switch + name: SNMP v1 switch host: 192.168.0.2 community: private baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0 payload_on: 1 payload_off: 0 + + - platform: snmp + name: SNMP v3 switch + host: 192.168.0.3 + version: '3' + username: 'myusername' + auth_key: 'myauthkey' + auth_protocol: 'hmac-sha' + priv_key: 'myprivkey' + priv_protocol: 'aes-cfb-128' + baseoid: 1.3.6.1.4.1.19865.1.2.1.4.0 + payload_on: 1 + payload_off: 0 ``` From c8f7e3f9bbb8f87048aa1dd067793e87e4372cca Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Fri, 7 Sep 2018 14:03:22 +0200 Subject: [PATCH 040/176] Update sensor.snmp.markdown (#5484) * Update sensor.snmp.markdown Depends on https://github.com/home-assistant/home-assistant/pull/14753 * :pencil2: Minor tweaks * Minor changes --- source/_components/sensor.snmp.markdown | 112 ++++++++++++++++++++---- 1 file changed, 96 insertions(+), 16 deletions(-) diff --git a/source/_components/sensor.snmp.markdown b/source/_components/sensor.snmp.markdown index f492d5ef3a7..9c78766582b 100644 --- a/source/_components/sensor.snmp.markdown +++ b/source/_components/sensor.snmp.markdown @@ -13,7 +13,6 @@ ha_iot_class: "Local Polling" ha_release: "0.22" --- - The `snmp` sensor platform displays information available through the [Simple Network Management Protocol (SNMP)](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol). SNMP uses a tree-like hierarchy where each node is an object, and is mainly supported by network-oriented devices such as routers, modems, and printers. To enable this sensor in your installation, add the following to your `configuration.yaml` file: @@ -26,28 +25,107 @@ sensor: baseoid: 1.3.6.1.4.1.2021.10.1.3.1 ``` -Configuration variables: +{% configuration %} +host: + description: The IP address of your host, eg. `192.168.1.32`. + required: true + type: string + default: 'localhost' +baseoid: + description: The OID where the information is located. It's advised to use the numerical notation. + required: true + type: string +port: + description: The SNMP port of your host. + required: Option + type: string + default: '161' +community: + description: "The SNMP community which is set for the device for SNMP v1 and v2c. Most devices have a default community set to `public` with read-only permission (which is sufficient)." + required: false + type: string + default: 'public' +username: + description: Username to use for authentication. + required: false + type: string + default: '' +auth_key: + description: Authentication key to use for SNMP v3. + required: false + type: string + default: no key +auth_protocol: + description: Authentication protocol to use for SNMP v3. + required: false + type: string + default: 'none' +priv_key: + description: Privacy key to use for SNMP v3. + required: false + type: string + default: no key +priv_protocol: + description: Privacy protocol to use for SNMP v3. + required: false + type: string + default: 'none' +version: + description: "Version of SNMP protocol, `1`, `2c` or `3`. Version `2c` or higher is needed to read data from 64-bit counters." + required: false + type: string + default: '1' +name: + description: Name of the SNMP sensor. + required: false + type: string +unit_of_measurement: + description: Defines the unit of measurement of the sensor, if any. + required: false + type: string +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to parse the value." + required: false + type: template +accept_errors: + description: "Determines whether the sensor should start and keep working even if the SNMP host is unreachable or not responding. This allows the sensor to be initialized properly even if, for example, your printer is not on when you start Home Assistant." + required: false + type: string + default: false +default_value: + description: "Determines what value the sensor should take if `accept_errors` is set and the host is unreachable or not responding. If not set, the sensor will have value `unknown` in case of errors." + required: false + type: string +{% endconfiguration %} -- **host** (*Required*): The IP address of your host, eg. `192.168.1.32`. -- **baseoid** (*Required*): The OID where the information is located. It's advised to use the numerical notation. -- **port** (*Option*): The SNMP port of your host. Defaults to `161`. -- **community** (*Optional*): The SNMP community which is set for the device. Most devices have a default community set to `public` with read-only permission (which is sufficient). -- **version** (*Optional*) version of SNMP protocol, `1` or `2c`. Defaults to `1`. Version `2c` is needed to read data from 64-bit counters. -- **name** (*Optional*): Name of the SNMP sensor. -- **unit_of_measurement** (*Optional*): Defines the unit of measurement of the sensor, if any. -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to parse the value. -- **accept_errors** (*Optional*): Determines whether the sensor should start and keep working even if the SNMP host is unreachable or not responding. This allows the sensor to be initialized properly even if, for example, your printer is not on when you start Home Assistant. Defaults to `false`. -- **default_value** (*Optional*): Determines what value the sensor should take if `accept_errors` is set and the host is unreachable or not responding. If not set, the sensor will have value `unknown` in case of errors. +Valid values for auth_protocol: + +- **none** +- **hmac-md5** +- **hmac-sha** +- **hmac128-sha224** +- **hmac192-sha256** +- **hmac256-sha384** +- **hmac384-sha512** + +Valid values for priv_protocol: + +- **none** +- **des** +- **3des-ede** +- **aes-cfb-128** +- **aes-cfb-192** +- **aes-cfb-256** ## {% linkable_title Finding OIDs %} -OIDs may vary on different systems because they are vendor-specific. Beside the device's manual, the [OID Repository](http://www.oid-info.com/) is a good place to start if you are looking for OIDs. As an example, the following OIDs are for the load of a Linux systems. +OIDs may vary on different systems because they are vendor-specific. Besides the device's manual, the [OID Repository](http://www.oid-info.com/) is a good place to start if you are looking for OIDs. As an example, the following OIDs are for the load of a Linux system. - 1 minute Load: `1.3.6.1.4.1.2021.10.1.3.1` - 5 minute Load: `1.3.6.1.4.1.2021.10.1.3.2` - 15 minute Load: `1.3.6.1.4.1.2021.10.1.3.3` -There is a large amount of tools available to work with SNMP. `snmpwalk` let you easily retrieve the value of a OID. +There is a large amount of tools available to work with SNMP. `snmpwalk` let you easily retrieve the value of an OID. ```bash $ snmpwalk -Os -c public -v 2c 192.168.1.32 1.3.6.1.4.1.2021.10.1.3.1 @@ -58,10 +136,11 @@ laLoad.1 = STRING: 0.19 ### {% linkable_title Printer uptime minutes %} -According to the most common SNMP standard, the uptime of a device is accessible under OID `1.3.6.1.2.1.1.3.0`. The value represented using a format called `TimeTicks`, in units of hundredth of a second. +According to the most common SNMP standard, the uptime of a device is accessible under OID `1.3.6.1.2.1.1.3.0`. The value represented using a format called `TimeTicks`, in units of hundredths of a second. To create a sensor that displays the uptime for your printer in minutes, you can use this configuration: +{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -71,8 +150,9 @@ sensor: baseoid: 1.3.6.1.2.1.1.3.0 accept_errors: true unit_of_measurement: 'minutes' - value_template: {% raw %}'{{((value | int) / 6000) | int}}'{% endraw %} + value_template: '{{((value | int) / 6000) | int}}' ``` +{% endraw %} The `accept_errors` option will allow the sensor to work even if the printer is not on when Home Assistant is first started: the sensor will just display a `-` instead of a minute count. From 60b694bf0f00b98261ca32552cc7eed284e7dcf8 Mon Sep 17 00:00:00 2001 From: mvn23 Date: Sat, 8 Sep 2018 00:04:09 +0200 Subject: [PATCH 041/176] Documentation for OpenTherm Gateway climate platform (#6118) * Add documentation for component climate.opentherm_gw * Update to adhere to standards * Changed wording from "component" to "device" as it is not a component * Minor changes * Add quotes * Fix location of space --- .../_components/climate.opentherm_gw.markdown | 61 ++++++++++++++++++ source/images/supported_brands/opentherm.png | Bin 0 -> 20615 bytes 2 files changed, 61 insertions(+) create mode 100644 source/_components/climate.opentherm_gw.markdown create mode 100644 source/images/supported_brands/opentherm.png diff --git a/source/_components/climate.opentherm_gw.markdown b/source/_components/climate.opentherm_gw.markdown new file mode 100644 index 00000000000..bbed48193d3 --- /dev/null +++ b/source/_components/climate.opentherm_gw.markdown @@ -0,0 +1,61 @@ +--- +layout: page +title: "OpenTherm Gateway" +description: "Control your OpenTherm Gateway from Home Assistant." +date: 2018-08-29 16:23 +sidebar: true +comments: false +sharing: true +footer: true +logo: opentherm.png +ha_category: Climate +ha_release: 0.78 +ha_iot_class: "Local Push" +--- + + +The `opentherm_gw` climate platform is used to control the [OpenTherm Gateway](http://otgw.tclcode.com/) from Home Assistant. + +# {% linkable_title Configuration %} + +```yaml +# Example configuration.yaml entry +climate: + - platform: opentherm_gw + device: /dev/ttyUSB0 +``` + +{% configuration %} +device: + description: "Path to OpenTherm Gateway device as supported by [PySerial](https://pythonhosted.org/pyserial/url_handlers.html)." + required: true + type: string +name: + description: The name for the device within Home Assistant. + required: false + type: string + default: OpenTherm Gateway +precision: + description: "The desired precision for this device. Can be used to match your actual thermostat's precision. Supported values are `0.1`, `0.5` and `1.0`." + required: false + type: float + default: "`0.5` for Celsius and `1.0` for Fahrenheit." +floor_temperature: + description: Some thermostats round all temperatures down to the lower value according to their precision. Default behaviour for Home Assistant is to round temperatures to the nearest value. Set this to `True` to override Home Assistant and round to the lower value according to the configured `precision`. + required: false + type: boolean +{% endconfiguration %} + +# {% linkable_title Example %} + +A full configuration example with the OpenTherm Gateway connected to a remote host running `ser2net` looks like the one below. + +```yaml +# Full example configuration.yaml entry +climate: + - platform: opentherm_gw + device: socket://otgw.example.org:2345 + name: Thermostat + precision: 0.5 + floor_temperature: True +``` diff --git a/source/images/supported_brands/opentherm.png b/source/images/supported_brands/opentherm.png new file mode 100644 index 0000000000000000000000000000000000000000..459f60e67369392ffee6022c3fad0b619b8ed5a4 GIT binary patch literal 20615 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 literal 0 HcmV?d00001 From d02b9106f0a9ccfc0b9023612e7e9ac6f7fbc960 Mon Sep 17 00:00:00 2001 From: Florian Werner Date: Sat, 8 Sep 2018 01:10:31 +0200 Subject: [PATCH 042/176] Update statistics sensor (#6034) --- source/_components/sensor.statistics.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.statistics.markdown b/source/_components/sensor.statistics.markdown index a169c2cc71d..d28f73eabee 100644 --- a/source/_components/sensor.statistics.markdown +++ b/source/_components/sensor.statistics.markdown @@ -14,7 +14,7 @@ ha_release: "0.30" --- -The `statistics` sensor platform consumes the state from other sensors. Besides the maximum and the minimum values, the total, mean, median, variance and the standard deviation are also available as attributes. If it's a binary sensor then only state changes are counted. +The `statistics` sensor platform consumes the state from other sensors. It exports the `mean` value as state and the following values as attributes: `count`, `mean`, `median`, `stdev`, `variance`, `total`, `min`, `max`, `min_age`, `max_age`, `change`, `average_change` and `change_rate`. If it's a binary sensor then only state changes are counted. If you are running the [recorder](/components/recorder/) component, on startup the data is read from the database. So after a restart of the platform, you will immediately have data available. If you're using the [history](/components/history/) component, this will automatically also start the `recorder` component on startup. If you are *not* running the `recorder` component, it can take time till the sensor starts to work because a couple of attributes need more than one value to do the calculation. @@ -43,6 +43,7 @@ Configuration variables: - **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `Stats`. - **sampling_size** (*Optional*): Size of the sampling. If the limit is reached then the values are rotated. Defaults to `20`. - **max_age** (*Optional*): Maximum age of measurements. Setting this to a time interval will cause older values to be discarded. +- **precision** (*Optional*): Defines the precision of the calculated values, through the argument of round(). Defaults to `2`.

From 7218029b3405581284959b30a357c27a852fe194 Mon Sep 17 00:00:00 2001 From: Pavel Pletenev Date: Sat, 8 Sep 2018 14:34:56 +0200 Subject: [PATCH 043/176] Docs for Habitica component (#5923) * Docs for Habitica component (1/2) Signed-off-by: delphi * Added sensor docs. Updated docs to match habitica code. Signed-off-by: delphi * Fix docs according to docs Signed-off-by: delphi * Fix typos and code review Signed-off-by: delphi --- source/_components/habitica.markdown | 132 ++++++++++++++++++ source/_components/sensor.habitica.markdown | 21 +++ .../images/screenshots/habitica_new_task.png | Bin 0 -> 2535 bytes source/images/supported_brands/habitica.png | Bin 0 -> 5677 bytes 4 files changed, 153 insertions(+) create mode 100644 source/_components/habitica.markdown create mode 100644 source/_components/sensor.habitica.markdown create mode 100644 source/images/screenshots/habitica_new_task.png create mode 100644 source/images/supported_brands/habitica.png diff --git a/source/_components/habitica.markdown b/source/_components/habitica.markdown new file mode 100644 index 00000000000..fbd51c31267 --- /dev/null +++ b/source/_components/habitica.markdown @@ -0,0 +1,132 @@ +--- +layout: page +title: "Habitica" +description: "Instructions on enabling Habitica support for your Home Assistant" +date: 2018-08-09 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: habitica.png +ha_category: Hub +ha_version: 0.78 +ha_iot_class: "Cloud Polling" +--- + +This component allows you to monitor and manage your Habitica profile. This component exposes the [Habitica's API](https://habitica.com/apidoc/) as a Home Assistant service. It supports multiple users and allows you to automate checking out your habits and daily tasks or casting magics using Home Assistant. +This component enables usage of [`sensor.habitica` platform.](/components/sensor.habitica/) +To use the component you should use this example configuration: + +```yaml +# Minimum viable configuration.yaml entry +habitica: + - api_user: 'REPLACE_ME_WITH_YOUR_USER_ID' + api_key: 'REPLACE_ME_WITH_YOUR_API_KEY' +``` + +You can specify several users, providing `api_user` and `api_key` for each. +At runtime you will be able to use API for each respective user by their Habitica's username. +You can override this by passing `name` key, this value will be used instead of the username. +If you are hosting your own instance of Habitica, you can specify a URL to it in `url` key. + +{% configuration %} +api_user: + description: "Habitica's API user ID. This value can be grabbed from [account setting](https://habitica.com/user/settings/api)" + required: true + type: string +api_key: + description: "Habitica's API password (token). This value can be grabbed from [account setting](https://habitica.com/user/settings/api) by pressing 'Show API token'" + required: true + type: string +name: + description: "Override for Habitica's username. Will be used for service calls" + required: false + type: string + default: Deduced at startup +url: + description: "URL to your Habitica instance, if you are hosting your own" + required: false + type: string + default: http://habitica.com +sensors: + description: List of sensors to generate for this user. If you don't specify this entry then the default (all sensors) will be generated. If you specify this entry empty then no sensors will be generated. + required: false + type: list + default: all (`name`, `hp`, `maxHealth`, `mp`, `maxMP`, `exp`, `toNextLevel`, `lvl`, `gp`, `class`) +{% endconfiguration %} + +### {% linkable_title API Service Parameters %} + +The API is exposed to Home Assistant as a service called `habitica.api_call`. To call it you should specify this keys in service data: + +| Service data attribute | Required | Type | Description | +|----------------------|--------|--------|----------------| +| `name` | yes | string | Habitica's username as per `configuration.yaml` entry. | +| `path` | yes | [string] | Items from API URL in form of an array with method attached at the end. See the example below. | +| `args` | no | map | Any additional json or url parameter arguments. See the example below and [apidoc](https://habitica.com/apidoc/). | + +A successful call to this service will fire an event `habitica_api_call_success`. + +| Event data attribute | Type | Description | +|----------------------|--------|----------------| +| `name` | string | Copied from service data attribute. | +| `path` | [string] | Copied from service data attribute. | +| `data` | map | Deserialized `data` field of JSON object Habitica's server returned in response to api call. For more info see [docs](https://habitica.com/apidoc/). | + +#### Let's consider some examples on how to call the service. + +For example, let's say that there is a configured `habitica` platform for user `xxxNotAValidNickxxx` with their respective `api_user` and `api_key`. +Let's create a new task (a todo) for this user via Home Assistant. There is an [API call](https://habitica.com/apidoc/#api-Task-CreateUserTasks) for this purpose. +To create a new task one should hit `https://habitica.com/api/v3/tasks/user` endpoint with `POST` request with a json object with task properties. +So let's call the API on `habitica.api_call`. +* The `name` key becomes `xxxNotAValidNickxxx`. +* The `path` key is trickier. + * Remove 'https://habitica.com/api/v3/' at the beginning of the endpoint URL. + * Split the remaining on slashes (/) and **append the lowercase method** at the end. + * You should get `["tasks", "user", "post"]`. To get a better idea of the API you are recommended to try all of the API calls in IPython console [using this package](https://github.com/ASMfreaK/habitipy/blob/master/README.md). +* The `args` key is more or less described in the [docs](https://habitica.com/apidoc/). + +Combining all together: +call `habitica.api_call` with data +``` +{ + "name": "xxxNotAValidNickxxx", + "path": ["tasks", "user", "post"], + "args": {"text": "Use API from Home Assistant", "type": "todo"} +} +``` + +This call will create a new todo on `xxxNotAValidNickxxx`'s account with text `Use API from Home Assistant` like this: + +![example task created](/images/screenshots/habitica_new_task.png) + +Also an event `habitica_api_call_success` will be fired with the following data: +``` +{ + "name": "xxxNotAValidNickxxx", + "path": ["tasks", "user", "post"], + "data": { + "challenge": {}, + "group": {"approval": {"required": false, + "approved": false, + "requested": false}, + "assignedUsers": [], + "sharedCompletion": "recurringCompletion"}, + "completed": false, + "collapseChecklist": false, + "type": "todo", + "notes": "", + "tags": [], + "value": 0, + "priority": 1, + "attribute": "str", + "text": "Use API from Home Assistant", + "checklist": [], + "reminders": [], + "_id": "NEW_TASK_UUID", + "createdAt": "2018-08-09T18:03:27.759Z", + "updatedAt": "2018-08-09T18:03:27.759Z", + "userId": "xxxNotAValidNickxxx's ID", + "id": "NEW_TASK_UUID"} +} +``` diff --git a/source/_components/sensor.habitica.markdown b/source/_components/sensor.habitica.markdown new file mode 100644 index 00000000000..4e94148bb9f --- /dev/null +++ b/source/_components/sensor.habitica.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "Habitica Sensor" +description: "Instructions on enabling Habitica support for your Home Assistant" +date: 2018-08-09 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: habitica.png +ha_category: Sensor +ha_iot_class: "Cloud Polling" +ha_version: 0.78 +--- + +The `habitica` sensor platform allows you to view and monitor your player data from [Habitica](https://habitica.com/) in Home Assistant. + +

+You must have the [`habitica` component](/components/habitica/) +configured to use this platform. After configuring that component, sensors specified there will automatically appear. +

diff --git a/source/images/screenshots/habitica_new_task.png b/source/images/screenshots/habitica_new_task.png new file mode 100644 index 0000000000000000000000000000000000000000..dd21d3a3b6c8a1c60824ba028f9df04422d14c17 GIT binary patch literal 2535 zcmb7GXHb*t68_*IgaAi#L{T6JMg*jb5+y(+M+}4_N;lGbmqU>r3mzgMMIcBCC?SA! z>4F4=fI$?cgVIargdTw$ax-`4&fI@@?w@^kc6Mf;eP;LB_qmBNS_mu(1^_@vU+?B! z0N{GY@wGtQ9Q(CmrkeBo7J$+>1A#z4r*BUI0DrFjO&zn4?6vVwvy;OTd>aTg{%E6{ z+>b5&fP_7C;w1sWB44f6D3Ys|}QNmKxVt_pR%zg!n*x69v8X{!>bfl zHWn=xif0WYI|Q;ePqtH{deJjui`9+8uu!jn^FYYSjqEV#H1H6khVX(e)2WYLU zEX{ElEf_|NcUP6E!huRfh3+lC;b?+P=!K*EllCe#Z394SCw{VYQ>>;}jp`)>JR&${ zs&_JmWn<6(N`L?#0O2>XpIQ6fz@s6TY_#xcJzxW65`Fogi*E=GNS>m>fTY;EWb~<1 zX*yiXS#ZD2j2(=-zrFl4Tjva7D_0yoFLZ^UF1ZF!R=m07Yn2Sp}3m zE8tNt@tI2wdZ!S6Fpv=tx^NB|rQmCqTDdVb{Y4R*(#=S%ux>7Y4xt?Gy}A|P6M*TH zuQ;gPaK>6Vk=;exRqmw7goT!TS$`4t;@b#i#oEo$TG`#rTQxDNnU#flv)I?Mu$rOi z-xL#5g=Ll>9W{$6K4|+ydaTh}-OY71 zDXG$0jc(f#_4Gs=QtGO-qW7<&cO=;Mwz2{qE4($d(J=Ds$B#yOi(&Vzx>Df+>8n2c zU=tBx;mq~eGt7@~Q{4Lc>u`;(P^tVPJv9$hAg$FQz_ruD!h*klVmpYAfPIQThtM}Q zGX$wFAL9_d0O_uhC*UqGJ*CAHm(rEl!5gg(39|$RTh)*UG)k!rRHNa7pP}kn8j&bA zhE!?5**k>>GHivUsI{b$(PlP2<1FO5lJ^|mFHvF!ySld4Ur+u^JiRjH{cVxl@$lfl zm7$=`Pu3scsHAMAw;FvMIa!-qHhs;QB&XD3s_heY z#i$>WJS|U%bQ~a8Rbfoc#KpxI7w4>OA}csU8IxP_i~nAky3?VO-DJ9!W~%G)OX=M% zm(RAVfS={<-BFZs9?D*tn6R}Jh{G7*CO6F+Q&OB*c@5tk7&daUJ9~TQqrc>6+02u} za63gWy~w5ok$RvzC48x=EMJX~nOJkq93kai+9H)A1f}v9i#wkrE6P9f&^N+n7PX+> zygqwRDdp$r=({lW&~9EN((e6zi8Eu$3~$PJfB&|&9&P33?Fm|Bcom34!R>vSnBcO} zQ0ESn^U*Y6>TXcp*U%mZPD6Qx#yLpFERD9&bJdOf^!lImxr{?|ScEP!#i zcNc~CFmT!xX*qqXQ{@U24!0%A4SB8{QhL!N()B6Zrh`Mn@M@a9Kqe7wAxLsNm&CSn z-lKE-Z#(@h2(3}nf;mQ*VU}+ZT*k-7E(epvc2CVYFA!2wDT6p!sc0AL1X#azEdAl8 z_0-gBlh6$IT#?7E7QuXX0}8z-*L0zNAE*j(jx%sD>(f4JHo`{hWR8&gmrg6`y;AXy z_?+H#xaUf|9=T_IiL0*2CmXpuNAIM)D*k-w$U#?^jG5O5$;mfGO0Fce;1~nSDTB+8 z537F<4GYr@*|_mGkh!_^g$+q0^)K~g_Z%){re#<+sZ|HdNaLcGW?ZHNu4oG=2*6PI z`g%)_0yH*i9NjQaGoQe1*Rif5nKVLLTTOm}Vww>Z{fs=KcU12wv5sH;jMBI!?_$aBsD6cL;+yL?FcbURlg-~rpAnsNIW zO4%TeXHDlP4Thp^QKi?{iS(~F4bGdfkD~lKsXZ5?Lqba|aE*Uq4-$%=n-Ymc?M&6d zo}Tr%{2GMsUi|m&m)ttxI-AU= zbIS4g!z*H7JSA@k26z zyvyA0Y{_}xIXyD-;1cw;)=7f4LU$iWFjGTRcaZlMT?NWT42hhd8=$Xie6t*7|Kwkf CPt$e) literal 0 HcmV?d00001 diff --git a/source/images/supported_brands/habitica.png b/source/images/supported_brands/habitica.png new file mode 100644 index 0000000000000000000000000000000000000000..a90f684be213adf6285e98e8e5c21671b3f7f52a GIT binary patch literal 5677 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 LGwhK~K+^vJ50@73 literal 0 HcmV?d00001 From c43ac57f4217c95ee2e83420d4d430c52bcb4cc3 Mon Sep 17 00:00:00 2001 From: Rohan Kapoor Date: Sat, 8 Sep 2018 06:56:44 -0700 Subject: [PATCH 044/176] Demonstrate that complex templates can be used for script delays (#6224) * Demonstrate that complex templates can be used for script delays * Fix escaping * Start comments with a capital letter --- source/_docs/scripts.markdown | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 7534ae05787..9d8b8a218b6 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -67,10 +67,19 @@ Delays are useful for temporarily suspending your script and start it at a later ```yaml # Waits 1 minute - delay: - # supports milliseconds, seconds, minutes, hours, days + # Supports milliseconds, seconds, minutes, hours, days minutes: 1 ``` +{% raw %} +```yaml +# Waits however many seconds input_number.second_delay is set to +- delay: + # Supports milliseconds, seconds, minutes, hours, days + seconds: "{{ states('input_number.second_delay') }}" +``` +{% endraw %} + {% raw %} ```yaml # Waits however many minutes input_number.minute_delay is set to @@ -85,14 +94,14 @@ Wait until some things are complete. We support at the moment `wait_template` fo {% raw %} ```yaml -# wait until media player have stop the playing +# Wait until media player have stop the playing - wait_template: "{{ is_state('media_player.floor', 'stop') }}" ``` {% endraw %} {% raw %} ```yaml -# wait for sensor to trigger or 1 minute before continuing to execute. +# Wait for sensor to trigger or 1 minute before continuing to execute. - wait_template: "{{ is_state('binary_sensor.entrance', 'on') }}" timeout: '00:01:00' continue_on_timeout: 'true' @@ -125,7 +134,7 @@ You can also get the script to abort after the timeout by using `continue_on_tim {% raw %} ```yaml -# wait until a valve is < 10 or continue after 1 minute. +# Wait until a valve is < 10 or continue after 1 minute. - wait_template: "{{ states.climate.kitchen.attributes.valve|int < 10 }}" timeout: '00:01:00' continue_on_timeout: 'false' From 0a651bdfba4fef3029df2e4ef7947e205f20c296 Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Sat, 8 Sep 2018 17:27:05 +0200 Subject: [PATCH 045/176] Update installation.markdown --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 578804d2daa..3af1f5dafc9 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -79,7 +79,7 @@ debug: type: boolean default: False device_config / device_config_domain / device_config_glob: - description: "This attribute contains node-specific override values. NOTE: This needs to be specified if you are going to use any of the bellow options. See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format." + description: "This attribute contains node-specific override values. NOTE: This needs to be specified if you are going to use any of the following options. See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format." required: false type: string, list keys: From 93d9267500ba3c6f5c89fdfee60d218d8a7a584f Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 9 Sep 2018 08:40:20 +0100 Subject: [PATCH 046/176] Adding some titles and details (#6228) Added: * titles to make it possible to link to sections * that you can only reload those sections if you're not using packages * information on how to migrate your config, and that key files and folders are hidden by default --- source/_docs/configuration.markdown | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index 150eef1b46f..c863c66382e 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -2,14 +2,14 @@ layout: page title: "Configuring Home Assistant" description: "Configuring Home Assistant." -date: 2015-03-23 12:50 +date: 2018-09-18 16:15 sidebar: true comments: false sharing: true footer: true --- -When launched for the first time, Home Assistant will write a default configuration file enabling the web interface and device discovery. It can take up to a minute for your devices to be discovered and appear in the user interface. +When launched for the first time, Home Assistant will create a default configuration file enabling the web interface and device discovery. It can take up to a minute after startup for your devices to be discovered and appear in the user interface. The web interface can be found at `http://ip.ad.dre.ss:8123/` - for example if your Home Assistant system has the IP address `192.168.0.40` then you'll find the web interface as `http://192.168.0.40:8123/`. @@ -26,13 +26,18 @@ If you want to use a different folder for configuration, use the config command Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains components to be loaded with their configurations. Throughout the documentation you will find snippets that you can add to your configuration file to enable functionality. -

- You will have to restart Home Assistant for most changes to `configuration.yaml` to take effect. You can load changes to [automations](/docs/automation/), [customize](/docs/configuration/customizing-devices/), [groups](/components/group/), and [scripts](/components/script/) without restarting. -

- If you run into trouble while configuring Home Assistant, have a look at the [configuration troubleshooting page](/getting-started/troubleshooting-configuration/) and at the [configuration.yaml examples](/cookbook/#example-configurationyaml).

Test any changes to your configuration files from the command line with `hass --script check_config`. This script allows you to test changes without the need to restart Home Assistant. Remember to run this as the user you run Home Assistant as.

+## {% linkable_title Reloading changes %} + +You will have to restart Home Assistant for most changes to `configuration.yaml` to take effect. You can load changes to [automations](/docs/automation/), [customize](/docs/configuration/customizing-devices/), [groups](/components/group/), and [scripts](/components/script/) without restarting if you're not using [packages](/docs/configuration/packages/). + +If you've made any changes, remember to check your configuration before trying to reload or restart. + +## {% linkable_title Migrating to a new system %} + +If you want to migrate your configuration to a new system then you can copy the contents of your configuration folder from the current system to the new system. Be aware that some of the files you need start with `.`, which is hidden by default from both `ls` (in SSH), in Windows Explorer, and macOS Finder. You'll need to ensure that you're viewing all files before you copy them. From 0462ddbb4a308a1436939b2056af0dc95129957a Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 9 Sep 2018 08:40:53 +0100 Subject: [PATCH 047/176] Adding WiFi note (#6227) Adding a note that modern smart phones may turn off their WiFi when idle, so this tracker may not be reliable when used by itself. --- source/_components/device_tracker.nmap_tracker.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/device_tracker.nmap_tracker.markdown b/source/_components/device_tracker.nmap_tracker.markdown index 74ace37e238..061ae8a153e 100644 --- a/source/_components/device_tracker.nmap_tracker.markdown +++ b/source/_components/device_tracker.nmap_tracker.markdown @@ -15,6 +15,10 @@ featured: false As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using Nmap. The IP addresses to scan can be specified in any format that Nmap understands, including the network-prefix notation (`192.168.1.1/24`) and the range notation (`192.168.1.1-255`). +

+ Please keep in mind that modern smart phones will usually turn off WiFi when they are idle. Simple trackers like this may not be reliable on their own. +

+ You might have to install the packages for `arp` and `nmap`. On Debian based hosts (for example Hassbian and Raspbian) do so by running `$ sudo apt-get install net-tools nmap`. On a Fedora host run `$ sudo dnf -y install nmap`.

From 4cf0c7d1e443b7b0b431f53b1ec95a1cd95fbc1d Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 9 Sep 2018 08:41:17 +0100 Subject: [PATCH 048/176] Adding WiFi note (#6226) Adding a note that modern smart phones may turn off their WiFi when idle, so this tracker may not be reliable when used by itself. --- source/_components/device_tracker.ping.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/device_tracker.ping.markdown b/source/_components/device_tracker.ping.markdown index 04d2e764420..675150cb18c 100644 --- a/source/_components/device_tracker.ping.markdown +++ b/source/_components/device_tracker.ping.markdown @@ -15,6 +15,10 @@ ha_release: 0.36 The `ping` device tracker platform offers presence detection by using `ping` to send ICMP echo requests. This can be useful when devices are running a firewall and are blocking UDP or TCP packets but responding to ICMP requests (like Android phones). This tracker doesn't need to know the MAC address since the host can be on a different subnet. This makes this an option to detect hosts on a different subnet when `nmap` or other solutions don't work since `arp` doesn't work. +

+ Please keep in mind that modern smart phones will usually turn off WiFi when they are idle. Simple trackers like this may not be reliable on their own. +

+ ## {% linkable_title Configuration %} To use this presence detection in your installation, add the following to your `configuration.yaml` file: From 40d816c7ba384c40d18ba3bc5bc2471ad6bf3450 Mon Sep 17 00:00:00 2001 From: mvn23 Date: Sun, 9 Sep 2018 09:42:25 +0200 Subject: [PATCH 049/176] Add note to OpenTherm Gateway documentation (#6230) Add a note about update propagation speed to the OpenTherm Gateway documentation. --- source/_components/climate.opentherm_gw.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/climate.opentherm_gw.markdown b/source/_components/climate.opentherm_gw.markdown index bbed48193d3..4b67af4667b 100644 --- a/source/_components/climate.opentherm_gw.markdown +++ b/source/_components/climate.opentherm_gw.markdown @@ -46,6 +46,10 @@ floor_temperature: type: boolean {% endconfiguration %} +

+The OpenTherm protocol is based on polling. The thermostat sends requests to the boiler at specific intervals. As a result, it may take some time for changes to propagate between Home Assistant and the thermostat. +

+ # {% linkable_title Example %} A full configuration example with the OpenTherm Gateway connected to a remote host running `ser2net` looks like the one below. From 817498f2e8d00def3509340b6891c9e9fce3fe48 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 9 Sep 2018 10:16:29 +0200 Subject: [PATCH 050/176] Add service data sample --- source/_components/wake_on_lan.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_components/wake_on_lan.markdown b/source/_components/wake_on_lan.markdown index 93787c4aaef..87603ad2338 100644 --- a/source/_components/wake_on_lan.markdown +++ b/source/_components/wake_on_lan.markdown @@ -36,3 +36,13 @@ Send a _magic packet_ to wake up a device with 'Wake-On-LAN' capabilities. |---------------------------|----------|-------------------------------------------------------| | `mac` | no | MAC address of the device to wake up. | | `broadcast_address` | yes | Optional broadcast IP where to send the magic packet. | + + +Sample service data: + +```json +{ + "mac":"00:40:13:ed:f1:32" +} +``` + From e9705931cb0f85ca2995d5233893a4cefaf97025 Mon Sep 17 00:00:00 2001 From: Pteranodon Date: Sun, 9 Sep 2018 20:57:21 +1000 Subject: [PATCH 051/176] Alter monitored_conditions list (#6234) Add local_date_time and local_date_time_full to the monitored_conditions list. --- source/_components/sensor.bom.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/sensor.bom.markdown b/source/_components/sensor.bom.markdown index af149f35bf9..7774077d9cf 100644 --- a/source/_components/sensor.bom.markdown +++ b/source/_components/sensor.bom.markdown @@ -39,6 +39,8 @@ sensor: - gust_kt - air_temp - dewpt + - local_date_time + - local_date_time_full - press - press_qnh - press_msl From bb729c819f7abe3027565f622f01330bafd3739e Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 9 Sep 2018 12:58:11 +0200 Subject: [PATCH 052/176] :pencil2: Fixes typo configuration.yml -> configuration.yaml (#6237) Fixes #6233 --- source/_components/konnected.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/konnected.markdown b/source/_components/konnected.markdown index 8a5f245af0e..16612ca4731 100644 --- a/source/_components/konnected.markdown +++ b/source/_components/konnected.markdown @@ -25,7 +25,7 @@ This component requires the [`discovery`](https://www.home-assistant.io/componen ## {% linkable_title Configuration %} -A `konnected` section must be present in the `configuration.yml` file that specifies the Konnected devices on the network and the sensors or actuators attached to them: +A `konnected` section must be present in the `configuration.yaml` file that specifies the Konnected devices on the network and the sensors or actuators attached to them: ```yaml # Example configuration.yaml entry From 6890775752cbbd0be6c6c4ed7b8669affdcebeba Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 9 Sep 2018 12:11:56 +0100 Subject: [PATCH 053/176] Added the list of supported domains (#6235) * Added the list of supported domains Given how often we have to direct people to the Google Assistant component for this list, seems overdue to add it here * Minor changes --- source/cloud/google_assistant.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index 7868c9387bb..65ea395fcca 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -97,6 +97,21 @@ google_actions: type: string {% endconfiguration %} +### {% linkable_title Available domains %} + +Currently, the following domains are available to be used with Google Assistant, listed with their default types: + +- `group` (on/off) +- `input_boolean` (on/off) +- `scene` (on) +- `script` (on) +- `switch` (on/off) +- `fan` (on/off) +- `light` (on/off/brightness/rgb color/color temp) +- `cover` (on/off/set position (via set brightness)) +- `media_player` (on/off/set volume (via set brightness)) +- `climate` (temperature setting) +

After setting up the cloud, if you make any device changes such as changing the name or adding a new device simply say "Ok Google, sync my devices" to get the changes to show up.

From 4349f7d8aa540eb48e7bd05ded204d62c2b954c6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 9 Sep 2018 14:17:04 +0200 Subject: [PATCH 054/176] Fix file extension of configuration file (#6238) --- source/_components/binary_sensor.pilight.markdown | 2 +- source/_components/cover.aladdin_connect.markdown | 8 +++++--- source/_components/lock.mqtt.markdown | 6 ++++-- source/_components/sensor.pilight.markdown | 2 +- source/_components/sensor.radarr.markdown | 10 +++++----- source/_components/sensor.sonarr.markdown | 10 +++++----- 6 files changed, 21 insertions(+), 17 deletions(-) diff --git a/source/_components/binary_sensor.pilight.markdown b/source/_components/binary_sensor.pilight.markdown index b34cc955bfa..ef71c754602 100644 --- a/source/_components/binary_sensor.pilight.markdown +++ b/source/_components/binary_sensor.pilight.markdown @@ -39,7 +39,7 @@ Configuration variables: A full configuration example could look like this: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry binary_sensor: - platform: pilight name: 'Motion' diff --git a/source/_components/cover.aladdin_connect.markdown b/source/_components/cover.aladdin_connect.markdown index ca3576dce58..f0f35c71027 100644 --- a/source/_components/cover.aladdin_connect.markdown +++ b/source/_components/cover.aladdin_connect.markdown @@ -19,14 +19,16 @@ The `aladdin_connect` cover platform lets you control Genie Aladdin Connect gara Only doors that are owned by your Aladdin Connect account will be available. Doors that your account has been granted shared access to are not yet supported.

+## {% linkable_title Configuration %} + To use your Aladdin Connect cover in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry cover: - platform: aladdin_connect - username: user@email.com - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index ff8eb051702..a1689fbd199 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -101,8 +101,9 @@ In this section you will find some real life examples of how to use this lock. The example below shows a full configuration for a MQTT lock. +{% raw %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry lock: - platform: mqtt name: Frontdoor @@ -113,8 +114,9 @@ lock: optimistic: false qos: 1 retain: true - value_template: '{% raw %}{{ value.x }}{% endraw %}' + value_template: '{{ value.x }}' ``` +{% endraw %} Keep an eye on retaining messages to keep the state as you don't want to unlock your door by accident when you restart something. diff --git a/source/_components/sensor.pilight.markdown b/source/_components/sensor.pilight.markdown index a78f5a1d391..78e5b61abf4 100644 --- a/source/_components/sensor.pilight.markdown +++ b/source/_components/sensor.pilight.markdown @@ -42,7 +42,7 @@ This section shows a real life example how to use values of a weather station. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: pilight name: 'Temperature' diff --git a/source/_components/sensor.radarr.markdown b/source/_components/sensor.radarr.markdown index 8795896f9e7..0ec88883e51 100644 --- a/source/_components/sensor.radarr.markdown +++ b/source/_components/sensor.radarr.markdown @@ -50,7 +50,7 @@ In this section you find some real life examples of how to use this sensor. ### {% linkable_title Get Episodes airing in next 2 days %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: radarr api_key: YOUR_API_KEY @@ -65,7 +65,7 @@ sensor: SSL may run on a different port than the default (7878). The SSL port can be bound to any port in Radarr, so it should be set in the config here (unless it is changed to 7878). ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: radarr api_key: YOUR_API_KEY @@ -80,7 +80,7 @@ sensor: ### {% linkable_title Get disk space for all storage locations %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: radarr api_key: YOUR_API_KEY @@ -94,7 +94,7 @@ sensor: The storage locations Radarr returns are in the system page and in some cases this can list duplicates if sub paths are mounted separately. By listing paths to include, you can choose what data is reported by the sensor. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: radarr api_key: YOUR_API_KEY @@ -112,7 +112,7 @@ The Radarr API returns available space in bytes, but this sensor will default to *This calculation is done using base 2 math, and may differ from systems calculating using base 10 math.* ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: radarr api_key: YOUR_API_KEY diff --git a/source/_components/sensor.sonarr.markdown b/source/_components/sensor.sonarr.markdown index 93b070adcee..837dde42b1d 100644 --- a/source/_components/sensor.sonarr.markdown +++ b/source/_components/sensor.sonarr.markdown @@ -53,7 +53,7 @@ In this section you find some real life examples of how to use this sensor. ### {% linkable_title Get Episodes airing in next 2 days %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: sonarr api_key: YOUR_API_KEY @@ -68,7 +68,7 @@ sensor: SSL may run on a different port than the default (8989). The SSL port can be bound to any port in Sonarr, so it should be set in the config here (unless it is changed to 8989). See the [Sonarr site](https://github.com/Sonarr/Sonarr/wiki/SSL) for details on SSL in Sonarr. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: sonarr api_key: YOUR_API_KEY @@ -83,7 +83,7 @@ sensor: ### {% linkable_title Get disk space for all storage locations %} ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: sonarr api_key: YOUR_API_KEY @@ -97,7 +97,7 @@ sensor: The storage locations Sonarr returns are in the system page and in some cases this can list duplicates if sub paths are mounted separately. By listing paths to include, you can choose what data is reported by the sensor. ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: sonarr api_key: YOUR_API_KEY @@ -115,7 +115,7 @@ The Sonarr API returns available space in bytes, but this sensor will default to *This calculation is done using base 2 math, and may differ from systems calculating using base 10 math.* ```yaml -# Example configuration.yml entry +# Example configuration.yaml entry sensor: - platform: sonarr api_key: YOUR_API_KEY From 6d57a5bddc5377afb3bc7f10641000a143534820 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 9 Sep 2018 15:54:41 +0100 Subject: [PATCH 055/176] Adding link to auth docs (#6217) Adding a link to the auth documentation --- source/_components/auth.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/auth.markdown b/source/_components/auth.markdown index 96d0ab055a2..cc7ec923920 100644 --- a/source/_components/auth.markdown +++ b/source/_components/auth.markdown @@ -12,4 +12,4 @@ ha_category: Other ha_release: 0.73 --- -This component creates the endpoints for the authentication system that is built into Home Assistant. There are no configuration options for this component directly as it relies on the auth system in the core. +This component creates the endpoints for the [authentication system](/docs/authentication/) that is built into Home Assistant. There are no configuration options for this component directly as it relies on the auth system in the core. From 50e6a8bdce91d20488080919b4129cd19a0d6113 Mon Sep 17 00:00:00 2001 From: Andrew Riley Date: Sun, 9 Sep 2018 12:40:15 -0400 Subject: [PATCH 056/176] correct typo (hassbian-sctipts -> hassbian-scripts) (#6241) --- source/_docs/installation/hassbian/customization.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/hassbian/customization.markdown b/source/_docs/installation/hassbian/customization.markdown index e1c968a0c41..cb52818895b 100644 --- a/source/_docs/installation/hassbian/customization.markdown +++ b/source/_docs/installation/hassbian/customization.markdown @@ -35,7 +35,7 @@ These are some of the available suites: - [AppDaemon](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/appdaemon.md) - [Hassbian](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/hassbian.md) - [Home Assistant](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/homeassistant.md) -- [hassbian-config (hassbian-sctipts)](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/hassbian_config.md) +- [hassbian-config (hassbian-scripts)](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/hassbian_config.md) To upgrade any of them simply run `sudo hassbian-config upgrade SUITE`. From b8cd90cfb0bcaf2d8367dbdf28bf80423fef4c40 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 10 Sep 2018 08:20:42 +0100 Subject: [PATCH 057/176] Update for ad blocking (#6243) Added a note about some ad blockers blocking web sockets --- source/_docs/authentication.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/authentication.markdown b/source/_docs/authentication.markdown index 7bae172053b..6838a31a622 100644 --- a/source/_docs/authentication.markdown +++ b/source/_docs/authentication.markdown @@ -49,3 +49,7 @@ While you should hopefully be storing your passwords in a password manager, if y * `onboarding` When you start Home Assistant next you'll be required to set up authentication again. + +### {% linkable_title Stuck on Loading data %} + +Some advert blocking software, such as Wipr, also blocks web sockets. If you're stuck on the Loading data screen, try disabling your ad blocker. From c2dc96cc9d39b7db644ec2f15bd850c37f291e37 Mon Sep 17 00:00:00 2001 From: Delper Date: Mon, 10 Sep 2018 00:31:08 -0700 Subject: [PATCH 058/176] Change IOT Class to Local Polling (#6247) I browsed through the code and I don't think this component is reaching out beyond the local network to talk to the Rainmachine device. --- source/_components/rainmachine.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/rainmachine.markdown b/source/_components/rainmachine.markdown index 7bb254ef5d3..61ebb649104 100644 --- a/source/_components/rainmachine.markdown +++ b/source/_components/rainmachine.markdown @@ -10,7 +10,7 @@ footer: true logo: rainmachine.png ha_category: Irrigation ha_release: 0.69 -ha_iot_class: "Cloud Polling" +ha_iot_class: "Local Polling" --- The `rainmachine` component is the main component to integrate all platforms From 33479340b049c2ec5dd39f927ac61d2185a6c827 Mon Sep 17 00:00:00 2001 From: cswinford Date: Mon, 10 Sep 2018 03:36:17 -0400 Subject: [PATCH 059/176] Remove .gz from URI for HASSOS OVA. (#6248) The current URL of https://github.com/home-assistant/hassos/releases/download/1.10/hassos_ova-1.10.vmdk.gz results in a 404. The correct URL is https://github.com/home-assistant/hassos/releases/download/1.10/hassos_ova-1.10.vmdk . --- source/hassio/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index 1b17327d575..2c4db4c8e76 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -84,7 +84,7 @@ A detailed guide about running Hass.io as a virtual machine is available in the [pi3-64]: https://github.com/home-assistant/hassos/releases/download/1.10/hassos_rpi3-64-1.10.img.gz [tinker]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_tinker-2.2.img.gz [odroid-c2]: https://github.com/home-assistant/hassos/releases/download/2.2/hassos_odroid-c2-2.2.img.gz -[vmdk]: https://github.com/home-assistant/hassos/releases/download/1.10/hassos_ova-1.10.vmdk.gz +[vmdk]: https://github.com/home-assistant/hassos/releases/download/1.10/hassos_ova-1.10.vmdk [linux]: https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio [local]: http://hassio.local:8123 [samba]: /addons/samba/ From 823ca82b3a4aa95612857eee42bf75ad6843ef2d Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 10 Sep 2018 08:37:57 +0100 Subject: [PATCH 060/176] Fixing formatting (#6242) * Fixing formatting The formatting is lost in the note block, making it a mess. Breaking it out into its own section to retain formatting. * :pencil2: Spelling and grammar --- source/_components/recorder.markdown | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 8c8b5a4cbc0..eb859687fdd 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -18,7 +18,7 @@ Home Assistant uses [SQLAlchemy](http://www.sqlalchemy.org/) as Object Relationa The default database engine is [SQLite](https://www.sqlite.org/) which doesn't require any configuration. The database is stored in your Home Assistant configuration directory (`.homeassistant`) and called `home-assistant_v2.db`. -To setup the `recorder` component in your installation, add the following to your `configuration.yaml` file: +To set up the `recorder` component in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -73,7 +73,7 @@ recorder: type: List {% endconfiguration %} -Define domains and entities to `exclude` (aka. blacklist). This is convenient when you are basically happy with the information recorded, but just want to remove some entities or domains. Usually these are entities/domains which do not change (like `weblink`) or rarely change (`updater` or `automation`). +Define domains and entities to `exclude` (aka. blacklist). This is convenient when you are basically happy with the information recorded, but just want to remove some entities or domains. Usually, these are entities/domains which do not change (like `weblink`) or rarely change (`updater` or `automation`). ```yaml # Example configuration.yaml entry with exclude @@ -103,7 +103,7 @@ recorder: - media_player ``` -Use the `include` list to define the domains/entities to record, and exclude some of them with in the `exclude` list. This makes sense if you for instance include the `sensor` domain, but want to exclude some specific sensors. Instead of adding every sensor entity to the `include` `entities` list just include the `sensor` domain and exclude the sensor entities you are not interested in. +Use the `include` list to define the domains/entities to record, and exclude some of them within the `exclude` list. This makes sense if you, for instance, include the `sensor` domain, but want to exclude some specific sensors. Instead of adding every sensor entity to the `include` `entities` list just include the `sensor` domain and exclude the sensor entities you are not interested in. ```yaml # Example configuration.yaml entry with include and exclude @@ -119,7 +119,7 @@ recorder: - sensor.date ``` -If you only want to hide events from e.g., your history, take a look at the [`history` component](/components/history/). Same goes for logbook. But if you have privacy concerns about certain events or neither want them in history or logbook, you should use the `exclude`/`include` options of the `recorder` component, that way they aren't even in your database. That way you can save storage and keep the database small by excluding certain often-logged events (like `sensor.last_boot`). +If you only want to hide events from e.g., your history, take a look at the [`history` component](/components/history/). Same goes for the logbook. But if you have privacy concerns about certain events or neither want them in history or logbook, you should use the `exclude`/`include` options of the `recorder` component, that way they aren't even in your database. That way you can save storage and keep the database small by excluding certain often-logged events (like `sensor.last_boot`). ### {% linkable_title Service `purge` %} @@ -158,14 +158,17 @@ If the `recorder` component is activated then some components support `restore_s

If you use MariaDB 10 you need to add port 3307 to the SERVER_IP, e.g., `mysql://user:password@SERVER_IP:3307/DB_NAME?charset=utf8`. +

-+If you are running a database server instance on the same server as Home Assistant then you must ensure that this service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the service file. +### {% linkable_title Database startup %} + +If you are running a database server instance on the same server as Home Assistant then you must ensure that this service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the service file. ```bash $ sudo nano /etc/systemd/system/home-assistant@homeassistant.service ``` -and add the service for PostgreSQL: +and add the service for the database, for example, PostgreSQL: ``` [Unit] @@ -178,7 +181,6 @@ Save the file then reload `systemctl`: ```bash $ sudo systemctl daemon-reload ``` -

## {% linkable_title Installation notes %} @@ -212,7 +214,7 @@ $ pip3 install mysqlclient After installing the dependencies, it is required to create the database manually. During the startup, Home Assistant will look for the database specified in the `db_url`. If the database doesn't exist, it will not automatically create it for you. -Once Home Assistant finds the database, with right level of permissions, all the required tables will then be automatically created and the data will be populated accordingly. +Once Home Assistant finds the database, with the right level of permissions, all the required tables will then be automatically created and the data will be populated accordingly. ### {% linkable_title PostgreSQL %} From c5428d979831d6389bb84aa51bb107b81f90ef83 Mon Sep 17 00:00:00 2001 From: R Huish <5207490+genestealer@users.noreply.github.com> Date: Mon, 10 Sep 2018 10:02:46 +0100 Subject: [PATCH 061/176] Updated setup steps and added testing steps notify.html5.markdown (#6240) * Update notify.html5.markdown Added more detail to navigating to the enable slider * Update notify.html5.markdown Added testing steps and expanded setup steps --- source/_components/notify.html5.markdown | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 57e6ce10e38..1578015218b 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -72,13 +72,24 @@ The `html5` platform can only function if all of the following requirements are Assuming you have already added the platform to your configuration: 1. Open Home Assistant in Chrome or Firefox. -2. Assuming you have met all the [requirements](#requirements) above, you should see a new slider for Push Notifications through the profile page Profile > Push notifications. +2. Load profile page by clicking on the badge next to the Home Assistant title in the sidebar. Assuming you have met all the [requirements](#requirements) above then you should see a new slider for Push Notifications. If the slider is greyed out, ensure you are viewing Home Assistant via its external HTTPS address. If the slider is not visible, ensure you are not in the user configuration (Sidebar, Configuration, Users, View User). 3. Slide it to the on position. 4. Within a few seconds you should be prompted to allow notifications from Home Assistant. 5. Assuming you accept, that's all there is to it! 6. (Optional, but highly recommended!) Open the `html5_push_registrations.conf` file in your configuration directory. You will see a new entry for the browser you just added. Rename it from `unnamed device` to a name of your choice, which will make it easier to identify later. _Do not change anything else in this file!_ You need to restart Home Assistant after making any changes to the file. +### {% linkable_title Testing %} + +Assuming the previous test completed successfully and your browser was registered, you can test the notification as follows: + +1. Open Home Assistant in Chrome or Firefox. +2. Open the sidebar and click the Services button at the bottom (shaped like a remote control), located below the Developer Tools. +3. From the Services dropdown, search for your HTML5 notify service (E.G. notify.NOTIFIER_NAME) and select it. +4. In the Service Data text box enter: {"message":"hello world"}, then press the CALL SERVICE button. +5. If everything worked you should see a popup notification. + + ### {% linkable_title Usage %} The `html5` platform accepts a standard notify payload. However, there are also some special features built in which you can control in the payload. From a79926f24be60a7d138807eb49e94dea85f08ef8 Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Mon, 10 Sep 2018 03:14:18 -0700 Subject: [PATCH 062/176] Add troubleshooting for invalid client id error (#6244) * Add troubleshooting for invalid client id error * Update authentication.markdown * Add a note to remote document * :pencil2: Spelling and grammar tweaks --- source/_docs/authentication.markdown | 18 ++++++++++++++++++ source/_docs/configuration/remote.markdown | 4 ++++ .../error-invalid-client-id.png | Bin 0 -> 15590 bytes 3 files changed, 22 insertions(+) create mode 100644 source/images/docs/authentication/error-invalid-client-id.png diff --git a/source/_docs/authentication.markdown b/source/_docs/authentication.markdown index 6838a31a622..1d55d6b38f3 100644 --- a/source/_docs/authentication.markdown +++ b/source/_docs/authentication.markdown @@ -50,6 +50,24 @@ While you should hopefully be storing your passwords in a password manager, if y When you start Home Assistant next you'll be required to set up authentication again. +### {% linkable_title Error: invalid client id or redirect url%} + +Screenshot of Error: invalid client id or redirect url + +You have to use a domain name, not IP address to remote access Home Assistant; otherwise you will get **Error: invalid client id or redirect url** error on the login form. However, you can use the IP address to access Home Assistant in your home network. + +It because we only allow using IP address as client ID when your IP address is one of internal network address (e.g., 192.168.0.1) or loopback address (e.g., 127.0.0.1). + +If you don't have a valid domain name for your Home Assistant instance, you can modify the `hosts` file on your computer to fake one. For example, if you are on Windows, edit `C:\Windows\System32\Drivers\etc\hosts` file with administrator privilege, add following entry. + +```text +12.34.56.78 hassbian.home +``` + +(Please replace `12.34.56.78` with your Home Assistant's public IP address) + +It will allow you to open Home Assistant instance by access `http://hassbian.home:8123/` + ### {% linkable_title Stuck on Loading data %} Some advert blocking software, such as Wipr, also blocks web sockets. If you're stuck on the Loading data screen, try disabling your ad blocker. diff --git a/source/_docs/configuration/remote.markdown b/source/_docs/configuration/remote.markdown index f0d981b116e..00f9e276b35 100644 --- a/source/_docs/configuration/remote.markdown +++ b/source/_docs/configuration/remote.markdown @@ -15,6 +15,10 @@ If you're interested in logging in to Home Assistant while away, you'll have to Remember to follow the [securing checklist](/docs/configuration/securing/) before doing this.

+

+Home Assistant no longer support remote access via IP address since release 0.77, you have to use domain name. +

+ The most common approach is to set up port forwarding (for any port) from your router to port 8123 on the computer that is hosting Home Assistant. General instructions on how to do this can be found by searching ` port forwarding instructions`. You can use any free port on your router and forward that to port 8123. A problem with making a port accessible is that some Internet Service Providers only offer dynamic IPs. This can cause you to lose access to Home Assistant while away. You can solve this by using a free Dynamic DNS service like [DuckDNS](https://www.duckdns.org/). diff --git a/source/images/docs/authentication/error-invalid-client-id.png b/source/images/docs/authentication/error-invalid-client-id.png new file mode 100644 index 0000000000000000000000000000000000000000..9f543b92395385ea08cdcf087bc3ff5f7246c1fb GIT binary patch literal 15590 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 literal 0 HcmV?d00001 From 86b8efda92be307e07cf4e83dfc7393d060a09b5 Mon Sep 17 00:00:00 2001 From: txNgineer Date: Mon, 10 Sep 2018 05:30:10 -0500 Subject: [PATCH 063/176] Update sensor.wunderground.markdown (#6223) --- source/_components/sensor.wunderground.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index d82062c5ffa..0ce56092b59 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -16,7 +16,9 @@ ha_iot_class: "Cloud Polling" The `wunderground` platform uses [Weather Underground](http://www.wunderground.com) as a source for current weather information.

-Obtain a WUnderground API key [here](https://www.wunderground.com/weather/api). They no longer offer free API keys, and all keys must be paid for, at this time existing free keys will continue to work, but may be disabled in the future. +Obtain a WUnderground API key [here](https://www.wunderground.com/weather/api). They no longer offer free API keys, and all keys must be paid for. At this time existing free keys will continue to work, but will be disabled Dec 31, 2018. As of Sept 6, 2018 Weather Underground states they are declaring the [End of Service for the Weather Underground API](https://apicommunity.wunderground.com/weatherapi/topics/end-of-service-for-the-weather-underground-api). They say they will develop new plans for non-commercial users. No timeline for this has been announced. + +Please consider this when using the following information.

To add Wunderground to your installation, add the following to your `configuration.yaml` file: From 8e7887bfed43cd3a64832ed5ec7073f6df48ff55 Mon Sep 17 00:00:00 2001 From: Flip Hess Date: Mon, 10 Sep 2018 12:36:26 +0200 Subject: [PATCH 064/176] Add verify_ssl option to generic camera docs (#6005) * Add verify_ssl option to generic camera docs * :pencil2: Typo --- source/_components/camera.generic.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index b9bf15bf46a..e8c457086f5 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -37,6 +37,7 @@ Configuration variables: - **limit_refetch_to_url_change** (*Optional*): True/false value (default: false). Limits re-fetching of the remote image to when the URL changes. Only relevant if using a template to fetch the remote image. - **content_type** (*Optional*): Set the content type for the IP camera if it is not a jpg file (default: `image/jpeg`). Use `image/svg+xml` to add a dynamic svg file. - **framerate** (*Optional*): The number of frames-per-second (FPS) of the stream (setting this too high may cause too much traffic on the network or be heavy on the camera). +- **verify_ssl** (*Optional*): True/false value (default: true). Enable or disable SSL certificate verification.

@@ -68,6 +69,7 @@ camera: - platform: generic name: Some Image still_image_url: https://127.0.0.1:8123/local/your_image.png + verify_ssl: false ``` ### {% linkable_title Sharing a camera feed from one Home Assistant instance to another %} From 1d7b020ce26ffb4337efa14a6ae8ef8068591a09 Mon Sep 17 00:00:00 2001 From: Julian Kahnert Date: Mon, 10 Sep 2018 12:40:22 +0200 Subject: [PATCH 065/176] update geizhals doc (#6026) * update geizhals doc * :pencil2: Tweak --- source/_components/sensor.geizhals.markdown | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source/_components/sensor.geizhals.markdown b/source/_components/sensor.geizhals.markdown index c9780740569..636751da35b 100644 --- a/source/_components/sensor.geizhals.markdown +++ b/source/_components/sensor.geizhals.markdown @@ -13,7 +13,6 @@ ha_iot_class: "Cloud Polling" ha_release: "0.51" --- - The `geizhals` sensor will give you the best price of a product from [Geizhals](https://geizhals.de) or related site. With this information can be used in e.g., automations to notify you when a price drops. To enable this sensor, add the following lines to your `configuration.yaml` file: @@ -23,16 +22,16 @@ To enable this sensor, add the following lines to your `configuration.yaml` file sensor: - platform: geizhals name: qc35 - product_id: 1453021 + product_id: 1696985 ``` Configuration variables: - **name** (*Required*): The internal name of the product in Home Assistant. -- **product_id** (*Required*): ID of the product. Get the ID from the geizhals website of your chosen product by clicking on the *Price History* tab, e.g., [here](https://geizhals.de/?phist=1453021). The URL of this site reveals the ID, e.g., with `product_id: 1453021`. +- **product_id** (*Required*): ID of the product. Get the ID from the Geizhals website of your chosen product by opening the *Price History* in a new browser tab (right-click on the price history > open in new tab). +The URL of this site reveals the ID, e.g. `https://geizhals.de/?phist=1696985` with a `product_id` of `1696985`. - **description** (*Optional*): The name of the product in the front end. -- **domain** (*Optional*): Domain which should be used for the request. Set this to `geizhals.at`, `geizhals.eu`, `geizhals.de`, `skinflint.co.uk` or `cenowarka.pl`. Defaults to `geizhals.de`. -- **regex** (*Optional*): Regular expression to parse the price. Default: `\D\s(\d*)[\,|\.](\d*)`. +- **locale** (*Optional*): Localisation which should be used for the request. Set this to `AT`, `EU`, `DE`, `UK` or `PL`. Defaults to `DE`. #### {% linkable_title Extended example %} @@ -41,8 +40,7 @@ Configuration variables: sensor: - platform: geizhals name: qc35 - product_id: 1453021 + product_id: 1696985 description: "Bose QC35" - domain: 'geizhals.de' - regex: '\D\s(\d*)[\,|\.](\d*)' + locale: "DE" ``` From 57f631f0f88ddc111c3e9cf7affec759e0335223 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 10 Sep 2018 11:40:31 +0100 Subject: [PATCH 066/176] Note about bearer tokens (#6215) * Note about bearer tokens Given that there's zero documentation about those warnings, and it comes up many times a day, time to document *something* about them. * Update * :pencil2: Tweaks * :pencil2: Formatting tweak --- source/_docs/authentication.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_docs/authentication.markdown b/source/_docs/authentication.markdown index 1d55d6b38f3..503725a5f7a 100644 --- a/source/_docs/authentication.markdown +++ b/source/_docs/authentication.markdown @@ -40,6 +40,24 @@ As a user, you can setup multi-factor authentication with time-based one-time pa ## {% linkable_title Troubleshooting %} +### {% linkable_title Bearer token warnings %} + +Under the new authentication system you'll see the following warning logged when the [legacy API password](/docs/authentication/providers/#legacy-api-password) is supplied, but not configured in Home Assistant: + +```txt +WARNING (MainThread) [homeassistant.components.http.auth] You need to use a bearer token to access /blah/blah from 192.0.2.4 +``` + +If you see this, you need to add an [`api_password`](/components/http/#api_password) to your `http:` configuration. + +### {% linkable_title Bearer token informational messages %} + +If instead, you see the following, then this is a message for component developers, to tell them that they need to update how they authenticate to Home Assistant. As an end user you don't need to do anything: + +```txt +INFO (MainThread) [homeassistant.components.http.auth] You need to use a bearer token to access /blah/blah from 192.0.2.4 +``` + ### {% linkable_title Lost owner password %} While you should hopefully be storing your passwords in a password manager, if you lose the password associated with the owner account the only way to resolve this is to delete *all* the authentication data. You do this by shutting down Home Assistant and deleting the following files from the `.storage/` folder in your [configuration folder](https://www.home-assistant.io/docs/configuration/): From bfcd5267981ca7db1a76c9ceebb0ba226103364d Mon Sep 17 00:00:00 2001 From: Alexxander0 <26937883+Alexxander0@users.noreply.github.com> Date: Mon, 10 Sep 2018 13:03:30 +0200 Subject: [PATCH 067/176] Component media_player.spotify doenst support sonos device (#6204) * Update media_player.spotify.markdown spotify media player doenst support sonos * :pencil2: Spelling/Grammar tweaks --- source/_components/media_player.spotify.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/media_player.spotify.markdown b/source/_components/media_player.spotify.markdown index 8de7240135f..0f2c27f5d05 100644 --- a/source/_components/media_player.spotify.markdown +++ b/source/_components/media_player.spotify.markdown @@ -75,3 +75,6 @@ You can send playlists to spotify via the "media_content_type": "playlist" and " In this example this is a URI link to the Reggae Infusions playlist, [this support document from Spotify](https://support.spotify.com/us/using_spotify/share_music/why-do-you-have-two-different-link-formats/) explains how to get this URI value to use for playlists in the Spotify component. +## {% linkable_title Unsupported devices %} + +- **Sonos**: Although its a Spotify Connect device, it is not supported by the official Spotify API. From 3d76207eeafdec7556f1f047e2cffcc10e5a325a Mon Sep 17 00:00:00 2001 From: Pawel Date: Mon, 10 Sep 2018 13:19:44 +0200 Subject: [PATCH 068/176] Support for switch radio preset Onkyo (#6107) --- .../_components/media_player.onkyo.markdown | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index 630182ba6df..0737d7a9124 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -79,3 +79,26 @@ List of source names: - multi-ch - xm - sirius + +### {% linkable_title Example `play_media` script %} + +The `play_media` function can be used in script to play radio station by preset number. +Not working for NET radio. + +```yaml +# Example play_media script +# +script: + radio1: + alias: "Radio 1" + sequence: + - service: media_player.turn_on + data: + entity_id: media_player.onkyo + - service: media_player.play_media + data: + entity_id: media_player.onkyo + media_content_type: "radio" + media_content_id: "1" + +``` From 769c6323d893a79b8b5e31d3133726cef3d85056 Mon Sep 17 00:00:00 2001 From: Louis-Dominique Dubeau Date: Mon, 10 Sep 2018 07:21:06 -0400 Subject: [PATCH 069/176] Add the documentation for the new base_url option for tts. (#6219) * Add the documentation for the new base_url option for tts. * Clarify where base_url may be set. * Convert the parameter table to use the configuration template. * :pencil2: Tweaks --- source/_components/tts.markdown | 56 +++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/source/_components/tts.markdown b/source/_components/tts.markdown index 5fc0d8de47b..0b333959348 100644 --- a/source/_components/tts.markdown +++ b/source/_components/tts.markdown @@ -10,11 +10,11 @@ footer: true ha_release: 0.35 --- -Text-to-speech (TTS) enables Home Assistant to speak to you. +Text-to-Speech (TTS) enables Home Assistant to speak to you. ## {% linkable_title Configuring a `tts` platform %} -To get started, add the following lines to your `configuration.yaml` (example for google): +To get started, add the following lines to your `configuration.yaml` (example for Google): ```yaml # Example configuration.yaml entry for google tts service @@ -23,28 +23,66 @@ tts: ```

-Depending on your setup, you might need to set a base URL (`base_url`) inside the [http component](/components/http/). +Depending on your setup, you might need to set a base URL (`base_url`) inside the [http component](/components/http/) or in the parameters of this component.

The following optional parameters can be used with any platform. However, the TTS component will only look for global settings under the configuration of the first configured platform: -| Parameter | Default | Description | -|---------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `cache` | True | Allow TTS to cache voice file to local storage. | -| `cache_dir` | tts | Folder name or path to a folder for caching files. | -| `time_memory` | 300 | Time to hold the voice data inside memory for fast play on a media player. Minimum is 60 s and the maximum 57600 s (16 hours). | +{% configuration %} +cache: + description: Allow TTS to cache voice file to local storage. + required: false + type: boolean + default: True +cache_dir: + description: Folder name or path to a folder for caching files. + required: false + type: string + default: tts +time_memory: + description: Time to hold the voice data inside memory for fast play on a media player. Minimum is 60 s and the maximum 57600 s (16 hours). + required: false + type: int + default: 300 +base_url: + description: A base URL to use *instead* of the one set in the [http component](/components/http/). It is used as-is by the `tts` component. In particular, you need to include the protocol scheme `http://` or `https://` and the correct port number. They will not be automatically added for you. + required: false + type: string + default: value of ``http.base_url`` +{% endconfiguration %} The extended example from above would look like the following sample: ```yaml -# Example configuration.yaml entry for google tts service +# Example configuration.yaml entry for Google TTS service tts: - platform: google cache: true cache_dir: /tmp/tts time_memory: 300 + base_url: http://192.168.0.10:8123 ``` +## {% linkable_title When do you need to set `base_url` here? %} + +The general answer is "whenever the global `base_url` set in [http component](/components/http/) is not adequate to allow the `say` service to run". The `say` service operates by generating a media file that contains the speech corresponding to the text passed to the service. Then the `say` service sends a message to the media device with a URL pointing to the file. The device fetches the media file at the URL and plays the media. Some combinations of a media device, network configuration and Home Assistant configuration can make it so that the device cannot fetch the media file. + +The following sections describe some of the problems encountered with media devices. + +### {% linkable_title Self-signed certificates %} + +This problem occurs when your Home Assistant instance is configured to be accessed through SSL, and you are using a self-signed certificate. + +The `tts` service will send an `https://` URL to the media device, which will check the certificate, and reject it. So it won't play your file. If you could make the device accept your certificate, it would play the file. However, many media devices do not allow changing settings to accept self-signed certificates. Ultimately, your option may be to serve files to the device as `http://` rather than `https://`. To do this, you *could* change the `base_url` setting in [http component](/components/http/), but that would turn off SSL for all services that use `base_url`. Instead, setting a `base_url` for the `tts` service allows turning off SSL only for this component. + +### {% linkable_title Google cast devices %} + +The Google cast devices (Google Home, Chromecast, etc.) present the following problems: + +* They [reject self-signed certificates](#self-signed-certificates). + +* They do not work with URLs that contain hostnames established by local naming means. Let's say your Home Assistant instance is running on a machine made known locally as `ha`. All your machines on your local network are able to access it as `ha`. However, try as you may, your cast device won't download the media files from your `ha` machine. That's because your cast device ignores your local naming setup. In this example, the `say` service creates a URL like `http://ha/path/to/media.mp3` (or `https://...` if you are using SSL). Setting a `base_url` that contains the IP address of your server works around this issue. By using an IP address, the cast device does not have to resolve the hostname. + ## {% linkable_title Service say %} The `say` service support `language` and on some platforms also `options` for set, i.e., *voice, motion, speed, etc*. The text for speech is set with `message`. From a390b8d2faebb876af44f7d74270712c4c967a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Mon, 10 Sep 2018 13:49:50 +0200 Subject: [PATCH 070/176] Adds Switchmate documentation (#6031) * Create switch.switchmate.markdown * Add switchmate logo * Update switch.switchmate.markdown * Update switch.switchmate.markdown * Update switch.switchmate.markdown * Update switch.switchmate.markdown * Update switch.switchmate.markdown * Update switch.switchmate.markdown * :pencil2: Typo fix --- source/_components/switch.switchmate.markdown | 36 ++++++++++++++++++ .../supported_brands/switchmate-logo-rgb.png | Bin 0 -> 17081 bytes 2 files changed, 36 insertions(+) create mode 100644 source/_components/switch.switchmate.markdown create mode 100644 source/images/supported_brands/switchmate-logo-rgb.png diff --git a/source/_components/switch.switchmate.markdown b/source/_components/switch.switchmate.markdown new file mode 100644 index 00000000000..b6e53624eed --- /dev/null +++ b/source/_components/switch.switchmate.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "Switchmate" +description: "Instructions on how to set up Switchmate switches." +date: 2018-08-17 22:41 +sidebar: true +comments: false +sharing: true +footer: true +logo: switchmate-logo-rgb.png +ha_category: Switch +ha_release: 0.78 +ha_iot_class: "Local Polling" +--- + +This `Switchmate` switch platform allows you to control Switchmate [devices]( https://www.mysimplysmarthome.com/products/switchmate-switches/). + +To enable it, add the following lines to your `configuration.yaml`: + +```yaml +switch: + - platform: switchmate + mac: 'cb:25:0b......' +``` + +{% configuration %} +mac: + description: Device MAC address. + required: true + type: string +name: + description: The name used to display the switch in the frontend. + required: false + type: string +{% endconfiguration %} + diff --git a/source/images/supported_brands/switchmate-logo-rgb.png b/source/images/supported_brands/switchmate-logo-rgb.png new file mode 100644 index 0000000000000000000000000000000000000000..97030d5c6a552399aed0bab6c3e199a592977d32 GIT binary patch literal 17081 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 literal 0 HcmV?d00001 From 0600c2cabddf4b9b3c9244822dd568484c8d4bfd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 10 Sep 2018 13:57:31 +0200 Subject: [PATCH 071/176] Add draft blog post --- _config.yml | 4 +- source/_posts/2018-09-15-release-78.markdown | 393 +++++++++++++++++++ 2 files changed, 395 insertions(+), 2 deletions(-) create mode 100644 source/_posts/2018-09-15-release-78.markdown diff --git a/_config.yml b/_config.yml index 60823e3e2d0..59c65eb54bb 100644 --- a/_config.yml +++ b/_config.yml @@ -141,9 +141,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 77 +current_minor_version: 78 current_patch_version: 0 -date_released: 2018-08-29 +date_released: 2018-09-15 # 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/2018-09-15-release-78.markdown b/source/_posts/2018-09-15-release-78.markdown new file mode 100644 index 00000000000..b595c05b9a8 --- /dev/null +++ b/source/_posts/2018-09-15-release-78.markdown @@ -0,0 +1,393 @@ +--- +layout: post +title: "0.78: XXX - Update date" +description: "XXX" +date: 2018-09-10 00:01:00 +date_formatted: "September 15, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-09-0.78/social.png +--- + + + +## {% linkable_title New Platforms %} + +- Add temperature sensors to the velbus component ([@Cereal2nd] - [#16203]) ([velbus docs]) ([sensor.velbus docs]) (new-platform) +- Add Volkszaehler sensor ([@fabaff] - [#16188]) ([sensor.volkszaehler docs]) (new-platform) +- Switchmate ([@Danielhiversen] - [#15535]) ([switch.switchmate docs]) (new-platform) +- Add support for Habitica ([@ASMfreaK] - [#15744]) ([habitica docs]) ([sensor.habitica docs]) (new-platform) +- Geo Location component ([@exxamalte] - [#15953]) ([feedreader docs]) ([geo_location docs]) (new-platform) +- Add Cover to the Insteon component ([@teharris1] - [#16215]) ([insteon docs]) ([cover.insteon docs]) (new-platform) +- switchbot ([@Danielhiversen] - [#16396]) ([switch.switchbot docs]) (new-platform) +- Add Yale Smart Alarm component ([@domwillcode] - [#16377]) ([alarm_control_panel.yale_smart_alarm docs]) (new-platform) +- Add OpenTherm Gateway climate platform ([@mvn23] - [#16299]) ([climate.opentherm_gw docs]) (new-platform) + +## {% 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. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- Rewrite of Trafikverket weather - Multiple sensor types supported ([@endor-force] - [#15935]) ([sensor.trafikverket_weatherstation docs]) (breaking change) +- Fix geizhals price parsing ([@JulianKahnert] - [#15990]) ([sensor.geizhals docs]) (breaking change) +- Update to EnvoyReader 0.2, support for more hardware ([@jesserizzo] - [#16212]) ([sensor.enphase_envoy docs]) (breaking change) +- Fix Mi Flora median calculation ([@PaulAnnekov] - [#16085]) ([sensor.miflora docs]) (breaking change) +- Added Twitch v5 support to the twitch platform ([@ioangogo] - [#16428]) ([sensor.twitch docs]) (breaking change) +- Update radiotherm ([@cpw] - [#15031]) ([climate.radiotherm docs]) (breaking change) + +## {% linkable_title All changes %} + +- Add 'moon_phase' to Dark Sky sensor ([@fabaff] - [#16179]) ([sensor.darksky docs]) +- Zoneminder SSL fix ([@djm300] - [#16157]) ([zoneminder docs]) +- update python-velbus library version ([@thomasdelaet] - [#16194]) ([velbus docs]) +- MQTT: Log transmitted as well as received messages ([@smurfix] - [#16195]) ([mqtt docs]) +- Upgrade sqlalchemy to 1.2.11 ([@fabaff] - [#16192]) ([sensor.sql docs]) +- Add battery warning, rssi level and check for availability ([@fucm] - [#16193]) ([sensor.tahoma docs]) +- Inconsistent entity_id when multiple sensors ([@grea09] - [#16205]) ([sensor.dnsip docs]) +- Add temperature sensors to the velbus component ([@Cereal2nd] - [#16203]) ([velbus docs]) ([sensor.velbus docs]) (new-platform) +- Rewrite of Trafikverket weather - Multiple sensor types supported ([@endor-force] - [#15935]) ([sensor.trafikverket_weatherstation docs]) (breaking change) +- Add device_tracker.bluetooth_update service ([@kariudo] - [#15252]) ([device_tracker docs]) +- Fix geizhals price parsing ([@JulianKahnert] - [#15990]) ([sensor.geizhals docs]) (breaking change) +- Add Volkszaehler sensor ([@fabaff] - [#16188]) ([sensor.volkszaehler docs]) (new-platform) +- openalpr flag `WITH_TEST` should be `WITH_TESTS` ([@vrih] - [#16218]) +- Upgrade alpha_vantage to 2.1.0 ([@fabaff] - [#16217]) ([sensor.alpha_vantage docs]) +- Store devices as dict instead of list ([@Kane610] - [#16229]) +- Improve package loadable ([@balloob] - [#16237]) +- Switchmate ([@Danielhiversen] - [#15535]) ([switch.switchmate docs]) (new-platform) +- Add support for discrete states to MyQ cover ([@schmittx] - [#16251]) ([cover.myq docs]) +- bump version ([@dgomes] - [#16262]) ([upnp docs]) +- Replace Authorization by Authentication ([@cgtobi] - [#16259]) ([hangouts docs]) +- Add device info to Chromecast ([@balloob] - [#16261]) ([media_player.cast docs]) +- Add device info for sonos ([@balloob] - [#16263]) ([media_player.sonos docs]) +- Add device info Nest ([@balloob] - [#16265]) ([climate.nest docs]) +- Add Hue device info ([@balloob] - [#16267]) ([hue docs]) ([light.hue docs]) +- Nest Thermostat has software version ([@awarecan] - [#16275]) ([climate.nest docs]) +- Add support for Habitica ([@ASMfreaK] - [#15744]) ([habitica docs]) ([sensor.habitica docs]) (new-platform) +- Fix so that entities are properly unloaded with config entry ([@Kane610] - [#16281]) ([deconz docs]) ([binary_sensor.deconz docs]) ([light.deconz docs]) ([scene.deconz docs]) ([sensor.deconz docs]) ([switch.deconz docs]) +- Geo Location component ([@exxamalte] - [#15953]) ([feedreader docs]) ([geo_location docs]) (new-platform) +- Bump songpal dependency ([@rytilahti] - [#16297]) ([media_player.songpal docs]) +- Use asterisk_mbox 0.5.0 client ([@PhracturedBlue] - [#16296]) ([asterisk_mbox docs]) +- Upgrade Adafruit-DHT to 1.3.4 ([@thomaslian] - [#16327]) ([sensor.dht docs]) +- Add unique ID ([@schmittx] - [#16323]) ([cover.myq docs]) +- Add Cover to the Insteon component ([@teharris1] - [#16215]) ([insteon docs]) ([cover.insteon docs]) (new-platform) +- Fix missing humidity sensor ([@danielperna84] - [#16337]) ([homematic docs]) +- Support Sonos Beam HDMI input ([@phil65] - [#16340]) ([media_player.sonos docs]) +- Make last_seen attribute a timezone aware datetime in UTC ([@pnbruckner] - [#16348]) ([device_tracker docs]) +- Handle netatmo exception ([@Danielhiversen] - [#16344]) ([sensor.netatmo docs]) +- Add support for sound_mode for Yamaha rxv media_player ([@Joshi425] - [#16352]) ([media_player.yamaha docs]) +- Add unique_id to MQTT Light ([@bieniu] - [#16303]) ([light.mqtt docs]) +- Update to EnvoyReader 0.2, support for more hardware ([@jesserizzo] - [#16212]) ([sensor.enphase_envoy docs]) (breaking change) +- Snips: Added special slot values, session_id and slotname_raw ([@tschmidty69] - [#16185]) ([snips docs]) +- Upgrade hbmqtt to 0.9.4 ([@awarecan] - [#16356]) ([mqtt docs]) +- Upgrade Sphinx to 1.7.7 ([@fabaff] - [#16359]) +- Upgrade qnapstats to 0.2.7 ([@fabaff] - [#16360]) ([sensor.qnap docs]) +- Upgrade mutagen to 1.41.1 ([@fabaff] - [#16361]) ([tts docs]) +- Upgrade shodan to 1.10.0 ([@fabaff] - [#16363]) ([sensor.shodan docs]) +- Upgrade to youtube_dl to 2018.09.01 ([@fabaff] - [#16365]) ([media_extractor docs]) +- Added 'nomapnt', 'outcurnt', 'loadapnt' fields ([@MarcSN311] - [#16176]) ([sensor.apcupsd docs]) +- Generic Thermostat: add support for climate.turn_on/climate.turn_off ([@aronsky] - [#16080]) ([climate.generic_thermostat docs]) +- Add support for Tahoma Lighting Receiver on/off io ([@fucm] - [#15925]) ([tahoma docs]) ([switch.tahoma docs]) +- Update discord.py ([@htotoo] - [#16248]) ([notify docs]) +- Upgrade python-telegram-bot to 11.0.0 ([@fabaff] - [#16373]) ([telegram_bot docs]) +- Upgrade attrs to 18.2.0 ([@fabaff] - [#16372]) +- Update server.py ([@awarecan] - [#16375]) ([mqtt docs]) +- add_entities for switchmate ([@Danielhiversen] - [#16368]) ([switch.switchmate docs]) +- Support for playing radio preset by Onkyo media_player ([@pszafer] - [#16258]) ([cover.mqtt docs]) ([media_player.onkyo docs]) +- Bug fix for Tibber ([@Danielhiversen] - [#16397]) ([sensor.tibber docs]) +- zha: Bump to zigpy 0.2.0/bellows 0.7.0 ([@rcloran] - [#16404]) ([zha docs]) +- Fix SystemMonitor IP address sensor ([@ReneNulschDE] - [#16394]) ([sensor.systemmonitor docs]) +- add ExpressBus icon key to sensor.mvg ([@9R] - [#16387]) ([sensor.mvglive docs]) +- Device and entity registry remove config entry on unload ([@Kane610] - [#16247]) +- Add config flow for OpenUV ([@bachya] - [#16159]) ([openuv docs]) ([binary_sensor.openuv docs]) ([sensor.openuv docs]) +- Service to load new deCONZ devices without restart ([@Kane610] - [#16308]) ([deconz docs]) +- Delegate mqtt topic match validation to the paho mqtt client ([@rohankapoorcom] - [#16403]) ([mqtt docs]) +- Clean up dlink and some bug fix ([@Danielhiversen] - [#16346]) ([switch.dlink docs]) +- Implement correct state for RFlink cover ([@nudded] - [#16304]) ([cover.rflink docs]) +- Fix Mi Flora median calculation ([@PaulAnnekov] - [#16085]) ([sensor.miflora docs]) (breaking change) +- Add context to scripts and automations ([@balloob] - [#16415]) ([automation docs]) ([script docs]) ([automation.event docs]) ([automation.homeassistant docs]) ([automation.numeric_state docs]) ([automation.state docs]) ([automation.template docs]) ([automation.zone docs]) +- Fix openuv.config_flow unit test ([@awarecan] - [#16419]) +- Upgrade sense library to 0.4.2 ([@kbickar] - [#16429]) ([sensor.sense docs]) +- switchbot ([@Danielhiversen] - [#16396]) ([switch.switchbot docs]) (new-platform) +- Fix camera proxy to not require api_password to function ([@PhracturedBlue] - [#16450]) ([camera docs]) ([camera.proxy docs]) +- Upgrade shodan to 1.10.1 ([@fabaff] - [#16460]) ([sensor.shodan docs]) +- Upgrade Sphinx to 1.7.8 ([@fabaff] - [#16459]) +- update rfxtrx lib ([@Danielhiversen] - [#16463]) ([rfxtrx docs]) +- Added Twitch v5 support to the twitch platform ([@ioangogo] - [#16428]) ([sensor.twitch docs]) (breaking change) +- Fix waze_travel_time component startup ([@tsvi] - [#16465]) ([sensor.waze_travel_time docs]) +- Update license to official GitHub template ([@OverloadUT] - [#16470]) +- Add Yale Smart Alarm component ([@domwillcode] - [#16377]) ([alarm_control_panel.yale_smart_alarm docs]) (new-platform) +- Update radiotherm ([@cpw] - [#15031]) ([climate.radiotherm docs]) (breaking change) +- Support SNMPv3 and asyncio in snmp switch ([@mtdcr] - [#14754]) ([switch.snmp docs]) +- Fix GitHub change to resolve conflicts ([@fabaff] - [#16477]) ([switch.snmp docs]) +- Add OpenTherm Gateway climate platform ([@mvn23] - [#16299]) ([climate.opentherm_gw docs]) (new-platform) +- Support SNMPv3 and asyncio in snmp sensor ([@mtdcr] - [#14753]) ([sensor.snmp docs]) +- Add rate of change to statistics sensor ([@flo-wer] - [#15632]) ([sensor.statistics docs]) +- Restore status attribute for xiaomi_vacuum ([@tamasv] - [#16366]) ([vacuum docs]) ([vacuum.xiaomi_miio docs]) +- Check if API key is valid and users available ([@fabaff] - [#16494]) ([sensor.lastfm docs]) +- Update name legacy api password ([@balloob] - [#16455]) +- Fix Netgear LTESensor docstring ([@scop] - [#16501]) ([sensor.netgear_lte docs]) +- Update pyHS100 to 0.3.3 ([@amelchio] - [#16502]) ([light.tplink docs]) ([switch.tplink docs]) +- Move voluptuous-serialize to core requirement ([@awarecan] - [#16507]) ([config docs]) +- adds listener for OnAVStart and OnAVChange ([@tadly] - [#16495]) ([media_player.kodi docs]) +- Order imports ([@fabaff] - [#16515]) +- Upgrade aiohttp to 3.4.4 ([@awarecan] - [#16486]) +- Add a base_url configuration setting to tts. ([@lddubeau] - [#16478]) ([tts docs]) +- Upgrade youtube_dl to 2018.09.10 ([@fabaff] - [#16534]) ([media_extractor docs]) +- Upgrade keyring to 15.0.0 ([@fabaff] - [#16536]) + +[#14753]: https://github.com/home-assistant/home-assistant/pull/14753 +[#14754]: https://github.com/home-assistant/home-assistant/pull/14754 +[#15031]: https://github.com/home-assistant/home-assistant/pull/15031 +[#15252]: https://github.com/home-assistant/home-assistant/pull/15252 +[#15535]: https://github.com/home-assistant/home-assistant/pull/15535 +[#15632]: https://github.com/home-assistant/home-assistant/pull/15632 +[#15744]: https://github.com/home-assistant/home-assistant/pull/15744 +[#15925]: https://github.com/home-assistant/home-assistant/pull/15925 +[#15935]: https://github.com/home-assistant/home-assistant/pull/15935 +[#15953]: https://github.com/home-assistant/home-assistant/pull/15953 +[#15990]: https://github.com/home-assistant/home-assistant/pull/15990 +[#16080]: https://github.com/home-assistant/home-assistant/pull/16080 +[#16085]: https://github.com/home-assistant/home-assistant/pull/16085 +[#16157]: https://github.com/home-assistant/home-assistant/pull/16157 +[#16159]: https://github.com/home-assistant/home-assistant/pull/16159 +[#16176]: https://github.com/home-assistant/home-assistant/pull/16176 +[#16179]: https://github.com/home-assistant/home-assistant/pull/16179 +[#16185]: https://github.com/home-assistant/home-assistant/pull/16185 +[#16188]: https://github.com/home-assistant/home-assistant/pull/16188 +[#16192]: https://github.com/home-assistant/home-assistant/pull/16192 +[#16193]: https://github.com/home-assistant/home-assistant/pull/16193 +[#16194]: https://github.com/home-assistant/home-assistant/pull/16194 +[#16195]: https://github.com/home-assistant/home-assistant/pull/16195 +[#16203]: https://github.com/home-assistant/home-assistant/pull/16203 +[#16205]: https://github.com/home-assistant/home-assistant/pull/16205 +[#16212]: https://github.com/home-assistant/home-assistant/pull/16212 +[#16215]: https://github.com/home-assistant/home-assistant/pull/16215 +[#16217]: https://github.com/home-assistant/home-assistant/pull/16217 +[#16218]: https://github.com/home-assistant/home-assistant/pull/16218 +[#16229]: https://github.com/home-assistant/home-assistant/pull/16229 +[#16237]: https://github.com/home-assistant/home-assistant/pull/16237 +[#16247]: https://github.com/home-assistant/home-assistant/pull/16247 +[#16248]: https://github.com/home-assistant/home-assistant/pull/16248 +[#16251]: https://github.com/home-assistant/home-assistant/pull/16251 +[#16258]: https://github.com/home-assistant/home-assistant/pull/16258 +[#16259]: https://github.com/home-assistant/home-assistant/pull/16259 +[#16261]: https://github.com/home-assistant/home-assistant/pull/16261 +[#16262]: https://github.com/home-assistant/home-assistant/pull/16262 +[#16263]: https://github.com/home-assistant/home-assistant/pull/16263 +[#16265]: https://github.com/home-assistant/home-assistant/pull/16265 +[#16267]: https://github.com/home-assistant/home-assistant/pull/16267 +[#16275]: https://github.com/home-assistant/home-assistant/pull/16275 +[#16281]: https://github.com/home-assistant/home-assistant/pull/16281 +[#16296]: https://github.com/home-assistant/home-assistant/pull/16296 +[#16297]: https://github.com/home-assistant/home-assistant/pull/16297 +[#16299]: https://github.com/home-assistant/home-assistant/pull/16299 +[#16303]: https://github.com/home-assistant/home-assistant/pull/16303 +[#16304]: https://github.com/home-assistant/home-assistant/pull/16304 +[#16308]: https://github.com/home-assistant/home-assistant/pull/16308 +[#16323]: https://github.com/home-assistant/home-assistant/pull/16323 +[#16327]: https://github.com/home-assistant/home-assistant/pull/16327 +[#16337]: https://github.com/home-assistant/home-assistant/pull/16337 +[#16340]: https://github.com/home-assistant/home-assistant/pull/16340 +[#16344]: https://github.com/home-assistant/home-assistant/pull/16344 +[#16346]: https://github.com/home-assistant/home-assistant/pull/16346 +[#16348]: https://github.com/home-assistant/home-assistant/pull/16348 +[#16352]: https://github.com/home-assistant/home-assistant/pull/16352 +[#16356]: https://github.com/home-assistant/home-assistant/pull/16356 +[#16359]: https://github.com/home-assistant/home-assistant/pull/16359 +[#16360]: https://github.com/home-assistant/home-assistant/pull/16360 +[#16361]: https://github.com/home-assistant/home-assistant/pull/16361 +[#16363]: https://github.com/home-assistant/home-assistant/pull/16363 +[#16365]: https://github.com/home-assistant/home-assistant/pull/16365 +[#16366]: https://github.com/home-assistant/home-assistant/pull/16366 +[#16368]: https://github.com/home-assistant/home-assistant/pull/16368 +[#16372]: https://github.com/home-assistant/home-assistant/pull/16372 +[#16373]: https://github.com/home-assistant/home-assistant/pull/16373 +[#16375]: https://github.com/home-assistant/home-assistant/pull/16375 +[#16377]: https://github.com/home-assistant/home-assistant/pull/16377 +[#16387]: https://github.com/home-assistant/home-assistant/pull/16387 +[#16394]: https://github.com/home-assistant/home-assistant/pull/16394 +[#16396]: https://github.com/home-assistant/home-assistant/pull/16396 +[#16397]: https://github.com/home-assistant/home-assistant/pull/16397 +[#16403]: https://github.com/home-assistant/home-assistant/pull/16403 +[#16404]: https://github.com/home-assistant/home-assistant/pull/16404 +[#16415]: https://github.com/home-assistant/home-assistant/pull/16415 +[#16419]: https://github.com/home-assistant/home-assistant/pull/16419 +[#16428]: https://github.com/home-assistant/home-assistant/pull/16428 +[#16429]: https://github.com/home-assistant/home-assistant/pull/16429 +[#16450]: https://github.com/home-assistant/home-assistant/pull/16450 +[#16455]: https://github.com/home-assistant/home-assistant/pull/16455 +[#16459]: https://github.com/home-assistant/home-assistant/pull/16459 +[#16460]: https://github.com/home-assistant/home-assistant/pull/16460 +[#16463]: https://github.com/home-assistant/home-assistant/pull/16463 +[#16465]: https://github.com/home-assistant/home-assistant/pull/16465 +[#16470]: https://github.com/home-assistant/home-assistant/pull/16470 +[#16477]: https://github.com/home-assistant/home-assistant/pull/16477 +[#16478]: https://github.com/home-assistant/home-assistant/pull/16478 +[#16486]: https://github.com/home-assistant/home-assistant/pull/16486 +[#16494]: https://github.com/home-assistant/home-assistant/pull/16494 +[#16495]: https://github.com/home-assistant/home-assistant/pull/16495 +[#16501]: https://github.com/home-assistant/home-assistant/pull/16501 +[#16502]: https://github.com/home-assistant/home-assistant/pull/16502 +[#16507]: https://github.com/home-assistant/home-assistant/pull/16507 +[#16515]: https://github.com/home-assistant/home-assistant/pull/16515 +[#16534]: https://github.com/home-assistant/home-assistant/pull/16534 +[#16536]: https://github.com/home-assistant/home-assistant/pull/16536 +[@9R]: https://github.com/9R +[@ASMfreaK]: https://github.com/ASMfreaK +[@Cereal2nd]: https://github.com/Cereal2nd +[@Danielhiversen]: https://github.com/Danielhiversen +[@Joshi425]: https://github.com/Joshi425 +[@JulianKahnert]: https://github.com/JulianKahnert +[@Kane610]: https://github.com/Kane610 +[@MarcSN311]: https://github.com/MarcSN311 +[@OverloadUT]: https://github.com/OverloadUT +[@PaulAnnekov]: https://github.com/PaulAnnekov +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@amelchio]: https://github.com/amelchio +[@aronsky]: https://github.com/aronsky +[@awarecan]: https://github.com/awarecan +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bieniu]: https://github.com/bieniu +[@cgtobi]: https://github.com/cgtobi +[@cpw]: https://github.com/cpw +[@danielperna84]: https://github.com/danielperna84 +[@dgomes]: https://github.com/dgomes +[@djm300]: https://github.com/djm300 +[@domwillcode]: https://github.com/domwillcode +[@endor-force]: https://github.com/endor-force +[@exxamalte]: https://github.com/exxamalte +[@fabaff]: https://github.com/fabaff +[@flo-wer]: https://github.com/flo-wer +[@fucm]: https://github.com/fucm +[@grea09]: https://github.com/grea09 +[@htotoo]: https://github.com/htotoo +[@ioangogo]: https://github.com/ioangogo +[@jesserizzo]: https://github.com/jesserizzo +[@kariudo]: https://github.com/kariudo +[@kbickar]: https://github.com/kbickar +[@lddubeau]: https://github.com/lddubeau +[@mtdcr]: https://github.com/mtdcr +[@mvn23]: https://github.com/mvn23 +[@nudded]: https://github.com/nudded +[@phil65]: https://github.com/phil65 +[@pnbruckner]: https://github.com/pnbruckner +[@pszafer]: https://github.com/pszafer +[@rcloran]: https://github.com/rcloran +[@rohankapoorcom]: https://github.com/rohankapoorcom +[@rytilahti]: https://github.com/rytilahti +[@schmittx]: https://github.com/schmittx +[@scop]: https://github.com/scop +[@smurfix]: https://github.com/smurfix +[@tadly]: https://github.com/tadly +[@tamasv]: https://github.com/tamasv +[@teharris1]: https://github.com/teharris1 +[@thomasdelaet]: https://github.com/thomasdelaet +[@thomaslian]: https://github.com/thomaslian +[@tschmidty69]: https://github.com/tschmidty69 +[@tsvi]: https://github.com/tsvi +[@vrih]: https://github.com/vrih +[alarm_control_panel.yale_smart_alarm docs]: /components/alarm_control_panel.yale_smart_alarm/ +[asterisk_mbox docs]: /components/asterisk_mbox/ +[automation docs]: /components/automation/ +[automation.event docs]: /docs/automation/trigger/#event-trigger +[automation.homeassistant docs]: /docs/automation/trigger/#home-assistant-trigger +[automation.numeric_state docs]: /docs/automation/trigger/#numeric-state-trigger +[automation.state docs]: /docs/automation/trigger/#state-trigger +[automation.template docs]: /docs/automation/trigger/#template-trigger +[automation.zone docs]: /docs/automation/trigger/#zone-trigger +[binary_sensor.deconz docs]: /components/binary_sensor.deconz/ +[binary_sensor.openuv docs]: /components/binary_sensor.openuv/ +[camera docs]: /components/camera/ +[camera.proxy docs]: /components/camera.proxy/ +[climate.generic_thermostat docs]: /components/climate.generic_thermostat/ +[climate.nest docs]: /components/climate.nest/ +[climate.opentherm_gw docs]: /components/climate.opentherm_gw/ +[climate.radiotherm docs]: /components/climate.radiotherm/ +[config docs]: /components/config/ +[cover.insteon docs]: /components/cover.insteon/ +[cover.mqtt docs]: /components/cover.mqtt/ +[cover.myq docs]: /components/cover.myq/ +[cover.rflink docs]: /components/cover.rflink/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[feedreader docs]: /components/feedreader/ +[geo_location docs]: /components/geo_location/ +[habitica docs]: /components/habitica/ +[hangouts docs]: /components/hangouts/ +[homematic docs]: /components/homematic/ +[hue docs]: /components/hue/ +[insteon docs]: /components/insteon/ +[light.deconz docs]: /components/light.deconz/ +[light.hue docs]: /components/light.hue/ +[light.mqtt docs]: /components/light.mqtt/ +[light.tplink docs]: /components/light.tplink/ +[media_extractor docs]: /components/media_extractor/ +[media_player.cast docs]: /components/media_player.cast/ +[media_player.kodi docs]: /components/media_player.kodi/ +[media_player.onkyo docs]: /components/media_player.onkyo/ +[media_player.songpal docs]: /components/media_player.songpal/ +[media_player.sonos docs]: /components/media_player.sonos/ +[media_player.yamaha docs]: /components/media_player.yamaha/ +[mqtt docs]: /components/mqtt/ +[notify docs]: /components/notify/ +[openuv docs]: /components/openuv/ +[rfxtrx docs]: /components/rfxtrx/ +[scene.deconz docs]: /components/scene.deconz/ +[script docs]: /components/script/ +[sensor.alpha_vantage docs]: /components/sensor.alpha_vantage/ +[sensor.apcupsd docs]: /components/sensor.apcupsd/ +[sensor.darksky docs]: /components/sensor.darksky/ +[sensor.deconz docs]: /components/sensor.deconz/ +[sensor.dht docs]: /components/sensor.dht/ +[sensor.dnsip docs]: /components/sensor.dnsip/ +[sensor.enphase_envoy docs]: /components/sensor.enphase_envoy/ +[sensor.geizhals docs]: /components/sensor.geizhals/ +[sensor.habitica docs]: /components/sensor.habitica/ +[sensor.lastfm docs]: /components/sensor.lastfm/ +[sensor.miflora docs]: /components/sensor.miflora/ +[sensor.mvglive docs]: /components/sensor.mvglive/ +[sensor.netatmo docs]: /components/sensor.netatmo/ +[sensor.netgear_lte docs]: /components/sensor.netgear_lte/ +[sensor.openuv docs]: /components/sensor.openuv/ +[sensor.qnap docs]: /components/sensor.qnap/ +[sensor.sense docs]: /components/sensor.sense/ +[sensor.shodan docs]: /components/sensor.shodan/ +[sensor.snmp docs]: /components/sensor.snmp/ +[sensor.sql docs]: /components/sensor.sql/ +[sensor.statistics docs]: /components/sensor.statistics/ +[sensor.systemmonitor docs]: /components/sensor.systemmonitor/ +[sensor.tahoma docs]: /components/sensor.tahoma/ +[sensor.tibber docs]: /components/sensor.tibber/ +[sensor.trafikverket_weatherstation docs]: /components/sensor.trafikverket_weatherstation/ +[sensor.twitch docs]: /components/sensor.twitch/ +[sensor.velbus docs]: /components/sensor.velbus/ +[sensor.volkszaehler docs]: /components/sensor.volkszaehler/ +[sensor.waze_travel_time docs]: /components/sensor.waze_travel_time/ +[snips docs]: /components/snips/ +[switch.deconz docs]: /components/switch.deconz/ +[switch.dlink docs]: /components/switch.dlink/ +[switch.snmp docs]: /components/switch.snmp/ +[switch.switchbot docs]: /components/switch.switchbot/ +[switch.switchmate docs]: /components/switch.switchmate/ +[switch.tahoma docs]: /components/switch.tahoma/ +[switch.tplink docs]: /components/switch.tplink/ +[tahoma docs]: /components/tahoma/ +[telegram_bot docs]: /components/telegram_bot/ +[tts docs]: /components/tts/ +[upnp docs]: /components/upnp/ +[vacuum docs]: /components/vacuum/ +[vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ +[velbus docs]: /components/velbus/ +[zha docs]: /components/zha/ +[zoneminder docs]: /components/zoneminder/ From 136993ea07af32cd0f164d8161efb9428cb3678a Mon Sep 17 00:00:00 2001 From: Kevin Siml Date: Mon, 10 Sep 2018 14:00:38 +0200 Subject: [PATCH 072/176] add new Pushsafer Parameter (#6049) * Update notify.pushsafer.markdown * Update notify.pushsafer.markdown * Update notify.pushsafer.markdown * Update notify.pushsafer.markdown * Update notify.pushsafer.markdown * Change format * Update notify.pushsafer.markdown * Update notify.pushsafer.markdown --- source/_components/notify.pushsafer.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/notify.pushsafer.markdown b/source/_components/notify.pushsafer.markdown index 5b1ce8ed54c..6060016e1c5 100644 --- a/source/_components/notify.pushsafer.markdown +++ b/source/_components/notify.pushsafer.markdown @@ -12,7 +12,6 @@ ha_category: Notifications ha_release: 0.39 --- - The [Pushsafer service](https://www.pushsafer.com/) is a platform for the notify component. This allows you to send messages to the user using Pushsafer. In order to get a private or alias key you need to go to the [Pushsafer website](https://www.pushsafer.com) and register. @@ -90,6 +89,10 @@ Message to two devices and one device group with formatted text and local image. "url": "https://www.home-assistant.io/", "urltitle": "Open Home Assistant", "time2live": "10", + "priority": "2", + "retry": "60", + "expire": "600", + "answer": "1", "picture1": { "path":"C:\\Users\\Kevin\\AppData\\Roaming\\.homeassistant\\image-760-testimage.jpg" } From 7d05122aa55cc8adde42e84e04ad502d95d8e9dc Mon Sep 17 00:00:00 2001 From: Tom Harris Date: Mon, 10 Sep 2018 13:23:36 -0400 Subject: [PATCH 073/176] Support for Insteon Hub Version 1 (#6211) * Support for Insteon Hub Version 1 * Spelling and gramar fixes * :pencil2: Tweaks --- .gitignore | 1 + source/_components/insteon.markdown | 98 +++++++++++++++++------------ 2 files changed, 60 insertions(+), 39 deletions(-) diff --git a/.gitignore b/.gitignore index f02128325f5..933ece07209 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ source/.jekyll-metadata /.vs/slnx.sqlite-journal /.vs/VSWorkspaceState.json .vscode +*.suo diff --git a/source/_components/insteon.markdown b/source/_components/insteon.markdown index e2518a09784..7cb8e635ec7 100644 --- a/source/_components/insteon.markdown +++ b/source/_components/insteon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon" -description: "Instructions on how to setup an Insteon Modem (PLM or Hub) locally within Home Assistant." +description: "Instructions on how to set up an Insteon Modem (PLM or Hub) locally within Home Assistant." date: 2018-08-20 16:00 sidebar: true comments: false @@ -18,19 +18,20 @@ linked INSTEON devices to be used within Home Assistant as binary sensors, lights, fans, sensors and switches. Device support is provided by the underlying [insteonplm] package. It is known to work with the [2413U] USB and [2412S] RS242 flavors of PLM and the [2448A7] USB stick. It has also been -tested to work with the [2245] Hub. +tested to work with the [2242] and [2245] Hubs. [insteonplm]: https://github.com/nugget/python-insteonplm [2413U]: https://www.insteon.com/powerlinc-modem-usb [2412S]: https://www.insteon.com/powerlinc-modem-serial [2448A7]: https://www.smarthome.com/insteon-2448a7-portable-usb-adapter.html [2245]: https://www.insteon.com/insteon-hub/ +[2242]: https://www.insteon.com/support-knowledgebase/2014/9/26/insteon-hub-owners-manual ### {% linkable_title INSTEON Modem configuration %} -To setup a Powerline Modem (PLM) device such as the [2413U], use the following -configuration: +To set up an INSTEON Powerline Modem (PLM) device such as the [2413U], use the +following configuration: ```yaml # PLM configuration variables @@ -38,15 +39,26 @@ insteon: port: SERIAL_PORT ``` -To setup an INSTEON Hub such as the [2245], use the following configuration: - +To set up an INSTEON Hub model [2245], use the following configuration: + ```yaml -# Hub configuration variables +# Hub 2245 configuration variables insteon: host: HOST ip_port: IP_PORT username: USERNAME password: PASSWORD + hub_version: 2 +``` + +To set up an INSTEON Hub model [2242], use the following configuration: + +```yaml +# Hub 2242 configuration variables +insteon: + host: HOST + ip_port: IP_PORT + hub_version: 1 ``` Addtional configuration items are available: @@ -71,14 +83,23 @@ insteon: ``` Configuration variables: - **port** (*Required for PLM setup*): The serial or USB port for your device, - e.g., `/dev/ttyUSB0` -- **host** (*Required for Hub setup*): The host name or IP address of the Hub -- **ip_port** (*Optional for Hub setup*): The IP port number of the Hub. - (default value is 25105) -- **username** (*Required for Hub setup*): The username to login to the local - Hub -- **password** (*Required for Hub setup*): The password to login to the local - Hub + e.g., `/dev/ttyUSB0` or `COM3` +- **host** (*Required for Hub setup*): The host name or IP address of the Hub. +- **ip_port** (*Optional for Hub setup*): The IP port number of the Hub. For + Hub model [2245] (i.e. Hub version 2) the default port is 25105. For the Hub + model [2242] (i.e. Hub version 1) the default port is 9761. Use the Insteon + app to find the port number for your specific Hub. +- **username** (*Required for Hub version 2 setup*): The username to login in + to the local Hub. This is required for Hub [2245] (i.e. Hub version 2) setup. + You can find your Hub username on the bottom of the Hub or you can use the + Insteon app. +- **password** (*Required for Hub version 2 setup*): The password to login in + to the local Hub. This is required for Hub [2245] (i.e. Hub version 2) setup. + You can find your Hub password on the bottom of the Hub or you can use the + Insteon app. +- **hub_version** (*Required for Hub version 1 setup*): The Hub version number + where model [2242] is Hub version 1 and model [2245] is Hub version 2. + (Default is 2) - **device_override** (*Optional*): Override the default device definition - *ADDRESS* is found on the device itself in the form 1A.2B.3C or 1a2b3c - *CATEGORY* is found in the back of the device's User Guide in the form of @@ -92,16 +113,16 @@ Configuration variables: - *UNITCODE* is the X10 unit code values 1 - 16 - *PLATFORM* is the Home Assistant Platform to associate the device with. The following platforms are supported - - binary_sensor: Used for on/off devices or keypad buttons that are read only. + - binary_sensor: Used for on/off devices or keypad buttons that are read-only. - light: Used for dimmable X10 devices - switch: Used for On/Off X10 devices - *STEPS* is the number of dim/bright steps the device supports. Used for dimmable X10 devices only. Default value is 22. -- **x10_all_units_off** (*Optional*): Creates an binary_sensor that responds +- **x10_all_units_off** (*Optional*): Creates a binary_sensor that responds to the X10 standard command for All Units Off. -- **x10_all_lights_on** (*Optional*): Creates an binary_sensor that responds +- **x10_all_lights_on** (*Optional*): Creates a binary_sensor that responds to the X10 standard command for All Lights On -- **x10_all_lights_off** (*Optional*): Creates an binary_sensor that responds +- **x10_all_lights_off** (*Optional*): Creates a binary_sensor that responds to the X10 standard command for All Lights Off ### {% linkable_title Autodiscovery %} @@ -111,27 +132,27 @@ per device. Subsequent startups will occur much quicker using cached device information. If a device is not recognized during autodiscovery, you can add the device to the **device_override** configuration. -In order for a device to be discovered it must be linked to the INSTEON Modem +In order for a device to be discovered, it must be linked to the INSTEON Modem as either a responder or a controller. ### {% linkable_title Linking Devices to the INSTEON Modem %} In order for any two Insteon devices to talk with one another, they must be -linked. For an overview of device linking please read the Insteon page on +linked. For an overview of device linking, please read the Insteon page on [understanding linking]. The Insteon Modem module supports All-Linking through [Development Tools] service calls. The following services are available: - **insteon.add_all_link**: Puts the Insteon Modem (IM) into All-Linking -mode. The IM can be set as as controller or a responder. If the IM is a -controler, put the IM into linking mode then press the SET button on the -device. If the IM is a responer, press the SET button on the device then +mode. The IM can be set as a controller or a responder. If the IM is a +controller, put the IM into linking mode then press the SET button on the +device. If the IM is a responder, press the SET button on the device then put the IM into linking mode. - **insteon.delete_all_link**: Tells the Insteon Modem (IM) to remove an All-Link record from the All-Link Database of the IM and a device. Once the IM is set to delete the link, press the SET button on the corresponding device to complete the process. - **insteon.load_all_link_database**: Load the All-Link Database for a -device. WARNING - Loading a device All-Link database may take a LONG time and +device. WARNING - Loading a device All-Link database may take a LONG time and may need to be repeated to obtain all records. - **insteon.print_all_link_database**: Print the All-Link Database for a device. Requires that the All-Link Database is loaded first. @@ -174,7 +195,7 @@ devices. INSTEON devices are added to Home Assistant using the platform(s) that make the most sense given the model and features of the hardware. The features of the -INSTEON device are built into the Home Assistant platform. Changing the +INSTEON devices are built into the Home Assistant platform. Changing the platform is not recommended. There are two primary uses for the **device_override** feature. - Devices that do not respond during autodiscovery. This is common for battery @@ -185,7 +206,7 @@ platform is not recommended. There are two primary uses for the ### {% linkable_title Example Configuration with Options%} ```yaml -# Full example of insteon configuration with customizations and overrides +# Full example of Insteon configuration with customizations and overrides homeassistant: customize: @@ -205,7 +226,7 @@ insteon: ### {% linkable_title What NOT to do %} -Insteon Modem is a top level component and device discovery will identify +Insteon Modem is a top-level component and device discovery will identify the Home Assistant platform the device belongs in. As such, do not declare Insteon devices in other platforms. For example, this configuration will NOT work: @@ -224,19 +245,18 @@ events. The following events are available: - **insteon.button_on** - **address**: (required) The Insteon device address in lower case without dots (e.g. 1a2b3c) - - **button**: (Optional) The button id in lower case. For an 4 button remote - the values are a to d. For an 8 button remote the values are a to g. For - a one button remote this field is not used. + - **button**: (Optional) The button id in lower case. For a 4-button remote + the values are `a` to `d`. For an 8 button remote the values are `a` to `g`. For + a one-button remote this field is not used. - **insteon.button_of** - **address**: (required) The Insteon device address in lower case without dots (e.g. 1a2b3c) - - **button**: (Optional) The button id in lower case. For an 4 button remote - the values are a to d. For an 8 button remote the values are a to g. For - a one button remote this field is not used. + - **button**: (Optional) The button id in lower case. For a 4-button remote + the values are a to d. For an 8 button remote the values are `a` to `g`. For + a one-button remote this field is not used. -This allows the mini-remotes to be configured as - -Here is an example of how to use these events for automations: +This allows the mini-remotes to be configured as triggers for automations. Here +is an example of how to use these events for automations: ``` automation: @@ -276,8 +296,8 @@ The INSTEON Hub has three known issues that are inherent to the design of the Hub: 1. If you see multiple error messages in the log file stating the Hub -connection is closed and reconnection has failed, this generally requires -the Hub to be restarted in order to reconnect. +connection is closed, and reconnection has failed, this generally requires +the Hub to be restarted to reconnect. 2. You cannot use both Home Assistant and the INSTEON app. If you do, the changes made in the app will not appear in Home Assistant. Changes made in From 513ef6f63a367bdfea0e5b4b60699d523be885d1 Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Mon, 10 Sep 2018 22:52:45 -0700 Subject: [PATCH 074/176] Fix a typo in date which hide configuration page (#6253) --- source/_docs/configuration.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index c863c66382e..2e57862c030 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -2,7 +2,7 @@ layout: page title: "Configuring Home Assistant" description: "Configuring Home Assistant." -date: 2018-09-18 16:15 +date: 2018-09-08 16:15 sidebar: true comments: false sharing: true From 1e77e3aea8f63892eeb6587cf41981a294959aa8 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Tue, 11 Sep 2018 10:30:09 +0100 Subject: [PATCH 075/176] Adds token parameter to Camera.Push (#6130) * Adds token parameter to Camera.Push * update require --- source/_components/camera.push.markdown | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/_components/camera.push.markdown b/source/_components/camera.push.markdown index c70dee014c0..be639978032 100644 --- a/source/_components/camera.push.markdown +++ b/source/_components/camera.push.markdown @@ -25,11 +25,9 @@ The `push` camera can as an example be used with [motionEye](https://github.com/ In motionEye, under **File Storage -> Run A Command** type in: ```bash -curl -X POST -F "image=@%f" http://my.hass.server.com:8123/api/camera_push/camera.push_camera +curl -X POST -F "image=@%f" http://my.hass.server.com:8123/api/camera_push/camera.push_camera?token=12345678 ``` -Please take note that you might need to add `-H "x-ha-access: YOUR_PASSWORD"` if you have API authentication enabled. - Optionally configure motionEye to save only motion triggered images by going into **Still Images -> Capture Mode** and setting **Motion Triggered**. Tune your preferences under **Motion Detection**. In this setup, you can configure the push camera to continuously replay the last motion triggered event using a configuration such as: @@ -40,6 +38,7 @@ camera: name: MotionEye Outdoor buffer: 3 timeout: 5 + token: 12345678 ``` ## {% linkable_title Configuration %} @@ -51,6 +50,7 @@ To enable this camera in your installation, add the following to your `configura camera: - platform: push name: My Push Camera + token: 12345678 ``` {% configuration %} @@ -69,6 +69,10 @@ timeout: required: false default: 5 seconds type: time +token: + description: User provided token acting as access control, should be a large string (more then 8 chars). Required if you can't use HA new auth system (0.77). + required: false + type: string field: description: HTTP POST field containing the image file required: false From 80b34251e007892b88d93a689f2273078fdcf421 Mon Sep 17 00:00:00 2001 From: bastshoes Date: Tue, 11 Sep 2018 20:39:05 +0300 Subject: [PATCH 076/176] Adding warning regarding legacy_api password Currently there is an issue #16441. Leagacy_api password not loaded if api_password located in package. --- source/_docs/authentication/providers.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/authentication/providers.markdown b/source/_docs/authentication/providers.markdown index 728ecb58b2d..6d3aa2360b0 100644 --- a/source/_docs/authentication/providers.markdown +++ b/source/_docs/authentication/providers.markdown @@ -30,6 +30,10 @@ To make the transition from API password to authentication system easier, we've Home Assistant automatically configures the standard auth providers and you **do not** need to specify `auth_providers` in your `configuration.yaml` file. Specifying `auth_providers` in your configuration will disable all auth providers that are not listed and can reduce your security or create difficulties logging in.

+

+Legacy API password auth provider wouldn't be loaded if your API password located in separete package. This is because Home Assistant process `auth_provider` during the `core` section loading, it is earlier then do the `packages` processing. +

+ Authentication providers are configured in your `configuration.yaml` under the `homeassistant:` block: ```yaml From fe9cef1124da903c728a4e9e206f1b129bb9fa5f Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Tue, 11 Sep 2018 13:47:43 -0400 Subject: [PATCH 077/176] Update konnected.markdown --- source/_components/konnected.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/konnected.markdown b/source/_components/konnected.markdown index 16612ca4731..7b4c5117312 100644 --- a/source/_components/konnected.markdown +++ b/source/_components/konnected.markdown @@ -32,13 +32,13 @@ A `konnected` section must be present in the `configuration.yaml` file that spec konnected: access_token: REPLACE_ME_WITH_A_RANDOM_STRING devices: - - id: 8bcd53 + - id: 438a388bcd53 binary_sensors: - zone: 1 type: door switches: - zone: out - - id: 438a38 + - id: 8bcd53438a38 binary_sensors: - pin: 2 type: door @@ -62,7 +62,7 @@ devices: type: list keys: id: - description: The MAC address of the WiFi module with colons/punctuation removed. You can either use the full 12-character MAC address or only the last 6 characters. This is visible in the device's WiFi SSID and hostname. + description: The MAC address of the WiFi module with colons/punctuation removed. You musst use the full 12-character MAC address with lower case letters. This is visible in the device's WiFi SSID and hostname. required: true type: string binary_sensors: From 24b06fc0463dd979fc09d45512f72c8bd83946da Mon Sep 17 00:00:00 2001 From: Will Marler Date: Tue, 11 Sep 2018 11:49:38 -0600 Subject: [PATCH 078/176] Fix a link in lets_encrypt howto re: password (#6256) The link points to the "basic information" config page but should point to the HTTP component config page. There is no password to be set in basic information. --- 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 d8c82f80d42..0b62214a923 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -14,7 +14,7 @@ If you are using Hass.io or Hassbian, do not use this guide. Instead, use the [D

-Before exposing your Home Assistant instance to the outside world it is ESSENTIAL that you have set a password following the advice on the [http](/docs/configuration/basic/) page. +Before exposing your Home Assistant instance to the outside world it is ESSENTIAL that you have set a password following the advice on the [http](/components/http/) page.

From ed265c8e761c8f20835b9fa8f6eefed82804a175 Mon Sep 17 00:00:00 2001 From: Tobias Nordahl Kristensen Date: Wed, 12 Sep 2018 12:47:27 +0200 Subject: [PATCH 079/176] Note about data logging. (#6251) * Note about data logging. Also mentioned here: https://community.home-assistant.io/t/motion-detection-with-android-ip-camera-solved/35846/7?u=exetico * Convert it to a note --- source/_components/android_ip_webcam.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/android_ip_webcam.markdown b/source/_components/android_ip_webcam.markdown index c616b33a35e..b11ac13595e 100644 --- a/source/_components/android_ip_webcam.markdown +++ b/source/_components/android_ip_webcam.markdown @@ -37,6 +37,10 @@ Configuration variables: - **switches** array (*Optional*): Conditions to display settings in the frontend. See the list of supported settings. - **motion_sensor** (*Optional*): Activate motion sensor if auto_discovery is disabled. +

+ You need to enable logging in the Android app (`Data logging` > `Enable data logging`), if you wish to see the sensor states in Home Assistant. The sensor states stays as `unknown`, until it's enabled. +

+ ### {% linkable_title Supported features %} Sensors: From f6aed097e8293018000eb340bea585d0e14c6fcc Mon Sep 17 00:00:00 2001 From: Jonathan Herlin Date: Wed, 12 Sep 2018 12:49:27 +0200 Subject: [PATCH 080/176] Spelling mistake? (#6260) "Setting" seems more correct to me than "Seeting" --- source/_components/tradfri.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/tradfri.markdown b/source/_components/tradfri.markdown index 5eb66113cba..8c16a9a17e2 100644 --- a/source/_components/tradfri.markdown +++ b/source/_components/tradfri.markdown @@ -55,7 +55,7 @@ After updating the firmware of your Trådfri gateway it might be necessary to re Please make sure you have `autoconf` installed (`$ sudo apt-get install autoconf`) if you want to use this component. Also, installing some dependencies might take considerable time (>1 h) on slow devices. -### {% linkable_title Seeting the `api_key` %} +### {% linkable_title Setting the `api_key` %} Do not use the `api_key` variable in `configuration.yaml`. The API key is only needed once at initial setup and will be stored. From 810473b6921e48e46d0026f264dbe6011893adfa Mon Sep 17 00:00:00 2001 From: Nate Clark Date: Wed, 12 Sep 2018 07:55:16 -0400 Subject: [PATCH 081/176] document option added to konnected binary sensors (#6220) * document option added to konnected binary sensors * Update konnected.markdown --- source/_components/konnected.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/konnected.markdown b/source/_components/konnected.markdown index df50d5abc37..35ed373fd36 100644 --- a/source/_components/konnected.markdown +++ b/source/_components/konnected.markdown @@ -83,6 +83,11 @@ devices: description: The name of the device used in the front end. required: false default: automatically generated + inverse: + type: boolean + description: Inverts the open/closed meaning of a binary sensor circuit. Commonly needed for normally open wired smoke alarm circuits. + required: false + default: false switches: description: A list of actuators (on/off switches) connected to the device. See [Konnected Switch](/components/switch.konnected/) for configuration variables. required: false @@ -133,6 +138,7 @@ konnected: - zone: 2 type: smoke name: 'Bedroom Smoke Detector' + inverse: true - zone: 3 type: motion name: 'Test Motion' @@ -182,6 +188,9 @@ Konnected runs on an ESP8266 board with the NodeMCU firmware. It is commonly use ### {% linkable_title Revision History %} +#### 0.79 +* Added `inverse` configuration option for binary sensors. + #### 0.77 * Added support for momentary and beep/blink switches. [[#15973](https://github.com/home-assistant/home-assistant/pull/15973)] * Decouple entity initialization from discovery, enabling devices to recover faster after a Home Assistant reboot. [[#16146](https://github.com/home-assistant/home-assistant/pull/16146)] From 5e06db6c45b1430ecaf4cebcc3bb8bf2496f9fc4 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Wed, 12 Sep 2018 14:59:33 +0200 Subject: [PATCH 082/176] Update docs for nfandroid notify platform (#6259) * Update docs for nfandroid notify platform * Remove IoT class --- .../_components/notify.nfandroidtv.markdown | 52 +++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/source/_components/notify.nfandroidtv.markdown b/source/_components/notify.nfandroidtv.markdown index e1bf8659ba8..6ec1639edb2 100644 --- a/source/_components/notify.nfandroidtv.markdown +++ b/source/_components/notify.nfandroidtv.markdown @@ -10,15 +10,14 @@ footer: true logo: nfandroidtv.png ha_category: Notifications ha_release: 0.32 -ha_iot_class: "Local Polling" --- -Notification platform for [Notifications for Android TV](https://play.google.com/store/apps/details?id=de.cyberdream.androidtv.notifications.google) and [Notifications for FireTV](https://play.google.com/store/apps/details?id=de.cyberdream.firenotifications.google). +Notification platform for [Notifications for Android TV](https://play.google.com/store/apps/details?id=de.cyberdream.androidtv.notifications.google) and [Notifications for FireTV](https://play.google.com/store/apps/details?id=de.cyberdream.firenotifications.google). You can use this plarform to send notifications to your Android TV device. An overlay with the message content will appear for a configurable amount of seconds and then disapper again. Sending images (e.g. security cam) is supported too. The notifications are in the global scope of your Android TV device. They will be displayed regardless of which application is running. -When setting this up be aware, that there are two apps: one for your smartphone to send notifications (not required for this platform) and one for your Android TV device to receive the notifications. The app available in the store of your target device is the one that is needed to display notifications sent from Home Assistant. The In-App purchases only apply to the client for Android smartphones, so there isn't any limit when pushing notifications from Home Assistant. +When setting this up be aware, that there are two apps: one for your smartphone to send notifications (not required for this platform) and one for your Android TV device to receive the notifications. The app available in the store of your Android TV device is the one that is needed to display notifications sent from Home Assistant. The In-App purchases only apply to the client for Android smartphones, so there isn't any limit when pushing notifications from Home Assistant. To enable the notification platform, add the following to your `configuration.yaml` file: @@ -35,6 +34,7 @@ Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **host** (*Required*): IP address of the Android TV / FireTV device. - **duration** (*Optional*): The duration in seconds for which the notification will be displayed. Default is 5 seconds. +- **fontsize** (*Optional*): Has to be one of: small, medium (default), large, max - **position** (*Optional*): Has to be one of: bottom-right (default), bottom-left, top-right, top-left, center - **color** (*Optional*): Has to be one of: grey (default), black, indigo, green, red, cyan, teal, amber, pink - **transparency** (*Optional*): Has to be one of: 0%, 25% (default), 50%, 75%, 100% @@ -48,6 +48,7 @@ This is a fully customized JSON you can use to test how the final notification w "message": "Messagetext", "title": "My Notification", "data":{ + "fontsize": "large", "position":"center", "duration":2, "transparency":"0%", @@ -56,3 +57,48 @@ This is a fully customized JSON you can use to test how the final notification w } } ``` + +### {% linkable_title Service data for sending images %} + +The following attributes can be placed inside `data` to send images. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `file` | yes | Groups the attributes for file upload. If present, either `url` or `path` have to be provided. +| `path ` | yes | Local path of an image file. Is placed inside `file`. +| `url` | yes | URL of an image file. Is placed inside `file`. +| `username` | yes | Username if the url requires authentication. Is placed inside `file`. +| `password` | yes | Password if the url requires authentication. Is placed inside `file`. +| `auth` | yes | If set to `digest` HTTP-Digest-Authentication is used. If missing, HTTP-BASIC-Authentication is used. Is placed inside `file`. + +Example for posting file from URL: + +```json +{ + "message":"Messagetext", + "title":"My Notification", + "data":{ + "file":{ + "url":"http://[url to image file]", + "username":"optional user, if necessary", + "password":"optional password, if necessary", + "auth":"digest" + } + } +} +``` + +Example for posting file from local path: + +```json +{ + "message":"Messagetext", + "title":"My Notification", + "data":{ + "file":{ + "path":"/path/to/file.ext" + } + } +} +``` +Please note that `path` is validated against the `whitelist_external_dirs` in the `configuration.yaml`. From a16cedbe4f6fd7eb1064bf0764e5f9e7feaab1ce Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 12 Sep 2018 16:05:51 +0200 Subject: [PATCH 083/176] Update mqtt.markdown --- source/_components/mqtt.markdown | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index 275cac866ed..c9d73254459 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -11,19 +11,14 @@ logo: mqtt.png ha_category: Hub featured: true ha_release: pre 0.7 -ha_iot_class: depends +ha_iot_class: local push --- MQTT (aka MQ Telemetry Transport) is a machine-to-machine or "Internet of Things" connectivity protocol on top of TCP/IP. It allows extremely lightweight publish/subscribe messaging transport. Your first step to get MQTT and Home Assistant working is to choose a [broker](/docs/mqtt/broker). -To integrate MQTT into Home Assistant, add the following section to your `configuration.yaml` file. Keep in mind that the minimal setup will run with [an embedded MQTT broker](/docs/mqtt/broker#embedded-broker): - -```yaml -# Example configuration.yaml entry -mqtt: -``` +To integrate MQTT into Home Assistant, add the following section to your `configuration.yaml` file. To connect to your [own MQTT broker](/docs/mqtt/broker#run-your-own): @@ -33,9 +28,15 @@ mqtt: broker: IP_ADDRESS_BROKER ``` -

-The minimal setup uses the embedded MQTT broker, however a separate broker is advised for more stability. -

+You can also use the [embedded MQTT broker](/docs/mqtt/broker#embedded-broker). A separate broker is advised for more stability. + +```yaml +# Example configuration.yaml entry +mqtt: + password: hello +``` + +This allows you to connect to the MQTT broker with user `homeassistant` and password `hello`. ## {% linkable_title Additional features %} From 15c0bf02a6b6d00956075fbbedf64cea5d9405c0 Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Thu, 13 Sep 2018 03:36:47 -0400 Subject: [PATCH 084/176] Nimbus doc (#6246) * Nimbus doc * Call out that the Nimbus can't officially be added to Wink anymore --- source/_components/wink.markdown | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/source/_components/wink.markdown b/source/_components/wink.markdown index cf62b8d380e..0d97c91d465 100644 --- a/source/_components/wink.markdown +++ b/source/_components/wink.markdown @@ -141,6 +141,7 @@ The Wink hub, by default, can only be accessed via the cloud. This means it requ - GoControl siren and strobe - Dome siren/chime/strobe +- Quirky Nimbus (Legacy device) These can no longer be officialy added to your Wink account ### {% linkable_title Service `set_siren_auto_shutoff` %} @@ -286,3 +287,55 @@ script: data: enabled: False ``` + +### {% linkable_title Service `set_nimbus_dial_state` %} + +You can use the service wink/set_nimbus_dial_state to update an individual dial's value/position and it's labels + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of strings that point at `entity_id`s of chime/chime. +| `value` | no | A number, should be between the dials min and max value (See set_nimbus_dial_configuration below) +| `labels` | yes | A list of strings the first being the value set on the dial's face and the second being the value on the dial face when the Nimbus is pressed + +Example: + +```yaml +script: + set_dial_1_value: + sequence: + - service: wink.set_nimbus_dial_state + data: + entity_id: wink.nimbus_dial_1 + value: 150 + labels: + - "Dial 1" + - "150" +``` + +### {% linkable_title Service `set_nimbus_dial_configuration` %} + +You can use the service wink/set_nimbus_dial_configuration to update an individual dial's configuration. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | String or list of strings that point at `entity_id`s of chime/chime. +| `rotation` | yes | One of "cw" or "ccw" the direction the dial hand should rotate. +| `ticks` | yes | A positive number, the number of times the hand should move. +| `scale` | yes | One of "linear" or "log" How the dial should move in response to higher values. +| `min_value` | yes | A number, the minimum value that the dial can have. +| `max_value` | yes | A number, the maximum value that the dial can have. +| `min_position` | yes | A number generally [0-360], the minimum position for the dial's hand. +| `max_value` | yes | A number generally [0-360], the maximum position for the dial's hand. + +Example: + +```yaml +script: + set_dial_1_value: + sequence: + - service: wink.set_nimbus_dial_state + data: + entity_id: wink.nimbus_dial_1 + rotation: 'ccw' +``` From c47cb41b46f2763708ad0a7484ee4cb9f08fd282 Mon Sep 17 00:00:00 2001 From: Niklas Janz Date: Thu, 13 Sep 2018 15:08:51 +0200 Subject: [PATCH 085/176] Added the usage of PostgreSQL unix sockets (#6272) * Added db_url for PostreSQL via unix socket * Added informations about sockets + instructions for pg_hba.conf --- source/_components/recorder.markdown | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index eb859687fdd..7ffae0d13d8 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -154,12 +154,19 @@ If the `recorder` component is activated then some components support `restore_s | MySQL (pymysql) | `mysql+pymysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | | PostgreSQL | `postgresql://SERVER_IP/DB_NAME` | | PostgreSQL | `postgresql://scott:tiger@SERVER_IP/DB_NAME` | +| PostgreSQL (Socket) | `postgresql://@/DB_NAME` | | MS SQL Server | `mssql+pymssql://user:pass@SERVER_IP/DB_NAME?charset=utf8` |

If you use MariaDB 10 you need to add port 3307 to the SERVER_IP, e.g., `mysql://user:password@SERVER_IP:3307/DB_NAME?charset=utf8`.

+

+Unix Socket connections always bring performance advantages over TCP, if the database on the same host as the `recorder` instance (i.e. `localhost`).

+ +

+If you want to use Unix Sockets for PostgreSQL you need to modify the `pg_hba.conf`. See [PostgreSQL](#postgresql)

+ ### {% linkable_title Database startup %} If you are running a database server instance on the same server as Home Assistant then you must ensure that this service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the service file. @@ -225,6 +232,22 @@ $ sudo apt-get install postgresql-server-dev-X.Y $ pip3 install psycopg2 ``` +For using Unix Sockets, add the following line to your [`pg_hba.conf`](https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html): + +`local DB_NAME USER_NAME peer` + +Where `DB_NAME` is the name of your database and `USER_NAME` is the name of the user running the Home Assistant instance (see [securing your installation](/docs/configuration/securing/)). + +Reload the PostgreSQL configuration after that: +```bash +$ sudo -i -u postgres psql -c "SELECT pg_reload_conf();" + pg_reload_conf +---------------- + t +(1 row) +``` +A service restart will work as well. + ### {% linkable_title MS SQL Server %} For MS SQL Server you may have to install a few dependencies: From 2aba5d54d0934582becccf60f9b3d1a19667821c Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 13 Sep 2018 15:10:40 +0200 Subject: [PATCH 086/176] Update editor.markdown (#6271) --- source/_docs/scripts/editor.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/scripts/editor.markdown b/source/_docs/scripts/editor.markdown index a69ae296923..9ccc8252d42 100644 --- a/source/_docs/scripts/editor.markdown +++ b/source/_docs/scripts/editor.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /docs/script/editor/ --- -In Home Assistant 0.52 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant then you're all set! Go to the UI and enjoy. +In Home Assistant 0.52 we introduced the first version of our script editor. If you just created a new configuration with Home Assistant then you're all set! Go to the UI and enjoy.
From db797550e065d40abeb774e35a14b63ec2c806e2 Mon Sep 17 00:00:00 2001 From: rpitera Date: Thu, 13 Sep 2018 09:11:32 -0400 Subject: [PATCH 087/176] Clarify conditional card docs (#6266) Clarify that conditions are processed as an 'and' condition, not an 'and/or' when using multiple entity conditions. --- source/_lovelace/conditional.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_lovelace/conditional.markdown b/source/_lovelace/conditional.markdown index 4bf17345887..d2f7f881315 100644 --- a/source/_lovelace/conditional.markdown +++ b/source/_lovelace/conditional.markdown @@ -42,6 +42,8 @@ card: *one is required (`state` or `state_not`) +Note: Conditions with more than one entity are treated as an 'and' condition. This means that for the card to show, *all* entities must meet the state requirements set. + ### {% linkable_title Examples %} ```yaml From fb2fdbb539af313584ab188d57b1efb242a9a9c2 Mon Sep 17 00:00:00 2001 From: Vikram Gorla Date: Fri, 14 Sep 2018 12:00:07 +0200 Subject: [PATCH 088/176] Update link to Supported Languages (#6277) Looking at the implementation, it uses Google Translate as backend and not Google Cloud Speech engine, updating the link where supported languages can be seen. --- source/_components/tts.google.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/tts.google.markdown b/source/_components/tts.google.markdown index 3056b50d94e..75160c41c21 100644 --- a/source/_components/tts.google.markdown +++ b/source/_components/tts.google.markdown @@ -25,7 +25,7 @@ tts: Configuration variables: - **language** (*Optional*): The language to use. Defaults to `en`. - - [Complete list of supported languages](https://cloud.google.com/speech-to-text/docs/languages). + - [Complete list of supported languages (Languages where "Talk" feature is enabled in Google Translate)](https://translate.google.com/intl/en_ALL/about/languages/), use 2 digit language code which you can find at the end of url when you click on Language name. A full configuration sample: From 600c6f7aae7e65ebe93343745db74c497d1f008d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Fri, 14 Sep 2018 12:00:26 +0200 Subject: [PATCH 089/176] Update switch.switchmate.markdown (#6275) --- source/_components/switch.switchmate.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/switch.switchmate.markdown b/source/_components/switch.switchmate.markdown index b6e53624eed..2d332c4c838 100644 --- a/source/_components/switch.switchmate.markdown +++ b/source/_components/switch.switchmate.markdown @@ -34,3 +34,5 @@ name: type: string {% endconfiguration %} + +The component is tested with SwitchMate Lighting Control Rocker and SwitchMate Lighting Control Toggle. From 219562064bf511412676ed09af4950a5e31fe0be Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 14 Sep 2018 13:49:07 +0200 Subject: [PATCH 090/176] Update device_tracker.bluetooth_le_tracker.markdown (#6273) --- .../device_tracker.bluetooth_le_tracker.markdown | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/source/_components/device_tracker.bluetooth_le_tracker.markdown b/source/_components/device_tracker.bluetooth_le_tracker.markdown index ce1dab50002..83c21c615b7 100644 --- a/source/_components/device_tracker.bluetooth_le_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_le_tracker.markdown @@ -13,10 +13,6 @@ ha_iot_class: "Local Poll" ha_release: 0.27 --- -

-We have received numerous reports that this integration will have a big impact on the performance of the server. -

- This tracker discovers new devices on boot and in regular intervals and tracks Bluetooth low-energy devices periodically based on interval_seconds value. It is not required to pair the devices with each other. Devices discovered are stored with 'BLE_' as the prefix for device mac addresses in `known_devices.yaml`. @@ -24,7 +20,7 @@ Devices discovered are stored with 'BLE_' as the prefix for device mac addresses This platform requires pybluez to be installed. On Debian based installs, run ```bash -$ sudo apt install bluetooth libbluetooth-dev pkg-config libboost-python-dev libboost-thread-dev libglib2.0-dev python-dev +$ sudo apt install bluetooth ``` Before you get started with this platform, please note that: @@ -42,9 +38,7 @@ device_tracker: Configuration variables: -- **device_id** (*Optional*): The device ID for the Bluetooth device to be used for tracking. Defaults to `hci0`. - **track_new_devices** (*Optional*): If new discovered devices are tracked by default. Defaults to `True`. -- **scan_duration** (*Optional*): How long should the scanner be looking for BLE devices. Defaults to `10` seconds. - **interval_seconds** (*Optional*): Seconds between each scan for new devices. Defaults to `12` seconds. As some BT LE devices change their MAC address regularly, a new device is only discovered when it has been seen 5 times. @@ -59,12 +53,6 @@ $ sudo apt-get install libcap2-bin $ sudo setcap 'cap_net_raw,cap_net_admin+eip' `readlink -f \`which python3\`` ``` -If you have installed Home Assistant with [AIO](/getting-started/installation-raspberry-pi-all-in-one/), you need to do the following command, this will grant access to Home Assistant to run the required command. - -```bash -$ sudo setcap cap_net_raw,cap_net_admin+eip /srv/homeassistant/homeassistant_venv/bin/python3 -``` - A restart of Home Assistant is required. For additional configuration variables check the [Device tracker page](/components/device_tracker/). From 8b7a5d58f83dfc0aec55949ec7043ae4a8408db1 Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Fri, 14 Sep 2018 16:09:54 +0200 Subject: [PATCH 091/176] Changes for 0.78 --- source/_docs/z-wave/control-panel.markdown | 65 +++++++++++----------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index dc3f19c5cc5..6263208d9de 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -41,6 +41,36 @@ Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices fro * **Test Node** sends no_op test messages to the node. This could in theory bring back a dead node. +* **Node Information** this will display the Z-Wave entity card with information about the node: + +* **averageRequestRTT** The average Round Trip Time (RTT) of requests sent to the node, in milliseconds. A value of 250, for example, is a quarter of a second. +* **averageResponseRTT** The average Round Trip Time of responses to requests +* **battery_level** *Battery powered devices only* - the battery level, which may be rounded to the nearest 10 +* **capabilities** A comma separated list of the capabilities of the device +* **friendly_name** The name you specified to be displayed +* **is_awake** Whether the device is awake or not +* **is_failed** Whether the device has been marked as failed. The controller won't try to contact failed devices. +* **is_info_received** True once the controller has received the node information from the node. +* **is_ready** When you start the network (or Home Assistant) it will take a short while before all devices are ready, this shows which aren't yet ready. +* **is_zwave_plus** True for any Z-Wave Plus devices (note that controllers always report *false*, regardless of whether they are Plus devices or not) +* **lastRequestRTT** The Round Trip Time of the last request +* **lastResponseRTT** The Round Trip Time of the response to the last request +* **manufacturer_name** The name of the manufacturer, as supplied by OpenZWave +* **max_baud_rate** The maximum bandwidth the device supports, most modern devices will support 40,000 or higher +* **node_id** The unique node ID of this node +* **node_name** The base name of this node, this is used to build the entity ID of all entities of this node +* **product_name** The product name of the device, as supplied by OpenZWave +* **query_stage** The query stage for this device (see [here](/docs/z-wave/query-stage/) for details) +* **receivedCnt** The number of messages received from the device +* **receivedDups** The number of duplicate messages received from the device +* **receivedTS** The date and time the last message was received from the devices +* **receivedUnsolicited** How many unsolicited messages were received +* **retries** How many retries have been made to send messages to this node +* **sentCnt** How many messages have been sent to the node +* **sentFailed** How many messages that were sent weren't acknowledged +* **sentTS** The date and time the last message was sent to the ndoe +* **wake_up_interval** *Battery powered devices only* - the wakeup interval of the device, in seconds +

Battery powered devices need to be awake before you can use the Z-Wave control panel to update their settings. How to wake your device is device specific, and some devices will stay awake for only a couple of seconds. Please refer to the manual of your device for more details.

@@ -58,38 +88,6 @@ The **Polling intensity** says how many poll intervals does is this device polle You can also exclude a Z-Wave devices from Home Assistant. You can do that if you have a device that you need to have on the Z-Wave network, but you don't want it to appear in Home Assistant, or if you've got a device that's failed and you're unable to exclude it. -### {% linkable_title Node Information %} - -This will display the Z-Wave related information about the node: - -* **averageRequestRTT** The average Round Trip Time (RTT) of requests sent to the node, in milliseconds. A value of 250, for example, is a quarter of a second. -* **averageResponseRTT** The average Round Trip Time of responses to requests -* **battery_level** *Battery powered devices only* - the battery level, which may be rounded to the nearest 10 -* **capabilities** A comma separated list of the capabilities of the device -* **friendly_name** The name you specified to be displayed -* **is_awake** Whether the device is awake or not -* **is_failed** Whether the device has been marked as failed. The controller won't try to contact failed devices. -* **is_info_received** True once the controller has received the node information from the node. -* **is_ready** When you start the network (or Home Assistant) it will take a short while before all devices are ready, this shows which aren't yet ready. -* **is_zwave_plus** True for any Z-Wave Plus devices (note that controllers always report *false*, regardless of whether they are Plus devices or not) -* **lastRequestRTT** The Round Trip Time of the last request -* **lastResponseRTT** The Round Trip Time of the response to the last request -* **manufacturer_name** The name of the manufacturer, as supplied by OpenZWave -* **max_baud_rate** The maximum bandwidth the device supports, most modern devices will support 40,000 or higher -* **node_id** The unique node ID of this node -* **node_name** The base name of this node, this is used to build the entity ID of all entities of this node -* **product_name** The product name of the device, as supplied by OpenZWave -* **query_stage** The query stage for this device (see [here](/docs/z-wave/query-stage/) for details) -* **receivedCnt** The number of messages received from the device -* **receivedDups** The number of duplicate messages received from the device -* **receivedTS** The date and time the last message was received from the devices -* **receivedUnsolicited** How many unsolicited messages were received -* **retries** How many retries have been made to send messages to this node -* **sentCnt** How many messages have been sent to the node -* **sentFailed** How many messages that were sent weren't acknowledged -* **sentTS** The date and time the last message was sent to the ndoe -* **wake_up_interval** *Battery powered devices only* - the wakeup interval of the device, in seconds - ### {% linkable_title Node Values %} Contains a list of available values of the selected node, and it's instances. @@ -160,4 +158,5 @@ for c in sys.argv[1]: ## {% linkable_title OZW Log %} If you want to only retrieve some lines at the end of the log, you can specify that with the selection field. Max is the last 1000 lines and minimum is 0 which equals the whole log. If this is not specified, you will retrieve the whole log. -Select **Refresh** to display the log if you need it to check activities. +Select **Load** to open a new window with the static log. +Select **Tail** to open a new window with a tailing log with the last specified lines of the log. This is a self updating window. From aefac32409ca38ba0cf0b221d099496bb2802c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Sat, 15 Sep 2018 09:52:33 +0100 Subject: [PATCH 092/176] Add note on yeelight music mode (#6283) Music mode makes the light always available. This causes HA to try to turn it on/off which may delay other operations, since yeelight will take a while to respond. --- source/_components/light.yeelight.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index c446d5950f7..a5b9547d243 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -43,6 +43,7 @@ Configuration variables: #### {% linkable_title Music mode %} Per default the bulb limits the amount of requests per minute to 60, a limitation which can be bypassed by enabling the music mode. In music mode the bulb is commanded to connect back to a socket provided by the component and it tries to keep the connection open, which may not be wanted in all use-cases. +**Also note that bulbs in music mode will not update their state to "unavailable" if they are disconnected, which can cause delays in Home Assistant**. ### {% linkable_title Initial setup %}

From 905676ba691680a1d6555f8ad8f66c84ebc02081 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 15 Sep 2018 13:32:40 +0100 Subject: [PATCH 093/176] Spelling/grammar tweaks --- source/_docs/authentication/providers.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/authentication/providers.markdown b/source/_docs/authentication/providers.markdown index 6d3aa2360b0..de5e223b015 100644 --- a/source/_docs/authentication/providers.markdown +++ b/source/_docs/authentication/providers.markdown @@ -31,7 +31,7 @@ Home Assistant automatically configures the standard auth providers and you **do

-Legacy API password auth provider wouldn't be loaded if your API password located in separete package. This is because Home Assistant process `auth_provider` during the `core` section loading, it is earlier then do the `packages` processing. +The legacy API password auth provider won't be loaded if your API password is located in a package. This is because Home Assistant processes the `auth_provider` during the `core` section loading, which is earlier than the `packages` processing.

Authentication providers are configured in your `configuration.yaml` under the `homeassistant:` block: From 669fc8ef196502810de4e19615b7201fad41451a Mon Sep 17 00:00:00 2001 From: Mattias Welponer Date: Sat, 15 Sep 2018 21:33:13 +0200 Subject: [PATCH 094/176] Add new supported devices (#6290) --- source/_components/homematicip_cloud.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/homematicip_cloud.markdown b/source/_components/homematicip_cloud.markdown index 2a4c981e2e0..42ee4b27e2a 100644 --- a/source/_components/homematicip_cloud.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -65,9 +65,11 @@ authtoken: - homematicip_cloud.binary_sensor - Window and door contact (*HmIP-SWDO*) - - Smoke sensor and alarm (*HmIP-SWSD*) + - Rotary Handle Sensor (*HmIP-SRH*) + - Smoke sensor and alarm (*HmIP-SWSD*) - Motion detectors (*HmIP-SMI*) - Motion detectors and push button (*HmIP-SMI55*) + - Water detector (*HmIP-SWD*) - homematicip_cloud.climate - Radiator thermostat (*HmIP-eTRV,-2*) @@ -82,6 +84,7 @@ authtoken: - Wall-mounted thermostat (*HmIP-WTH*) - Temperature and humidity sensor (*HmIP-STH*) - Temperature and humidity Sensor with display (*HmIP-STHD*) + - Outdoor temperature and humidity sensor (*HmIP-STHO*) - Illuminance sensor (*HmIP-SMI, 55*) - homematicip_cloud.switch From d9c05fcb9e8f13ce2e8fd75d7cdd6c73238c98ae Mon Sep 17 00:00:00 2001 From: Ron Schaeffer Date: Sat, 15 Sep 2018 21:04:18 +0100 Subject: [PATCH 095/176] Update device_tracker.snmp.markdown (#6289) --- source/_components/device_tracker.snmp.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.snmp.markdown b/source/_components/device_tracker.snmp.markdown index faea7253981..1131fb1e1d2 100644 --- a/source/_components/device_tracker.snmp.markdown +++ b/source/_components/device_tracker.snmp.markdown @@ -13,7 +13,7 @@ ha_release: 0.7.5 --- -A lot WiFi access points and WiFi routers support the Simple Network Management Protocol (SNMP). This is a standardized method for monitoring/manageing network connected devices. SNMP uses a tree-like hierarchy where each node is an object. Many of these objects contain (live) lists of instances and metrics, like network interfaces, disks, and WiFi registrations. +A lot of WiFi access points and WiFi routers support the Simple Network Management Protocol (SNMP). This is a standardized method for monitoring/manageing network connected devices. SNMP uses a tree-like hierarchy where each node is an object. Many of these objects contain (live) lists of instances and metrics, like network interfaces, disks, and WiFi registrations.

This device tracker needs SNMP to be enabled on the router. It could be that you need to install the SNMP support manually. From 8d7caee37cd785ca2574119c859d6c1763abccac Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 15 Sep 2018 21:04:43 +0100 Subject: [PATCH 096/176] Making the titles linkable (#6286) Making the titles linkable --- source/hassio/commandline.markdown | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/hassio/commandline.markdown b/source/hassio/commandline.markdown index a37177f832f..858bfda8fdf 100644 --- a/source/hassio/commandline.markdown +++ b/source/hassio/commandline.markdown @@ -16,7 +16,7 @@ Hass.io upgrade process from the SSH command line On the SSH command line, you can use the `hassio` command to retrieve logs, check the details of connected hardware, and more. -Home Assistant: +## {% linkable_title Home Assistant %} ```bash $ hassio homeassistant info @@ -28,7 +28,7 @@ $ hassio homeassistant stop $ hassio homeassistant update ``` -Supervisor: +## {% linkable_title Supervisor %} ```bash $ hassio supervisor info @@ -37,7 +37,7 @@ $ hassio supervisor reload $ hassio supervisor update ``` -Host: +## {% linkable_title Host %} ```bash $ hassio host reboot @@ -45,13 +45,15 @@ $ hassio host shutdown $ hassio host update ``` -Hardware: +## {% linkable_title Hardware %} ```bash $ hassio hardware info $ hassio hardware audio ``` +## {% linkable_title Usage examples %} + To update Home Assistant to a specific version, use the command: ```bash hassio homeassistant update --options version=x.y.z From e46d4fbd6b92db152581a447170291fa6fbb33be Mon Sep 17 00:00:00 2001 From: aisbergde Date: Sat, 15 Sep 2018 22:05:19 +0200 Subject: [PATCH 097/176] Update discovery.markdown (#6285) --- source/_components/discovery.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index 1edebdc702b..5ab929d212e 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -99,7 +99,7 @@ Valid values for ignore are: * `tellstick`: Telldus Live * `wink`: Wink Hub * `yamaha`: Yamaha media player - * `yeelight`: Yeelight Sunflower bulb + * `yeelight`: Yeelight lamps and bulbs (not only Yeelight Sunflower bulb) * `xiaomi_gw`: Xiaomi Aqara gateway Valid values for enable are: From be1223e91e3ed45b3e8a35d231a4e559b60620f4 Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Sat, 15 Sep 2018 14:33:32 -0700 Subject: [PATCH 098/176] Add issue link --- source/_docs/authentication/providers.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/authentication/providers.markdown b/source/_docs/authentication/providers.markdown index de5e223b015..8da14db4aaa 100644 --- a/source/_docs/authentication/providers.markdown +++ b/source/_docs/authentication/providers.markdown @@ -31,7 +31,7 @@ Home Assistant automatically configures the standard auth providers and you **do

-The legacy API password auth provider won't be loaded if your API password is located in a package. This is because Home Assistant processes the `auth_provider` during the `core` section loading, which is earlier than the `packages` processing. +[Issue 16441](https://github.com/home-assistant/home-assistant/issues/16441): the legacy API password auth provider won't be automatically configured if your API password is located in a package. This is because Home Assistant processes the `auth_provider` during the `core` section loading, which is earlier than the `packages` processing.

Authentication providers are configured in your `configuration.yaml` under the `homeassistant:` block: From 024731bba9d712d6429daaf487aabc5209a5ae30 Mon Sep 17 00:00:00 2001 From: Marat Levit Date: Sun, 16 Sep 2018 17:30:04 +1000 Subject: [PATCH 099/176] Fixed MariaDB example (#6291) MariaDB example had 'db_url' in the incorrect location under 'queries'. --- source/_components/sensor.sql.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.sql.markdown b/source/_components/sensor.sql.markdown index 201861f2620..248b3caa8c0 100644 --- a/source/_components/sensor.sql.markdown +++ b/source/_components/sensor.sql.markdown @@ -132,9 +132,9 @@ SELECT * FROM states WHERE entity_id='binary_sensor.xyz789' GROUP BY state ORDER ```yaml sensor: - platform: sql + db_url: mysql://user:password@localhost/hass queries: - name: DB size - db_url: mysql://user:password@localhost/hass query: 'SELECT table_schema "database", Round(Sum(data_length + index_length) / 1024, 1) "value" FROM information_schema.tables WHERE table_schema="hass" GROUP BY table_schema;' column: 'value' unit_of_measurement: kB From dde89ddcf9517fa63666d3eec85f5769a8afbf4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Sun, 16 Sep 2018 09:17:47 +0100 Subject: [PATCH 100/176] Add docs for new EDP re:dy component (#6200) * add docs for EDP re:dy component * fix platform name * Fix indentation * PR fixes --- source/_components/edp_redy.markdown | 45 ++++++++++++++++++++ source/_components/sensor.edp_redy.markdown | 18 ++++++++ source/_components/switch.edp_redy.markdown | 18 ++++++++ source/images/supported_brands/edp_redy.png | Bin 0 -> 26259 bytes 4 files changed, 81 insertions(+) create mode 100644 source/_components/edp_redy.markdown create mode 100644 source/_components/sensor.edp_redy.markdown create mode 100644 source/_components/switch.edp_redy.markdown create mode 100644 source/images/supported_brands/edp_redy.png diff --git a/source/_components/edp_redy.markdown b/source/_components/edp_redy.markdown new file mode 100644 index 00000000000..ed1bbdef7fe --- /dev/null +++ b/source/_components/edp_redy.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "EDP re:dy" +description: "Instructions on how to integrate the EDP re:dy platform into Home Assistant." +date: 2018-09-04 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: edp_redy.png +ha_category: Hub +ha_release: "0.79" +ha_iot_class: "Cloud Polling" +--- + +[EDP re:dy](https://www.edp.pt/particulares/servicos/redy/) is a Home Automation platform from Portuguese energy provider EDP, that allows control of appliances and other devices, as well as monitoring power consumption. This component allows integrating EDP re:dy into Home Assistant. + +## {% linkable_title Configuration %} + +You will need your re:dy login information (username and password) to use this component. + +To set it up, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +edp_redy: + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +username: + description: The username for accessing your re:dy account. + required: true + type: string +password: + description: The password for accessing your re:dy account. + required: true + type: string +{% endconfiguration %} + +After configuring the component, it will automatically add to Home Assistant: + +* A switch per toggleable device (switch, plug, etc). +* A sensor per each device that reports power consumption (SmartMeter, plug, meter) diff --git a/source/_components/sensor.edp_redy.markdown b/source/_components/sensor.edp_redy.markdown new file mode 100644 index 00000000000..4071a509467 --- /dev/null +++ b/source/_components/sensor.edp_redy.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "EDP re:dy Sensor" +description: "Instructions on how to integrate the EDP re:dy sensors into Home Assistant." +date: 2018-09-04 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: edp_redy.png +ha_category: Sensor +ha_release: "0.79" +ha_iot_class: "Cloud Polling" +--- + +See the [EDP re:dy main component](/components/edp_redy/) for configuration instructions. + +This sensor platform will provide a sensor per each EDP re:dy device that reports power consumption (SmartMeter, plug, meter). \ No newline at end of file diff --git a/source/_components/switch.edp_redy.markdown b/source/_components/switch.edp_redy.markdown new file mode 100644 index 00000000000..9f8e7984164 --- /dev/null +++ b/source/_components/switch.edp_redy.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "EDP re:dy Switch" +description: "Instructions on how to integrate the EDP re:dy switches into Home Assistant." +date: 2018-09-04 16:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: edp_redy.png +ha_category: Switch +ha_release: "0.79" +ha_iot_class: "Cloud Polling" +--- + +See the [EDP re:dy main component](/components/edp_redy/) for configuration instructions. + +This switch platform will provide a switch per toggleable EDP re:dy device (switch, plug, etc). diff --git a/source/images/supported_brands/edp_redy.png b/source/images/supported_brands/edp_redy.png new file mode 100644 index 0000000000000000000000000000000000000000..81959baffb95a2114ae9a8da46773f77e4846ab9 GIT binary patch literal 26259 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 Date: Sun, 16 Sep 2018 14:13:54 +0200 Subject: [PATCH 101/176] Update switch.switchmate.markdown (#6292) --- source/_components/switch.switchmate.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/switch.switchmate.markdown b/source/_components/switch.switchmate.markdown index 2d332c4c838..bfc26d496c9 100644 --- a/source/_components/switch.switchmate.markdown +++ b/source/_components/switch.switchmate.markdown @@ -32,6 +32,11 @@ name: description: The name used to display the switch in the frontend. required: false type: string +flip_on_off: + description: Option to flip the on/off state. + required: false + type: boolean + default: false {% endconfiguration %} From 23c3bcd6de852754b5bd5996a08e18cd772a128f Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 16 Sep 2018 15:24:03 +0100 Subject: [PATCH 102/176] Typo fix --- source/_components/konnected.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/konnected.markdown b/source/_components/konnected.markdown index 7b4c5117312..7caad925d3b 100644 --- a/source/_components/konnected.markdown +++ b/source/_components/konnected.markdown @@ -62,7 +62,7 @@ devices: type: list keys: id: - description: The MAC address of the WiFi module with colons/punctuation removed. You musst use the full 12-character MAC address with lower case letters. This is visible in the device's WiFi SSID and hostname. + description: The MAC address of the WiFi module with colons/punctuation removed. You must use the full 12-character MAC address with lower case letters. This is visible in the device's WiFi SSID and hostname. required: true type: string binary_sensors: From c80fafcdc0d073d56c283b52aa859781654f8dfe Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 16 Sep 2018 21:30:03 +0200 Subject: [PATCH 103/176] Update blog --- source/_posts/2018-09-15-release-78.markdown | 61 ++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/source/_posts/2018-09-15-release-78.markdown b/source/_posts/2018-09-15-release-78.markdown index b595c05b9a8..80659a88e5d 100644 --- a/source/_posts/2018-09-15-release-78.markdown +++ b/source/_posts/2018-09-15-release-78.markdown @@ -44,6 +44,24 @@ Experiencing issues introduced by this release? Please report them in our [issue - Added Twitch v5 support to the twitch platform ([@ioangogo] - [#16428]) ([sensor.twitch docs]) (breaking change) - Update radiotherm ([@cpw] - [#15031]) ([climate.radiotherm docs]) (breaking change) +## {% linkable_title Beta Fixes %} + +- Replace api_password in Camera.Push ([@dgomes] - [#16339]) ([camera.push docs]) (beta fix) +- Fail fetch auth providers if onboarding required ([@balloob] - [#16454]) ([auth docs]) (beta fix) +- Fix insteon Hub v1 support ([@teharris1] - [#16472]) ([insteon docs]) (beta fix) +- bugfix - incorrect camera type and missing sensors when multiple netatmo cameras ([@vikramgorla] - [#16490]) ([netatmo docs]) (beta fix) +- Fix arlo intilization when no base station available ([@zellux] - [#16529]) ([arlo docs]) (beta fix) +- Long-lived access token ([@awarecan] - [#16453]) ([auth docs]) (beta fix) +- Fix typo ([@balloob] - [#16556]) (beta fix) +- Fix invalid state ([@balloob] - [#16558]) (beta fix) +- Add websocket commands for refresh tokens ([@balloob] - [#16559]) ([auth docs]) (beta fix) +- Return if refresh token is current used one in WS API ([@awarecan] - [#16575]) ([auth docs]) ([websocket_api docs]) (beta fix) +- Track refresh token last usage information ([@awarecan] - [#16408]) ([auth docs]) (beta fix) +- Increasing python-websockets' version number ([@zoe1337] - [#16578]) ([media_player.webostv docs]) (beta fix) +- Add retry limit for chromecast connection ([@awarecan] - [#16471]) ([media_player.cast docs]) (beta fix) +- Fix broken bluetooth tracker ([@awarecan] - [#16589]) ([device_tracker docs]) (beta fix) +- Rewrite bluetooth le ([@pvizeli] - [#16592]) ([device_tracker docs]) (beta fix) + ## {% linkable_title All changes %} - Add 'moon_phase' to Dark Sky sensor ([@fabaff] - [#16179]) ([sensor.darksky docs]) @@ -143,6 +161,22 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add a base_url configuration setting to tts. ([@lddubeau] - [#16478]) ([tts docs]) - Upgrade youtube_dl to 2018.09.10 ([@fabaff] - [#16534]) ([media_extractor docs]) - Upgrade keyring to 15.0.0 ([@fabaff] - [#16536]) +- Updates documentation repo URL in PR template ([@frenck] - [#16537]) +- Replace api_password in Camera.Push ([@dgomes] - [#16339]) ([camera.push docs]) (beta fix) +- Fail fetch auth providers if onboarding required ([@balloob] - [#16454]) ([auth docs]) (beta fix) +- Fix insteon Hub v1 support ([@teharris1] - [#16472]) ([insteon docs]) (beta fix) +- bugfix - incorrect camera type and missing sensors when multiple netatmo cameras ([@vikramgorla] - [#16490]) ([netatmo docs]) (beta fix) +- Fix arlo intilization when no base station available ([@zellux] - [#16529]) ([arlo docs]) (beta fix) +- Long-lived access token ([@awarecan] - [#16453]) ([auth docs]) (beta fix) +- Fix typo ([@balloob] - [#16556]) (beta fix) +- Fix invalid state ([@balloob] - [#16558]) (beta fix) +- Add websocket commands for refresh tokens ([@balloob] - [#16559]) ([auth docs]) (beta fix) +- Return if refresh token is current used one in WS API ([@awarecan] - [#16575]) ([auth docs]) ([websocket_api docs]) (beta fix) +- Track refresh token last usage information ([@awarecan] - [#16408]) ([auth docs]) (beta fix) +- Increasing python-websockets' version number ([@zoe1337] - [#16578]) ([media_player.webostv docs]) (beta fix) +- Add retry limit for chromecast connection ([@awarecan] - [#16471]) ([media_player.cast docs]) (beta fix) +- Fix broken bluetooth tracker ([@awarecan] - [#16589]) ([device_tracker docs]) (beta fix) +- Rewrite bluetooth le ([@pvizeli] - [#16592]) ([device_tracker docs]) (beta fix) [#14753]: https://github.com/home-assistant/home-assistant/pull/14753 [#14754]: https://github.com/home-assistant/home-assistant/pull/14754 @@ -196,6 +230,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#16323]: https://github.com/home-assistant/home-assistant/pull/16323 [#16327]: https://github.com/home-assistant/home-assistant/pull/16327 [#16337]: https://github.com/home-assistant/home-assistant/pull/16337 +[#16339]: https://github.com/home-assistant/home-assistant/pull/16339 [#16340]: https://github.com/home-assistant/home-assistant/pull/16340 [#16344]: https://github.com/home-assistant/home-assistant/pull/16344 [#16346]: https://github.com/home-assistant/home-assistant/pull/16346 @@ -219,28 +254,43 @@ Experiencing issues introduced by this release? Please report them in our [issue [#16397]: https://github.com/home-assistant/home-assistant/pull/16397 [#16403]: https://github.com/home-assistant/home-assistant/pull/16403 [#16404]: https://github.com/home-assistant/home-assistant/pull/16404 +[#16408]: https://github.com/home-assistant/home-assistant/pull/16408 [#16415]: https://github.com/home-assistant/home-assistant/pull/16415 [#16419]: https://github.com/home-assistant/home-assistant/pull/16419 [#16428]: https://github.com/home-assistant/home-assistant/pull/16428 [#16429]: https://github.com/home-assistant/home-assistant/pull/16429 [#16450]: https://github.com/home-assistant/home-assistant/pull/16450 +[#16453]: https://github.com/home-assistant/home-assistant/pull/16453 +[#16454]: https://github.com/home-assistant/home-assistant/pull/16454 [#16455]: https://github.com/home-assistant/home-assistant/pull/16455 [#16459]: https://github.com/home-assistant/home-assistant/pull/16459 [#16460]: https://github.com/home-assistant/home-assistant/pull/16460 [#16463]: https://github.com/home-assistant/home-assistant/pull/16463 [#16465]: https://github.com/home-assistant/home-assistant/pull/16465 [#16470]: https://github.com/home-assistant/home-assistant/pull/16470 +[#16471]: https://github.com/home-assistant/home-assistant/pull/16471 +[#16472]: https://github.com/home-assistant/home-assistant/pull/16472 [#16477]: https://github.com/home-assistant/home-assistant/pull/16477 [#16478]: https://github.com/home-assistant/home-assistant/pull/16478 [#16486]: https://github.com/home-assistant/home-assistant/pull/16486 +[#16490]: https://github.com/home-assistant/home-assistant/pull/16490 [#16494]: https://github.com/home-assistant/home-assistant/pull/16494 [#16495]: https://github.com/home-assistant/home-assistant/pull/16495 [#16501]: https://github.com/home-assistant/home-assistant/pull/16501 [#16502]: https://github.com/home-assistant/home-assistant/pull/16502 [#16507]: https://github.com/home-assistant/home-assistant/pull/16507 [#16515]: https://github.com/home-assistant/home-assistant/pull/16515 +[#16529]: https://github.com/home-assistant/home-assistant/pull/16529 [#16534]: https://github.com/home-assistant/home-assistant/pull/16534 [#16536]: https://github.com/home-assistant/home-assistant/pull/16536 +[#16537]: https://github.com/home-assistant/home-assistant/pull/16537 +[#16556]: https://github.com/home-assistant/home-assistant/pull/16556 +[#16558]: https://github.com/home-assistant/home-assistant/pull/16558 +[#16559]: https://github.com/home-assistant/home-assistant/pull/16559 +[#16575]: https://github.com/home-assistant/home-assistant/pull/16575 +[#16578]: https://github.com/home-assistant/home-assistant/pull/16578 +[#16589]: https://github.com/home-assistant/home-assistant/pull/16589 +[#16592]: https://github.com/home-assistant/home-assistant/pull/16592 [@9R]: https://github.com/9R [@ASMfreaK]: https://github.com/ASMfreaK [@Cereal2nd]: https://github.com/Cereal2nd @@ -269,6 +319,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@exxamalte]: https://github.com/exxamalte [@fabaff]: https://github.com/fabaff [@flo-wer]: https://github.com/flo-wer +[@frenck]: https://github.com/frenck [@fucm]: https://github.com/fucm [@grea09]: https://github.com/grea09 [@htotoo]: https://github.com/htotoo @@ -283,6 +334,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@phil65]: https://github.com/phil65 [@pnbruckner]: https://github.com/pnbruckner [@pszafer]: https://github.com/pszafer +[@pvizeli]: https://github.com/pvizeli [@rcloran]: https://github.com/rcloran [@rohankapoorcom]: https://github.com/rohankapoorcom [@rytilahti]: https://github.com/rytilahti @@ -296,9 +348,14 @@ Experiencing issues introduced by this release? Please report them in our [issue [@thomaslian]: https://github.com/thomaslian [@tschmidty69]: https://github.com/tschmidty69 [@tsvi]: https://github.com/tsvi +[@vikramgorla]: https://github.com/vikramgorla [@vrih]: https://github.com/vrih +[@zellux]: https://github.com/zellux +[@zoe1337]: https://github.com/zoe1337 [alarm_control_panel.yale_smart_alarm docs]: /components/alarm_control_panel.yale_smart_alarm/ +[arlo docs]: /components/arlo/ [asterisk_mbox docs]: /components/asterisk_mbox/ +[auth docs]: /components/auth/ [automation docs]: /components/automation/ [automation.event docs]: /docs/automation/trigger/#event-trigger [automation.homeassistant docs]: /docs/automation/trigger/#home-assistant-trigger @@ -310,6 +367,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [binary_sensor.openuv docs]: /components/binary_sensor.openuv/ [camera docs]: /components/camera/ [camera.proxy docs]: /components/camera.proxy/ +[camera.push docs]: /components/camera.push/ [climate.generic_thermostat docs]: /components/climate.generic_thermostat/ [climate.nest docs]: /components/climate.nest/ [climate.opentherm_gw docs]: /components/climate.opentherm_gw/ @@ -338,8 +396,10 @@ Experiencing issues introduced by this release? Please report them in our [issue [media_player.onkyo docs]: /components/media_player.onkyo/ [media_player.songpal docs]: /components/media_player.songpal/ [media_player.sonos docs]: /components/media_player.sonos/ +[media_player.webostv docs]: /components/media_player.webostv/ [media_player.yamaha docs]: /components/media_player.yamaha/ [mqtt docs]: /components/mqtt/ +[netatmo docs]: /components/netatmo/ [notify docs]: /components/notify/ [openuv docs]: /components/openuv/ [rfxtrx docs]: /components/rfxtrx/ @@ -389,5 +449,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [vacuum docs]: /components/vacuum/ [vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ [velbus docs]: /components/velbus/ +[websocket_api docs]: /components/websocket_api/ [zha docs]: /components/zha/ [zoneminder docs]: /components/zoneminder/ From 54063a66415611ac6e80c0b1464d498c719cc8ce Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Tue, 11 Sep 2018 10:30:09 +0100 Subject: [PATCH 104/176] Adds token parameter to Camera.Push (#6130) * Adds token parameter to Camera.Push * update require --- source/_components/camera.push.markdown | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/_components/camera.push.markdown b/source/_components/camera.push.markdown index c70dee014c0..be639978032 100644 --- a/source/_components/camera.push.markdown +++ b/source/_components/camera.push.markdown @@ -25,11 +25,9 @@ The `push` camera can as an example be used with [motionEye](https://github.com/ In motionEye, under **File Storage -> Run A Command** type in: ```bash -curl -X POST -F "image=@%f" http://my.hass.server.com:8123/api/camera_push/camera.push_camera +curl -X POST -F "image=@%f" http://my.hass.server.com:8123/api/camera_push/camera.push_camera?token=12345678 ``` -Please take note that you might need to add `-H "x-ha-access: YOUR_PASSWORD"` if you have API authentication enabled. - Optionally configure motionEye to save only motion triggered images by going into **Still Images -> Capture Mode** and setting **Motion Triggered**. Tune your preferences under **Motion Detection**. In this setup, you can configure the push camera to continuously replay the last motion triggered event using a configuration such as: @@ -40,6 +38,7 @@ camera: name: MotionEye Outdoor buffer: 3 timeout: 5 + token: 12345678 ``` ## {% linkable_title Configuration %} @@ -51,6 +50,7 @@ To enable this camera in your installation, add the following to your `configura camera: - platform: push name: My Push Camera + token: 12345678 ``` {% configuration %} @@ -69,6 +69,10 @@ timeout: required: false default: 5 seconds type: time +token: + description: User provided token acting as access control, should be a large string (more then 8 chars). Required if you can't use HA new auth system (0.77). + required: false + type: string field: description: HTTP POST field containing the image file required: false From 5973770fa0db1eae1e03251c6e61fcac89b20bf6 Mon Sep 17 00:00:00 2001 From: Tom Harris Date: Mon, 10 Sep 2018 13:23:36 -0400 Subject: [PATCH 105/176] Support for Insteon Hub Version 1 (#6211) * Support for Insteon Hub Version 1 * Spelling and gramar fixes * :pencil2: Tweaks --- .gitignore | 1 + source/_components/insteon.markdown | 98 +++++++++++++++++------------ 2 files changed, 60 insertions(+), 39 deletions(-) diff --git a/.gitignore b/.gitignore index f02128325f5..933ece07209 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ source/.jekyll-metadata /.vs/slnx.sqlite-journal /.vs/VSWorkspaceState.json .vscode +*.suo diff --git a/source/_components/insteon.markdown b/source/_components/insteon.markdown index e2518a09784..7cb8e635ec7 100644 --- a/source/_components/insteon.markdown +++ b/source/_components/insteon.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Insteon" -description: "Instructions on how to setup an Insteon Modem (PLM or Hub) locally within Home Assistant." +description: "Instructions on how to set up an Insteon Modem (PLM or Hub) locally within Home Assistant." date: 2018-08-20 16:00 sidebar: true comments: false @@ -18,19 +18,20 @@ linked INSTEON devices to be used within Home Assistant as binary sensors, lights, fans, sensors and switches. Device support is provided by the underlying [insteonplm] package. It is known to work with the [2413U] USB and [2412S] RS242 flavors of PLM and the [2448A7] USB stick. It has also been -tested to work with the [2245] Hub. +tested to work with the [2242] and [2245] Hubs. [insteonplm]: https://github.com/nugget/python-insteonplm [2413U]: https://www.insteon.com/powerlinc-modem-usb [2412S]: https://www.insteon.com/powerlinc-modem-serial [2448A7]: https://www.smarthome.com/insteon-2448a7-portable-usb-adapter.html [2245]: https://www.insteon.com/insteon-hub/ +[2242]: https://www.insteon.com/support-knowledgebase/2014/9/26/insteon-hub-owners-manual ### {% linkable_title INSTEON Modem configuration %} -To setup a Powerline Modem (PLM) device such as the [2413U], use the following -configuration: +To set up an INSTEON Powerline Modem (PLM) device such as the [2413U], use the +following configuration: ```yaml # PLM configuration variables @@ -38,15 +39,26 @@ insteon: port: SERIAL_PORT ``` -To setup an INSTEON Hub such as the [2245], use the following configuration: - +To set up an INSTEON Hub model [2245], use the following configuration: + ```yaml -# Hub configuration variables +# Hub 2245 configuration variables insteon: host: HOST ip_port: IP_PORT username: USERNAME password: PASSWORD + hub_version: 2 +``` + +To set up an INSTEON Hub model [2242], use the following configuration: + +```yaml +# Hub 2242 configuration variables +insteon: + host: HOST + ip_port: IP_PORT + hub_version: 1 ``` Addtional configuration items are available: @@ -71,14 +83,23 @@ insteon: ``` Configuration variables: - **port** (*Required for PLM setup*): The serial or USB port for your device, - e.g., `/dev/ttyUSB0` -- **host** (*Required for Hub setup*): The host name or IP address of the Hub -- **ip_port** (*Optional for Hub setup*): The IP port number of the Hub. - (default value is 25105) -- **username** (*Required for Hub setup*): The username to login to the local - Hub -- **password** (*Required for Hub setup*): The password to login to the local - Hub + e.g., `/dev/ttyUSB0` or `COM3` +- **host** (*Required for Hub setup*): The host name or IP address of the Hub. +- **ip_port** (*Optional for Hub setup*): The IP port number of the Hub. For + Hub model [2245] (i.e. Hub version 2) the default port is 25105. For the Hub + model [2242] (i.e. Hub version 1) the default port is 9761. Use the Insteon + app to find the port number for your specific Hub. +- **username** (*Required for Hub version 2 setup*): The username to login in + to the local Hub. This is required for Hub [2245] (i.e. Hub version 2) setup. + You can find your Hub username on the bottom of the Hub or you can use the + Insteon app. +- **password** (*Required for Hub version 2 setup*): The password to login in + to the local Hub. This is required for Hub [2245] (i.e. Hub version 2) setup. + You can find your Hub password on the bottom of the Hub or you can use the + Insteon app. +- **hub_version** (*Required for Hub version 1 setup*): The Hub version number + where model [2242] is Hub version 1 and model [2245] is Hub version 2. + (Default is 2) - **device_override** (*Optional*): Override the default device definition - *ADDRESS* is found on the device itself in the form 1A.2B.3C or 1a2b3c - *CATEGORY* is found in the back of the device's User Guide in the form of @@ -92,16 +113,16 @@ Configuration variables: - *UNITCODE* is the X10 unit code values 1 - 16 - *PLATFORM* is the Home Assistant Platform to associate the device with. The following platforms are supported - - binary_sensor: Used for on/off devices or keypad buttons that are read only. + - binary_sensor: Used for on/off devices or keypad buttons that are read-only. - light: Used for dimmable X10 devices - switch: Used for On/Off X10 devices - *STEPS* is the number of dim/bright steps the device supports. Used for dimmable X10 devices only. Default value is 22. -- **x10_all_units_off** (*Optional*): Creates an binary_sensor that responds +- **x10_all_units_off** (*Optional*): Creates a binary_sensor that responds to the X10 standard command for All Units Off. -- **x10_all_lights_on** (*Optional*): Creates an binary_sensor that responds +- **x10_all_lights_on** (*Optional*): Creates a binary_sensor that responds to the X10 standard command for All Lights On -- **x10_all_lights_off** (*Optional*): Creates an binary_sensor that responds +- **x10_all_lights_off** (*Optional*): Creates a binary_sensor that responds to the X10 standard command for All Lights Off ### {% linkable_title Autodiscovery %} @@ -111,27 +132,27 @@ per device. Subsequent startups will occur much quicker using cached device information. If a device is not recognized during autodiscovery, you can add the device to the **device_override** configuration. -In order for a device to be discovered it must be linked to the INSTEON Modem +In order for a device to be discovered, it must be linked to the INSTEON Modem as either a responder or a controller. ### {% linkable_title Linking Devices to the INSTEON Modem %} In order for any two Insteon devices to talk with one another, they must be -linked. For an overview of device linking please read the Insteon page on +linked. For an overview of device linking, please read the Insteon page on [understanding linking]. The Insteon Modem module supports All-Linking through [Development Tools] service calls. The following services are available: - **insteon.add_all_link**: Puts the Insteon Modem (IM) into All-Linking -mode. The IM can be set as as controller or a responder. If the IM is a -controler, put the IM into linking mode then press the SET button on the -device. If the IM is a responer, press the SET button on the device then +mode. The IM can be set as a controller or a responder. If the IM is a +controller, put the IM into linking mode then press the SET button on the +device. If the IM is a responder, press the SET button on the device then put the IM into linking mode. - **insteon.delete_all_link**: Tells the Insteon Modem (IM) to remove an All-Link record from the All-Link Database of the IM and a device. Once the IM is set to delete the link, press the SET button on the corresponding device to complete the process. - **insteon.load_all_link_database**: Load the All-Link Database for a -device. WARNING - Loading a device All-Link database may take a LONG time and +device. WARNING - Loading a device All-Link database may take a LONG time and may need to be repeated to obtain all records. - **insteon.print_all_link_database**: Print the All-Link Database for a device. Requires that the All-Link Database is loaded first. @@ -174,7 +195,7 @@ devices. INSTEON devices are added to Home Assistant using the platform(s) that make the most sense given the model and features of the hardware. The features of the -INSTEON device are built into the Home Assistant platform. Changing the +INSTEON devices are built into the Home Assistant platform. Changing the platform is not recommended. There are two primary uses for the **device_override** feature. - Devices that do not respond during autodiscovery. This is common for battery @@ -185,7 +206,7 @@ platform is not recommended. There are two primary uses for the ### {% linkable_title Example Configuration with Options%} ```yaml -# Full example of insteon configuration with customizations and overrides +# Full example of Insteon configuration with customizations and overrides homeassistant: customize: @@ -205,7 +226,7 @@ insteon: ### {% linkable_title What NOT to do %} -Insteon Modem is a top level component and device discovery will identify +Insteon Modem is a top-level component and device discovery will identify the Home Assistant platform the device belongs in. As such, do not declare Insteon devices in other platforms. For example, this configuration will NOT work: @@ -224,19 +245,18 @@ events. The following events are available: - **insteon.button_on** - **address**: (required) The Insteon device address in lower case without dots (e.g. 1a2b3c) - - **button**: (Optional) The button id in lower case. For an 4 button remote - the values are a to d. For an 8 button remote the values are a to g. For - a one button remote this field is not used. + - **button**: (Optional) The button id in lower case. For a 4-button remote + the values are `a` to `d`. For an 8 button remote the values are `a` to `g`. For + a one-button remote this field is not used. - **insteon.button_of** - **address**: (required) The Insteon device address in lower case without dots (e.g. 1a2b3c) - - **button**: (Optional) The button id in lower case. For an 4 button remote - the values are a to d. For an 8 button remote the values are a to g. For - a one button remote this field is not used. + - **button**: (Optional) The button id in lower case. For a 4-button remote + the values are a to d. For an 8 button remote the values are `a` to `g`. For + a one-button remote this field is not used. -This allows the mini-remotes to be configured as - -Here is an example of how to use these events for automations: +This allows the mini-remotes to be configured as triggers for automations. Here +is an example of how to use these events for automations: ``` automation: @@ -276,8 +296,8 @@ The INSTEON Hub has three known issues that are inherent to the design of the Hub: 1. If you see multiple error messages in the log file stating the Hub -connection is closed and reconnection has failed, this generally requires -the Hub to be restarted in order to reconnect. +connection is closed, and reconnection has failed, this generally requires +the Hub to be restarted to reconnect. 2. You cannot use both Home Assistant and the INSTEON app. If you do, the changes made in the app will not appear in Home Assistant. Changes made in From 9898267aa50b58e17c8568019ba7ca0bc5c2bd7f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 16 Sep 2018 21:42:05 +0200 Subject: [PATCH 106/176] Add breaking changes --- source/_posts/2018-09-15-release-78.markdown | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/source/_posts/2018-09-15-release-78.markdown b/source/_posts/2018-09-15-release-78.markdown index 80659a88e5d..9d4eaefade9 100644 --- a/source/_posts/2018-09-15-release-78.markdown +++ b/source/_posts/2018-09-15-release-78.markdown @@ -13,6 +13,12 @@ og_image: /images/blog/2018-09-0.78/social.png +It's time for a new release and oh boy, what a time to be alive! Today marks our 5th (!!!) anniversary. That's 5 years we've been bringing privacy focused and locally controlled home automation to your home. Happy birthday to us. + +This release includes two new features for the auth system. The first one is long-lived access tokens. These are tokens that don't expire and can be used in your scripts instead of API password. Instructions on how to create and use them can be found on your profile. + +Also on your profile page is a new list of existing refresh tokens. These are all the tokens that are currently active for your account. If you ran into issues that the remember login dialog didn't show, you might have a lot. Don't worry, you can delete them all. + ## {% linkable_title New Platforms %} - Add temperature sensors to the velbus component ([@Cereal2nd] - [#16203]) ([velbus docs]) ([sensor.velbus docs]) (new-platform) @@ -37,12 +43,13 @@ Experiencing issues introduced by this release? Please report them in our [issue ## {% linkable_title Breaking Changes %} -- Rewrite of Trafikverket weather - Multiple sensor types supported ([@endor-force] - [#15935]) ([sensor.trafikverket_weatherstation docs]) (breaking change) -- Fix geizhals price parsing ([@JulianKahnert] - [#15990]) ([sensor.geizhals docs]) (breaking change) -- Update to EnvoyReader 0.2, support for more hardware ([@jesserizzo] - [#16212]) ([sensor.enphase_envoy docs]) (breaking change) -- Fix Mi Flora median calculation ([@PaulAnnekov] - [#16085]) ([sensor.miflora docs]) (breaking change) -- Added Twitch v5 support to the twitch platform ([@ioangogo] - [#16428]) ([sensor.twitch docs]) (breaking change) -- Update radiotherm ([@cpw] - [#15031]) ([climate.radiotherm docs]) (breaking change) +- Trafikverket weather: Instead of having multiple sensor configurations per station, add only one configuration per station and select the type of measurement data to subscribe to using monitored_conditions. +The configuration value type should no longer be used. ([@endor-force] - [#15935]) ([sensor.trafikverket_weatherstation docs]) (breaking change) +- Geizhals: config has changed. Remove domain and regex, specify locale instead: `AT`, `EU`, `DE`, `UK` or `PL`. ([@JulianKahnert] - [#15990]) ([sensor.geizhals docs]) (breaking change) +- Update to EnvoyReader 0.2, support for more hardware. Change keys in monitored_conditions from `7_days_production` and `7_days_consumption` to `seven_days_production` and `seven_days_consumption` ([@jesserizzo] - [#16212]) ([sensor.enphase_envoy docs]) (breaking change) +- Fix Mi Flora median calculation. Removed `retries` and `timeout` config parameters, they were not used for several months. Replaced `cache_value` config with `scan_interval` to fix a bug in the PR. ([@PaulAnnekov] - [#16085]) ([sensor.miflora docs]) (breaking change) +- Twitch now requires a `client_id` and so the platform got updated. ([@ioangogo] - [#16428]) ([sensor.twitch docs]) (breaking change) +- The radiotherm `fan` and `mode` state attributes were updated to reflect the real-time fan and mode states of the thermostat, rather than the overall selected state (automatic, mostly). The mode attributes still contain the selected modes (fan on/auto, heat/cool/auto). ([@cpw] - [#15031]) ([climate.radiotherm docs]) (breaking change) ## {% linkable_title Beta Fixes %} From 6523eb0e9d193b1984495f05f252343f17b52f8d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 16 Sep 2018 21:46:03 +0200 Subject: [PATCH 107/176] add component image --- .../blog/2018-09-release-0.78/components.png | Bin 0 -> 34224 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/blog/2018-09-release-0.78/components.png diff --git a/source/images/blog/2018-09-release-0.78/components.png b/source/images/blog/2018-09-release-0.78/components.png new file mode 100644 index 0000000000000000000000000000000000000000..c02f11a8c8aca57a71277e3d3b8162d55a0c5437 GIT binary patch literal 34224 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 Tdk0@yv8UM z#=jdBtz!vSnobYl`z}SFO2=r$JVakA&rE>qYu7s(pwC|E`zrDwmaA!zPAj57z1Gi* z_dk{K=Ee8gBm_SA`dm$&tgiUN*=!!y(ju(| zB7~ptX%OyTma(kA5Wo{naA3h8)XYeCsBI=1gtrHn%d623Gy@|-w{k%gP(&E^JG_0! z>^r#2Murrmq7?^S7fqfa@HRGz&h|g^JOCTV9{0b4xR7!p&6j{L2o3W25AM%#@K$m?287(WO}^sVUeSRd3pvx0Y$Fj#nUVOH1dB|O}TmVpT&eFz804uFU@LT!7%1#-_yurlwpmMwd$+p)aM0`RmZE%&XuEBc%& zqb0HwNA>ReqXDDK0Uf?z5uOD>HT5if(QDjbDT>QP{)D_~H9spc&?G=7<)ZlFl>lD9 z>Q~T!C_=33k1|!xNzBB~3C3~WS%m4aeEo7r)+kjoLZ!#O^FVC;pJ&CAG z$XuZ^d<4+qU*3pmGzUMSm@9co@=F^#uq6%Uh9Ogl(Q~T^w+W#@iP>#E$M-&`#>i;< zsrEM?M8cPnwE-lhR(hs%6s_%w_QNmYA)q7dyEN{yVlFkEwUg&s=6=st_fx;4THVF5 z%-}0RWBr`{kvsh=wXSFvJ?kxpx-V>Z5iX*01rYa5EXPKAsU}1YjNe0W@37^;W9|9F zk}K?gJ5DrE{rpSSz{HLCNKKUP}(}z7{Jp2AQ_a?0R(Ju zVO{km&+DsOI8VT`am&jGIqiEEZExAE@&0$(R)90jx1t;sY4Zy|K-O=Bs6PM*+HgQL z(S995ZZs7Y9i6`Y_e1G_5c0+QGi@Zqrh)QwhM@=Vh4xkJYF1P5hk!`#?A5L5G>uEJG*I#Lohx`4VmwQg}U3bF#5!?gVdaq2E8I;qW@Mjn^q3Q%Ah} z6{hs}b8HGRuiQg_#DTs&_=_;NHKUphUyUO89ASjQr;w;k09uGVlbonS*jAJL#HVL< z)qcWg@@PO5VKv%qY6k9nS{)o#$+RK){NB5G@W^-d82?~s_Fu0V;K$H!C1Nv*fA$Zv z|L~FcnONvH1TD@fOCA`TfgA3Q%%`$G0VvkCNrI=SZt%N5!=^T*;DAc=OeG^q*i^R7 zY-yP@LT+lCIXjdcsKPV&=}wi(8=k@>)8=~C$Da^*#{N2#!E*?BM&#}5R^22sGYdUL zlo2k(k*%(WzxS{ghk)yd!84D4L=~Z4<2Wm6e+P?kcaMe%JLO~>!Q_8Duk=)c2=}Fy zCgLRdC=-Upcm94G7bfHuEnlBoD!E~30;N|tdwZ2*Zu?AI!Ux0(AJBl~z!jq1_%Y?e zis+f)SOs8ciGh8OIg@!lx%6QKv0<6e>*-UK2d14xoG}8DE6aEa8$3T+a_4K7jcX|A z@}KvL!#IxJ?#N^hyKh+-&qt%_IXh7B$06xLa@Ppi>r_&^m0rx|kKKAxS`XP7l{9_T z--e;&=xS2{i)sUP`MNYmX>X0e!dXxLe8E7J9z&kVz-6+dUq(e-==Zel0Qk04HVjm9 zTA$cRM@-FnJduopg>^mL*;2&q2tBV|Msv{LR;j48ij?yr3J@@2au@Y+jgjK={M}Sl z#2!M5j$VDDf24$Og7QG$t&N7sS*JC!ObRi7TZuYtZGol3JR3*q?!g(O?|(*xF?+Ag z&MS76DCW=ch#9XKeb`@$zEdFUF8Y6`VHpM8ZfHhxseq#PXe~g*<{*~+k6^x!0J?N$ zq>q46;dEx4^vI~a5rp(exA;A!uzylK!Fz?dmY^9kP}D~-w%Px8mC-=ZDbQb7;>ER| z<7F*kKN^z*Z!fp|68Ryj8Fx?O_!XWk5?sH!A!wCT^+1oIW@kJ_@|lLbzZ7vyM!38h zcxoS>d(+jM9yZmx!C^zH4=7TR)(5rxfpFIQqW@(mr5Ka(03EQw_ijCRLM(*GOSr_J zXiBtI6qV zEkIn8P0)#gXgl$o+UU;O&^oIFDD<=XLx|;U|0VumVI@#uUxVW(T7jduc{51@NA1dJ zrXv5J)oq+fiC13iVCPXHw<8s+pGaoIouAht;MRLDqYJX@Nr!y%M_9Jvel(QqAWO5c zf9y9_Dk4m?*@(3++WA<`j{t*rhhljYCU2dJaK+@*6x6r}(gkeb+UIg=JS2&wtfqM1 zjNb^srv}S$4@Ad%`a6{Y!*=PiiOs?|pH(CG?N6jRMlW7VCAaDS?~*an=)ET^KI00 zjrO}to7P$OOo|mXrQF|%XXB?Qc3sDM~8dps9Pfjcq0H63Boyg-6{nMv*kZqLTmfa$9>^ z`PO<6n>Ju`eT=Ab$PJAJ52)983D1WBwnSVaq?UWZA1HvhWIzZTqeO!bdx1Z0^}*0% z*R~*ji>$e*J5k5D*&0at?2dC1ixHO~mMhs_$iAH>Si-;;pu4AUXUjID=+UjG3#(NU z?mE`syCIEkgsa>S1hw0daDragCcCpSOG_Dfb=j44s#4HgN#XTZ-%dszdC)YxUz4)} zfeA(BFM0F=QmvCCty9GJ_Vnf4AQDcD4b1!79HU5+!lvNQMIwa9`pm@*z>uTJk4W>? zER&~7vSpyil3&U7!@-vbr*7TAh6ArZOM!EhKrKNWS@}FwPm|PgPAkw5s3Jx>Iefl2OL4SKBr zz%}J`En5N=AC~Cbu<%QSzq|e*>3P-a&&FvsmFrzoNeVk+Nk(w>h*+(Wecb$5wP_+;JJ3B-CzZ(_mIl$gj+fEd(#Y8)MF z{53|8HmFaOYuBK;VDx{PX?X}X0cNB?@AQWheHT*lfg3)*ZGN!`cQ z0{FyV8im5`xR0y(-^wpPftI80mLSkjDjI-&%(5M+_XN8=;DL|g%$XD{j14|kpnxkeqw?wqDS zS>38%(waK|g*Yq>{~fn38#ch|CVF6dZ6wvPcDl9vM;G^_U9aDJK=#6qFNS1-ZH2gJ mN`Gsk4QWIrwEze|nu7wE@V0(Y5Wo5tO)JT%%hpPph5kPu*d?_9 literal 0 HcmV?d00001 From 3b8e9eb550a0625cb6c71a429379721acf2c7ae0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Sep 2018 18:39:44 +0200 Subject: [PATCH 108/176] Update date --- source/_posts/2018-09-15-release-78.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_posts/2018-09-15-release-78.markdown b/source/_posts/2018-09-15-release-78.markdown index 9d4eaefade9..a149ccd1df6 100644 --- a/source/_posts/2018-09-15-release-78.markdown +++ b/source/_posts/2018-09-15-release-78.markdown @@ -1,9 +1,9 @@ --- layout: post -title: "0.78: XXX - Update date" -description: "XXX" -date: 2018-09-10 00:01:00 -date_formatted: "September 15, 2018" +title: "0.78: More auth, Switchmate, Yale Smart Alarm, OpenTherm" +description: "We're 5! We got some great new auth stuff in this release and support for Switchmate, Yale Smart Alarm and OpenTherm." +date: 2018-09-17 00:01:00 +date_formatted: "September 17, 2018" author: Paulus Schoutsen author_twitter: balloob comments: true From 6702f4884366cfde1d45cb7eacd8bdfeaccb901b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 15 Sep 2018 14:54:55 +0200 Subject: [PATCH 109/176] Add blog post Thinking Big --- .../_posts/2018-09-16-thinking-big.markdown | 97 ++++++++++++++++++ .../blog/2018-09-thinking-big/logo-text.svg | 1 + .../blog/2018-09-thinking-big/social.png | Bin 0 -> 130231 bytes 3 files changed, 98 insertions(+) create mode 100644 source/_posts/2018-09-16-thinking-big.markdown create mode 100644 source/images/blog/2018-09-thinking-big/logo-text.svg create mode 100644 source/images/blog/2018-09-thinking-big/social.png diff --git a/source/_posts/2018-09-16-thinking-big.markdown b/source/_posts/2018-09-16-thinking-big.markdown new file mode 100644 index 00000000000..5bd55ef22c4 --- /dev/null +++ b/source/_posts/2018-09-16-thinking-big.markdown @@ -0,0 +1,97 @@ +--- +layout: post +title: "Thinking Big" +description: "The new authentication system is live! Chat on hangouts! " +date: 2018-09-15 00:01:00 +date_formatted: "September 16, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcements +og_image: /images/blog/2018-09-thinking-big/social.png +--- + +Tomorrow marks the 5th anniversary of Home Assistant. I want to spend this post not only reflecting on the last 5 years, but also look at what is ahead of us, where we want to go, what we want Home Assistant to be. + +Home Assistant wasn’t born out of ideology. I built it because I got some smart lights and wanted to script them. I made that script open source and it went from there. As Home Assistant has grown, so has the world around us, and so have I. + +A lot of IoT products have been introduced since Home Assistant started. Sadly, the trend in these products is to send all data to the cloud and manage your house from there. I’ve come to realize that it’s not in the big corporations interest to make a product that focuses on privacy and local control. Our data is too useful for them. + +I don’t like this trend. I don’t like seeing more and more of our data being hoarded by a few giant companies, centralizing it in a few systems and using it to influence how we’ll be treated online. It’s our lives, our data, and we should be in control. Not some algorithm optimized for engagement. + +And so I want to introduce a goal for Home Assistant. A goal that will shape how the platform will evolve in the upcoming years. + + +## {% linkable_title The goal %} + +It’s our goal to create a people focused home automation platform. A platform that is open source and which prioritizes privacy and local control. + + - **Privacy.** All your data will be stored locally. + - **Local control.** All logic will run locally. The cloud will only be invoked as needed. + - **Open source.** The platform is freely available for users and companies alike. The more people that choose a privacy focused platform over a cloud-based one is a win for us. + - **Interoperability.** The platform implements APIs to easily share the data. We want your data to be available to any other application that you wish. + +## {% linkable_title What we’re going to build to achieve this goal %} + +Many things! However, here is a list of things that I am most enthusiastic about: + + - Remote connection to your instance to control Home Assistant while being away. We will use end-to-end encryption to ensure that the cloud can’t read your data. Powered by Home Assistant Cloud so you just have to log in and it will work. This is the next feature to be worked on for the cloud. + - Attribution. We’ve recently added both users and context. Next up is making it visible in the logbook which user was responsible for what change. + - Permissions. Using the same user and context features, we will also be able to limit access to entities to users. + - Improved device management. We’ve recently added devices to Home Assistant. As a user, you will be able to place devices in areas, see which entities are part of a device and make sure your entities are up to date. + - Accessibility. We want to make Hass.io run on as many devices as possible, making it very easy for people to get started with a private home. + - Integrate Mozilla's [Web Things API] to make it easier to interact with other home automation platforms. The introduced device management makes it perfectly aligned with the Web Things data model. + - Cloud Transparency. We want to make it visible what data is being shared with Amazon Alexa and Google Home clouds. + - Better Z-Wave. Our current integration has room for improvement. The owner of Z-Wave has announced a [public SDK](http://zwavepublic.com/), which we should explore to integrate with Home Assistant. + +## {% linkable_title What we need to achieve this goal %} + +Home Assistant has grown beyond what we can expect from people to handle in their spare time. We want to keep the community friendly, our code quality high, our upgrades smooth, our documentation up to date and our platform secure. + +In Ubiquiti we’ve found a great partner with aligned goals. They hired me in April to work full-time on Home Assistant which has already resulted in great progress – including some of the enhancements listed above. But one full-time employee is not enough. + +So I have started a new company to raise money and help Home Assistant achieve its goals: [Nabu Casa, Inc][nabu-home]. The company will run Home Assistant Cloud for a $5/month subscription. The revenue will be used to extend the cloud functionality, finance the infrastructure of the Home Assistant website and community, and pay full-time employees to contribute to Home Assistant to reach its goals. + +
Logo of Nabu Casa, Inc +
+ +Nabu Casa, Inc. will only be funded by its subscribers. That way it is guaranteed that we will do what is best for our users, the ones that provide the money. We will not raise any money from investors. Big money tends to care more about making more money than humans and privacy. We need to stay in control to ensure our goals are met. + +If you have been a user of Home Assistant Cloud for the last 9 months, we want to thank you for being part of our open beta. All members of the open beta will be automatically enrolled in the free trial and will be able to use Home Assistant Cloud for one more month till October 17, no changes in Home Assistant necessary. If you haven’t entered any payment information by the end of the trial, you will lose access to Home Assistant Cloud. + +More information: + + - [Nabu Casa, Inc homepage][nabu-home] + - [Manage your Home Assistant Cloud account][nabu-account] + +## {% linkable_title FAQ %} + +### {% linkable_title Do I have to pay to use Home Assistant and Hass.io? %} + +No. Home Assistant is open source and free to install and this will not change. Only the cloud service will be part of a paid subscription. + +### {% linkable_title Will Home Assistant and Hass.io remain open source? %} + +Yes. Nabu Casa will only be responsible for Home Assistant Cloud and it will contribute resources to help Home Assistant achieve its goals and pay for its infrastructure. + +### {% linkable_title Why not take donations? %} + +Relying on donations makes budgeting for employees impossible without exposing them and their families to the risk of not getting a paycheck at the end of the month. + +### {% linkable_title Is Home Assistant Cloud open source? %} + +The majority of Home Assistant Cloud is open source. The Alexa skill source code is [here](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/alexa/smart_home.py) (with manual setup instructions [here](https://github.com/mike-grant/haaska/)) and the Google Assistant source code is [here](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/google_assistant/smart_home.py) (with manual setup instructions [here](https://www.home-assistant.io/components/google_assistant/)). Our account page and relayer are not open source. + +### {% linkable_title Will you offer a lifetime plan for a one time fee? %} + +No. A lifetime plan to a cloud service is a pyramid scheme. It means new subscribers pay for the costs of the lifetime customers. + +### {% linkable_title I think the price is too high for what I get %} + +New features will be added in the future without a price increase. The next feature we’re planning to release is encrypted remote access to your instance. + +The subscription fee does not only cover the cost of running Home Assistant Cloud. The revenue will also be used to pay for the infrastructure of running Home Assistant and the community forums. + +[nabu-home]: https://www.nabucasa.com +[nabu-account]: https://account.nabucasa.com +[Web Things API]: https://iot.mozilla.org/wot/ diff --git a/source/images/blog/2018-09-thinking-big/logo-text.svg b/source/images/blog/2018-09-thinking-big/logo-text.svg new file mode 100644 index 00000000000..784ed048c85 --- /dev/null +++ b/source/images/blog/2018-09-thinking-big/logo-text.svg @@ -0,0 +1 @@ +logo-text \ No newline at end of file diff --git a/source/images/blog/2018-09-thinking-big/social.png b/source/images/blog/2018-09-thinking-big/social.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0a5032ead7ee02df0ac643e2398e7d4c9f6617 GIT binary patch literal 130231 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

dy+RPijg2(7U&OGpe6QDuJ9q=c>I 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 Bvbz8P literal 0 HcmV?d00001 From 99289b089414f6ba74d6ee9068576535601f1a0c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 15 Sep 2018 15:14:28 +0200 Subject: [PATCH 110/176] Update cloud docs --- source/_components/cloud.markdown | 4 +- source/cloud/alexa.markdown | 104 +----------------- source/cloud/google_assistant.markdown | 110 +------------------ source/cloud/index.markdown | 33 +----- source/cloud/troubleshooting.markdown | 31 +----- source/images/supported_brands/nabu-casa.svg | 1 + 6 files changed, 19 insertions(+), 264 deletions(-) create mode 100644 source/images/supported_brands/nabu-casa.svg diff --git a/source/_components/cloud.markdown b/source/_components/cloud.markdown index 3008a52cac4..5b6417906c4 100644 --- a/source/_components/cloud.markdown +++ b/source/_components/cloud.markdown @@ -7,13 +7,13 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png +logo: nabu-casa.svg ha_release: "0.60" ha_category: Voice ha_iot_class: "Cloud Push" --- -The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa. [Learn more.](/cloud) +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa and Google Assistant. [Learn more.](/cloud) ```yaml # Example configuration.yaml entry to enable the cloud component diff --git a/source/cloud/alexa.markdown b/source/cloud/alexa.markdown index 8e90a4d8eef..58cbefee6a8 100644 --- a/source/cloud/alexa.markdown +++ b/source/cloud/alexa.markdown @@ -3,110 +3,14 @@ layout: page title: "Alexa via Home Assistant Cloud" description: "Enable the Alexa integration via Home Assistant Cloud integration." date: 2017-11-17 20:00 -sidebar: true +sidebar: false comments: false sharing: true footer: true redirect_from: /components/cloud.alexa/ --- -The Alexa integration allows users to control the entities via the Home Assistant Smart Home skill for Alexa. This means that you can say things like "Alexa, turn on the kitchen light" to control your local Home Assistant. +Home Assistant Cloud is a subscription service provided by our partner Nabu Casa, Inc. Check out [their website](https://www.nabucasa.com/config/amazon_alexa/) for help with the Amazon Alexa integration via Home Assistant Cloud. -To use this integration, you need to have: - - - The cloud component set up. [Learn more](/components/cloud/) - - An Alexa enabled device like the Amazon Echo - - Activated the Home Assistant Smart Home skill via the Alexa app - -You can use `configuration.yaml` to configure the entities that are being shown to Alexa and how they are exposed. - -```yaml -# Example configuration.yaml entry configuring Alexa -cloud: - alexa: - filter: - include_entities: - - light.kitchen - - light.kitchen_left - include_domains: - - switch - exclude_entities: - - switch.outside - entity_config: - light.kitchen: - name: Custom Name for Alexa - description: The light in the kitchen - switch.stairs: - display_categories: LIGHT -``` - -{% configuration cloud %} -alexa: - description: Configuration options for the Amazon Alexa integration. - required: false - type: map - keys: - filter: - description: Filters for entities to include/exclude from Alexa. - required: false - type: map - keys: - include_entities: - description: Entity IDs to include. - required: false - type: list - include_domains: - description: Domains to include. - required: false - type: list - exclude_entities: - description: Entity IDs to exclude. - required: false - type: list - exclude_domains: - description: Domains to exclude. - required: false - type: list - entity_config: - description: Entity specific configuration for Alexa - required: false - type: map - keys: - '``': - description: Entity to configure - required: false - type: map - keys: - name: - description: Name of entity to show in Alexa - required: false - type: string - description: - description: Description of entity to show in Alexa - required: false - type: string - display_categories: - description: The display category to use in Alexa. [Available categories](https://developer.amazon.com/docs/device-apis/alexa-discovery.html#display-categories) - required: false - type: string -{% endconfiguration %} - -### {% linkable_title Possible values for customizing %} - -_Configuration via `customize:` is no longer available. Use the entity config as described above._ - -### {% linkable_title Available domains %} -Currently, the following domains are available to be used with Alexa: - -- alert -- automation (enables/disables) -- cover -- fan (supports on/off and set speed) -- group -- input_boolean -- light -- lock (lock and unlock, but unlock is untested as Amazon has disabled unlock for now) -- media_player (play, pause, stop, set volume, adjust volume, next track, and previous track) -- scene -- script (enables/disables) -- switch +

Logo of Nabu Casa, Inc +
diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index 65ea395fcca..4d17dfb7fe5 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -3,115 +3,13 @@ layout: page title: "Google Assistant via Home Assistant Cloud" description: "Enable the Google Assistant via Home Assistant Cloud integration." date: 2017-11-17 20:00 -sidebar: true +sidebar: false comments: false sharing: true footer: true --- -

-The minimum supported version of Home Assistant is 0.65.6. -

+Home Assistant Cloud is a subscription service provided by our partner Nabu Casa, Inc. Check out [their website](https://www.nabucasa.com/config/google_assistant/) for help with the Google Assistant integration via Home Assistant Cloud. -The Google Assistant integration allows users to control the entities via the Home Assistant Smart Home skill for Google Assistant. This means that you can say things like "Ok Google, turn on the kitchen light" to control your local Home Assistant. - -To use this integration, you need to have: - - - The cloud component set up. [Learn more](/components/cloud/) - - A Google Assistant enabled device like the Google Home or a mobile phone running Google Assistant. - - Activated the Home Assistant Smart Home skill for Google Assistant. - - If you have a Google Home device, use the Google Home app, select *Home control*, and then add *hass.io* using the *Add devices* option. - - If you only have a mobile phone, launch Google Assistant, select the three dots menu. Under *Settings* you'll find *Home Control*. There you can add *hass.io* using the *Add devices* option. - -You can use `configuration.yaml` to configure the entities that are being shown to Google Assistant and how they are exposed. - -```yaml -# Example configuration.yaml entry configuring Google Assistant -cloud: - google_actions: - filter: - include_entities: - - light.kitchen - - light.kitchen_left - include_domains: - - switch - exclude_entities: - - switch.outside - entity_config: - switch.kitchen: - name: Custom Name for Google Assistant - aliases: - - bright lights - - entry lights - room: living room -``` - -{% configuration cloud %} -google_actions: - description: Configuration options for the Google Assistant integration. - required: false - type: map - keys: - filter: - description: Filters for entities to include/exclude from Google Assistant. - required: false - type: map - keys: - include_entities: - description: Entity IDs to include. - required: false - type: list - include_domains: - description: Domains to include. - required: false - type: list - exclude_entities: - description: Entity IDs to exclude. - required: false - type: list - exclude_domains: - description: Domains to exclude. - required: false - type: list - entity_config: - description: Entity specific configuration for Google Assistant. - required: false - type: map - keys: - '``': - description: Entity to configure - required: false - type: map - keys: - name: - description: Name of entity to show in Google Assistant. - required: false - type: string - aliases: - description: Aliases that can also be used to refer to this entity. - required: false - type: list - room: - description: Hint for Google Assistant in which room this entity is. - required: false - type: string -{% endconfiguration %} - -### {% linkable_title Available domains %} - -Currently, the following domains are available to be used with Google Assistant, listed with their default types: - -- `group` (on/off) -- `input_boolean` (on/off) -- `scene` (on) -- `script` (on) -- `switch` (on/off) -- `fan` (on/off) -- `light` (on/off/brightness/rgb color/color temp) -- `cover` (on/off/set position (via set brightness)) -- `media_player` (on/off/set volume (via set brightness)) -- `climate` (temperature setting) - -

-After setting up the cloud, if you make any device changes such as changing the name or adding a new device simply say "Ok Google, sync my devices" to get the changes to show up. -

+
Logo of Nabu Casa, Inc +
diff --git a/source/cloud/index.markdown b/source/cloud/index.markdown index 24f5cf76aa4..92749a82231 100644 --- a/source/cloud/index.markdown +++ b/source/cloud/index.markdown @@ -3,7 +3,7 @@ layout: page title: "Home Assistant Cloud" description: "Enable the Home Assistant Cloud integration." date: 2017-11-17 20:00 -sidebar: true +sidebar: false comments: false sharing: true footer: true @@ -13,32 +13,7 @@ ha_category: Voice ha_iot_class: "Cloud Push" --- -

The Home Assistant Cloud is currently free and will become part of the upcoming Community Support Package. [Learn more](/blog/2017/12/17/introducing-home-assistant-cloud/)

+Home Assistant Cloud is a subscription service provided by our partner Nabu Casa, Inc. Check out [their website](https://www.nabucasa.com) For more information on features, pricing and how to configure Home Assistant. -The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services. The following integrations are currently available: - - - [Amazon Alexa (Amazon Echo)](/cloud/alexa/) - - [Google Assistant (Google Home)](/cloud/google_assistant/) - -### {% linkable_title How does it work? %} - -The Home Assistant Cloud has been designed with security in mind. When you activate the Cloud component, your instance will create a secure connection to the Home Assistant Cloud. There is no need for any further configuration or to expose your instance to the internet. - -Integrations like Alexa or Google will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! - -You can find a list of frequently asked questions (and their answers) in [this blog post](/blog/2017/12/17/introducing-home-assistant-cloud/#faq). - -### {% linkable_title Enabling the cloud %} - -The Home Assistant Cloud is enabled by default. If not, add this to your configuration: - -```yaml -# Example configuration.yaml entry to enable the cloud component -cloud: -``` - -Once activated, go to the configuration panel in Home Assistant and create an account and log in. If you are not seeing the **Configuration** panel, make sure you have the following option enabled in your configuration.yaml` file. - -```yaml -config: -``` +
Logo of Nabu Casa, Inc +
diff --git a/source/cloud/troubleshooting.markdown b/source/cloud/troubleshooting.markdown index c9868e882f1..4e8c2a88d79 100644 --- a/source/cloud/troubleshooting.markdown +++ b/source/cloud/troubleshooting.markdown @@ -3,36 +3,13 @@ layout: page title: "Troubleshooting Home Assistant Cloud" description: "Pointers to help troubleshooting issues with Home Assistant Cloud." date: 2018-07-17 20:00 -sidebar: true +sidebar: false comments: false sharing: true footer: true --- -Alright, so you got all excited, tried to setup cloud and it failed? Not to worry, here are some common issues and how to resolve them. +Home Assistant Cloud is a subscription service provided by our partner Nabu Casa, Inc. Check out [their website](https://www.nabucasa.com/config/troubleshooting/) for help with troubleshooting. -## {% linkable_title Error fetching the cognito keyset %} - -This issue can occur by Docker being misconfigured. This issue is especially common for people using the GENERIC installation of Hass.io on top of Ubuntu Bionic or another Linux installation. It is related to IPv6 being incorrectly marked as available. - -The solution is to make sure that Docker uses a public available DNS server, like the Google ones. As root, run: - -``` -mkdir -p /etc/docker -echo '{"dns": ["8.8.8.8", "8.8.4.4"]}' > /etc/docker/daemon.json -``` - -## {% linkable_title Alexa: We were unable to link Home Assistant at this time. Please try again later %} - -Some users are experiencing an issue when they are setting up the Home Assistant skill inside the Alexa app. We are still researching what is going on. Some users have reported that the issue went away if they configured Alexa to not expose all entities. You can try this by changing your cloud configuration like this: - -```yaml -# Example configuration.yaml entry configuring Alexa -cloud: - alexa: - filter: - include_entities: - - light.kitchen -``` - -If this resolves the issue, please report it in the #cloud channel on Discord as it can help us find the entities that are causing this issue. +
Logo of Nabu Casa, Inc +
diff --git a/source/images/supported_brands/nabu-casa.svg b/source/images/supported_brands/nabu-casa.svg new file mode 100644 index 00000000000..a038f7e6890 --- /dev/null +++ b/source/images/supported_brands/nabu-casa.svg @@ -0,0 +1 @@ +logo \ No newline at end of file From 749e853718a188b57e2e7b3ae6ec2444b6caeba9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 16 Sep 2018 21:18:31 +0200 Subject: [PATCH 111/176] Tweaks text --- source/_posts/2018-09-16-thinking-big.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-09-16-thinking-big.markdown b/source/_posts/2018-09-16-thinking-big.markdown index 5bd55ef22c4..daee36dcd4c 100644 --- a/source/_posts/2018-09-16-thinking-big.markdown +++ b/source/_posts/2018-09-16-thinking-big.markdown @@ -11,7 +11,7 @@ categories: Announcements og_image: /images/blog/2018-09-thinking-big/social.png --- -Tomorrow marks the 5th anniversary of Home Assistant. I want to spend this post not only reflecting on the last 5 years, but also look at what is ahead of us, where we want to go, what we want Home Assistant to be. +Today marks the 5th anniversary of Home Assistant. I want to spend this post not only reflecting on the last 5 years, but also look at what is ahead of us, where we want to go, what we want Home Assistant to be. Home Assistant wasn’t born out of ideology. I built it because I got some smart lights and wanted to script them. I made that script open source and it went from there. As Home Assistant has grown, so has the world around us, and so have I. From 560293c81ed5a56dea6ec4efd80bcfe452118116 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Sep 2018 17:28:55 +0200 Subject: [PATCH 112/176] Update date --- ...inking-big.markdown => 2018-09-17-thinking-big.markdown} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename source/_posts/{2018-09-16-thinking-big.markdown => 2018-09-17-thinking-big.markdown} (98%) diff --git a/source/_posts/2018-09-16-thinking-big.markdown b/source/_posts/2018-09-17-thinking-big.markdown similarity index 98% rename from source/_posts/2018-09-16-thinking-big.markdown rename to source/_posts/2018-09-17-thinking-big.markdown index daee36dcd4c..f696770fbab 100644 --- a/source/_posts/2018-09-16-thinking-big.markdown +++ b/source/_posts/2018-09-17-thinking-big.markdown @@ -1,9 +1,9 @@ --- layout: post title: "Thinking Big" -description: "The new authentication system is live! Chat on hangouts! " -date: 2018-09-15 00:01:00 -date_formatted: "September 16, 2018" +description: "Today we're turning 5 years old. It's time to set some goals." +date: 2018-09-17 00:01:00 +date_formatted: "September 17, 2018" author: Paulus Schoutsen author_twitter: balloob comments: true From 19cd142c42b42bb244919c0947239f2e6968497d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Sep 2018 18:48:13 +0200 Subject: [PATCH 113/176] Update date --- source/_posts/2018-09-17-thinking-big.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-09-17-thinking-big.markdown b/source/_posts/2018-09-17-thinking-big.markdown index f696770fbab..d1b482d223b 100644 --- a/source/_posts/2018-09-17-thinking-big.markdown +++ b/source/_posts/2018-09-17-thinking-big.markdown @@ -2,7 +2,7 @@ layout: post title: "Thinking Big" description: "Today we're turning 5 years old. It's time to set some goals." -date: 2018-09-17 00:01:00 +date: 2018-09-17 01:01:00 date_formatted: "September 17, 2018" author: Paulus Schoutsen author_twitter: balloob From f1d3a47240ae634181efa0d06dee49b52b34d18d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Sep 2018 19:07:41 +0200 Subject: [PATCH 114/176] Update config --- _config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index f98ffe3a255..b590068ef8b 100644 --- a/_config.yml +++ b/_config.yml @@ -143,12 +143,12 @@ social: current_major_version: 0 current_minor_version: 78 current_patch_version: 0 -date_released: 2018-09-15 +date_released: 2018-09-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. # Major release: -patch_version_notes: "#release-0773---september-3" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments From b10fbcd01db66abb4e61ea4697218189525d15d0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Sep 2018 19:33:52 +0200 Subject: [PATCH 115/176] Fix image --- source/_posts/2018-09-15-release-78.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-09-15-release-78.markdown b/source/_posts/2018-09-15-release-78.markdown index a149ccd1df6..c778e032ac9 100644 --- a/source/_posts/2018-09-15-release-78.markdown +++ b/source/_posts/2018-09-15-release-78.markdown @@ -8,10 +8,10 @@ author: Paulus Schoutsen author_twitter: balloob comments: true categories: Release-Notes -og_image: /images/blog/2018-09-0.78/social.png +og_image: /images/blog/2018-09-release-0.78/components.png --- - + It's time for a new release and oh boy, what a time to be alive! Today marks our 5th (!!!) anniversary. That's 5 years we've been bringing privacy focused and locally controlled home automation to your home. Happy birthday to us. From 99e079d0e68c474bbbecaee3492db13bc9a79823 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 17 Sep 2018 20:15:15 +0100 Subject: [PATCH 116/176] Clarity edit (#6302) The description of HA starting and creating directories has mislead a few folks, trying a wording tweak --- source/_docs/installation/raspberry-pi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index 2ae0bc857b5..7079f6de003 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -83,7 +83,7 @@ Once you have installed the required python package it is now time to install Ho (homeassistant) homeassistant@raspberrypi:/srv/homeassistant $ pip3 install homeassistant ``` -Start Home Assistant for the first time. This will complete the installation, create the `.homeassistant` configuration directory in the `/home/homeassistant` directory and install any basic dependencies. +Start Home Assistant for the first time. This will complete the installation for you, automatically creating the `.homeassistant` configuration directory in the `/home/homeassistant` directory, and installing any basic dependencies. ```bash (homeassistant) $ hass From 0f1cdee7b0f4706784da79a88c35c1626bc75dbf Mon Sep 17 00:00:00 2001 From: randellhodges Date: Mon, 17 Sep 2018 14:16:40 -0500 Subject: [PATCH 117/176] Added aspect_ratio documentation (#6301) --- source/_lovelace/picture-entity.markdown | 4 ++++ source/_lovelace/picture-glance.markdown | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/source/_lovelace/picture-entity.markdown b/source/_lovelace/picture-entity.markdown index 39ad6002f19..de390f82299 100644 --- a/source/_lovelace/picture-entity.markdown +++ b/source/_lovelace/picture-entity.markdown @@ -38,6 +38,10 @@ state_image: required: false description: "Map entity states to images (`state: image URL`, check the example below)." type: object +aspect_ratio: + required: false + description: "Forces the height of the image to be a ratio of the width. You may enter a value such as: `16x9`, `16:9`, `1.78`." + type: string name: required: false description: Overwrite entity name. diff --git a/source/_lovelace/picture-glance.markdown b/source/_lovelace/picture-glance.markdown index 62a6c258c82..e4f4162cbf6 100644 --- a/source/_lovelace/picture-glance.markdown +++ b/source/_lovelace/picture-glance.markdown @@ -51,6 +51,10 @@ state_image: type: string required: false description: "`state: image-url`, check the example below." +aspect_ratio: + required: false + description: "Forces the height of the image to be a ratio of the width. You may enter a value such as: `16x9`, `16:9`, `1.78`." + type: string entity: required: false description: Entity to use for `state_image`. From 2493f6970ee33f04a8abf0bfcf54e72d2ebeaaa5 Mon Sep 17 00:00:00 2001 From: Tsvi Mostovicz Date: Mon, 17 Sep 2018 23:30:20 +0300 Subject: [PATCH 118/176] Jewish calendar component documentation (#6265) * Initial commit for Jewosh calendar documentation * Minimize the configuration sample * Update 'ha_release' --- .../sensor.jewish_calendar.markdown | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 source/_components/sensor.jewish_calendar.markdown diff --git a/source/_components/sensor.jewish_calendar.markdown b/source/_components/sensor.jewish_calendar.markdown new file mode 100644 index 00000000000..c9f6f8c7ec6 --- /dev/null +++ b/source/_components/sensor.jewish_calendar.markdown @@ -0,0 +1,104 @@ +--- +layout: page +title: "Jewish Calendar" +description: "Instructions on how to integrate the Jewish Calendar sensor within Home Assistant." +date: 2018-09-09 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Calendar +ha_iot_class: "Local Push" +ha_release: "0.80" +--- + +The Jewish Calendar (`jewish_calendar`) sensor platform displays a variety of information related to the Jewish Calendar as a variety of sensors. + +## {% linkable_title Configuration %} + +To enable this sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: jewish_calendar +``` + +{% configuration %} +language: + required: false + default: hebrew + description: Whether to represent the sensors in Hebrew (א' תשרי תשע"ט) or English characters (1 Tishri 5779). + type: string +latitude: + required: false + description: Latitude for time calculations of the sensor. + default: Home Assistant location + type: int +longitude: + required: false + description: Longitude for time calculations of the sensor. + default: Home Assistant location + type: int +disapora: + required: false + description: Consider the location as diaspora or not for calculation of the weekly portion and holidays. + default: False + type: string +sensors: + required: false + default: date + description: List of available sensors. + keys: + date: + description: Show the hebrew date for today. + weekly_portion: + description: Show the weekly portion (parshat hashavu'a) - _At the moment only shows up on Saturday's_. + holiday_name: + description: If it is a holiday, show the name of the holiday. + holyness: + description: On a scale of 1 to 9 show the level of holyness _(see below)_. + first_light: + description: First light of dawn (Alot Hashachar - עלות השחר). + gra_end_shma: + description: Last time for reading of the Shma according to the GR"A. + mga_end_shma: + description: Last time for reading of the Shma according to the MG"A. + plag_mincha: + description: Time of the Plag Hamincha. + first_stars: + description: Time at which the first stars are visible (Tset Hakochavim - צאת הכוכבים). +{% endconfiguration %} + +### {% linkable_title Holyness levels %} + +1. Mido'rayta - by Torah ordination (Rosh Hashana, Yom Kippur, Pesach, Shavuot, Sukkot) +2. Erev Yom Kippur +3. Hol Hamo'ed +4. Hanukka and Purim +5. Fast days +6. Yom Yerushalayim and Yom Haatsmaut +7. Lag ba'omer and Tu bishvat +8. Memorial days: yom hazikaron and yom hashoah +9. Days mentioned by the Israeli parliament: Rabin memorial day, Ze'ev Zhabotinsky day, etc. + +## {% linkable_title Full configuration sample %} + +```yaml +# Example configuration.yaml entry +sensor: + - platform: jewish_calendar + language: english + disapora: True + sensors: + - date + - weekly_portion + - holiday_name + - holyness + - first_light + - gra_end_shma + - mga_end_shma + - plag_mincha + - first_stars +``` From ddc5b8892ccd8d78287e21492202da7cea06034d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 18 Sep 2018 08:11:48 +0200 Subject: [PATCH 119/176] Minor updates --- source/_components/sensor.onewire.markdown | 35 ++++++++++++++-------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/source/_components/sensor.onewire.markdown b/source/_components/sensor.onewire.markdown index d8d9076f8c1..8cd5751d780 100644 --- a/source/_components/sensor.onewire.markdown +++ b/source/_components/sensor.onewire.markdown @@ -27,17 +27,22 @@ Supported devices: The 1-Wire bus can be connected directly to the IO pins of Raspberry Pi or using dedicated interface adapter (e.g [DS9490R](https://datasheets.maximintegrated.com/en/ds/DS9490-DS9490R.pdf)). -#### Raspberry Pi setup +## {% linkable_title Raspberry Pi setup %} + In order to setup 1-Wire support on Raspberry Pi, you'll need to edit `/boot/config.txt` following [this documentation](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor#Enable_1-Wire). Don't use the `mount_dir` option. -#### Interface adapter setup +## {% linkable_title Interface adapter setup %} + +### {% linkable_title owfs %} + When an interface adapter is used, sensors can be accessed on Linux hosts via [owfs 1-Wire file system](http://owfs.org/). When using an interface adapter and the owfs, the `mount_dir` option must be configured to correspond a directory, where owfs device tree has been mounted. -

-This component has been modified to work with devices with multiple sensors which will cause a discontinuity in recorded values. Existing devices will receive a new ID and therefore show up as new devices. +### {% linkable_title Units with multiple sensors %} + +This platform works with devices with multiple sensors which will cause a discontinuity in recorded values. Existing devices will receive a new ID and therefore show up as new devices. If you wish to maintain continuity it can be resolved in the database by renaming the old devices to the new names. -Connect to your database using the instructions from [home-assistant.io/docs/backend/database/](/docs/backend/database/). Check the names of sensors: +Connect to your database using the instructions from [Database section](/docs/backend/database/). Check the names of sensors: ```sql SELECT entity_id, COUNT(*) as count FROM states GROUP BY entity_id ORDER BY count DESC LIMIT 10; @@ -49,10 +54,10 @@ UPDATE states SET entity_id='sensor._temperature' WHERE entity_id L UPDATE states SET entity_id='sensor._pressure' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%mb%'; UPDATE states SET entity_id='sensor._humidity' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%%%' ESCAPE ''; ``` -Remember to replace `` with the actual name of the sensor as seen in the `SELECT` query. -

-#### Home Assistant setup +Remember to replace `` with the actual name of the sensor as seen in the `SELECT` query. + +## {% linkable_title Configuration %} To enable One wire sensors in your installation, add the following to your `configuration.yaml` file: @@ -64,8 +69,14 @@ sensor: some_id: your name ``` -Configuration variables: - -- **names** array (*Optional*): ID and friendly name of your sensors. -- **mount_dir** (*Optional*): Location of device tree if owfs driver used. +{% configuration %} +names: + description: ID and friendly name of your sensors. + required: false + type: string +mount_dir: + description: Location of device tree if owfs driver used. + required: false + type: string +{% endconfiguration %} From 69820f0e03480e6f99ce55d7cf7de2fcde0c7693 Mon Sep 17 00:00:00 2001 From: Ludovico de Nittis Date: Tue, 18 Sep 2018 08:44:38 +0200 Subject: [PATCH 120/176] Add additional working brands to iAlarm page (#6298) * Add additional working brands to iAlarm page Closes #6282 * It's a platform --- source/_components/alarm_control_panel.ialarm.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/alarm_control_panel.ialarm.markdown b/source/_components/alarm_control_panel.ialarm.markdown index d72261c908f..44895675cf4 100644 --- a/source/_components/alarm_control_panel.ialarm.markdown +++ b/source/_components/alarm_control_panel.ialarm.markdown @@ -46,3 +46,4 @@ alarm_control_panel: type: string {% endconfiguration %} +This platform has also been confirmed to work with the alarm system brands Meian and Emooluxr. From 900ad16bb55aac23f3ba71a54ec4865bafe7aee5 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 18 Sep 2018 09:14:11 +0200 Subject: [PATCH 121/176] Update configuration sample --- source/_components/sensor.fints.markdown | 90 ++++++++++++------------ 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/source/_components/sensor.fints.markdown b/source/_components/sensor.fints.markdown index e871ba3cb97..5181b80e176 100644 --- a/source/_components/sensor.fints.markdown +++ b/source/_components/sensor.fints.markdown @@ -10,13 +10,14 @@ footer: true ha_category: Finance ha_release: "0.70" ha_iot_class: "Local Push" -logo: home-assistant.png --- With the FinTS sensor, you can fetch your account information from your bank. This only works with banks that support the FinTS (aka. HBCI) standard. The FinTS standard used by many German banks. So if you do not have a German bank account, this will most likely not work for you. To find out if your bank supports FinTS, check the bank's website or call their hotline. ## {% linkable_title Configuration %} +To find out the configuration for your bank, check their website or call their hotline. Do not use random information you find on the Internet! As you're storing your bank account information in the Home Assistant configuration: Make sure that this configuration is not accessible to anyone. + For each account you have with the bank, a separate sensor is created. If you have several accounts with a bank, you can select which ones you want to have, and you can also give the accounts a name. {% raw %} @@ -24,52 +25,51 @@ For each account you have with the bank, a separate sensor is created. If you ha # Example configuration.yaml entry sensor: - platform: fints - bank_identification_number: - username: - pin: - url: + sensors: + - bank_identification_number: ID_FOR_YOUR_BANK + username: YOUR_FINTS_USERNAME + pin: YOUR_PIN + url: URL_FOR_YOUR_BANK ``` {% endraw %} -To find out the configuration for your bank, check their website or call their hotline. Do not use random information you find on the Internet! As you're storing your bank account information in the Home Assistant configuration: make sure that this configuration is not accessible to anyone. - {% configuration %} - sensors: - description: List of your sensors. - required: true - type: map - keys: - name: - description: (optional) name of the bank. - required: false - type: string - bank_identification_number: - description: Bank identification number, in most cases the "Bankleitzahl". - required: true - type: string - username: - description: Your FinTS username. - required: true - type: string - pin: - description: Your FinTS PIN or password. - required: true - type: string - url: - description: URL of your bank's FinTS server. - required: true - type: string - accounts: - description: (optional) You can configure with of the accounts of your bank shall be shown in Home Assistant. If this attribute is set, only the accounts listed here are shown. - required: false - type: list - keys: - account: - description: For balance accounts use the IBAN of the account for holdings accounts use the classic account number. - required: true - type: string - name: - description: (optional) Use this field to give the account a meaningful name. - required: false - type: string +sensors: + description: List of your sensors. + required: true + type: map + keys: + name: + description: (optional) name of the bank. + required: false + type: string + bank_identification_number: + description: Bank identification number, in most cases the "Bankleitzahl". + required: true + type: string + username: + description: Your FinTS username. + required: true + type: string + pin: + description: Your FinTS PIN or password. + required: true + type: string + url: + description: URL of your bank's FinTS server. + required: true + type: string + accounts: + description: (optional) You can configure with of the accounts of your bank shall be shown in Home Assistant. If this attribute is set, only the accounts listed here are shown. + required: false + type: list + keys: + account: + description: For balance accounts use the IBAN of the account for holdings accounts use the classic account number. + required: true + type: string + name: + description: (optional) Use this field to give the account a meaningful name. + required: false + type: string {% endconfiguration %} From 5ee6485ec6e71d09f0a4c4c7d1dc5dc205e4b26b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 18 Sep 2018 09:31:22 +0200 Subject: [PATCH 122/176] Add missing key and remove unused key --- source/_components/sensor.fints.markdown | 81 +++++++++++++----------- 1 file changed, 44 insertions(+), 37 deletions(-) diff --git a/source/_components/sensor.fints.markdown b/source/_components/sensor.fints.markdown index 5181b80e176..986e84e7c79 100644 --- a/source/_components/sensor.fints.markdown +++ b/source/_components/sensor.fints.markdown @@ -24,52 +24,59 @@ For each account you have with the bank, a separate sensor is created. If you ha ```yaml # Example configuration.yaml entry sensor: - - platform: fints - sensors: - - bank_identification_number: ID_FOR_YOUR_BANK - username: YOUR_FINTS_USERNAME - pin: YOUR_PIN - url: URL_FOR_YOUR_BANK + - platform: fints + bank_identification_number: ID_FOR_YOUR_BANK + username: YOUR_FINTS_USERNAME + pin: YOUR_PIN + url: URL_FOR_YOUR_BANK ``` {% endraw %} {% configuration %} -sensors: - description: List of your sensors. +name: + description: Name of the bank. + required: false + type: string +bank_identification_number: + description: Bank identification number, in most cases the "Bankleitzahl". required: true - type: map - keys: + type: string +username: + description: Your FinTS username. + required: true + type: string +pin: + description: Your FinTS PIN or password. + required: true + type: string +url: + description: URL of your bank's FinTS server. + required: true + type: string +accounts: + description: The balance accounts to show. If not set then all accounts will show up. + required: false + type: list + keys: + account: + description: The IBAN of the blance account. + required: true + type: string name: - description: (optional) name of the bank. + description: Use this field to give the account a meaningful name. required: false type: string - bank_identification_number: - description: Bank identification number, in most cases the "Bankleitzahl". +holdings: + description: The holding accounts of your bank. If not set then all accounts will show up. + required: false + type: list + keys: + account: + description: The classic account number. required: true type: string - username: - description: Your FinTS username. - required: true - type: string - pin: - description: Your FinTS PIN or password. - required: true - type: string - url: - description: URL of your bank's FinTS server. - required: true - type: string - accounts: - description: (optional) You can configure with of the accounts of your bank shall be shown in Home Assistant. If this attribute is set, only the accounts listed here are shown. + name: + description: Use this field to give the account a meaningful name. required: false - type: list - keys: - account: - description: For balance accounts use the IBAN of the account for holdings accounts use the classic account number. - required: true - type: string - name: - description: (optional) Use this field to give the account a meaningful name. - required: false - type: string + type: string {% endconfiguration %} From 0019a420cab7f8a6708213041514ff25c3ef70c8 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 18 Sep 2018 10:06:15 +0100 Subject: [PATCH 123/176] Fixing formatting (#6304) Triple back ticks need to be on their own line --- source/_docs/installation/raspberry-pi.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index 7079f6de003..31af033f9d6 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -114,4 +114,5 @@ When instructions tell you to activate the virtual environment, the following co ```bash $ sudo -u homeassistant -H -s -$ source /srv/homeassistant/bin/activate``` +$ source /srv/homeassistant/bin/activate +``` From 33eed3a65ad4ceccee0d34ae38fe92e4a57e84d7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 18 Sep 2018 11:06:33 +0200 Subject: [PATCH 124/176] Add command with LC_ALL=C (fixes #6270) (#6306) --- source/_docs/z-wave/adding.markdown | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/source/_docs/z-wave/adding.markdown b/source/_docs/z-wave/adding.markdown index c52661c0c1c..3bfb7ad66d7 100644 --- a/source/_docs/z-wave/adding.markdown +++ b/source/_docs/z-wave/adding.markdown @@ -32,10 +32,10 @@ Security Z-Wave devices require a network key. Some devices only expose their fu A valid network key will be a 16 byte value, defined in the zwave section of your configuration, such as the following example: -``` +```yaml zwave: - usb_path: /dev/ttyACM0 - network_key: "0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10" + usb_path: /dev/ttyACM0 + network_key: "0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10" ``` Each individual value in the defined key can be anywhere from 0x00 to 0xFF. Define your own key by making changes to the above example key or for additional security try one of the two scripts mentioned below. @@ -43,13 +43,21 @@ Each individual value in the defined key can be anywhere from 0x00 to 0xFF. Defi ### {% linkable_title Network Key %} An easy script to generate a random key: + ```bash -cat /dev/urandom | tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//' +$ cat /dev/urandom | tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//' ``` On macOS, this script will generate a random key: + ```bash -cat /dev/urandom | LC_CTYPE=C tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//' +$ cat /dev/urandom | LC_CTYPE=C tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//' +``` + +If the above command doesn't work then replace `LC_CTYPE=C` with `LC_ALL=C`: + +```bash +$ cat /dev/urandom | LC_ALL=C tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//' ```

From 0b0c6fc3dc5146a1cf6a99f11e3a9b25feff2bf5 Mon Sep 17 00:00:00 2001 From: ComputerCandy Date: Tue, 18 Sep 2018 21:13:45 +1200 Subject: [PATCH 125/176] KNX Scene needs to be zero-indexed (#6305) --- source/_components/scene.knx.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/scene.knx.markdown b/source/_components/scene.knx.markdown index c9752de20c3..7fd18417d87 100644 --- a/source/_components/scene.knx.markdown +++ b/source/_components/scene.knx.markdown @@ -32,6 +32,6 @@ scene: Configuration variables: - **address** (*Required*): KNX group address of the binary sensor. -- **scene_number** (*Required*): KNX scene number to be activated. +- **scene_number** (*Required*): Zero-indexed KNX scene number to be activated. - **name** (*Optional*): A name for this device used within Home Assistant. From 7b49b4de8bab05178d5338e77cc7879ea1e22d42 Mon Sep 17 00:00:00 2001 From: aisbergde Date: Tue, 18 Sep 2018 11:15:23 +0200 Subject: [PATCH 126/176] Update sensor.template.markdown (#6293) * Update sensor.template.markdown * Update formatting --- source/_components/sensor.template.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 7d612f01607..e22d329efb0 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -54,7 +54,7 @@ sensor: required: false type: string, list unit_of_measurement: - description: Defines the units of measurement of the sensor, if any. + description: "Defines the units of measurement of the sensor, if any. This will also influence the graphical presentation in the history visualisation as continuous value. Sensors with missing `unit_of_measurement` are showing as discrete values." required: false type: string value_template: From 53f3f12d5a62bc3658bd2a5fe428d775a245d4be Mon Sep 17 00:00:00 2001 From: Maikel Punie Date: Tue, 18 Sep 2018 12:20:01 +0200 Subject: [PATCH 127/176] Update on velbus docu (#6307) --- source/_components/sensor.velbus.markdown | 2 +- source/_components/velbus.markdown | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/source/_components/sensor.velbus.markdown b/source/_components/sensor.velbus.markdown index 7ec537b6e57..56233e50c8a 100644 --- a/source/_components/sensor.velbus.markdown +++ b/source/_components/sensor.velbus.markdown @@ -13,6 +13,6 @@ ha_iot_class: "Local Push" ha_release: 0.78 --- -The `velbus` sensor allows you to control [Velbus](http://www.velbus.eu) connected temperature sensors. +The `velbus` sensor allows you to control [Velbus](http://www.velbus.eu) connected sensors. For hub configuration, see [the Velbus component](/components/velbus/). diff --git a/source/_components/velbus.markdown b/source/_components/velbus.markdown index 329258ee28a..c5cb790ee99 100644 --- a/source/_components/velbus.markdown +++ b/source/_components/velbus.markdown @@ -13,21 +13,27 @@ ha_iot_class: "Local Push" ha_release: "0.50" --- -The `velbus` component supports the Velbus USB and serial gateways. +The `velbus` component supports the Velbus USB, Velbus serial and a TCP/IP gateway. ## {% linkable_title Configuration %} The gateway needs to be configured by adding the following lines to your `configuration.yaml` file: ```yaml -# Example configuration.yaml entry +# Example configuration.yaml entry for a USB or serial interface velbus: port: '/dev/ttyUSB00' ``` +```yaml +# Example configuration.yaml entry for a TCP/IP interface +velbus: + port: '127.0.0.1:3678' +``` + {% configuration %} port: - description: The port where your board is connected to your Home Assistant host. The port will be most likely named `ttyUSB*`. + description: The port where your board is connected to your Home Assistant host. required: true type: string {% endconfiguration %} From 3ea9ce4538685602801356e30915564ed99b2f6a Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 18 Sep 2018 11:23:13 +0100 Subject: [PATCH 128/176] Highlighting the package names (#6269) Highlighting the package names because apparently we forgot to do so before --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 95a7c6f2916..7e27a19c7f0 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -24,7 +24,7 @@ On Linux platforms (other than Hass.io) there is one dependency you will need to $ sudo apt-get install libudev-dev ``` -On Python 3.6 you may also have to install libpython3.6-dev, and possibly python3.6-dev. +On Python 3.6 you may also have to install `libpython3.6-dev`, and possibly `python3.6-dev`. ### {% linkable_title macOS %} From a3538d8a8075f92c4c0cac751820d0a6f2edba0f Mon Sep 17 00:00:00 2001 From: DubhAd Date: Tue, 18 Sep 2018 13:34:00 +0100 Subject: [PATCH 129/176] Adding pre 0.77 auth migration note (#6279) Since this comes up every few days, adding a note about migrating from pre 0.77 (which yes, eventually we'll be able to remove) --- source/_docs/authentication.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/authentication.markdown b/source/_docs/authentication.markdown index 503725a5f7a..f2e984cf30a 100644 --- a/source/_docs/authentication.markdown +++ b/source/_docs/authentication.markdown @@ -89,3 +89,7 @@ It will allow you to open Home Assistant instance by access `http://hassbian.hom ### {% linkable_title Stuck on Loading data %} Some advert blocking software, such as Wipr, also blocks web sockets. If you're stuck on the Loading data screen, try disabling your ad blocker. + +### {% linkable_title Migrating from pre 0.77 %} + +If you were using the authentication system before 0.77, you'll likely have `auth:` and `auth_providers:` defined. You'll need to remove these and let Home Assistant [handle it automatically](https://www.home-assistant.io/docs/authentication/providers/#configuring-auth-providers). From c521be3079cc91a7cb5a9ead19f174d97ee9f08c Mon Sep 17 00:00:00 2001 From: Adam Dullage Date: Tue, 18 Sep 2018 14:55:22 +0100 Subject: [PATCH 130/176] Added Component Page for Starling Bank Platform (#6236) * First Draft * Updated Starling Bank Docs * Changed Category to Finance * Added Sandbox Option Description * Minimize configuration sample --- .../_components/sensor.starlingbank.markdown | 80 ++++++++++++++++++ .../images/supported_brands/starlingbank.png | Bin 0 -> 26439 bytes 2 files changed, 80 insertions(+) create mode 100644 source/_components/sensor.starlingbank.markdown create mode 100644 source/images/supported_brands/starlingbank.png diff --git a/source/_components/sensor.starlingbank.markdown b/source/_components/sensor.starlingbank.markdown new file mode 100644 index 00000000000..e997e0da2a3 --- /dev/null +++ b/source/_components/sensor.starlingbank.markdown @@ -0,0 +1,80 @@ +--- +layout: page +title: "Starling Bank" +description: "How to integrate your Starling Bank account within Home Assistant." +date: 2018-09-07 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: starlingbank.png +ha_category: Finance +featured: false +ha_release: "0.79" +ha_iot_class: "Cloud Polling" +--- + +The Starling Bank sensor platform allows you to monitor your account balance data as sensors in Home Assistant. + +* Turn off the lights when money's tight? +* Play a song when you reach a savings goal? +* Sound an alarm if you go into your overdraft? + +You can find more information about Starling Bank at [their website](https://www.starlingbank.com/). Information on their API can be found on their [developers site](https://developer.starlingbank.com/). + +## {% linkable_title Access Token %} + +Once you have your own Starling bank account you will need to sign up for a Staring developer account [here](https://developer.starlingbank.com/signup). You won't need to do any development but you will need to get a "Personal Access Token" that will allow the integration to access your account balance. + +

+ You control what access is granted using this token. This integration only needs very basic access (see below). +

+ +Once you've signed up: +1. Head to the [Personal Access Section](https://developer.starlingbank.com/personal/token) of your developer account. +2. Click "Create Token". +3. Give your token a name e.g. "Home Assistant". +4. Tick the permissions "account:read" and "balance:read". The others you can leave un-ticked. +5. Click "Create" and make a note of the newly created token, you will need this for your Home Assistant configuration. + +## {% linkable_title Configuration %} + +To add Starling account balance sensors to your installation, add the following to your `configuration.yaml` file: +```yaml +# Example configuration.yaml entry +sensor: + - platform: starlingbank + accounts: + - access_token: YOUR_PERSONAL_ACCESS_TOKEN +``` + +{% configuration %} +accounts: + description: A list of Starling accounts. Allows you to monitor multiple Starling accounts. + required: true + type: list +name: + description: A friendly name for your account. + required: false + type: string + default: Starling +sandbox: + description: For test purposes. Set to true if you are using an access token for a sandbox Starling account. + required: false + default: false + type: boolean +access_token: + description: Your personal access token. + required: true + type: string +balance_types: + description: Choose to monitor your cleared or effective balance (or both). + required: false + type: list + default: Both balance types will be monitored. + keys: + cleared_balance: + description: Excludes outstanding transactions. + effective_balance: + description: Includes outstanding transactions. +{% endconfiguration %} diff --git a/source/images/supported_brands/starlingbank.png b/source/images/supported_brands/starlingbank.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1c5eff70323d8eab5c841381586f03ce01de2a GIT binary patch literal 26439 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

G@OVVlrzdtDb$gCz|xrS^N)A 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 Qfjtw}(CkRzA-9 Date: Tue, 18 Sep 2018 19:46:17 +0300 Subject: [PATCH 131/176] Fix in the listing of all sensor types (#6309) In monitored_conditions key list of all items 'current_ozone_index' changed to 'current_ozone_level'. --- source/_components/openuv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/openuv.markdown b/source/_components/openuv.markdown index a4893d35c97..acb6f184bed 100644 --- a/source/_components/openuv.markdown +++ b/source/_components/openuv.markdown @@ -74,7 +74,7 @@ sensors: description: the conditions to create sensors from required: false type: list - default: all ( `current_ozone_index`, `current_uv_index`, `current_uv_level`, `max_uv_index`, `safe_exposure_time_type_1`, `safe_exposure_time_type_2`, `safe_exposure_time_type_3`, `safe_exposure_time_type_4`, `safe_exposure_time_type_5`, `safe_exposure_time_type_6` ) + default: all ( `current_ozone_level`, `current_uv_index`, `current_uv_level`, `max_uv_index`, `safe_exposure_time_type_1`, `safe_exposure_time_type_2`, `safe_exposure_time_type_3`, `safe_exposure_time_type_4`, `safe_exposure_time_type_5`, `safe_exposure_time_type_6` ) {% endconfiguration %} ## {% linkable_title Binary Sensor Types %} From 3a076534cd2765df376ad670ef89a838e53e4d4f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 18 Sep 2018 20:19:17 +0200 Subject: [PATCH 132/176] Add details about enabling the REST API (#6310) --- source/_components/switch.mystrom.markdown | 11 +++++++++++ .../components/mystrom/switch-advanced.png | Bin 0 -> 14686 bytes 2 files changed, 11 insertions(+) create mode 100644 source/images/components/mystrom/switch-advanced.png diff --git a/source/_components/switch.mystrom.markdown b/source/_components/switch.mystrom.markdown index 924087adcdd..8d2f93dc439 100644 --- a/source/_components/switch.mystrom.markdown +++ b/source/_components/switch.mystrom.markdown @@ -16,6 +16,17 @@ ha_iot_class: "Local Polling" The `mystrom` switch platform allows you to control the state of your [myStrom](https://mystrom.ch/en/) switches. The built-in sensor is measuring the power consumption while the switch is on. +## {% linkable_title Setup %} + +Make sure that you have enabled the REST API under **Advanced** in the web frontend of the switch. + +

+ +

+ + +## {% linkable_title Configuration %} + To use your myStrom switch in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/images/components/mystrom/switch-advanced.png b/source/images/components/mystrom/switch-advanced.png new file mode 100644 index 0000000000000000000000000000000000000000..58edc028a70f85516756032b793da0a604e6d479 GIT binary patch literal 14686 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 eoplv{H!|yJ$5(g Date: Wed, 19 Sep 2018 00:36:25 +0200 Subject: [PATCH 133/176] New netdata config syntax to allow for multiple elements per group (#6296) --- source/_components/sensor.netdata.markdown | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/source/_components/sensor.netdata.markdown b/source/_components/sensor.netdata.markdown index 6cf4c3e1d86..0a1a4df622d 100644 --- a/source/_components/sensor.netdata.markdown +++ b/source/_components/sensor.netdata.markdown @@ -51,9 +51,11 @@ To add this platform to your installation, add the following to your `configurat sensor: - platform: netdata resources: - system.load: + load: + data_group: system.load element: load15 - system.cpu: + cpu: + data_group: system.cpu element: system ``` @@ -78,19 +80,19 @@ resources: required: true type: map keys: - data_group: - description: "Name of the data group to monitor, e.g., `system.cpu`." + name: + description: Name to use for the sensor in the frontend. required: true + type: string keys: + data_group: + description: "Name of the data group to monitor, e.g., `system.cpu`." + required: true + type: string element: description: The element of the group to monitor. required: true type: string - name: - description: Name to use for the sensor in the frontend. - required: false - type: string - default: element name icon: description: Icon to use for the sensor. required: false From e2aeb134bdf991a7bc3955ce3182cf0dfbec3050 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 19 Sep 2018 07:35:02 +0100 Subject: [PATCH 134/176] Adding a linkable title (#6312) Adding a linkable title --- source/_docs/automation.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/automation.markdown b/source/_docs/automation.markdown index e50db5d9bfe..6729aa4fcb4 100644 --- a/source/_docs/automation.markdown +++ b/source/_docs/automation.markdown @@ -47,6 +47,8 @@ State changes can be used as the source of triggers and the current state can be Actions are all about calling services. To explore the available services open the Services developer tool. Services allow to change anything. For example turn on a light, run a script or enable a scene. Each service has a domain and a name. For example the service `light.turn_on` is capable of turning on any light in your system. Services can be passed parameters to for example tell which device to turn on or what color to use. +### {% linkable_title Automation initial state %} + You have to set an initial state in your automations in order for Home Assistant to enable them upon restart. ```text From cd69cc7f100839d584ebc96f9e223a200596cb97 Mon Sep 17 00:00:00 2001 From: emontnemery Date: Wed, 19 Sep 2018 08:36:14 +0200 Subject: [PATCH 135/176] Add missing platforms supported by MQTT discovery (#6295) * Update discovery.markdown * Update discovery.markdown --- source/_docs/mqtt/discovery.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 75a56503e8a..7c14077f91e 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -14,11 +14,14 @@ The discovery of MQTT devices will enable one to use MQTT devices with only mini Supported by MQTT discovery: +- [Alarm control panels](/components/alarm_control_panel.mqtt/) - [Binary sensors](/components/binary_sensor.mqtt/) - [Cameras](/components/camera.mqtt/) - [Covers](/components/cover.mqtt/) - [Fans](/components/fan.mqtt/) +- [HVACs](/components/climate.mqtt/) - [Lights](/components/light.mqtt/) +- [Locks](/components/lock.mqtt/) - [Sensors](/components/sensor.mqtt/) - [Switches](/components/switch.mqtt/) From 1f6eb376b768834e2af46051b830c19ef25a0ed5 Mon Sep 17 00:00:00 2001 From: Rick van Hattem Date: Wed, 19 Sep 2018 14:04:44 +0200 Subject: [PATCH 136/176] Added timed lights with multiple triggers (#6314) A single sensor is often not enough when it comes to motion sensors so here's an example for multiple sensors --- ...r_10_minutes_when_motion_detected.markdown | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown index 65f5cb6b590..27320af7a8f 100644 --- a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown +++ b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown @@ -36,3 +36,40 @@ automation: service: homeassistant.turn_off entity_id: light.kitchen_light ``` + +Or in the case of multiple sensors/triggers: + +```yaml +automation: +- alias: Turn on hallway lights when the doorbell rings, the front door opens or if there is movement + trigger: + - platform: state + entity_id: sensor.motion_sensor, binary_sensor.front_door, binary_sensor.doorbell + to: 'on' + action: + - service: homeassistant.turn_on + data: + entity_id: + - light.hallway_0 + - light.hallway_1 + - service: timer.start + data: + entity_id: timer.hallway + +- alias: Turn off hallway lights 10 minutes after trigger + trigger: + platform: event + event_type: timer.finished + event_data: + entity_id: timer.hallway + action: + service: homeassistant.turn_off + data: + entity_id: + - light.hallway_0 + - light.hallway_1 + +timer: + hallway: + duration: '00:10:00' +``` From b885705f799f0d1ac12ff30c48372aaacf3f98dd Mon Sep 17 00:00:00 2001 From: Destix <32171782+Destix@users.noreply.github.com> Date: Wed, 19 Sep 2018 17:32:25 +0300 Subject: [PATCH 137/176] Correct title on climate modbus (#6315) * Correct title * Change title parts --- source/_components/climate.modbus.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/climate.modbus.markdown b/source/_components/climate.modbus.markdown index 62163a316aa..164ae4a4877 100644 --- a/source/_components/climate.modbus.markdown +++ b/source/_components/climate.modbus.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Modbus" +title: "Modbus Climate" description: "Instructions how to integrate a Modbus thermostat within Home Assistant." date: 2018-01-29 9:35 sidebar: true From 98b2098d5378b5195116ad23215331db0c0a21fc Mon Sep 17 00:00:00 2001 From: Nikolay Kasyanov Date: Thu, 20 Sep 2018 08:16:48 +0200 Subject: [PATCH 138/176] Add unique_id to mqtt_json light (#6319) Applies changes from #6121 to mqtt_json component. --- source/_components/light.mqtt_json.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index 6e70c8be891..cd4f65737e5 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -56,6 +56,10 @@ name: required: false type: string default: MQTT JSON Light +unique_id: + description: An ID that uniquely identifies this light. If two lights have the same unique ID, Home Assistant will raise an exception. + required: false + type: string command_topic: description: The MQTT topic to publish commands to change the light’s state. required: true @@ -262,4 +266,4 @@ Home Assistant expects the hue values to be in the range 0 to 360 and the satura - [esphomelib](https://github.com/OttoWinter/esphomelib) is a library for ESP8266 and ESP32 boards that has many of Home Assistant's MQTT features (like [discovery](/docs/mqtt/discovery/)) pre-implemented and provides high-level abstractions for components such as lights or sensors. -- [AiLight](https://github.com/stelgenhof/AiLight) is a custom firmware for the Ai-Thinker (and equivalent) RGBW WiFi light bulbs that has an ESP8266 onboard and controlled by the MY9291 LED driver. It implements the [MQTT JSON light](/components/light.mqtt_json/) platform and supports ON/OFF, RGBW colours, brightness, colour temperature, flashing and transitions. Also it includes [MQTT Auto Discovery](/docs/mqtt/discovery/)) and the MQTT Last Will and Testament is enabled as well. \ No newline at end of file +- [AiLight](https://github.com/stelgenhof/AiLight) is a custom firmware for the Ai-Thinker (and equivalent) RGBW WiFi light bulbs that has an ESP8266 onboard and controlled by the MY9291 LED driver. It implements the [MQTT JSON light](/components/light.mqtt_json/) platform and supports ON/OFF, RGBW colours, brightness, colour temperature, flashing and transitions. Also it includes [MQTT Auto Discovery](/docs/mqtt/discovery/)) and the MQTT Last Will and Testament is enabled as well. From bd861410728d1e90e9c7cdfc608e2da924e4a526 Mon Sep 17 00:00:00 2001 From: Jon Griffith <32052562+arretx@users.noreply.github.com> Date: Wed, 19 Sep 2018 23:17:05 -0700 Subject: [PATCH 139/176] Clarification of Slack integration setup (#6318) * Clarification of Slack integration setup Had a bit of trouble following along, but I finally got it and offer these updates to help anyone else. * Minor changes --- source/_components/notify.slack.markdown | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index 3e384990109..699a57ec236 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -15,12 +15,22 @@ ha_release: pre 0.7 The `slack` platform allows you to deliver notifications from Home Assistant to [Slack](https://slack.com/). -If you are planning to use Slack as yourself then you need to obtain a [Slack API token](https://api.slack.com/web?sudo=1) to be able to send notifications. +## {% linkable_title Setup %} + +If you are planning to use Slack as yourself then you'll need to create a [new app](https://api.slack.com/apps) under your Slack.com account. After creating the app, access the OAuth & Permissions link under the Features heading in the sidebar. Your OAuth Access Token should be located there. This is the key that you'll use in your `configuration.yaml` file. + +

+There is an app credential Verification Token on the Basic Settings of your app. This is **not** the API key you want. +

+ +You will also need to ensure that you have added the appropriate scope when configuring your app. In this case, in the Scopes section, add the `Send messages as user` scope, e.g., (chat:write:user). It is also possible to use Slack bots as users. Just create a new bot at https://[YOUR_TEAM].slack.com/apps/build/custom-integration and use the provided token for that. You can add an icon from the frontend for Home Assistant and give the bot a meaningful name. Don't forget to invite the bot to the room where you want to get the notifications. +## {% linkable_title Configuration %} + To enable the Slack notification in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -85,6 +95,7 @@ Example for posting file from local path: } } ``` + Please note that `path` is validated against the `whitelist_external_dirs` in the `configuration.yaml`. Example for posting formatted attachment: @@ -106,4 +117,3 @@ Example for posting formatted attachment: Please note that both `message` is a required key, but is always shown, so use an empty (`""`) string for `message` if you don't want the extra text. To use notifications, please see the [getting started with automation page](/getting-started/automation/). - From 81a15489e8bfb085801a013bab4067568bfd637e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 20 Sep 2018 11:34:02 +0200 Subject: [PATCH 140/176] Update release notes --- _config.yml | 6 +++--- source/_posts/2018-09-15-release-78.markdown | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index b590068ef8b..73f04dcb2f8 100644 --- a/_config.yml +++ b/_config.yml @@ -142,13 +142,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 78 -current_patch_version: 0 -date_released: 2018-09-17 +current_patch_version: 1 +date_released: 2018-09-20 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0781---september-20" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-09-15-release-78.markdown b/source/_posts/2018-09-15-release-78.markdown index c778e032ac9..449b4efb79a 100644 --- a/source/_posts/2018-09-15-release-78.markdown +++ b/source/_posts/2018-09-15-release-78.markdown @@ -31,6 +31,23 @@ Also on your profile page is a new list of existing refresh tokens. These are al - Add Yale Smart Alarm component ([@domwillcode] - [#16377]) ([alarm_control_panel.yale_smart_alarm docs]) (new-platform) - Add OpenTherm Gateway climate platform ([@mvn23] - [#16299]) ([climate.opentherm_gw docs]) (new-platform) +## {% linkable_title Release 0.78.1 - September 20 %} + +- Updates documentation repo URL in PR template ([@frenck] - [#16537]) +- SnmpSensor: Fix async_update (#16679) ([@mtdcr] - [#16716]) ([sensor.snmp docs]) +- Handle chromecast CONNECTION_STATUS_DISCONNECTED event ([@awarecan] - [#16732]) ([media_player.cast docs]) +- Upgrade netdisco to 2.1.0 ([@awarecan] - [#16735]) + +[#16537]: https://github.com/home-assistant/home-assistant/pull/16537 +[#16716]: https://github.com/home-assistant/home-assistant/pull/16716 +[#16732]: https://github.com/home-assistant/home-assistant/pull/16732 +[#16735]: https://github.com/home-assistant/home-assistant/pull/16735 +[@awarecan]: https://github.com/awarecan +[@frenck]: https://github.com/frenck +[@mtdcr]: https://github.com/mtdcr +[media_player.cast docs]: /components/media_player.cast/ +[sensor.snmp docs]: /components/sensor.snmp/ + ## {% 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 ac31a5105a7e4c7677a81fcbb3ef44e2d3ea1469 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 20 Sep 2018 10:45:20 +0100 Subject: [PATCH 141/176] Adding links to the graphing options (#6320) Adding links to the graphing options --- source/_docs/z-wave.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown index 6ee6a284fa1..6df8aca7acf 100644 --- a/source/_docs/z-wave.markdown +++ b/source/_docs/z-wave.markdown @@ -18,7 +18,7 @@ Before configuring the Z-Wave setup, please take a moment and read [this article ## {% linkable_title What is Z-Wave %} -Z-Wave is a wireless communication protocol designed for home automation. It uses a low power, and low bandwidth, mesh network that allows devices that aren't within direct range of each other to communicate indirectly, via other nodes. Any device that's permanently powered (not battery powered) will help build the mesh, if you don't have enough powered devices, or you locate these poorly, your mesh will be unreliable. +Z-Wave is a wireless communication protocol designed for home automation. It uses a low power, and low bandwidth, mesh network that allows devices that aren't within direct range of each other to communicate indirectly, via other nodes. Any device that's permanently powered (not battery powered) will help build the mesh, if you don't have enough powered devices, or you locate these poorly, your mesh will be unreliable. You can [view the state](https://community.home-assistant.io/t/graph-your-z-wave-mesh-python-auto-update/40549) of your mesh [by graphing it](https://community.home-assistant.io/t/z-wave-graph-without-the-python/64275). There is a limit of 232 devices in a single Z-Wave network. If you need more devices then you could set up a second Home Assistant system with its own Z-Wave network and connect these with the [MQTT Eventstream](/components/mqtt_eventstream/) or [MQTT Statestream](/components/mqtt_statestream) components. There is also a limit of 4 hops for Z-Wave, so placing the controller as centrally as you can is important. From b464765a1c4ef64ce9adeab3752d118f6b8823ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Thu, 20 Sep 2018 17:50:24 +0200 Subject: [PATCH 142/176] Met.no weather platform (#6287) * Create weather.met.markdown * Add files via upload * Update weather.met.markdown * Update weather.met.markdown * Update weather.met.markdown --- source/_components/weather.met.markdown | 44 +++++++++++++++++++++++ source/images/supported_brands/metno.png | Bin 0 -> 24183 bytes 2 files changed, 44 insertions(+) create mode 100644 source/_components/weather.met.markdown create mode 100644 source/images/supported_brands/metno.png diff --git a/source/_components/weather.met.markdown b/source/_components/weather.met.markdown new file mode 100644 index 00000000000..1c31f4a0357 --- /dev/null +++ b/source/_components/weather.met.markdown @@ -0,0 +1,44 @@ +--- +layout: page +title: "Met.no" +description: "Instructions on how to integrate Met.no within Home Assistant." +date: 2018-09-17 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: metno.png +ha_category: Weather +ha_release: 0.79 +ha_iot_class: "Cloud Polling" +--- + +The `met` platform uses the [Met.no](https://met.no/) web service as a source for meteorological data for your location. The weather forecast is delivered by the Norwegian Meteorological Institute and the NRK. + +## {% linkable_title Configuration %} + +To add Met to your installation, add the following to your `configuration.yaml` file: + +```yaml +weather: + - platform: met +``` + + +{% configuration %} +latitude: + description: Manually specify latitude. By default the value will be taken from the Home Assistant configuration. + required: false + type: number + default: Provided by Home Assistant configuration +longitude: + description: Manually specify longitude. By default the value will be taken from the Home Assistant configuration. + required: false + type: number + default: Provided by Home Assistant configuration +altitude: + description: Manually specify altitude. By default the value will be taken from the Home Assistant configuration. + required: false + type: number + default: Provided by Home Assistant configuration +{% endconfiguration %} diff --git a/source/images/supported_brands/metno.png b/source/images/supported_brands/metno.png new file mode 100644 index 0000000000000000000000000000000000000000..79a82c559ceb3ec150713867e6ff91633016cf80 GIT binary patch literal 24183 zcmeFZc|4Tg`#3z3ltk~cmAwsR--cnRBo(q}$(m#dlVvQ!SSl1n?}!)-+4p@nD51!b z!C)|!tYZwu7>wb$y}zH&_xE{Tuix`~{(GK(zVpwy?=$B**LALQo$H)yxzAg}hdO82 zF0z3@pfmUH-7yA%SoA=kV=gC805zB=MfN~(!B^YD*97*=*Wbb033Tfz?1_`eeGdm` zCu1jvr-5ESozy`fW`e7!g|CIa9>fvmA?3POWikN{FJ$DTWo0}(j>h#*Yad@@r~gI9|F*S{Y2XVd z8Dl3O7~Iw5u!^zXv2OvuBABq6V zAqL*AzyvzD-+?*8kN&-X2YLw(cYO*`R?=2hP?c3yQP#RECwJ%eEoE)_J1Qz*E$v%c zw-sfCDgAd#K=h9u|9i~=FaN!2ojif1>J6;Py?bE~ zKp-pW`*&`c28^#x;sf!WUzDdeLcCk6ub(uzmB6NFes*^SXOj;+h!h;da(`~Ywp3b& zFS8Y!o-JjoeZ+F0n(C1Kqw<}?&2=O?%8x@G^y({UM^+(Vn@Ys}qb+Wp>_49S&(qsB zuA@@q{O4mw<Kp6`IFwU=Ar|tcM2!y$e)A&|yn=Xj%KdZ;5>j)(_Bc zZ7QeqmRrxU>9xYVl+H+i7^;WRpJlbhlp80C4#y6lnl@u+34{N)mhnT+62k^6q1V^xnu5dLG` zVNk^`v3VMA=evEgs$)3MaP`^!)T!ABsZ;D*&AChA}KD*uvZqpatRg`S^}*vz)jkW*o_T6+%UQPjI+fhPO< z_H1TSr3*9C;@pi1K3v8YIb9OS6n9&n4&dK51oAJy)F!dUE zWsYhD8?gf|Rs)vKbA7t~Nkwzn)Im`?k(9UpBEL#j)8@uG$VY@)7XqLbbjzNtBYRi5 zpS97q4u$K*gxbMu4+H-oHKRiNDlQ7^DOC$qVta`_xy^*g-Q|dA9i3+=2ra~9@lo{A z-WM*Re)Y`xILrevsLW4kE{1@yNQ$lg)^|Oq^W2RS`I?KZbaoSe3hF?}7>4EN{+r{w zgmQ?<5p^f^W`cOkNowy6Hl_=s%=@hAoS@*@^w`zpKs>Mgzug+FrTi)rD3!>}7;NVnv`!Pg-K4edk5M4RdRpu<((?)=9qoso zm0>N@m1iO{vDH_m)B_9njyQom6hFpc#WvOQdi&cT-%^Ka>yx+|To(G3LaE&fV^`Of zTzjmy9&^x*=S=adEO=~kBtI`cAI}viRkU+u*TpZLy71~7--m-BwMASe_4PXK4tH1Gb>hkZAzkReZoBM`*0%J zXwoX71sDTPYNkPf|28>r?AldLtJxk?%{NjC z`gbNj{E<#|Kdei)jkTP5X134~+e7uDGzwYYORSw2zDmOoNqg$eZ?W^Wg-x8bJ`XE` zmi~CnIK_}2A;SK6$Pj5ey(v$CjwzC5la{noT|+t? zwIpMDrsA;FmD&6EC^x$L(UXspCjEIfij$D#yWXh_dq(pM#8MK35ZsSfM;hXY{?@Z~ z>63VwK1z#`vz^5P(t&iA6J($eB@vaCR<4-tdvHxsN+J=MKya&T{IftcEt5VU3#CY9 z+1k+1h=um{fQ>^>3d8OMwY*rxT1nc30(M@bTi3rco;Dh;o~M~J_6uh`{JhFyl~s|t z)@TF#)D&{HzjvhLzHL%F%2{-Hp-6j;OQQ-pC8lQJk9lBM*cAstAQk_cd8g9I&iQl&{La zX_Q$D5=K~2D6ye1vvnjk8t-+ka7(&KX!Fo&9Z4Lgh)hw_)mCz1YcHhK(!zd5bwZ0F zf?Z7~6{0R)6oRiaZkvDtUbiJwpr3-_GtK-jLrd%*Cv?-aT|D0$sAWnR4AsSa5VA5^ zeS$b#G3IYq>G>@51?eTL)AnD3-M~HXK9bu zo!0MlWdqSp>Rlk-_iLVhzH%FR;mMoDw_hgf`M(fMRTvNZPo*2?cI}`r4H zT{l;r{(-xg&0?@@1UtC+A%%_l>|AuzDtuAqJ@i9VxhBSSi|_9~%|2#$&xXrQ_@A?@ z-TX&J+PjS_^!l&yEh=`)mO?GM=7VP$D(azQ1K^O0z43jnjinv-A!f5Ly?1Wib7Nj) zw)z6jT5Cw~+~k7ZH9fVE%bnytzUll(X=UktKDghF0n0 zp}Cl{2HoR;yuJ|(eV&*vo={gqzaM(?KX6+=RoCl~W}znW@u+q9rkJY0t% z2o!M%&AGC)Wh+=>Y%3vN81&1)!DN_J!{G`^(G=dNp(!E$DwnSsW6FGd+;Fjzv@+{R z?B5B49;Gt+WzLfRi!GqD089F#2K3^NJ1iT1CzaPnADV&{p?!o6uaf*oG5l1`fV98=R09rR)=5jg8QZrUB)Wumxnl`3ttC&jmd=axtkMc+eV+@ z*07!pI{c}5?8XVV)foXTI&yWlrH|^g`)cnT&LbT^B~Mg!{j|7#;{`(Yi6z`x$0*(dZZ9fHvrYNXrfQs(D;R_n+OeZXNY9$YB zg)^(ag`)LDatNBxMkyuq0Dp>l3ZuF?*OM4x~tW)FMmzdEWPa7jh?T4NU}5N z4lp4m-CoRhh01IqO0A?rL3~%kCFTYuw0K_UXboGt>~(5o1Z>U9Qy*S;%cpQ9p1O(? zjmQCWcM~DmwzW>*x(Gqyaih7dp2+L5irVds(@l9-TLP_oeva>!c(?D9g^S`IjQlp^ z;DX(7kJpZH>@2=(d1$oBkhzft%VxlvGhG`ijB|DVR1R8GBn;J0)6b{adg3duch&kb zXa0Jn7}rbZ039>w^zxn@iibwzXyE{w9ELbEGu;@`Og#WTu~)>BRL|oH4L^{UH}2_u z)ldG=KorU?Q}e`{vk+*_)7z=9ujPK0n98CCwi9E6lhQY$ z`dl$9Nxd&Vjhz6iZWZGmvTFw0&QE=z_IdS`EGmN9!q0z}KT(lqKDn-I(I}I0N?$B< zEbo$nkkiV@Zre+mJTx!q6CyFBNi*?OavWr}#y38xL{~eiz<@v4?(a4_Ei#Gdr~|Jq zNdG#Yi_iaJU61h;*&m-Q=bH=c@%riUxK043r2u{sj2MUI-LS+E<5>)he}A%0O3G0%37T+NxULpM z-IF|L!KLb_e_FCX`+KeBuy~fd=r6byeaoYOT&V2Sqp=!9e*$P$a1CNP1ix0sY9)jV z?2gOrOY?l3j|Is-IA*eKzA|Q3mo!}&WqVK2XZ8>>M7E*y4Fn4r<%0WzZ~9=k&t#3f z-;&0J-m;she&t=?>r?DEd96caHutNy_-1}C0MKNB8M(JmkiqEYhqnSYBckH`E9%vO1+4Ev~lV!O7h$kS8XCS6-KJ`qdC7xG^X|5yn^kDLi5 zkVJ5m1+J`-V~?2IGJt8*>}Br=9b12)x!3gBW!Cj8nd?g2P*D%GNUJNzu(Dsr7S{di zlWK|O!=`m_vuO-gSimG^B&{@3s?IC8#i&fDrmTejptI(-)bL%Vwk1aP$(6ZtD>B;W_OJ}qKJOEvB`RjBZtS&F7-4u{e0-ws3q{|Qa0^|2^; zWuJO3_GJ%!ESCi|ZFo{|Ot=8oTigjwO|J9(V;on6gSUv{6n32PMx`8rH!5FwM$IP3 zXvZq)5DIQMEyzq-a_{`w`g_hTc~{q5SsDb2x^3UBQ9v>LL^S4{vk&bxNK%qnrJnuc zkY)utkW~28#UJ6f9$kA2`|^;qOqSsp6w;J;`d&TlJ>{zs3V2Jm9s+`K&tN6>(SCL2 zPE=msz<#oAuKH}{owO9sm4UaH)Le!aVv^| zT><0ECB*nRyH#U3%B;mA4PDAL%M`=8XJuV-yJi>WC}Vj4&dz_EuUJlK<>^?=e}=)Ymx1lrQ1y| zakytmIKz>=;)@g4v|EWj;d6^#?LBt6>bWdaV2{jL9%!D$!ZKHPHA@|e@CKdC72q$> z@S4?^)&{H_2L?a!)w&!zI(bAzU~)H+VBvXC1lTL9?ZH8PLn(N`4?I2%<{&? zeb&5eiS-|kO>gFyT~P z%7t#!%Sg+&2F0A^iNz2``V-1$zlI4KV@yjhEg?UvjwKHopf|RBddefw!`1GaTR< z)U3BuX}TafXs7p!lh@?xw z-Md@!4(S7a$*i|ObZv(=zIw*`+S!=!k)*+|A?%hW7Ley&V=bQ+x=SJC=M%ztGk8_A zxdTfca0?n(|LH3CJ*h=W zx=Ijkf63Y4jE^G*teT}Dnm(mbV3URhJxH^I&pnZM3sPOrKEI(RjAZ|G*bVg-(<~M)I1_aKbq=WQ{E@DC&}d)gee8y0j?0G^ zO$E-l%>5zGcv1&~V(|W%I{bMX#b%J)E0fa(yVz@*d_CPLz7Hx%HjqBE-tM4@)~! zLg;;VVXikG9A221IkEpkv=vP4wy`F8@&&ixLiE3hQioVTZotV-(M;xt=5@$}k)-%& zs)>EKiL}-s=5HAvMyWT&6)ai*6JGyQ>l3Fr+i%Ysp7CZKb_{`)U#B!C7*9Xi>5u$& z%7SJr=Ed}GA1DcQre=Ap%4~E#E52-|wK$ium;eGr{!virzY*e@v$Q0_9#Fcp^ED#G zJth$<(+*)T(#aF;rpB6})ebPI5#fx_+wmPYYjxGIuD=ZWA#SHTcguVDAZm5YAjB0} zCzsq$(royadPjHOCru7rHbVv+2JAOrL8WtY?tI@&ua@aMZq#|c>R+LJE`>}OL>hwo ztkj}_9SG&aFQc`)t3mr|$@g4@9mJjv>^tIgt_iisIjk8*6|ot9?re@wy4Fd#C!+(- zA~nChO8qSS=Df1KUA&1xtBo7XA}~u0vFSAjZ9l3x_jyt{zwoMl5Da>Jk@#kS3$&El zmLQt!7jWxjQ7lm+>T2W_qHWT&^am?y<$)uoPd6+M#RmVfR$Fu~q!f{#g?ydsoYq^y zU&q+r(so(6*6H^683l`DttR;Xl>$jR4m!AH-~D0VYVPU9?h%w(9yLL$$Zliy!24{^ z-!D^26R(!idS0FK>Arzq3kH@%BYJj0TG7UDD~9;tSeFwg-EkEz7=-FHPexs@YY4V= zr!8I+HmngQE$d5H)%MXmYe_tyHYl*$JRSVnA)?-V?>f<{> z3Ep&m4^FQsm=p7WSue@fPYBx&9qz|ZTvm;IMC1u|{hPQ{xX9Re7G&ZOve&afI1n_p z7l6rIYXo38B(5-MwZR-x;tc2H5}(nDErH*-hIeP^te}G#G3~Z6J+=Cs*Yw#A=P{6} z{eufh4&qpq)yP`u(%H>aaJ_X836Z;dV%H00VrpVg6xSL!_-(VsNXIb%jw#5h>Lrw2 zbb}qaW;rTjb3K|@GFH1PLOW5KF-3gA{XT-Kg+@YUlhaI~79IO;S<}!Du`@eE8_p5^ z-&r*USvWKKz6^t8*340R=YsmUUFSy9q)a4>hSoYoNP+ieTz^kHr1e0i${W|pokyJB z&hzK;jY^e9m+F{w)zwAd8#A};^)OXQw3Q`trgd9ryqz$o$XU916um=s`|HqxwL1`& zpi}2`NUI+ApbuKjWg4wo;Y+aYL^z+;V>XcBQ9#=~=Vt4t^|7iCLF&lD^$o%=hX+o> z#L1YlvID{cCXRBc%)SHJQxY%Ud|hr&M>g$+I4)gh&d+MX)xoRd2Ef!ejI8MAw7;NWu8Q0l|x{`CF#4b++Gbn5v*rhY`Uq%3Q-CCXd0@Y1*KwDb z-Q;*iY24MRAORk8@}@xcd`^^JuWs<{c>6dA)cx0Ic`h@=Y6&+#G+F!@Xib7Hk~g+M zEf`wg=PQ>k)p)%LHPsvk_Wb#Mz-VxMu6>iakliFzTp4u06ZAs5G*Of#Q@f*lt7pMS z&i#Gnf*S=&NXG-4VSCza`7u(JkfHgCV57@4>PbJ=m6=dAC5eqV!wme_mT+K(TnbMQ z2ep-dx6LJnOZMoZm_ZpAfn&l8>tz!PmS39{#C{iX5y^g?-ck^>pneLJ0Xa%rP`t|W zN#=HF=5jJClnFEhkOB(3M&(Um(`5o(6ghg!%^BEA>LoV5vWsb@qRP2I85aO9W{e9w zjwvem!VEfbqt6wh`Q9g`b1Ij}6C%28kD1u-ge^$2fLvnR5*)07Y_4}SYv-E4j;UNZ z6&vOC_i_Tz(-o}5{jJ+f%pgUgm^Kh~5Pb91_2dSehsRtD)fxvbTSVcmvBu-#-{+Mi(B>MRN-sb&>?={@tp zcF`MM{i@pgm$`Gb*vbjRaG_lGu6@N5Ms?g8yG`G+UIGV~V%GDOMz~#(#3x=#r?lGv z8wvyg4u&p|faR6CnDzRJ@jdv25##CSXAMGIq=}=189p9hI40C^h*)&&xm-bNd5x_h-9+$($AjnE1O3n1c81#Wp*em(7Bx$*sQ4PXYpekCiRkj7PYNj|2tG*8`NP zKfR}+Rb9B#5Ff5iP04&fovZ&Q25a9p<-~3vhBp#~5J|v{vwsG5^7~qjMUf^7EI-Z{ zZm*nAjD5^5vzWI3aViHG{VQjn8}6ui^W^87aRc)MR@*vkh0l~$F3<4@WiJs(=&yM(QEeAYDuom$>(7!0B%_qU`?(fJNgBq0D;`ts6*Tu z4q^$A9Z&BuB?D6z1_f-Z`awe!yu;x1HJ2|M6YeWB?`PG-L#sDS{u$otkxk)mx#44i z(Hkq|HN}{Pu{wVw>R~6o11uUnFSPf4zzn%#!o?i@>5_VY*{j0GoSbS)5bQ*)uoihx zv5x2!f-HmDF5>jlqf(xAholhuP2esyQuN(rME?j$r3|;RG(uX2Yam_}H!M&4`@>!K zzBhS#Tk>1}{?!tQ>hWzI|6XlNcuvIOk=~N@tnHGYkXE&W=bB-^|8px77EE=tw}RV# zRmjBMLKpWbhqe^$EcfV7Htb9t4*3ClS|GjED@bWLzN(?t(Ti&CavfNP8pNF^G7pVp z8DCilj-Hzl)ASMP^tEFdUEk-^xvl$fSL?nO&U?oZeJcYQLg^fJ-~6R5<~ETNl8e-7 zzd^3%F4CrYnd61J(6YzP$>Z7}v*7IRx$v$@4d4CmweM!IF+6eMO_kC?bGspyWop-n z2Cts8ayk&2@iINdI7qhY6fa>lrh|q;+}gx;g?ZvhP2Lm3aWi!=QVAB4%^?G8byZub zEfA~|>!UJ3^~PAeEPRLCwt{^Inn&=w!%`M-rNsolbC5Gt`tAtA zJNPz|On-)9c+9LzV75&>Ky^V7HU5DDXah32nw8!`H+^oAU}z2(B(B3YXGk{4Y&{ZG&A~kCKnPz_P_ah zQ6=o|DO+mjG#qqzqiNNiIw)KdNq*?`d7;O3mbP^v{B15r zo}?rtji3-iv7Ob(TYW)=uyn z;WbWZ+Smqkfm(J&W`gL;c~de!u;kEXC$z!WsU$=4U5CHKL?eX7Sj%C3YU5x6yb+d* z*ppBsB-_isVU#!R$&t#D#A`3~z`-rA7hqdLk0wEPwE=fnKCVac^$NwJ620P1&WXD4 z&h|G+t>6NCD!5tQ!&*deK4#G}sue<3Z{}ZMp*2lBf}3$HA8SROCR?C2eCs{Cc3(D^ ziI8#4!h%%8I6o!}bBFK0{qWnv&l{SMRXzM_*a7W~p%5F@ZaQNWzh>D*r)N{QNo$b? zDEOQSXjB34MBh)d4aFLvCwvaG$zM88*$G4*T8YL^LAY9(D1}d;sgbkLcV^Vr*U zw|X3zzB)waN_92dH9#0FvpW6X9#-vhU8=*wnre9 z^l7<6oYw0w^hs_gPP7_EzUVg{>6VOt?6> zSEu1@i#2(W20g)yWpaNzc8hvoz}u*G@~zl=yPdq#WKq3Pg@pN~*#PkC4|BcZo_F*7 zf=+TSt9d%8MjD%MH-x;aK@u04;GiJDI~sBybGX882kpDXG^dt~JikIs3@Y(o{_0wk zv@Fa*s2d+@Fyo{@XjVZeWsqKk+|;5(as5eCR1aq8^F0(-SaU?K466$M7!-)`+Ts!( zY*B@|69gXFj5*IeCm6?#ok#IZ(*b*bHEnnKiO+|_%ch)NvmJq&w^%%E)YD%h41(WN z9STG^OQkGfD-S2us&13+7K>??#>5*2-&=Gtcy7CRe;nK(0OVe%{)yQLoo_9w?$HT6 z#PGq9x?i=2=SKE!H4qla(M~jVQ_ee2?rrHZ6CdSHX>#G__r5mjZxV6Mo@Oh=qF!&Q zyNJuH`tK`asZ0IVc_R((jy8L$N!09bwA^*1U4IckdqD-PbB|64>Uwi+yZ1>~>h{Wm zAFZMBI8qCQSQAHeEG9ipYphV?4Jh^$V1=fH|9$pzW!dbjz!h~5xxT-ssJzU$**n`R zL*xsyw+y0)mD3Re)%GHWzT!@3jIJ|xkLzxlvJZ8d-hX5N?x&d6yza6k7Nj-0G*>%+ zu*e_SgSv>_3~xe2U)clO{D-yR)P+2p60W5C>@2F;6UVYbl059p{!SB~M~p6--stHi z&iUD(AcT8PM#}F-p#$rCYV=VmhKydQOn;P5C@M!64iSjfp)jj)a9)kp(h7W@D^ilJpryt?AY z`@YAxE1c{RH|tYf3MTmczV(aq+qMB+$m z#B+E=!){vrJJ^GRk)if0iuiE*8zwU{%WXu-QpO1;kVJ^mcJ zz87Cxg!EDR(fD!71l~GPNBLDr^t0Tl-|Y7eHs9p4$wSgHf9P|nZ87IaKjh1BC_~tB zzMEx$(${EWr>09!-s!)yXGW7C5C`mDbd-;O{1V<~!aLHwW`po&vc1N)Q!;oaqB=z8 zc0<$_Lt_@Qt@D$HHcPp7g~eCq+obQQjukjmEQeMn@373UcL+i7biZCHU?q8V;US() zNhPmy3K$Yq8n{49&l?G}4nLdmlG9p-wUdDjy!2+4-f znG?N5ZX~=-*~pjfh@3;~GTc{jY5O=Jlw`NuhI~YM`~-AKaZ<;%NuR&Ie7N1>aV1+v z&_=4Jmlx#54iNPtDd=34$*>z4*EAlmdS=tLzy4OdM`;+O5F1 zw9<=9zxicaa8jR;Buw!<;9V-#W%y)QOFJD)MK&*c8G93~hbO>2?(ta{!$Xs)R#Af-njgX>eKa|0G z`=kQmEY)Kj5bD0}-&0K4SXz11a5iAfzKrIi%R69JXX(SK@c=3ulZef3_xZb)+a_r; zz5yjpguf-H{MmkCmw=keKsRna?}0l_T9hsM3JBs;*R_d1+~UUT)`-XkzvK3@KrF2F zS>%Ea`E~9qPN8R+2hCOb!@Qk&ZZg;}&>@@@Cyw!VDEE}kil!1~g$4IJ9QSqM<%(}O z0_)b0#4o+yGE;fos;rT1rs*VeE})v-0veO$sorQ$gdU=x)s3rhdvK!Fvkytf_+Qi0K#-E}{ix4#FYd+7+>&+uP=*Q)vc!;3VLC#D}dL$dcfV0 zJjaVKYP2?vrSl4|X-sr(GYr1c%mUf=s=qhkE)#eg8&6o)tRstzhUwmo^n#xd_gLw?G&T(JImAJB>G@e^*iO;wKd(tx)(}LRKuua%oG<+ zS~61U!VF|`yf~-=oi)X*2$<5H{$FbA5f!_6trzQWrof``eFnY$V^NAjs*xjACt5r( zff&<#F0S_8OIXccY`9j&%2;sA*kPa9t3G}3{DGMqkX(MaCF>MCI7#A5QTB3H-p?-J$9Zl=Ztu>F11m4U=3C_iQZ$q_--~LSWG-LH9`G$a%5?&7OL`RQkdw<3 zqDfuyiokKaWU3c1!sx&$u0CfV>!<2H!t0Jqo#v$U~c$BGdGZaIxOM5(iE36{Qv~E4VQ?@+#OJa zCb)P}@4~Rr#$|(?sL;K$Df};mUzR64!<6l)VgP>)Xgi@Tq5XHTOCw|C0|J#UK7EeI zyy^quld_HHH{*+CC87~%r)3-9+m-S>ASX1@?>2T+ZL{5vqpxGQ;&#aG)J~CJvps1= ze39aD2MJR31-Y%@$D1bqMMVW*g0qT6x&e+U1M?xi%g zAJ`JuYqhh@_YiP=S>3`uIy2R58!;<-=-nTb)VWRk_KZB?X0j&3#a!OC7?fLZ%w7>l zjFinuf72S_rsWa(lxI+u;jb#L{^$JS&su@Ob-Ly0*0Xhl(+(0+b-YeN$t`9spe^5D zR-Xd=v5N(Ft(asl9y8(CeZ6_@d%4tWRAPt&4~LS9ho<2NNu;ziDj)!*2 zo+yX;;l^_U!|fIA$!b@WM%0SXIP>V9B$0n!^`v&47M7E+KPU2-?DbIF9>Fp_o!ri4 ze0I~@r_$%IL3Nae>R1bpIq^f}s%_k*bzO|J^X`?v!LKqcQwb>6l>wc{UV`J8hS^KY z106AIjP%28iHgOs!Wr_7MzYZOz1MSh@rB-;)y;ygfyyOI?+Xg)zx2P(YmB=SEH88R z>ZKjysEKl|B0XLW`>^m(X0Qe0;+2--u9M5L+1B#c=Wmmzx;hr@g$(>Oss;G;l*_<) z-0b!AH^J-@>XYc0cU&Jk;~O*~>Z-O;TQBlHb+dhv$%wHo*W*94X55booOxj%Ob@U| ze*w?sp0Ug5J1x{d!p$5n4}W?w<%}L$cv>U)@rxkkN!?(`;HGubXj1N(I(-kc8pCoH zvxuks-t#!vJqhgE_^O|K8$mJjNeCBldcc=oZN%?5pIo@a1g}9PuX*cht`t8nd(EF^ zD*dkP3R8=1_5m0NW6t>a;Bz=Q=Sx13)c5s^+`codSMj+{uSnLvPcO@DAD6^>GK5mt z^sw(sz$^qzaW!VH!p+O<*`)MEtGcXnT}yJq1z*6>hZomM_Jay2`HTu_%M(SBD=_t_ zlxpkHGTqg~cv7H?fQK0}Z7QOI<;nbb-Dr5m&))`OQX_HjuX|vRdO_7+%NN5i&p1qW zwvR6>bHV}z8wIWWQVl#?-5(kr$n*yye)pVB40y>E3T7Nckv6~2KgiTca&S!ndxz{9 zTd>u9Y8ZuWe#_M>%c7o)lW>xDaXzDQrChJ!&~nZ{x|HDcs;i3cnt)PsFg@c}<1hZ* z4z4wQorc52)Bet9`b>5UzXu(fcukI6CF-WUYFUNkQab!ICj*Hz2lVq&WQ@s`YJ3ZF zEmQC{K?AG*2B(yS9G_{~RYte- zz-U;l2Xl)&22=SD=`)^NZCBpm`0#b8hxorYi9;n`{em1rS7amdvd_Qf-R)aK4UpRn zukFG&r*DQH9?$>5bSTaqWPD&#Hu#+T>_v}$Pl|dk_9a?{(9-JmCi!K!JnwzvDn&=o zMiMD$v?f*~^zEbcL(K#?A0o?eMV;|)+k0L3DHjU1>LPKw;7>(>Uf0J-{fQ@VwUJjH z!!g~|rhQprzu+e=^(ag5mQB&Q#XA)J~syGjp4S$Ldkab8nVVpn?_S7eE$v6G8uIO0O>05?;9 zIqad9ro*9AFQq$hlqG*zi8E?zJzcIARv>8UHxTbhYJ6Cs_ed>JX z1K7(vsIn_Jdux>Rs?c%ctyz0q)0MR>SZIL4<%puP>(y~YAy~q%%?O))hOj2z^ALp5 z%ua>$Sd%}!z&bq%?-YaxSoM;oSw>Jp@rIb|6ug+IKHc!?68TCft;nz?X%PR{TD!2; z2J5%i0*}5sjKnl^mZ8OokoMvvL5}B>B__rGhk@nn#EdweZtj(LBKQy_a!U&IkZ^6Af|X@y;xW?Ga^+sMuEf%eQ+FsJmR&_3d$ z8vnt@&4FbHa=TfiWt4TRq#uRf^qc7(+dygonmkO)l1=^KJLwp7 z?A@C-u9Z~x?=y3*A=nB71fd%B;ia(_IWwpt&+^lh@G?w^qb`~0#mYx>~?w@}{o2j4FFx_9hqOL5AfKr8}KY1=pL~7i|>|tc_ zqu~CF)~$GwKtelO*E@fauH{a!1rKD=EAL_^Yc6A%U{#N)g84lHxdY$dZtrg;1$#Fc zix@=DpBIZg)VE;6)L7QNw|&Pc!B_vd>kH>sqN7bzrFBdsB5A61$Ch)!LZNdi$DgVu zq#5PS{+_xEcf^-yma$ex$nc}TxPT#rjBRJ=AjUJ8^mt{bf^S!e^`_J@6PLB8iYM}9 zHcu@Zhwp1i#t~}g9e1GYnV3eQdulZ<75eo;_6=R9*F=viY&eLP@!Qt%egB@>ie&xP zG|$(>*HXq>E+E67+O*{u2S^xS=lg84)6g|?*<6fa$R0C&Dga;C!$Z^}Xq*U3Ii5SP zf8R`f?7i4z>uZO}zt_g4`F3cv>M5k3$A@4=du!aS?&{U_?b|Qj%(t*JPAD`DWWR?u zonoB$Rww%YNj)@-;eV2;&oT?FKG;&R7D%w(ZicnE2MWS!vw~A#!m!O2e}!4((FpfS zm9@57;%cH0XHF>Iv1cO*=3|?KUF#1@am%AJvz`=0%V;TW-`DFbZ)tg}?Kan0NgsQ> zC%^j8Oe7;B7o17Dx#2n4=t=i?_%<_<+C-Ea)e(O&GFZ)879@?e@R!kPfF1ZiWo|cC zw7T23HmQF`$_(#nc$!w@THw4X+rJ-TIF1rjGEwJ?&DNZD$w5pV7B9cs+}rbR3UP&+ zD??Vb@xFMkn;#a`+|?v8k6UpL`6k)fr^(U_Toaa&rN@$+;Kb`U-*%ErE0Z-Z26oLHQTzX{pyKbP!F=kvewSKq2Frn6Wj%{f1aY@#|IeOA?eHZu^A;{0 z6r^j<#z4QAWQkqAqSW#v459vkneM>>IbdIQIDUhl<1StZ^MhpA3{rPpLOGtL*Wzj~ zZ!6kZW6ntEK`snwn>5~gpSkAL-s2zNgB+vmb;xSiuJ`k^^Nir(x+ZF$x93ZXlkoDc z$|{rZF9qUV?H@RIuh~1|e|Dp$_H`KE1LQGd5Sh$ya}6JXR^@pA04l2 zf*h`^+neKbYM^OE=A)YcmNt)1oDmwYuHU=C)%15r6>{3trKZ`qLg3}r`ub?jAqfbs##I@_r+yTc zZwp8`b;X&sFkXDEH}3JZ0EYW{CRyJjq+u1G(Vb$Sk}hl>h(@K)=ZG@A)&{fAp&M)e z2J!t9(r>FzICa%=bXS72NX8TJ5=b)64aQ?*tjNRhGfXNL{pt)LJ_=E10zRD*9Vi`g z+|rFOCWGn1^hEwYx@VhJm%=zY+&M> zOjm&^;h;<*+R+dO}&OT+DgXzSr;04%+_b(gpkGS;L){bUoovn)YY( z)Hpk6_54xbJxto54Z8JKL$Y)V2x-H2V!jz~C#D`h>gr~a*z_@zy~_F&*nv9daskbw z@fQ|A^YK6FM+0L2;WpOtG@*sft7UMjO=9%1_qm%#7dqIahn?2D@RBRFPq|D}x$ORX zShUt!5(@YDmV~3I7}L?M4g>S2>W`w>)`GBuR8QM}EjEKVbbx;<$`=#JXb7~4+FgEs z?5X>oD`EfN-2E`8l7V3mzOYvJ0AX;$CtIFgR9DI(5Cu0!LFl)`-$zkkpfCrz@KJ&V za9_pA|KoiXV+PS6kjlxJqL`QDcLq6j5-}z7xsoH-4YHgx1Gl$Bog=2y04(-Dab+{KE{|nqw?b8`|h2 z(Ezg>k1|b`fUnOB&H@V|fc@uDD#QQd)fq>*6-WzfL14-~ZM)+33Dj*RO&iirguo*1 zxBnEpDRA-++zP)Vo8sqQx$E;0UrDwcqcMdcDgWp^rZ9%)zZumVLDzmCX3u-}V6?qW z0qF;bs?m;`@#wl2#mcjV>~}T-Qx6&2-wnDa`ZN1a9xk*DyT8>K;e^uI2-W1?Pn=(% zwhTecPQBtWH;DK}oAhis%+0F|5Hud0^t04E-9pLz&B*9Gux13!g@&4}qihqbvrv!l zZ>w!-v_oK>#`bX2cKh+Iy3%>ic|aMuh|kAvs>-d3UsQ(D>40?dqBQLyyqUBVd&|Hm zvPC4EJ@B1fwuWSGG z%yrFkueI*ay6@+?pS3<~Ejt>e#fzq{Hq^BS4@8P*g|ZW)B0n?6#PlemCWtjUgHwkz z|9RM1DIaCxkG@Fw!SI@8i8#2bgJ01hqPN=6sppeHxTk+IZ!{5);W;?fUzE4e&)vk- zcsp@~yXOm+-}W$tGTf-h*eaL>LF!;P+Fj^*$k!w8w2*cz&WXr^&{zW_`O58q`;|{)l1=6l>-$uog zQKx;kB^Zn4Ezvm)&pbC}{-MFnE0(r&!!M89_sF@pM#0^7d3|$e`P%bb(%uxXX7e^a za_sMOd8A+!#8~1yK4D8OD;6GSzZQ7gdT95^VWG{B<{GI%7F$a;LtSP!4e5B{?BK%I zeK`Zn^p$?R*|qkcg`32_u3IZU3GlU8;v#-n$s*`m=sdvd_zt<`TM{Jzj%?{r9sMPR(AETwDp@qJsO z22sdUz5md;buOdcaAWAB-nlQ^n);&diCltzg7SmbxZY)~M`E=Onaa%JBO6KfHP`d` z0^DdL{*V0$zb-o;7~(`fRXEDJKL=G;Xc7Lpgl^1Yhk>=FbY{{j{Zn!-7~;7v{o2) zy$cIDGd2R#moK~R6)u$CTdxX5qO?Io^``=VH1*JYF1e+tCnro~I+9qFOewGCMTBzQ z>Db6_XlZZVy@>2>!oFvTwFMQzjZnS`h{U>zDUp6p3Ie`gj*i(j^@LUI52hJ>6WNfR z_ip0cx5y@pD^`P%#lf(d+g~rul1N^kJE_fKxIks_0^XDr9#aCK7*|J?e!pyjX(O5S z<<%9u8wKJwVZbmSq%N%feC$qyv~q?vo&(+pCSlzB4HfkO2dBM34{$#MB_q zPm-}CFG2%rHJD;EmZWdrvmc{BoSxP&O}H;D*#O;eC;&z6k)W&?jknz}z|AFhBo9|^_#F3+-(#u@K`S7^ z6}Pe~7qo}~#%u03)gjvBDs`8oOB1!DSp6rA_F&MU!p;u}MMhwF)XAyjjU;njV&8!@ z%pLOEGtc*Q29a*Dz0E;}*j-n0Q>_#ni*r^^Y&^IffDR5XHtkB>vUj3cd$z9l9@{h1 z$rTe2H{Bkkd_~`ZO*z1cpK%%{zCGh_PpZRK5{hcERGbYf!D8g+rI!~LcJrF+$db+v<0iiO_WtgLl6c~L=hLLIwh@%-T@vD&Okzd&snJ+tzGJhxSeSP|Z zZXB1jUNO)5eH5_{T6ma@sLZ2kf?;1-wb}=^kKN9vuIe0%rfE44HawziDVeoM-!#Vw ztO_j)lzB;|V>984E}_3w=k1i5dht)eA7-0NX|5AqC1vLx$il78xv0~z@pz1`5<~@* z9GLM84H$KDAX%3b{oSa84q!58%?4k0YA`H>Z5KYsTLANZ`rCtFZ+;F_{@EV!=tzRc;9v5#F?J;tVRd6hlF1Glz!OjNy3V52 zQ7h=LGJ(0|qhry>eKl7=XMTqvcLdqT}OaJj%SnxG3`gU4a|`ggDj(!4)f8 zx>ieUCfA_2ojYqY^x9|81vw`Q%XNcpq~fMGH<^D12-+9Y)Q+w(|l5x)5RKk{!XVCiUw5{wlAYIy)AI$LU1Ci(A`u{upIgu3W>S{Q;X?+w z#_&XQ&!q6C2v`u)hY~ISsMC}c&?1QAc2Nhpf-)zxA~oEA<}Dy&(3k+d&l?u2oioiC z7?S8qvP2rzK?R?B8i0{pm4@Mss5&hc@EAbFmF|1CjqBRz5(X1UXz@xf;F-?)uCCUOB(S-s1G)5dP1}6r z!dCIdc8^3n-H-Vh|7JPVWO^d#9aD)IJ8a>lbqO|jKn=1B1yo_C-dpf!Nu9K36V@XY zIHf-4RZEQMnlf#S_ryYNtME^U%kynMhd=&uL}NVHzF;<;M=Q~-eD5uKr9vC8*4KyZ zDuA4(tnYGm+p|}6pE&6C^nn_G#UQP)@ZAF_waI69;zO-eb$hkeLRgxXv)Z#;uT;Li z8!u8WR{rh!50P(hbG93m?wkBMS|cSKVto3P>QL(WgY4ML6SQX5*ukcX~)kN-C*)spN%7QKFCX zywm8{KNoqXZ?1sr8a_J5H>!%>X&u6QHH93!yEfvSVV4tXOkL;TsP*^S;rj>~` zrUIaRom+-c4-ONBx&~%Xd2Z=2;;B8P--{NOYhu|MS(OUfmo_}z%W;T+_!kYavzNiA zXAn3-bXg(ca2oMXy554dVz61Tp4}Q%$6!}?Fc*u{Q$h?fU|N((T?5GOXBF2#NvVDW ze9qWPYa6P9B)>e^bj-DKOVS0JsGbuE!%8!1&Od!$A%2tR5X^F{OLdEo2pcN>&7Kgg zcP8J(E`|{HjH4Vl(KM2TAAG^oQfR@7XB52UjeQK-30+ca&|9-_KlWT49|1#g(u!oN zOg9VKes2PIT+tH^pJR?;4sZR1su_m;vfGEp6Hgb`EZ#I)y1?yh$?X%wnI%=x!liOw z@k+3mdXdqIm7WygWa)b6_%V?*tIV>zm>4VA+zKW(FUK{(*jsUqlNtP=h1qG~iLJtS z%(o3oY$C36SZMi3+J~5msZb>GZ5-Z;1-#)lVCMf-X}z!fdzr2R~kC%}{N$fP=>RPF6Z1El`p+*7eA@5$2k^$EU= z70@2#R>gbTVu-=4cPA}e3w<}jtzUL2XcV^hPp1>0L#G9P923M_B5+!{_QmRo#(CDkE1V zt*9M2OazgsH(u zj$-N~y#1jgTq0D_+C!`!>))L>B<0rWAvKt*l^uF&jjQ^hA5}o44+I%E{1qv( z|Er_vy1)MfeeC`Q;cpPY*U;Y}{C@&rtQb;;D0g+w%<1S{UUl9H$CLjkx4(4j-)o7L Aod5s; literal 0 HcmV?d00001 From 1f4aad31cccfb48cc6aae1c9313f2f047d30b680 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=A9=20B=C5=91le?= Date: Thu, 20 Sep 2018 20:24:18 +0200 Subject: [PATCH 143/176] Changed save_on_change to default to False (#6321) --- source/_components/light.yeelight.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index c446d5950f7..326fea0ecf6 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -28,7 +28,7 @@ light: name: Living Room transition: 1000 use_music_mode: True #(defaults to False) - save_on_change: False #(defaults to True) + save_on_change: True #(defaults to False) 192.168.1.13: name: Front Door ``` @@ -39,7 +39,7 @@ Configuration variables: - **name** (*Optional*): A friendly name for the device. - **transition** (*Optional*, default 350): Smooth transitions over time (in ms). - **use_music_mode** (*Optional*, default False): Enable music mode. -- **save_on_change** (*Optional*, default True): Saves the bulb state when changed from Home Assistant. +- **save_on_change** (*Optional*, default False): Saves the bulb state in its nonvolatile memory when changed from Home Assistant. #### {% linkable_title Music mode %} Per default the bulb limits the amount of requests per minute to 60, a limitation which can be bypassed by enabling the music mode. In music mode the bulb is commanded to connect back to a socket provided by the component and it tries to keep the connection open, which may not be wanted in all use-cases. From 67514b8d6905dce2a4e2df3af1092ec58fb5355e Mon Sep 17 00:00:00 2001 From: PhracturedBlue Date: Fri, 21 Sep 2018 02:55:50 -0700 Subject: [PATCH 144/176] Add asterisk_cdr platform (#6264) --- source/_components/mailbox.asterisk_cdr.markdown | 15 +++++++++++++++ source/_docs/asterisk_mbox.markdown | 3 +++ 2 files changed, 18 insertions(+) create mode 100644 source/_components/mailbox.asterisk_cdr.markdown diff --git a/source/_components/mailbox.asterisk_cdr.markdown b/source/_components/mailbox.asterisk_cdr.markdown new file mode 100644 index 00000000000..61597bdfeff --- /dev/null +++ b/source/_components/mailbox.asterisk_cdr.markdown @@ -0,0 +1,15 @@ +--- +layout: page +title: "Asterisk Call Data Recorder" +description: "Instructions on how to integrate an Asterisk CDR within Home Assistant." +date: 2018-09-12 06:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: asterisk.png +ha_category: Mailbox +ha_release: 0.79 +--- + +The Asterisk Call Data Recorder provides access to Asterisk call logs on the Asterisk PBX server. This mailbox is enabled automatically through the [Asterisk Voicemail component](/components/asterisk_mbox/) configuration if the `asterisk_mbox_server` is configured to provide CDR data. More information on configuring the server can be found in the [Asterisk PBX configuration guide](/docs/asterisk_mbox/). diff --git a/source/_docs/asterisk_mbox.markdown b/source/_docs/asterisk_mbox.markdown index 438ed0fd422..45bc4071a80 100644 --- a/source/_docs/asterisk_mbox.markdown +++ b/source/_docs/asterisk_mbox.markdown @@ -56,6 +56,8 @@ Before beginning make sure that you have the following: mbox_path = PATH_TO_VOICEMAIL_FILES cache_file = PATH_TO_CACHE_FILE google_key = GOOGLE_API_KEY + cdr = mysql+pymysql://:@localhost/asterisk/cdr + ``` - **host** (*Optional*): The IP address to listen on for client requests. This defaults to all IP addresses on the server. To listen only locally, choose `127.0.0.1` @@ -64,6 +66,7 @@ Before beginning make sure that you have the following: - **mbox\_path** (*Required*): The path to the storage location of mailbox files. This is typically `/var/spool/asterisk/voicemail/default//` - **cache\_file** (*Required*): A fully-qualified path to a file thht can be written by the server containing transcriptions of voicemails. Example: `/var/spool/asterisk/transcription.cache` - **google\_key** (*Required*): Your 40 characters Google API key. + - **cdr** (*Optional*): Where to find CDR data. Supports various SQL databases as well as a file log. Configuring the CDR will enable the `asterisk_cdr` platfom. Once complete, ensure this file is only accessible by the Asterisk user: From f857cea3bcd726dc6dfff9b33f598acf6bb56336 Mon Sep 17 00:00:00 2001 From: Evan Bruhn Date: Fri, 21 Sep 2018 20:00:41 +1000 Subject: [PATCH 145/176] Add Logi Circle component, camera and sensor platform documentation (#6249) * Added documentation for the Logi component, camera platform and sensor platform. * Updated Logi Circle camera and sensor platforms based on feature changes. * Renamed `logi` component domain to `logi_circle`. * Bumped HA release version to 0.79. Renamed logi brand image to logi_circle. * Fixed typo. Removed redundant definition of last_activity_time sensor. --- .../_components/camera.logi_circle.markdown | 69 ++++++++++++++++++ source/_components/logi_circle.markdown | 40 ++++++++++ .../_components/sensor.logi_circle.markdown | 43 +++++++++++ .../images/supported_brands/logi_circle.png | Bin 0 -> 10629 bytes 4 files changed, 152 insertions(+) create mode 100644 source/_components/camera.logi_circle.markdown create mode 100644 source/_components/logi_circle.markdown create mode 100644 source/_components/sensor.logi_circle.markdown create mode 100644 source/images/supported_brands/logi_circle.png diff --git a/source/_components/camera.logi_circle.markdown b/source/_components/camera.logi_circle.markdown new file mode 100644 index 00000000000..1b525400700 --- /dev/null +++ b/source/_components/camera.logi_circle.markdown @@ -0,0 +1,69 @@ +--- +layout: page +title: "Logi Circle Camera" +description: "Instructions on how to integrate your Logi Circle cameras within Home Assistant." +date: 2018-09-08 11:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: logi_circle.png +ha_category: Camera +ha_release: 0.79 +ha_iot_class: "Cloud Polling" +--- + +The `logi_circle` camera platform allows you to watch the still frames of your [Logi Circle](https://circle.logi.com/) camera's live stream in Home Assistant. + +

+You must have the [Logi Circle component](/components/logi_circle/) configured to use this camera platform. +

+ +Logi Circle cameras support the `camera.turn_on` and `camera.turn_off` services. This will set the streaming mode property of your camera accordingly, controlling whether the live stream is available and activity recordings are captured. + +## {% linkable_title Configuration %} + +Once you have enabled the [Logi Circle component](/components/logi_circle), add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: logi_circle +``` + +Configuration variables: + +- **scan_interval**: (*Optional*): How frequently to query for new camera stills. Defaults to 60 seconds. + +### {% linkable_title Service `camera.logi_circle_livestream_record` %} + +Initiates a recording of the camera's live stream. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Name(s) of entities to initiate a recording for, e.g., `camera.living_room_camera`. If blank, targets all Logi Circle cameras. | +| `filename ` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id }}.mp4`{% endraw %}. | +| `duration` | no | Duration of recording, in seconds. + +The path part of `filename` must be an entry in the `whitelist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file. + +### {% linkable_title Service `camera.logi_circle_livestream_snapshot` %} + +Take a snapshot from a camera's live stream. This differs from the generic [snapshot](/components/camera/#service-snapshot) service in that it sources the snapshot from the camera's live stream. For battery powered devices, this will wake your camera from sleep to perform this action. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Name(s) of entities to create a live stream snapshot from, e.g., `camera.living_room_camera`. If blank, targets all Logi Circle cameras. | +| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id }}.jpg`{% endraw %}. | + +The path part of `filename` must be an entry in the `whitelist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file. + +### {% linkable_title Service `camera.logi_circle_set_config` %} + +Sets an configuration property for your camera. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Name(s) of entities to set the operation mode for, e.g., `camera.living_room_camera`. If blank, targets all Logi Circle cameras. | +| `mode` | no | Configuration property to set. Allowed values: `BATTERY_SAVING`, `LED`, `PRIVACY_MODE` | +| `value` | no | Mode value. Allowed values: `true`, `false` | \ No newline at end of file diff --git a/source/_components/logi_circle.markdown b/source/_components/logi_circle.markdown new file mode 100644 index 00000000000..5b891755da2 --- /dev/null +++ b/source/_components/logi_circle.markdown @@ -0,0 +1,40 @@ +--- +layout: page +title: "Logi Circle" +description: "Instructions on how to integrate your Logi Circle cameras within Home Assistant." +date: 2018-09-08 11:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: logi_circle.png +ha_category: Camera +ha_release: 0.79 +ha_iot_class: "Cloud Polling" +--- + +The `logi_circle` implementation allows you to integrate your [Logi Circle](https://circle.logi.com/) cameras in Home Assistant. + +## {% linkable_title Configuration %} + +To integrate cameras linked with your [Logi Circle](https://circle.logi.com/) account, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +logi_circle: + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +username: + description: The username for accessing your Logi Circle account. + required: true + type: string +password: + description: The password for accessing your Logi Circle account. + required: true + type: string +{% endconfiguration %} + +Finish its configuration by visiting the [Logi Circle camera](/components/camera.logi_circle/) or [Logi Circle sensor](/components/sensor.logi_circle/) documentation. diff --git a/source/_components/sensor.logi_circle.markdown b/source/_components/sensor.logi_circle.markdown new file mode 100644 index 00000000000..aa42c0218c8 --- /dev/null +++ b/source/_components/sensor.logi_circle.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Logi Circle Sensor" +description: "Instructions on how to integrate your Logi Circle cameras within Home Assistant." +date: 2018-09-08 11:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: logi_circle.png +ha_category: Camera +ha_release: 0.79 +ha_iot_class: "Cloud Polling" +--- + +The `logi_circle` sensor platform lets you monitor sensors connected to your [Logi Circle](https://circle.logi.com) cameras in Home Assistant. + +

+You must have the [Logi Circle component](/components/logi_circle/) configured to use this sensor platform. +

+ +## {% linkable_title Configuration %} + +Once you have enabled the [Logi Circle component](/components/logi_circle), add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: logi_circle +``` + +Configuration variables: + +- **monitored_conditions** array (*Optional*): Conditions to display in the frontend. The following conditions can be monitored. If not specified, all conditions supported by your camera will be enabled. + - **battery_level**: Return the battery level percentage from the camera. + - **last_activity_time**: Return the timestamp from the last time the Logi Circle camera detected any activity. + - **privacy_mode**: Return the privacy mode status from the camera. + - **signal_strength_category**: Return the WiFi signal level from the camera. + - **signal_strength_percentage**: Return the WiFi signal percentage from the camera. + - **speaker_volume**: Return the relative speaker volume from the camera (0-100%). + - **streaming_mode**: Return the streaming mode status from the camera. + +Currently it supports all 1st and 2nd generation cameras. Cameras without an internal battery will not expose a `battery_level` sensor. \ No newline at end of file diff --git a/source/images/supported_brands/logi_circle.png b/source/images/supported_brands/logi_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..61a8c72dc501ca238d62136d4798dbf44eff46b0 GIT binary patch literal 10629 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 Xxp!xM(@PF$uLSAq8Y649(NX^kK7-~u literal 0 HcmV?d00001 From 3d82dcda607449caa2ddf035a9d703e920a61679 Mon Sep 17 00:00:00 2001 From: aribarreto Date: Fri, 21 Sep 2018 07:16:47 -0300 Subject: [PATCH 146/176] YLDP05YL Add (#6280) --- source/_components/light.yeelight.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index a5b9547d243..83b1fda3353 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -60,6 +60,7 @@ This component is tested to work with the following models. If you have a differ - **YLDP01YL**: LED Bulb (White) - **YLDP02YL**: LED Bulb (Color) - **YLDP03YL**: LED Bulb (Color) - E26 +- **YLDP05YL**: LED Bulb (White) II - **YLDP06YL**: LED Bulb (Color) II - **YLDD01YL**: Lightstrip (Color) - **YLDD02YL**: Lightstrip (Color) From 90fd72da7614e434aa7760d07dc6830e52e22483 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Fri, 21 Sep 2018 17:34:52 +0200 Subject: [PATCH 147/176] Add unique_id (#6262) --- source/_components/camera.mqtt.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/camera.mqtt.markdown b/source/_components/camera.mqtt.markdown index f0e903a37a9..411a37d19de 100644 --- a/source/_components/camera.mqtt.markdown +++ b/source/_components/camera.mqtt.markdown @@ -30,4 +30,5 @@ Configuration variables: - **topic** (*Required*): MQTT topic to subscribe to. - **name** (*Optional*): Name of the camera + - **unique_id** (*Optional*): An ID that uniquely identifies this camera. If two cameras have the same unique ID, Home Assistant will raise an exception. From 4051e3a483531aa9f00b7938690c37724bd2b0eb Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Fri, 21 Sep 2018 17:35:44 +0200 Subject: [PATCH 148/176] Add CO Sensor support for HomeKit (#6300) --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 74bb8a7c48a..b1ea53ff54d 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -272,6 +272,7 @@ The following components are currently supported: | sensor | TemperatureSensor | All sensors that have `Celsius` or `Fahrenheit` as their `unit_of_measurement` or `temperature` as their `device_class`. | | sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` and `humidity` as their `device_class`. | | sensor | AirQualitySensor | All sensors that have `pm25` as part of their `entity_id` or `pm25` as their `device_class` | +| sensor | CarbonMonoxideSensor | All sensors that have `co` as their `device_class` | | sensor | CarbonDioxideSensor | All sensors that have `co2` as part of their `entity_id` or `co2` as their `device_class` | | sensor | LightSensor | All sensors that have `lm` or `lx` as their `unit_of_measurement` or `illuminance` as their `device_class` | | switch | Switch | Represented as a switch by default but can be changed by using `type` within `entity_config`. | From 8dd993c8a32ff8c1a7511a5cc8aaf74808ed2246 Mon Sep 17 00:00:00 2001 From: Oncleben31 Date: Fri, 21 Sep 2018 17:38:00 +0200 Subject: [PATCH 149/176] Typo correction in the 'set_fanspeed' params (#6326) it's not `fanspeed` but `fan_speed` --- source/_components/vacuum.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/vacuum.markdown b/source/_components/vacuum.markdown index 041edb7d661..5448d3d85f1 100644 --- a/source/_components/vacuum.markdown +++ b/source/_components/vacuum.markdown @@ -106,7 +106,7 @@ Set the fan speed of the vacuum. The `fanspeed` can be a label, as `balanced` or | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific vacuum. Else targets all. | -| `fanspeed` | no | Platform dependent vacuum cleaner fan speed, with speed steps, like 'medium', or by percentage, between 0 and 100. | +| `fan_speed` | no | Platform dependent vacuum cleaner fan speed, with speed steps, like 'medium', or by percentage, between 0 and 100. | #### {% linkable_title Service `vacuum.send_command` %} From d841bf706adb4b1bf9af37fec61d439b6763c07d Mon Sep 17 00:00:00 2001 From: DubhAd Date: Fri, 21 Sep 2018 16:39:07 +0100 Subject: [PATCH 150/176] Clarity update (#6323) * Clarity update Even without `recorder:` in the config, the recorder is configured with the default settings. Updating the docs to reflect this. This is something that others have commented on in confusion, and I got around to verifying today on my test (0.78) system. * Update recorder.markdown --- source/_components/recorder.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 7ffae0d13d8..d843e6f1200 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -18,7 +18,7 @@ Home Assistant uses [SQLAlchemy](http://www.sqlalchemy.org/) as Object Relationa The default database engine is [SQLite](https://www.sqlite.org/) which doesn't require any configuration. The database is stored in your Home Assistant configuration directory (`.homeassistant`) and called `home-assistant_v2.db`. -To set up the `recorder` component in your installation, add the following to your `configuration.yaml` file: +To change the defaults for `recorder` component in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -128,7 +128,7 @@ Call the service `recorder.purge` to start a purge task which deletes events and | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `keep_days` | yes | The number of history days to keep in recorder database (defaults to the component `purge_keep_days` configuration) -| `repack` | yes | Rewrite the entire database, possibly saving some disk space (only supported for SQLite) +| `repack` | yes | Rewrite the entire database, possibly saving some disk space. Only supported for SQLite and requires at least as much disk space free as the database currently uses. ### {% linkable_title Restore State %} From 52ef4c7b80503b8bc00914c1d6ca36d928873e61 Mon Sep 17 00:00:00 2001 From: Jonas Karlsson <1937941+endor-force@users.noreply.github.com> Date: Fri, 21 Sep 2018 17:40:30 +0200 Subject: [PATCH 151/176] Updated configuration examples (#6329) Cleaned up configuration examples since they had names which was logical with old way of configuring. Removed scan interval in examples --- .../sensor.trafikverket_weatherstation.markdown | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/source/_components/sensor.trafikverket_weatherstation.markdown b/source/_components/sensor.trafikverket_weatherstation.markdown index 152d95316ac..d6635769511 100644 --- a/source/_components/sensor.trafikverket_weatherstation.markdown +++ b/source/_components/sensor.trafikverket_weatherstation.markdown @@ -28,7 +28,7 @@ To enable this sensor, add the following lines to your `configuration.yaml`. ```yaml sensor: - platform: trafikverket_weatherstation - name: Trafikverket Road WeatherStation Kungälv + name: Trafikverket Kungälv api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Kungälv monitored_conditions: @@ -92,7 +92,7 @@ Click [here](https://www.trafikverket.se/trafikinformation/vag/?TrafficType=pers ```yaml sensor: - platform: trafikverket_weatherstation - name: Trafikverket Road WeatherStation Kungälv + name: Trafikverket Kungälv api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Kungälv monitored_conditions: @@ -104,16 +104,15 @@ sensor: - wind_direction_text - wind_speed - platform: trafikverket_weatherstation - name: Trafikverket Air WeatherStation Lanna + name: Trafikverket Lanna api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Lanna monitored_conditions: - air_temp - road_temp - humidity - scan_interval: 600 - platform: trafikverket_weatherstation - name: Trafikverket Precipitation WeatherStation Nöbbele + name: Trafikverket Nöbbele api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Nöbbele monitored_conditions: @@ -121,5 +120,4 @@ sensor: - road_temp - humidity - precipitation - scan_interval: 600 ``` From 4832ae832eb0eaf66f7f8d8c0191df6f2a7c309b Mon Sep 17 00:00:00 2001 From: Ravi K Date: Fri, 21 Sep 2018 12:25:20 -0500 Subject: [PATCH 152/176] There is no step 9 (#6331) There is no step 9 in the setup document. I corrected that and added a hyperlink to 'TROUBLESHOOTING THE REQUEST_SYNC SERVICE' --- source/_components/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 3530db78161..1b141f49abe 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -73,7 +73,7 @@ agent_user_id: required: false type: string api_key: - description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see step 9 below). If not provided then the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this component you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. + description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see [below](/#troubleshooting-the-request_sync-service)). If not provided then the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this component you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. required: false type: string expose_by_default: From 24b1de1bf6045340c2df4cc2e63e80de3fdaf861 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Fri, 21 Sep 2018 20:37:03 +0100 Subject: [PATCH 153/176] More titles (#6332) Added a couple of titles to make linking into the page easier. Also expanded on why capabilities are useful. --- .../device_tracker.nmap_tracker.markdown | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/source/_components/device_tracker.nmap_tracker.markdown b/source/_components/device_tracker.nmap_tracker.markdown index 061ae8a153e..11b0e0531db 100644 --- a/source/_components/device_tracker.nmap_tracker.markdown +++ b/source/_components/device_tracker.nmap_tracker.markdown @@ -2,7 +2,7 @@ layout: page title: "Nmap" description: "Instructions on how to integrate Nmap into Home Assistant." -date: 2015-03-23 19:59 +date: 2018-09-21 18:59 sidebar: true comments: false sharing: true @@ -43,6 +43,7 @@ Configuration variables: - **exclude** (*Optional*): Hosts not to include in nmap scanning. Scanning the host where Home Assistant is running can cause problems (websocket error), so excluding that host is a good idea. - **scan_options** (*Optional*): Configurable scan options for nmap. Default to `-F --host-timeout 5s` +## {% linkable_title Examples %} A full example for the `nmap` tracker could look like the following sample: @@ -73,10 +74,13 @@ In the above example, Nmap will be call with the process: An example of how the Nmap scanner can be customized: -Add the capabilities to Nmap. Be sure to specify the full path to wherever you installed Nmap: +### {% linkable_title Linux capabilities %} -`sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip /usr/bin/nmap -` +On Linux systems you can extend the functionality of Nmap, without having to run it as root, by using *Linux capabilities*. Be sure to specify the full path to wherever you installed Nmap: + +```bash +$ sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip /usr/bin/nmap +``` And you can set up the device tracker as ```yaml @@ -85,5 +89,4 @@ And you can set up the device tracker as scan_options: " --privileged -sP " ``` - See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 0711657f5b380b989a55fd0af8646f349c3178dc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 21 Sep 2018 21:44:41 +0200 Subject: [PATCH 154/176] Move setup up --- source/_components/google_assistant.markdown | 65 ++++++++++---------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 1b141f49abe..3cee8f16401 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -25,6 +25,37 @@ The Google Assistant component requires a bit more setup than most due to the wa To use Google Assistant, your Home Assistant configuration has to be externally accessible with a hostname and SSL certificate. If you haven't already configured that, you should do so before continuing.

+## {% linkable_title Setup %} + +You need to create an API Key with the [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see [below](/#troubleshooting-the-request_sync-service)). If you don't provided it the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this component you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. + +1. Create a new project in the [developer console](https://console.actions.google.com/). + a. Add/Import project, give it a name + b. Click on `Home Control` card, select the `Smart home` recommendation. + c. Create an Action, under the build section. Add in your Home Assistant URL: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. If you have set `api_password:` add this password to the URL. E.g., `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant?api_password=[YOUR API PASSWORD]`) + d. Click `Done`. Then click on `Overview`, which will lead you back to the app details screen. +2. `Account linking` is required for your app to interact with Home Assistant. Set this up under the `Quick Setup` section + a. Leave it at the default `No, I only want to allow account creation on my website` and select Next + b. For the `Linking type` select `OAuth` and `Implicit` + c. Client ID: The `client_id` from your Home Assistant configuration above + d. Authorization URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant/auth`. If you have set `api_password:` add this password to the URL `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant/auth?api_password=[YOUR API PASSWORD]`) + e. Configure your client. Add scopes for `email` and `name`. + f. Testing instructions: Enter anything. It doesn't matter since you won't submit this app. +3. Back on the overview page. Click `Simulator` under `TEST`. You don't have to actually test . +4. If you haven't already added the component configuration to `configuration.yaml` file and restarted Home Assistant, you'll be unable to continue until you have. +5. Open the Google Assistant app and go into `Settings > Home Control` +6. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead you the screen where you can set rooms for your devices or nicknames for your devices. +7. If you want to allow other household users to control the devices: + a. Go to the settings for the project you created in point 1 in the developer console. + b. Under the gear icon, click `Permissions` + c. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role + d. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 3 +8. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: + a. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) + b. Select your project and click Enable Homegraph API + c. Go to Credentials, which you can find on the left navigation bar under the key icon, and select API Key from Create Credentials + d. Note down the generated API Key and use this in the configuration + ## {% linkable_title Configuration %} To enable this, add the following lines to your `configuration.yaml` file: @@ -73,11 +104,11 @@ agent_user_id: required: false type: string api_key: - description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see [below](/#troubleshooting-the-request_sync-service)). If not provided then the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this component you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. + description: Your API key. required: false type: string expose_by_default: - description: Expose devices in all supported domains by default. If set to false, you need to either expose domains or add the expose configuration option to each entity in entity_config and set it to true. + description: "Expose devices in all supported domains by default. If set to false, you need to either expose domains or add the expose configuration option to each entity in `entity_config` and set it to true." required: false default: True type: boolean @@ -114,6 +145,7 @@ entity_config: {% endconfiguration %} ### {% linkable_title Available domains %} + Currently, the following domains are available to be used with Google Assistant, listed with their default types: - group (on/off) @@ -135,35 +167,6 @@ $ cat /dev/urandom | fold -w 120 | head -n 1 | base64 -w 0 | tr -dc '0-9A-Za-z' If you're not using Linux, you can use sites such as [this one](https://www.browserling.com/tools/random-string) to generate a random string (containing mixed case letters and numbers) of up to 80 characters. -### {% linkable_title Setup %} - -1. Create a new project in the [developer console](https://console.actions.google.com/). - a. Add/Import project, give it a name - b. Click on `Home Control` card, select the `Smart home` recommendation - c. Create an Action, under the build section. Add in your home assistant url: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. If you have set `api_password:` add this password to the URL - eg `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant?api_password=[YOUR API PASSWORD]`) - d. Click `Done`. Then click on `Overview`, which will lead you back to the app details screen. -2. `Account linking` is required for your app to interact with Home Assistant. Set this up under the `Quick Setup` section - a. Leave it at the default `No, I only want to allow account creation on my website` and select Next - b. For the `Linking type` select `OAuth` and `Implicit` - c. Client ID: The `client_id` from your Home Assistant configuration above - d. Authorization URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant/auth`. If you have set `api_password:` add this password to the URL `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant/auth?api_password=[YOUR API PASSWORD]`) - e. Configure your client. Add scopes for `email` and `name`. - f. Testing instructions: Enter anything. It doesn't matter since you won't submit this app. -3. Back on the overview page. Click `Simulator` under `TEST` - you don't have to actually test . -4. If you haven't already added the component configuration to `configuration.yaml` and restarted Home Assistant, you'll be unable to continue until you have. -5. Open the Google Assistant app and go into `Settings > Home Control` -6. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead you the screen where you can set rooms for your devices or nicknames for your devices. -7. If you want to allow other household users to control the devices: - a. Go to the settings for the project you created in point 1 in the developer console. - b. Under the gear icon, click `Permissions` - c. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role - d. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 3 -8. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: - a. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) - b. Select your project and click Enable Homegraph API - c. Go to Credentials, which you can find on the left navigation bar under the key icon, and select API Key from Create Credentials - d. Note down the generated API Key and use this in the configuration - ### {% linkable_title Troubleshooting the request_sync service %} The request_sync service requires that the initial sync from Google includes the agent_user_id. If not, the service will log an error that reads something like "Request contains an invalid argument". If this happens, then [unlink the account](https://support.google.com/googlehome/answer/7506443?hl=en-GB) from Home Control and relink. From 5579effea931db91267e580e318e7cfafe83eee7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 21 Sep 2018 21:52:08 +0200 Subject: [PATCH 155/176] Update --- source/developers/credits.markdown | 209 +++++++++++++++-------------- 1 file changed, 108 insertions(+), 101 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 6eacda0733f..5de3f71a6d2 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-08-28 07:39:11 +0000 +date: 2018-09-21 19:49:45 +0000 sidebar: true comments: false sharing: true @@ -13,7 +13,7 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "7458 total commits to the home-assistant organization, 4212 commits to home-assistant, 1565 commits to home-assistant.io, 1011 commits to home-assistant-polymer, 237 commits to home-assistant-js, 126 commits to netdisco, 110 commits to developers.home-assistant, 66 commits to home-assistant-js-websocket, 38 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 10 commits to hassio, 9 commits to hbmqtt-auth-home-assistant, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 6 commits to custom-panel-starter-kit-react, 4 commits to ui-schema, 3 commits to hassio-addons, 3 commits to hassio-build, 2 commits to home-assistant-iOS, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 2 commits to hassio-addons-example, 1 commit to warrant, 1 commit to home-assistant-notebooks, 1 commit to architecture") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "7690 total commits to the home-assistant organization, 4314 commits to home-assistant, 1588 commits to home-assistant.io, 1067 commits to home-assistant-polymer, 237 commits to home-assistant-js, 129 commits to developers.home-assistant, 127 commits to netdisco, 94 commits to home-assistant-js-websocket, 40 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 11 commits to hassio, 9 commits to hbmqtt-auth-home-assistant, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 6 commits to custom-panel-starter-kit-react, 4 commits to ui-schema, 3 commits to hassio-addons, 3 commits to hassio-build, 2 commits to issue-bot, 2 commits to home-assistant-iOS, 2 commits to hassio-addons-example, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to warrant, 1 commit to architecture") ### {% linkable_title Contributors %} @@ -21,9 +21,9 @@ This page contains a list of people who have contributed in one way or another t - [7even (@hwikene)](https://github.com/hwikene "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [a-andre (@a-andre)](https://github.com/a-andre "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Aaron Bach (@bachya)](https://github.com/bachya "81 total commits to the home-assistant organization, 56 commits to home-assistant, 25 commits to home-assistant.io") +- [Aaron Bach (@bachya)](https://github.com/bachya "84 total commits to the home-assistant organization, 59 commits to home-assistant, 25 commits to home-assistant.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Abílio Costa (@abmantis)](https://github.com/abmantis "24 total commits to the home-assistant organization, 14 commits to home-assistant, 6 commits to home-assistant.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") +- [Abílio Costa (@abmantis)](https://github.com/abmantis "26 total commits to the home-assistant organization, 15 commits to home-assistant, 7 commits to home-assistant.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.io") - [Adam Dullage (@Dullage)](https://github.com/Dullage "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") @@ -41,37 +41,32 @@ This page contains a list of people who have contributed in one way or another t - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization, 2 commits to home-assistant.io") - [Albert Lee (@trisk)](https://github.com/trisk "20 total commits to the home-assistant organization, 12 commits to home-assistant, 8 commits to home-assistant.io") - [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Alec Rust (@AlecRust)](https://github.com/AlecRust "2 total commits to the home-assistant organization, 2 commits to home-assistant.io") - [Alessandro Mogavero (@alexmogavero)](https://github.com/alexmogavero "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Alessandro Staniscia (@Odyno)](https://github.com/Odyno "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Alex Barcelo (@alexbarcelo)](https://github.com/alexbarcelo "7 total commits to the home-assistant organization, 4 commits to home-assistant.io, 3 commits to hassio-addons") - [Alex Harvey (@infamy)](https://github.com/infamy "29 total commits to the home-assistant organization, 14 commits to home-assistant, 11 commits to home-assistant.io, 4 commits to hassos") -- [Alex Mekkering (@AlexMekkering)](https://github.com/AlexMekkering "2 total commits to the home-assistant organization, 2 commits to home-assistant.io") - [Alex MF (@adsmf)](https://github.com/adsmf "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Alex Osadchyy (@aosadchyy)](https://github.com/aosadchyy "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Alex Tzonkov (@attzonko)](https://github.com/attzonko "2 total commits to the home-assistant organization, 2 commits to home-assistant.io") -- [Alexander Bachmeier (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.io") - [Alexander Kratzer (@hexxter)](https://github.com/hexxter "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Alexandre Perrin (@kAworu)](https://github.com/kAworu "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Alexei Chetroi (@Adminiuga)](https://github.com/Adminiuga "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Alexei Chetroi (@Adminiuga)](https://github.com/Adminiuga "12 total commits to the home-assistant organization, 11 commits to home-assistant, 1 commit to home-assistant-polymer") - [Alexis Iglauer (@ax42)](https://github.com/ax42 "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.io, 2 commits to appdaemon, 2 commits to home-assistant") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "148 total commits to the home-assistant organization, 83 commits to home-assistant.io, 53 commits to home-assistant, 7 commits to home-assistant-polymer, 3 commits to developers.home-assistant, 1 commit to hassio-addons, 1 commit to pi-gen") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "148 total commits to the home-assistant organization, 83 commits to home-assistant.io, 53 commits to home-assistant, 7 commits to home-assistant-polymer, 3 commits to developers.home-assistant, 1 commit to pi-gen, 1 commit to hassio-addons") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Anders Fogh Eriksen (@Fogh)](https://github.com/Fogh "2 total commits to the home-assistant organization, 2 commits to home-assistant.io") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "245 total commits to the home-assistant organization, 199 commits to home-assistant, 44 commits to home-assistant.io, 2 commits to home-assistant-polymer") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "252 total commits to the home-assistant organization, 206 commits to home-assistant, 44 commits to home-assistant.io, 2 commits to home-assistant-polymer") - [andig (@andig)](https://github.com/andig "2 total commits to the home-assistant organization, 2 commits to pi-gen") -- [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.io") +- [Andrea Campi (@andreacampi)](https://github.com/andreacampi "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Andreas Björshammar (@abjorshammar)](https://github.com/abjorshammar "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andreas Jacobsen (@andreasjacobsen93)](https://github.com/andreasjacobsen93 "8 total commits to the home-assistant organization, 6 commits to home-assistant.io, 2 commits to hassio-addons") +- [Andreas Oberritter (@mtdcr)](https://github.com/mtdcr "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") - [Andreas Rammhold (@andir)](https://github.com/andir "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Andreas Renberg (@IQAndreas)](https://github.com/IQAndreas "2 total commits to the home-assistant organization, 2 commits to home-assistant.io") - [Andreea\-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Andrei Pop (@andreipop2005)](https://github.com/andreipop2005 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.io") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "821 total commits to the home-assistant organization, 686 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "836 total commits to the home-assistant organization, 701 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.io") - [Andrew Smith (@andrewmichaelsmith)](https://github.com/andrewmichaelsmith "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") @@ -80,7 +75,6 @@ This page contains a list of people who have contributed in one way or another t - [Andrey (@andrey-git)](https://github.com/andrey-git "323 total commits to the home-assistant organization, 147 commits to home-assistant, 138 commits to home-assistant-polymer, 37 commits to home-assistant.io, 1 commit to home-assistant-js-websocket") - [Andrey Kupreychik (@foxel)](https://github.com/foxel "13 total commits to the home-assistant organization, 8 commits to home-assistant, 5 commits to home-assistant.io") - [Andrzej (@andriej)](https://github.com/andriej "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Andréas Lundgren (@adevade)](https://github.com/adevade "2 total commits to the home-assistant organization, 2 commits to home-assistant.io") - [Andy Castille (@Klikini)](https://github.com/Klikini "18 total commits to the home-assistant organization, 11 commits to home-assistant, 7 commits to home-assistant.io") - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Anthony Arnaud (@aarnaud)](https://github.com/aarnaud "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -117,7 +111,7 @@ This page contains a list of people who have contributed in one way or another t - [bcl1713 (@bcl1713)](https://github.com/bcl1713 "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Beat (@bdurrer)](https://github.com/bdurrer "14 total commits to the home-assistant organization, 10 commits to home-assistant.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Ben Bangert (@bbangert)](https://github.com/bbangert "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Ben Lebherz (@benleb)](https://github.com/benleb "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") +- [Ben Lebherz (@benleb)](https://github.com/benleb "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Ben Nuttall (@bennuttall)](https://github.com/bennuttall "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Ben Origas (@borigas)](https://github.com/borigas "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Ben Pirt (@bjpirt)](https://github.com/bjpirt "2 total commits to the home-assistant organization, 2 commits to pi-gen") @@ -136,7 +130,8 @@ This page contains a list of people who have contributed in one way or another t - [Boced66 (@boced66)](https://github.com/boced66 "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [bonanitech (@bonanitech)](https://github.com/bonanitech "9 total commits to the home-assistant organization, 9 commits to home-assistant.io") - [boojew (@boojew)](https://github.com/boojew "7 total commits to the home-assistant organization, 7 commits to home-assistant.io") -- [Boris K (@bokub)](https://github.com/bokub "12 total commits to the home-assistant organization, 6 commits to home-assistant.io, 6 commits to home-assistant") +- [Boris K (@bokub)](https://github.com/bokub "12 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.io") +- [borpin (@borpin)](https://github.com/borpin "1 total commits to the home-assistant organization, 1 commit to hassos") - [bottomquark (@bottomquark)](https://github.com/bottomquark "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Boyi C (@fanthos)](https://github.com/fanthos "23 total commits to the home-assistant organization, 17 commits to home-assistant-polymer, 6 commits to home-assistant") - [Brad Dixon (@rbdixon)](https://github.com/rbdixon "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -154,7 +149,7 @@ This page contains a list of people who have contributed in one way or another t - [Brent Saltzman (@brent20)](https://github.com/brent20 "9 total commits to the home-assistant organization, 9 commits to home-assistant.io") - [Brian Cribbs (@cribbstechnologies)](https://github.com/cribbstechnologies "43 total commits to the home-assistant organization, 26 commits to home-assistant, 15 commits to home-assistant.io, 2 commits to home-assistant-polymer") - [Brian Hopkins (@btotharye)](https://github.com/btotharye "6 total commits to the home-assistant organization, 4 commits to home-assistant.io, 2 commits to home-assistant") -- [Brian J King (@brianjking)](https://github.com/brianjking "12 total commits to the home-assistant organization, 12 commits to home-assistant.io") +- [Brian J King (@brianjking)](https://github.com/brianjking "14 total commits to the home-assistant organization, 14 commits to home-assistant.io") - [Brian Jinwright (@bjinwright)](https://github.com/bjinwright "159 total commits to the home-assistant organization, 159 commits to warrant") - [BRUH Automation (@bruhautomation)](https://github.com/bruhautomation "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") - [Bruno Adele (@badele)](https://github.com/badele "22 total commits to the home-assistant organization, 22 commits to home-assistant") @@ -168,15 +163,16 @@ This page contains a list of people who have contributed in one way or another t - [Cameron Bulock (@cbulock)](https://github.com/cbulock "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to netdisco") - [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "99 total commits to the home-assistant organization, 91 commits to home-assistant.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "143 total commits to the home-assistant organization, 84 commits to home-assistant, 41 commits to home-assistant.io, 11 commits to home-assistant-polymer, 5 commits to hass-release, 2 commits to developers.home-assistant") +- [cdce8p (@cdce8p)](https://github.com/cdce8p "147 total commits to the home-assistant organization, 85 commits to home-assistant, 42 commits to home-assistant.io, 13 commits to home-assistant-polymer, 5 commits to hass-release, 2 commits to developers.home-assistant") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Cedric Van Goethem (@Zepheus)](https://github.com/Zepheus "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") +- [Censored3 (@Censored3)](https://github.com/Censored3 "2 total commits to the home-assistant organization, 2 commits to hassio-addons") - [Cezar Sá Espinola (@cezarsa)](https://github.com/cezarsa "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [cgtobi (@cgtobi)](https://github.com/cgtobi "32 total commits to the home-assistant organization, 19 commits to home-assistant, 13 commits to home-assistant.io") +- [cgtobi (@cgtobi)](https://github.com/cgtobi "34 total commits to the home-assistant organization, 21 commits to home-assistant, 13 commits to home-assistant.io") - [chanders (@chanders)](https://github.com/chanders "2 total commits to the home-assistant organization, 2 commits to hadashboard") - [Charles Blonde (@CharlesBlonde)](https://github.com/CharlesBlonde "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.io") -- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "26 total commits to the home-assistant organization, 14 commits to home-assistant.io, 9 commits to home-assistant, 3 commits to home-assistant-polymer") +- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "33 total commits to the home-assistant organization, 16 commits to home-assistant.io, 10 commits to home-assistant, 7 commits to home-assistant-polymer") - [Charles Spirakis (@srcLurker)](https://github.com/srcLurker "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.io") - [Chayoung You (@yous)](https://github.com/yous "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Check your git settings\! (@invalid-email-address)](https://github.com/invalid-email-address "1 total commits to the home-assistant organization, 1 commit to libcoap") @@ -203,37 +199,34 @@ This page contains a list of people who have contributed in one way or another t - [Claus F\. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") - [cogneato (@cogneato)](https://github.com/cogneato "20 total commits to the home-assistant organization, 15 commits to home-assistant.io, 3 commits to developers.home-assistant, 2 commits to hassos") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Colin Frei (@colinfrei)](https://github.com/colinfrei "5 total commits to the home-assistant organization, 3 commits to home-assistant.io, 2 commits to home-assistant") +- [Colin Frei (@colinfrei)](https://github.com/colinfrei "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Colin O'Dell (@colinodell)](https://github.com/colinodell "33 total commits to the home-assistant organization, 18 commits to home-assistant, 15 commits to home-assistant.io") - [Colin Teubner (@netopiax)](https://github.com/netopiax "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "15 total commits to the home-assistant organization, 7 commits to home-assistant, 5 commits to home-assistant.io, 2 commits to home-assistant-polymer, 1 commit to developers.home-assistant") +- [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "17 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.io, 2 commits to home-assistant-polymer, 1 commit to developers.home-assistant") - [Constantine Grantcharov (@conz27)](https://github.com/conz27 "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Constantine Poltyrev (@shprota)](https://github.com/shprota "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "18 total commits to the home-assistant organization, 18 commits to home-assistant.io") -- [Corey Pauley (@devspacenine)](https://github.com/devspacenine "5 total commits to the home-assistant organization, 3 commits to home-assistant.io, 2 commits to home-assistant") +- [Corey Pauley (@devspacenine)](https://github.com/devspacenine "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [corneyl (@corneyl)](https://github.com/corneyl "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Craig J\. Midwinter (@craigjmidwinter)](https://github.com/craigjmidwinter "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.io") - [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [cxlwill (@cxlwill)](https://github.com/cxlwill "4 total commits to the home-assistant organization, 2 commits to hassbian-scripts, 2 commits to home-assistant-polymer") - [Dale Higgs (@dale3h)](https://github.com/dale3h "45 total commits to the home-assistant organization, 32 commits to home-assistant.io, 11 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") -- [damarco (@damarco)](https://github.com/damarco "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [damarco (@damarco)](https://github.com/damarco "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Dan (@danieljkemp)](https://github.com/danieljkemp "23 total commits to the home-assistant organization, 16 commits to home-assistant, 7 commits to home-assistant.io") -- [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "19 total commits to the home-assistant organization, 16 commits to home-assistant, 3 commits to home-assistant.io") -- [Dan Klaffenbach (@klada)](https://github.com/klada "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "17 total commits to the home-assistant organization, 14 commits to home-assistant, 3 commits to home-assistant.io") +- [Dan Klaffenbach (@klada)](https://github.com/klada "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Dan Nixon (@DanNixon)](https://github.com/DanNixon "25 total commits to the home-assistant organization, 19 commits to home-assistant, 6 commits to home-assistant.io") - [Dan Ports (@drkp)](https://github.com/drkp "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Dan Sarginson (@dansarginson)](https://github.com/dansarginson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Smith (@kk7ds)](https://github.com/kk7ds "84 total commits to the home-assistant organization, 68 commits to home-assistant, 14 commits to home-assistant.io, 2 commits to home-assistant-polymer") - [Dani (@danichispa)](https://github.com/danichispa "9 total commits to the home-assistant organization, 9 commits to home-assistant.io") - [Daniel Bowman (@vrih)](https://github.com/vrih "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to netdisco") - [Daniel Escoz (@Darkhogg)](https://github.com/Darkhogg "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "310 total commits to the home-assistant organization, 196 commits to home-assistant, 111 commits to home-assistant.io, 3 commits to home-assistant-polymer") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "102 total commits to the home-assistant organization, 50 commits to home-assistant, 41 commits to home-assistant.io, 11 commits to hassio-addons") +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "330 total commits to the home-assistant organization, 210 commits to home-assistant, 117 commits to home-assistant.io, 3 commits to home-assistant-polymer") +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "107 total commits to the home-assistant organization, 54 commits to home-assistant, 42 commits to home-assistant.io, 11 commits to hassio-addons") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Daniel Schaal (@schaal)](https://github.com/schaal "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Daniel Shokouhi (@dshokouhi)](https://github.com/dshokouhi "26 total commits to the home-assistant organization, 19 commits to home-assistant.io, 7 commits to home-assistant") +- [Daniel Shokouhi (@dshokouhi)](https://github.com/dshokouhi "27 total commits to the home-assistant organization, 20 commits to home-assistant.io, 7 commits to home-assistant") - [Daniel Trnka (@trnila)](https://github.com/trnila "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Daniel Watkins (@OddBloke)](https://github.com/OddBloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Daniel Welch (@danielwelch)](https://github.com/danielwelch "6 total commits to the home-assistant organization, 3 commits to home-assistant.io, 2 commits to homebridge-homeassistant, 1 commit to hassio-addons") @@ -243,14 +236,12 @@ This page contains a list of people who have contributed in one way or another t - [datafx (@datafx)](https://github.com/datafx "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Dave Banks (@djbanks)](https://github.com/djbanks "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Dave J (@kxtcd950)](https://github.com/kxtcd950 "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") -- [DaveSergeant (@dethpickle)](https://github.com/dethpickle "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David (@fanaticDavid)](https://github.com/fanaticDavid "16 total commits to the home-assistant organization, 12 commits to home-assistant.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [David Broadfoot (@dlbroadfoot)](https://github.com/dlbroadfoot "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "16 total commits to the home-assistant organization, 16 commits to home-assistant.io") - [David F\. Mulcahey (@dmulcahey)](https://github.com/dmulcahey "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David Grant (@davegravy)](https://github.com/davegravy "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") -- [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant.io, 5 commits to home-assistant") +- [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.io") - [David Ohayon (@ohayon)](https://github.com/ohayon "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [David Steele (@davesteele)](https://github.com/davesteele "4 total commits to the home-assistant organization, 4 commits to pi-gen") - [David Straub (@DavidMStraub)](https://github.com/DavidMStraub "10 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.io") @@ -262,6 +253,7 @@ This page contains a list of people who have contributed in one way or another t - [deisi (@deisi)](https://github.com/deisi "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Delio Castillo (@jangeador)](https://github.com/jangeador "2 total commits to the home-assistant organization, 2 commits to hassio-addons") - [Demid Lupin (@lupin-de-mid)](https://github.com/lupin-de-mid "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") +- [Denix (@denics)](https://github.com/denics "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Dennis Karpienski (@TheRealLink)](https://github.com/TheRealLink "22 total commits to the home-assistant organization, 15 commits to home-assistant-polymer, 6 commits to home-assistant, 1 commit to netdisco") - [Derek (@itchaboy)](https://github.com/itchaboy "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [Derek Brooks (@broox)](https://github.com/broox "39 total commits to the home-assistant organization, 30 commits to home-assistant, 9 commits to home-assistant.io") @@ -269,13 +261,13 @@ This page contains a list of people who have contributed in one way or another t - [DetroitEE (@DetroitEE)](https://github.com/DetroitEE "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "70 total commits to the home-assistant organization, 46 commits to home-assistant, 23 commits to home-assistant.io, 1 commit to developers.home-assistant") +- [Diogo Gomes (@dgomes)](https://github.com/dgomes "74 total commits to the home-assistant organization, 49 commits to home-assistant, 24 commits to home-assistant.io, 1 commit to developers.home-assistant") - [Dmitri Pribysh (@dmand)](https://github.com/dmand "1 total commits to the home-assistant organization, 1 commit to hassos") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [dramamoose (@dramamoose)](https://github.com/dramamoose "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "395 total commits to the home-assistant organization, 392 commits to home-assistant.io, 2 commits to hassos, 1 commit to developers.home-assistant") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "419 total commits to the home-assistant organization, 415 commits to home-assistant.io, 2 commits to hassos, 2 commits to developers.home-assistant") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.io, 5 commits to home-assistant") - [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") - [Egor Tsinko (@etsinko)](https://github.com/etsinko "12 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to home-assistant.io") @@ -293,10 +285,10 @@ This page contains a list of people who have contributed in one way or another t - [Eu (@covrig)](https://github.com/covrig "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Eugenio Panadero (@azogue)](https://github.com/azogue "77 total commits to the home-assistant organization, 46 commits to home-assistant, 25 commits to home-assistant.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") - [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4889 total commits to the home-assistant organization, 3055 commits to home-assistant.io, 1697 commits to home-assistant, 33 commits to home-assistant-assets, 32 commits to home-assistant-notebooks, 15 commits to developers.home-assistant, 11 commits to home-assistant-polymer, 11 commits to hassio-build, 10 commits to netdisco, 7 commits to hassos, 6 commits to hassio-addons, 4 commits to hassio, 3 commits to hass-release, 2 commits to home-assistant-iOS, 1 commit to example-custom-config, 1 commit to ui-schema, 1 commit to home-assistant-js-websocket") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4972 total commits to the home-assistant organization, 3110 commits to home-assistant.io, 1723 commits to home-assistant, 33 commits to home-assistant-assets, 32 commits to home-assistant-notebooks, 15 commits to developers.home-assistant, 11 commits to home-assistant-polymer, 11 commits to hassio-build, 10 commits to netdisco, 7 commits to hassos, 6 commits to hassio, 6 commits to hassio-addons, 3 commits to hass-release, 2 commits to home-assistant-iOS, 1 commit to home-assistant-js-websocket, 1 commit to example-custom-config, 1 commit to ui-schema") - [Fabian Fischer (@nodomain)](https://github.com/nodomain "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Fabien Piuzzi (@reefab)](https://github.com/reefab "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Fabien Piuzzi (@reefab)](https://github.com/reefab "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Fabrizio Furnari (@fabfurnari)](https://github.com/fabfurnari "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [fakezeta (@fakezeta)](https://github.com/fakezeta "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Felix Krause (@KrauseFx)](https://github.com/KrauseFx "27 total commits to the home-assistant organization, 27 commits to issue-bot") @@ -308,22 +300,23 @@ This page contains a list of people who have contributed in one way or another t - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") - [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "44 total commits to the home-assistant organization, 31 commits to home-assistant.io, 6 commits to hassio, 2 commits to hassio-cli, 2 commits to hassio-addons, 2 commits to home-assistant-polymer, 1 commit to appdaemon") +- [Franck Nijhof (@frenck)](https://github.com/frenck "52 total commits to the home-assistant organization, 31 commits to home-assistant.io, 10 commits to hassio, 3 commits to hassio-addons, 3 commits to home-assistant, 2 commits to hassio-cli, 2 commits to home-assistant-polymer, 1 commit to appdaemon") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Frantz (@rofrantz)](https://github.com/rofrantz "17 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.io, 3 commits to netdisco, 1 commit to home-assistant-js-websocket") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.io") - [Frederik Bolding (@FrederikBolding)](https://github.com/FrederikBolding "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "224 total commits to the home-assistant organization, 110 commits to hassbian-scripts, 73 commits to home-assistant.io, 36 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "226 total commits to the home-assistant organization, 112 commits to hassbian-scripts, 73 commits to home-assistant.io, 36 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [freol35241 (@freol35241)](https://github.com/freol35241 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.io") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Gabriel Oliveira (@gabrielboliveira)](https://github.com/gabrielboliveira "2 total commits to the home-assistant organization, 1 commit to hassos, 1 commit to hassio-addons") +- [geekofweek (@geekofweek)](https://github.com/geekofweek "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Geoff Norton (@kangaroo)](https://github.com/kangaroo "14 total commits to the home-assistant organization, 14 commits to home-assistant") - [George\.M (@nodinosaur)](https://github.com/nodinosaur "6 total commits to the home-assistant organization, 6 commits to home-assistant.io") - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.io, 5 commits to home-assistant, 1 commit to appdaemon") - [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Gerard (@gerard33)](https://github.com/gerard33 "12 total commits to the home-assistant organization, 6 commits to home-assistant.io, 6 commits to home-assistant") +- [Gerard (@gerard33)](https://github.com/gerard33 "12 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.io") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.io") - [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "24 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.io") - [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "5 total commits to the home-assistant organization, 5 commits to home-assistant") @@ -331,14 +324,14 @@ This page contains a list of people who have contributed in one way or another t - [GitBook Bot (@gitbook-bot)](https://github.com/gitbook-bot "1 total commits to the home-assistant organization, 1 commit to developers.home-assistant") - [githubbuh (@githubbuh)](https://github.com/githubbuh "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [gitmopp (@gitmopp)](https://github.com/gitmopp "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Giuseppe (@glpatcern)](https://github.com/glpatcern "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Giuseppe (@glpatcern)](https://github.com/glpatcern "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [Glenn Waters (@gwww)](https://github.com/gwww "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [GMFalka (@GMFalka)](https://github.com/GMFalka "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Grant McConnaughey (@grantmcconnaughey)](https://github.com/grantmcconnaughey "8 total commits to the home-assistant organization, 8 commits to warrant") - [GreenTurtwig (@GreenTurtwig)](https://github.com/GreenTurtwig "80 total commits to the home-assistant organization, 75 commits to home-assistant.io, 5 commits to home-assistant") - [Greg Dowling (@pavoni)](https://github.com/pavoni "209 total commits to the home-assistant organization, 183 commits to home-assistant, 25 commits to home-assistant.io, 1 commit to netdisco") -- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.io") +- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "22 total commits to the home-assistant organization, 18 commits to home-assistant, 4 commits to home-assistant.io") - [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Gregory Benner (@Klathmon)](https://github.com/Klathmon "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -364,7 +357,7 @@ This page contains a list of people who have contributed in one way or another t - [Hillary Fraley (@hillaryfraley)](https://github.com/hillaryfraley "12 total commits to the home-assistant organization, 12 commits to home-assistant.io") - [Hmmbob (@hmmbob)](https://github.com/hmmbob "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [honcheng (@honcheng)](https://github.com/honcheng "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") -- [huangyupeng (@huangyupeng)](https://github.com/huangyupeng "14 total commits to the home-assistant organization, 7 commits to home-assistant.io, 7 commits to home-assistant") +- [huangyupeng (@huangyupeng)](https://github.com/huangyupeng "14 total commits to the home-assistant organization, 7 commits to home-assistant, 7 commits to home-assistant.io") - [Hugo Dupras (@jabesq)](https://github.com/jabesq "29 total commits to the home-assistant organization, 21 commits to home-assistant, 8 commits to home-assistant.io") - [Hugo Gresse (@HugoGresse)](https://github.com/HugoGresse "8 total commits to the home-assistant organization, 8 commits to home-assistant.io") - [Hugo Hromic (@hhromic)](https://github.com/hhromic "4 total commits to the home-assistant organization, 4 commits to pi-gen") @@ -375,7 +368,8 @@ This page contains a list of people who have contributed in one way or another t - [ianj001 (@ianj001)](https://github.com/ianj001 "7 total commits to the home-assistant organization, 7 commits to home-assistant.io") - [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.io") - [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.io, 1 commit to home-assistant-polymer") -- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "11 total commits to the home-assistant organization, 11 commits to home-assistant.io") +- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "15 total commits to the home-assistant organization, 12 commits to home-assistant.io, 3 commits to home-assistant") +- [Isabella Gross Alström (@isabellaalstrom)](https://github.com/isabellaalstrom "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Issac Kelly (@issackelly)](https://github.com/issackelly "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jaak Laineste (@jaakla)](https://github.com/jaakla "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jacen (@jacen92)](https://github.com/jacen92 "2 total commits to the home-assistant organization, 2 commits to pi-gen") @@ -384,7 +378,7 @@ This page contains a list of people who have contributed in one way or another t - [Jack Minardi (@jminardi)](https://github.com/jminardi "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Jacob Mansfield (@cyberjacob)](https://github.com/cyberjacob "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jacob Siverskog (@jsiverskog)](https://github.com/jsiverskog "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Jacob Tomlinson (@jacobtomlinson)](https://github.com/jacobtomlinson "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") +- [Jacob Tomlinson (@jacobtomlinson)](https://github.com/jacobtomlinson "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [Jaimyn Mayer (@jabelone)](https://github.com/jabelone "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [Jakub Bittner (@rexcze)](https://github.com/rexcze "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [James Cole (@jamespcole)](https://github.com/jamespcole "94 total commits to the home-assistant organization, 93 commits to home-assistant, 1 commit to home-assistant-js") @@ -399,7 +393,7 @@ This page contains a list of people who have contributed in one way or another t - [Janne Grunau (@jannau)](https://github.com/jannau "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jason Carter (@JasonCarter80)](https://github.com/JasonCarter80 "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") - [Jason Hite (@jasonmhite)](https://github.com/jasonmhite "6 total commits to the home-assistant organization, 6 commits to appdaemon") -- [Jason Hu (@awarecan)](https://github.com/awarecan "92 total commits to the home-assistant organization, 62 commits to home-assistant, 12 commits to home-assistant-polymer, 11 commits to home-assistant.io, 6 commits to developers.home-assistant, 1 commit to home-assistant-js-websocket") +- [Jason Hu (@awarecan)](https://github.com/awarecan "136 total commits to the home-assistant organization, 93 commits to home-assistant, 17 commits to home-assistant-polymer, 15 commits to home-assistant.io, 9 commits to developers.home-assistant, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Jason Hunter (@hunterjm)](https://github.com/hunterjm "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jay Stevens (@Jay2645)](https://github.com/Jay2645 "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [JAYMAN-ATX (@JAYMAN-ATX)](https://github.com/JAYMAN-ATX "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") @@ -409,8 +403,8 @@ This page contains a list of people who have contributed in one way or another t - [Jeff Schroeder (@SEJeff)](https://github.com/SEJeff "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Jeff Wilson (@jawilson)](https://github.com/jawilson "25 total commits to the home-assistant organization, 19 commits to home-assistant, 6 commits to home-assistant.io") - [Jens (@jhoepken)](https://github.com/jhoepken "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "8 total commits to the home-assistant organization, 4 commits to home-assistant.io, 4 commits to home-assistant") -- [Jerad Meisner (@jeradM)](https://github.com/jeradM "52 total commits to the home-assistant organization, 30 commits to home-assistant-polymer, 11 commits to home-assistant.io, 11 commits to home-assistant") +- [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "8 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.io") +- [Jerad Meisner (@jeradM)](https://github.com/jeradM "57 total commits to the home-assistant organization, 33 commits to home-assistant-polymer, 12 commits to home-assistant.io, 12 commits to home-assistant") - [Jeremiah Wuenschel (@jer)](https://github.com/jer "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Jeremy Williams (@jwillaz)](https://github.com/jwillaz "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [jeremysv (@jeremysv)](https://github.com/jeremysv "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") @@ -419,12 +413,12 @@ This page contains a list of people who have contributed in one way or another t - [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "9 total commits to the home-assistant organization, 9 commits to home-assistant.io") - [Jesse Hills (@jesserockz)](https://github.com/jesserockz "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Jesse Newland (@jnewland)](https://github.com/jnewland "16 total commits to the home-assistant organization, 13 commits to home-assistant, 3 commits to hubot-home-assistant") -- [JesseWebDotCom (@JesseWebDotCom)](https://github.com/JesseWebDotCom "16 total commits to the home-assistant organization, 8 commits to home-assistant.io, 8 commits to home-assistant") +- [JesseWebDotCom (@JesseWebDotCom)](https://github.com/JesseWebDotCom "16 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.io") - [jgrieger1 (@jgrieger1)](https://github.com/jgrieger1 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [jiafengwang (@jiafengwang)](https://github.com/jiafengwang "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Joakim Nohlgård (@gebart)](https://github.com/gebart "2 total commits to the home-assistant organization, 2 commits to libcoap") -- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "123 total commits to the home-assistant organization, 98 commits to hassbian-scripts, 22 commits to home-assistant.io, 3 commits to home-assistant") +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "129 total commits to the home-assistant organization, 104 commits to hassbian-scripts, 22 commits to home-assistant.io, 3 commits to home-assistant") - [jodur (@jodur)](https://github.com/jodur "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Joe Lu (@snjoetw)](https://github.com/snjoetw "25 total commits to the home-assistant organization, 19 commits to home-assistant, 5 commits to home-assistant.io, 1 commit to appdaemon") - [Joe McMonagle (@joemcmonagle)](https://github.com/joemcmonagle "13 total commits to the home-assistant organization, 13 commits to home-assistant.io") @@ -435,8 +429,9 @@ This page contains a list of people who have contributed in one way or another t - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.io, 1 commit to appdaemon") - [Johann Kellerman (@kellerza)](https://github.com/kellerza "181 total commits to the home-assistant organization, 148 commits to home-assistant, 33 commits to home-assistant.io") - [Johannes K\. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") +- [Johannes Truschnigg (@jtru)](https://github.com/jtru "1 total commits to the home-assistant organization, 1 commit to hassos") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "218 total commits to the home-assistant organization, 156 commits to home-assistant, 40 commits to home-assistant.io, 22 commits to home-assistant-polymer") +- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "221 total commits to the home-assistant organization, 156 commits to home-assistant, 42 commits to home-assistant.io, 23 commits to home-assistant-polymer") - [John Lindley (@jwl17330536)](https://github.com/jwl17330536 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [John Mihalic (@mezz64)](https://github.com/mezz64 "51 total commits to the home-assistant organization, 37 commits to home-assistant, 12 commits to home-assistant.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") - [Johnny Chadda (@joch)](https://github.com/joch "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -461,7 +456,7 @@ This page contains a list of people who have contributed in one way or another t - [JudgeDredd (@JudgeDreddKLC)](https://github.com/JudgeDreddKLC "10 total commits to the home-assistant organization, 10 commits to home-assistant.io") - [Juggels (@Juggels)](https://github.com/Juggels "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.io") - [Julian Kaffke (@jaykay)](https://github.com/jaykay "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Julian Kahnert (@JulianKahnert)](https://github.com/JulianKahnert "6 total commits to the home-assistant organization, 3 commits to home-assistant.io, 3 commits to home-assistant") +- [Julian Kahnert (@JulianKahnert)](https://github.com/JulianKahnert "7 total commits to the home-assistant organization, 4 commits to home-assistant.io, 3 commits to home-assistant") - [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "31 total commits to the home-assistant organization, 24 commits to home-assistant, 7 commits to home-assistant.io") - [jumpkick (@jumpkick)](https://github.com/jumpkick "15 total commits to the home-assistant organization, 12 commits to home-assistant, 3 commits to home-assistant.io") - [Junian Triajianto (@junian)](https://github.com/junian "1 total commits to the home-assistant organization, 1 commit to pi-gen") @@ -469,21 +464,23 @@ This page contains a list of people who have contributed in one way or another t - [Justin Hayes (@GussyH)](https://github.com/GussyH "8 total commits to the home-assistant organization, 7 commits to hadashboard, 1 commit to appdaemon") - [Justin Weberg (@justweb1)](https://github.com/justweb1 "26 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 1 commit to home-assistant-js, 1 commit to hassio") - [Justyn Shull (@justyns)](https://github.com/justyns "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [Jérémie Klein (@grm)](https://github.com/grm "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Karen Goode (@kfgoode)](https://github.com/kfgoode "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [karlkar (@karlkar)](https://github.com/karlkar "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.io") -- [kbickar (@kbickar)](https://github.com/kbickar "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [kbickar (@kbickar)](https://github.com/kbickar "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") - [Ken Bannister (@kb2ma)](https://github.com/kb2ma "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Ken Davidson (@kwdavidson)](https://github.com/kwdavidson "14 total commits to the home-assistant organization, 12 commits to home-assistant.io, 2 commits to appdaemon") +- [Ken Davidson (@kwdavidson)](https://github.com/kwdavidson "15 total commits to the home-assistant organization, 13 commits to home-assistant.io, 2 commits to appdaemon") - [kennedyshead (@kennedyshead)](https://github.com/kennedyshead "10 total commits to the home-assistant organization, 10 commits to home-assistant") +- [Kevin Eifinger (@eifinger)](https://github.com/eifinger "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Kevin Fronczak (@fronzbot)](https://github.com/fronzbot "19 total commits to the home-assistant organization, 11 commits to home-assistant, 8 commits to home-assistant.io") - [Kevin Gisi (@gisikw)](https://github.com/gisikw "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [Kevin Gottsman (@gottsman)](https://github.com/gottsman "8 total commits to the home-assistant organization, 8 commits to home-assistant.io") -- [Kevin Siml (@appzer)](https://github.com/appzer "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Kevin Siml (@appzer)](https://github.com/appzer "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") - [Keyasha Brothern (@KMBrothern)](https://github.com/KMBrothern "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [kfcook (@kfcook)](https://github.com/kfcook "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [kireyeu (@kireyeu)](https://github.com/kireyeu "4 total commits to the home-assistant organization, 4 commits to home-assistant-notebooks") -- [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization, 5 commits to home-assistant.io, 5 commits to home-assistant, 2 commits to home-assistant-polymer") +- [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.io, 2 commits to home-assistant-polymer") - [Klaus (@k-laus)](https://github.com/k-laus "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [koolsb (@koolsb)](https://github.com/koolsb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Kory Prince (@korylprince)](https://github.com/korylprince "4 total commits to the home-assistant organization, 4 commits to home-assistant-polymer") @@ -497,7 +494,7 @@ This page contains a list of people who have contributed in one way or another t - [Lennart Bernhardt (@LennyPenny)](https://github.com/LennyPenny "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Leon99 (@Leon99)](https://github.com/Leon99 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Leonardo Saraiva (@vyper)](https://github.com/vyper "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Lev Aronsky (@aronsky)](https://github.com/aronsky "15 total commits to the home-assistant organization, 12 commits to home-assistant, 3 commits to home-assistant.io") +- [Lev Aronsky (@aronsky)](https://github.com/aronsky "16 total commits to the home-assistant organization, 13 commits to home-assistant, 3 commits to home-assistant.io") - [Lewis Juggins (@lwis)](https://github.com/lwis "66 total commits to the home-assistant organization, 53 commits to home-assistant, 12 commits to home-assistant.io, 1 commit to home-assistant-polymer") - [lichtteil (@lichtteil)](https://github.com/lichtteil "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Lindsay Ward (@lindsaymarkward)](https://github.com/lindsaymarkward "18 total commits to the home-assistant organization, 13 commits to home-assistant.io, 5 commits to home-assistant") @@ -517,20 +514,20 @@ This page contains a list of people who have contributed in one way or another t - [Luke Armstrong (@lukearmstrong)](https://github.com/lukearmstrong "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [LvivEchoes (@LvivEchoes)](https://github.com/LvivEchoes "8 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io, 1 commit to home-assistant-polymer") - [Maarten Groeneweg (@lazytesting)](https://github.com/lazytesting "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Maciej Bieniek (@bieniu)](https://github.com/bieniu "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Maciej Bieniek (@bieniu)](https://github.com/bieniu "7 total commits to the home-assistant organization, 6 commits to home-assistant, 1 commit to home-assistant-polymer") - [Maciej Sokołowski (@matemaciek)](https://github.com/matemaciek "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to hassio-build") - [Maciej Wasilak (@mwasilak)](https://github.com/mwasilak "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Magnus Ihse Bursie (@magicus)](https://github.com/magicus "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to netdisco, 3 commits to home-assistant.io") - [Magnus Lyckå (@magnus-lycka)](https://github.com/magnus-lycka "1 total commits to the home-assistant organization, 1 commit to netdisco") - [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization, 29 commits to home-assistant") - [Mal Curtis (@snikch)](https://github.com/snikch "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Malte Franken (@exxamalte)](https://github.com/exxamalte "11 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.io, 1 commit to developers.home-assistant, 1 commit to home-assistant-polymer") +- [Malte Franken (@exxamalte)](https://github.com/exxamalte "16 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.io, 1 commit to developers.home-assistant, 1 commit to home-assistant-polymer") - [Marc Egli (@frog32)](https://github.com/frog32 "12 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.io, 1 commit to hassio-addons-example") -- [Marc Forth (@mf-social)](https://github.com/mf-social "27 total commits to the home-assistant organization, 26 commits to home-assistant.io, 1 commit to fabric-home-assistant") -- [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "4 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to developers.home-assistant, 1 commit to hassio-build") +- [Marc Forth (@mf-social)](https://github.com/mf-social "28 total commits to the home-assistant organization, 27 commits to home-assistant.io, 1 commit to fabric-home-assistant") +- [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "4 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to hassio-build, 1 commit to developers.home-assistant") - [Marc Pabst (@marcpabst)](https://github.com/marcpabst "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Marc Plano\-Lesay (@Kernald)](https://github.com/Kernald "10 total commits to the home-assistant organization, 10 commits to home-assistant.io") -- [Marcel Hoppe (@hobbypunk90)](https://github.com/hobbypunk90 "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Marcel Hoppe (@hobbypunk90)](https://github.com/hobbypunk90 "12 total commits to the home-assistant organization, 6 commits to home-assistant.io, 6 commits to home-assistant") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "159 total commits to the home-assistant organization, 89 commits to home-assistant, 67 commits to home-assistant.io, 1 commit to home-assistant-assets, 1 commit to hassio-build, 1 commit to home-assistant-polymer") - [Marcin Domański (@kabturek)](https://github.com/kabturek "2 total commits to the home-assistant organization, 2 commits to appdaemon") @@ -553,24 +550,24 @@ This page contains a list of people who have contributed in one way or another t - [Martin Berg (@mbrrg)](https://github.com/mbrrg "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") - [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "179 total commits to the home-assistant organization, 144 commits to home-assistant, 30 commits to home-assistant.io, 5 commits to developers.home-assistant") -- [Martin Rowan (@shortbloke)](https://github.com/shortbloke "6 total commits to the home-assistant organization, 3 commits to home-assistant.io, 3 commits to home-assistant") +- [Martin Rowan (@shortbloke)](https://github.com/shortbloke "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.io") - [Martin Weinelt (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.io, 1 commit to home-assistant-polymer") - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Matt N\. (@mnoorenberghe)](https://github.com/mnoorenberghe "54 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.io, 9 commits to home-assistant, 2 commits to home-assistant-polymer, 1 commit to homebridge-homeassistant") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") -- [Matt Schmitt (@schmittx)](https://github.com/schmittx "88 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 19 commits to home-assistant, 12 commits to home-assistant.io, 3 commits to home-assistant-polymer, 2 commits to developers.home-assistant") +- [Matt Schmitt (@schmittx)](https://github.com/schmittx "90 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 21 commits to home-assistant, 12 commits to home-assistant.io, 3 commits to home-assistant-polymer, 2 commits to developers.home-assistant") - [Matt Snyder (@oblogic7)](https://github.com/oblogic7 "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") +- [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.io") - [Matt White (@matt-FFFFFF)](https://github.com/matt-FFFFFF "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant.io, 5 commits to home-assistant") - [Matteo Lampugnani (@t30)](https://github.com/t30 "7 total commits to the home-assistant organization, 7 commits to home-assistant.io") - [Matthew Donoughe (@mdonoughe)](https://github.com/mdonoughe "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Matthew Garrett (@mjg59)](https://github.com/mjg59 "30 total commits to the home-assistant organization, 22 commits to home-assistant, 7 commits to home-assistant.io, 1 commit to netdisco") - [Matthew Rollings (@stealthcopter)](https://github.com/stealthcopter "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [Matthew Treinish (@mtreinish)](https://github.com/mtreinish "24 total commits to the home-assistant organization, 15 commits to home-assistant, 9 commits to home-assistant.io") - [Matthias Dötsch (@brainexe)](https://github.com/brainexe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Matthias Urlichs (@smurfix)](https://github.com/smurfix "3 total commits to the home-assistant organization, 3 commits to appdaemon") -- [Mattias Welponer (@mxworm)](https://github.com/mxworm "22 total commits to the home-assistant organization, 13 commits to home-assistant, 8 commits to home-assistant.io, 1 commit to home-assistant-polymer") +- [Matthias Urlichs (@smurfix)](https://github.com/smurfix "6 total commits to the home-assistant organization, 3 commits to appdaemon, 3 commits to home-assistant") +- [Mattias Welponer (@mxworm)](https://github.com/mxworm "24 total commits to the home-assistant organization, 14 commits to home-assistant, 9 commits to home-assistant.io, 1 commit to home-assistant-polymer") - [mattie47 (@mattie47)](https://github.com/mattie47 "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Max Mudde (@makzdot)](https://github.com/makzdot "1 total commits to the home-assistant organization, 1 commit to developers.home-assistant") - [Max Prokhorov (@mcspr)](https://github.com/mcspr "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -619,9 +616,10 @@ This page contains a list of people who have contributed in one way or another t - [mountainsandcode (@mountainsandcode)](https://github.com/mountainsandcode "9 total commits to the home-assistant organization, 6 commits to home-assistant.io, 3 commits to home-assistant") - [mueslo (@mueslo)](https://github.com/mueslo "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [mukundv (@mukundv)](https://github.com/mukundv "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") +- [Myles Eftos (@madpilot)](https://github.com/madpilot "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Mārtiņš Grunskis (@grunskis)](https://github.com/grunskis "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Nash Kaminski (@nkaminski)](https://github.com/nkaminski "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Nate Clark (@heythisisnate)](https://github.com/heythisisnate "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.io") +- [Nate Clark (@heythisisnate)](https://github.com/heythisisnate "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.io") - [Nathan Flynn (@eperdeme)](https://github.com/eperdeme "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "22 total commits to the home-assistant organization, 10 commits to home-assistant, 8 commits to home-assistant.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") - [Nathan Knotts (@nknotts)](https://github.com/nknotts "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -655,16 +653,17 @@ This page contains a list of people who have contributed in one way or another t - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Oncleben31 (@oncleben31)](https://github.com/oncleben31 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "41 total commits to the home-assistant organization, 29 commits to home-assistant, 12 commits to home-assistant.io") +- [ottersen (@ottersen)](https://github.com/ottersen "11 total commits to the home-assistant organization, 11 commits to home-assistant.io") - [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "70 total commits to the home-assistant organization, 54 commits to home-assistant, 13 commits to home-assistant.io, 3 commits to home-assistant-polymer") - [oznu (@oznu)](https://github.com/oznu "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "3696 total commits to the home-assistant organization, 1303 commits to hassio, 675 commits to hassos, 475 commits to home-assistant, 465 commits to hassio-build, 369 commits to hassio-addons, 328 commits to home-assistant.io, 29 commits to hassio-homeassistant, 17 commits to hassio-addons-example, 13 commits to developers.home-assistant, 12 commits to hassio-cli, 7 commits to hassio-base, 1 commit to netdisco, 1 commit to home-assistant-polymer, 1 commit to home-assistant-js-websocket") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "3731 total commits to the home-assistant organization, 1314 commits to hassio, 676 commits to hassos, 479 commits to home-assistant, 465 commits to hassio-build, 371 commits to hassio-addons, 332 commits to home-assistant.io, 34 commits to hassio-homeassistant, 20 commits to developers.home-assistant, 17 commits to hassio-addons-example, 12 commits to hassio-cli, 7 commits to hassio-base, 2 commits to home-assistant-polymer, 1 commit to netdisco, 1 commit to home-assistant-js-websocket") - [Pat Thoyts (@patthoyts)](https://github.com/patthoyts "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [Paul Annekov (@PaulAnnekov)](https://github.com/PaulAnnekov "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Paul Annekov (@PaulAnnekov)](https://github.com/PaulAnnekov "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.io") - [Paul Hendry (@pshendry)](https://github.com/pshendry "1 total commits to the home-assistant organization, 1 commit to warrant") - [Paul Jimenez (@pjz)](https://github.com/pjz "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Paul Nicholls (@pauln)](https://github.com/pauln "2 total commits to the home-assistant organization, 2 commits to netdisco") @@ -694,21 +693,22 @@ This page contains a list of people who have contributed in one way or another t - [Philip Rosenberg\-Watt (@PhilRW)](https://github.com/PhilRW "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.io") - [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "40 total commits to the home-assistant organization, 27 commits to home-assistant, 11 commits to home-assistant.io, 1 commit to hassio-build, 1 commit to appdaemon") -- [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.io") -- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "34 total commits to the home-assistant organization, 21 commits to home-assistant, 12 commits to home-assistant.io, 1 commit to home-assistant-polymer") +- [Phill Price (@phillprice)](https://github.com/phillprice "12 total commits to the home-assistant organization, 12 commits to home-assistant.io") +- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "42 total commits to the home-assistant organization, 25 commits to home-assistant, 13 commits to home-assistant.io, 4 commits to home-assistant-polymer") - [PhyberApex (@PhyberApex)](https://github.com/PhyberApex "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Pierre Ståhl (@postlund)](https://github.com/postlund "50 total commits to the home-assistant organization, 33 commits to home-assistant, 11 commits to home-assistant.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") - [pkonnekermetametrics (@pkonnekermetametrics)](https://github.com/pkonnekermetametrics "5 total commits to the home-assistant organization, 5 commits to warrant") +- [plyblu (@plyblu)](https://github.com/plyblu "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [PuckStar (@PuckStar)](https://github.com/PuckStar "7 total commits to the home-assistant organization, 7 commits to home-assistant.io") - [quthla (@quthla)](https://github.com/quthla "13 total commits to the home-assistant organization, 5 commits to home-assistant-polymer, 4 commits to home-assistant-iOS, 4 commits to home-assistant") -- [R Huish (@Genestealer)](https://github.com/Genestealer "23 total commits to the home-assistant organization, 23 commits to home-assistant.io") - [rafale77 (@rafale77)](https://github.com/rafale77 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Raiford (@raiford)](https://github.com/raiford "1 total commits to the home-assistant organization, 1 commit to hassio-addons") +- [randellhodges (@randellhodges)](https://github.com/randellhodges "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [rbflurry (@rbflurry)](https://github.com/rbflurry "17 total commits to the home-assistant organization, 14 commits to home-assistant.io, 3 commits to home-assistant") - [Reed Riley (@reedriley)](https://github.com/reedriley "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rendili (@Rendili)](https://github.com/Rendili "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "21 total commits to the home-assistant organization, 14 commits to home-assistant, 7 commits to home-assistant.io") -- [Rene Tode (@ReneTode)](https://github.com/ReneTode "38 total commits to the home-assistant organization, 38 commits to appdaemon") +- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "22 total commits to the home-assistant organization, 15 commits to home-assistant, 7 commits to home-assistant.io") +- [Rene Tode (@ReneTode)](https://github.com/ReneTode "39 total commits to the home-assistant organization, 39 commits to appdaemon") - [Reza Moallemi (@moallemi)](https://github.com/moallemi "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [rhooper (@rhooper)](https://github.com/rhooper "27 total commits to the home-assistant organization, 25 commits to home-assistant, 2 commits to hadashboard") - [Riccardo Canta (@commento)](https://github.com/commento "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -719,19 +719,22 @@ This page contains a list of people who have contributed in one way or another t - [Rick (@rcuddy)](https://github.com/rcuddy "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Rick Rubino (@rrubin0)](https://github.com/rrubin0 "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") +- [rnizametdinov (@rnizametdinov)](https://github.com/rnizametdinov "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Cranfill (@RobCranfill)](https://github.com/RobCranfill "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1411 total commits to the home-assistant organization, 735 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 14 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js, 3 commits to scenegen, 3 commits to appdaemon, 3 commits to hassbot, 3 commits to organization, 3 commits to hadashboard, 3 commits to home-assistant-js-websocket, 2 commits to LabelBot, 2 commits to lambda-home-assistant-github, 2 commits to fabric-home-assistant, 2 commits to micropython-home-assistant, 2 commits to home-assistant-assets, 2 commits to home-assistant-notebooks") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1430 total commits to the home-assistant organization, 752 commits to home-assistant-iOS, 260 commits to home-assistant, 249 commits to home-assistant.io, 93 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 14 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to organization, 3 commits to scenegen, 3 commits to appdaemon, 3 commits to home-assistant-js-websocket, 3 commits to hassbot, 3 commits to home-assistant-js, 3 commits to hadashboard, 2 commits to fabric-home-assistant, 2 commits to LabelBot, 2 commits to home-assistant-assets, 2 commits to micropython-home-assistant, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-notebooks") - [Robert (@metbril)](https://github.com/metbril "8 total commits to the home-assistant organization, 8 commits to home-assistant.io") - [Robert Accettura (@raccettura)](https://github.com/raccettura "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to appdaemon") -- [Robert Svensson (@Kane610)](https://github.com/Kane610 "64 total commits to the home-assistant organization, 43 commits to home-assistant, 19 commits to home-assistant.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "3 total commits to the home-assistant organization, 2 commits to netdisco, 1 commit to appdaemon") +- [Robert Svensson (@Kane610)](https://github.com/Kane610 "78 total commits to the home-assistant organization, 53 commits to home-assistant, 22 commits to home-assistant.io, 1 commit to netdisco, 1 commit to developers.home-assistant, 1 commit to home-assistant-polymer") - [Robin (@robmarkcole)](https://github.com/robmarkcole "57 total commits to the home-assistant organization, 35 commits to home-assistant.io, 19 commits to home-assistant, 2 commits to home-assistant-assets, 1 commit to hassos") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Roddie Hasan (@eiddor)](https://github.com/eiddor "6 total commits to the home-assistant organization, 6 commits to home-assistant.io") +- [Rohan Kapoor (@rohankapoorcom)](https://github.com/rohankapoorcom "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Roi Dayan (@roidayan)](https://github.com/roidayan "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [roiff (@roiff)](https://github.com/roiff "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [Rolf Schäuble (@rschaeuble)](https://github.com/rschaeuble "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Ron Klinkien (@cyberjunky)](https://github.com/cyberjunky "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Ron Miller (@brainyron)](https://github.com/brainyron "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [roqeer (@roqeer)](https://github.com/roqeer "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -742,11 +745,12 @@ This page contains a list of people who have contributed in one way or another t - [ruohan\.chen (@crhan)](https://github.com/crhan "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ruslan Sayfutdinov (@KapJI)](https://github.com/KapJI "1 total commits to the home-assistant organization, 1 commit to developers.home-assistant") - [Russ K (@rkubes)](https://github.com/rkubes "2 total commits to the home-assistant organization, 2 commits to pi-gen") -- [Russell Cloran (@rcloran)](https://github.com/rcloran "36 total commits to the home-assistant organization, 32 commits to home-assistant, 4 commits to homebridge-homeassistant") +- [Russell Cloran (@rcloran)](https://github.com/rcloran "37 total commits to the home-assistant organization, 33 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Ryan Bahm (@rdbahm)](https://github.com/rdbahm "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Ryan Bray (@rbray89)](https://github.com/rbray89 "13 total commits to the home-assistant organization, 12 commits to hassos, 1 commit to hassio-build") - [Ryan Daigle (@rwdaigle)](https://github.com/rwdaigle "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Ryan Jarvis (@Cabalist)](https://github.com/Cabalist "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") +- [Ryan Kladar (@Kladar)](https://github.com/Kladar "1 total commits to the home-assistant organization, 1 commit to hassos") - [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "193 total commits to the home-assistant organization, 163 commits to home-assistant, 15 commits to home-assistant.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") - [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "97 total commits to the home-assistant organization, 75 commits to hassio-cli, 16 commits to home-assistant, 6 commits to home-assistant.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") @@ -766,7 +770,7 @@ This page contains a list of people who have contributed in one way or another t - [Sean Wilson (@swilson)](https://github.com/swilson "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [Sebastian (@sebk-666)](https://github.com/sebk-666 "6 total commits to the home-assistant organization, 5 commits to home-assistant.io, 1 commit to netdisco") - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization, 3 commits to libcoap") -- [Sebastian Muszynski (@syssi)](https://github.com/syssi "136 total commits to the home-assistant organization, 86 commits to home-assistant, 45 commits to home-assistant.io, 3 commits to netdisco, 2 commits to home-assistant-polymer") +- [Sebastian Muszynski (@syssi)](https://github.com/syssi "138 total commits to the home-assistant organization, 88 commits to home-assistant, 45 commits to home-assistant.io, 3 commits to netdisco, 2 commits to home-assistant-polymer") - [Sebastian von Minckwitz (@teodoc)](https://github.com/teodoc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Semir Patel (@analogue)](https://github.com/analogue "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "9 total commits to the home-assistant organization, 9 commits to home-assistant") @@ -782,8 +786,7 @@ This page contains a list of people who have contributed in one way or another t - [Sjors Spoorendonk (@sjorsjes)](https://github.com/sjorsjes "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [sjoshi10 (@sjoshi10)](https://github.com/sjoshi10 "1 total commits to the home-assistant organization, 1 commit to warrant") - [snizzleorg (@snizzleorg)](https://github.com/snizzleorg "5 total commits to the home-assistant organization, 5 commits to hadashboard") -- [squidwardy (@squidwardy)](https://github.com/squidwardy "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Sriram Vaidyanathan (@vaidyasr)](https://github.com/vaidyasr "6 total commits to the home-assistant organization, 3 commits to home-assistant.io, 3 commits to home-assistant") +- [Sriram Vaidyanathan (@vaidyasr)](https://github.com/vaidyasr "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.io") - [St\. John Johnson (@stjohnjohnson)](https://github.com/stjohnjohnson "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.io") - [starkillerOG (@starkillerOG)](https://github.com/starkillerOG "12 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant.io, 1 commit to developers.home-assistant, 1 commit to home-assistant-polymer") - [Stefan Jonasson (@stefan-jonasson)](https://github.com/stefan-jonasson "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.io") @@ -792,27 +795,27 @@ This page contains a list of people who have contributed in one way or another t - [stephanerosi (@stephanerosi)](https://github.com/stephanerosi "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.io") - [Stephen Edgar (@ntwb)](https://github.com/ntwb "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") - [Stephen Tomkinson (@neonbunny)](https://github.com/neonbunny "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Stephen Vanterpool (@blackgold9)](https://github.com/blackgold9 "38 total commits to the home-assistant organization, 37 commits to home-assistant-iOS, 1 commit to developers.home-assistant") +- [Stephen Vanterpool (@blackgold9)](https://github.com/blackgold9 "75 total commits to the home-assistant organization, 73 commits to home-assistant-iOS, 1 commit to developers.home-assistant, 1 commit to home-assistant-polymer") - [Stephen Yeargin (@stephenyeargin)](https://github.com/stephenyeargin "25 total commits to the home-assistant organization, 24 commits to hubot-home-assistant, 1 commit to home-assistant-polymer") - [Steve Easley (@SteveEasley)](https://github.com/SteveEasley "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Steven Looman (@StevenLooman)](https://github.com/StevenLooman "9 total commits to the home-assistant organization, 7 commits to home-assistant, 2 commits to netdisco") +- [Steven Looman (@StevenLooman)](https://github.com/StevenLooman "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to netdisco") - [Stu Gott (@stu-gott)](https://github.com/stu-gott "9 total commits to the home-assistant organization, 5 commits to home-assistant.io, 4 commits to home-assistant") - [Stuart Williams (@stuwil)](https://github.com/stuwil "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Suresh Kalavala (@skalavala)](https://github.com/skalavala "32 total commits to the home-assistant organization, 32 commits to home-assistant.io") - [Sven\-Hendrik Haase (@svenstaro)](https://github.com/svenstaro "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [swanwila (@swanwila)](https://github.com/swanwila "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [System Tester (@systemtester)](https://github.com/systemtester "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Sytone (@sytone)](https://github.com/sytone "8 total commits to the home-assistant organization, 6 commits to home-assistant.io, 1 commit to developers.home-assistant, 1 commit to hassio-build") -- [Sören Oldag (@soldag)](https://github.com/soldag "15 total commits to the home-assistant organization, 8 commits to home-assistant.io, 7 commits to home-assistant") +- [Sytone (@sytone)](https://github.com/sytone "8 total commits to the home-assistant organization, 6 commits to home-assistant.io, 1 commit to hassio-build, 1 commit to developers.home-assistant") +- [Sören Oldag (@soldag)](https://github.com/soldag "16 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.io") - [Tabakhase (@tabakhase)](https://github.com/tabakhase "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [tadly (@tadly)](https://github.com/tadly "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [tadly (@tadly)](https://github.com/tadly "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [tango-foxtrot (@tango-foxtrot)](https://github.com/tango-foxtrot "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Taylor Peet (@RePeet13)](https://github.com/RePeet13 "9 total commits to the home-assistant organization, 9 commits to home-assistant.io") - [Teagan Glenn (@Teagan42)](https://github.com/Teagan42 "59 total commits to the home-assistant organization, 49 commits to home-assistant, 9 commits to home-assistant.io, 1 commit to home-assistant-js") - [Ted Drain (@TD22057)](https://github.com/TD22057 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [tedstriker (@tedstriker)](https://github.com/tedstriker "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Teemu Mikkonen (@T3m3z)](https://github.com/T3m3z "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Teemu R\. (@rytilahti)](https://github.com/rytilahti "59 total commits to the home-assistant organization, 46 commits to home-assistant, 9 commits to home-assistant.io, 4 commits to netdisco") +- [Teemu R\. (@rytilahti)](https://github.com/rytilahti "60 total commits to the home-assistant organization, 47 commits to home-assistant, 9 commits to home-assistant.io, 4 commits to netdisco") - [Teguh Sobirin (@tjstyle)](https://github.com/tjstyle "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Tentoe (@Tentoe)](https://github.com/Tentoe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Theb-1 (@Theb-1)](https://github.com/Theb-1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") @@ -835,6 +838,7 @@ This page contains a list of people who have contributed in one way or another t - [ThUnD3r\|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [tijuca (@tijuca)](https://github.com/tijuca "106 total commits to the home-assistant organization, 106 commits to libcoap") - [Tim Wilbrink (@TWilb)](https://github.com/TWilb "15 total commits to the home-assistant organization, 15 commits to home-assistant-iOS") +- [Timmo (@timmo001)](https://github.com/timmo001 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Timo (@timotk)](https://github.com/timotk "1 total commits to the home-assistant organization, 1 commit to netdisco") - [timstanley1985 (@timstanley1985)](https://github.com/timstanley1985 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [TJ Rana (@tjrana)](https://github.com/tjrana "1 total commits to the home-assistant organization, 1 commit to pi-gen") @@ -843,12 +847,12 @@ This page contains a list of people who have contributed in one way or another t - [Tobias Hoff (@ToSa27)](https://github.com/ToSa27 "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Tobie Booth (@tobiebooth)](https://github.com/tobiebooth "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Toby Gray (@tobygray)](https://github.com/tobygray "4 total commits to the home-assistant organization, 4 commits to home-assistant") -- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "37 total commits to the home-assistant organization, 21 commits to home-assistant, 10 commits to home-assistant.io, 5 commits to hassio-addons, 1 commit to hassio") +- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "38 total commits to the home-assistant organization, 22 commits to home-assistant, 10 commits to home-assistant.io, 5 commits to hassio-addons, 1 commit to hassio") - [toddeye (@toddeye)](https://github.com/toddeye "20 total commits to the home-assistant organization, 20 commits to home-assistant") - [Tom (@Qu3uk)](https://github.com/Qu3uk "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Tom Dickman (@tdickman)](https://github.com/tdickman "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Tom Duijf (@tomduijf)](https://github.com/tomduijf "70 total commits to the home-assistant organization, 53 commits to home-assistant, 9 commits to home-assistant.io, 6 commits to home-assistant-polymer, 2 commits to netdisco") -- [Tom Harris (@teharris1)](https://github.com/teharris1 "22 total commits to the home-assistant organization, 15 commits to home-assistant, 7 commits to home-assistant.io") +- [Tom Harris (@teharris1)](https://github.com/teharris1 "27 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.io") - [Tom Hoover (@tomhoover)](https://github.com/tomhoover "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Tom Matheussen (@Tommatheussen)](https://github.com/Tommatheussen "13 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant-polymer, 3 commits to home-assistant.io") - [Tom Usher (@tomusher)](https://github.com/tomusher "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -864,7 +868,7 @@ This page contains a list of people who have contributed in one way or another t - [Trevor (@tboyce021)](https://github.com/tboyce021 "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.io") - [Trey Hunner (@treyhunner)](https://github.com/treyhunner "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [trollkarlen (@trollkarlen)](https://github.com/trollkarlen "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [Tsvi Mostovicz (@tsvi)](https://github.com/tsvi "9 total commits to the home-assistant organization, 5 commits to home-assistant.io, 4 commits to home-assistant") +- [Tsvi Mostovicz (@tsvi)](https://github.com/tsvi "12 total commits to the home-assistant organization, 6 commits to home-assistant.io, 6 commits to home-assistant") - [Tyler Page (@iamtpage)](https://github.com/iamtpage "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Tõnis Tobre (@tobre6)](https://github.com/tobre6 "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [uchagani (@uchagani)](https://github.com/uchagani "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to home-assistant-polymer") @@ -877,7 +881,8 @@ This page contains a list of people who have contributed in one way or another t - [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.io") -- [Ville Skyttä (@scop)](https://github.com/scop "91 total commits to the home-assistant organization, 59 commits to home-assistant, 11 commits to home-assistant.io, 9 commits to netdisco, 4 commits to hassio-addons, 3 commits to hassio-cli, 2 commits to hassio-build, 2 commits to home-assistant-polymer, 1 commit to hassio") +- [Ville Skyttä (@scop)](https://github.com/scop "106 total commits to the home-assistant organization, 70 commits to home-assistant, 11 commits to netdisco, 11 commits to home-assistant.io, 4 commits to hassio-addons, 3 commits to hassio-cli, 2 commits to hassio-build, 2 commits to developers.home-assistant, 2 commits to home-assistant-polymer, 1 commit to hassio") +- [Villányi Bálint (@villanyibalint)](https://github.com/villanyibalint "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vincent Van Den Berghe (@vandenberghev)](https://github.com/vandenberghev "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to hassio-build") @@ -890,25 +895,27 @@ This page contains a list of people who have contributed in one way or another t - [Will W\. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Willems Davy (@joyrider3774)](https://github.com/joyrider3774 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [William Johansson (@radhus)](https://github.com/radhus "1 total commits to the home-assistant organization, 1 commit to hassio") -- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "119 total commits to the home-assistant organization, 81 commits to home-assistant, 36 commits to home-assistant.io, 2 commits to netdisco") +- [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "123 total commits to the home-assistant organization, 83 commits to home-assistant, 37 commits to home-assistant.io, 2 commits to netdisco, 1 commit to developers.home-assistant") - [williamlehman (@williamlehman)](https://github.com/williamlehman "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Wim Haanstra (@depl0y)](https://github.com/depl0y "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Wim Haanstra (@depl0y)](https://github.com/depl0y "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.io") - [wokar (@wokar)](https://github.com/wokar "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.io") - [Wolf\-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") - [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [XECDesign (@XECDesign)](https://github.com/XECDesign "145 total commits to the home-assistant organization, 145 commits to pi-gen") - [Xorso (@Xorso)](https://github.com/Xorso "22 total commits to the home-assistant organization, 21 commits to home-assistant, 1 commit to hassio-addons") -- [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant.io, 4 commits to home-assistant") +- [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.io") - [yasinS (@yasinS)](https://github.com/yasinS "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Yevgeniy (@sgttrs)](https://github.com/sgttrs "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [yingzong (@yingzong)](https://github.com/yingzong "1 total commits to the home-assistant organization, 1 commit to warrant") +- [yulongying (@yulongying)](https://github.com/yulongying "1 total commits to the home-assistant organization, 1 commit to home-assistant-js-websocket") - [Zen Tormey (@xehn)](https://github.com/xehn "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Zhao Lu (@zlu)](https://github.com/zlu "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "12 total commits to the home-assistant organization, 7 commits to home-assistant.io, 5 commits to home-assistant") - [Zorks (@Zorks)](https://github.com/Zorks "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") +- [Zoé Bőle (@zoe1337)](https://github.com/zoe1337 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Åskar Andersson (@olskar)](https://github.com/olskar "10 total commits to the home-assistant organization, 6 commits to home-assistant.io, 3 commits to home-assistant, 1 commit to hassbian-scripts") This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Tuesday, August 28th 2018, 7:39:11 am UTC. +This page was last updated Friday, September 21st 2018, 7:49:45 pm UTC. From 3984d1674c67040f5802009a8a282b4a35e1b4f5 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 21 Sep 2018 22:35:12 +0200 Subject: [PATCH 156/176] Add example for JSON-formatted payload --- source/_docs/mqtt/service.markdown | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/source/_docs/mqtt/service.markdown b/source/_docs/mqtt/service.markdown index 941d79e7b78..d4a7aad206d 100644 --- a/source/_docs/mqtt/service.markdown +++ b/source/_docs/mqtt/service.markdown @@ -10,7 +10,7 @@ footer: true logo: mqtt.png --- -The MQTT component will register the service `publish` which allows publishing messages to MQTT topics. There are two ways of specifying your payload. You can either use `payload` to hard-code a payload or use `payload_template` to specify a [template](/topics/templating/) that will be rendered to generate the payload. +The MQTT component will register the service `mqtt.publish` which allows publishing messages to MQTT topics. There are two ways of specifying your payload. You can either use `payload` to hard-code a payload or use `payload_template` to specify a [template](/topics/templating/) that will be rendered to generate the payload. ```json { @@ -19,10 +19,20 @@ The MQTT component will register the service `publish` which allows publishing m } ``` +{% raw %} ```json { "topic": "home-assistant/light/1/state", - "payload_template": "{% raw %}{{ states('device_tracker.paulus') }}{% endraw %}" + "payload_template": "{{ states('device_tracker.paulus') }}" } ``` +{% endraw %} +`payload` must be a string. If you want to send JSON then you need to format/escape it properly. Like: + +```json +{ + "topic": "home-assistant/light/1/state", + "payload":"{\"Status\":\"off\", \"Data\":\"something\"}" +} +``` From a114c7fa9b6d3e11ac5685133820fc5b445f8cca Mon Sep 17 00:00:00 2001 From: Malte Franken Date: Sat, 22 Sep 2018 16:10:18 +0930 Subject: [PATCH 157/176] GeoJSON platform (#6316) * new geo json platform for the geo location component * added iot class; removed `scan_interval` and mention default in the description instead --- .../geo_location.geo_json_events.markdown | 57 ++++++++++++++++++ source/_components/geo_location.markdown | 2 +- .../images/supported_brands/geo_location.png | Bin 0 -> 15711 bytes 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 source/_components/geo_location.geo_json_events.markdown create mode 100644 source/images/supported_brands/geo_location.png diff --git a/source/_components/geo_location.geo_json_events.markdown b/source/_components/geo_location.geo_json_events.markdown new file mode 100644 index 00000000000..3be0ccc2fb2 --- /dev/null +++ b/source/_components/geo_location.geo_json_events.markdown @@ -0,0 +1,57 @@ +--- +layout: page +title: "GeoJSON Events" +description: "Instructions on how to integrate GeoJSON feeds into Home Assistant." +date: 2018-09-19 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: geo_location.png +ha_category: Geo Location +ha_iot_class: "Cloud Polling" +ha_release: "0.79" +--- + +The `geo_json_events` platform lets you integrate GeoJSON feeds. It retrieves events from a feed and shows information of those events filtered by distance to Home Assistant's location. +All entries in the GeoJSON feed must define a `geometry` which typically is a point or polygon with geo coordinates. In addition, this platform will look for a `title` key in the entry's `properties` and use that as the entity's name. + +Entities are generated, updated and removed automatically with each update from the GeoJSON feed. Each entity defines latitude and longitude and will be shown on the map automatically. The distance in kilometers is available as the state of each entity. + +The data is updated every 5 minutes. + +## {% linkable_title Configuration %} + +To integrate a GeoJSON feed, add the following lines to your `configuration.yaml`. This is an example configuration showing [earthquake data provided by the U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php). + +```yaml +# Example configuration.yaml entry +geo_location: + - platform: geo_json_events + url: https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson +``` + +{% configuration %} +url: + description: Full URL of the GeoJSON feed. + required: true + type: string +radius: + description: The distance in kilometers around the Home Assistant's coordinates in which events are considered. + required: false + type: string + default: 20km +{% endconfiguration %} + +## {% linkable_title Advanced Configuration Example %} + +When integrating several GeoJSON feeds, it may be useful to distinguish the entities of different feeds. The easiest way to do that is by defining an [`entity_namespace`](/docs/configuration/platform_options/#entity-namespace/) for each platform which will prefix each entity ID with the defined value. + +```yaml +# Example configuration.yaml entry +geo_location: + - platform: geo_json_events + url: https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson + radius: 250 + entity_namespace: 'usgs_earthquakes' +``` diff --git a/source/_components/geo_location.markdown b/source/_components/geo_location.markdown index 2990c019514..c77243971a8 100644 --- a/source/_components/geo_location.markdown +++ b/source/_components/geo_location.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -ha_category: Other +logo: geo_location.png ha_release: "0.78" --- diff --git a/source/images/supported_brands/geo_location.png b/source/images/supported_brands/geo_location.png new file mode 100644 index 0000000000000000000000000000000000000000..a8fab0f913329b027b3ae4d32c31c68d4d1d3637 GIT binary patch literal 15711 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 Date: Sat, 22 Sep 2018 11:23:14 +0200 Subject: [PATCH 158/176] release 78.3 --- _config.yml | 6 +++--- source/_posts/2018-09-15-release-78.markdown | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 73f04dcb2f8..ad7f9d183c9 100644 --- a/_config.yml +++ b/_config.yml @@ -142,13 +142,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 78 -current_patch_version: 1 -date_released: 2018-09-20 +current_patch_version: 3 +date_released: 2018-09-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. # Major release: -patch_version_notes: "#release-0781---september-20" +patch_version_notes: "#release-0783---september-22" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-09-15-release-78.markdown b/source/_posts/2018-09-15-release-78.markdown index 449b4efb79a..a8e712f1bc4 100644 --- a/source/_posts/2018-09-15-release-78.markdown +++ b/source/_posts/2018-09-15-release-78.markdown @@ -48,6 +48,20 @@ Also on your profile page is a new list of existing refresh tokens. These are al [media_player.cast docs]: /components/media_player.cast/ [sensor.snmp docs]: /components/sensor.snmp/ +## {% linkable_title Release 0.78.2 - September 21 %} + +- Fix discovery + +## {% linkable_title Release 0.78.3 - September 22 %} + +- Bump gtts-token to 1.1.2 ([@edif30] - [#16775]) ([tts docs]) + +[#16537]: https://github.com/home-assistant/home-assistant/pull/16537 +[#16775]: https://github.com/home-assistant/home-assistant/pull/16775 +[@edif30]: https://github.com/edif30 +[@frenck]: https://github.com/frenck +[tts docs]: /components/tts/ + ## {% 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 42c3f9ef447d375f86b7dff4cb6855a4d69e7a3e Mon Sep 17 00:00:00 2001 From: WofWca <39462442+WofWca@users.noreply.github.com> Date: Sat, 22 Sep 2018 17:45:09 +0700 Subject: [PATCH 159/176] Update virtualenv.markdown (#6335) --- source/_docs/installation/virtualenv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index 7c56772af73..336ced4598e 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -72,7 +72,7 @@ It is recommended to use the [advanced guide](/docs/installation/raspberry-pi/) - It's recommended to run Home Assistant as a dedicated user.

-Looking for more advanced guides? Check our [Rasbian guide](/docs/installation/raspberry-pi/) or the [other installation guides](/docs/installation/). +Looking for more advanced guides? Check our [Raspbian guide](/docs/installation/raspberry-pi/) or the [other installation guides](/docs/installation/).

### {% linkable_title After upgrading Python %} From d56c0ba90beb83b9e1cc6350716adc9eda6c7666 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 22 Sep 2018 19:08:47 +0100 Subject: [PATCH 160/176] Highlighting need to config check (#6338) Highlighting the need to run a config check --- source/_docs/configuration.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index 2e57862c030..fb4193f7265 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -36,7 +36,9 @@ If you run into trouble while configuring Home Assistant, have a look at the [co You will have to restart Home Assistant for most changes to `configuration.yaml` to take effect. You can load changes to [automations](/docs/automation/), [customize](/docs/configuration/customizing-devices/), [groups](/components/group/), and [scripts](/components/script/) without restarting if you're not using [packages](/docs/configuration/packages/). -If you've made any changes, remember to check your configuration before trying to reload or restart. +

+If you've made any changes, remember to [check your configuration](https://www.home-assistant.io/docs/configuration/troubleshooting/#problems-with-the-configuration) before trying to reload or restart. +

## {% linkable_title Migrating to a new system %} From 8e7ed187718a267ed10396a7511a594f0ea4718a Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 22 Sep 2018 19:09:34 +0100 Subject: [PATCH 161/176] Adding how to config check on Hass.io (#6337) Adding how to config check on Hass.io --- source/_docs/configuration/troubleshooting.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/troubleshooting.markdown b/source/_docs/configuration/troubleshooting.markdown index 0d867a2622c..f76ca7086a0 100644 --- a/source/_docs/configuration/troubleshooting.markdown +++ b/source/_docs/configuration/troubleshooting.markdown @@ -26,7 +26,7 @@ If you have incorrect entries in your configuration files you can use the [`chec One of the most common problems with Home Assistant is an invalid `configuration.yaml` file. - - You can test your configuration using the command line with: `hass --script check_config` + - You can test your configuration using the command line with: `hass --script check_config`. On Hass.io you can use the [hassio command](https://www.home-assistant.io/hassio/commandline/#home-assistant): `hassio homeassistant check`. - You can verify your configuration's yaml structure using [this online YAML parser](http://yaml-online-parser.appspot.com/) or [YAML Lint](http://www.yamllint.com/). - To learn more about the quirks of YAML, read [YAML IDIOSYNCRASIES](https://docs.saltstack.com/en/latest/topics/troubleshooting/yaml_idiosyncrasies.html) by SaltStack (the examples there are specific to SaltStack, but do explain YAML issues well). From 1db842f371058bb523c8c412306bb9a982d55abc Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 22 Sep 2018 19:10:24 +0100 Subject: [PATCH 162/176] Need an account (#6336) A few people have wondered why this doesn't magically work. Adding a note that an account is required, and how to get the API key. --- source/_addons/duckdns.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index 2f910f75b06..38c947eb6e3 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -10,7 +10,7 @@ footer: true featured: true --- -[Duck DNS](https://www.duckdns.org/) is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. This add-on includes support for Let's Encrypt and will automatically create and renew your certificates. +[Duck DNS](https://www.duckdns.org/) is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. This add-on includes support for Let's Encrypt and will automatically create and renew your certificates. You will need to sign up for a Duck DNS account before using this add-on. ```json { @@ -28,7 +28,7 @@ featured: true Configuration variables: - **lets_encrypt.accept_terms** (*Required*): If you accept the [Let's Encrypt Subscriber Agreement](https://letsencrypt.org/repository/), it will generate and update Let's Encrypt certificates for your DuckDNS domain. -- **token** (*Required*): Your Duck DNS API key. +- **token** (*Required*): Your Duck DNS API key, from your DuckDNS account page. - **domains** (*Required*): A list of domains to update DNS. - **seconds** (*Required*): Seconds between updates to Duck DNS. From 0a87b19a95e6e9e9f7e9a1155cb80264a57ff14b Mon Sep 17 00:00:00 2001 From: Paul Biester Date: Sun, 23 Sep 2018 10:52:52 +0200 Subject: [PATCH 163/176] Add config option to specify router IP address (#6333) * Add config option to specify router IP address * Update configuration sample and add description --- .../_components/device_tracker.bbox.markdown | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/source/_components/device_tracker.bbox.markdown b/source/_components/device_tracker.bbox.markdown index 35bae013f02..5efa022bad2 100644 --- a/source/_components/device_tracker.bbox.markdown +++ b/source/_components/device_tracker.bbox.markdown @@ -16,9 +16,11 @@ ha_iot_class: "Local Polling" The `bbox` platform offers presence detection by looking at connected devices to a [Bbox](https://fr.wikipedia.org/wiki/Bbox) based router from [Bouygues](https://www.bouyguestelecom.fr/), which is one of the main Internet provider in France. -

-Bbox is a generic name for different hardware routers. The platform has only been tested on a Sagem F@st 5330b because it's the only model the developer owns. -

+Bbox is a generic name for different hardware routers. The platform has been tested with the following devices: + +- Sagem F@st 5330b + +## {% linkable_title Configuration %} To use an Bbox router in your installation, add the following to your `configuration.yaml` file: @@ -28,8 +30,17 @@ device_tracker: - platform: bbox ``` +{% configuration %} +host: + description: IP address of your Bbox device. + required: false + type: string + default: 192.168.1.254 +{% endconfiguration %} + +

-For now and due to third party limitation, the Bbox must be on the same local network as the Home Assistant installation. And with the default IP configuration (IP of the router must be 192.168.1.254). +For now and due to third party limitation, the Bbox must be on the same local network as the Home Assistant installation.

See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 5429bde6d6576a5b121168b7e883c1cb876117eb Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 23 Sep 2018 11:07:48 +0100 Subject: [PATCH 164/176] Clarity about the wakeup interval (#6339) Lots of people seem to mistake the wakeup interval with how often the device reports changes --- source/_docs/z-wave/control-panel.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index dc3f19c5cc5..7618c425629 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -116,6 +116,10 @@ That would remove the broadcast group from association group 1 of the device wit You can set the *wakeup* interval (in seconds) of the device, this is shown for all devices that can be battery powered, even if they are currently mains powered. The wakeup interval only applies when those devices are battery powered. +

+The wakeup interval has no impact on the device's ability to report sensor changes. This is purely for how often the Z-Wave chip will check in with the controller. That activity consumes a lot of battery power compared to reporting sensor changes and if you reduce it you'll be reducing the battery life of your device. +

+ Underneath that you can select any supported configuration parameter to see the current setting. You can then change this and select **Set Config Parameter** to updated it. Battery powered devices will be updated the next time they wake. ### {% linkable_title Node protection %} From 4ed2cbd936a9623d8efa0b24c8038fe814de2bf1 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Sun, 23 Sep 2018 03:48:24 -0700 Subject: [PATCH 165/176] Add note about robot being offline (#6340) * Add note about robot being offline * Remove spaces --- source/_components/vacuum.neato.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/vacuum.neato.markdown b/source/_components/vacuum.neato.markdown index 51cf2cc1d81..4b95366c08c 100644 --- a/source/_components/vacuum.neato.markdown +++ b/source/_components/vacuum.neato.markdown @@ -17,6 +17,10 @@ redirect_from: /components/sensor.neato/ The `neato` vacuum platform allows you to control your [Neato Botvac Connected](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/). The status will contain attributes on the robots last clean session. +

+If you notice the robot stops responding to commands check the status attribute to see if the robot is offline. If you see "Robot Offline" check the Neato app and make sure your robot is connected and working. If it is not then follow the steps in the app to reset your robot and give it the same name as before then restart Home Assistant. +

+ To add `neato` vacuum to your installation, please follow instructions in [Neato component](/components/neato/). Currently supported features are: From 3669c05f9d77d1fd524abcb69080fb5559d4731c Mon Sep 17 00:00:00 2001 From: Alexis Iglauer Date: Sun, 23 Sep 2018 12:34:54 +0100 Subject: [PATCH 166/176] Typo (#6341) --- source/_components/linode.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/linode.markdown b/source/_components/linode.markdown index 581f4822c16..ccd090b47e8 100644 --- a/source/_components/linode.markdown +++ b/source/_components/linode.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Cloud Polling" The `linode` component allows you to access the information about your [Linode](https://linode.com) systems from Home Assistant. -## {% linkable_title sETUP %} +## {% linkable_title Setup %} Obtain your oAuth2 Access Token from Linode account. From bd9b269536756d7870055f3449e41638877cd168 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 23 Sep 2018 21:20:35 +0100 Subject: [PATCH 167/176] Adding how to confirm the USB path on Hass.io (#6343) Adding how to confirm the USB path on Hass.io --- source/_docs/z-wave/installation.markdown | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 7e27a19c7f0..a734e976e51 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -161,14 +161,20 @@ $ ls /dev/cu.usbmodem* ### {% linkable_title Hass.io %} -To enable Z-Wave, plug your Z-Wave USB stick into your Raspberry Pi 3 and add the following to your `configuration.yaml`: +To enable Z-Wave, plug your Z-Wave USB stick into your system and add the following to your `configuration.yaml`: ```yaml zwave: usb_path: /dev/ttyACM0 ``` -Depending on your Z-Wave device it may instead be `/dev/ttyAMA0` (eg Razberry board) or `/dev/ttyUSB0` (eg HUBUZB-1). +If the above defaults don't work, you can check what hardware has been found using the [hassio command](/hassio/commandline/#hardware): + +```bash +$ hassio hardware info +``` + +Or you can use the UI and look in the *System* section of the *Hass.io* menu. There you'll find a *Hardware* button which will list all the hardware found. ### {% linkable_title RancherOS %} From e7ff99d6c8288afc1740c21a0fc30052aab07353 Mon Sep 17 00:00:00 2001 From: Baptiste Lecocq Date: Mon, 24 Sep 2018 06:30:14 +0000 Subject: [PATCH 168/176] Add linky component page (#6346) * Add linky component page * Minor changes --- source/_components/sensor.linky.markdown | 41 ++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 source/_components/sensor.linky.markdown diff --git a/source/_components/sensor.linky.markdown b/source/_components/sensor.linky.markdown new file mode 100644 index 00000000000..00a236deded --- /dev/null +++ b/source/_components/sensor.linky.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "Linky Sensor" +description: "Instructions on how to integrate Linky daily data within Home Assistant." +date: 2018-09-06 08:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_release: 0.79 +ha_category: Energy +ha_iot_class: "Cloud Polling" +--- + + +The `linky` sensor platform is showing the last day consumption of your home from the [Linky electric meter](https://www.enedis.fr/english). + +## {% linkable_title Configuration %} + +To add the Linky sensor to your installation, add your Enedis account credentials to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: linky + username: YOUR_LINKY_USERNAME + password: YOUR_LINKY_PASSWORD +``` + +{% configuration %} +username: + description: The Enedis account username. + required: true + type: string +password: + description: The Enedis account password. + required: true + type: string +{% endconfiguration %} + From 05463dbf801d132e7845a8eed0a7d99188506eea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Mon, 24 Sep 2018 10:22:09 +0200 Subject: [PATCH 169/176] Documentation change to go with pull request home-assistant/home-assistant#16177 (#6075) --- source/_docs/configuration/packages.markdown | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index b8caf5394cb..9bcd0e2822c 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -63,9 +63,8 @@ light: There are some rules for packages that will be merged: -1. Component names may only use the basic form (e.g., `switch`, but not `switch 1` or `switch aa`). -2. Platform based components (`light`, `switch`, etc) can always be merged. -3. Components where entities are identified by a key that will represent the entity_id (`{key: config}`) need to have unique 'keys' between packages and the main configuration file. +1. Platform based components (`light`, `switch`, etc) can always be merged. +2. Components where entities are identified by a key that will represent the entity_id (`{key: config}`) need to have unique 'keys' between packages and the main configuration file. For example if we have the following in the main config. You are not allowed to re-use "my_input" again for `input_boolean` in a package: @@ -73,7 +72,7 @@ There are some rules for packages that will be merged: input_boolean: my_input: ``` -4. Any component that is not a platform [2], or dictionaries with Entity ID keys [3] can only be merged if its keys, except those for lists, are solely defined once. +3. Any component that is not a platform [2], or dictionaries with Entity ID keys [3] can only be merged if its keys, except those for lists, are solely defined once.

Components inside packages can only specify platform entries using configuration style 1, where all the platforms are grouped under the component name. From d13cd890b8d859e8e8154ed63efad2a33cd0b237 Mon Sep 17 00:00:00 2001 From: emontnemery Date: Mon, 24 Sep 2018 10:22:33 +0200 Subject: [PATCH 170/176] Documentation for removal of discovered device (#6276) * Update discovery.markdown * Minor change --- source/_docs/mqtt/discovery.markdown | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 75a56503e8a..a7477b959da 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -22,7 +22,6 @@ Supported by MQTT discovery: - [Sensors](/components/sensor.mqtt/) - [Switches](/components/switch.mqtt/) - To enable MQTT discovery, add the following to your `configuration.yaml` file: ```yaml @@ -49,6 +48,8 @@ The discovery topic need to follow a specific format: The payload will be checked like an entry in your `configuration.yaml` file if a new device is added. This means that missing variables will be filled with the platform's default values. All configuration variables which are *required* must be present in the initial payload send to `/config`. +An empty payload will cause a previously discovered device to be deleted. + The `` level can be used by clients to only subscribe to their own (command) topics by using one wildcard topic like `/+//+/set`. ### {% linkable_title Support by third-party tools %} @@ -79,6 +80,12 @@ Update the state. $ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/binary_sensor/garden/state" -m ON ``` +Delete the sensor by sending an empty message. + + ```bash +$ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/binary_sensor/garden/state" -m '' +``` + Setting up a switch is similar but requires a `command_topic` as mentioned in the [MQTT switch documentation](/components/switch.mqtt/). - Configuration topic: `homeassistant/switch/irrigation/config` From 191cd5faf39bcf15b7486b0f0f10ff535d2fab20 Mon Sep 17 00:00:00 2001 From: Baptiste Lecocq Date: Mon, 24 Sep 2018 08:23:38 +0000 Subject: [PATCH 171/176] Add Enedis logo to linky component page (#6347) --- source/_components/sensor.linky.markdown | 2 +- source/images/supported_brands/enedis.png | Bin 0 -> 22566 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 source/images/supported_brands/enedis.png diff --git a/source/_components/sensor.linky.markdown b/source/_components/sensor.linky.markdown index 00a236deded..a6f60920053 100644 --- a/source/_components/sensor.linky.markdown +++ b/source/_components/sensor.linky.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: home-assistant.png +logo: enedis.png ha_release: 0.79 ha_category: Energy ha_iot_class: "Cloud Polling" diff --git a/source/images/supported_brands/enedis.png b/source/images/supported_brands/enedis.png new file mode 100644 index 0000000000000000000000000000000000000000..df4e95c4c747ad638a8079357d0e099aba2af8f6 GIT binary patch literal 22566 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 z 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

m|A!7=raJ$DngMvD77E zPEiqkEyIRHzo0bt+;rZ`#qYj*)?07yIHWl#4h;nY9TP@Yth}uD$ZZskmYIf5;3z!T z3oG{@S3V^eR1>vFj^`CSfiYdKlRL}uJkxj4hmx`t2WG<_WhNl z^HQWG3+fZs-aY6dHKIfgI(jJS+ss)u3u`YLyS%ox>xMrpK3@uyl#V<&{7G)u^y$+R zGw=K7jI^Tck-{K}<|nO`iQ}=;ti&Hk4jmBXXF1VOOryDnj2k(s`j1r!{a^U{7y1EN zmXQ{16s%etn1n=m{-gIS{l}oBaxA{AyU|Pchg*L3#jhWJWlAb(mWQj75DUgWnm^4H z7EEUgaEHE+4+d(T*ZuMNOJqk5`1cas{1I>Du)sY&A@I+#(g9yRgZFT?{`LOW!1Hv$ zKTvnV_`ESbpsC^*J7x!hO8K@{R?%_SMaL5D&bj8#FW$X&V`86_X-oUwQ&0ZS zFdQv|Fk&ia#BgQqFw^&ZN(lS#?jDYXF954pnjbVk{bWqwg7$#&?BRX^QbZ2xA~h3n zDkwghQ!>DOc&IGB6)7$Knu4x4V{!}l;{2QLt^3`Uc4w^YSDZa6qieKFCV#q!BG4>M zj&N|VZ~2p_uIv;Rq;scn`Vj#G)IQjiJnFUlBhZ75NxnK}{ zBtsm2C;;~(AO4;%9OTViCM}2S`FVGOhbu44d(VXR4#Ukaix=V-JCJ~2=fU^##yv|L z%B#?M`RCjzem1|t_;}~}sT)hD)7PnBE zi^VA<%Fg4s7*IT7(!x9n@pHpDu?vHcb+!_6!+4o>_XOS;X zb2qqnST@hz8?G$$-4DAdu$uzADX^OYyD6}n0=p@&n*zHju$uzADe!+rf&T{?JKR?y S#|jPr0000 literal 0 HcmV?d00001 From 71eb1b509dbfeb0e084028092a95a3a040e70eea Mon Sep 17 00:00:00 2001 From: ChrisTBarnes <25248909+ChrisTBarnes@users.noreply.github.com> Date: Mon, 24 Sep 2018 09:40:05 +0100 Subject: [PATCH 172/176] Update upgrading.markdown (#6348) --- source/_docs/installation/hassbian/upgrading.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/hassbian/upgrading.markdown b/source/_docs/installation/hassbian/upgrading.markdown index 1a6b37d4968..c9eb4af4d81 100644 --- a/source/_docs/installation/hassbian/upgrading.markdown +++ b/source/_docs/installation/hassbian/upgrading.markdown @@ -20,7 +20,7 @@ $ sudo apt-get -y upgrade #### {% linkable_title Updating Home Assistant %}

-You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade homeassistant` +You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade home-assistant`

To update the Home Assistant installation execute the following command as the `pi` user. From 6075c2d7db29f3b983164c688b05ecc9d995e44d Mon Sep 17 00:00:00 2001 From: randellhodges Date: Mon, 24 Sep 2018 13:18:57 -0400 Subject: [PATCH 173/176] Add mode to darksky (#6317) * Added mode to darksky * Minor changes --- source/_components/weather.darksky.markdown | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/_components/weather.darksky.markdown b/source/_components/weather.darksky.markdown index 6a3b1ad138f..96ef461a9ed 100644 --- a/source/_components/weather.darksky.markdown +++ b/source/_components/weather.darksky.markdown @@ -58,11 +58,15 @@ name: required: false type: string default: Open Sky +mode: + description: "The forecast type. Can be `hourly` or `daily`." + required: false + type: string + default: hourly {% endconfiguration %}

-This platform is an alternative to the [`darksky`](/components/sensor.darksky/) -sensor. +This platform is an alternative to the [`darksky`](/components/sensor.darksky/) sensor.

Details about the API are available in the [Dark Sky documentation](https://darksky.net/dev/docs). From d1c1a67daaacd20927489097fc00bf8c10d9f497 Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Mon, 24 Sep 2018 21:45:41 +0200 Subject: [PATCH 174/176] deCONZ cover documentation (#6325) * deCONZ cover documentation * Add device type description --- source/_components/cover.deconz.markdown | 26 ++++++++++++++++++++++++ source/_components/cover.markdown | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 source/_components/cover.deconz.markdown diff --git a/source/_components/cover.deconz.markdown b/source/_components/cover.deconz.markdown new file mode 100644 index 00000000000..1b721a581c1 --- /dev/null +++ b/source/_components/cover.deconz.markdown @@ -0,0 +1,26 @@ +--- +layout: page +title: "deCONZ Covers" +description: "Instructions on how to integrate Zigbee covers from deCONZ into Home Assistant." +date: 2018-09-20 23:32 +sidebar: true +comments: false +sharing: true +footer: true +logo: deconz.jpeg +ha_category: Cover +ha_release: "0.79" +ha_iot_class: "Local Push" +--- + +See the [deCONZ main component](/components/deconz/) for configuration instructions. + +Covers are devices like ventilation dampers. + +Note that devices in the cover platform identify as lights, so there is a manually curated list that defines which "lights" are covers. + +The `entity_id` name will be `cover.device_name`, where `device_name` is defined in deCONZ. + +#### {% linkable_title Verified supported covers %} + +- Keen vents diff --git a/source/_components/cover.markdown b/source/_components/cover.markdown index a530768096f..f276c9b398a 100644 --- a/source/_components/cover.markdown +++ b/source/_components/cover.markdown @@ -15,7 +15,7 @@ The display style of each entity can be modified in the [customize section](/get | Attribute | Default | Description | | --------- | ------- | ----------- | -| `device_class` | | `none` Generic cover device
`window` Window controller
`garage` Garage door controller +| `device_class` | | `none` Generic cover device
`damper` Ventilation damper controller
`garage` Garage door controller
`window` Window controller | `assumed_state` | `false` | If set to `true`, cover buttons will always be enabled ## {% linkable_title Services %} From 01eb79e53fa428c2700fdad4b3f71436eb1c8e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Tue, 25 Sep 2018 00:20:56 +0300 Subject: [PATCH 175/176] Add Huawei LTE router platform, device tracker, and sensor (#6229) * Add Huawei LTE router platform, device tracker, and sensor * Update device_tracker.huawei_lte.markdown * Update huawei_lte.markdown * Update sensor.huawei_lte.markdown --- .../device_tracker.huawei_lte.markdown | 32 ++++++++++++ source/_components/huawei_lte.markdown | 49 ++++++++++++++++++ source/_components/sensor.huawei_lte.markdown | 51 +++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 source/_components/device_tracker.huawei_lte.markdown create mode 100644 source/_components/huawei_lte.markdown create mode 100644 source/_components/sensor.huawei_lte.markdown diff --git a/source/_components/device_tracker.huawei_lte.markdown b/source/_components/device_tracker.huawei_lte.markdown new file mode 100644 index 00000000000..7beb8c788cc --- /dev/null +++ b/source/_components/device_tracker.huawei_lte.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Huawei LTE Router Device Tracker" +description: "Instructions on how to use Huawei LTE routers to track devices within Home Assistant." +date: 2018-09-08 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: huawei.svg +ha_category: Presence Detection +ha_release: 0.79 +--- + + +This platform offers presence detection by looking at connected devices to a [Huawei LTE router](https://consumer.huawei.com/en/smart-home/). + +This requires you to have set up the [Huawei LTE component](/components/huawei_lte/). + +## {% linkable_title Configuration %} + +To enable the sensor, add the following lines to your +`configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: huawei_lte +``` + +See the [device tracker component page](/components/device_tracker/) +for instructions how to configure the people to be tracked. diff --git a/source/_components/huawei_lte.markdown b/source/_components/huawei_lte.markdown new file mode 100644 index 00000000000..7d6afd4afa6 --- /dev/null +++ b/source/_components/huawei_lte.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "Huawei LTE Routers" +description: "Instructions on how to integrate Huawei LTE routers with Home Assistant." +date: 2018-09-08 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: huawei.svg +ha_category: Network +ha_release: 0.79 +--- + +The Huawei LTE router integration for Home Assistant allows you to observe +and control [Huawei LTE routers](https://consumer.huawei.com/en/smart-home/). + +The integration provides: + +* a sensor with device, signal, and traffic information +* a device tracker for connected devices + +## {% linkable_title Configuration %} + +To enable the component, add the following lines to your +`configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +huawei_lte: + - url: http://192.168.100.1/ + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} +url: + description: URL of the router web interface. + required: true + type: url +username: + description: The username used for the router web interface. + required: true + type: string +password: + description: The password used for the router web interface. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/sensor.huawei_lte.markdown b/source/_components/sensor.huawei_lte.markdown new file mode 100644 index 00000000000..682d3bc0518 --- /dev/null +++ b/source/_components/sensor.huawei_lte.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Huawei LTE Router Sensor" +description: "Instructions on how to integrate Huawei LTE router sensors into Home Assistant." +date: 2018-09-08 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: huawei.svg +ha_category: Network +ha_iot_class: "Local Polling" +ha_release: 0.79 +--- + +The `huawei_lte` sensor platform allows you to monitor Huawei LTE routers. + +This requires you to have set up the [Huawei LTE component](/components/huawei_lte/). + +## {% linkable_title Configuration %} + +To enable the sensor, add the following lines to your +`configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: huawei_lte + monitored_conditions: + - device_information.SoftwareVersion + - device_signal.rssi + - traffic_statistics.CurrentDownloadRate + - traffic_statistics.TotalConnectTime +``` + +Configuration variables: + +**monitored_conditions** array (*Optional*): Defines the data to monitor as sensors. Defaults to a few generally available data items expected to be available on most boxes. The names here are dot separated paths to information returned by the router. The data set varies by router model; to see what your router provides, set logging level to debug and watch homeassistant.components.huawei_lte debug entries. The following list contains a few example paths just to illustrate the syntax; these may not be available on all routers or their semantics may differ, and there are quite likely many more that are not listed here. + + - **device_information.SoftwareVersion**: Software version. + - **device_information.WanIPAddress**: WAN interface IP address. + - **device_information.WanIPv6Address**: WAN interface IP address. + - **device_signal.rsrq**: The signal RSRQ value. + - **device_signal.rsrp**: The signal RSRP value. + - **device_signal.rssi**: The signal RSSI value. + - **device_signal.sinr**: The signal SINR value. + - **traffic_statistics.CurrentDownloadRate**: Current download rate, bytes/sec. + - **traffic_statistics.CurrentUploadRate**: Current upload rate, bytes/sec. + - **traffic_statistics.TotalUpload**: Total bytes uploaded since last reset. + - **traffic_statistics.TotalDownload**: Total bytes downloaded since last reset. + - **traffic_statistics.TotalConnectTime**: Total time connected since last reset. From 7d5b15d443fb1bbe6265d28f05479b453d7f0e5b Mon Sep 17 00:00:00 2001 From: GP8x Date: Tue, 25 Sep 2018 10:18:37 +0100 Subject: [PATCH 176/176] Updated Netatmo Public Sensor docs for additional conditions (#6303) --- .../sensor.netatmo_public.markdown | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.netatmo_public.markdown b/source/_components/sensor.netatmo_public.markdown index c1c61a1a05c..0f70887c115 100644 --- a/source/_components/sensor.netatmo_public.markdown +++ b/source/_components/sensor.netatmo_public.markdown @@ -13,7 +13,14 @@ ha_iot_class: "Cloud Polling" ha_release: 0.77 --- -The `netatmo_public` sensor allows you to expose data from [Netatmo](https://weathermap.netatmo.com/) to Home Assistant, even if you don't have a Netatmo device yourself. Currently, only live rain data is supported. +The `netatmo_public` sensor allows you to expose data from [Netatmo](https://weathermap.netatmo.com/) to Home Assistant, even if you don't have a Netatmo device yourself. Currently the following conditions are supported: + +* temperature +* pressure +* humidity +* rain +* windstrength +* guststrength To enable the Netatmo sensor, you have to set up [netatmo](/components/netatmo/). @@ -30,6 +37,13 @@ sensor: lon_ne: -73.735 lat_sw: 40.552 lon_sw: -74.105 + monitored_conditions: + - temperature + - pressure + - humidity + - rain + - windstrength + - guststrength ``` {% configuration %} @@ -54,14 +68,18 @@ areas: description: Longitude of south-western corner of area. required: true type: string + monitored_conditions: + description: List of environment conditions to monitor. + required: true + type: list name: description: Name of the sensor. required: false type: string default: Netatmo Public Data - type: + mode: description: "How to calculate the value of the sensor if there are multiple stations reporting data. Accepts `max` or `avg`." required: false type: string - default: max + default: avg {% endconfiguration %}