Merge branch 'next' of https://github.com/home-assistant/home-assistant.io into next
@ -213,6 +213,11 @@ article.post, article.page, article.listing {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
margin-bottom: 0;
|
||||
line-height: 1.2;
|
||||
}
|
||||
}
|
||||
|
||||
p.note {
|
||||
|
@ -18,12 +18,12 @@ Most binary sensors support the `SENSOR_CLASSES` which let you specify the type
|
||||
- **None**: Generic on/off
|
||||
- **opening**: Door, window, etc
|
||||
- **motion**: Motion sensor
|
||||
- **gas'**: CO, CO2, etc
|
||||
- **smoke'**: Smoke detector
|
||||
- **gas**: CO, CO2, etc
|
||||
- **smoke**: Smoke detector
|
||||
- **moisture**: Specifically a wetness sensor
|
||||
- **light**: Lightness threshold
|
||||
- **power**: Power, over-current, etc
|
||||
- **safety**: Generic on=unsafe, off=safe
|
||||
- **safety**: On means unsafe, Off means safe
|
||||
- **heat**: On means hot (or too hot)
|
||||
- **cold**: On means cold (or too cold)
|
||||
- **moving**: On means moving, Off means stopped
|
||||
|
@ -17,7 +17,7 @@ To enable Template binary sensors in your installation, add the following to you
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
binary_sensor:
|
||||
platform: template
|
||||
- platform: template
|
||||
sensors:
|
||||
sun_up:
|
||||
value_template: {% raw %}'{{ states.sun.sun.attributes.elevation > 0}}'{% endraw %}
|
||||
@ -30,8 +30,7 @@ Configuration variables:
|
||||
- **friendly_name** (*Optional*): Name to use in the Frontend.
|
||||
- **sensor_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend.
|
||||
- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload.
|
||||
- **warnings** (*Optional*): Turn off warnings (useful if the sensor is loaded before devices it depends on).
|
||||
- **entity_id** (*Optional*): Add a list of entity_ids so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update it's state.
|
||||
- **entity_id** (*Optional*): Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update it's state.
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
@ -43,7 +42,7 @@ This example indicates true if a sensor is above a given threshold. Assuming a s
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
platform: template
|
||||
- platform: template
|
||||
sensors:
|
||||
furnace_on:
|
||||
value_template: {% raw %}{{ states.sensor.furnace.state > 2.5 }}{% endraw %}
|
||||
@ -53,11 +52,11 @@ sensor:
|
||||
|
||||
### {% linkable_title Switch as sensor %}
|
||||
|
||||
Some movement sensors and door/window sensors will apear as a switch. By using a template binary sensor, the switch can be displayed as a binary sensors. The original switch can then be hidden by [customizing.](/getting-started/customizing-devices/)
|
||||
Some movement sensors and door/window sensors will appear as a switch. By using a template binary sensor, the switch can be displayed as a binary sensors. The original switch can then be hidden by [customizing.](/getting-started/customizing-devices/)
|
||||
|
||||
```yaml
|
||||
binary_sensor:
|
||||
platform: template
|
||||
- platform: template
|
||||
sensors:
|
||||
movement:
|
||||
value_template: {% raw %}"{{ states.switch.movement.state == 'on' }}"{% endraw %}
|
||||
|
44
source/_components/camera.ffmpeg.markdown
Normal file
@ -0,0 +1,44 @@
|
||||
---
|
||||
layout: page
|
||||
title: "FFmpeg Camera"
|
||||
description: "Instructions how to integrate a Video fees with FFmpeg as cameras within Home Assistant."
|
||||
date: 2016-08-13 08:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: ffmpeg.png
|
||||
ha_category: Camera
|
||||
ha_release: 0.26
|
||||
---
|
||||
|
||||
|
||||
The `ffmpeg` platform allows you to use every video feed with [FFmpeg](http://www.ffmpeg.org/) as camera in Home Assistant.
|
||||
|
||||
<p class='note'>
|
||||
You need a ffmpeg binary in your system path. On debain 8 you can install it from backports. If you want HW support on raspberry you need self build from source. Windows binary are avilable on ffmpeg homepage.
|
||||
</p>
|
||||
|
||||
To enable your FFmpeg feed in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
camera:
|
||||
- platform: ffmpeg
|
||||
input: FFMPEG_SUPPORTED_INPUT
|
||||
name: FFmpeg
|
||||
ffmpeg_bin: /usr/bin/ffmpeg
|
||||
extra_arguments: -q:v 2
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **input** (*Required*): A ffmpeg compatible input file, stream or feet.
|
||||
- **name** (*Optional*): This parameter allows you to override the name of your camera.
|
||||
- **ffmpeg_bin** (*Optional*): Default 'ffmpeg'.
|
||||
- **extra_arguments** (*Optional*): Extra option they will pass to ffmpeg. i.e. image quality or video filter options.
|
||||
|
||||
### {% linkable_title Image quality %}
|
||||
|
||||
You can control the `image quality` with [`extra_arguments`](https://www.ffmpeg.org/ffmpeg-codecs.html#jpeg2000) `-q:v 2-32` or with lossless option `-pred 1`.
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Bluetooth Tracker"
|
||||
description: "Instructions how to integrate bluetooth tracking within Home Assistant."
|
||||
description: "Instructions for integrating bluetooth tracking within Home Assistant."
|
||||
date: 2016-04-10 17:24
|
||||
sidebar: true
|
||||
comments: false
|
||||
@ -13,11 +13,11 @@ ha_iot_class: "Local Poll"
|
||||
ha_release: 0.18
|
||||
---
|
||||
|
||||
This tracker discovers new devices on boot and tracks bluetooth devices periodically based on interval_seconds value. It is not requiered to pair the devices with eachother!
|
||||
Devices discovered are stored with 'bt_' as the prefix for device mac address in `known_devices.yaml`.
|
||||
This tracker discovers new devices on boot and tracks bluetooth devices periodically based on interval_seconds value. It is not required to pair the devices with each other!
|
||||
Devices discovered are stored with 'bt_' as the prefix for device mac addresses in `known_devices.yaml`.
|
||||
|
||||
<p class='note'>
|
||||
Requires PyBluez. If you are on raspbian, make sure you first install `bluetooth` and `libbluetooth-dev` by running `sudo apt install bluetooth libbluetooth-dev`
|
||||
Requires PyBluez. If you are on Raspbian, make sure you first install `bluetooth` and `libbluetooth-dev` by running `sudo apt install bluetooth libbluetooth-dev`
|
||||
</p>
|
||||
|
||||
To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file:
|
||||
|
@ -10,7 +10,7 @@ footer: true
|
||||
logo: homematic.png
|
||||
ha_category: Hub
|
||||
ha_iot_class: "Local Push"
|
||||
featured: true
|
||||
featured: false
|
||||
---
|
||||
|
||||
|
||||
|
@ -25,8 +25,8 @@ http:
|
||||
ssl_certificate: /etc/letsencrypt/live/hass.example.com/fullchain.pem
|
||||
ssl_key: /etc/letsencrypt/live/hass.example.com/privkey.pem
|
||||
cors_allowed_origins:
|
||||
- google.com
|
||||
- home-assistant.io
|
||||
- https://google.com
|
||||
- https://home-assistant.io
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
@ -37,7 +37,7 @@ Configuration variables:
|
||||
- **development** (*Optional*): Disable caching and load unvulcanized assets. Useful for Frontend development.
|
||||
- **ssl_certificate** (*Optional*): Path to your TLS/SSL certificate to serve Home Assistant over a secure connection.
|
||||
- **ssl_key** (*Optional*): Path to your TLS/SSL key to serve Home Assistant over a secure connection.
|
||||
- **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`.
|
||||
- **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://home-assistant.io` will allow requests from `https://home-assistant.io` but __not__ `http://home-assistant.io`.
|
||||
|
||||
|
||||
The [Set up encryption using Let's Encrypt](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) blog post gives you details about the encryption of your traffic using free certificates from [Let's Encrypt](https://letsencrypt.org/).
|
||||
|
@ -9,7 +9,7 @@ sharing: true
|
||||
footer: true
|
||||
ha_category: Light
|
||||
ha_iot_class: "Local Polling"
|
||||
featured: true
|
||||
featured: false
|
||||
ha_release: 0.25
|
||||
---
|
||||
|
||||
|
@ -36,7 +36,7 @@ Turns one light on or multiple lights on using [groups]({{site_root}}/components
|
||||
| `transition` | yes | Integer that represents the time the light should take to transition to the new state in seconds. *not supported by Wink
|
||||
| `profile` | yes | String with the name of one of the built-in profiles (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define a xy color and a brightness. If a profile is given and a brightness or xy color then the profile values will be overwritten.
|
||||
| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma seperated floats that represent the color in XY.
|
||||
| `rgb_color` | yes | A list containing three integers representing the xy color you want the light to be. Three comma seperated integers that represent the color in RGB
|
||||
| `rgb_color` | yes | A list containing three integers representing the rgb color you want the light to be. Three comma seperated integers that represent the color in RGB
|
||||
| `color_temp` | yes | An INT in mireds representing the color temperature you want the light to be.
|
||||
| `color_name` | yes | A human readable string of a color name, such as `blue` or `goldenrod` or [`chucknorris`](http://stackoverflow.com/questions/8318911/why-does-html-think-chucknorris-is-a-color). If your browser can display it, so can Home Assistant.
|
||||
| `brightness` | yes | Integer between 0 and 255 for how bright the color should be.
|
||||
|
@ -10,6 +10,7 @@ footer: true
|
||||
logo: mqtt.png
|
||||
ha_category: Light
|
||||
ha_iot_class: "Local Push"
|
||||
ha_release: 0.26
|
||||
---
|
||||
|
||||
|
||||
|
@ -27,7 +27,7 @@ Steps to configure your Amazon Fire TV stick with Home Assistant:
|
||||
- From the main (Launcher) screen, select Settings.
|
||||
- Select System > About > Network.
|
||||
- `pip install firetv[firetv-server]` into a Python 2.x environment
|
||||
- If installed on Debian Jessie then the libssl-dev package is needed. Install it with `apt-get install libssl-dev`
|
||||
- If installed on Debian Jessie then the libssl-dev and python-dev packages are needed. Install them with `apt-get install libssl-dev python-dev`
|
||||
- `firetv-server -d <fire tv device IP>:5555`, background the process
|
||||
- Configure Home Assistant as follows:
|
||||
|
||||
|
@ -9,7 +9,7 @@ sharing: true
|
||||
footer: true
|
||||
logo: mpchc.png
|
||||
ha_category: Media Player
|
||||
featured: true
|
||||
featured: false
|
||||
ha_release: 0.25.0
|
||||
---
|
||||
|
||||
|
@ -47,3 +47,12 @@ In case [discovery](/components/discovery/) does not work (GDM disabled or non-l
|
||||
- **TOKEN** (*Optional*): Only if authentication is required. Set to `null` (without quotes) otherwise.
|
||||
|
||||
At this moment, the Plex platform only supports one Plex Media Server.
|
||||
|
||||
It is possible to get errors that look like the following.
|
||||
|
||||
```
|
||||
ERROR:plexapi:http://192.168.1.10:32400: ('Connection aborted.', BadStatusLine("''",))
|
||||
INFO:homeassistant.components.media_player.plex:No server found at: http://192.168.1.10:32400
|
||||
```
|
||||
|
||||
If this occurs, try changing the setting `Secure connections` in your Plex Media Server to `Preferred` (instead of `Required`). The Plex component does not currently support HTTPS.
|
||||
|
@ -24,7 +24,32 @@ thermostat:
|
||||
platform: nest
|
||||
```
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry to show only devices at your vacation home
|
||||
nest:
|
||||
username: USERNAME
|
||||
password: PASSWORD
|
||||
structure: Vacation
|
||||
|
||||
thermostat:
|
||||
platform: nest
|
||||
```
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry to show only devices at your vacation and primary homes
|
||||
nest:
|
||||
username: USERNAME
|
||||
password: PASSWORD
|
||||
structure:
|
||||
- Vacation
|
||||
- Primary
|
||||
|
||||
thermostat:
|
||||
platform: nest
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **username** (*Required*): Your Nest username.
|
||||
- **password** (*Required*): Your Nest password.
|
||||
- **structure** (*Optional*): The structure or structures you would like to include devices from. If not specified, this will include all structures in your Nest account.
|
@ -20,16 +20,7 @@ The requirements are:
|
||||
- You need a [Telegram bot](https://core.telegram.org/bots). Please follow those [instructions](https://core.telegram.org/bots#botfather) to create one and get the token for your bot. Keep in mind that bots are not allowed to contact users. You need to make the first contact with your user. Meaning that you need to send a message to the bot from your user.
|
||||
- The `chat_id` of an user.
|
||||
|
||||
An easy way to get your chat ID is described below:
|
||||
|
||||
```python
|
||||
import telegram
|
||||
bot = telegram.Bot(token='YOUR_API_TOKEN')
|
||||
chat_id = bot.getUpdates()[-1].message.chat_id
|
||||
print(chat_id)
|
||||
```
|
||||
|
||||
Another way to retrieve your `chat_id` is visiting [https://api.telegram.org/botYOUR_API_TOKEN/getUpdates](https://api.telegram.org/botYOUR_API_TOKEN/getUpdates).
|
||||
The quickest way to retrieve your `chat_id` is visiting [https://api.telegram.org/botYOUR_API_TOKEN/getUpdates](https://api.telegram.org/botYOUR_API_TOKEN/getUpdates).
|
||||
|
||||
The result set will include your chat ID as `id` in the `from` section:
|
||||
|
||||
@ -47,6 +38,16 @@ The result set will include your chat ID as `id` in the `from` section:
|
||||
...
|
||||
```
|
||||
|
||||
Another way to get your chat ID directly is described below:
|
||||
|
||||
```python
|
||||
import telegram
|
||||
bot = telegram.Bot(token='YOUR_API_TOKEN')
|
||||
chat_id = bot.getUpdates()[-1].message.chat_id
|
||||
print(chat_id)
|
||||
123456789
|
||||
```
|
||||
|
||||
To enable Telegram notifications in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
|
@ -28,3 +28,5 @@ Configuration variables:
|
||||
|
||||
- **api_key** (*Required*): The retrieved api key.
|
||||
- **host** (*Required*): The octoprint host.
|
||||
|
||||
**NOTE** If your 3D printer isn't connected to the OctoPrint server during the startup of Home Assistant this component will fail to load.
|
||||
|
@ -15,6 +15,8 @@ ha_release: 0.25
|
||||
|
||||
The `panel_iframe` support allows you to add additional panels to your Home Assistant frontend. The panels are listed in the sidebar and can contain external resources like the web frontend of your router, your monitoring system, or your media server.
|
||||
|
||||
<p class='note warning'>If you are accessing home Assistant over HTTPS using SSL, you cannot access HTTP sites through an iframe panel.</p>
|
||||
|
||||
To enable Panel iFrames in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
|
52
source/_components/pilight.markdown
Normal file
@ -0,0 +1,52 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Pilight"
|
||||
description: "Instructions how to setup Pilight within Home Assistant."
|
||||
date: 2015-08-07 18:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: pilight.png
|
||||
ha_category: Hub
|
||||
ha_release: 0.26
|
||||
ha_iot_class: Local Push
|
||||
---
|
||||
|
||||
[Pilight](https://www.pilight.org/) is a modular and open source solution to communicate with 433 MHz devices and runs on various small form factor computers. A lot of common [protocols](https://wiki.pilight.org/doku.php/protocols) are already available.
|
||||
|
||||
This pilight hub connects to the [pilight-daemon](https://wiki.pilight.org/doku.php/pdaemon) via a socket connection to receive and send codes. Thus home assistant does not have to run on the computer in charge of the RF communication.
|
||||
|
||||
The received and supported RF codes are put on the event bus of home assistant and are therefore directly usable by other components (e.g. automation). Additionally a send service is provided to send RF codes.
|
||||
|
||||
To integrate pilight into Home Assistant, add the following section to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
pilight:
|
||||
- host: 127.0.0.1
|
||||
port: 5000
|
||||
whitelist: # optional
|
||||
protocol:
|
||||
- daycom
|
||||
- intertechno
|
||||
id:
|
||||
- 42
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **host** (*Required*): The IP address of the computer running the pilight-daemon, e.g. 192.168.1.32.
|
||||
- **port** (*Required*): The network port to connect to. The usual port is [5000](https://www.pilight.org/development/api/).
|
||||
- **whitelist** (*Optional*): You can define a whitelist to prevent that too many unwanted RF codes (e.g. the neighbours weather station) are put on your HA event bus. All defined subsections have to be matched. A subsection is matched if one of the items are true.
|
||||
|
||||
In this example only received RF codes using a daycom or intertechno protocol are put on the event bus and only when the device id is 42. For more possible settings please look at the receiver section of the pilight [API](https://www.pilight.org/development/api/).
|
||||
|
||||
## {% linkable_title Troubleshooting %}
|
||||
|
||||
- A list of tested RF transceiver hardware is available [here](https://wiki.pilight.org/doku.php/electronics). This might be usefull before buying.
|
||||
- Sending commands is simple when the protocol is known by pilight, but receiving commands can be rather difficult. It can happend that the code is not correctly recognized due to different timings in the sending hardware or the RF receiver. If this happens follow these steps:
|
||||
|
||||
1. [Install](https://www.pilight.org/get-started/installation/) pilight from source (do not worry that is very easy) and only activate the protocols you are expecting in the pop up menu. This reduces false positives.
|
||||
2. Check the real timings of your device + RF receiver by running `pilight-debug`. Remember the `pulslen` parameter.
|
||||
3. Go to the `libs/pilight/protocols/433.92` subfolder of the pilight source code and open the .c file of your protocol. Search for `MIN_PULSE_LENGTH`, `MAX_PULSE_LENGTH ` and `AVG_PULSE_LENGTH`. Change the pulse lengths to match your measured one. Recompile and install pilight by re-running `$ sudo ./setup.sh`.
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Vera Sensor"
|
||||
description: "Instructions how to integrate Vera sensors into Home Assistant."
|
||||
title: "Envisalink Sensor"
|
||||
description: "Instructions how to integrate Envisalink sensors into Home Assistant."
|
||||
date: 2016-07-01 10:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
|
46
source/_components/sensor.fastdotcom.markdown
Normal file
@ -0,0 +1,46 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Fast.com"
|
||||
description: "How to integrate Fast.com within Home Assistant."
|
||||
date: 2016-08-10 17:30
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: fastdotcom.png
|
||||
ha_category: Sensor
|
||||
featured: false
|
||||
ha_release: 0.26
|
||||
---
|
||||
|
||||
The `fastdotcom` sensor component uses the [Fast.com](https://fast.com/) web service to measure network bandwidth performance.
|
||||
|
||||
By default, it will run every hour. The user can change the update frequency in the config by defining the minute, hour, and day for a speedtest to run.
|
||||
|
||||
To add a Fast.com sensor to your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
Once per hour, on the hour (default):
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
platform: fastdotcom
|
||||
```
|
||||
|
||||
More examples:
|
||||
|
||||
Every half hour of every day:
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
platform: fastdotcom
|
||||
minute:
|
||||
- 0
|
||||
- 30
|
||||
```
|
||||
Configuration variables:
|
||||
|
||||
- **minute** (*Optional*): Specify the minute(s) of the hour to schedule the speedtest. Use a list for multiple entries. Default is 0.
|
||||
- **hour** (*Optional*): Specify the hour(s) of the day to schedule the speedtest. Use a list for multiple entries. Default is None.
|
||||
- **day** (*Optional*): Specify the day(s) of the month to schedule the speedtest. Use a list for multiple entries. Default is None.
|
||||
|
||||
There is also a service named `sensor.update_fastdotcom` that you can use to run a fast.com speedtest on demand.
|
58
source/_components/sensor.gpsd.markdown
Normal file
@ -0,0 +1,58 @@
|
||||
---
|
||||
layout: page
|
||||
title: "GPSD"
|
||||
description: "Instructions how to integrate GPSD into Home Assistant."
|
||||
date: 2016-07-18 07:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: gpsd.png
|
||||
ha_category: Sensor
|
||||
ha_release: 0.26
|
||||
---
|
||||
|
||||
The `gpsd` component is using the GPS information collected by [gpsd](http://catb.org/gpsd/) and a GPS receiver.
|
||||
|
||||
A requirement is that `gpsd` is installed (`$ sudo dnf -y install gpsd` or `$ sudo apt-get install gpsd`). `gpsd` uses the socket activation feature of systemd on recent Linux distributions for USB receivers. This means that if you plug your GPS receiver in, `gpsd` is started. Other GPS device may work too, but this was not tested.
|
||||
|
||||
```bash
|
||||
$ sudo systemctl status gpsdctl@ttyUSB0.service
|
||||
● gpsdctl@ttyUSB0.service - Manage ttyUSB0 for GPS daemon
|
||||
Loaded: loaded (/usr/lib/systemd/system/gpsdctl@.service; static; vendor preset: disabled)
|
||||
Active: active (exited) since Sat 2016-07-16 09:30:33 CEST; 1 day 23h ago
|
||||
Process: 5303 ExecStart=/bin/sh -c [ "$USBAUTO" = true ] && /usr/sbin/gpsdctl add /dev/%I || : (code=exited, status=0/SUCCESS)
|
||||
Main PID: 5303 (code=exited, status=0/SUCCESS)
|
||||
|
||||
Jul 16 09:30:33 laptop019 systemd[1]: Starting Manage ttyUSB0 for GPS daemon...
|
||||
Jul 16 09:30:33 laptop019 gpsdctl[5305]: gpsd_control(action=add, arg=/dev/ttyUSB0)
|
||||
Jul 16 09:30:33 laptop019 gpsdctl[5305]: reached a running gpsd
|
||||
```
|
||||
|
||||
To check if your setup is working, connect to port 2947 on the host where `gpsd` is running with `telnet`. This may need adjustments to your firewall.
|
||||
|
||||
```bash
|
||||
|
||||
$ telnet localhost 2947
|
||||
Trying 127.0.0.1...
|
||||
Connected to localhost.
|
||||
Escape character is '^]'.
|
||||
{"class":"VERSION","release":"3.15","rev":"3.15-2.fc23","proto_major":3,"proto_minor":11}
|
||||
```
|
||||
|
||||
To setup a GPSD sensor in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
senosr:
|
||||
- platform: gpsd
|
||||
host: 127.0.0.1
|
||||
port: 2947
|
||||
name: GPS USB
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **host** (*Optional*): The host where GPSD is running. Defaults to `localhost`.
|
||||
- **port** (*Optional*): The port which GPSD is using. Defaults to 2947.
|
||||
- **port** (*Optional*): Friendly name to use for the frontend. Default to GPS.
|
@ -61,3 +61,33 @@ sensor:
|
||||
value_template: {% raw %}'{{ value_json.batt }}'{% endraw %}
|
||||
```
|
||||
|
||||
### {% linkable_title Get temperature and humidity %}
|
||||
|
||||
If you are using a DHT sensor and a NodeMCU board (esp8266), you can retrieve temperature and humidity with a MQTT sensor. A code example can be found [here](https://github.com/mertenats/open-home-automation/tree/master/ha_mqtt_sensor_dht22). A regular MQTT message from this example looks like this:
|
||||
|
||||
```
|
||||
office/sensor1
|
||||
{
|
||||
"temperature": 23.20,
|
||||
"humidity": 43.70
|
||||
}
|
||||
```
|
||||
|
||||
Then use this configuration example to extract the data from the payload:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yml entry
|
||||
sensor 1:
|
||||
platform: mqtt
|
||||
state_topic: 'office/sensor1'
|
||||
name: 'Temperature'
|
||||
unit_of_measurement: '°C'
|
||||
value_template: '{{ value_json.temperature }}'
|
||||
|
||||
sensor 2:
|
||||
platform: mqtt
|
||||
state_topic: 'office/sensor1'
|
||||
name: 'Humidity'
|
||||
unit_of_measurement: '%'
|
||||
value_template: '{{ value_json.humidity }}'
|
||||
```
|
||||
|
@ -8,6 +8,7 @@ comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
ha_category: Sensor
|
||||
logo: nzbget.png
|
||||
ha_iot_class: "Local Polling"
|
||||
ha_release: 0.17
|
||||
---
|
||||
|
@ -23,15 +23,16 @@ To enable this sensor, add the following lines to your `configuration.yaml` file
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
platform: openexchangerates
|
||||
api_key: your_api_key
|
||||
base: USD #optional
|
||||
- platform: openexchangerates
|
||||
api_key: YOUR_API_KEY
|
||||
base: USD
|
||||
quote: EUR
|
||||
name: USDEUR #optional
|
||||
name: USDEUR
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **api_key** (*Required*): API Key for [Open Exchange Rates](https://openexchangerates.org).
|
||||
- **name** (*Optional*): Name to use in the frontend.
|
||||
- **base** (*Optional*): The symbol of the base currency. Defaults to USD
|
||||
- **quote** (*Required*): The symbol of the quote or target currency.
|
||||
|
@ -50,7 +50,7 @@ Configuration variables:
|
||||
- **rain**: The rain volume.
|
||||
- **snow**: The snow volume
|
||||
|
||||
Details about the API are available in the [OpenWeatherMap documentation](http://bugs.openweathermap.org/projects/api/wiki).
|
||||
Details about the API are available in the [OpenWeatherMap documentation](http://openweathermap.org/api).
|
||||
|
||||
Only metric measurements are supported at the moment.
|
||||
|
||||
|
@ -1,35 +0,0 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Particulate matter Sensor"
|
||||
description: "Instructions how to integrate Particulate matter (PM) sensors within Home Assistant."
|
||||
date: 2015-08-09 12:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: mqtt.png
|
||||
ha_category: Sensor
|
||||
ha_release: 0.26
|
||||
ha_iot_class: "Local Push"
|
||||
---
|
||||
|
||||
|
||||
The `serial_pm` sensor platform allows you to use your Particulate matter (PM) sensors with Home Assistant.
|
||||
|
||||
To use your PM sensor in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yml entry
|
||||
sensor:
|
||||
platform: serial_pm
|
||||
serial_device: /dev/tty.SLAB_USBtoUART
|
||||
name: Nova
|
||||
brand: novafitness
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **serial_device** (*Required*): The port where the sensor is connected.
|
||||
- **name** (*Optional*): The name of the sensor.
|
||||
- **brand** (*Required*): The type or brand of the sensor.
|
||||
|
42
source/_components/sensor.serial_pm.markdown
Normal file
@ -0,0 +1,42 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Particulate matter Sensor"
|
||||
description: "Instructions on how to integrate particulate matter (dust) sensors with Home Assistant."
|
||||
date: 2016-08-11 12:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
ha_category: DIY
|
||||
ha_release: 0.26
|
||||
---
|
||||
|
||||
Particulate matter sensors measure the amount of very small particles in the air. A short introduction how these sensors work can be found on [Open Home Automation](https://www.open-homeautomation.com/2016/07/19/measuring-air-quality/).
|
||||
|
||||
Cheap LED based sensors usually use a GPIO interface that is hard to attach to computers. However, there are a lot of laser LED based sensors on the market that use a serial interface and can be [connected to your Home Assistant system easily with an USB to serial converter](https://www.open-homeautomation.com/2016/07/20/connecting-an-particulate-matter-sensor-to-your-pc-or-mac/).
|
||||
|
||||
At this time, the following sensors are supported:
|
||||
|
||||
* oneair,s3
|
||||
* novafitness,sds021
|
||||
* novafitness,sds011
|
||||
* plantower,pms1003
|
||||
* plantower,pms5003
|
||||
* plantower,pms7003
|
||||
* plantower,pms2003
|
||||
* plantower,pms3003
|
||||
|
||||
To use your PM sensor in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: serial_pm
|
||||
serial_device: /dev/tty.SLAB_USBtoUART
|
||||
name: Nova
|
||||
brand: novafitness,sds011
|
||||
```
|
||||
|
||||
- **serial_device** (*Required*): The serial port to use. On *nix systems, it can often be identified by `$ ls /dev/tty*`
|
||||
- **name** (*Optional*): The name displayed in the frontend.
|
||||
- **brand** (*Required*): Manufacturer and type of the sensor.
|
||||
|
@ -9,6 +9,7 @@ sharing: true
|
||||
footer: true
|
||||
ha_category: Sensor
|
||||
ha_release: pre 0.7
|
||||
ha_iot_class: "Local Push"
|
||||
---
|
||||
|
||||
The `systemmonitor` sensor platform to allow you to monitor disk usage, memory usage, CPU usage, and running processes. This platform has superseded the process component which is now considered deprecated.
|
||||
@ -18,7 +19,7 @@ To add this platform to your installation, add the following to your `configurat
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
platform: systemmonitor
|
||||
- platform: systemmonitor
|
||||
resources:
|
||||
- type: disk_use_percent
|
||||
arg: /home
|
||||
@ -34,7 +35,7 @@ Configuration variables:
|
||||
|
||||
The table contains types and their argument to use in your `configuration.yaml` file.
|
||||
|
||||
| Type (`- type:`) | Argument (`arg:`) |
|
||||
| Type (`type:`) | Argument (`arg:`) |
|
||||
| :------------------ |:-------------------------|
|
||||
| disk_use_percent | Path, eg. `/` |
|
||||
| disk_use | Path, eg. `/` |
|
||||
|
@ -18,7 +18,7 @@ To enable Template sensors in your installation, add the following to your `conf
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
platform: template
|
||||
- platform: template
|
||||
sensors:
|
||||
solar_angle:
|
||||
value_template: {% raw %}'{{ states.sun.sun.attributes.elevation }}'{% endraw %}
|
||||
@ -34,8 +34,7 @@ Configuration variables:
|
||||
- **friendly_name** (*Optional*): Name to use in the Frontend.
|
||||
- **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any.
|
||||
- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload.
|
||||
- **warnings** (*Optional*): Turn off warnings (useful if the sensor is loaded before devices it depends on).
|
||||
- **entity_id** (*Optional*): Add a list of entity_ids so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update it's state.
|
||||
- **entity_id** (*Optional*): Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update it's state.
|
||||
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
@ -48,7 +47,7 @@ This example shows the sun angle in the frontend.
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
platform: template
|
||||
- platform: template
|
||||
sensors:
|
||||
solar_angle:
|
||||
value_template: {% raw %}'{{ "%+.1f"|format(states.sun.sun.attributes.elevation) }}'{% endraw %}
|
||||
@ -62,7 +61,7 @@ If you don't like the wording of a sensor output then the template sensor can he
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
platform: template
|
||||
- platform: template
|
||||
sensors:
|
||||
sun_state:
|
||||
value_template: {% raw %}'{% if is_state("sun.sun", "above_horizon") %}up{% else %}down{% endif %}'{% endraw %}
|
||||
@ -73,7 +72,7 @@ Processes monitored by the [System Monitor sensor](/components/sensor.systemmoni
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
platform: template
|
||||
- platform: template
|
||||
sensors:
|
||||
glances:
|
||||
value_template: {% raw %}'{% if is_state("sensor.process_glances", "off") %}not running{% else %}running{% endif %}'{% endraw %}
|
||||
@ -88,13 +87,13 @@ value_template: {% raw %}"{%if states.sensor.ENTITY_ID.state == 'on' %}running{%
|
||||
|
||||
The [Binary template sensor](/components/binary_sensor.template/) is the one in similar cases if you prefer to see an icon instead of text.
|
||||
|
||||
### {% linkable_title Multiline example with an if test (and warnings disabled) %}
|
||||
### {% linkable_title Multiline example with an if test %}
|
||||
|
||||
This example shows a multiple line template with and if test. It looks at a sensing switch and shows on/off in the frontend. It disables warnings to avoid log messages where the switch it depends on isn't loaded yet.
|
||||
This example shows a multiple line template with and if test. It looks at a sensing switch and shows on/off in the frontend.
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
platform: template
|
||||
- platform: template
|
||||
sensors:
|
||||
kettle:
|
||||
friendly_name: 'Kettle'
|
||||
@ -109,10 +108,13 @@ sensor:
|
||||
failed
|
||||
{%- endif %}{% endraw %}
|
||||
|
||||
warnings: Off
|
||||
next_sensor:
|
||||
[...]
|
||||
```
|
||||
|
||||
(please note the blank line to close the multi-line template)
|
||||
<p class='note'>
|
||||
Please note the blank line to close the multi-line template.
|
||||
</p>
|
||||
|
||||
### {% linkable_title Change the unit of measurment %}
|
||||
|
||||
@ -120,7 +122,7 @@ With a template sensor it's easy to convert given values into others if the unit
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
platform: template
|
||||
- platform: template
|
||||
sensors:
|
||||
transmission_down_speed_kbps:
|
||||
value_template: {% raw %}'{{ states.sensor.transmission_down_speed.state | multiply(1024) }}'{% endraw %}
|
||||
|
@ -11,30 +11,45 @@ logo: zigbee.png
|
||||
ha_category: Sensor
|
||||
---
|
||||
|
||||
There are two types of ZigBee sensor available to Home Assistant:
|
||||
There are two types of [ZigBee](http://www.zigbee.org/) sensor available to Home Assistant:
|
||||
|
||||
- [Analog input pin](#analog-input-pin)
|
||||
- [Temperature sensor](#temperature-sensor) (XBee Pro)
|
||||
|
||||
## {% linkable_title Analog Input Pin %}
|
||||
To configure an analog input pin sensor, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- platform: zigbee
|
||||
name: My Analog ZigBee Input
|
||||
type: analog
|
||||
pin: 0
|
||||
address: 0013A2004233D138
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **name** (*Required*): The name you would like to give the sensor in Home Assistant.
|
||||
- **type** (*Required*): Set to `analog` or `temperature`.
|
||||
- **pin** (*Required*): The number identifying which pin to sample
|
||||
- **address** (*Optional*): The long 64 bit address of the remote ZigBee device whose pin you would like to sample. Do not include this variable if you want to sample the local ZigBee device's pins.
|
||||
- **max_volts** (*Optional*): The maximum voltage which the input pin is able to read. Defaults to `1.2`
|
||||
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
### {% linkable_title Analog Input Pin %}
|
||||
|
||||
The analog input pins on an XBee (non-Pro) will read 0V to 1.2 V. This is translated by the [xbee-helper](https://github.com/flyte/xbee-helper) library into a percentage. The maximum voltage your ZigBee device will read is configurable using the `max_volts` configuration variable.
|
||||
|
||||
To configure an analog input pin sensor, use the following variables:
|
||||
|
||||
- **name** (*Required*): The name you'd like to give the sensor in Home Assistant.
|
||||
- **platform** (*Required*): Set to `zigbee`.
|
||||
- **type** (*Required*): Set to `analog`.
|
||||
- **pin** (*Required*): The number identifying which pin to sample.
|
||||
- **address**: The long 64bit address of the remote ZigBee device whose analog input pin you'd like to sample. Do not include this variable if you want to sample the local ZigBee device's pins.
|
||||
- **max_volts**: The maximum voltage which the analog input pin is able to read. Default: `1.2`
|
||||
|
||||
#### Example
|
||||
To configure an analog input pin sensor, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
## Example configuration.yaml entry
|
||||
sensor:
|
||||
- name: My Analog Input
|
||||
platform: zigbee
|
||||
- platform: zigbee
|
||||
name: My Analog ZigBee Input
|
||||
type: analog
|
||||
pin: 0
|
||||
address: 0013A2004233D138
|
||||
@ -44,19 +59,16 @@ See the [Digi knowledge base](http://knowledge.digi.com/articles/Knowledge_Base_
|
||||
|
||||
## {% linkable_title Temperature Sensor %}
|
||||
|
||||
The XBee Pro (and perhaps other third party modules) contains a thermometer device which can be read by using the `TP` AT command. To set this up as a temperature sensor device in Home Assistant use the following config variables:
|
||||
The XBee Pro (and perhaps other third party modules) contains a thermometer device which can be read by using the `TP` AT command.
|
||||
|
||||
- **name** (*Required*): The name you'd like to give the temperature sensor in Home Assistant
|
||||
- **platform** (*Required*): Set to `zigbee`
|
||||
- **type** (*Required*): Set to `temperature`
|
||||
- **address**: The long 64bit address of the remote ZigBee device whose temperature sensor you'd like to sample. Do not include this variable if you want to sample the local ZigBee device's temperature.
|
||||
|
||||
#### Example
|
||||
To configure a temperature sensor device, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- name: Living Room Temperature
|
||||
platform: zigbee
|
||||
- platform: zigbee
|
||||
name: Living Room Temperature ZigBee
|
||||
type: temperature
|
||||
address: 0013A20050E752C5
|
||||
```
|
||||
|
||||
|
@ -19,7 +19,7 @@ During the day (in between `start time` and `sunset time`), it will fade the lig
|
||||
|
||||
If you don't wish to have flux update on 30 second intervals, you can leave the switch turned off and use automation rules that call the service `switch.flux_update` whenever you want the lights updated.
|
||||
|
||||
To use your TPLink switch in your installation, add the following to your `configuration.yaml` file:
|
||||
To use the Flux switch in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
|
63
source/_components/switch.pilight.markdown
Normal file
@ -0,0 +1,63 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Pilight Switch"
|
||||
description: "Instructions how to have switches using 433 MHz connected to a computer running pilight."
|
||||
date: 2015-06-10 22:41
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: pilight.png
|
||||
ha_category: Switch
|
||||
ha_release: pre 0.7
|
||||
---
|
||||
|
||||
|
||||
A switch platform that issues 433 MHz commands using [pilight](https://www.pilight.org/) to turn a 433 MHz device on or off. The pilight HA hub has to be set up.
|
||||
|
||||
Additionally RF commands can be defined that trigger this switch to turn on and off. This allows you to also use the remote shipped with your 433 MHz switch without mixing up the HA states. You can even define several on/off commands, thus several RF remotes to toggle this switch.
|
||||
|
||||
To be really sure that HA knows the actual state of your device it is recommended to use the RF remote with codes unknown to any of your 433 MHz devices. Thus you use the remote to trigger this switch to send the correct RF code to the device.
|
||||
|
||||
To define a pilight switch, add the following lines to your `configuration.yaml`:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
switch:
|
||||
platform: pilight
|
||||
switches:
|
||||
Bed light:
|
||||
on_code:
|
||||
protocol: intertechno_old # protocol has to be defined
|
||||
unit: 3 # these entries are protocol specific and can differ
|
||||
id: 4 # these entries are protocol specific and can differ
|
||||
'on': 1 # on has to be in apostrophes to be parsed correctly
|
||||
off_code:
|
||||
protocol: intertechno_old # protocol has to be defined
|
||||
unit: 3 # these entries are protocol specific and can differ
|
||||
id: 4 # these entries are protocol specific and can differ
|
||||
'off': 1 # off has to be in apostrophes to be parsed correctly
|
||||
on_code_receive: # optional
|
||||
protocol: daycom # protocol has to be defined
|
||||
systemcode: 14462 # these entries are protocol specific and can differ
|
||||
unit: 6 # these entries are protocol specific and can differ
|
||||
id: 34 # these entries are protocol specific and can differ
|
||||
state: 'on' # off has to be in apostrophes to be parsed correctly
|
||||
off_code_receive: # optional
|
||||
protocol: daycom # protocol has to be defined
|
||||
systemcode: 14462 # these entries are protocol specific and can differ
|
||||
unit: 6 # these entries are protocol specific and can differ
|
||||
id: 34 # these entries are protocol specific and can differ
|
||||
state: 'off' # on has to be in apostrophes to be parsed correctly
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **switches** (*Required*): The array that contains all command switches.
|
||||
- **entry** (*Required*): Name of the command switch. Multiple entries are possible.
|
||||
- **on_code** (*Required*): The code to turn the device on.
|
||||
- **off_code** (*Required*): The code to turn the device off.
|
||||
- **on_code_receive** (*Optional*): If given, this command will turn the switch on if it is received by pilight.
|
||||
- **off_code_receive** (*Optional*): If given, this command will turn the switch off if it is received by pilight.
|
||||
|
||||
For possible code entries look at the [pilight API](https://www.pilight.org/development/api/). All commands allowed by [pilight-send](https://wiki.pilight.org/doku.php/psend) can be used.
|
@ -22,11 +22,11 @@ To enable Template switches in your installation, add the following to your `con
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
switch:
|
||||
platform: template
|
||||
- platform: template
|
||||
switches:
|
||||
skylight:
|
||||
friendly_name: 'Skylight'
|
||||
value_template: {% raw %}'{{ states.sensor.skylight.state }}'{% endraw %}
|
||||
value_template: {% raw %}'{{ is_state('sensor.skylight', 'on') }}'{% endraw %}
|
||||
turn_on:
|
||||
service: switch.turn_on
|
||||
entity_id: switch.skylight_open
|
||||
@ -42,7 +42,13 @@ Configuration variables:
|
||||
- **value_template** (*Required*): Defines a [template](/topics/templating/) to set the state of the switch.
|
||||
- **turn_on** (*Required*): Defines an [action](/getting-started/automation/) to run when the switch is turned on.
|
||||
- **turn_off** (*Required*): Defines an [action](/getting-started/automation/) to run when the switch is turned off.
|
||||
- **entity_id** (*Optional*): Add a list of entity_ids so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update it's state.
|
||||
- **entity_id** (*Optional*): Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the switch will try to update it's state.
|
||||
|
||||
|
||||
## {% linkable_title Considerations %}
|
||||
|
||||
If you are using the state of a platform that takes extra time to load, the template switch may get an 'unknown' state during startup. This results in error messages in your log file until that platform has completed loading. If you use is_state() function in your template, you can avoid this situation. For example, you would replace {% raw %}'{{ states.switch.source.state }}'{% endraw %} with this equivalent that returns true/false and never gives an unknown result:
|
||||
{% raw %}'{{ is_state('switch.source', 'on') }}'{% endraw %}
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
@ -54,10 +60,10 @@ This example shows a switch that copies another switch.
|
||||
|
||||
```yaml
|
||||
switch:
|
||||
platform: template
|
||||
- platform: template
|
||||
switches:
|
||||
copy:
|
||||
value_template: {% raw %}'{{ states.switch.source.state }}'{% endraw %}
|
||||
value_template: {% raw %}'{{ is_state('switch.source', 'on') }}'{% endraw %}
|
||||
turn_on:
|
||||
service: switch.turn_on
|
||||
entity_id: switch.source
|
||||
@ -72,7 +78,7 @@ This example shows a switch that takes its state from a sensor, and toggles a sw
|
||||
|
||||
```yaml
|
||||
switch:
|
||||
platform: template
|
||||
- platform: template
|
||||
switches:
|
||||
blind:
|
||||
friendly_name: 'Blind'
|
||||
@ -91,11 +97,11 @@ This example shows a switch that takes its state from a sensor, and uses two mom
|
||||
|
||||
```yaml
|
||||
switch:
|
||||
platform: template
|
||||
- platform: template
|
||||
switches:
|
||||
skylight:
|
||||
friendly_name: 'Skylight'
|
||||
value_template: {% raw %}'{{ states.sensor.skylight.state }}'{% endraw %}
|
||||
value_template: {% raw %}'{{ is_state('sensor.skylight.state', 'on') }}'{% endraw %}
|
||||
turn_on:
|
||||
service: switch.turn_on
|
||||
entity_id: switch.skylight_open
|
||||
@ -103,3 +109,4 @@ switch:
|
||||
service: switch.turn_on
|
||||
entity_id: switch.skylight_close
|
||||
```
|
||||
|
||||
|
@ -23,6 +23,13 @@ thermostat:
|
||||
min_temp: 15
|
||||
max_temp: 21
|
||||
target_temp: 15
|
||||
min_cycle_duration:
|
||||
# At least one of these must be specified:
|
||||
days: 2
|
||||
hours: 1
|
||||
minutes: 10
|
||||
seconds: 5
|
||||
milliseconds: 20
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
@ -34,3 +41,4 @@ Configuration variables:
|
||||
- **max_temp** (*Optional*): Set maximum set point available (default: 35)
|
||||
- **target_temp** (*Required*): Set intital target temperature. Failure to set this variable will result in target temperature being set to null on startup.
|
||||
- **ac_mode** (*Optional*): Set the switch specified in the *heater* option to be treated as a cooling device instead of a heating device.
|
||||
- **min_cycle_duration** (*Optional*): Set a minimum amount of time that the switch specified in the *heater* option must be in it's current state prior to being switched either off or on.
|
||||
|
@ -18,19 +18,18 @@ This is a [React](https://facebook.github.io/react/) implementation of [TodoMVC]
|
||||
- It uses the user configuration for the component in the `configuration.yaml` file for rendering.
|
||||
- It allows toggling the sidebar.
|
||||
|
||||
All you need is available as a [custom component](https://github.com/home-assistant/home-assistant/tree/dev/config/custom_components/react_panel).
|
||||
All you need is available as a [custom panel](https://github.com/home-assistant/home-assistant/tree/master/config/panels/react.html). Download the file and save it in `<config dir>/panels/` (you might have to create the directory if it doesn't exist).
|
||||
|
||||
Create a entry for the panel in your `configuration.yaml` file to enable it.
|
||||
|
||||
```yaml
|
||||
panel_custom:
|
||||
- name: todomvc
|
||||
- name: react
|
||||
sidebar_title: TodoMVC
|
||||
sidebar_icon: mdi:work
|
||||
url_path: my-todomvc
|
||||
webcomponent_path: <config dir>/panels/<component name>.html
|
||||
url_path: todomvc
|
||||
config:
|
||||
hello: world
|
||||
title: hello
|
||||
```
|
||||
|
||||
This video shows the example in action.
|
||||
|
@ -7,9 +7,9 @@
|
||||
<li><a href='/getting-started/'>Get started with Home Assistant</a></li>
|
||||
<li><a href='/demo/'>Try the online demo</a></li>
|
||||
<li><a class="twitter-follow-button" href="https://twitter.com/Home_Assistant">Follow Home Assistant on Twitter</a></li>
|
||||
<li><div class="fb-like" data-href="https://www.facebook.com/homeassistantio/" data-layout="standard" data-action="like" data-show-faces="true"></div></li>
|
||||
<li><div class="fb-like" data-href="https://www.facebook.com/homeassistantio/" data-layout="standard" data-action="like" data-size="small" data-show-faces="true" data-share="false"></div></li>
|
||||
</ul>
|
||||
</section>
|
||||
<div id="fb-root"></div>
|
||||
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.async=true;js.src='//platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
|
||||
<script>(function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(d.getElementById(id)){return;}js=d.createElement(s);js.id=id;js.async=true;js.src="//connect.facebook.net/en_US/all.js#appId=212934732101925&xfbml=1";fjs.parentNode.insertBefore(js,fjs);}(document,'script','facebook-jssdk'));</script>
|
||||
<script>(function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(d.getElementById(id)){return;}js=d.createElement(s);js.id=id;js.async=true;js.src="//connect.facebook.net/en_US/all.js#appId={{ site.social.facebook.app_id }}&xfbml=1";fjs.parentNode.insertBefore(js,fjs);}(document,'script','facebook-jssdk'));</script>
|
||||
|
@ -57,6 +57,17 @@ I would like to do a shoutout to [@fabianhjr]. He has started adding [typing] da
|
||||
- Qwikswitch: Stability fixes ([@kellerza])
|
||||
- Light: [Hyperion] keeps now track of active color ([@schneefux])
|
||||
|
||||
### {% linkable_title Hotfix 0.25.1 - August 1 %}
|
||||
|
||||
- Light - Z-Wave: Bring back delayed value update behavior ([@jnewland])
|
||||
- Recorder: Properly close session after execute ([@kellerza])
|
||||
- Media Player - Kodi: No longer block startup if connecting to wrong port ([@shoekstra])
|
||||
- Downgrade voluptuous to 0.8.9 as it blocked the upgrade for some ([@balloob])
|
||||
|
||||
### {% linkable_title Hotfix 0.25.2 - August 2 %}
|
||||
|
||||
- Hotfix to make sure Z-Wave locks work again. Thanks to @tobiebooth for the quick fix.
|
||||
|
||||
### {% linkable_title Breaking changes %}
|
||||
|
||||
- Google Voice SMS notification support was removed.
|
||||
@ -89,6 +100,8 @@ I would like to do a shoutout to [@fabianhjr]. He has started adding [typing] da
|
||||
[@vladonemo]: https://github.com/vladonemo
|
||||
[@w1ll1am23]: https://github.com/w1ll1am23
|
||||
[@zeroDenial]: https://github.com/zeroDenial
|
||||
[@jnewland]: https://github.com/jnewland
|
||||
[@shoekstra]: https://github.com/shoekstra
|
||||
|
||||
[custom-panels]: /developers/frontend_creating_custom_panels/
|
||||
[iframe_panel]: /components/panel_iframe/
|
||||
|
115
source/_posts/2016-08-03-laundry-automation-update.markdown
Normal file
@ -0,0 +1,115 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Laundry Sensors with NodeMCU and Home Assistant"
|
||||
description: "Nolan describes how he gets notified when laundry is done."
|
||||
date: 2016-08-03 10:22 -0700
|
||||
date_formatted: "August 2, 2016"
|
||||
author: Nolan Gilley
|
||||
comments: true
|
||||
categories: User-Stories
|
||||
og_image: /images/blog/2016-07-laundry-automation/protoboard.jpg
|
||||
---
|
||||
|
||||
_This is a guest post by Home Assistant user and contributor [Nolan Gilley](https://github.com/nkgilley)._
|
||||
|
||||
Today I'll show you how I used Home Assistant, a NodeMCU (ESP8266), and a couple of accelerometers to automate our laundry room. This is a rewrite of an [old post](https://home-assistant.io/blog/2015/08/26/laundry-automation-with-moteino-mqtt-and-home-assistant/) where I did the same thing using a Moteino & Raspberry Pi. This version only requires a NodeMCU.
|
||||
|
||||
We have an older washer and dryer which doesn't have any form of notification when cycles complete. Home Assistant was the obvious solution, I just needed to create sensors for the washer and dryer. I tried using sound sensors but found them unreliable. I ended up using an accelerometer attached to the back of each appliance. I also added magnetic reed switches on the doors of the washer and dryer to detect whether they're open or closed. I connected the accelerometers and reed switches to an NodeMCU which will relay the data to my MQTT broker.
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/blog/2016-07-laundry-automation/block-diagram.png' />
|
||||
Block diagram of schematic
|
||||
</p>
|
||||
|
||||
<!--more-->
|
||||
|
||||
After taking some sample data from the accelerometers while each appliance was in operation, I decided to plot the data to help determine the proper thresholds of when the devices were running or off. I had to do this in order to get precise ranges so the dryer sensor wouldn't get tripped by the washer or vice versa. In the plot below you can see the acceleration in each direction for the accelerometer connected to the dryer. It's easy to see when the dryer is in operation here. I used the same technique for the washer's accelerometer.
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/blog/2016-07-laundry-automation/data-graph.png' />
|
||||
Graph showing the accelerometer data
|
||||
</p>
|
||||
|
||||
Next it was just a matter of integrating everything with Home Assistant. I was able to use the [MQTT component](/components/mqtt/) to read the washer and dryer states from the Moteino and display it in Home Assistant.
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/blog/2016-07-laundry-automation/screenshot-ha.png' />
|
||||
Status of the dryer and washer in Home Assistant
|
||||
</p>
|
||||
|
||||
Next I wrote [scripts](/components/script/) that are run whenever the washer or dryer completes a load. This is triggered by the [automation component](/getting-started/automation/). When the laundry is complete I have the lights in the house turn red and [notify me via Join](/components/notify.joaoapps_join/). Once the door is opened and laundry emptied another script runs that sets the lights back to normal. So far it has been very helpful and very reliable.
|
||||
|
||||
<p class='img'>
|
||||
<a href='/images/blog/2016-07-laundry-automation/protoboard.jpg'>
|
||||
<img src='/images/blog/2016-07-laundry-automation/protoboard.jpg' />
|
||||
</a>
|
||||
NodeMCU connected to MPU-6050 accelerometer.
|
||||
</p>
|
||||
|
||||
Materials used:
|
||||
|
||||
- [NodeMCU](https://www.amazon.com/gp/product/B010O1G1ES)
|
||||
- [2 x Accelerometers](http://www.amazon.com/gp/product/B008BOPN40)
|
||||
- [2 x Reed switch](http://www.amazon.com/gp/product/B004PARDRO)
|
||||
|
||||
[Sketch for the NodeMCU is available here.](https://github.com/nkgilley/nodemcu-laundry/blob/master/nodemcu-laundry.ino)
|
||||
|
||||
Home Assistant Configuration:
|
||||
|
||||
```yaml
|
||||
mqtt:
|
||||
broker: 192.168.1.100
|
||||
port: 1883
|
||||
keepalive: 60
|
||||
qos: 0
|
||||
|
||||
sensor:
|
||||
- platform: mqtt
|
||||
name: "Dryer Status"
|
||||
state_topic: "sensor/dryer"
|
||||
unit_of_measurement: ""
|
||||
|
||||
- platform: mqtt
|
||||
name: "Washer Status"
|
||||
state_topic: "sensor/washer"
|
||||
unit_of_measurement: ""
|
||||
|
||||
automation:
|
||||
- alias: Washer complete
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: sensor.washer_status
|
||||
from: 'Running'
|
||||
to: 'Complete'
|
||||
action:
|
||||
service: script.turn_on
|
||||
entity_id: script.washer_complete
|
||||
|
||||
- alias: Washer emptied
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: sensor.washer_status
|
||||
from: 'Complete'
|
||||
to: 'Empty'
|
||||
action:
|
||||
service: scene.turn_on
|
||||
entity_id: scene.normal
|
||||
|
||||
script:
|
||||
washer_complete:
|
||||
alias: Washer Complete
|
||||
sequence:
|
||||
- alias: Join Notification
|
||||
service: notify.join
|
||||
data:
|
||||
message: "The washing machine has finished its cycle, please empty it!"
|
||||
- alias: Living Room Lights Blue
|
||||
service: scene.turn_on
|
||||
data:
|
||||
entity_id: scene.blue
|
||||
```
|
||||
|
||||
Resources used:
|
||||
|
||||
- [Inspiration and Help with Arduino code](http://www.instructables.com/id/Uber-Home-Automation-w-Arduino-Pi/step13/Washer-Dryer-Smartifier-Water-Leak-Sensor/)
|
||||
|
@ -0,0 +1,180 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Optimizing the Home Assistant mobile web app"
|
||||
description: "A comprehensive list of optimizations done to improve our mobile web application."
|
||||
date: 2016-08-07 12:36 -0700
|
||||
date_formatted: "August 7, 2016"
|
||||
author: Paulus Schoutsen
|
||||
comments: true
|
||||
categories: Technology
|
||||
og_image: /images/blog/2016-08-optimizing-web-app/performance-diagram.png
|
||||
---
|
||||
|
||||
_This blog post will go into detail about the recent performance optimizations that went into the Home Assistant front end. For people not familiar with the app, check out [the demo][demo] and [the source][hap]._
|
||||
|
||||
TL; DR: Don’t hack the framework, separate responsibilities, ship less, use service workers, use (future) web standards.
|
||||
|
||||
This year at Google I/O I saw Monica from the Polymer team talk about web components and performance. In her talk [she mentions a mantra][mantra] that they use in the Polymer team to make things fast: **Do less and be lazy**.
|
||||
|
||||
Do less and be lazy. It sounds so obvious and it took a while before it started to dawn on me. I think most of the code I write is pretty fast, but I don't often stop to take a harder look at how and when it runs in practice. When do we need the result, can it be postponed?
|
||||
|
||||
And thus started my journey to take a critical look at how the Home Assistant app was working and how to make things faster. Below is the list of the different things that I did to make it fast.
|
||||
|
||||
I hope this list can be useful to other people, as a guide for optimizing their own apps or for avoiding pitfalls when building a new one.
|
||||
|
||||
The first thing to do is to measure. The Home Assistant front end is a mobile web app, so we shouldn’t measure this on a machine with 8 cores and gigabytes of ram but instead measure on devices you expect a mobile web app to run: phones. Below are two timelines recorded with Home Assistant 0.18.2 (pre-optimizations) and Google Chrome 53. **On my Mac the app starts in 1400 miliseconds and on my Nexus 5x in ~6500 miliseconds (~4.5 times slower!).**
|
||||
|
||||
<p class='img'>
|
||||
<img
|
||||
src='/images/blog/2016-08-optimizing-web-app/performance-timeline-0.18.2.png'
|
||||
alt='Timeline of loading the front end in Home Assistant 0.18.2' />
|
||||
</p>
|
||||
|
||||
Although the app takes 6500 milliseconds to load on my phone, it would perform well afterwards. Still, that initial load is unacceptable. You expect to open an app on your phone and be able to use it, quickly. After I applied all the changes described below, I managed to reduce startup time to 900 miliseconds (-35%) on my Mac and 2400 miliseconds (-63%) on my Nexus 5x. [Check out the demo here.][demo]
|
||||
|
||||
<p class='img'>
|
||||
<img
|
||||
src='/images/blog/2016-08-optimizing-web-app/performance-diagram.png'
|
||||
alt='diagram showing old and new loading times next to one another' />
|
||||
<img
|
||||
src='/images/blog/2016-08-optimizing-web-app/performance-timeline-0.26.png'
|
||||
alt='Timeline of loading the front end in Home Assistant 0.26' />
|
||||
</p>
|
||||
|
||||
<!--more-->
|
||||
|
||||
## {% linkable_title Technology %}
|
||||
|
||||
The Home Assistant front end consists of two parts. There is [Home Assistant JS][hajs], which controls all data and interaction between JavaScript and the server. It is a Flux architecture using [NuclearJS] and [ImmutableJS]. The UI is implemented by [Home Assistant Polymer][hap] using [Polymer] and web components.
|
||||
|
||||
# {% linkable_title Don’t hack the framework %}
|
||||
|
||||
I thought to be smart. I split out the JavaScript part of all web components and bundled them separately using Webpack so that I could use ES2015 via BabelJS ([architecture][es2015-arch]). This is not how Polymer components are written and it meant that I was unable to use any of the tooling that is available in the community or easily split up the bundle (more on this later).
|
||||
|
||||
So I went ahead and backported all my web components back from shiny beautiful ES6 to ES5. And you know what? It’s not that bad. Yes, not being able to use the concise object notation and arrow functions make your code more verbose. But in the end it is the same code that is running in browsers.
|
||||
|
||||
Another benefit of having each web component contain their own script tag is that the browser will process them one by one, allowing the browser to render our loading spinner animation in between.
|
||||
|
||||
As you can see in the timelines, we were able to get rid of most of the blocking component loading.
|
||||
|
||||
<p class='img'>
|
||||
<img
|
||||
src='/images/blog/2016-08-optimizing-web-app/timeline-no-more-es2015.png'
|
||||
alt='Timeline of loading the front end before and after the optimization' />
|
||||
</p>
|
||||
|
||||
# {% linkable_title Separate responsibilities %}
|
||||
|
||||
Whenever you learn a new technology, you feel like you’ve learned a new superpower. Wow, I can do all this with only 2 lines?! I had the same with bundling.
|
||||
|
||||
I was initially very focused on shipping just a single file with everything that my app needed. The entry point would be my main component which would require all of its Flux and UI dependencies. Then, just before it all would be rendered, it would check if there is authentication and start the data fetching.
|
||||
|
||||
This is a very bad pattern. This means that you will not start any data fetching until your UI is ready to render. Instead, you want your data to be fetched as soon as possible, and while the request is out to the server you want the page to load all your UI components.
|
||||
|
||||
To accomplish this I extracted the application core out of the main bundle. In the current optimized version it’s 31.1kb gzip’d. It is loaded before any other scripts so that it can start fetching data as soon as possible.
|
||||
|
||||
<p class='img'>
|
||||
<img
|
||||
src='/images/blog/2016-08-optimizing-web-app/timeline-corejs.png'
|
||||
alt='Timeline of loading the front end before and after the optimization' />
|
||||
</p>
|
||||
|
||||
When the data does come back before the UI is done loading, we can process it before we start rendering the UI because of all the web components being processed individually. This means that we don't have to show a loading screen the first time our components render – we can just render the components with the data they require.
|
||||
|
||||
# {% linkable_title Ship less %}
|
||||
|
||||
The theory behind this one is simple: if we manage to ship less code, the browser has to process less code and it will start faster.
|
||||
|
||||
## {% linkable_title Only include the components for the page that you will show %}
|
||||
|
||||
The Home Assistant mobile web application has 10 different panels (pages). Besides that, it also has a dialog for each type of device to show more info. That’s a lot of components and screens of which only a very small set is needed at the start. That means that we are shipping a lot of unnecessary data that the browser has to process before our initial render!
|
||||
|
||||
I broke up each panel of the app into a separate bundle that will be loaded on demand. This saved 250 kilobytes (pre-gzip) on just the embedded map alone! This change, however, required some significant changes to our build process.
|
||||
|
||||
Breaking up an app in JavaScript is complex because each module explicitly imports their dependencies. This has to continue to work in your browser after breaking it up in multiple files. Web components do not have this problem as it’s part of the platform and thus your browser is the registry! An unregistered web component will be rendered as an empty span element until the element gets registered. Loading order is not important.
|
||||
|
||||
```javascript
|
||||
// Example of the flexibility of web components.
|
||||
var spinner = document.createElement('paper-spinner');
|
||||
spinner.active = true;
|
||||
document.body.appendChild(spinner);
|
||||
```
|
||||
|
||||
Because the browser tracks your web components, creating standalone bundles for parts of the app is easy:
|
||||
|
||||
- Find all dependencies included in the main bundle (using [hydrolysis])
|
||||
- Create individual bundles of each panel (page) but filter out the dependencies included in main bundle.
|
||||
|
||||
The [build script][build-html] that bundles and minifies the main bundle and panel bundles is <100 lines.
|
||||
|
||||
## {% linkable_title Change the JavaScript bundler to Rollup %}
|
||||
|
||||
Core.js is still pure JavaScript and requires bundling. In my journey to get a smaller bundle, I went from [Webpack] to Webpack 2 to [Rollup]. At each step the bundle got smaller. Rollup is the big winner here because it doesn’t wrap all your modules in function calls but instead concatenates all files with minimal changes to make it work. This not only reduces the file size but also the loading speed. This is because the JavaScript engine will no longer have to invoke a function to resolve each import, it’s doing less work. This might not mean much for a computer but on a phone, everything counts.
|
||||
|
||||
## {% linkable_title Scrutinize dependencies %}
|
||||
|
||||
If the goal is to ship less, it’s time to take a good look at dependencies. It’s so often that we decide to fall back to yet another NPM package that makes our life a little easier but comes at the cost of size – size usually taken up by functionality that you might never need.
|
||||
|
||||
### {% linkable_title Remove Lodash %}
|
||||
I realized that I only used a few methods of lodash. Lodash (and previously underscore) used to be one of the dependencies that would always be one of the first things that I would add to any project I start. But I could no longer justify it in the case of Home Assistant. Even with dead tree shaking it was not worth including it. Yes, they support a lot of edge cases but those were not relevant to my use case. And standalone lodash packages are [still huge][lodash.range]. The only thing that I couldn’t replace with a few lines of my own code was debounce. However I found [a 40 line replacement][debounce].
|
||||
|
||||
### {% linkable_title Replace moment.js with Fecha %}
|
||||
|
||||
Moment.js is one of those power libraries. It is able to handle any date problem that you can throw at it. But this obviously comes at the cost of size. [Fecha] is a date formatting library at ~8% the size of moment.js (only 4.7kb pre-gzip). The only thing that it does not contain is date manipulation, which was something that was not being used.
|
||||
|
||||
# {% linkable_title Use Service worker to instantly load the app %}
|
||||
|
||||
Using a service worker we’re able to store all app components and core javascript in the browser. This means that after their first visit, the browser will only have to go to the network to fetch the latest data from the server.
|
||||
|
||||
Creating a service worker is easy using [sw-precache], a service worker generation tool.
|
||||
|
||||
When a browser does not support service workers, Home Assistant will serve fingerprinted assets that are aggressively cached. Only when the content changes will the client redownload the asset.
|
||||
|
||||
Using fingerprinting with sw-precache required jumping through a few hoops. [The final build script can be found here.][build-sw]
|
||||
|
||||
# {% linkable_title Make it feel fast %}
|
||||
|
||||
This one is more psychological: no one likes staring at a white screen because white screens are ambiguous: are we loading something, is there a crappy connection or maybe even a script error? That’s why it is very important to render something on the screen to show that the rest is being loaded, and as quickly as possible.
|
||||
|
||||
The Home Assistant landing page contains just enough CSS and HTML to render the loading screen minus the animations.
|
||||
|
||||
Now that the app is fast enough, I might swap out moving from a lite loading screen to drawing an empty toolbar. This makes it look like the UI is almost there.
|
||||
|
||||
# {% linkable_title Using a framework build on web standards %}
|
||||
|
||||
_I left this to the end of the list, mainly because I had no influence on this. Polymer just happened to ship an update while I was optimizing the application which gave a big boost to the loading time._
|
||||
|
||||
By using Polymer we have the ability to use tomorrow’s web standards today. This is powered by polyfills. A polyfill will use JavaScript to simulate the behavior that the web standard would have taken care of. As browsers progress, more work can move from the polyfills back to the browsers. This is great because browsers will be able to optimize the work better and thus be faster.
|
||||
|
||||
Polymer 1.6 was introduced at the end of June and allowed the app to take advantage of native [CSS variables][css-vars] in Chrome and Firefox. It also introduced lazy registration. Both greatly sped up our loading times.
|
||||
|
||||
# {% linkable_title Future optimizations %}
|
||||
|
||||
A lot of optimizations have been applied but this journey will never be over. There are still a lot of opportunities to make things even faster. Some ideas that are on my list to explore:
|
||||
|
||||
- Use shadow DOM instead of shady DOM polyfill.
|
||||
- Use [closure compiler][closure] to optimize the JavaScript.
|
||||
- Reduce the number of icons that are loaded.
|
||||
- Embed initial API response in served page if not using a service worker.
|
||||
- Reduce size of initial bundle by moving out all things that are not visible for initial paint. For example the dialogs that show more info about entities.
|
||||
- Prefetch the other pages using `<link rel="preload" …>`
|
||||
|
||||
[demo]: https://home-assistant.io/demo
|
||||
[hap]: https://github.com/home-assistant/home-assistant-polymer
|
||||
[mantra]: https://www.youtube.com/watch?v=zfQoleQEa4w&feature=youtu.be&t=1380
|
||||
[sw-precache]: https://github.com/GoogleChrome/sw-precache
|
||||
[hydrolysis]: https://github.com/Polymer/hydrolysis
|
||||
[hajs]: https://github.com/home-assistant/home-assistant-js
|
||||
[es2015-arch]: https://github.com/home-assistant/home-assistant-polymer/wiki/Using-Polymer-with-ES2015,-Babel-and-NPM
|
||||
[NuclearJS]: https://optimizely.github.io/nuclear-js/
|
||||
[ImmutableJS]: https://facebook.github.io/immutable-js/
|
||||
[Polymer]: https://www.polymer-project.org/
|
||||
[build-html]: https://github.com/home-assistant/home-assistant-polymer/blob/master/script/vulcanize.js
|
||||
[Webpack]: https://webpack.github.io/
|
||||
[Rollup]: http://rollupjs.org/
|
||||
[lodash.range]: https://github.com/lodash/lodash/blob/3.1.7-npm-packages/lodash.range/index.js
|
||||
[debounce]: https://github.com/component/debounce
|
||||
[Fecha]: https://github.com/taylorhakes/fecha
|
||||
[build-sw]: https://github.com/home-assistant/home-assistant-polymer/blob/master/script/sw-precache.js
|
||||
[css-vars]: https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables
|
||||
[closure]: https://developers.google.com/closure/compiler/
|
@ -1,6 +1,6 @@
|
||||
---
|
||||
layout: post
|
||||
title: "0.26: New unit system"
|
||||
title: "0.26: New unit system, pilight, OHMconnect, and Fast.com"
|
||||
description: "Frontend became blazing fast and extensible. DirecTV support added."
|
||||
date: 2016-08-09 10:00:00 +0000
|
||||
date_formatted: "August 09, 2016"
|
||||
@ -12,7 +12,7 @@ categories: Release-Notes
|
||||
|
||||
It's time for 0.26! The biggest change in this release is a new unit system. Instead of picking Celsius or Fahrenheit you'll have to pick imperial or metric now. This influences the units for your temperature, distance, and weight. This will simplify any platform or component that needs to know this information. Big thanks to [@Teagan42] for her hard work on this!
|
||||
|
||||
<img src='/images/supported_brands/foursquare.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/ohmconnect.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/directv.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' />
|
||||
<img src='/images/supported_brands/foursquare.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/ohmconnect.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/fastdotcom.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/pilight.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' />
|
||||
|
||||
- Core: Introduce notion of unit system (deprecates temperature unit option) ([@Teagan42])
|
||||
- Front end: Speed improvements ([@balloob])
|
||||
@ -37,6 +37,10 @@ It's time for 0.26! The biggest change in this release is a new unit system. Ins
|
||||
- Notify - SMTP: Allow embedding of [images][images] ([@partofthething])
|
||||
- Sensor: [OhmConnect] is now supported ([@robbiet480])
|
||||
- [panel_custom] component allows the registering of new panels ([@balloob])
|
||||
- Light: New [mqtt_json] platform for working with JSON payload ([@corbanmailloux])
|
||||
- Sensor: New [Fast.com] platform to measure network bandwidth performance ([@nkgilley])
|
||||
- New [pilight] component to control 433 Mz devices ([@DavidLP])
|
||||
- Sensor: [GPSD] now supported ([@fabaff])
|
||||
|
||||
### {% linkable_title Breaking changes %}
|
||||
|
||||
@ -51,11 +55,15 @@ homeassistant:
|
||||
|
||||
[@abcminiuser]: https://github.com/abcminiuser
|
||||
[@balloob]: https://github.com/balloob
|
||||
[@corbanmailloux]: https://github.com/corbanmailloux
|
||||
[@Danielhiversen]: https://github.com/Danielhiversen
|
||||
[@DavidLP]: https://github.com/DavidLP
|
||||
[@fabaff]: https://github.com/fabaff
|
||||
[@HBDK]: https://github.com/HBDK
|
||||
[@jnewland]: https://github.com/jnewland
|
||||
[@kellerza]: https://github.com/kellerza
|
||||
[@mtreinish]: https://github.com/mtreinish
|
||||
[@nkgilley]: https://github.com/nkgilley
|
||||
[@open-homeautomation]: https://github.com/open-homeautomation
|
||||
[@partofthething]: https://github.com/partofthething
|
||||
[@persandtrom]: https://github.com/persandtrom
|
||||
@ -75,5 +83,9 @@ homeassistant:
|
||||
[changed]: /components/alarm_control_panel.verisure/
|
||||
[color]: /components/light.flux_led/
|
||||
[Whitelist]: /components/influxdb/
|
||||
[particulate]: /components/sensor.particulate_matter/
|
||||
[particulate]: /components/sensor.serial_pm/
|
||||
[screenshot]: /components/media_player.lg_netcast/
|
||||
[mqtt_json]: /components/light.mqtt_json/
|
||||
[Fast.com]: /components/sensor.fastdotcom/
|
||||
[pilight]: /components/pilight/
|
||||
[GPSD]: /components/sensor.gpsd/
|
||||
|
@ -13,9 +13,9 @@ The `configuration.yaml` file a plain-text file thus it is readable for everyone
|
||||
|
||||
### {% linkable_title Using secrets.yaml %}
|
||||
|
||||
The workflow for the outsourcing in the `secrets.yaml` are very similar to the [splitting of the configuration](/topics/splitting_configuration/). Create a `secrets.yaml` file in your Home assistant configuration directory (The location of the folder differs between operating systems: on OS X and Linux it's `~/.homeassistant` and on Windows it's `%APPDATA%/.homeassistant`).
|
||||
The workflow for the outsourcing in the `secrets.yaml` is very similar to the [splitting of the configuration](/topics/splitting_configuration/). Create a `secrets.yaml` file in your Home assistant configuration directory (The location of the folder differs between operating systems: on OS X and Linux it's `~/.homeassistant` and on Windows it's `%APPDATA%/.homeassistant`).
|
||||
|
||||
The entries for password and API keys in the `configuration.yaml` file usally looks like the example below.
|
||||
The entries for password and API keys in the `configuration.yaml` file usually looks like the example below.
|
||||
|
||||
```yaml
|
||||
http:
|
||||
@ -29,7 +29,7 @@ http:
|
||||
api_password: !secret http_password
|
||||
```
|
||||
|
||||
The `secrets.yaml` files stored the corresponding password assigned to the identifier.
|
||||
The `secrets.yaml` file contains the corresponding password assigned to the identifier.
|
||||
|
||||
```yaml
|
||||
logger: debug
|
||||
@ -44,7 +44,7 @@ Using [Keyring](http://pythonhosted.org/keyring/) is an alternative way to `secr
|
||||
$ pip3 install keyring
|
||||
```
|
||||
|
||||
Replaced your password or API key with `!secret` and an identifier in `configuration.yaml` file.
|
||||
Replace your password or API key with `!secret` and an identifier in `configuration.yaml` file.
|
||||
|
||||
```yaml
|
||||
http:
|
||||
|
@ -37,3 +37,5 @@ Attribute | Description
|
||||
`entity_picture` | Url to a picture that should be used instead of showing the domain icon. Example: `http://example.com/picture.jpg`.
|
||||
`assumed_state` | Boolean if the current state is an assumption. [More info](https://home-assistant.io/blog/2016/02/12/classifying-the-internet-of-things/#classifiers) Example: `True`.
|
||||
`unit_of_measurement` | The unit of measurement the state is expressed in. Used for grouping graphs or understanding the entity. Example: `°C`.
|
||||
|
||||
When an attribute contains spaces, you can retrieve it like this: `states.sensor.livingroom.attributes["Battery numeric"]`.
|
||||
|
@ -16,6 +16,13 @@
|
||||
user-scalable=no' />
|
||||
<meta name='theme-color' content='#03a9f4'>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Roboto', 'Noto', sans-serif;
|
||||
font-weight: 300;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
}
|
||||
|
||||
#ha-init-skeleton {
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
@ -64,10 +71,7 @@
|
||||
.classList.add('error');
|
||||
};
|
||||
window.noAuth = true;
|
||||
window.deferredLoading = {
|
||||
map: '/demo/partial-map.html',
|
||||
dev: '/demo/dev-tools.html',
|
||||
};
|
||||
window.Polymer = {lazyRegister: true, useNativeCSSProperties: true, dom: 'shady'}
|
||||
</script>
|
||||
</head>
|
||||
<body fullbleed>
|
||||
|
1
source/demo/panels/ha-panel-dev-event.html
Normal file
2
source/demo/panels/ha-panel-dev-info.html
Normal file
@ -0,0 +1,2 @@
|
||||
<html><head><meta charset="UTF-8"></head><body><dom-module id="ha-panel-dev-info"><template><style include="iron-positioning ha-style">:host{background-color:#fff;-ms-user-select:initial;-webkit-user-select:initial;-moz-user-select:initial}.content{padding:24px}.about{text-align:center;line-height:2em}.version{@apply(--paper-font-headline)}.develop{@apply(--paper-font-subhead)}.about a{color:var(--dark-primary-color)}.error-log-intro{margin-top:16px;border-top:1px solid var(--light-primary-color);padding-top:16px}paper-icon-button{float:right}.error-log{@apply(--paper-font-code1)
|
||||
clear: both;white-space:pre-wrap}</style><app-header-layout has-scrolling-region=""><app-header fixed=""><app-toolbar><ha-menu-button narrow="[[narrow]]" show-menu="[[showMenu]]"></ha-menu-button><div main-title="">About</div></app-toolbar></app-header><div class="content fit"><div class="about"><p class="version"><a href="https://home-assistant.io"><img src="/static/icons/favicon-192x192.png" height="192"></a><br>Home Assistant<br>[[hassVersion]]</p><p class="develop"><a href="https://home-assistant.io/developers/credits/" target="_blank">Developed by a bunch of awesome people.</a></p><p>Published under the MIT license<br>Source: <a href="https://github.com/balloob/home-assistant" target="_blank">server</a> — <a href="https://github.com/balloob/home-assistant-polymer" target="_blank">frontend-ui</a> — <a href="https://github.com/balloob/home-assistant-js" target="_blank">frontend-core</a></p><p>Built using <a href="https://www.python.org">Python 3</a>, <a href="https://www.polymer-project.org" target="_blank">Polymer [[polymerVersion]]</a>, <a href="https://optimizely.github.io/nuclear-js/" target="_blank">NuclearJS [[nuclearVersion]]</a><br>Icons by <a href="https://www.google.com/design/icons/" target="_blank">Google</a> and <a href="https://MaterialDesignIcons.com" target="_blank">MaterialDesignIcons.com</a>.</p></div><p class="error-log-intro">The following errors have been logged this session:<paper-icon-button icon="mdi:refresh" on-tap="refreshErrorLog"></paper-icon-button></p><div class="error-log">[[errorLog]]</div></div></app-header-layout></template></dom-module><script>Polymer({is:"ha-panel-dev-info",behaviors:[window.hassBehavior],properties:{hass:{type:Object},narrow:{type:Boolean,value:!1},showMenu:{type:Boolean,value:!1},hassVersion:{type:String,bindNuclear:function(r){return r.configGetters.serverVersion}},polymerVersion:{type:String,value:Polymer.version},nuclearVersion:{type:String,value:"1.3.0"},errorLog:{type:String,value:""}},attached:function(){this.refreshErrorLog()},refreshErrorLog:function(r){r&&r.preventDefault(),this.errorLog="Loading error log…",this.hass.errorLogActions.fetchErrorLog().then(function(r){this.errorLog=r||"No errors have been reported."}.bind(this))}})</script></body></html>
|
1
source/demo/panels/ha-panel-dev-service.html
Normal file
1
source/demo/panels/ha-panel-dev-state.html
Normal file
2
source/demo/panels/ha-panel-dev-template.html
Normal file
4
source/demo/panels/ha-panel-history.html
Normal file
1
source/demo/panels/ha-panel-iframe.html
Normal file
@ -0,0 +1 @@
|
||||
<html><head><meta charset="UTF-8"></head><body><dom-module id="ha-panel-iframe"><template><style include="ha-style">iframe{border:0;width:100%;height:calc(100% - 64px)}</style><app-toolbar><ha-menu-button narrow="[[narrow]]" show-menu="[[showMenu]]"></ha-menu-button><div main-title="">[[panel.title]]</div></app-toolbar><iframe src="[[panel.config.url]]" sandbox="allow-forms allow-popups allow-pointer-lock allow-same-origin allow-scripts"></iframe></template></dom-module><script>Polymer({is:"ha-panel-iframe",properties:{panel:{type:Object},narrow:{type:Boolean},showMenu:{type:Boolean}}})</script></body></html>
|
4
source/demo/panels/ha-panel-logbook.html
Normal file
@ -49,6 +49,7 @@ This page contains a list of people who have contributed in one way or another t
|
||||
- [Charles Spirakis](https://github.com/srcLurker)
|
||||
- [Chris Mulder](https://github.com/chrisvis)
|
||||
- [Christian Braedstrup](https://github.com/LinuxChristian)
|
||||
- [Corban Mailloux](https://github.com/corbanmailloux)
|
||||
- [coteyr](https://github.com/coteyr/)
|
||||
- [Dale Higgs](https://github.com/dale3h)
|
||||
- [Dan Cinnamon](https://github.com/Cinntax)
|
||||
@ -60,6 +61,7 @@ This page contains a list of people who have contributed in one way or another t
|
||||
- [Dan Smith](https://github.com/kk7ds)
|
||||
- [Dan Sullivan](https://github.com/dansullivan86/)
|
||||
- [Daren Lord](https://github.com/Xorso)
|
||||
- [David-Leon Pohl](https://github.com/DavidLP)
|
||||
- [Dean Camera](https://github.com/abcminiuser)
|
||||
- [Dean Galvin](https://github.com/FreekingDean)
|
||||
- [Dennis Karpienski](https://github.com/TheRealLink)
|
||||
@ -76,10 +78,11 @@ This page contains a list of people who have contributed in one way or another t
|
||||
- [Florian Holzapfel](https://github.com/florianholzapfel)
|
||||
- [fotoetienne](https://github.com/fotoetienne)
|
||||
- [Fredrik Haglund](https://github.com/PetitCircuitLab)
|
||||
- [Fredrik Lindqvist](https://github.com/Landrash)
|
||||
- [GadgetReactor](https://github.com/GadgetReactor)
|
||||
- [Geoff Norton](https://github.com/kangaroo)
|
||||
- [goir](https://github.com/goir)
|
||||
- [gottsman](https://github.com/gottsman)
|
||||
- [Kevin Gottsman](https://github.com/gottsman)
|
||||
- [Greg Dowling](https://github.com/pavoni)
|
||||
- [Guillem Barba](https://github.com/gbarba)
|
||||
- [Gustav Ahlberg](https://github.com/Gyran)
|
||||
@ -95,6 +98,7 @@ This page contains a list of people who have contributed in one way or another t
|
||||
- [Ian Copp](https://github.com/icopp)
|
||||
- [Igor Shults](https://github.com/ishults)
|
||||
- [Issac Kelly](https://github.com/issackelly)
|
||||
- [Jacob Tomlinson](https://github.com/jacobtomlinson)
|
||||
- [James Cole](https://github.com/jamespcole)
|
||||
- [Jan Harkes](https://github.com/jaharkes)
|
||||
- [Jan-Preben Mossin](https://github.com/jpmossin)
|
||||
|
67
source/developers/development_validation.markdown
Normal file
@ -0,0 +1,67 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Validate the input"
|
||||
description: "Validation of entries in configuration.yaml"
|
||||
date: 2016-08-11 20:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
---
|
||||
|
||||
The `configuration.yaml` file contains the configuration options for components and platforms. To ensure that the given configuration provided by the user is valid we use [voluptuous](https://pypi.python.org/pypi/voluptuous) to check it. Certain entries are optional or could be required for the setup of a platform or a component. Others must be of a certain type or out of an already defined list. This will ensure that the users are notified if something is wrong with a platform or component setup before Home Assistant is running.
|
||||
|
||||
Beside the [voluptuous](https://pypi.python.org/pypi/voluptuous) default types are a bunch of custom types available. To get a full overview take a look at the [config_validation.py](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/helpers/config_validation.py) helper.
|
||||
|
||||
- Types: `string`, `byte`, and `boolean`
|
||||
- Entity ID: `entity_id` and `entity_ids`
|
||||
- Numbers: `small_float` and `positive_int`
|
||||
- Time: `time`, `time_zone`
|
||||
- Misc: `template`, `slug`, `temperature_unit`, `latitude`, `longitude`, `isfile`, `sun_event`, `ensure_list`, and `icon`
|
||||
|
||||
To validate plaforms using [MQTT](/components/mqtt/) there are `valid_subscribe_topic` and `valid_publish_topic` present.
|
||||
|
||||
### {% linkable_title Snippets %}
|
||||
|
||||
This section contains a couple of snippets for the validation we use.
|
||||
|
||||
### {% linkable_title Default name %}
|
||||
|
||||
```python
|
||||
DEFAULT_NAME = 'Sensor name'
|
||||
|
||||
PLATFORM_SCHEMA = vol.Schema({
|
||||
...
|
||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||
```
|
||||
|
||||
### {% linkable_title Port %}
|
||||
|
||||
As all port numbers are coming out of the range 1 till 65535 a range check should be performed.
|
||||
|
||||
```python
|
||||
DEFAULT_PORT = 993
|
||||
|
||||
PLATFORM_SCHEMA = vol.Schema({
|
||||
[...]
|
||||
vol.Optional(CONF_PORT, default=DEFAULT_PORT):
|
||||
vol.All(vol.Coerce(int), vol.Range(min=1, max=65535)),
|
||||
```
|
||||
|
||||
### {% linkable_title Sensor types %}
|
||||
|
||||
If a sensor has a pre-defined list of available options it should be tested if the configuration entry matches it.
|
||||
|
||||
```python
|
||||
SENSOR_TYPES = {
|
||||
'article_cache': ('Article Cache', 'MB'),
|
||||
'average_download_rate': ('Average Speed', 'MB/s'),
|
||||
}
|
||||
|
||||
PLATFORM_SCHEMA = vol.Schema({
|
||||
....
|
||||
vol.Optional(CONF_MONITORED_VARIABLES, default=[]):
|
||||
[vol.In(SENSOR_TYPES)],
|
||||
```
|
||||
|
||||
|
@ -45,7 +45,7 @@ class ExampleSensor(Entity):
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
"""Return the state of the sensor.""
|
||||
"""Return the state of the sensor."""
|
||||
return 23
|
||||
|
||||
@property
|
||||
|
@ -59,15 +59,15 @@ The following tables show the available trigger data per platform.
|
||||
| `trigger.entity_id` | Entity ID that we observe.
|
||||
| `trigger.below` | The below threshold, if any.
|
||||
| `trigger.above` | The above threshold, if any.
|
||||
| `trigger.from_state` | The previous state of the entity.
|
||||
| `trigger.to_state` | The new state that triggered trigger.
|
||||
| `trigger.from_state` | The previous [state object] of the entity.
|
||||
| `trigger.to_state` | The new [state object] that triggered trigger.
|
||||
|
||||
| Template variable | Data |
|
||||
| ---- | ---- |
|
||||
| `trigger.platform` | Hardcoded: `state`
|
||||
| `trigger.entity_id` | Entity ID that we observe.
|
||||
| `trigger.from_state` | The previous state of the entity.
|
||||
| `trigger.to_state` | The new state that triggered trigger.
|
||||
| `trigger.from_state` | The previous [state object] of the entity.
|
||||
| `trigger.to_state` | The new [state object] that triggered trigger.
|
||||
| `trigger.for` | Timedelta object how long state has been to state, if any.
|
||||
|
||||
| Template variable | Data |
|
||||
@ -80,8 +80,8 @@ The following tables show the available trigger data per platform.
|
||||
| ---- | ---- |
|
||||
| `trigger.platform` | Hardcoded: `template`
|
||||
| `trigger.entity_id` | Entity ID that caused change.
|
||||
| `trigger.from_state` | Previous state of entity that caused change.
|
||||
| `trigger.to_state` | New state of entity that caused template to change.
|
||||
| `trigger.from_state` | Previous [state object] of entity that caused change.
|
||||
| `trigger.to_state` | New [state object] of entity that caused template to change.
|
||||
|
||||
| Template variable | Data |
|
||||
| ---- | ---- |
|
||||
@ -92,7 +92,9 @@ The following tables show the available trigger data per platform.
|
||||
| ---- | ---- |
|
||||
| `trigger.platform` | Hardcoded: `zone`
|
||||
| `trigger.entity_id` | Entity ID that we are observing.
|
||||
| `trigger.from_state` | Previous state of the entity.
|
||||
| `trigger.to_state` | New state of the entity.
|
||||
| `trigger.from_state` | Previous [state object] of the entity.
|
||||
| `trigger.to_state` | New [state object] of the entity.
|
||||
| `trigger.zone` | State object of zone
|
||||
| `trigger.event` | Event that trigger observed: `enter` or `leave`.
|
||||
|
||||
[state object]: /topics/state_object/
|
||||
|
@ -15,7 +15,7 @@ To get Home Assistant installed as a background service, run:
|
||||
|
||||
|
||||
```bash
|
||||
$ hass --install-osx
|
||||
$ hass --script macos install
|
||||
|
||||
Home Assistant has been installed. Open it here: http://localhost:8123
|
||||
```
|
||||
@ -25,7 +25,7 @@ Home Assistant will log to `~/Library/Logs/homeassistant.log`
|
||||
To uninstall the service, run:
|
||||
|
||||
```bash
|
||||
$ hass --uninstall-osx
|
||||
$ hass --script macos uninstall
|
||||
|
||||
Home Assistant has been uninstalled.
|
||||
```
|
||||
|
@ -20,7 +20,7 @@ If the preceding command returns the string `systemd`, you are likely using `sys
|
||||
If you want Home Assistant to be launched automatically, an extra step is needed to setup `systemd`. You need a service file to control Home Assistant with `systemd`. If you are using a Raspberry Pi with Raspbian then replace the `[your user]` with `pi` otherwise use your user you want to run Home Assistant. `ExecStart` contains the path to `hass` and this may vary. Check with `whereis hass` for the location.
|
||||
|
||||
```bash
|
||||
$ su -c 'cat <<EOF >> /lib/systemd/system/home-assistant@[your user].service
|
||||
$ su -c 'cat <<EOF >> /etc/systemd/system/home-assistant@[your user].service
|
||||
[Unit]
|
||||
Description=Home Assistant
|
||||
After=network.target
|
||||
@ -38,7 +38,7 @@ EOF'
|
||||
There is also another [sample service file](https://raw.githubusercontent.com/home-assistant/home-assistant/master/script/home-assistant%40.service) available. To use this one, just download it.
|
||||
|
||||
```bash
|
||||
$ sudo wget https://raw.githubusercontent.com/home-assistant/home-assistant/master/script/home-assistant%40.service -O /lib/systemd/system/home-assistant@[your user].service
|
||||
$ sudo wget https://raw.githubusercontent.com/home-assistant/home-assistant/master/script/home-assistant%40.service -O /etc/systemd/system/home-assistant@[your user].service
|
||||
```
|
||||
|
||||
You need to reload `systemd` to make the daemon aware of the new configuration. Enable and launch Home Assistant after that.
|
||||
@ -54,7 +54,7 @@ If everything went well, `sudo systemctl start home-assistant@[your user]` shoul
|
||||
```bash
|
||||
$ sudo systemctl status home-assistant@[your user] -l
|
||||
● home-assistant@fab.service - Home Assistant for [your user]
|
||||
Loaded: loaded (/usr/lib/systemd/system/home-assistant@[your user].service; enabled; vendor preset: disabled)
|
||||
Loaded: loaded (/etc/systemd/system/home-assistant@[your user].service; enabled; vendor preset: disabled)
|
||||
Active: active (running) since Sat 2016-03-26 12:26:06 CET; 13min ago
|
||||
Main PID: 30422 (hass)
|
||||
CGroup: /system.slice/system-home\x2dassistant.slice/home-assistant@[your user].service
|
||||
@ -66,5 +66,10 @@ $ sudo systemctl status home-assistant@[your user] -l
|
||||
To get Home Assistant's logging output, simple use `journalctl`.
|
||||
|
||||
```bash
|
||||
$ sudo journalctl -f -u home-assistant@[your user]
|
||||
$ journalctl -f -u home-assistant@[your user]
|
||||
```
|
||||
|
||||
Because the log can scroll quite quickly, you might want to open a second terminal to view only the errors:
|
||||
```bash
|
||||
$ journalctl -f -u home-assistant@[your user] | grep -i 'error'
|
||||
```
|
||||
|
@ -21,6 +21,12 @@ This will launch Home Assistant and serve the web interface from port 8123 on yo
|
||||
When using boot2docker on OS X you are unable to map the local time to your Docker container. Replace `-v /etc/localtime:/etc/localtime:ro` with `-e "TZ=America/Los_Angeles"` (replacing America/Los_Angeles with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones))
|
||||
</p>
|
||||
|
||||
If you change the config you have to restart the server.
|
||||
To do that you have 2 options.
|
||||
|
||||
1. You can go to the <img src='/images/screenshots/developer-tool-services-icon.png' alt='service developer tool icon' class="no-shadow" height="38" /> service developer tools, select the service `homeassistant/restart` and click "Call Service".
|
||||
2. Or you can restart it from an terminal by running `docker restart home-assistant`
|
||||
|
||||
### {% linkable_title Troubleshooting %}
|
||||
|
||||
If you run into any issues, please see [the troubleshooting page](/getting-started/troubleshooting/). It contains solutions to many of the more commonly encountered issues.
|
||||
|
@ -9,7 +9,7 @@ footer: true
|
||||
|
||||
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 Open-Zwave Control Panel.
|
||||
|
||||
The only requirement is that you have a Raspberry Pi with a fresh installation of [Raspbian Jessie/Jessie Lite](https://www.raspberrypi.org/downloads/raspbian/) connected to your network.
|
||||
The only requirement is that you have a Raspberry Pi with a fresh installation of [Raspbian Jessie](https://www.raspberrypi.org/downloads/raspbian/) connected to your network.
|
||||
|
||||
* Login to Raspberry Pi. For example with `ssh pi@your_raspberry_pi_ip`
|
||||
* Run the following command
|
||||
@ -73,6 +73,7 @@ After upgrading, you can restart Home Assistant a few different ways:
|
||||
|
||||
To launch the OZWCP web application:
|
||||
|
||||
* Make sure Home Assistant is not running! So stop that first
|
||||
* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip`
|
||||
* Change to the ozwcp directory `cd /srv/hass/src/open-zwave-control-panel/`
|
||||
* Launch the control panel `sudo ./ozwcp -p 8888`
|
||||
|
@ -9,7 +9,7 @@ sharing: true
|
||||
footer: true
|
||||
---
|
||||
|
||||
A `Vagrantfile` is avalable into `virtualization/vagrant` folder for quickly spinning up a Linux virtual machine running Home Assistant. This can be beneficial for those who want to experiment with Home Assistant and/or developers willing to easily test local changes and run test suite against them.
|
||||
A `Vagrantfile` is available into `virtualization/vagrant` folder for quickly spinning up a Linux virtual machine running Home Assistant. This can be beneficial for those who want to experiment with Home Assistant and/or developers willing to easily test local changes and run test suite against them.
|
||||
|
||||
<p class='note'>
|
||||
Vagrant is intended for testing/development only. It is NOT recommended for permanent installations.
|
||||
@ -21,21 +21,29 @@ You must have [Vagrant](https://www.vagrantup.com/downloads.html) and [Virtualbo
|
||||
|
||||
## {% linkable_title Get Home Assistant source code %}
|
||||
|
||||
Download the home-assistant source code by either downloading the .zip file from [GitHub releases page](https://github.com/home-assistant/home-assistant/releases), or by using [Git](https://git-scm.com/)
|
||||
Download the Home Assistant source code by either downloading the .zip file from [GitHub releases page](https://github.com/home-assistant/home-assistant/releases) or by using [Git](https://git-scm.com/)
|
||||
|
||||
```bash
|
||||
git clone https://github.com/home-assistant/home-assistant.git
|
||||
cd home-assistant/virtualization/vagrant
|
||||
$ git clone https://github.com/home-assistant/home-assistant.git
|
||||
$ cd home-assistant/virtualization/vagrant
|
||||
```
|
||||
|
||||
<p class='note'>
|
||||
The following instructions will assume you changed your working directory to be home-assistant/virtualization/vagrant. This is mandatory because Vagrant will look for informations about the running VM inside that folder and won't work otherwise
|
||||
The following instructions will assume you changed your working directory to be `home-assistant/virtualization/vagrant`. This is mandatory because Vagrant will look for informations about the running VM inside that folder and won't work otherwise
|
||||
</p>
|
||||
|
||||
<p class='note'>
|
||||
When using Vagrant on Windows, change git's `auto.crlf` to input before cloning the Home Assistant repository. With input setting git won't automatically change line endings from Unix LF to Windows CRLF. Shell scripts executed during provision won't work with Windows line endings.
|
||||
</p>
|
||||
|
||||
```bash
|
||||
$ git config --global core.autocrlf input
|
||||
```
|
||||
|
||||
## {% linkable_title Create the Vagrant VM and start Home Assistant %}
|
||||
|
||||
```bash
|
||||
vagrant up
|
||||
$ vagrant up
|
||||
```
|
||||
|
||||
This will download and start a virtual machine using Virtualbox, which will internally setup the development environment necessary to start Home Assistant process and run test suite as well. After the VM has started succesfully, the Home Assistant frontend will be accessible locally from your browser at [http://localhost:8123](http://localhost:8123)
|
||||
@ -45,7 +53,7 @@ This will download and start a virtual machine using Virtualbox, which will inte
|
||||
To shutdown the Vagrant host:
|
||||
|
||||
```bash
|
||||
vagrant halt
|
||||
$ vagrant halt
|
||||
```
|
||||
|
||||
To start it again, just run `vagrant up`
|
||||
@ -57,7 +65,7 @@ The root `home-assistant` directory on your workstation will be mirrored with `/
|
||||
Any changes made to the local directory on your workstation will be available from the Vagrant host, so to apply your changes to the Home Assistant process, just restart it:
|
||||
|
||||
```bash
|
||||
touch restart ; vagrant provision
|
||||
$ touch restart ; vagrant provision
|
||||
```
|
||||
|
||||
## {% linkable_title Run test suite (Tox) %}
|
||||
@ -65,7 +73,7 @@ touch restart ; vagrant provision
|
||||
To run tests against your changes:
|
||||
|
||||
```bash
|
||||
touch run_tests ; vagrant provision
|
||||
$ touch run_tests ; vagrant provision
|
||||
```
|
||||
|
||||
## {% linkable_title Cleanup %}
|
||||
@ -73,7 +81,7 @@ touch run_tests ; vagrant provision
|
||||
To completely remove the VM:
|
||||
|
||||
```bash
|
||||
rm setup_done ; vagrant destroy -f
|
||||
$ rm setup_done ; vagrant destroy -f
|
||||
```
|
||||
|
||||
You can now recreate a completely new Vagrant host with `vagrant up`
|
||||
|
@ -72,7 +72,7 @@ delay:
|
||||
```yaml
|
||||
# Waits however many minutes input_slider.minute_delay is set to
|
||||
# Valid formats include HH:MM and HH:MM:SS
|
||||
delay: {% raw %}'00:{{ input_slider.minute_delay }}:00'{% endraw %}
|
||||
delay: {% raw %}'00:{{ input_slider.minute_delay | int }}:00'{% endraw %}
|
||||
```
|
||||
|
||||
#### {% linkable_title Fire an Event %}
|
||||
|
@ -29,7 +29,7 @@ $ python3 get-pip.py
|
||||
```
|
||||
|
||||
#### {% linkable_title distutils.errors.DistutilsOptionError: must supply either home or prefix/exec-prefix -- not both %}
|
||||
This is a known issue if you're on a Mac using Homebrew to install Python. Please follow [these instructions](https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Homebrew-and-Python.md#note-on-pip-install---user) to resolve it.
|
||||
This is a known issue if you're on a Mac using Homebrew to install Python. Please follow [these instructions](https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Homebrew-and-Python.md#note-on-pip-install---user) to resolve it.
|
||||
|
||||
#### {% linkable_title CentOS and Python 3 %}
|
||||
To run Python 3.x on [CentOS](https://www.centos.org/) or RHEL, [Software Collections](https://www.softwarecollections.org/en/scls/rhscl/rh-python34/) needs to be activated.
|
||||
|
@ -25,6 +25,8 @@ After updating, restart Home Assistant for the changes to take effect. This mean
|
||||
The upgrade needs to be run as the same user as the installation was done to avoid permission errors.
|
||||
</p>
|
||||
|
||||
[BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=tuG2rs1Cl2Y) explaining how to upgrade Home Assistant.
|
||||
|
||||
#### {% linkable_title Run the development version %}
|
||||
If you want to stay on top of the development of Home Assistant then you can upgrade to the `dev` branch.
|
||||
|
||||
|
@ -29,6 +29,8 @@ The basics of YAML syntax are block collections and mappings containing key-valu
|
||||
|
||||
Note that indentation is an important part of specifying relationships using YAML. Things that are indented are nested "inside" things that are one level higher. So in the above example, `platform: pushbullet` is a property of (nested inside) the `notify` component.
|
||||
Getting the right indentation can be tricky if you're not using an editor with a fixed width font. Tabs are not allowed to be used for indentation. Convention is to use 2 spaces for each level of indentation.
|
||||
You can use [YAMLLint](http://www.yamllint.com/) to check if your YAML-syntax is correct before loading it into Home Assistant which will save you some time.
|
||||
*Please pay attention on not putting in private data, as it is a 3rd-party website not maintained by Home Assistant.*
|
||||
|
||||
Lines that start with **#** are comments and are ignored by the system.
|
||||
|
||||
|
@ -22,7 +22,7 @@ Upon first run, the z-wave component will take time to initialize entities and e
|
||||
| Aeotec Z-Stick Series 2 | ✓ | | |
|
||||
| Aeotec Z-Stick Series 5 | ✓ | | |
|
||||
| Razberry GPIO Module | ✓ | | |
|
||||
|
||||
| ZWave.me UZB1 | ✓ | | |
|
||||
|
||||
## {% linkable_title Stick Alternatives %}
|
||||
|
||||
|
@ -9,6 +9,20 @@ sharing: true
|
||||
footer: true
|
||||
---
|
||||
|
||||
##### {% linkable_title Motion or alarm sensors %}
|
||||
|
||||
In order for Home Assistant to recognize well the sensor, you will need to change its configuration from `Basic Set (default)` to `Binary Sensor report` or `Alarm report`. Currently there's no way to do this in Home Assistant but you can use ozwcp (OpenZWave control panel), Domoticz or similar to do it
|
||||
These devices will either show as a binary sensor or a sensor called `Alarm xxxx` and will report a numeric value. Test to see what value is what. Sometimes this is noted in the device manual.
|
||||
|
||||
|
||||
##### {% linkable_title Locks and other secure devices %}
|
||||
|
||||
These devices require a network key to be set for the zwave network before they are paired. This key is set in OpenZwave's `options.xml` which is located in Open Zwave's directory. This should also be the same directory as `config_path:` in your `configuration.yaml`. If it's not, make sure you have the same values in all the files you are using.
|
||||
The option is commented out by default in `options.xml` and is a default key. Make your own unique key. The key is in Hexadecimals.
|
||||
It is best to pair these devices in Open Zwave Control Panel or other Zwave tool that can show you logs while pairing. Test the device before you save the configuration.
|
||||
Make sure you copy the newly saved `zwcfg_[home_id].xml`into your HomeAssistant config directory.
|
||||
|
||||
|
||||
##### {% linkable_title Aeon Minimote %}
|
||||
|
||||
Here's a handy configuration for the Aeon Labs Minimote that defines all possible button presses. Put it into `automation.yaml`.
|
||||
@ -19,7 +33,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl
|
||||
platform: event
|
||||
event_type: zwave.scene_activated
|
||||
event_data:
|
||||
entity_id: aeon_labs_minimote_1
|
||||
object_id: aeon_labs_minimote_1
|
||||
scene_id: 1
|
||||
|
||||
- alias: Minimote Button 1 Held
|
||||
@ -27,7 +41,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl
|
||||
platform: event
|
||||
event_type: zwave.scene_activated
|
||||
event_data:
|
||||
entity_id: aeon_labs_minimote_1
|
||||
object_id: aeon_labs_minimote_1
|
||||
scene_id: 2
|
||||
|
||||
- alias: Minimote Button 2 Pressed
|
||||
@ -35,7 +49,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl
|
||||
platform: event
|
||||
event_type: zwave.scene_activated
|
||||
event_data:
|
||||
entity_id: aeon_labs_minimote_1
|
||||
object_id: aeon_labs_minimote_1
|
||||
scene_id: 3
|
||||
|
||||
- alias: Minimote Button 2 Held
|
||||
@ -43,7 +57,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl
|
||||
platform: event
|
||||
event_type: zwave.scene_activated
|
||||
event_data:
|
||||
entity_id: aeon_labs_minimote_1
|
||||
object_id: aeon_labs_minimote_1
|
||||
scene_id: 4
|
||||
|
||||
- alias: Minimote Button 3 Pressed
|
||||
@ -51,7 +65,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl
|
||||
platform: event
|
||||
event_type: zwave.scene_activated
|
||||
event_data:
|
||||
entity_id: aeon_labs_minimote_1
|
||||
object_id: aeon_labs_minimote_1
|
||||
scene_id: 5
|
||||
|
||||
- alias: Minimote Button 3 Held
|
||||
@ -59,7 +73,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl
|
||||
platform: event
|
||||
event_type: zwave.scene_activated
|
||||
event_data:
|
||||
entity_id: aeon_labs_minimote_1
|
||||
object_id: aeon_labs_minimote_1
|
||||
scene_id: 6
|
||||
|
||||
- alias: Minimote Button 4 Pressed
|
||||
@ -67,7 +81,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl
|
||||
platform: event
|
||||
event_type: zwave.scene_activated
|
||||
event_data:
|
||||
entity_id: aeon_labs_minimote_1
|
||||
object_id: aeon_labs_minimote_1
|
||||
scene_id: 7
|
||||
|
||||
- alias: Minimote Button 4 Held
|
||||
@ -75,10 +89,6 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl
|
||||
platform: event
|
||||
event_type: zwave.scene_activated
|
||||
event_data:
|
||||
entity_id: aeon_labs_minimote_1
|
||||
object_id: aeon_labs_minimote_1
|
||||
scene_id: 8
|
||||
```
|
||||
|
||||
##### {% linkable_title Aeotec MultiSensor 6 %}
|
||||
|
||||
In order for Home Assistant to recognize well the motion sensor, you will need to change its configuration from `Basic Set (default)` to `Binary Sensor report`. Currently there's no way to do this in Home Assistant but you can use ozwcp (OpenZWave control panel), Domoticz or similar to do it
|
||||
|
@ -92,7 +92,67 @@ Depending on what's plugged into your USB ports, the name found above may change
|
||||
|
||||
#### {% linkable_title Events %}
|
||||
|
||||
Some devices can also trigger scene activation or node events, which can be used in automation scripts (for example the press of a button on a scene enabled wall switch):
|
||||
**zwave.network_complete**
|
||||
HomeAssistant will trigger a event when the zwave network is complete. Meaning all of the nodes on the network have been queried. This can take quite som time, depending on wakeup intervals on the battery powered devices on the network.
|
||||
|
||||
```yaml
|
||||
- alias: ZWave network is complete
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: zwave.network_complete
|
||||
```
|
||||
|
||||
**zwave.network_ready**
|
||||
HomeAssistant will trigger a event when the zwave network is ready for use. Between `zwave.network_start` and `zwave.network_ready` HomeAssistant will feel sluggish when trying to send commands to zwave nodes. This is because the controller is requesting information from all of the nodes on the network. When this is triggered all awake nodes have been queried and sleeping nodes will be queried when they awake.
|
||||
|
||||
```yaml
|
||||
- alias: ZWave network is ready
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: zwave.network_ready
|
||||
```
|
||||
|
||||
**zwave.network_start**
|
||||
HomeAssistant will trigger a event when the zwave network is set up to be started.
|
||||
|
||||
```yaml
|
||||
- alias: ZWave network is starting
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: zwave.network_start
|
||||
```
|
||||
|
||||
**zwave.network_stop**
|
||||
HomeAssistant will trigger a event when the zwave network stopping.
|
||||
|
||||
```yaml
|
||||
- alias: ZWave network is stopping
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: zwave.network_start
|
||||
```
|
||||
|
||||
**zwave.node_event**
|
||||
HomeAssistant will trigger a event when command_class_basic changes value on a node.
|
||||
This can be virtually anything, so tests have to be made to determine what value equals what.
|
||||
You can use this for automations.
|
||||
|
||||
Example:
|
||||
|
||||
```yaml
|
||||
- alias: Minimote Button Pressed
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: zwave.node_event
|
||||
event_data:
|
||||
object_id: aeon_labs_minimote_1
|
||||
basic_level: 255
|
||||
```
|
||||
|
||||
The *object_id* and *basic_level* of all triggered events can be seen in the console output.
|
||||
|
||||
**zwave.scene_activated**
|
||||
Some devices can also trigger scene activation events, which can be used in automation scripts (for example the press of a button on a wall switch):
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml automation entry
|
||||
@ -106,21 +166,7 @@ automation:
|
||||
scene_id: 11
|
||||
```
|
||||
|
||||
Or a basic class device reporting it's level via a node event:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml automation entry
|
||||
automation:
|
||||
- alias: Turn on Desk light
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: zwave.node_event
|
||||
event_data:
|
||||
object_id: leviton_zwave_static_co_11
|
||||
basic_level: 255
|
||||
```
|
||||
|
||||
The *object_id*, *scene_id* (Scene Events), and *basic_level* (Node Events) of triggered events can be seen in the console output.
|
||||
The *object_id* and *scene_id* of all triggered events can be seen in the console output.
|
||||
|
||||
#### {% linkable_title Services %}
|
||||
|
||||
@ -129,8 +175,10 @@ The Z-Wave component exposes four services to help maintain the network.
|
||||
| Service | Description |
|
||||
| ------- | ----------- |
|
||||
| add_node | Put the zwave controller in inclusion mode. Allows one to add a new device to the zwave network.|
|
||||
| remove_node | Put the zwave controller in exclusion mode. Allows one to remove a device from the zwave network.|
|
||||
| add_node_secure | Put the zwave controller in secure inclusion mode. Allows one to add a new device with secure communications to the zwave network. |
|
||||
| cancel_command | Cancels a running zwave command. If you have started a add_node or remove_node command, and decides you are not going to do it, then this must be used to stop the inclusion/exclusion command. |
|
||||
| heal_network | Tells the controller to "heal" the network. Bascially asks the nodes to tell the controller all of their neighbors so the controller can refigure out optimal routing. |
|
||||
| remove_node | Put the zwave controller in exclusion mode. Allows one to remove a device from the zwave network.|
|
||||
| soft_reset | Tells the controller to do a "soft reset". This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command.|
|
||||
| test_network | Tells the controller to send no-op commands to each node and measure the time for a response. In theory, this can also bring back nodes which have been marked "presumed dead".|
|
||||
|
||||
|
@ -15,7 +15,7 @@ There are various ways to get in touch with the Home Assistant community. It doe
|
||||
|
||||
- [Forum](https://community.home-assistant.io/)
|
||||
- [Gitter Chatroom](https://gitter.im/home-assistant/home-assistant) for general Home Assistant discussions and questions.
|
||||
- Follow us on [Twitter](https://twitter.com/home_assistant), use @home_assistant
|
||||
- Follow us on [Twitter](https://twitter.com/home_assistant), use [@home_assistant](https://twitter.com/home_assistant)
|
||||
- Join the [Google+ community](https://plus.google.com/u/0/b/110560654828510104551/communities/106562234893511202708)
|
||||
- Join the [Reddit subreddit](https://reddit.com/r/homeassistant) in [/r/homeassistant](https://reddit.com/r/homeassistant)
|
||||
|
||||
@ -33,6 +33,7 @@ Have you found an issue in your Home Assistant installation? Please report it. R
|
||||
- [Home Assistant Support 101 - Getting around in Home Assistant](https://www.youtube.com/watch?v=dRfk9JAlPJk) ([Slides](https://docs.google.com/presentation/d/1PUnOpeFZxNj4LEjaohGqH_1hOGQGuS5yRHD1ThHr6nk/edit?usp=sharing)) - June 2016
|
||||
- [Awaken your home: Python and the Internet of Things](https://www.youtube.com/watch?v=Cfasc9EgbMU&list=PLKsVm4cWHDQB9JBcD7_ZfNcvC6xx47QHT&index=1) at PyCon 2016 - June 2016
|
||||
- [Automating your Home with Home Assistant](https://www.youtube.com/watch?v=4-6rTwKl6ww&list=PLKsVm4cWHDQB9JBcD7_ZfNcvC6xx47QHT&index=2) at OpenIoT 2016 - March 2016
|
||||
- [Automating Your Life - Home Automation](http://slides.com/teagan42/life_automation#/) at Develop Denver 2016 - August
|
||||
|
||||
|
||||
### {% linkable_title Roadmap %}
|
||||
|
@ -13,7 +13,7 @@ This page contains only irrelevant and unhelpful information about Home Assistan
|
||||
|
||||
### {% linkable_title Name %}
|
||||
|
||||
Unknown at the moment.
|
||||
Isn't it obvious? Home Assistant is the good soul that is assisting you in your home. It's also common to refer to Home Assistant simply as HA or hass (not to be confused with the German word "Hass", it's more like the abbreviation of **H**ome **A**ssistant **S**erver **S**ervice).
|
||||
|
||||
### {% linkable_title Website %}
|
||||
|
||||
|
BIN
source/images/blog/2016-07-laundry-automation/block-diagram.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
source/images/blog/2016-07-laundry-automation/data-graph.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
source/images/blog/2016-07-laundry-automation/protoboard.jpg
Normal file
After Width: | Height: | Size: 654 KiB |
BIN
source/images/blog/2016-07-laundry-automation/screenshot-ha.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 109 KiB |
BIN
source/images/supported_brands/fastdotcom.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
source/images/supported_brands/ffmpeg.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
source/images/supported_brands/gpsd.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
source/images/supported_brands/nzbget.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
source/images/supported_brands/pilight.png
Normal file
After Width: | Height: | Size: 18 KiB |
@ -15,8 +15,8 @@ hide_github_edit: true
|
||||
<div class="grid">
|
||||
<div class="grid__item one-third lap-one-third palm-one-whole">
|
||||
<div class='current-version material-card text'>
|
||||
<h1>Current Version: 0.25</h1>
|
||||
Released: <span class='release-date'>July 30, 2016</span>
|
||||
<h1>Current Version: 0.25.2</h1>
|
||||
Released: <span class='release-date'>August 2, 2016</span>
|
||||
|
||||
<div class='links'>
|
||||
<a href='/blog/2016/07/30/custom-frontend-panels-jupyter-notebooks-directv/'>Release notes</a>
|
||||
|
BIN
source/static/icons/favicon-192x192.png
Normal file
After Width: | Height: | Size: 15 KiB |