From 25dd0ba31a9b4c94687920654bd9c72578c3184f Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 14 Feb 2019 13:19:30 +0100 Subject: [PATCH 1/9] :tractor: Merges/Redirect AlarmDecoder component pages (#8572) --- .../alarm_control_panel.alarmdecoder.markdown | 76 ------------------- source/_components/alarmdecoder.markdown | 75 +++++++++++++++++- .../binary_sensor.alarmdecoder.markdown | 20 ----- .../_components/sensor.alarmdecoder.markdown | 18 ----- 4 files changed, 71 insertions(+), 118 deletions(-) delete mode 100644 source/_components/alarm_control_panel.alarmdecoder.markdown delete mode 100644 source/_components/binary_sensor.alarmdecoder.markdown delete mode 100644 source/_components/sensor.alarmdecoder.markdown diff --git a/source/_components/alarm_control_panel.alarmdecoder.markdown b/source/_components/alarm_control_panel.alarmdecoder.markdown deleted file mode 100644 index 98810aaa2a1..00000000000 --- a/source/_components/alarm_control_panel.alarmdecoder.markdown +++ /dev/null @@ -1,76 +0,0 @@ ---- -layout: page -title: "AlarmDecoder Alarm Control Panel" -description: "Instructions on how to setup the AlarmDecoder Alarm control panel within Home Assistant." -date: 2017-04-02 13:28 -sidebar: true -comments: false -sharing: true -footer: true -logo: alarmdecoder.png -ha_category: Alarm -ha_release: 0.43 -ha_iot_class: "Local Push" ---- - -The `alarmdecoder` alarm control panel platform allows you to control your [AlarmDecoder](https://www.alarmdecoder.com) alarms. - -The requirement is that you have setup your [AlarmDecoder hub](/components/alarmdecoder/). - -### {% linkable_title Services %} - -The Alarm Decoder component gives you access to several services for you to control your alarm with. - -- `alarm_arm_away`: Arms the alarm in away mode; all faults will trigger the alarm. -- `alarm_arm_home`: Arms the alarm in stay mode; faults to the doors or windows will trigger the alarm. -- `alarm_arm_night`: Arms the alarm in instant mode; all faults will trigger the alarm. Additionally, the entry delay is turned off on the doors. -- `alarm_disarm`: Disarms the alarm from any state. Also clears a `check_zone` flag after an alarm was triggered. -- `alarmdecoder_alarm_toggle_chime`: Toggles the alarm's chime state. - -

-`alarm_arm_custom_bypass` and `alarm_trigger`, while available in the services list in Home Assistant, are not currently implemented in the Alarm Decoder platform. -

- -### {% linkable_title Attributes %} - -There are several attributes available on the alarm panel to give you more information about your alarm. - -- `ac_power`: Set to `true` if your system has AC power supplying it. -- `backlight_on`: Set to `true` if your keypad's backlight is on. -- `battery_low`: Set to `true` if your system's back-up battery is low. -- `check_zone`: Set to `true` if your system was recently triggered. When `check_zone` is `true`, it must be cleared by entering your code + 1 before attempting to rearm your alarm. -- `chime`: Set to `true` if your system's chime is activated. When activated, your system will beep anytime a door or window is faulted while the alarm is disarmed. -- `entry_delay_off`: Set to `true` if your system is in "Instant" mode, meaning the alarm will sound on any faults. -- `programming_mode`: Set to `true` if your system is in programming mode. -- `ready`: Set to `true` if your system is ready to be armed. Any faults, including motions sensors, will make this value `false`. -- `zone_bypassed`: Set to `true` if your system is currently bypassing a zone. - -### {% linkable_title Examples %} - -Using a combination of the available services and attributes, you can create switch templates. - -#### {% linkable_title Chime Status and Control %} - -{% raw %} -```yaml -- platform: template - switches: - alarm_chime: - friendly_name: Chime - value_template: "{{ is_state_attr('alarm_control_panel.alarm_panel', 'chime', true) }}" - turn_on: - service: alarm_control_panel.alarmdecoder_alarm_toggle_chime - data: - code: !secret alarm_code - turn_off: - service: alarm_control_panel.alarmdecoder_alarm_toggle_chime - data: - code: !secret alarm_code - icon_template: >- - {% if is_state_attr('alarm_control_panel.alarm_panel', 'chime', true) %} - mdi:bell-ring - {% else %} - mdi:bell-off - {% endif %} -``` -{% endraw %} diff --git a/source/_components/alarmdecoder.markdown b/source/_components/alarmdecoder.markdown index 0c47d81bb72..05f43d52b05 100644 --- a/source/_components/alarmdecoder.markdown +++ b/source/_components/alarmdecoder.markdown @@ -8,9 +8,16 @@ comments: false sharing: true footer: true logo: alarmdecoder.png -ha_category: Hub +ha_category: + - Alarm + - Binary Sensor + - Sensor ha_release: 0.43 ha_iot_class: "Local Push" +redirect_from: + - /components/alarm_control_panel.alarmdecoder/ + - /components/binary_sensor.alarmdecoder/ + - /components/sensor.alarmdecoder/ --- The `alarmdecoder` component will allow Home Assistant users who own either a DSC or Honeywell alarm panel to leverage their alarm system and its sensors to provide Home Assistant with rich information about their homes. Connectivity between Home Assistant and the alarm panel is accomplished through a device produced by Nu Tech Software Solutions, known as the AlarmDecoder. The AlarmDecoder devices provide a serial, TCP/IP socket or USB interface to the alarm panel, where it emulates an alarm keypad. @@ -19,12 +26,14 @@ Please visit the [AlarmDecoder website](https://www.alarmdecoder.com/) for furth There is currently support for the following device types within Home Assistant: -- [Binary Sensor](/components/binary_sensor.alarmdecoder/): Reports on zone status -- [Sensor](/components/sensor.alarmdecoder/): Emulates a keypad display -- [Alarm Control Panel](/components/alarm_control_panel.alarmdecoder/): Reports on alarm status, and can be used to arm/disarm the system +- Binary Sensor: Reports on zone status +- Sensor: Emulates a keypad display +- [Alarm Control Panel](#alarm-control-panel): Reports on alarm status, and can be used to arm/disarm the system This is a fully event-based component. Any event sent by the AlarmDecoder device will be immediately reflected within Home Assistant. +## {% linkable_title Configuration %} + An `alarmdecoder` section must be present in the `configuration.yaml` file and contain the following options as required: ```yaml @@ -112,3 +121,61 @@ zones: required: inclusive type: integer {% endconfiguration %} + +## {% linkable_title Alarm Control Panel %} + +There are several attributes available on the alarm panel to give you more information about your alarm. + +- `ac_power`: Set to `true` if your system has AC power supplying it. +- `backlight_on`: Set to `true` if your keypad's backlight is on. +- `battery_low`: Set to `true` if your system's back-up battery is low. +- `check_zone`: Set to `true` if your system was recently triggered. When `check_zone` is `true`, it must be cleared by entering your code + 1 before attempting to rearm your alarm. +- `chime`: Set to `true` if your system's chime is activated. When activated, your system will beep anytime a door or window is faulted while the alarm is disarmed. +- `entry_delay_off`: Set to `true` if your system is in "Instant" mode, meaning the alarm will sound on any faults. +- `programming_mode`: Set to `true` if your system is in programming mode. +- `ready`: Set to `true` if your system is ready to be armed. Any faults, including motions sensors, will make this value `false`. +- `zone_bypassed`: Set to `true` if your system is currently bypassing a zone. + +## {% linkable_title Services %} + +The Alarm Decoder component gives you access to several services for you to control your alarm with. + +- `alarm_arm_away`: Arms the alarm in away mode; all faults will trigger the alarm. +- `alarm_arm_home`: Arms the alarm in stay mode; faults to the doors or windows will trigger the alarm. +- `alarm_arm_night`: Arms the alarm in instant mode; all faults will trigger the alarm. Additionally, the entry delay is turned off on the doors. +- `alarm_disarm`: Disarms the alarm from any state. Also clears a `check_zone` flag after an alarm was triggered. +- `alarmdecoder_alarm_toggle_chime`: Toggles the alarm's chime state. + +

+`alarm_arm_custom_bypass` and `alarm_trigger`, while available in the services list in Home Assistant, are not currently implemented in the Alarm Decoder platform. +

+ +### {% linkable_title Examples %} + +Using a combination of the available services and attributes, you can create switch templates. + +### {% linkable_title Chime Status and Control %} + +{% raw %} +```yaml +- platform: template + switches: + alarm_chime: + friendly_name: Chime + value_template: "{{ is_state_attr('alarm_control_panel.alarm_panel', 'chime', true) }}" + turn_on: + service: alarm_control_panel.alarmdecoder_alarm_toggle_chime + data: + code: !secret alarm_code + turn_off: + service: alarm_control_panel.alarmdecoder_alarm_toggle_chime + data: + code: !secret alarm_code + icon_template: >- + {% if is_state_attr('alarm_control_panel.alarm_panel', 'chime', true) %} + mdi:bell-ring + {% else %} + mdi:bell-off + {% endif %} +``` +{% endraw %} diff --git a/source/_components/binary_sensor.alarmdecoder.markdown b/source/_components/binary_sensor.alarmdecoder.markdown deleted file mode 100644 index 92cfa7fa4e1..00000000000 --- a/source/_components/binary_sensor.alarmdecoder.markdown +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: page -title: "AlarmDecoder Binary Sensor" -description: "Instructions on how to integrate AlarmDecoder binary sensors into Home Assistant." -date: 2017-04-02 13:28 -sidebar: true -comments: false -sharing: true -footer: true -logo: alarmdecoder.png -ha_release: 0.43 -ha_category: Binary Sensor -ha_iot_class: "Local Push" ---- - -The `alarmdecoder` alarm control panel platform allows you to control your [AlarmDecoder](https://www.alarmdecoder.com) alarms. - -Check the [type/class](/components/binary_sensor/) list for a possible visualization of your zone. - -The requirement is that you have setup your [AlarmDecoder hub](/components/alarmdecoder/). diff --git a/source/_components/sensor.alarmdecoder.markdown b/source/_components/sensor.alarmdecoder.markdown deleted file mode 100644 index 770e94f1b72..00000000000 --- a/source/_components/sensor.alarmdecoder.markdown +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: page -title: "AlarmDecoder Sensor" -description: "Instructions on how to integrate AlarmDecoder sensors into Home Assistant." -date: 2017-04-02 13:28 -sidebar: true -comments: false -sharing: true -footer: true -logo: alarmdecoder.png -ha_release: 0.43 -ha_category: Sensor -ha_iot_class: "Local Push" ---- - -The `alarmdecoder` alarm control panel platform allows you to control your [AlarmDecoder](https://www.alarmdecoder.com) alarms. - -The requirement is that you have setup your [AlarmDecoder hub](/components/alarmdecoder/). From f97694db3fec445dd7792dd14105be11ac237dd0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 14 Feb 2019 14:18:39 +0100 Subject: [PATCH 2/9] Add logo --- .../sensor.nsw_fuel_station.markdown | 1 + source/images/supported_brands/fuelcheck.png | Bin 0 -> 54531 bytes 2 files changed, 1 insertion(+) create mode 100644 source/images/supported_brands/fuelcheck.png diff --git a/source/_components/sensor.nsw_fuel_station.markdown b/source/_components/sensor.nsw_fuel_station.markdown index 9a560f322c3..339611480aa 100644 --- a/source/_components/sensor.nsw_fuel_station.markdown +++ b/source/_components/sensor.nsw_fuel_station.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: fuelcheck.png ha_category: Car ha_release: 0.72 ha_iot_class: "Cloud Polling" diff --git a/source/images/supported_brands/fuelcheck.png b/source/images/supported_brands/fuelcheck.png new file mode 100644 index 0000000000000000000000000000000000000000..81b47c476f14ef20e4da9822577441a666579380 GIT binary patch literal 54531 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�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 je>d#u^be7>-`9lWgfH`qcVwRv;2$M Date: Thu, 14 Feb 2019 14:31:02 +0100 Subject: [PATCH 3/9] Remove tailing whitespaces --- source/_components/sensor.nsw_fuel_station.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.nsw_fuel_station.markdown b/source/_components/sensor.nsw_fuel_station.markdown index 339611480aa..620e3a4082f 100644 --- a/source/_components/sensor.nsw_fuel_station.markdown +++ b/source/_components/sensor.nsw_fuel_station.markdown @@ -22,7 +22,7 @@ To get the station ID for any NSW fuel station you will need to: - Visit the [Fuel Check App](https://www.fuelcheck.nsw.gov.au/app). - Open the developer console of your browser (for Chrome, click View -> Developer -> Developer Tools). Click the "Network" tab in the developer console. - In the Fuel Check App, search for your postcode or click "Fuel Near Me". -- In the developer console, you should see a request to `/FuelCheckApp/v1/fuel/prices/bylocation`. Open this request and preview the response. Find the station you wish to add, and copy down the `ServiceStationID` field. +- In the developer console, you should see a request to `/FuelCheckApp/v1/fuel/prices/bylocation`. Open this request and preview the response. Find the station you wish to add, and copy down the `ServiceStationID` field. ## {% linkable_title Configuration %} From d7777727cf801fd0df86c7d2f2d5c289b536370b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 14 Feb 2019 14:33:42 +0100 Subject: [PATCH 4/9] Minor changes --- source/_docs/installation/armbian.markdown | 4 +++- source/_docs/installation/centos.markdown | 1 + source/_docs/installation/fedora.markdown | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/source/_docs/installation/armbian.markdown b/source/_docs/installation/armbian.markdown index 5f16fc5bc0e..14f548a0453 100644 --- a/source/_docs/installation/armbian.markdown +++ b/source/_docs/installation/armbian.markdown @@ -13,7 +13,7 @@ footer: true Python 3.5.3 or later is required. -Setup Python and `pip` +Setup Python and `pip`: ```bash $ sudo apt-get update @@ -23,10 +23,12 @@ $ sudo apt-get install python3-dev python3-pip Now that you installed python, there are two ways to install Home Assistant: 1. It is recommended to install Home Assistant in a virtual environment to avoid using `root`, using the [VirtualEnv instructions](/docs/installation/virtualenv/) 2. Alternatively, you can install Home Assistant for the user you created when first booting Armbian: + ```bash $ sudo pip3 install homeassistant $ hass --open-ui ``` + Running these commands will: - Install Home Assistant diff --git a/source/_docs/installation/centos.markdown b/source/_docs/installation/centos.markdown index bf0c76c6eef..912586e509a 100644 --- a/source/_docs/installation/centos.markdown +++ b/source/_docs/installation/centos.markdown @@ -20,6 +20,7 @@ First of all install the software collection repository as root. For example, on ```bash $ yum install centos-release-scl ``` + Install some dependencies you'll need later. ```bash diff --git a/source/_docs/installation/fedora.markdown b/source/_docs/installation/fedora.markdown index be37bdeecba..847984b31b3 100644 --- a/source/_docs/installation/fedora.markdown +++ b/source/_docs/installation/fedora.markdown @@ -23,14 +23,14 @@ and Home Assistant itself. $ pip3 install homeassistant ``` -To isolate the Home Assistant installation a [venv](https://docs.python.org/3/library/venv.html) is handy. First create a new directory to store the installation and adjust the permissions. +To isolate the Home Assistant installation a [`venv`](https://docs.python.org/3/library/venv.html) is handy. First create a new directory to store the installation and adjust the permissions. ```bash $ sudo mkdir -p /opt/homeassistant $ sudo useradd -rm homeassistant -G dialout $ sudo chown -R homeassistant:homeassistant /opt/homeassistant ``` -Now switch to the new directory, setup the venv, and activate it. +Now switch to the new directory, setup the `venv`, and activate it. ```bash $ sudo -u homeassistant -H -s From 3581d22561f557f532892dae599eff38b0fce85f Mon Sep 17 00:00:00 2001 From: Andrej Friesen Date: Thu, 14 Feb 2019 15:55:49 +0100 Subject: [PATCH 5/9] Add Hass.io on generic Linux server as installation method (#7996) * Add Hass.io on generic Linux server as installation method Also renamed Hass.io to Hass.io on HassOS because Hass.io can be installed in different ways. * Remove information about HassOS for Hass.io install * Move Hass.io generic Linux server install to alternative install methods --- source/_docs/installation.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown index 71e8a2bad36..48bef39fa7c 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -100,4 +100,10 @@ These guides are provided as-is. Some of these install methods are more limited
FreeNAS
+ +
+ +
+
Hass.io
on generic Linux server
+
From ad10cd63d9536eaf1630f2b045e6171d1a292976 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 14 Feb 2019 15:58:34 +0100 Subject: [PATCH 6/9] Update links --- source/_docs/installation.markdown | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown index 48bef39fa7c..9440729d618 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -14,7 +14,7 @@ redirect_from: /getting-started/installation/ Beginners should check our [Getting started guide](/getting-started/) first.

-Home Assistant provides multiple ways to be installed. The first start may take up to 20 minutes because the required packages will be downloaded and installed. The web interface will be served on `http://ip.add.re.ss:8123/` - replace `ip.add.re.ss` with the IP of the computer you installed it on. +Home Assistant provides multiple ways to be installed. The first start may take up to 20 minutes because the required packages will be downloaded and installed. The web interface will be served on `http://ip.add.re.ss:8123/`. Replace `ip.add.re.ss` with the IP of the computer you installed it on.

Please remember to [secure your installation](/docs/configuration/securing/) once you've finished with the installation process. @@ -26,9 +26,9 @@ These install options are fully supported by Home Assistant's documentation. For **Method**|**You have**|**Recommended for** :-----|:-----|:----- -[Hass.io](https://www.home-assistant.io/hassio/installation/)|Raspberry Pi
VM|Anybody -[Docker](https://www.home-assistant.io/docs/installation/docker/)|Docker|Anybody already running Docker -[Hassbian](https://www.home-assistant.io/docs/hassbian/installation/)|Raspberry Pi|Those who want a more traditional Linux experience and either have experience with Linux, or intend to learn +[Hass.io](/hassio/installation/)|Raspberry Pi
VM|Anybody +[Docker](/docs/installation/docker/)|Docker|Anybody already running Docker +[Hassbian](/docs/hassbian/installation/)|Raspberry Pi|Those who want a more traditional Linux experience and either have experience with Linux, or intend to learn ## {% linkable_title Alternative installs %} @@ -36,14 +36,12 @@ If you use these install methods, we assume that you know how to manage and admi **Method**|**You have**|**Recommended for** :-----|:-----|:----- -[Virtualenv
(as another user)](https://www.home-assistant.io/docs/installation/raspberry-pi/)|Any Linux, Python 3.5.3 or later|Those familiar with their operating system -[Virtualenv
(as your user)](https://www.home-assistant.io/docs/installation/virtualenv/)|Any Python 3.5.3 or later|Developers - -


+[Virtualenv
(as another user)](/docs/installation/raspberry-pi/)|Any Linux, Python 3.5.3 or later|Those familiar with their operating system +[Virtualenv
(as your user)](/docs/installation/virtualenv/)|Any Python 3.5.3 or later|Developers ## {% linkable_title Community provided guides %} -These guides are provided as-is. Some of these install methods are more limited than the methods above - some components may not work due to limitations of the platform or because required Python packages aren't available for that platform. +These guides are provided as-is. Some of these install methods are more limited than the methods above. Some components may not work due to limitations of the platform or because required Python packages aren't available for that platform.
From 519c4515d0cf6d5e68540da96f4c1c59fa94ca9c Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 14 Feb 2019 16:04:36 +0100 Subject: [PATCH 7/9] =?UTF-8?q?=F0=9F=9A=9C=20Merges/Redirect=20Freebox=20?= =?UTF-8?q?component=20pages=20(#8573)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device_tracker.freebox.markdown | 35 ----------------- source/_components/freebox.markdown | 39 ++++++++++++++++--- source/_components/sensor.freebox.markdown | 20 ---------- 3 files changed, 33 insertions(+), 61 deletions(-) delete mode 100644 source/_components/device_tracker.freebox.markdown delete mode 100644 source/_components/sensor.freebox.markdown diff --git a/source/_components/device_tracker.freebox.markdown b/source/_components/device_tracker.freebox.markdown deleted file mode 100644 index 633a5043baa..00000000000 --- a/source/_components/device_tracker.freebox.markdown +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: page -title: "Freebox Device Tracker" -description: "Instructions on how to track devices connected to a Freebox router in Home Assistant." -date: 2018-05-16 23:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: freebox.svg -ha_category: Presence Detection -ha_release: "0.70" -ha_iot_class: "Local Polling" ---- - - -This platform offers presence detection by keeping track of the -devices connected to a [Freebox](http://www.free.fr/) router. - -This requires you to have set up the [Freebox component](/components/freebox/) - -### {% linkable_title Notes %} - -Note that the Freebox waits for some time before marking a device as -inactive, meaning that there will be a small delay (1 or 2 minutes) -between the time you disconnect a device and the time it will appear -as "away" in Home Assistant. You should take this into account when specifying -the `consider_home` parameter. -On the contrary, the Freebox immediately reports devices newly connected, so -they should appear as "home" almost instantly, as soon as Home Assistant -refreshes the devices states. - -See the [device tracker component page](/components/device_tracker/) for -instructions how to configure the devices to be tracked. - diff --git a/source/_components/freebox.markdown b/source/_components/freebox.markdown index 918e9264aef..b32610b7f65 100644 --- a/source/_components/freebox.markdown +++ b/source/_components/freebox.markdown @@ -8,20 +8,25 @@ comments: false sharing: true footer: true logo: freebox.svg -ha_category: Network +ha_category: + - Network + - Presence Detection + - Sensor ha_release: "0.85" ha_iot_class: "Local Polling" +redirect_from: + - /components/device_tracker.freebox/ + - /components/sensor.freebox/ --- - The `freebox` component allows you to observe and control [Freebox router](http://www.free.fr/). -The integration provides: +There is currently support for the following device types within Home Assistant: -* a sensor with traffic metrics -* a device tracker for connected devices +* [Sensor](#sensor) with traffic metrics +* [Device tracker](#presence-detection) for connected devices -### {% linkable_title Configuration %} +## {% linkable_title Configuration %} If you have enabled the [discovery component](/components/discovery/), your Freebox should be detected automatically. Otherwise, you can set it @@ -61,6 +66,28 @@ prompted to do so. ### {% linkable_title Supported routers %} Only the routers with Freebox OS are supported: + * Freebox V7 also known as Freebox Delta * Freebox V6 also known as Freebox Revolution * Freebox mini 4k + +## {% linkable_title Presence Detection %} + +This platform offers presence detection by keeping track of the +devices connected to a [Freebox](http://www.free.fr/) router. + +### {% linkable_title Notes %} + +Note that the Freebox waits for some time before marking a device as +inactive, meaning that there will be a small delay (1 or 2 minutes) +between the time you disconnect a device and the time it will appear +as "away" in Home Assistant. You should take this into account when specifying +the `consider_home` parameter. +On the contrary, the Freebox immediately reports devices newly connected, so +they should appear as "home" almost instantly, as soon as Home Assistant +refreshes the devices states. + +## {% linkable_title Sensor %} + +This platform offers you sensors to monitor a Freebox router. The monitored conditions are +instant upload and download rates in KB/s. \ No newline at end of file diff --git a/source/_components/sensor.freebox.markdown b/source/_components/sensor.freebox.markdown deleted file mode 100644 index d3ef9f0df4b..00000000000 --- a/source/_components/sensor.freebox.markdown +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: page -title: "Freebox Sensor" -description: "Instructions on how to integrate sensors from a Freebox router into Home Assistant." -date: 2018-05-16 23:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: freebox.svg -ha_category: Network -ha_release: "0.85" -ha_iot_class: "Local Polling" ---- - - -This platform offers you sensors to monitor a Freebox router. The monitored conditions are -instant upload and download rates in KB/s. - -This requires you to have set up the [Freebox component](/components/freebox/) From d5e2f5e00cd710f01a7ea39a4537cdc8c61ee7fd Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 14 Feb 2019 16:04:59 +0100 Subject: [PATCH 8/9] =?UTF-8?q?=F0=9F=9A=9C=20Merges/Redirect=20Nest=20com?= =?UTF-8?q?ponent=20pages=20(#8574)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🚜 Merges/Redirect Nest component pages * :pencil2: Fix error --- .../_components/binary_sensor.nest.markdown | 60 ------ source/_components/camera.nest.markdown | 22 --- source/_components/climate.nest.markdown | 23 --- source/_components/nest.markdown | 177 +++++++++++++++++- source/_components/sensor.nest.markdown | 82 -------- 5 files changed, 170 insertions(+), 194 deletions(-) delete mode 100644 source/_components/binary_sensor.nest.markdown delete mode 100644 source/_components/camera.nest.markdown delete mode 100644 source/_components/climate.nest.markdown delete mode 100644 source/_components/sensor.nest.markdown diff --git a/source/_components/binary_sensor.nest.markdown b/source/_components/binary_sensor.nest.markdown deleted file mode 100644 index 60315ecb867..00000000000 --- a/source/_components/binary_sensor.nest.markdown +++ /dev/null @@ -1,60 +0,0 @@ ---- -layout: page -title: "Nest Binary Sensor" -description: "Instructions on how to integrate Nest binary sensors within Home Assistant." -date: 2016-01-26 08:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: nest.png -ha_category: Binary Sensor -ha_release: pre 0.7 -ha_iot_class: "Cloud Push" ---- - -The `nest` binary sensor platform lets you monitor various states of your [Nest](https://nest.com) devices. - -

-You must have the [Nest component](/components/nest/) configured to use these sensors. The binary sensors will be setup if the `nest` component is configured and the required configuration for the `nest binary sensor` is set. -

- -## {% linkable_title Configuration %} - -To enable binary sensors and customize which sensors are setup, you can extend the [Nest component](/components/nest/) configuration in your `configuration.yaml` file with the following settings: - -```yaml -# Example configuration.yaml entry -nest: - binary_sensors: - monitored_conditions: - - 'fan' - - 'target' -``` - -By default all binary sensors for your available Nest devices will be monitored. Leave `monitored_conditions` blank to disable all binary sensors for the [Nest component](/components/nest/). - -{% configuration %} -monitored_conditions: - description: States to monitor. - required: false - type: list -{% endconfiguration %} - -The following conditions are available by device: - -- Nest Home: - - away -- Nest Thermostat: - - online - - fan - - is\_using\_emergency\_heat - - is\_locked - - has\_leaf -- Nest Protect: - - online -- Nest Camera: - - online - - motion\_detected - - person\_detected - - sound\_detected diff --git a/source/_components/camera.nest.markdown b/source/_components/camera.nest.markdown deleted file mode 100644 index 9a9cd737f4c..00000000000 --- a/source/_components/camera.nest.markdown +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: page -title: "Nest Camera" -description: "Instructions on how to integrate Nest cameras into Home Assistant." -date: 2016-12-03 08:10 -sidebar: true -comments: false -sharing: true -footer: true -logo: nest.png -ha_category: Camera -ha_release: 0.34 -ha_iot_class: "Cloud Poll" ---- - -The `nest` platform allows you to watch still frames from a video stream (not live stream) of your [Nest](https://nest.com/camera/meet-nest-cam/) camera in Home Assistant. - -

-You must have the [Nest component](/components/nest/) configured to use this camera. The `nest` camera will automatically be setup when you do. -

- -Nest Camera supports the `camera.turn_on` and `camera.turn_off` services since the 0.75 release. diff --git a/source/_components/climate.nest.markdown b/source/_components/climate.nest.markdown deleted file mode 100644 index 70201a0444d..00000000000 --- a/source/_components/climate.nest.markdown +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: page -title: "Nest Thermostat" -description: "Instructions on how to integrate Nest thermostats within Home Assistant." -date: 2015-03-23 19:59 -sidebar: true -comments: false -sharing: true -footer: true -logo: nest.png -ha_category: Climate -ha_iot_class: "Cloud Push" ---- - -The `nest` climate platform lets you control a thermostat from [Nest](https://nest.com). - -

-You must have the [Nest component](/components/nest/) configured to use these sensors. The `nest` climate component will automatically be setup when you do. Please note due to limitations with the European Nest Thermostat E, integration with Home Assistant for that thermostat is not possible. -

- -

- -

diff --git a/source/_components/nest.markdown b/source/_components/nest.markdown index d13409fcb12..86a86ba4873 100644 --- a/source/_components/nest.markdown +++ b/source/_components/nest.markdown @@ -8,28 +8,45 @@ comments: false sharing: true footer: true logo: nest.png -ha_category: Hub +ha_category: + - Hub + - Binary Sensor + - Camera + - Climate + - Sensor featured: true ha_iot_class: "Cloud Push" +redirect_from: + - /components/binary_sensor.nest/ + - /components/camera.nest/ + - /components/climate.nest/ + - /components/sensor.nest/ --- The Nest component is the main component to integrate all [Nest](https://nest.com/) related platforms. To connect Nest, you will have to [sign up for a developer account](https://developers.nest.com/products) and get a `client_id` and `client_secret`. +There is currently support for the following device types within Home Assistant: + +- [Binary Sensor](#binary-sensor) +- [Camera](#camera) +- [Climate](#climate) +- [Sensor](#sensor) + ### {% linkable_title Setting up developer account %} 1. Visit [Nest Developers](https://developers.nest.com/), and sign in. Create an account if you don't have one already. 2. Fill in account details: - - The "Company Information" can be anything. We recommend using your name. + * The "Company Information" can be anything. We recommend using your name. 3. Submit changes 4. Click "[Products](https://developers.nest.com/products)" at top of page. 5. Click "[Create New Product](https://developers.nest.com/products/new)" 6. Fill in details: - - Product name must be unique. We recommend [email] - Home Assistant. - - The description, users, URLs can all be anything you want. - - Leave the "Redirect URI" Field blank + * Product name must be unique. We recommend [email] - Home Assistant. + * The description, users, URLs can all be anything you want. + * Leave the "Redirect URI" Field blank 7. For permissions check every box and if it's an option select the read/write option. Note: there are important permissions under the "Other Permissions" category. If you are only adding a thermostat, do not just select the permissions under "Thermostat". You still need to check the boxes under "Other Permissions" in order to give you access to features like away mode, ETA, structure read/write, and postal code. - - The description requires a specific format to be accepted. - - Use "[Home Assistant] [Edit] [For Home Automation]" as the description as it is not super important. + * The description requires a specific format to be accepted. + * Use "[Home Assistant] [Edit] [For Home Automation]" as the description as it is not super important. 8. Click "Create Product" 9. Once the new product page opens the "Product ID" and "Product Secret" are located on the right side. These will be used as `client_id` and `client_secret` below. 10. Add the Nest component to your `configuration.yaml` and restart Home Assistant. Then, go to `Configuration > Integrations` and select `CONFIGURE` next to `Nest`. Click the link in the configurator pop up to log into your Nest account and complete the OAuth. Copy the resulting PIN code into the pop up. @@ -177,3 +194,149 @@ script: ### {% linkable_title Troubleshooting %} - If you're getting [rickrolled](https://www.youtube.com/watch?v=dQw4w9WgXcQ) instead of being able to see your Nest cameras, you may not have set up your developer account's permissions correctly. Go back through and make sure you've selected read/write under every category that it's an option. + +## {% linkable_title Platforms %} + +

+You must have the [Nest component](/components/nest/) configured to use the platforms below. +

+ +## {% linkable_title Binary Sensor %} + +The `nest` binary sensor platform lets you monitor various states of your [Nest](https://nest.com) devices. + +

+You must have the [Nest component](/components/nest/) configured to use these sensors. The binary sensors will be setup if the `nest` component is configured and the required configuration for the `nest binary sensor` is set. +

+ +## {% linkable_title Configuration %} + +To enable binary sensors and customize which sensors are setup, you can extend the [Nest component](/components/nest/) configuration in your `configuration.yaml` file with the following settings: + +```yaml +# Example configuration.yaml entry +nest: + binary_sensors: + monitored_conditions: + - 'fan' + - 'target' +``` + +By default all binary sensors for your available Nest devices will be monitored. Leave `monitored_conditions` blank to disable all binary sensors for the [Nest component](/components/nest/). + +{% configuration %} +monitored_conditions: + description: States to monitor. + required: false + type: list +{% endconfiguration %} + +The following conditions are available by device: + +- Nest Home: + - away +- Nest Thermostat: + - online + - fan + - is\_using\_emergency\_heat + - is\_locked + - has\_leaf +- Nest Protect: + - online +- Nest Camera: + - online + - motion\_detected + - person\_detected + - sound\_detected + +## {% linkable_title Camera %} + +The `nest` platform allows you to watch still frames from a video stream (not live stream) of your [Nest](https://nest.com/camera/meet-nest-cam/) camera in Home Assistant. + +

+The `nest` camera will automatically be setup when you do. +

+ +Nest Camera supports the `camera.turn_on` and `camera.turn_off` services since the 0.75 release. + +## {% linkable_title Climate %} + +The `nest` climate platform lets you control a thermostat from [Nest](https://nest.com). + +

+Please note due to limitations with the European Nest Thermostat E, integration with Home Assistant for that thermostat is not possible. +

+ +

+ +

+ +## {% linkable_title Sensor %} + +The `nest` sensor platform lets you monitor sensors connected to your [Nest](https://nest.com) devices. + +

+The sensors will be setup if the `nest` component is configured and the required configuration for the `nest sensor` is set. +

+ +## {% linkable_title Configuration %} + +To enable sensors and customize which sensors are setup, you can extend the [Nest component](/components/nest/) configuration in your `configuration.yaml` file with the following settings: + +```yaml +# Example configuration.yaml entry +nest: + sensors: + monitored_conditions: + - 'temperature' + - 'target' +``` + +By default all sensors for your available Nest devices will be monitored. Leave `monitored_conditions` blank to disable all sensors for the [Nest component](/components/nest/). + +{% configuration %} +monitored_conditions: + description: States to monitor. + required: false + type: list +{% endconfiguration %} + +The following conditions are available by device: + +- Nest Home: + - eta: Estimated time of arrival. + - security\_state: `ok` or `deter`. [Security State](#security-state). Only available when Nest Camera exists. +- Nest Thermostat: + - humidity + - operation\_mode + - temperature + - target + - hvac\_state: The currently active state of the HVAC system, `heat`, `cool` or `off` (previously `heating`, `cooling` or `off`). +- Nest Protect: + - co\_status: `Ok`, `Warning` or `Emergency` + - smoke\_status: `Ok`, `Warning` or `Emergency` + - battery\_health: `Ok` or `Replace` + - color\_status: `gray`, `green`, `yellow` or `red`. Indicates device status by color in the Nest app UI. It is an aggregate condition for battery+smoke+CO states, and reflects the actual color indicators displayed in the Nest app. +- Nest Camera: none + +## {% linkable_title Security State %} + +

+This feature is not designed to transfer your Home Assistant to a security system, neither Home Assistant nor Nest be liable to You for damages, +or consequential damages of any character arising as a result of use this feature. + +This feature does not depend on the [Nest Secure alarm system](https://nest.com/alarm-system/overview/) and is not a reflection of the status of that system, +nor does it react to state changes in that system. +

+ +

+This feature uses a new [Nest Security API](https://developers.nest.com/documentation/cloud/security-guide). +You may need to change your ["Product"](https://developers.nest.com/products) permission setting to include `Security State Read`. +After this permission change, you may need to re-authorize your client. +

+ +If a Nest Cam detects the presence of a person (see `person_detected` in [binary_sensor.nest](#binary-sensor) while the structure is in `away` mode (see `away` in [binary_sensor.nest](#binary-sensor), the structure enters `deter` mode. + +A `deter` state is re-evaluated after several minutes and relaxed to `ok` if no further `person_detected` events have occurred. + +The `security_state` automatically switches to `ok` when the structure state is `home`. \ No newline at end of file diff --git a/source/_components/sensor.nest.markdown b/source/_components/sensor.nest.markdown deleted file mode 100644 index fe730b1a341..00000000000 --- a/source/_components/sensor.nest.markdown +++ /dev/null @@ -1,82 +0,0 @@ ---- -layout: page -title: "Nest Sensor" -description: "Instructions on how to integrate Nest sensors within Home Assistant." -date: 2016-01-13 19:59 -sidebar: true -comments: false -sharing: true -footer: true -logo: nest.png -ha_category: Sensor -ha_release: pre 0.7 -ha_iot_class: "Cloud Push" ---- - -The `nest` sensor platform lets you monitor sensors connected to your [Nest](https://nest.com) devices. - -

-You must have the [Nest component](/components/nest/) configured to use these sensors. The sensors will be setup if the `nest` component is configured and the required configuration for the `nest sensor` is set. -

- -## {% linkable_title Configuration %} - -To enable sensors and customize which sensors are setup, you can extend the [Nest component](/components/nest/) configuration in your `configuration.yaml` file with the following settings: - -```yaml -# Example configuration.yaml entry -nest: - sensors: - monitored_conditions: - - 'temperature' - - 'target' -``` - -By default all sensors for your available Nest devices will be monitored. Leave `monitored_conditions` blank to disable all sensors for the [Nest component](/components/nest/). - -{% configuration %} -monitored_conditions: - description: States to monitor. - required: false - type: list -{% endconfiguration %} - -The following conditions are available by device: - -- Nest Home: - - eta: Estimated time of arrival. - - security\_state: `ok` or `deter`. [Security State](#security-state). Only available when Nest Camera exists. -- Nest Thermostat: - - humidity - - operation\_mode - - temperature - - target - - hvac\_state: The currently active state of the HVAC system, `heat`, `cool` or `off` (previously `heating`, `cooling` or `off`). -- Nest Protect: - - co\_status: `Ok`, `Warning` or `Emergency` - - smoke\_status: `Ok`, `Warning` or `Emergency` - - battery\_health: `Ok` or `Replace` - - color\_status: `gray`, `green`, `yellow` or `red`. Indicates device status by color in the Nest app UI. It is an aggregate condition for battery+smoke+CO states, and reflects the actual color indicators displayed in the Nest app. -- Nest Camera: none - -## {% linkable_title Security State %} - -

-This feature is not designed to transfer your Home Assistant to a security system, neither Home Assistant nor Nest be liable to You for damages, -or consequential damages of any character arising as a result of use this feature. - -This feature does not depend on the [Nest Secure alarm system](https://nest.com/alarm-system/overview/) and is not a reflection of the status of that system, -nor does it react to state changes in that system. -

- -

-This feature uses a new [Nest Security API](https://developers.nest.com/documentation/cloud/security-guide). -You may need to change your ["Product"](https://developers.nest.com/products) permission setting to include `Security State Read`. -After this permission change, you may need to re-authorize your client. -

- -If a Nest Cam detects the presence of a person (see `person_detected` in [binary_sensor.nest](/components/binary_sensor.nest/)) while the structure is in `away` mode (see `away` in [binary_sensor.nest](/components/binary_sensor.nest/)), the structure enters `deter` mode. - -A `deter` state is re-evaluated after several minutes and relaxed to `ok` if no further `person_detected` events have occurred. - -The `security_state` automatically switches to `ok` when the structure state is `home`. From e00c030fef92ad57c62394bc729fd99e4ebc319a Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 14 Feb 2019 16:07:26 +0100 Subject: [PATCH 9/9] :ambulance: Fixes source links (#8560) --- .../asides/component_navigation.html | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/source/_includes/asides/component_navigation.html b/source/_includes/asides/component_navigation.html index d9c4b26c9ce..21fd0aec209 100644 --- a/source/_includes/asides/component_navigation.html +++ b/source/_includes/asides/component_navigation.html @@ -1,5 +1,5 @@ {%- assign components = site.components | sort_natural: 'title' -%} -{%- assign github_main_repo = 'https://github.com/home-assistant/home-assistant/blob/master/homeassistant' -%} +{%- assign github_main_repo = 'https://github.com/home-assistant/home-assistant/blob/dev/homeassistant' -%}
{%- include edit_github.html -%} @@ -14,13 +14,15 @@ {%- if file_parts.size == 2 -%} {%- assign is_platform = true -%} {%- assign imp_name = file_parts[1] -%} + {%- assign imp_url = imp_name | prepend: '/components/' | append: '/' -%} {%- assign parent_name = file_parts[0] -%} {%- assign parent_url = parent_name | prepend: '/components/' | append: '/' -%} - {%- assign parent_component = components | where: 'url', parent_url | first -%} + {%- assign parent_component = components | where: 'url', imp_url | first -%} {%- else -%} {%- assign is_platform = false -%} {%- assign imp_name = file_parts | first -%} - {%- endif -%} + {%- assign imp_url = imp_name | prepend: '/components/' | append: '/' -%} +{%- endif -%} {%- if page.ha_iot_class -%}
@@ -56,12 +58,13 @@
{%- endif -%} - {%- if is_platform -%} -
- {%- endif -%} +
+ {%- if is_platform -%} + Source: {{imp_name}}/{{parent_name}}.py + {%- else -%} + Source: {{imp_url}} + {%- endif -%} +
{%- if is_platform and parent_name != 'sensor' -%}