Date: Sat, 28 Oct 2017 17:30:18 +0100
Subject: [PATCH 015/117] Added externally accessible note
A common question seems to be about being externally accessible, and SSL. I've added a note at the top about it.
---
source/_components/google_assistant.markdown | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown
index 4a2d6e8a0be..76e146327c1 100644
--- a/source/_components/google_assistant.markdown
+++ b/source/_components/google_assistant.markdown
@@ -16,6 +16,10 @@ ha_release: 0.56
# Google Assistant Docs
The Google Assistant component requires a bit more setup than most due to the way Google requires Assistant Apps to be set up.
+
+To use Google Assistant your Home Assistant configuration has to be externally accessible, with a hostname and SSL certificate. If you haven't already configured that you should do so before continuing.
+
+
### {% linkable_title Configuration %}
```yaml
From 979f3994895bb8f0efbcd5f450b7a2021832e601 Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Sat, 28 Oct 2017 18:48:15 +0100
Subject: [PATCH 016/117] Fix a missing character
---
source/_components/google_assistant.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown
index 76e146327c1..88d45d3b531 100644
--- a/source/_components/google_assistant.markdown
+++ b/source/_components/google_assistant.markdown
@@ -18,7 +18,7 @@ The Google Assistant component requires a bit more setup than most due to the wa
To use Google Assistant your Home Assistant configuration has to be externally accessible, with a hostname and SSL certificate. If you haven't already configured that you should do so before continuing.
-
+
### {% linkable_title Configuration %}
From 32617c01bd91b42dc4bd463fef03dba2adbc4c11 Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Sat, 28 Oct 2017 22:02:48 +0100
Subject: [PATCH 017/117] Added remaining Z-Wave links
---
source/_includes/asides/docs_navigation.html | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html
index b6c07f6f979..78798c0818d 100644
--- a/source/_includes/asides/docs_navigation.html
+++ b/source/_includes/asides/docs_navigation.html
@@ -97,8 +97,10 @@
{% active_link /docs/z-wave/adding/ Adding devices %}
{% active_link /docs/z-wave/control-panel/ The Z-Wave control panel %}
{% active_link /docs/z-wave/controllers/ Controllers %}
- {% active_link /docs/z-wave/devices/ Devices %}
- {% active_link /docs/z-wave/device-specific/ Device Specific %}
+ {% active_link /docs/z-wave/devices/ Devices %} and {% active_link /docs/z-wave/entities/ Entities %}
+ {% active_link /docs/z-wave/query-state/ Query Stages %} for devices
+ {% active_link /docs/z-wave/device-specific/ Device Specific %} configuration
+ {% active_link /docs/z-wave/events/ Events %} and {% active_link /docs/z-wave/services/ Services %}
From ad2aac6d68bef7469d1b58713234bbbe4f57211e Mon Sep 17 00:00:00 2001
From: Anders Melchiorsen
Date: Sun, 29 Oct 2017 01:29:36 +0200
Subject: [PATCH 018/117] Simplify light dimming during media play (#3776)
---
.../dim_lights_when_playing_media.markdown | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/source/_cookbook/dim_lights_when_playing_media.markdown b/source/_cookbook/dim_lights_when_playing_media.markdown
index e0b0859193d..e0c19c45d3b 100644
--- a/source/_cookbook/dim_lights_when_playing_media.markdown
+++ b/source/_cookbook/dim_lights_when_playing_media.markdown
@@ -12,7 +12,7 @@ ha_category: Automation Examples
Like it how the lights dim up/down at the movies? Do it at home as well!
-This example uses the [media player](https://home-assistant.io/components/media_player/), [Philips Hue](https://home-assistant.io/components/light.hue/) (transitions) and the [sun](https://home-assistant.io/components/sun/) component. We'll use actions to detect media player state changes and scenes to control multiple lights, color settings and transition between scenes.
+This example uses the [media player](https://home-assistant.io/components/media_player/), [lights](https://home-assistant.io/components/light/) (transitions) and the [sun](https://home-assistant.io/components/sun/) component. We'll use actions to detect media player state changes and [scenes](https://home-assistant.io/components/scene/) to control multiple lights and transition between scenes.
#### {% linkable_title Scenes %}
One scene for normal light, one for when movies are on. A 2 second transition gives a nice 'feel' to the switch.
@@ -24,25 +24,21 @@ scene:
light.light1:
state: on
transition: 2
- brightness: 150
- xy_color: [ 0.4448, 0.4066 ]
+ brightness_pct: 60
light.light2:
state: on
transition: 2
- brightness: 215
- xy_color: [ 0.4448, 0.4066 ]
+ brightness_pct: 85
- name: Livingroom dim
entities:
light.light1:
state: on
transition: 2
- brightness: 75
- xy_color: [ 0.5926, 0.3814 ]
+ brightness_pct: 30
light.light2:
state: on
transition: 2
- brightness: 145
- xy_color: [ 0.5529, 0.4107 ]
+ brightness_pct: 55
```
From 4d2978ba673300fd8e5ec13a27b1058b048e1528 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Sun, 29 Oct 2017 01:35:44 +0200
Subject: [PATCH 019/117] Update timestamps to ISO 8601 (#3814)
---
source/_docs/configuration/state_object.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_docs/configuration/state_object.markdown b/source/_docs/configuration/state_object.markdown
index 8ba54380a55..72e62321477 100644
--- a/source/_docs/configuration/state_object.markdown
+++ b/source/_docs/configuration/state_object.markdown
@@ -23,8 +23,8 @@ Field | Description
`state.domain` | Domain of the entity. Example: `light`.
`state.object_id` | Object ID of entity. Example: `kitchen`.
`state.name` | Name of the entity. Based on `friendly_name` attribute with fall back to object ID. Example: `Kitchen Ceiling`.
-`state.last_updated` | Time the state was written to the state machine. Note that writing the exact same state including attributes will not result in this field being updated. Example: `14:10:03 13-03-2016`.
-`state.last_changed` | Time the state changed. This is not updated when there are only updated attributes. Example: `14:10:03 13-03-2016`.
+`state.last_updated` | Time the state was written to the state machine. Note that writing the exact same state including attributes will not result in this field being updated. Example: `2017-10-28 08:13:36.715874+00:00`.
+`state.last_changed` | Time the state changed. This is not updated when there are only updated attributes. Example: `2017-10-28 08:13:36.715874+00:00`.
`state.attributes` | A dictionary with extra attributes related to the current state.
The attributes of an entity are optional. There are a few attributes that are used by Home Assistant for representing the entity in a specific way. Each component will also have it's own attributes to represent extra state data about the entity. For example, the light component has attributes for the current brightness and color of the light. When an attribute is not available, Home Assistant will not write it to the state.
From a7e0330945058d19a4e82eecf8452cc9ca9998c6 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Sun, 29 Oct 2017 01:36:22 +0200
Subject: [PATCH 020/117] Add sample scripts, update output and re-format code
(#3815)
* Add sample scripts, update output and re-format code
* Remove blank lines
---
source/developers/python_api.markdown | 72 +++++++++++++++++++++++----
source/developers/rest_api.markdown | 70 +++++++++++++++-----------
2 files changed, 101 insertions(+), 41 deletions(-)
diff --git a/source/developers/python_api.markdown b/source/developers/python_api.markdown
index 727e94f071e..2e752f80b4c 100644
--- a/source/developers/python_api.markdown
+++ b/source/developers/python_api.markdown
@@ -40,7 +40,7 @@ print(remote.get_config(api))
### {% linkable_title Get details about services, events, and entitites %}
-The output from this is similar to the output you'd find via the frontend, using the DevTools console.
+The output from this is similar to the output you'd find via the frontend, using the [Developer Tools](/docs/tools/dev-tools/).
```python
import homeassistant.remote as remote
@@ -71,12 +71,11 @@ To get the details of a single entity, use `get_state`:
import homeassistant.remote as remote
api = remote.API('127.0.0.1', 'YOUR_PASSWORD')
-office_temperature = remote.get_state(api, 'sensor.office_temperature')
-print('{} is {} {}.'.format(office_temperature.name,
- office_temperature.state,
- office_temperature.attributes['unit_of_measurement']
- )
- )
+office_temp = remote.get_state(api, 'sensor.office_temperature')
+print('{} is {} {}.'.format(
+ office_temp.name, office_temp.state,
+ office_temp.attributes['unit_of_measurement'])
+)
```
This outputs the details which are stored for this entity, ie:
@@ -92,10 +91,9 @@ import homeassistant.remote as remote
api = remote.API('127.0.0.1', 'YOUR_PASSWORD')
switch_livingroom = remote.get_state(api, 'switch.livingroom_pin_2')
-print('{} is {}.'.format(switch_livingroom.name,
- switch_livingroom.state
- )
- )
+print('{} is {}.'.format(
+ switch_livingroom.name, switch_livingroom.state)
+)
```
### {% linkable_title Set the state of an entity %}
@@ -184,3 +182,55 @@ data = {"title":"Test", "message":"A simple test message from HA."}
remote.call_service(api, domain, 'jabber', data)
```
+
+## {% linkable_title Examples %}
+
+This section contains a couple of sample scripts.
+
+### {% linkable_title List all sensors and their value %}
+
+If you want to see, export or list all sensor states then an easy way to do it, is to get all entities and filter for the one you are looking for.
+
+```python
+import homeassistant.remote as remote
+
+api = remote.API('127.0.0.1', 'YOUR_PASSWORD')
+entities = remote.get_states(api)
+for entity in entities:
+ if entity.entity_id.startswith('sensor'):
+ data = remote.get_state(api, entity.entity_id)
+ print('{}: {}'.format(data.attributes['friendly_name'], data.state))
+```
+
+### {% linkable_title Show difference between `last_changed` and `last_updated` %}
+
+The documentation about the [State Objects](/docs/configuration/state_object/) describes the
+`last_changed` and `last_updated` fields. This example shows how it works in practice.
+
+```python
+import time
+
+from prettytable import PrettyTable
+import homeassistant.remote as remote
+
+api = remote.API('127.0.0.1', 'YOUR_PASSWORD')
+
+ACTIONS = {
+ 'Create sensor': [21, 'Test'],
+ 'No new sensor value': [21, 'Test'],
+ 'New sensor value': [22, 'Test'],
+ 'Update attribute': [22, 'Test1'],
+}
+
+output = PrettyTable(['Action', 'Last changed', 'Last updated'])
+
+for key, value in ACTIONS.items():
+ remote.set_state(api, 'sensor.test', new_state=value[0],
+ attributes={'friendly_name': value[1]})
+ data = remote.get_state(api, 'sensor.test')
+ output.add_row([key, data.last_changed, data.last_updated])
+ time.sleep(2)
+
+print(output)
+```
+
diff --git a/source/developers/rest_api.markdown b/source/developers/rest_api.markdown
index ede8f8157b2..8f620814d5a 100644
--- a/source/developers/rest_api.markdown
+++ b/source/developers/rest_api.markdown
@@ -39,7 +39,7 @@ print(response.text)
```
-You can append `?api_password=YOUR_PASSWORD` to any url to log in automatically.
+You can append `?api_password=YOUR_PASSWORD` to any URL to log in automatically.
Successful calls will return status code 200 or 201. Other status codes that can return are:
@@ -73,33 +73,43 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \
Returns the current configuration as JSON.
```json
-{
- "components": [
- "recorder",
- "http",
- "weather.openweathermap",
- "api",
- "websocket_api",
- "frontend",
- "sensor.time_date",
- "sun",
- "device_tracker",
- "group",
- "automation"
- ],
- "config_dir": "/home/ha/.homeassistant",
- "elevation": 590,
- "latitude": 45.92,
- "location_name": "Home",
- "longitude": 6.52,
- "time_zone": "Europe/Zurich",
- "unit_system": {
- "length": "km",
- "mass": "g",
- "temperature": "\\u00b0C",
- "volume": "L"
- },
- "version": "0.37.0.dev0"
+{
+ "components":[
+ "sensor.cpuspeed",
+ "frontend",
+ "config.core",
+ "http",
+ "map",
+ "api",
+ "sun",
+ "config",
+ "discovery",
+ "conversation",
+ "recorder",
+ "group",
+ "sensor",
+ "websocket_api",
+ "automation",
+ "config.automation",
+ "config.customize"
+ ],
+ "config_dir":"/home/ha/.homeassistant",
+ "elevation":510,
+ "latitude":45.8781529,
+ "location_name":"Home",
+ "longitude":8.458853651,
+ "time_zone":"Europe/Zurich",
+ "unit_system":{
+ "length":"km",
+ "mass":"g",
+ "temperature":"\u00b0C",
+ "volume":"L"
+ },
+ "version":"0.56.2",
+ "whitelist_external_dirs":[
+ "/home/ha/.homeassistant/www",
+ "/home/ha/.homeassistant/"
+ ]
}
```
@@ -115,10 +125,10 @@ Returns basic information about the Home Assistant instance as JSON.
```json
{
- "base_url": "http://127.0.0.1:8123",
+ "base_url": "http://192.168.0.2:8123",
"location_name": "Home",
"requires_api_password": true,
- "version": "0.20.0.dev0"
+ "version": "0.56.2"
}
```
From cda120f2747474c97106da3245bc534290097d1c Mon Sep 17 00:00:00 2001
From: Aleksey Jurchenko
Date: Sun, 29 Oct 2017 02:37:51 +0300
Subject: [PATCH 021/117] new model added (#3820)
---
source/_components/media_player.samsungtv.markdown | 1 +
1 file changed, 1 insertion(+)
diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown
index 34f042724a4..511bdeee001 100644
--- a/source/_components/media_player.samsungtv.markdown
+++ b/source/_components/media_player.samsungtv.markdown
@@ -55,6 +55,7 @@ Currently known supported models:
- U6300 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
- K6500AF (port must be set to 8001)
- KS8005 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
+- KS7502 (port must be set to 8001, and `pip3 install websocket-client` must be executed, turn on doesn't work, turn off works fine)
- K5600AK (partially supported, turn on works but state is not updated)
Currently tested but not working models:
From 2c1d63be6ecad18b961da9052916fe9c300987cb Mon Sep 17 00:00:00 2001
From: arretx <32052562+arretx@users.noreply.github.com>
Date: Sat, 28 Oct 2017 16:41:49 -0700
Subject: [PATCH 022/117] Update customizing-devices.markdown (#3816)
When I read this line, I was thinking that ALL THREE were required, otherwise it would fail. I believe the sentiment is that in order to utilize any of the three, they must fall under homeassistant: in order for them to work. Correct?
---
source/_docs/configuration/customizing-devices.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown
index ad9e3b96971..9531f61520d 100644
--- a/source/_docs/configuration/customizing-devices.markdown
+++ b/source/_docs/configuration/customizing-devices.markdown
@@ -13,7 +13,7 @@ redirect_from: /getting-started/customizing-devices/
By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by overriding attributes of specific entities.
-Be careful not to forget to place `customize`, `customize_domain`, and `customize_glob` inside `homeassistant:` or it will fail.
+If you implement `customize`, `customize_domain`, or `customize_glob` you must make sure it is done inside of `homeassistant:` or it will fail.
```yaml
From 34fccb00454027ee3cf0e0cab2a03294a8e2e9e5 Mon Sep 17 00:00:00 2001
From: arretx <32052562+arretx@users.noreply.github.com>
Date: Sat, 28 Oct 2017 16:42:52 -0700
Subject: [PATCH 023/117] Clarification (#3817)
I wasn't sure where the "jon" and "ram" user names were derived from in regards to the OwnTracks setup.
---
source/_components/device_tracker.owntracks.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown
index 5d7ec9b0841..20cf68ab97a 100644
--- a/source/_components/device_tracker.owntracks.markdown
+++ b/source/_components/device_tracker.owntracks.markdown
@@ -30,7 +30,7 @@ Configuration variables:
- **max_gps_accuracy** (*Optional*): Sometimes Owntracks can report GPS location with a very low accuracy (few kilometers). That can trigger false zoning in your Home Assistant installation. With the parameter, you can filter these GPS reports. The number has to be in meter. For example, if you put 200 only GPS report with an accuracy under 200 will be take in account.
- **waypoints** (*Optional*): Owntracks users can define [waypoints](http://owntracks.org/booklet/features/waypoints/) (a.k.a regions) which are similar in spirit to Home Assistant zones. If this configuration variable is `True`, the Owntracks users who are in `waypoint_whitelist` can export waypoints from the device and Home Assistant will import them as zone definitions. Defaults to `True`.
-- **waypoint_whitelist** (*Optional*): A list of user names (as defined for [Owntracks](/components/device_tracker.owntracks/)) who can export their waypoints from Owntracks to Home Assistant. Defaults to all users who are connected to Home Assistant via Owntracks.
+- **waypoint_whitelist** (*Optional*): A list of user names (as defined for [Owntracks](/components/device_tracker.owntracks/)) who can export their waypoints from Owntracks to Home Assistant. This would be the `username` portion of the Base Topic Name, (e.g. owntracks/**username**/iPhone). Defaults to all users who are connected to Home Assistant via Owntracks.
- **secret** (*Optional*): [Payload encryption key](http://owntracks.org/booklet/features/encrypt/). This is usable when communicating with a third-party untrusted server or a public server (where anybody can subscribe to any topic). By default the payload is assumed to be unencrypted (although the communication between Home Assistant and the server might still be encrypted). This feature requires the `libsodium` library to be present.
A full sample configuration for the `owntracks` platform is shown below:
From 1514fd7b121089beea69a306e89e55fefb8f8f21 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Sun, 29 Oct 2017 02:46:32 +0200
Subject: [PATCH 024/117] Update title (#3822)
* Update title
* Remove featured
---
source/_components/apple_tv.markdown | 1 -
source/_components/media_player.apple_tv.markdown | 4 ++--
source/_components/remote.apple_tv.markdown | 3 +--
3 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/source/_components/apple_tv.markdown b/source/_components/apple_tv.markdown
index 56bfd96c8bc..5709958530d 100644
--- a/source/_components/apple_tv.markdown
+++ b/source/_components/apple_tv.markdown
@@ -11,7 +11,6 @@ logo: apple.png
ha_category: Hub
ha_iot_class: "Local Push"
ha_release: 0.49
-featured: true
---
The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation). See the [remote platform](/components/remote.apple_tv/) if you want to send remote control buttons, e.g. arrow keys.
diff --git a/source/_components/media_player.apple_tv.markdown b/source/_components/media_player.apple_tv.markdown
index 3fd91fbe0a3..383afdae981 100644
--- a/source/_components/media_player.apple_tv.markdown
+++ b/source/_components/media_player.apple_tv.markdown
@@ -1,6 +1,6 @@
---
layout: page
-title: "Apple TV"
+title: "Apple TV Media Player"
description: "Instructions how to integrate Apple TV devices into Home Assistant."
date: 2017-02-08 07:11
sidebar: true
@@ -13,4 +13,4 @@ ha_iot_class: "Local Push"
ha_release: 0.38
---
-To setup the `apple_tv` platform, please follow the instructions on the [Apple TV Component page](/components/apple_tv/).
+To setup the `apple_tv` media player platform, please follow the instructions on the [Apple TV Component page](/components/apple_tv/).
diff --git a/source/_components/remote.apple_tv.markdown b/source/_components/remote.apple_tv.markdown
index e1bba9e0659..68e11de80dd 100644
--- a/source/_components/remote.apple_tv.markdown
+++ b/source/_components/remote.apple_tv.markdown
@@ -1,6 +1,6 @@
---
layout: page
-title: "Apple TV"
+title: "Apple TV Remote"
description: "Instructions how to integrate Apple TV remote into Home Assistant."
date: 2017-06-26 20:50
sidebar: true
@@ -38,7 +38,6 @@ data:
- menu
- select
device: ''
-
```
Please note that `device` must be specified (because of validation) but is not used by this platform. So you may specify any value.
From d1e44b311e8a40c2bf3b6084ae3bf59a9be526ac Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Sun, 29 Oct 2017 09:58:46 +0000
Subject: [PATCH 025/117] Added note about Pi power
Given the number of people using Pi as their platform, and then running into issues because they've skimped on the power supply, I'm adding warnings.
---
source/hassio/installation.markdown | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown
index 83a8dee27ec..2211ba4381f 100644
--- a/source/hassio/installation.markdown
+++ b/source/hassio/installation.markdown
@@ -20,6 +20,10 @@ Hass.io images are available for all available Raspberry Pi and Intel NUC platfo
- Optional - Setup the WiFi or static IP: On the SD-card, edit the `system-connections/resin-sample` file and follow the [ResinOS howto][resinos-network].
- Insert SD card to Raspberry Pi and turn it on. On first boot, it downloads the latest version of Home Assistant which takes ~20 minutes (slower/faster depending on the platform).
+
+Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets.
+
+
- You will be able to reach your installation at [http://hassio.local:8123][local].
From 2c9b770de2c6e05a3c89b72b56c79928ee44ffd8 Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Sun, 29 Oct 2017 09:59:49 +0000
Subject: [PATCH 026/117] Adding power supply reminder
---
source/_docs/installation/hassbian/installation.markdown | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/source/_docs/installation/hassbian/installation.markdown b/source/_docs/installation/hassbian/installation.markdown
index 81ce2e02add..3c4acb26e9d 100644
--- a/source/_docs/installation/hassbian/installation.markdown
+++ b/source/_docs/installation/hassbian/installation.markdown
@@ -17,6 +17,10 @@ The easiest way to install Home Assistant on your Raspberry Pi is by using HASSb
3. Ensure your Raspberry Pi has wired access to the internet for the entire process or configure your wireless network settings **before proceeding to step 4**.
4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 5 minutes.
+
+Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets.
+
+
These instructions are also available as a [video](https://www.youtube.com/watch?v=iIz6XqDwHEk). Additional information is available in this [video](https://www.youtube.com/watch?v=tCGlQSsQ-Mc).
After initial boot an installer will run in the background and takes around 15 minutes to complete, after it has finished, you will be prompted to login: `hassbian login:`. Installation is complete at this point. The default username is `pi` and the password is `raspberry`.
From 4d312f3a1043717e3eed902b67a3d21e770b02d4 Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Sun, 29 Oct 2017 10:01:21 +0000
Subject: [PATCH 027/117] Power and Jessie notes
Added warning about using a suitable power supply. Added note about Stretch not being supported yet.
---
source/_docs/installation/raspberry-pi-all-in-one.markdown | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/source/_docs/installation/raspberry-pi-all-in-one.markdown b/source/_docs/installation/raspberry-pi-all-in-one.markdown
index 3d805901a87..485fc64ffdb 100644
--- a/source/_docs/installation/raspberry-pi-all-in-one.markdown
+++ b/source/_docs/installation/raspberry-pi-all-in-one.markdown
@@ -10,7 +10,11 @@ redirect_from: /getting-started/installation-raspberry-pi-all-in-one/
The [Raspberry Pi All-In-One Installer](https://github.com/home-assistant/fabric-home-assistant) deploys a complete Home Assistant server including support for MQTT with websockets, Z-Wave, and the OpenZWave Control Panel.
-The only requirement is that you have a Raspberry Pi with a fresh installation of [Raspbian](https://www.raspberrypi.org/downloads/raspbian/) connected to your network.
+
+Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets.
+
+
+The only requirement is that you have a Raspberry Pi with a fresh installation of [Raspbian](https://www.raspberrypi.org/downloads/raspbian/) Jessie (Stretch is not supported at this time) connected to your network.
Note that as of 2016-11-30 SSH is disabled by default in the official Raspbian images. Adding an empty file called `ssh` to `/boot/` on the FAT32 partition will enable it. More information is on the Raspberry Pi Foundation [Blog](https://www.raspberrypi.org/blog/page/2/?fish#a-security-update-for-raspbian-pixel).
From 2e4ab991bebad46bade3c4b211799ede49667216 Mon Sep 17 00:00:00 2001
From: DubhAd
Date: Sun, 29 Oct 2017 10:03:42 +0000
Subject: [PATCH 028/117] Typo fix
---
source/_includes/asides/docs_navigation.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html
index 78798c0818d..cc64ef04a9f 100644
--- a/source/_includes/asides/docs_navigation.html
+++ b/source/_includes/asides/docs_navigation.html
@@ -98,7 +98,7 @@
{% active_link /docs/z-wave/control-panel/ The Z-Wave control panel %}
{% active_link /docs/z-wave/controllers/ Controllers %}
{% active_link /docs/z-wave/devices/ Devices %} and {% active_link /docs/z-wave/entities/ Entities %}
- {% active_link /docs/z-wave/query-state/ Query Stages %} for devices
+ {% active_link /docs/z-wave/query-stage/ Query Stages %} for devices
{% active_link /docs/z-wave/device-specific/ Device Specific %} configuration
{% active_link /docs/z-wave/events/ Events %} and {% active_link /docs/z-wave/services/ Services %}
From 0fb8f956efefc759f6db7ff79677692c017ae434 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Sun, 29 Oct 2017 11:17:22 +0100
Subject: [PATCH 029/117] Update Clickatell docs (#3823)
* Update Clickatell docs
* Was milestoned for 0.56.3
---
source/_components/notify.clickatell.markdown | 22 +++++++++---------
source/images/supported_brands/clickatell.png | Bin 22491 -> 16811 bytes
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/source/_components/notify.clickatell.markdown b/source/_components/notify.clickatell.markdown
index 52a1a7ba03a..0c274c9a1b7 100644
--- a/source/_components/notify.clickatell.markdown
+++ b/source/_components/notify.clickatell.markdown
@@ -1,6 +1,6 @@
---
layout: page
-title: "Clikatell SMS"
+title: "Clickatell SMS"
description: "Instructions on how to add Clickatell notifications to Home Assistant."
date: 2017-10-09 00:00
sidebar: true
@@ -18,17 +18,17 @@ The `clickatell` platform uses [Clickatell](https://clickatell.com) to deliver S
### Get your Clickatell API Credentials
Go to your [Clickatell SMS Platform Portal](https://portal.clickatell.com/#/) section and create a new SMS integration. There are three screens of information required to creater an integration. Please ensure the following:
-1. Give the new Integration an identification name
-2. ensure it is set for 'production' use
-3. select 'HTTP' as your API type
-4. Ensure that the you select for the messaging type to be 'one way messaging'
-5. Be aware of the international number format option as this impacts the structure of the phone numbers you provide
-6. Once you have completed entering your details an API key is generated. Copy the API key
+1. Give the new Integration an identification name.
+2. Ensure it is set for 'production' use.
+3. Select 'HTTP' as your API type.
+4. Ensure that the you select for the messaging type to be 'one way messaging'.
+5. Be aware of the international number format option as this impacts the structure of the phone numbers you provide.
+6. Once you have completed entering your details an API key is generated. Copy the API key.
-### Configuration
To add Clickatell to your installation, add the following to your Home Assistant `configuration.yaml` file:
```yaml
+# Example configuration.yaml entry
notify:
- platform: clickatell
name: USER_DEFINED_NAME
@@ -38,9 +38,9 @@ notify:
Configuration variables:
-* **name** (Optional): Setting the optional parameter name allows multiple notifiers to be created. The default value is `Clickatell`. The notifier will bind to the service notify.NOTIFIER_NAME.
-* **api_key** (Required): Your `API Key`.
-* **recipient** (Required): Your phone no. This is where you want to send your notification SMS messages. eg: `61444333444`
+* **name** (Optional): Setting the optional parameter name allows multiple notifiers to be created. The default value is `clickatell`. The notifier will bind to the service notify.NOTIFIER_NAME.
+* **api_key** (Required): Your API key.
+* **recipient** (Required): Your phone number. This is where you want to send your notification SMS messages. e.g. `61444333444`.
To use notifications, please see the [getting started with automation page](https://home-assistant.io/getting-started/automation/).
diff --git a/source/images/supported_brands/clickatell.png b/source/images/supported_brands/clickatell.png
index cacd25657674e8c1a058b088175ea4a6eda78a05..6483c877aa05afa690418425cfce1a4128f3641b 100644
GIT binary patch
literal 16811
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
LO}6H(dD#B~^FNr~
literal 22491
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%0ACy{zLY@SzKO3Q{
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
D34k=p
From d70572b51d6f601399f5748c012978d732ea83ab Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Sun, 29 Oct 2017 13:42:47 +0100
Subject: [PATCH 030/117] Demo blog post (#3813)
* Add Demo blog post
* Update title
* Rename blog post
* Update link to image
* Let link point to the upcoming docs
* Some small spelling & grammar fixes
---
source/_posts/2017-10-28-demo.markdown | 106 ++++++++++++++++++
.../demo-platforms.png | Bin 0 -> 55134 bytes
.../2017-10-interactive-demo/demo-random.png | Bin 0 -> 44336 bytes
.../2017-10-interactive-demo/online-demo.png | Bin 0 -> 244385 bytes
4 files changed, 106 insertions(+)
create mode 100644 source/_posts/2017-10-28-demo.markdown
create mode 100644 source/images/blog/2017-10-interactive-demo/demo-platforms.png
create mode 100644 source/images/blog/2017-10-interactive-demo/demo-random.png
create mode 100644 source/images/blog/2017-10-interactive-demo/online-demo.png
diff --git a/source/_posts/2017-10-28-demo.markdown b/source/_posts/2017-10-28-demo.markdown
new file mode 100644
index 00000000000..d6d9d895827
--- /dev/null
+++ b/source/_posts/2017-10-28-demo.markdown
@@ -0,0 +1,106 @@
+---
+layout: post
+title: "Home Assistant Demo"
+description: "Showing a demo of Home Assistant to an audience."
+date: 2017-10-28 10:00:00 +0200
+date_formatted: "October 28, 2017"
+author: Fabian Affolter
+author_twitter: fabaff
+comments: true
+categories: How-To
+og_image: /images/blog/2017-10-interactive-demo/demo-random.png
+---
+
+If you are planning to host a Home Assistant meetup or doing a talk, then you probably want to show Home Assistant to an audience. You could use a Wireless router, bulbs, switches, and a single board computer to do a realistic demo. For a workshop, this is what I usually do because I think that working with physical hardware is more fun for the participants. The issue is that you need time to set up, power and space. For a talk or in a location, where you only have a beamer and a table or a lectern, the physical hardware approach is not very convenient.
+
+The simplest way to show Home Assistant to others is the online demo at [https://home-assistant.io/demo/](https://home-assistant.io/demo/)
+
+
+
+ Home Assistant's online demo
+
+
+
+
+## {% linkable_title `--demo-mode` and Demo platform %}
+To be safe for your talk, you don't want to depend on an internet connection. The demo mode [`--demo-mode`](/docs/tools/hass/) allows you to run a demo locally including the latest features. Make sure that you have a backup of your configuration.
+
+```bash
+$ hass --demo-mode
+```
+
+If you already have a `configuration.yaml` file in place then you will get a combination of your setup with all available [`demo`](/components/demo/) platforms. This can be overwhelming for the audience. The suggestion is that you tailor the demo to your needs by only showing a few selected platforms. For example:
+
+```yaml
+sensor:
+ - platform: demo
+binary_sensor:
+ - platform: demo
+switch:
+ - platform: demo
+```
+
+
+
+ Home Assistant's demo platforms
+
+
+## {% linkable_title `random` platforms %}
+Till now the frontend is static. Nothing is changing over time. Starting with 0.57 we ship a [`random` binary sensor](https://github.com/home-assistant/home-assistant.github.io/blob/next/source/_components/binary_sensor.random.markdown) platform in addition to the already available [`random` sensor](/components/sensor.random/).
+
+By adding those platform to your `configuration.yaml` file, your demo will become more interactive.
+
+```yaml
+sensor:
+ - platform: demo
+ name: Temperature
+ unit_of_measurement: "°C"
+binary_sensor:
+ - platform: random
+ name: Front Door
+ - platform: random
+ name: Back Door
+ scan_interval: 5
+```
+
+
+
+ Demo with `random` platforms
+
+
+The `random` and the `demo` platforms can, of course, be used together. With a little work and some of the [`template`](/components/#search/template) platforms or the [`input_*`](/components/#search/input) components it would even be possible to simulate a complete apartment or a house. For a hint check the sample below:
+
+{% raw %}
+```yaml
+input_boolean:
+ on_off:
+ name: On or off
+binary_sensor:
+ - platform: template
+ sensors:
+ on_tester:
+ value_template: "{{ states.input_boolean.on_off.state == 'on' }}"
+ friendly_name: 'Movement'
+ device_class: motion
+```
+{% endraw %}
+
+## {% linkable_title MQTT Discovery %}
+This is a section for advanced users as it will require to run a separate script. Instead of adding `demo` platforms to the configuration this setup make use of [MQTT discovery](/docs/mqtt/discovery/) and the [embedded MQTT broker](/docs/mqtt/broker/#embedded-broker). Simply add MQTT to your `configuration.yaml` file with `discovery:`
+
+```yaml
+mqtt:
+ discovery: true
+```
+
+Download the [sample script](https://github.com/home-assistant/home-assistant-dev-helper/blob/master/ha-mqtt-demo.py). It depends on [paho-mqtt](https://pypi.python.org/pypi/paho-mqtt). If you run the script inside your [Home Assistant's virtual environment](/docs/installation/virtualenv/) then you are good to go as the dependency should be present if you have used MQTT before. Otherwise, install it with `$ pip3 install paho-mqtt`. The same applies to the embedded broker.
+
+```bash
+(ha)[ha-demo]$ python3 ha-mqtt-demo.py
+Demo is running... -> CTRL + C to shutdown
+```
+
+It will create sensors, a light, and a switch and update the states as long the script is running. It possible to stop and restart script without losing the entities.
+
+Some users share their slides and other documents in [our assets repository](https://github.com/home-assistant/home-assistant-assets). Also, take a look at that repository if you need a logo for your slides.
+
diff --git a/source/images/blog/2017-10-interactive-demo/demo-platforms.png b/source/images/blog/2017-10-interactive-demo/demo-platforms.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb984c8a5f5eef066e680782e4ce89d7f4f9eda2
GIT binary patch
literal 55134
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