0uQso5v0N{+)9fpJx5%A{;s~%@WZF;2!olRzTrv
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
literal 0
HcmV?d00001
From 88bc7d34eb54a8b276d35908310dfc84ff6752ac Mon Sep 17 00:00:00 2001
From: Pascal Vizeli
Date: Fri, 3 Nov 2017 17:16:41 +0100
Subject: [PATCH 02/46] Add new host/port option
---
source/_components/tellstick.markdown | 2 ++
1 file changed, 2 insertions(+)
diff --git a/source/_components/tellstick.markdown b/source/_components/tellstick.markdown
index a26638c0521..652e77a15c4 100644
--- a/source/_components/tellstick.markdown
+++ b/source/_components/tellstick.markdown
@@ -24,4 +24,6 @@ tellstick:
Configuration variables:
- **signal_repetitions** (*Optional*): Because the tellstick sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch and light to try to send each signal repeatedly.
+- **host** (*Optional*): If you run tellstick on a other server or with a hass.io add-on.
+- **port** (*Optional*): If needed with host config option.
From 9e3ccea4226cb623e09f676a4745954d6c78c7a8 Mon Sep 17 00:00:00 2001
From: Heiko Thiery
Date: Fri, 3 Nov 2017 17:55:34 +0100
Subject: [PATCH 03/46] Add documenation for LaCrosse platform (#3829)
* add documenation for lacrosse component
Signed-off-by: Heiko Thiery
* fix documentation
Signed-off-by: Heiko Thiery
* change to new style
Signed-off-by: Heiko Thiery
* fix after changing to new style
Signed-off-by: Heiko Thiery
* renamed config value
Signed-off-by: Heiko Thiery
* Add configuration sample
* Revert change
* Add quotes
---
source/_components/sensor.lacrosse.markdown | 99 +++++++++++++++++++++
1 file changed, 99 insertions(+)
create mode 100644 source/_components/sensor.lacrosse.markdown
diff --git a/source/_components/sensor.lacrosse.markdown b/source/_components/sensor.lacrosse.markdown
new file mode 100644
index 00000000000..d024d174403
--- /dev/null
+++ b/source/_components/sensor.lacrosse.markdown
@@ -0,0 +1,99 @@
+---
+layout: page
+title: "LaCrosse Sensor"
+description: "Instructions how to integrate LaCrosse sensor data received from Jeelink into Home Assistant."
+date: 2017-10-29 15:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: home-assistant.png
+ha_category: Sensor
+ha_release: 0.58
+ha_iot_class: "Local Polling"
+---
+
+The `lacrosse` sensor platform is using the data provided by a [Jeelink](https://www.digitalsmarties.net/products/jeelink) USB dongle or this [Arduino sketch](https://svn.fhem.de/trac/browser/trunk/fhem/contrib/arduino/36_LaCrosse-LaCrosseITPlusReader.zip).
+
+#### {% linkable_title Tested Devices %}
+
+- Technoline TX 29 IT (temperature only)
+- Technoline TX 29 DTH-IT (including humidity)
+
+## {% linkable_title Setup %}
+
+Since the sensor change their ID after each powercycle/battery change you can check what sensor IDs are availble by using the command-line tool `pylacrosse` from the pylacrosse package.
+
+```bash
+$ sudo pylacrosse -D /dev/ttyUSB0 scan
+```
+To use your `lacrosse` compatible sensor in your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+sensor:
+ - platform: lacrosse
+ sensors:
+ sensor_identifier:
+ type: SENSOR_TYPE
+ id: SENSOR_ID
+```
+
+{% configuration %}
+ device:
+ description: The serial baudrate.
+ required: true
+ type: string
+ default: /dev/ttyUSB0
+ baud:
+ description: The serial baudrate.
+ required: true
+ type: int
+ default: 57600
+ sensors:
+ description: A list of your sensors.
+ required: true
+ type: map
+ keys:
+ name:
+ description: The name of the sensor.
+ required: false
+ type: string
+ type:
+ description: "The type of the sensor. Options: `battery`, `humidity`, `temperature`"
+ required: true
+ type: string
+ id:
+ description: The LaCrosse Id of the sensor.
+ required: true
+ type: int
+{% endconfiguration %}
+
+
+## {% linkable_title Examples %}
+
+To setup a lacrosse sensor with multiple sensors, add the following to your `configuration.yaml` file:
+
+{% raw %}
+```yaml
+# Example configuration.yaml entry
+sensor:
+ - platform: lacrosse
+ device: /dev/ttyUSB0
+ baud: 57600
+ sensors:
+ kitchen_humidity:
+ name: Kitchen Humidity
+ type: humidity
+ id: 72
+ kitchen_temperature:
+ name: Kitchen Temperature
+ type: temperature
+ id: 72
+ kitchen_lacrosse_battery:
+ name: Kitchen Sensor Battery
+ type: battery
+ id: 72
+```
+{% endraw %}
+
From 766d612dbfb385d726aa3c34e01a7c573b32649a Mon Sep 17 00:00:00 2001
From: Alok Saboo
Date: Fri, 3 Nov 2017 16:08:02 -0400
Subject: [PATCH 04/46] Add option to overwrite file to the downloader
component (#3876)
* Add option to overwrite file to the downloader component
* Add period
---
source/_components/downloader.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_components/downloader.markdown b/source/_components/downloader.markdown
index c616cc40688..53063587d69 100644
--- a/source/_components/downloader.markdown
+++ b/source/_components/downloader.markdown
@@ -38,7 +38,7 @@ This will download the file from the given URL.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------- |
-| `url` | no | The url of the file to download. |
+| `url` | no | The URL of the file to download. |
| `subdir` | yes | Download into subdirectory of **download_dir** |
| `filename` | yes | Determine the filename. |
-
+| `overwrite` | yes | Whether to overwrite the file or not, defaults to `false`. |
From 01887c96fdd9860cb014a1be88ca49d5eace952b Mon Sep 17 00:00:00 2001
From: Sebastian Muszynski
Date: Fri, 3 Nov 2017 23:58:22 +0100
Subject: [PATCH 05/46] Unneeded parameter "mac" removed. (#3880)
---
source/_components/xiaomi_aqara.markdown | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/source/_components/xiaomi_aqara.markdown b/source/_components/xiaomi_aqara.markdown
index bbbbc06aee2..61d3ed9231d 100644
--- a/source/_components/xiaomi_aqara.markdown
+++ b/source/_components/xiaomi_aqara.markdown
@@ -60,8 +60,7 @@ To enable {{ page.title }} in your installation, add the following to your `conf
xiaomi_aqara:
discovery_retry: 5
gateways:
- - mac:
- key: xxxxxxxxxxxxxxxx
+ - key: xxxxxxxxxxxxxxxx
```
### {% linkable_title Multiple Gateways %}
From 7c34e7c888b5afcd02abb68b57dd9ea0d6cf8628 Mon Sep 17 00:00:00 2001
From: ChristianKuehnel
Date: Sat, 4 Nov 2017 05:49:43 +0100
Subject: [PATCH 06/46] added initial documentation for new component
remember_the_milk (#3581)
* added initial documentation for new component remember_the_milk
* updated documentation, based on comments from @fabaff.
I did not change the logo, as we have to ask for permission first.
* fix stuff
---
source/_components/remember_the_milk.markdown | 68 +++++++++++++++++++
1 file changed, 68 insertions(+)
create mode 100644 source/_components/remember_the_milk.markdown
diff --git a/source/_components/remember_the_milk.markdown b/source/_components/remember_the_milk.markdown
new file mode 100644
index 00000000000..b6407396484
--- /dev/null
+++ b/source/_components/remember_the_milk.markdown
@@ -0,0 +1,68 @@
+---
+layout: page
+title: "Remember The Milk"
+description: "Instructions on how to use Remember The Milk with Home Assistant."
+date: 2017-10-10 10:10
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: Automation
+ha_release: 0.57
+---
+
+The `Remember The Milk` (RTM) component allows you to create tasks in [remember_the_milk](https://www.rememberthemilk.com) from Home Assistant. You can use this if you want Home Assistant to send you a task that you should not forget, e.g. water the plants. The component allows you to have several RTM accounts in parallel.
+
+# {% linkable_title Setup %}
+
+The setup consists of two steps: getting an API key and registering your account
+
+## {% linkable_title step 1: API key %}
+
+To be able to use this component, you need a Remember The Milk account and you need to apply for your own [API key](https://www.rememberthemilk.com/services/api/keys.rtm). With the API key you will also receive your personal `shared secret`. Both of them need to be stored in your Home Assistant configuration:
+
+```yaml
+# Example configuration.yaml entry
+
+remember_the_milk:
+ your_rtm_account:
+ api_key:
+ shared_secret:
+
+```
+
+Configuration variables:
+{% configuration %}
+ account_name
+ description: Name of the RTM account, as you can have serveral accounts in RTM. The name must be unique.
+ required: true
+ type: string
+ api_key:
+ description: Put the API key you've received in here.
+ required: true
+ type: string
+ shared_secret:
+ description: Put the shared secret you've received in here.
+ required: true
+ type: string
+{% endconfiguration %}
+
+## {% linkable_title step 2: registering your account %}
+
+After saving the configuration, you need to (re-)start Home Assistant. On the first start you will notice a new "Configuration" panel appearing on the Home Assistant page. After opening the configuration page, follow the link "Remember The Milk login". This will take you to a login page where you have to log in with your normal Rember The Milk credentials. This will authorize Home Assistant to access your Remember The Milk account.
+
+After that click on the "login completed" button. This will tell Home Assistant that you have completed the login process on the Remember The Milk page and Home Assistant should try to register with this account.
+
+If the registration was successful, the Configuration panel will disappear from your Home Assistant screen and a Remember The Milk panel should appear. This completes the setup process.
+
+In the background Home Assistant downloaded a "token" from the Remember The Milk server which is stored in the `remember_the_milk.conf` file locally. So you only need to register once. After that the token is used to authenticate with the server.
+
+# {% linkable_title Creating tasks %}
+
+This component offers a new service domain ```remember_the_milk``` with the service ```create_task```. You can call this service with the argument ```name``` to create a new task in your Remember The Milk account. You can call this service from your usual automations.
+
+The task creation supports the "smart syntax", so to create a task with the tag "from_hass" which is due today you can create a task with the name ```test task created in Home Assistant ^today #from_hass```. More info about the smart syntax is available on the [Remember The Milk documentation](https://www.rememberthemilk.com/help/answer/basics-smartadd-howdoiuse).
+
+
+# {% linkable_title Disclaimer %}
+This product uses the Remember The Milk API but is not endorsed or certified by Remember The Milk.
From 345dbfd1c32b6229d9a8b96be2ba776a13ceb32e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Per=20Osb=C3=A4ck?=
Date: Sat, 4 Nov 2017 10:49:52 +0100
Subject: [PATCH 07/46] fix hasbian typo (that means something different)
(#3886)
---
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 0ba2173e832..7ef479edcb7 100644
--- a/source/_docs/installation/hassbian/upgrading.markdown
+++ b/source/_docs/installation/hassbian/upgrading.markdown
@@ -1,7 +1,7 @@
---
layout: page
title: "Upgrading Hassbian"
-description: "Instructions how to upgrade Hasbian to the latest version."
+description: "Instructions how to upgrade Hassbian to the latest version."
date: 2016-09-26 21:00
sidebar: true
comments: false
From ac9aedad90c34d08b446638d2944f16522b40fa2 Mon Sep 17 00:00:00 2001
From: PeteBa
Date: Sat, 4 Nov 2017 09:51:48 +0000
Subject: [PATCH 08/46] Adjusted to reflect updated purge scheduling (#3860)
* Adjusted to reflect updated purge scheduling
* Minor changes
---
source/_components/recorder.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown
index e4fbca17b5f..6531fdf71a0 100644
--- a/source/_components/recorder.markdown
+++ b/source/_components/recorder.markdown
@@ -27,7 +27,7 @@ recorder:
Configuration variables:
-- **purge_interval** (*Optional*): (days) Enable scheduled purge of older events and states. The purge task runs every x days, starting from when Home Assistant is started. If you restart your instance more frequently, than the purge will never take place. You can use [service](#service-purge) call `recorder.purge` when needed.
+- **purge_interval** (*Optional*): (days) Enable scheduled purge of older events and states. The purge task runs every x days from when the `recorder component` is first enabled. If a scheduled purge is missed (e.g. if Home Assistant was not running) then the schedule will resume soon after Home Assistant restarts. You can use [service](#service-purge) call `recorder.purge` when required without impacting the purge schedule.
- **purge_keep_days** (*Required with `purge_interval`*): Specify number of history days to keep in recorder database after purge.
- **exclude** (*Optional*): Configure which components should be excluded from recordings.
- **entities** (*Optional*): The list of entity ids to be excluded from recordings.
From e8949f411965cc49655304ce41b16bf6329e1254 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Sat, 4 Nov 2017 17:31:01 +0100
Subject: [PATCH 09/46] remove file with the wrong extension
---
source/_components/climate.ephember | 33 -----------------------------
1 file changed, 33 deletions(-)
delete mode 100644 source/_components/climate.ephember
diff --git a/source/_components/climate.ephember b/source/_components/climate.ephember
deleted file mode 100644
index 962b34746e2..00000000000
--- a/source/_components/climate.ephember
+++ /dev/null
@@ -1,33 +0,0 @@
----
-layout: page
-title: "EPH Controls Ember Thermostat"
-description: "Instructions on how to integrate EPH Controls Ember thermostats within Home Assistant."
-date: 2017-10-07 12:40
-sidebar: true
-comments: false
-sharing: true
-footer: true
-logo: ephcontrolsember.png
-ha_category: Climate
-ha_release: "0.55"
-ha_iot_class: "Local Polling"
----
-
-
-The `ephember` climate platform lets you control [EPH Controls](http://emberapp.ephcontrols.com/) thermostats. The module only works if you have a WiFi gateway to control your EPH system and an account on the ember app.
-
-To set it up, add the following information to your `configuration.yaml` file:
-
-```yaml
-climate:
- - platform: ephember
- username: YOUR_EMAIL
- password: YOUR_PASSWORD
-```
-
-A single interface can handle up to 32 connected devices.
-
-Configuration variables:
-
-- **username** (*Required*): The email address you used to sign up to the ember app
-- **password** (*Required*): The password you used to sign up to the ember app
From d3c22d70b3af47a34e4b86e8b1d42f5122ad35a6 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Sat, 4 Nov 2017 17:37:34 +0100
Subject: [PATCH 10/46] Add checklist
---
.github/PULL_REQUEST_TEMPLATE.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 7e57b113669..cb3d41a9271 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -3,3 +3,8 @@
**Pull request in [home-assistant](https://github.com/home-assistant/home-assistant) (if applicable):** home-assistant/home-assistant#
+## Checklist:
+
+ - [ ] Branch: Fixes, changes and adjustments should be created against `current`. New documentation for platforms/components and features should go to `next`.
+ - [ ] The documention follow the [standards](https://home-assistant.io/developers/documentation/standards/).
+
From df50d5145275c0b93a8e69e9b7094253759de3e6 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Sat, 4 Nov 2017 17:43:01 +0100
Subject: [PATCH 11/46] Fix link and typo
---
.github/PULL_REQUEST_TEMPLATE.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index cb3d41a9271..30f074df148 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -6,5 +6,6 @@
## Checklist:
- [ ] Branch: Fixes, changes and adjustments should be created against `current`. New documentation for platforms/components and features should go to `next`.
- - [ ] The documention follow the [standards](https://home-assistant.io/developers/documentation/standards/).
+ - [ ] The documentation follow the [standards][standards].
+[standards]: https://home-assistant.io/developers/documentation/standards/
From e32f1cdabdc58567d651989f118cb8f8dbf16403 Mon Sep 17 00:00:00 2001
From: Adam Cooper
Date: Sun, 5 Nov 2017 13:11:54 +0000
Subject: [PATCH 12/46] Adding in docs for Vultr platform and sensors (#3663)
* Added Vultr logo
* Added v1 Vultr hub
* Added init sensor docs for Vultr
* Updated Vultr components to next version
* Updating Vultr components
* Added more details to vultr sensors
* Updated Vultr component docs
* Corrected Vultr name default values, added vultr sensor {} name option
---
.../_components/binary_sensor.vultr.markdown | 42 +++++++++++++
source/_components/sensor.vultr.markdown | 59 ++++++++++++++++++
source/_components/switch.vultr.markdown | 42 +++++++++++++
source/_components/vultr.markdown | 35 +++++++++++
source/images/supported_brands/vultr.png | Bin 0 -> 6317 bytes
5 files changed, 178 insertions(+)
create mode 100644 source/_components/binary_sensor.vultr.markdown
create mode 100644 source/_components/sensor.vultr.markdown
create mode 100644 source/_components/switch.vultr.markdown
create mode 100644 source/_components/vultr.markdown
create mode 100644 source/images/supported_brands/vultr.png
diff --git a/source/_components/binary_sensor.vultr.markdown b/source/_components/binary_sensor.vultr.markdown
new file mode 100644
index 00000000000..cb1421e38e1
--- /dev/null
+++ b/source/_components/binary_sensor.vultr.markdown
@@ -0,0 +1,42 @@
+---
+layout: page
+title: "Vultr Binary Sensor"
+description: "Instructions on how to set up Vultr binary sensors within Home Assistant."
+date: 2017-10-17 21:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: System Monitor
+logo: vultr.png
+ha_release: "0.57"
+ha_iot_class: "Cloud Polling"
+---
+
+The `vultr` binary sensor platform allows you to monitor your [Vultr](https://www.vultr.com/) subscription to see if it is powered on or not.
+
+To use this binary sensor, you first have to set up your [Vultr hub](/components/vultr/).
+
+
+The following examples assume a subscription that has an ID of `123456` and a label of `Web Server`
+
+
+Minimal `configuration.yaml` (produces `binary_sensor.vultr_web_server`):
+```yaml
+binary_sensor:
+ - platform: vultr
+ subscription: 123456
+```
+
+Full `configuration.yaml` (produces `binary_sensor.totally_awesome_server`):
+```yaml
+binary_sensor:
+ - platform: vultr
+ name: totally_awesome_server
+ subscription: 12345
+```
+
+Configuration variables:
+
+- **subscription** (*Required*): The subscription you want to monitor, this can be found in the URL when viewing a server
+- **name** (*Optional*): The name you want to give this binary sensor, defaults to `Vultr {subscription label}`
diff --git a/source/_components/sensor.vultr.markdown b/source/_components/sensor.vultr.markdown
new file mode 100644
index 00000000000..154a21ba044
--- /dev/null
+++ b/source/_components/sensor.vultr.markdown
@@ -0,0 +1,59 @@
+---
+layout: page
+title: "Vultr Sensor"
+description: "Instructions on how to integrate Vultr sensor within Home Assistant."
+date: 2017-10-17 21:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: vultr.png
+ha_release: "0.57"
+ha_category: System Monitor
+ha_iot_class: "Cloud Polling"
+---
+
+
+The `vultr` sensor will allow you to view current bandwidth usage and pending charges against your [Vultr](https://www.vultr.com/) subscription.
+
+To use this sensor, you must set up your [Vultr hub](/components/vultr/).
+
+
+The following examples assume a subscription that has an ID of `123456` and a label of `Web Server`
+
+
+Minimal `configuration.yaml` (produces `sensor.vultr_web_server_current_bandwidth_used` and `sensor.vultr_web_server_pending_charges`):
+```yaml
+sensor:
+ - platform: vultr
+ subscription: 123456
+```
+
+Full `configuration.yaml` using `{}` to format condition name (produces `sensor.server_current_bandwidth_used` and `sensor.server_pending_charges`):
+```yaml
+sensor:
+ - platform: vultr
+ name: Server {}
+ subscription: 123456
+ monitored_conditions:
+ - current_bandwidth_used
+ - pending_charges
+```
+
+Custom `configuration.yaml` with only one condition monitored (produces `sensor.web_server_bandwidth`):
+```yaml
+sensor:
+ - platform: vultr
+ name: Web Server Bandwidth
+ subscription: 123456
+ monitored_conditions:
+ - current_bandwidth_used
+```
+
+Configuration variables:
+
+- **subscription** (*Required*): The Vultr subscription to monitor, this can be found in the URL when viewing a subscription
+- **name** (*Optional*): The name to give this sensor, defaults to `Vultr {Vultr subscription label} {monitored condition name}`.
+- **monitored_conditions** array (*Optional*): List of items you want to monitor for each subscription. Defaults to all of them if omitted.
+ - **current_bandwidth_used**: The current (invoice period) bandwidth usage in Gigabytes (GB).
+ - **pending_charges**: The current (invoice period) charges that have built up for this subscription. Value is in US Dollars (US$).
diff --git a/source/_components/switch.vultr.markdown b/source/_components/switch.vultr.markdown
new file mode 100644
index 00000000000..0ac0bb3ad1e
--- /dev/null
+++ b/source/_components/switch.vultr.markdown
@@ -0,0 +1,42 @@
+---
+layout: page
+title: "Vultr Switch"
+description: "Instructions on how to set up Vultr switches within Home Assistant."
+date: 2017-10-17 21:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: vultr.png
+ha_category: Switch
+ha_release: "0.57"
+ha_iot_class: "Cloud Polling"
+---
+
+The `vultr` switch platform allows you to control (start/stop) your [Vultr](https://www.vultr.com/) subscription.
+
+To control your Vultr subscription, you first have to set up your [Vultr hub](/components/vultr/).
+
+
+The following examples assume a subscription that has an ID of `123456` and a label of `Web Server`
+
+
+Minimal `configuration.yaml` (produces `switch.vultr_web_server`):
+```yaml
+switch:
+ - platform: vultr
+ subscription: 123456
+```
+
+Full `configuration.yaml` (produces `switch.amazing_server`):
+```yaml
+switch:
+ - platform: vultr
+ name: Amazing Server
+ subscription: 123456
+```
+
+Configuration variables:
+
+- **subscription** (*Required*): List of droplets you want to control.
+- **name** (*Optional*): The name you want to give this switch, defaults to `Vultr {subscription label}`
diff --git a/source/_components/vultr.markdown b/source/_components/vultr.markdown
new file mode 100644
index 00000000000..411f89f2c52
--- /dev/null
+++ b/source/_components/vultr.markdown
@@ -0,0 +1,35 @@
+---
+layout: page
+title: "Vultr"
+description: "Instructions on how to integrate Vultr within Home Assistant."
+date: 2017-10-17 21:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+featured: false
+ha_category: Hub
+ha_release: "0.57"
+logo: vultr.png
+ha_iot_class: "Cloud Polling"
+---
+
+
+The `vultr` component allows you to access information about and interact with your [Vultr](https://www.vultr.com) subscriptions (Virtual Private Servers) from Home Assistant.
+
+Obtain your API key from your [Vultr Account](https://my.vultr.com/settings/#settingsapi).
+
+
+Ensure you allow the public IP of Home Assistant under the Access Control heading.
+
+
+To integrate your Vultr subscriptions with Home Assistant, add the following section to your `configuration.yaml` file:
+
+```yaml
+vultr:
+ api_key: ABCDEFG12345
+```
+
+Configuration variables:
+
+- **api_key** (*Required*): Your Vultr API key.
diff --git a/source/images/supported_brands/vultr.png b/source/images/supported_brands/vultr.png
new file mode 100644
index 0000000000000000000000000000000000000000..86595f312c1a7312b4643ec68847465c1e4f9903
GIT binary patch
literal 6317
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
Date: Sun, 5 Nov 2017 15:29:40 +0100
Subject: [PATCH 13/46] Update config style and 'ha_release' (#3897)
* Update config style and 'ha_release'
* Minor changes
---
.../_components/binary_sensor.vultr.markdown | 22 +++++++++---
source/_components/sensor.vultr.markdown | 35 ++++++++++++++-----
source/_components/switch.vultr.markdown | 21 ++++++++---
source/_components/vultr.markdown | 11 ++++--
4 files changed, 68 insertions(+), 21 deletions(-)
diff --git a/source/_components/binary_sensor.vultr.markdown b/source/_components/binary_sensor.vultr.markdown
index cb1421e38e1..a78cb30dc37 100644
--- a/source/_components/binary_sensor.vultr.markdown
+++ b/source/_components/binary_sensor.vultr.markdown
@@ -9,7 +9,7 @@ sharing: true
footer: true
ha_category: System Monitor
logo: vultr.png
-ha_release: "0.57"
+ha_release: "0.58"
ha_iot_class: "Cloud Polling"
---
@@ -22,13 +22,29 @@ The following examples assume a subscription that has an ID of `123456` and a la
Minimal `configuration.yaml` (produces `binary_sensor.vultr_web_server`):
+
```yaml
+# Example configuration.yaml entry
binary_sensor:
- platform: vultr
subscription: 123456
```
+{% configuration %}
+subscription:
+ description: The subscription you want to monitor, this can be found in the URL when viewing a server.
+ required: true
+ type: string
+name:
+ description: The name you want to give this binary sensor.
+ required: false
+ default: "Vultr {subscription label}"
+ type: string
+{% endconfiguration %}
+
+
Full `configuration.yaml` (produces `binary_sensor.totally_awesome_server`):
+
```yaml
binary_sensor:
- platform: vultr
@@ -36,7 +52,3 @@ binary_sensor:
subscription: 12345
```
-Configuration variables:
-
-- **subscription** (*Required*): The subscription you want to monitor, this can be found in the URL when viewing a server
-- **name** (*Optional*): The name you want to give this binary sensor, defaults to `Vultr {subscription label}`
diff --git a/source/_components/sensor.vultr.markdown b/source/_components/sensor.vultr.markdown
index 154a21ba044..5aa03c73931 100644
--- a/source/_components/sensor.vultr.markdown
+++ b/source/_components/sensor.vultr.markdown
@@ -8,13 +8,13 @@ comments: false
sharing: true
footer: true
logo: vultr.png
-ha_release: "0.57"
+ha_release: "0.58"
ha_category: System Monitor
ha_iot_class: "Cloud Polling"
---
-The `vultr` sensor will allow you to view current bandwidth usage and pending charges against your [Vultr](https://www.vultr.com/) subscription.
+The `vultr` sensor platform will allow you to view current bandwidth usage and pending charges against your [Vultr](https://www.vultr.com/) subscription.
To use this sensor, you must set up your [Vultr hub](/components/vultr/).
@@ -23,13 +23,37 @@ The following examples assume a subscription that has an ID of `123456` and a la