From df8069e58d96cb77dfe145bd1f6404b88c340cbb Mon Sep 17 00:00:00 2001 From: Julian Kahnert Date: Thu, 20 Apr 2017 09:22:23 +0200 Subject: [PATCH 01/59] zone tracking enabled by default (since iOS 1.0.2) also see: --- source/_docs/ecosystem/ios/location.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/ios/location.markdown b/source/_docs/ecosystem/ios/location.markdown index 6ee15213b5c..beb6ca7019f 100644 --- a/source/_docs/ecosystem/ios/location.markdown +++ b/source/_docs/ecosystem/ios/location.markdown @@ -34,7 +34,7 @@ At launch, Home Assistant for iOS sets up geofences for all zones in your Home A ### Configuration -Add `track_ios: true` to your zone configurations to enable it for tracking in all connected iOS apps. +To disable location tracking add `track_ios: false` to each zones settings or under customize. [apple-energy-guide]: https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/LocationBestPractices.html#//apple_ref/doc/uid/TP40015243-CH24-SW4 [apple-location-programming-guide]: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW9 From 8d2af4c283de905bf5b6e384e1bc5a5076adaf37 Mon Sep 17 00:00:00 2001 From: lichtteil Date: Fri, 21 Apr 2017 12:04:59 +0200 Subject: [PATCH 02/59] Add notice about inactive fritzdect actors (#2464) --- source/_components/switch.fritzdect.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/switch.fritzdect.markdown b/source/_components/switch.fritzdect.markdown index 1a9fe609480..b0d3b2ee3cd 100644 --- a/source/_components/switch.fritzdect.markdown +++ b/source/_components/switch.fritzdect.markdown @@ -40,3 +40,8 @@ Configuration variables: - **username** (*Required*): The username for your Fritz!Box. - **password** (*Required*): The password for your Fritz!Box. - **host** (*Optional*): The IP address/hostname of your Fritz!Box. Defaults to `fritz.box`. + + +

+If this component throws an error when starting home-assistant you should check if all actors are plugged in and connected to the FritzBox. Inactive actors that are not deleted from FritzBox configuration might lead to errors. +

From d2b167df1bdc3b0b2701da49374380740ce7bf62 Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Fri, 21 Apr 2017 17:56:28 +0200 Subject: [PATCH 03/59] Enhancements for Neato (#2381) * Enhancements for Neato * Create camera.neato.markdown --- source/_components/camera.neato.markdown | 20 ++++++++++++++++++++ source/_components/sensor.neato.markdown | 1 + 2 files changed, 21 insertions(+) create mode 100644 source/_components/camera.neato.markdown diff --git a/source/_components/camera.neato.markdown b/source/_components/camera.neato.markdown new file mode 100644 index 00000000000..9954d924b5c --- /dev/null +++ b/source/_components/camera.neato.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Neato Camera" +description: "Instructions how to setup the Neato cleaning maps within Home Assistant." +date: 2017-04-05 13:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: neato.png +ha_category: Camera +ha_release: 0.42 +--- + + +The `neato` camera platform allows you to view the latest cleaning map of your [Neato Botvac Connected] +(https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/botvac-connected/). + +The requirement is that you have setup your [Neato hub](/components/neato/). + diff --git a/source/_components/sensor.neato.markdown b/source/_components/sensor.neato.markdown index c2f5e4a7a43..4b454f84f96 100644 --- a/source/_components/sensor.neato.markdown +++ b/source/_components/sensor.neato.markdown @@ -13,5 +13,6 @@ ha_release: 0.33 --- The `neato` sensor platform allows you to watch status and battery of your [Neato Botvac Connected](https://www.neatorobotics.com/robot-vacuum/botvac-connected-series/botvac-connected/). +The status sensor will contain attributes on the robots last clean session. To add `neato` sensors to your installation, follow instructions in [Neato component](/components/neato/). From 982e5f9639fdbf13a2ee80cf100a939c78ff79c5 Mon Sep 17 00:00:00 2001 From: hawk259 Date: Fri, 21 Apr 2017 11:59:59 -0400 Subject: [PATCH 04/59] Adding docs for new AlarmDecoder (#2373) * Adding docs for new AlarmDecoder * moved to 0.43 release, I hope tweak usb docs --- .../alarm_control_panel.alarmdecoder.markdown | 20 +++++++ source/_components/alarmdecoder.markdown | 55 ++++++++++++++++++ .../binary_sensor.alarmdecoder.markdown | 20 +++++++ .../_components/sensor.alarmdecoder.markdown | 18 ++++++ .../images/supported_brands/alarmdecoder.png | Bin 0 -> 15273 bytes 5 files changed, 113 insertions(+) create mode 100644 source/_components/alarm_control_panel.alarmdecoder.markdown create mode 100644 source/_components/alarmdecoder.markdown create mode 100644 source/_components/binary_sensor.alarmdecoder.markdown create mode 100644 source/_components/sensor.alarmdecoder.markdown create mode 100644 source/images/supported_brands/alarmdecoder.png diff --git a/source/_components/alarm_control_panel.alarmdecoder.markdown b/source/_components/alarm_control_panel.alarmdecoder.markdown new file mode 100644 index 00000000000..fec4f0cb3fd --- /dev/null +++ b/source/_components/alarm_control_panel.alarmdecoder.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "AlarmDecoder Alarm Control Panel" +description: "Instructions 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/). + diff --git a/source/_components/alarmdecoder.markdown b/source/_components/alarmdecoder.markdown new file mode 100644 index 00000000000..cc6c5fc662c --- /dev/null +++ b/source/_components/alarmdecoder.markdown @@ -0,0 +1,55 @@ +--- +layout: page +title: "AlarmDecoder Alarm" +description: "Instructions on how to integrate a DSC/Honeywell alarm panel with Home Assistant using an AlarmDecoder device." +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` component will allow Home Assistant users who own either a DSC or Honeywell alarm panel to leverage their alarm system and it's 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. + +Please visit the [AlarmDecoder website](https://www.alarmdecoder.com/) for further information about the AlarmDecoder devices. + +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 an keypad display +- [Alarm Control Panel](/components/alarm_control_panel.alarmdecoder/): 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. + +An `alarmdecoder` section must be present in the `configuration.yaml` file and contain the following options as required: + +```yaml +# Example configuration.yaml entry +alarmdecoder: + device: + type: socket + host: 192.168.1.20 + port: 10000 + panel_display: On + zones: + 01: + name: 'Smoke Detector' + type: 'smoke' + 02: + name: 'Front Door' + type: 'opening' +``` + +Configuration variables: + +- **type** (*Required*): The type of AlarmDecoder device: socket, serial or usb +- **host** (*Optional*): The IP address of the AlarmDecoder device on your home network, if using socket type. Default: `localhost` +- **port** (*Optional*): The port of the AlarmDecoder device on your home network, if using socket type. Default: `10000` +- **path** (*Optional*): The path of the AlarmDecoder device, if using socket type. Default: `/dev/ttyUSB0` +- **baud** (*Optional*): The baud rate of the AlarmDecoder device, if using serial type. Default: `115200` +- **panel_display** (*Optional*): Create a sensor called sensor.alarm_display to match the Alarm Keypad dispaly. Default: `off` +- **zones** (*Optional*): AlarmDecoder has no way to tell us which zones are actually in use, so each zone must be configured in Home Assistant. For each zone, at least a name must be given. For more information on the available zone types, take a look at the [Binary Sensor](/components/binary_sensor.alarmdecoder/) docs. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.* diff --git a/source/_components/binary_sensor.alarmdecoder.markdown b/source/_components/binary_sensor.alarmdecoder.markdown new file mode 100644 index 00000000000..1bfbd1be9f1 --- /dev/null +++ b/source/_components/binary_sensor.alarmdecoder.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "AlarmDecoder Binary Sensor" +description: "Instructions 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 new file mode 100644 index 00000000000..d7b0483f9a1 --- /dev/null +++ b/source/_components/sensor.alarmdecoder.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "AlarmDecoder Sensor" +description: "Instructions 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/). diff --git a/source/images/supported_brands/alarmdecoder.png b/source/images/supported_brands/alarmdecoder.png new file mode 100644 index 0000000000000000000000000000000000000000..3159f9320500353f3c3103e1b15e4a2d68fa167d GIT binary patch literal 15273 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 bdx4U=+v;^jpT^-*Euwf|Rjx$F^u_-GMMQ|- literal 0 HcmV?d00001 From c540046c7f7867043707cffed0c35721de3ad50f Mon Sep 17 00:00:00 2001 From: mountainsandcode Date: Fri, 21 Apr 2017 18:01:56 +0200 Subject: [PATCH 05/59] Update mvglive documentation (#2386) * Update mvglive documentation * Update sensor.mvglive.markdown * Updated to correspond to code PR --- source/_components/sensor.mvglive.markdown | 48 ++++++++++------------ 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/source/_components/sensor.mvglive.markdown b/source/_components/sensor.mvglive.markdown index 5d461ad19e3..8d8dad582ae 100644 --- a/source/_components/sensor.mvglive.markdown +++ b/source/_components/sensor.mvglive.markdown @@ -22,45 +22,39 @@ To enable this sensor, add the following lines to your `configuration.yaml` file # Example configuration.yaml entry sensor: - platform: mvglive - station: STATION_OR_STOP + nextdeparture: + - station: STATION_OR_STOP_NAME ``` Configuration variables: - **station** (*Required*): Name of the stop or station. Visit [the MVG live web site](http://www.mvg-live.de) to find valid names. - - **destination** (*Optional*): Name of the line's final destination to display only connections ending there. - - **line** (*Optional*): Online display connections from this line, e.g. `'U6'`, `'S2'`. - - **offset** (*Optional*): Do not display connections departing sooner than this number of minutes (defaults to 0). Useful if you are a couple of minutes away from the stop. - - **bus** (*Optional*): If 'False', do not display bus connections - - **tram** (*Optional*): If 'False', do not display tram connections - - **ubahn** (*Optional*): If 'False', do not display U-Bahn (subway) connections - - **sbahn** (*Optional*): If 'False', do not display S-Bahn (suburban train) connections - + - **destinations** (*Optional*): One or multiple final stop names, e.g. 'Feldmoching' or ['Feldmoching','Harthof']. This can be used to only consider a particular direction of travel + - **directions** (*Optional*): Filter by direction of the departure. For Tram, Bus, SEV, and S-Bahn, direction = direction. For U-Bahn trains, directions are more general. For U1, U2, U3 and U6, direction='1' indicates south-bound trains, direction='2' indicates northbound trains. For U4 and U5, direction='1' indicates east-bound trains, direction='2' indicates west-bound trains. For example, setting directions: '1' can be used to get all south-bound trains at Scheidplatz. + - **lines** (*Optional*): One or more line numbers, e.g. 'U2' or ['U2','U8','N41'] + - **products** (*Optional*): One or more modes of transport, defaults to all 4 modes ['U-Bahn', 'Tram', 'Bus', 'S-Bahn']. + - **timeoffset** (*Optional*): Do not display departures leaving sooner than this number of minutes (defaults to 0). Useful if you are a couple of minutes away from the stop. + - **name** (*Optional*): You can customise the name of the sensor, which defaults to the station name. ## {% linkable_title Examples %} ### {% linkable_title Full configuration %} -The example below shows a full configuration using the 'line' argument. +The example below shows a full configuration with three sensors that showcase the various configuration options. ```yaml # Example configuration.yml entry sensor: - platform: mvglive - station: Marienplatz - line: U6 - offset: 5 - destination: Garching-Forschungszentrum -``` - -Another example showing all bus connections at the main station. - -```yaml -# Example configuration.yml entry -sensor: - - platform: mvglive - station: Hauptbahnhof - offset: 2 - sbahn: False - ubahn: False - tram: False + nextdeparture: + - station: Hauptbahnhof + name: Hbf + destinations: ['München Flughafen Terminal','Markt Schwaben'] + products: 'S-Bahn' + timeoffset: 2 + - station: Sendlinger Tor + lines: ['U2','U8'] + - station: Scheidplatz + products: ['U-Bahn'] + directions: '1' ``` +The first sensor will return S-Bahn departures to Munich Airport or Markt Schwaben that are at least 2 minutes away. The second sensor returns U2 and U8 departures from Sendlinger Tor while the third sensor returns all south-bound U-Bahn trains from Scheidplatz. From 801ed69e108bb593caa0168b64ee82bf5e036279 Mon Sep 17 00:00:00 2001 From: Charles Blonde Date: Fri, 21 Apr 2017 18:02:48 +0200 Subject: [PATCH 06/59] Add Bose soundtouch discovery support (#2401) --- source/_components/discovery.markdown | 3 ++- source/_components/media_player.soundtouch.markdown | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index b0f0acb04cf..0b099a52352 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -30,6 +30,7 @@ Home Assistant can discover and automatically configure zeroconf/mDNS and uPnP d * Flux Led/MagicLight * Linn / Openhome * Denon Network Receivers + * Bose Soundtouch speakers It will be able to add Google Chromecasts and Belkin WeMo switches automatically, for Philips Hue it will require some configuration from the user. @@ -66,7 +67,7 @@ Valid values for ignore are:

-Home Assistant must be on the same network as the devices for uPnP discovery to work. +Home Assistant must be on the same network as the devices for uPnP discovery to work. If running Home Assistant in a Docker container use switch `--net=host` to put it on the host's network.

diff --git a/source/_components/media_player.soundtouch.markdown b/source/_components/media_player.soundtouch.markdown index f9ab4354947..0c3f3bdf50a 100644 --- a/source/_components/media_player.soundtouch.markdown +++ b/source/_components/media_player.soundtouch.markdown @@ -9,13 +9,15 @@ sharing: true footer: true logo: soundtouch.jpg ha_category: Media Player -ha_release: X.X.X +ha_release: 0.34.0 ha_iot_class: "Local Polling" --- The `soundtouch` platform allows you to control your [Bose Soundtouch](https://www.soundtouch.com/) speakers from Home Assistant. -To add your Soundtouch components to your installation, add the following to your `configuration.yaml` file. +By default it supports auto-discovery provided by Home Assistant, and you don't need to add anything to your `configuration.yaml`. + +Alternatively, you can add the following to your `configuration.yaml` file. ```yaml # Example configuration.yaml From 43e3b56ae9ce058d7e4140626df5e04cdb7225b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Oldag?= Date: Fri, 21 Apr 2017 12:03:15 -0400 Subject: [PATCH 07/59] Add docs for pwm led platform. (#2402) * Add docs for pwm led platform. * Renamed pwm platform to rpi_gpio_pwm. --- .../_components/light.rpi_gpio_pwm.markdown | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 source/_components/light.rpi_gpio_pwm.markdown diff --git a/source/_components/light.rpi_gpio_pwm.markdown b/source/_components/light.rpi_gpio_pwm.markdown new file mode 100644 index 00000000000..157e201c7db --- /dev/null +++ b/source/_components/light.rpi_gpio_pwm.markdown @@ -0,0 +1,50 @@ +--- +layout: page +title: "PWM LED" +description: "Instructions on how to setup pwm leds within Home Assistant." +date: 2017-04-04 13:00 +sidebar: true +layout: page +comments: false +sharing: true +footer: true +ha_category: Light +ha_iot_class: "Local Push" +ha_release: 0.43 +--- + +The `rpi_gpio_pwm` platform allows to control multiple lights using pulse-width modulation, for example led strips. It supports one-color, RGB and RGBW leds driven by GPIOs of an Raspberry Pi or a PCA9685 controller. + +### {% linkable_title Configuration %} + +```yaml +# Example configuration.yaml entry +light: + platform: rpi_gpio_pwm + leds: + # One-color led directly connected to GPIO + - name: Lightstrip Cupboard + driver: gpio + pins: [17] + type: simple + # RGB led connected to PCA9685 controller + - name: TV Backlight + driver: pca9685 + pins: [0, 1, 2] # [R, G, B] + type: rgb + # RGBW led connected to PCA9685 controller + - name: Lightstrip Desk + driver: pca9685 + pins: [3, 4, 5, 6] # [R, G, B, W] + type: rgbw +``` + +Configuration variables: + +- **leds** array (*Required*): + - **name** (*Required*): The name of the led. + - **driver** (*Required*): The driver, which controls the led. Choose either `gpio` or `pca9685`. + - **pins** (*Required*): The pins connected to the led. The order of pins is determined by the specified type. + - **type** (*Required*): The type of led. Choose either `rgb`, `rgbw` or `simple`. + - **freq** (*Optional*): The PWM frequency. (Default: `200`) + - **address** (*Optional*): The address of the PCA9685 driver. (Default: `0x40`) From af0537278ad03d8e8c594255af2b6e0fce72a2f9 Mon Sep 17 00:00:00 2001 From: happyleavesaoc Date: Fri, 21 Apr 2017 12:03:45 -0400 Subject: [PATCH 08/59] spotify media player documentation (#2406) * spotify media player documentation * update spotify doc --- .../_components/media_player.spotify.markdown | 51 ++++++++++++++++++ source/images/supported_brands/spotify.png | Bin 0 -> 47711 bytes 2 files changed, 51 insertions(+) create mode 100644 source/_components/media_player.spotify.markdown create mode 100644 source/images/supported_brands/spotify.png diff --git a/source/_components/media_player.spotify.markdown b/source/_components/media_player.spotify.markdown new file mode 100644 index 00000000000..2964eb4102d --- /dev/null +++ b/source/_components/media_player.spotify.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Spotify" +description: "Instructions on how to integrate Spotify into Home Assistant." +date: 2017-04-10 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: spotify.png +ha_category: Media Player +featured: false +ha_release: 0.43 +ha_iot_class: "Cloud Polling" +--- + +The `spotify` media player platform allows you to control [Spotify](https://www.spotify.com/) playback from Home Assistant. + +## {% linkable_title Prerequisites %} + +- Spotify Premium account. +- Spotify Application, properly configured. + +To create the required Spotify Application, login to [Spotify Developer](https://developer.spotify.com), visit the [My Applications](https://developer.spotify.com/my-applications/#!/applications) page, and select **Create An App**. Enter any name and description. Once your application is created, you can view it and discover your **Client ID** and **Client Secret**, which are placed in the Home Assistant configuration file. Finally, add a **Redirect URI** in the following form: + +`http:///api/spotify` + +Remember to select **Save** after adding the URI. + + +## {% linkable_title Configuration %} + +To add Spotify to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: spotify + client_id: + client_secret: +``` + +Configuration variables: + +- **client_id** (*Required*): Client ID from your Spotify Application. +- **client_secret** (*Required*): Client Secret from your Spotify Application. +- **cache_path** (*Optional*): Path to cache authentication token (defaults to configuration directory). + +## {% linkable_title Setup %} + +After the prerequisites and configuration are complete, restart Home Assistant. A **Spotify** configurator element will be available. Follow the instructions to authorize Home Assistant to access your Spotify account. A Spotify media player will then appear. diff --git a/source/images/supported_brands/spotify.png b/source/images/supported_brands/spotify.png new file mode 100644 index 0000000000000000000000000000000000000000..3542e5ec38cc600f992c44f1bacf719f18050d9e GIT binary patch literal 47711 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 Date: Fri, 21 Apr 2017 19:04:34 +0300 Subject: [PATCH 09/59] Add support of modbus input registers query (#2423) * Add support of modbus input registers query Documentation updated according pull request. Add support of modbus input registers query * Update sensor.modbus.markdown Removed some extra space. * Update according main PR change config option name was changed. --- source/_components/sensor.modbus.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/sensor.modbus.markdown b/source/_components/sensor.modbus.markdown index 691a755be5b..8a589ca0cf2 100644 --- a/source/_components/sensor.modbus.markdown +++ b/source/_components/sensor.modbus.markdown @@ -35,6 +35,8 @@ sensor: unit_of_measurement: °C slave: 1 register: 120 + register_type: input + data_type: float scale: 0.01 offset: -273.16 precision: 2 @@ -46,8 +48,10 @@ Configuration variables: - **name** (*Required*): Name of the sensor. - **slave** (*Required*): The number of the slave (Optional for tcp and upd Modbus). - **register** (*Required*): Register number. + - **register_type** (*Optional*): Modbus register type (holding, input), default holding - **unit_of_measurement** (*Optional*): Unit to attach to value. - **count** (*Optional*): Number of registers to read. - **scale** (*Optional*): Scale factor (output = scale * value + offset), default 1 - **offset** (*Optional*): Final offset (output = scale * value + offset), default 0 - **precision** (*Optional*): Number of valid decimals, default 0 + - **data_type** (*Optional*): Response representation (int, float). If float selected, value will be converted to IEEE 754 floating point format. default int From 9f694dad5497c1badaf9e12030d40c0b97f19180 Mon Sep 17 00:00:00 2001 From: Klaas Hoekema Date: Fri, 21 Apr 2017 12:01:31 -0400 Subject: [PATCH 10/59] Document new token auth option for Hook switch (#2378) * Document new token auth option for Hook switch * Update switch.hook.markdown --- source/_components/switch.hook.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/switch.hook.markdown b/source/_components/switch.hook.markdown index 635e234940b..0550cadb089 100644 --- a/source/_components/switch.hook.markdown +++ b/source/_components/switch.hook.markdown @@ -20,12 +20,20 @@ In short, Hook is an RF to Wi-Fi bridge, controlling devices that recieve comman Hook provides a simple [REST API](https://app.swaggerhub.com/api/rahilj/GetHook_RestAPI/v1). This Home Assistant component reads in devices that have been set up in the official app. +Configure with either your username/password or your API token for the official app. + ```yaml # Example configuration.yaml entry - platform: hook username: password: !secret hook ``` +Or +```yaml +# Example configuration.yaml entry +- platform: hook + token: +``` Extra debug logging is available, if you need it. From 5a433ea09a4c0de5ca473215a4a0210dc58df942 Mon Sep 17 00:00:00 2001 From: Martokk Date: Fri, 21 Apr 2017 11:11:41 -0500 Subject: [PATCH 11/59] Update script delay to include milliseconds (#2438) --- source/_docs/scripts.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index fdc2c50b460..1c6d9e8fbf5 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -66,7 +66,7 @@ delay: 00:01:30 ```yaml # Waits 1 minute delay: - # supports seconds, minutes, hours, days + # supports milliseconds, seconds, minutes, hours, days minutes: 1 ``` From cdede48f77b39dd1f3d56459a6ac03f20e9508aa Mon Sep 17 00:00:00 2001 From: Daniel Peukert Date: Fri, 21 Apr 2017 21:09:05 +0200 Subject: [PATCH 12/59] Add clickable CLA label and fix country name --- source/developers/cla_sign.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/developers/cla_sign.html b/source/developers/cla_sign.html index e6b7b2b9a9d..6f4156774e1 100644 --- a/source/developers/cla_sign.html +++ b/source/developers/cla_sign.html @@ -20,7 +20,7 @@ footer: true width: 77%; } - div > label { + .wrapper div > label { width: 20%; } @@ -74,7 +74,7 @@ footer: true - I have read and agreed to the Home Assistant Contributor License Agreement +
@@ -91,7 +91,7 @@ footer: true