mirror of
https://github.com/home-assistant/home-assistant.io.git
synced 2025-07-19 07:17:14 +00:00
Merge branch 'current' into next
This commit is contained in:
commit
08f8bb589e
@ -142,13 +142,13 @@ social:
|
||||
# Home Assistant release details
|
||||
current_major_version: 0
|
||||
current_minor_version: 81
|
||||
current_patch_version: 1
|
||||
date_released: 2018-10-28
|
||||
current_patch_version: 2
|
||||
date_released: 2018-10-29
|
||||
|
||||
# Either # or the anchor link to latest release notes in the blog post.
|
||||
# Must be prefixed with a # and have double quotes around it.
|
||||
# Major release:
|
||||
patch_version_notes: "#release-0811---october-28"
|
||||
patch_version_notes: "#release-0812---october-29"
|
||||
# Minor release (Example #release-0431---april-25):
|
||||
|
||||
# Date we moved to Discourse for comments
|
||||
|
@ -81,11 +81,6 @@ header .grid {
|
||||
font-weight: normal;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
|
||||
&.show-search {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.menu > li > a:hover, .menu > li > a:focus{
|
||||
|
@ -16,6 +16,7 @@ The logic layer will be Home Assistant. There is no ReGa or other logic layer in
|
||||
Follow devices will be supported and tested:
|
||||
|
||||
- [HM-MOD-RPI-PCB](https://www.elv.ch/homematic-funkmodul-fuer-raspberry-pi-bausatz.html)
|
||||
- [HmIP-RFUSB](https://www.elv.ch/elv-homematic-ip-rf-usb-stick-hmip-rfusb-fuer-alternative-steuerungsplattformen-arr-bausatz.html)
|
||||
|
||||
```json
|
||||
{
|
||||
@ -33,6 +34,13 @@ Follow devices will be supported and tested:
|
||||
"key": "abc",
|
||||
"ip": "192.168.0.0"
|
||||
}
|
||||
],
|
||||
"hmip_enable": false,
|
||||
"hmip": [
|
||||
{
|
||||
"type": "HMIP_CCU2",
|
||||
"device": "/dev/ttyUSB0"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
@ -53,6 +61,11 @@ For wired devices:
|
||||
- **key** (*Required*): Encrypted key.
|
||||
- **ip** (*Required*): IP address of LAN gateway.
|
||||
|
||||
For HmIP devices:
|
||||
|
||||
- **type** (*Required*): Device type for RFD service. Look into the manual of your device.
|
||||
- **device** (*Required*): Device on the host.
|
||||
|
||||
## {% linkable_title Home Assistant configuration %}
|
||||
|
||||
Use the following configuration in Home Assistant to use it:
|
||||
|
@ -34,13 +34,31 @@ Set up [Mosquitto](https://mosquitto.org/) as MQTT broker.
|
||||
Make sure you use logins and disable anonymous access if you want to secure the system.
|
||||
</p>
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **plain** (*Optional*): Listen on port 1883 without SSL/TLS. Defaults to `true`.
|
||||
- **ssl** (*Optional*): Listen on port 8883 with SSL/TLS. This requires certificates. Defaults to `false`.
|
||||
- **anonymous** (*Optional*): Allow anonymous connections. If *logins* is set, the anonymous user can only read data. Defaults to `true`.
|
||||
- **logins** (*Optional*): A list of users that will be created with *username* and *password*.
|
||||
- **customize** (*Optional*): If you enable it, it reads additional configuration files (`*.conf`) from `/share/mosquitto`.
|
||||
{% configuration %}
|
||||
plain:
|
||||
description: Listen on port 1883 without SSL/TLS.
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
ssl:
|
||||
description: Listen on port 8883 with SSL/TLS. This requires certificates.
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
anonymous:
|
||||
description: Allow anonymous connections. If *logins* is set, the anonymous user can only read data.
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
logins:
|
||||
description: A list of users that will be created with *username* and *password*.
|
||||
required: false
|
||||
type: list
|
||||
customize:
|
||||
description: If you enable it, it reads additional configuration files (`*.conf`) from `/share/mosquitto`.
|
||||
required: false
|
||||
type: [boolean, string]
|
||||
{% endconfiguration %}
|
||||
|
||||
### {% linkable_title Home Assistant configuration %}
|
||||
|
||||
|
@ -12,6 +12,11 @@ featured: true
|
||||
|
||||
This add-on allows you to set up a [Samba](https://samba.org/) server to access Hass.io folders using Windows network shares.
|
||||
|
||||
<p class='note warning'>
|
||||
It is <strong>strongly recommended to set a username and password</strong>. By using guest mode, you expose your configuration and secrets to every user in local network.<br />
|
||||
Also be careful when setting up port forwarding for remote access. If you don't restrict access by setting a username and password, your configuration could be exposed to the entire internet!
|
||||
</p>
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "hassio",
|
||||
@ -35,17 +40,67 @@ This add-on allows you to set up a [Samba](https://samba.org/) server to access
|
||||
}
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **name** (*Optional*): Set netbios name of Hass.io device. Default is `hassio`.
|
||||
- **workgroup** (*Optional*): Set network workgroup name. Default is `WORKGROUP`.
|
||||
- **guest** (*Optional*): Allow login without a username or password. Default is `true`.
|
||||
- **map** (*Optional*): Control which folders will be exposed. `config` shares the Home Assistant configuration folder. `addons` shares the local custom repository. `share` shares a folder that can be accessed by add-ons and Home Assistant. `backup` shares access to snapshot files. `ssl` shares certificate storage. Be careful with the `ssl` option! Defaults are all set to `true`, except for `ssl`.
|
||||
- **username** (*Optional*): Username for logging in if guest login is not used.
|
||||
- **password** (*Optional*): Password for `username`. An empty password is not supported.
|
||||
- **interface** (*Optional*): Interface that will start the share. Normally this is `eth0` for ethernet wired connection and `wlan0` for wireless connection. If you are running on an Intel NUC this could also be `enp3s0` for ethernet or `wlp5s0` for wireless connection.
|
||||
- **allow_hosts** (*Optional*): The hosts that are allowed to connect to your Samba server. By default it is limited to people within the same local network.
|
||||
|
||||
<p class='note warning'>
|
||||
Be careful when setting up port forwarding to the remote access. If you don't restrict access by requiring authentication and guest access is enabled, your configuration could be exposed to the internet!
|
||||
</p>
|
||||
{% configuration %}
|
||||
name:
|
||||
description: Set netbios name of Hass.io device.
|
||||
required: false
|
||||
default: "`hassio`"
|
||||
type: string
|
||||
workgroup:
|
||||
description: Set network workgroup name.
|
||||
required: false
|
||||
default: "`WORKGROUP`"
|
||||
type: string
|
||||
guest:
|
||||
description: Allow login without a username or password.
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
map:
|
||||
description: Control which folders will be exposed.
|
||||
required: false
|
||||
type: map
|
||||
keys:
|
||||
config:
|
||||
description: The Home Assistant configuration folder
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
addons:
|
||||
description: The local custom addons repository
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
share:
|
||||
description: The folder that can be accessed by add-ons and Home Assistant
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
backup:
|
||||
description: Access to snapshot files
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
ssl:
|
||||
description: Certificate storage (Careful! Sharing is set to `false` by default)
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
username:
|
||||
description: Username for logging in if guest login is not used.
|
||||
required: false
|
||||
type: string
|
||||
password:
|
||||
description: Password for `username`. An empty password is not supported.
|
||||
required: false
|
||||
type: string
|
||||
interface:
|
||||
description: Interface that will start the share. Normally this is `eth0` for ethernet wired connection and `wlan0` for wireless connection. If you are running on an Intel NUC this could also be `enp3s0` for ethernet or `wlp5s0` for wireless connection.
|
||||
required: false
|
||||
type: string
|
||||
allow_hosts:
|
||||
description: The hosts that are allowed to connect to your Samba server. By default it is limited to people within the same local network.
|
||||
required: false
|
||||
default: '`["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]`'
|
||||
type: list
|
||||
{% endconfiguration %}
|
||||
|
@ -37,11 +37,16 @@ The username for login over SSH is `root`. The complete login command is `ssh ro
|
||||
|
||||
After logging in, you will find yourself in this add-on's container. The Home Assistant configuration directory is mounted on the path `/config`.
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **authorized_keys** (*Optional*): Your public keys for the authorized key file. Every element will be a line inside that file.
|
||||
- **password** (*Optional*): Set a password for login. We do **NOT** recommend this variant.
|
||||
|
||||
{% configuration %}
|
||||
authorized_keys:
|
||||
description: Your public keys for the authorized key file. Every element will be a line inside that file.
|
||||
required: false
|
||||
type: string
|
||||
password:
|
||||
description: Set a password for login. We do **NOT** recommend this variant.
|
||||
required: false
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
<div class='videoWrapper'>
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/L7PCPQYwspo" frameborder="0" allowfullscreen></iframe>
|
||||
|
@ -13,7 +13,7 @@ ha_release: 0.43
|
||||
ha_qa_scale: internal
|
||||
---
|
||||
|
||||
The `ping` binary sensor platform allows you to using `ping` to send ICMP echo requests. This way you can check if a given host is online and determine the round trip times from your Home Assistant instance to that system.
|
||||
The `ping` binary sensor platform allows you to use `ping` to send ICMP echo requests. This way you can check if a given host is online and determine the round trip times from your Home Assistant instance to that system.
|
||||
|
||||
## {% linkable_title Configuration %}
|
||||
|
||||
|
@ -28,16 +28,46 @@ cover:
|
||||
command_stop: move_command stop garage
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **covers** (*Required*): The array that contains all command line covers.
|
||||
- **identifier** (*Required*): Name of the command line cover as slug. Multiple entries are possible.
|
||||
- **command_open** (*Required*): The command to open the cover.
|
||||
- **command_close** (*Required*): The action to close the cover.
|
||||
- **command_stop** (*Required*): The action to stop the cover.
|
||||
- **command_state** (*Optional*): If given, this will act as a sensor that runs in the background and updates the state of the cover. If the command returns a `0` the indicates the cover is fully closed, whereas a 100 indicates the cover is fully open.
|
||||
- **value_template** (*optional - default: '{% raw %}{{ value }}{% endraw%}'*): if specified, `command_state` will ignore the result code of the command but the template evaluating will indicate the position of the cover. For example, if your `command_state` returns a string "open", using `value_template` as in the example config above will allow you to translate that into the valid state `100`.
|
||||
- **friendly_name** (*Optional*): The name used to display the cover in the frontend.
|
||||
{% configuration %}
|
||||
covers:
|
||||
description: The array that contains all command line covers.
|
||||
required: true
|
||||
type: list
|
||||
keys:
|
||||
identifier:
|
||||
description: Name of the command line cover as slug. Multiple entries are possible.
|
||||
required: true
|
||||
type: list
|
||||
keys:
|
||||
command_open:
|
||||
description: The command to open the cover.
|
||||
required: true
|
||||
default: true
|
||||
type: string
|
||||
command_close:
|
||||
description: The action to close the cover.
|
||||
required: true
|
||||
default: true
|
||||
type: string
|
||||
command_stop:
|
||||
description: The action to stop the cover.
|
||||
required: true
|
||||
default: true
|
||||
type: string
|
||||
command_state:
|
||||
description: If given, this will act as a sensor that runs in the background and updates the state of the cover. If the command returns a `0` the indicates the cover is fully closed, whereas a 100 indicates the cover is fully open.
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: if specified, `command_state` will ignore the result code of the command but the template evaluating will indicate the position of the cover. For example, if your `command_state` returns a string "open", using `value_template` as in the example config above will allow you to translate that into the valid state `100`.
|
||||
required: false
|
||||
default: "'{% raw %}{{ value }}{% endraw%}'"
|
||||
type: template
|
||||
friendly_name:
|
||||
description: The name used to display the cover in the frontend.
|
||||
required: false
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
|
@ -35,9 +35,6 @@ evohome:
|
||||
```
|
||||
This is a IoT cloud-polling device, and the `scan_interval` is currently fixed at 3 minutes. Testing has indicated that this is a safe interval that - by itself - shouldn't cause you to be rate-limited by Honeywell.
|
||||
|
||||
|
||||
### {% linkable_title Configuration variables %}
|
||||
|
||||
{% configuration %}
|
||||
username:
|
||||
description: The username (email address) that has access to [Honeywell Connect Comfort](https://international.mytotalconnectcomfort.com/Account/Login) web site.
|
||||
|
@ -129,7 +129,7 @@ api_key:
|
||||
required: false
|
||||
type: string
|
||||
expose_by_default:
|
||||
description: "Expose devices in all supported domains by default. If set to false, you need to either expose domains or add the expose configuration option to each entity in `entity_config` and set it to true."
|
||||
description: "Expose devices in all supported domains by default. If set to false, you need to add the expose configuration option to each entity in `entity_config` and set it to true. Setting `exposed_domains` values will _not_ expose those domains if `expose_by_default` is false."
|
||||
required: false
|
||||
default: True
|
||||
type: boolean
|
||||
|
@ -30,12 +30,25 @@ image_processing:
|
||||
Bob: /home/hass/bob.jpg
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **source** array (*Required*): List of image sources.
|
||||
- **entity_id** (*Required*): A camera entity id to get picture from.
|
||||
- **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity.
|
||||
- **faces** array (*Required*): List of faces sources.
|
||||
{% configuration %}
|
||||
source:
|
||||
description: List of image sources.
|
||||
required: true
|
||||
type: list
|
||||
keys:
|
||||
entity_id:
|
||||
description: A camera entity id to get picture from.
|
||||
required: true
|
||||
type: string
|
||||
name:
|
||||
description: This parameter allows you to override the name of your `image_processing` entity.
|
||||
required: false
|
||||
type: string
|
||||
faces:
|
||||
description: List of faces sources.
|
||||
required: true
|
||||
type: list
|
||||
{% endconfiguration %}
|
||||
|
||||
<p class='note'>
|
||||
If the platform fails to load because it could not install its requirement, install cmake: `sudo apt-get install cmake`.
|
||||
|
@ -40,18 +40,18 @@ input_select:
|
||||
required: true
|
||||
type: map
|
||||
keys:
|
||||
name:
|
||||
description: Friendly name of the input.
|
||||
required: false
|
||||
type: String
|
||||
options:
|
||||
description: List of options to choose from.
|
||||
required: true
|
||||
type: Array
|
||||
type: list
|
||||
name:
|
||||
description: Friendly name of the input.
|
||||
required: false
|
||||
type: string
|
||||
initial:
|
||||
description: Initial value when Home Assistant starts.
|
||||
required: false
|
||||
type: Element of options
|
||||
type: map
|
||||
default: First element of options
|
||||
icon:
|
||||
description: Icon to display for the component.
|
||||
|
@ -27,6 +27,9 @@ light:
|
||||
scs_id: XXXXX
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **devices** (*Required*): A list of devices with their name to use in the frontend.
|
||||
{% configuration %}
|
||||
devices:
|
||||
description: A list of devices with their name to use in the frontend.
|
||||
required: true
|
||||
type: list
|
||||
{% endconfiguration %}
|
||||
|
@ -13,7 +13,6 @@ ha_iot_class: "Local Polling"
|
||||
ha_release: "0.50"
|
||||
---
|
||||
|
||||
|
||||
The `tplink` light platform allows you to control the state of your [TP-Link smart bulb](http://www.tp-link.com/en/products/list-5609.html).
|
||||
|
||||
Supported units:
|
||||
@ -44,3 +43,15 @@ host:
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
## {% linkable_title Adding multiple lights %}
|
||||
|
||||
You may need to add [multiple lights](https://community.home-assistant.io/t/multiple-tp-link-switches/6935) and the config would need to include multiple lights separately.
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
light:
|
||||
- platform: tplink
|
||||
host: FIRST_IP_ADDRESS
|
||||
- platform: tplink
|
||||
host: SECOND_IP_ADDRESS
|
||||
```
|
||||
|
@ -55,7 +55,7 @@ The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philip
|
||||
* Eye fatigue reminder / notification (on, off)
|
||||
* Eyecare mode (on, off)
|
||||
* Attributes
|
||||
- model
|
||||
- model (Warning: set this value to philips.light.sread1)
|
||||
- scene
|
||||
- delayed_turn_off
|
||||
- night_light_mode
|
||||
|
@ -27,11 +27,21 @@ Your LiteJet MCP should be configured for 19.2 K baud, 8 data bits, 1 stop bit,
|
||||
|
||||
You can also configure the Home Assistant to ignore lights, scenes, and switches via their name. This is highly recommended since LiteJet has a fixed number of each of these and with most systems many will be unused.
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **port** (*Required*): The path to the serial port connected to the LiteJet.
|
||||
- **exclude_names** (*Optional*): A list of light or switch names that should be ignored.
|
||||
- **include_switches** (*Optional*): Cause entities to be created for all the LiteJet switches. Default is `false`. This can be useful when debugging your lighting as you can press/release switches remotely.
|
||||
{% configuration %}
|
||||
port:
|
||||
description: The path to the serial port connected to the LiteJet.
|
||||
required: true
|
||||
type: string
|
||||
exclude_names:
|
||||
description: A list of light or switch names that should be ignored.
|
||||
required: false
|
||||
type: [list, string]
|
||||
include_switches:
|
||||
description: Cause entities to be created for all the LiteJet switches. This can be useful when debugging your lighting as you can press/release switches remotely.
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
{% endconfiguration %}
|
||||
|
||||
```yaml
|
||||
litejet:
|
||||
@ -64,5 +74,4 @@ automation:
|
||||
milliseconds: 1000
|
||||
held_less_than:
|
||||
milliseconds: 2000
|
||||
...
|
||||
```
|
||||
|
@ -13,7 +13,6 @@ ha_release: 0.49
|
||||
ha_qa_scale: internal
|
||||
---
|
||||
|
||||
|
||||
The `media_extractor` component gets a stream URL and sends it to a media player entity. This component can extract entity specific streams if configured accordingly.
|
||||
|
||||
<p class='note'>
|
||||
@ -27,10 +26,17 @@ To use the media extractor service in your installation, add the following to yo
|
||||
media_extractor:
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **default_query** (*Optional*): Set default stream query for all devices ('best' by default).
|
||||
- **customize** (*Optional*): Set entity specific values. For example:
|
||||
{% configuration %}
|
||||
default_query:
|
||||
description: Set default stream query for all devices.
|
||||
required: false
|
||||
default: best
|
||||
type: string
|
||||
customize:
|
||||
description: Set entity specific values.
|
||||
required: false
|
||||
type: list
|
||||
{% endconfiguration %}
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
|
@ -23,10 +23,16 @@ media_player:
|
||||
- platform: gstreamer
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **name** (*Optional*): Name the player.
|
||||
- **pipeline** (*Optional*): `gst` pipeline description.
|
||||
{% configuration %}
|
||||
name:
|
||||
description: Name of the media player.
|
||||
required: false
|
||||
type: string
|
||||
pipeline:
|
||||
description: A `gst` pipeline description.
|
||||
required: false
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
Only the `music` media type is supported.
|
||||
|
||||
|
@ -42,11 +42,20 @@ media_player:
|
||||
name: Chromecast
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **port** (*Required*): The serial port to which Monoprice amplifier is connected
|
||||
- **zones** (*Required*): This is the list of zones available. Valid zones are 11,12,13,14,15,16. In case multiple Monoprice devices are stacked together the list of valid zones is extended by 21,22,23,24,25,26 for the second device and 31,32,33,34,35,36 for the third device. Each zone must have a name assigned to it.
|
||||
- **sources** (*Required*): The list of sources available. Valid source numbers are 1,2,3,4,5,6. Each source number corresponds to the input number on the Monoprice amplifier. Similar to zones, each source must have a name assigned to it.
|
||||
{% configuration %}
|
||||
port:
|
||||
description: The serial port to which Monoprice amplifier is connected.
|
||||
required: true
|
||||
type: string
|
||||
zones:
|
||||
description: This is the list of zones available. Valid zones are 11, 12, 13, 14, 15 or 16. In case multiple Monoprice devices are stacked together the list of valid zones is extended by 21, 22, 23, 24, 25 or 26 for the second device and 31, 32, 33, 34, 35 or 36 for the third device. Each zone must have a name assigned to it.
|
||||
required: true
|
||||
type: integer
|
||||
sources:
|
||||
description: The list of sources available. Valid source numbers are 1, 2, 3, 4, 5 or 6. Each source number corresponds to the input number on the Monoprice amplifier. Similar to zones, each source must have a name assigned to it.
|
||||
required: true
|
||||
type: integer
|
||||
{% endconfiguration %}
|
||||
|
||||
### {% linkable_title Service `snapshot` %}
|
||||
|
||||
|
@ -13,7 +13,6 @@ ha_release: 0.36
|
||||
ha_iot_class: "Local Polling"
|
||||
---
|
||||
|
||||
|
||||
The `nad` platform allows you to control a [NAD receiver](http://nadelectronics.com) through RS232 from Home Assistant.
|
||||
|
||||
To add an NAD receiver to your installation, add the following to your `configuration.yaml` file:
|
||||
@ -25,13 +24,32 @@ media_player:
|
||||
serial_port: /dev/ttyUSB0
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **serial_port** (*Required*): The serial port . Default is `/dev/ttyUSB0`
|
||||
- **name** (*Optional*): Name of the device. Default is NAD Receiver.
|
||||
- **min_volume** (*optional*): Minimum volume in dB to use with the slider. Default is `-92`
|
||||
- **max_volume** (*optional*): Maximum volume in dB to use with the slider. Default is `-20`
|
||||
- **sources** (*Optional*): A list of mappings from source to source name. Valid sources are `1 to 10`.
|
||||
{% configuration %}
|
||||
serial_port:
|
||||
description: The serial port.
|
||||
required: true
|
||||
default: "/dev/ttyUSB0"
|
||||
type: string
|
||||
name:
|
||||
description: Name of the device.
|
||||
required: false
|
||||
default: NAD Receiver
|
||||
type: string
|
||||
min_volume:
|
||||
description: Minimum volume in dB to use with the slider.
|
||||
required: false
|
||||
default: -92
|
||||
type: integer
|
||||
max_volume:
|
||||
description: Maximum volume in dB to use with the slider.
|
||||
required: false
|
||||
default: -20
|
||||
type: integer
|
||||
sources:
|
||||
description: A list of mappings from source to source name. Valid sources are `1 to 10`.
|
||||
required: false
|
||||
type: [list, string]
|
||||
{% endconfiguration %}
|
||||
|
||||
The min_volume and max_volume are there to protect you against misclicks on the slider so you will not blow up your speakers when you go from -92dB to +20dB. You can still force it to go higher or lower than the values set with the plus and minus buttons.
|
||||
|
||||
|
@ -13,7 +13,6 @@ ha_release: 0.47
|
||||
ha_iot_class: "Local Polling"
|
||||
---
|
||||
|
||||
|
||||
The `nadtcp` platform allows you to control the D7050 and C338 from Home Assistant via WiFi. Note that it has only been tested with the D 7050.
|
||||
|
||||
To add a NAD amplifier to your installation, add the following to your `configuration.yaml` file:
|
||||
@ -21,18 +20,35 @@ To add a NAD amplifier to your installation, add the following to your `configur
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
media_player:
|
||||
platform: nadtcp
|
||||
- platform: nadtcp
|
||||
host: 192.168.0.112
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **host** (*Required*): The IP address of your amplifier.
|
||||
- **name** (*Optional*): Name of the device. Default is NAD amplifier.
|
||||
- **min_volume** (*optional*): Minimum volume in dB to use with the slider. Default is `-60`
|
||||
- **max_volume** (*optional*): Maximum volume in dB to use with the slider. Default is `-10`
|
||||
- **volume_step** (*Optional*): The amount in dB you want to increase the volume with when pressing volume up/down. Default is 4 dB.
|
||||
{% configuration %}
|
||||
host:
|
||||
description: The IP address of your amplifier.
|
||||
required: true
|
||||
type: string
|
||||
name:
|
||||
description: Name of the device.
|
||||
required: false
|
||||
default: NAD amplifier
|
||||
type: string
|
||||
min_volume:
|
||||
description: Minimum volume in dB to use with the slider.
|
||||
required: false
|
||||
default: -60
|
||||
type: integer
|
||||
max_volume:
|
||||
description: Maximum volume in dB to use with the slider.
|
||||
required: false
|
||||
default: -10
|
||||
type: integer
|
||||
volume_step:
|
||||
description: The amount in dB you want to increase the volume with when pressing volume up/down.
|
||||
required: false
|
||||
default: 4
|
||||
type: integer
|
||||
{% endconfiguration %}
|
||||
|
||||
The maximum volume level of the D 7050 amplifier is +10 db, minimum is -90.
|
||||
|
||||
|
||||
|
@ -44,12 +44,26 @@ media_player:
|
||||
host: 192.168.0.10
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **host** (*Required*): The IP of the Panasonic Viera TV, e.g., `192.168.0.10`.
|
||||
- **port** (*Optional*): The port number of your Panasonic Viera TV. Defaults to `55000`.
|
||||
- **mac** (*Optional*): The MAC address of your Panasonic Viera TV, e.g., `AA:BB:CC:DD:99:1A`.
|
||||
- **name** (*Optional*): The name you would like to give to the Panasonic Viera TV.
|
||||
{% configuration %}
|
||||
host:
|
||||
description: The IP of the Panasonic Viera TV, e.g., `192.168.0.10`.
|
||||
required: true
|
||||
type: string
|
||||
port:
|
||||
description: The port number of your Panasonic Viera TV.
|
||||
required: false
|
||||
default: 55000
|
||||
type: integer
|
||||
mac:
|
||||
description: The MAC address of your Panasonic Viera TV, e.g., `AA:BB:CC:DD:99:1A`.
|
||||
required: false
|
||||
type: string
|
||||
name:
|
||||
description: The name you would like to give to the Panasonic Viera TV.
|
||||
required: false
|
||||
default: Panasonic Viera TV
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
### {% linkable_title Example `play_media` script %}
|
||||
|
||||
|
@ -46,10 +46,25 @@ media_player:
|
||||
- name: Sky+
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **host** (*Required*): The IP of the TCP gateway
|
||||
- **port** (*Required*): The port of the TCP gateway
|
||||
- **name** (*Required*): The name of the device
|
||||
- **zones** (*Required*): This is the list of zones available
|
||||
- **sources** (*Required*): The list of sources available, these must be in order as they are connected to the device
|
||||
{% configuration %}
|
||||
host:
|
||||
description: The IP of the TCP gateway.
|
||||
required: true
|
||||
type: string
|
||||
port:
|
||||
description: The port of the TCP gateway.
|
||||
required: true
|
||||
type: integer
|
||||
name:
|
||||
description: The name of the device.
|
||||
required: true
|
||||
type: string
|
||||
zones:
|
||||
description: This is the list of zones available.
|
||||
required: true
|
||||
type: integer
|
||||
sources:
|
||||
description: The list of sources available, these must be in order as they are connected to the device.
|
||||
required: true
|
||||
type: list
|
||||
{% endconfiguration %}
|
||||
|
@ -59,52 +59,53 @@ Currently known supported models:
|
||||
|
||||
- C7700
|
||||
- D5500
|
||||
- D6300SF
|
||||
- D6500
|
||||
- D6505
|
||||
- D7000
|
||||
- D8000
|
||||
- EH5300
|
||||
- EH5600
|
||||
- ES5500
|
||||
- ES6800
|
||||
- F6300
|
||||
- F6500
|
||||
- EH5300
|
||||
- EH5600
|
||||
- F6400AF
|
||||
- F6400
|
||||
- F6400AF
|
||||
- F6500
|
||||
- F8000BF
|
||||
- D6505
|
||||
- D6300SF
|
||||
- U6000 (port must be set to 8001)
|
||||
- U6300 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- K5579 (port must be set to 8001, On/Off, Forward/Backward, Volume control, but no Play button)
|
||||
- K5600AK (partially supported, turn on works but state is not updated)
|
||||
- K6500AF (port must be set to 8001)
|
||||
- KS7005 (port must be set to 8001, and `pip3 install websocket-client` must be executed, MAC address must be provided, On/Off, Volume are OK, no channel change)
|
||||
- KS7502 (port must be set to 8001, and `pip3 install websocket-client` must be executed, turn on doesn't work, turn off works fine)
|
||||
- KS8000 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- KS8005 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- KU6020 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- KU6100 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- KU6290 (port must be set to 8001)
|
||||
- KU7000 (port must be set to 8001)
|
||||
- NU8000
|
||||
- MU6170UXZG (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- KS7502 (port must be set to 8001, and `pip3 install websocket-client` must be executed, turn on doesn't work, turn off works fine)
|
||||
- K5600AK (partially supported, turn on works but state is not updated)
|
||||
- M5620 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- UE65KS8005 (port must be set to 8001, On/Off, Forward/Backward, Volume are OK, but no Play button)
|
||||
- UE6199UXZG (port must be set to 8001, On/Off, Forward/Backward, Volume control, but no Play button)
|
||||
- Q7F (port must be set to 8001, MAC must be specified for Power On)
|
||||
- UE40KU6400U (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- MU6170UXZG (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- NU7400 (port set to 8001 and `pip3 install websocket-client` executed)
|
||||
- NU8000
|
||||
- Q7F (port must be set to 8001, MAC must be specified for Power On)
|
||||
- U6000 (port must be set to 8001)
|
||||
- U6300 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- UE40KU6400U (port must be set to 8001, and `pip3 install websocket-client` must be executed)
|
||||
- UE46D7000
|
||||
- UE6199UXZG (port must be set to 8001, On/Off, Forward/Backward, Volume control, but no Play button)
|
||||
- UE65KS8005 (port must be set to 8001, On/Off, Forward/Backward, Volume are OK, but no Play button)
|
||||
|
||||
Currently tested but not working models:
|
||||
|
||||
- J5200 - Unable to see state and unable to control
|
||||
- J5500 - State is always "on" and unable to control (but port 8001 *is* open)
|
||||
- J6300 - State is always "on" and unable to control (but port 8001 *is* open)
|
||||
- JU7000 - Unable to see state and unable to control (but port 8001 *is* open)
|
||||
- JU7500 - Unable to see state and unable to control
|
||||
- JS8005 - State tracking working but unable to control (but port 8001 *is* open)
|
||||
- JS9000 - State is always "on" and unable to control (but port 8001 *is* open)
|
||||
- JS9500 - State is always "on" and unable to control (but port 8001 *is* open)
|
||||
- JU7000 - Unable to see state and unable to control (but port 8001 *is* open)
|
||||
- JU7500 - Unable to see state and unable to control
|
||||
- MU6300 - Port set to 8001, `pip3 install websocket-client` must be executed, turning on works, status not working reliably, turning off is not permanent (it comes back on)
|
||||
|
||||
None of the 2014 (H) and 2015 (J) model series (e.g., J5200) will work,
|
||||
|
@ -27,19 +27,48 @@ mqtt_statestream:
|
||||
publish_timestamps: true
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **base_topic** (*Required*): Base topic used to generate the actual topic used to publish.
|
||||
- **publish_attributes** (*Optional*): Publish attributes of the entity as well as the state.
|
||||
Default is false.
|
||||
- **publish_timestamps** (*Optional*): Publish the last_changed and last_updated timestamps for the entity.
|
||||
Default is false.
|
||||
- **exclude** (*Optional*): Configure which components should be excluded from recordings. See *Include/Exclude* section below for details.
|
||||
- **entities** (*Optional*): The list of entity ids to be excluded from recordings.
|
||||
- **domains** (*Optional*): The list of domains to be excluded from recordings.
|
||||
- **include** (*Optional*): Configure which components should be included in recordings. If set, all other entities will not be recorded.
|
||||
- **entities** (*Optional*): The list of entity ids to be included from recordings.
|
||||
- **domains** (*Optional*): The list of domains to be included from recordings.
|
||||
{% configuration %}
|
||||
base_topic:
|
||||
description: Base topic used to generate the actual topic used to publish.
|
||||
required: true
|
||||
type: string
|
||||
publish_attributes:
|
||||
description: Publish attributes of the entity as well as the state.
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
publish_timestamps:
|
||||
description: Publish the last_changed and last_updated timestamps for the entity.
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
exclude:
|
||||
description: Configure which components should be excluded from recordings. See *Include/Exclude* section below for details.
|
||||
required: false
|
||||
type: list
|
||||
keys:
|
||||
entities:
|
||||
description: The list of entity ids to be excluded from recordings.
|
||||
required: false
|
||||
type: list
|
||||
domains:
|
||||
description: The list of domains to be excluded from recordings.
|
||||
required: false
|
||||
type: list
|
||||
include:
|
||||
description: Configure which components should be included in recordings. If set, all other entities will not be recorded.
|
||||
required: false
|
||||
type: list
|
||||
keys:
|
||||
entities:
|
||||
description: The list of entity ids to be included from recordings.
|
||||
required: false
|
||||
type: list
|
||||
domains:
|
||||
description: The list of domains to be included from recordings.
|
||||
required: false
|
||||
type: list
|
||||
{% endconfiguration %}
|
||||
|
||||
## Operation
|
||||
|
||||
|
@ -11,11 +11,16 @@ ha_category: Notifications
|
||||
ha_release: 0.31
|
||||
---
|
||||
|
||||
|
||||
The `apns` platform uses the Apple Push Notification service (APNS) to deliver notifications from Home Assistant.
|
||||
|
||||
## {% linkable_title Setup %}
|
||||
|
||||
To use the APNS service you will need an Apple developer account and you will need to create an app to receive push notifications. For more information, see the Apple developer documentation.
|
||||
|
||||
## {% linkable_title Configuration %}
|
||||
|
||||
To enable APNS notifications, add the following lines to your `configuration.yaml`:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
notify:
|
||||
@ -25,22 +30,35 @@ notify:
|
||||
topic: topic
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **name** (*Required*): The name of the notifier. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
- **cert_file** (*Required*): The certificate to use to authenticate with the APNS service.
|
||||
- **topic** (*Required*): The app bundle ID specified in the certificate.
|
||||
- **sandbox** (*Optional*): If true notifications will be sent to the sandbox (test) notification service. Default false.
|
||||
{% configuration %}
|
||||
name:
|
||||
description: he name of the notifier. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
required: true
|
||||
type: string
|
||||
cert_file:
|
||||
description: The certificate to use to authenticate with the APNS service.
|
||||
required: true
|
||||
type: string
|
||||
topic:
|
||||
description: The app bundle ID specified in the certificate.
|
||||
required: true
|
||||
type: string
|
||||
sandbox:
|
||||
description: If true notifications will be sent to the sandbox (test) notification service.
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
{% endconfiguration %}
|
||||
|
||||
The APNS platform will register two services, `notify.NOTIFIER_NAME` and `notify.apns_NOTIFIER_NAME`.
|
||||
|
||||
### notify.apns_NOTIFIER_NAME
|
||||
### {% linkable_title notify.apns_NOTIFIER_NAME %}
|
||||
|
||||
This service will register device IDs with Home Assistant. In order to receive a notification a device must be registered. The app on the device can use this service to send an ID to Home Assistant during startup, the ID will be stored in `[NOTIFIER_NAME]_apns.yaml`.
|
||||
|
||||
See `didRegisterForRemoteNotificationsWithDeviceToken` in the [Apple developer documentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/#//apple_ref/occ/intfm/UIApplicationDelegate/application:didRegisterForRemoteNotificationsWithDeviceToken:) for more information about how to obtain a device ID.
|
||||
|
||||
### notify.NOTIFIER_NAME
|
||||
### {% linkable_title notify.NOTIFIER_NAME %}
|
||||
|
||||
This service will send messages to a registered device. The following parameters can be used:
|
||||
|
||||
|
@ -32,13 +32,30 @@ notify:
|
||||
region_name: 'us-east-1'
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **aws_access_key_id** (*Required if aws_secret_access_key is provided*): Your AWS Access Key ID. If provided, you must also provide an `aws_secret_access_key` and must **not** provide a `profile_name`.
|
||||
- **aws_secret_access_key** (*Required if aws_access_key_id is provided*): Your AWS Secret Access Key. If provided, you must also provide an `aws_access_key_id` and must **not** provide a `profile_name`.
|
||||
- **profile_name** (*Optional*): A credentials profile name.
|
||||
- **region_name** (*Required*): The region identifier to connect to. The default is `us-east-1`.
|
||||
- **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
{% configuration %}
|
||||
aws_access_key_id:
|
||||
description: Your AWS Access Key ID. If provided, you must also provide an `aws_secret_access_key` and must **not** provide a `profile_name`.
|
||||
required: Required if aws_secret_access_key is provided
|
||||
type: string
|
||||
aws_secret_access_key:
|
||||
description: Your AWS Secret Access Key. If provided, you must also provide an `aws_access_key_id` and must **not** provide a `profile_name`.
|
||||
required: Required if aws_access_key_id is provided
|
||||
type: string
|
||||
profile_name:
|
||||
description: A credentials profile name.
|
||||
required: false
|
||||
type: string
|
||||
region_name:
|
||||
description: The region identifier to connect to.
|
||||
required: true
|
||||
default: us-east-1
|
||||
type: string
|
||||
name:
|
||||
description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
required: false
|
||||
default: notify
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
### {% linkable_title Usage %}
|
||||
|
||||
|
@ -32,11 +32,20 @@ notify:
|
||||
roomid: CISCO_SPARK_ROOMID
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
- **token** (*Required*): Your development token.
|
||||
- **roomid** (*Required*): The Room ID.
|
||||
{% configuration %}
|
||||
name:
|
||||
description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
required: false
|
||||
default: notify
|
||||
type: string
|
||||
token:
|
||||
description: Your development token.
|
||||
required: true
|
||||
type: string
|
||||
roomid:
|
||||
description: The Room ID.
|
||||
required: true
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
To use notifications, please see the [getting started with automation page](/getting-started/automation/).
|
||||
|
||||
|
@ -13,7 +13,6 @@ ha_release: 0.55
|
||||
redirect_from: /components/notify.clicksendaudio/
|
||||
---
|
||||
|
||||
|
||||
The `clicksend_tts` platform uses [ClickSend](https://clicksend.com) to deliver text-to-speech (TTS) notifications from Home Assistant.
|
||||
|
||||
Go to your [ClickSend Dashboard](https://dashboard.clicksend.com) section and create your new project. After creating your project, you should now be able to obtain your `username` and `api_key`.
|
||||
@ -29,14 +28,34 @@ notify:
|
||||
recipient: PHONE_NO
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
* **name** (Optional): Setting the optional parameter name allows multiple notifiers to be created. The default value is `ClickSend`. The notifier will bind to the service notify.NOTIFIER_NAME.
|
||||
* **username** (Required): Your username.
|
||||
* **api_key** (Required): Your API Key.
|
||||
* **recipient** (Required): Your phone number. This is where you want to send your notification SMS messages (e.g., `09171234567`)
|
||||
* **language** (Optional): The language you want to use to convert the message to audio. Accepted values are found in the [ClickSend Documentation](http://docs.clicksend.apiary.io/#reference/voice/voice-languages). Default value is `en-us`.
|
||||
* **voice** (Optional): The voice that needs to be used to play the message to the recipient. Allowed values are `female` or `male`. Default value is `female`.
|
||||
{% configuration %}
|
||||
name:
|
||||
description: Setting the optional parameter name allows multiple notifiers to be created. The notifier will bind to the service notify.NOTIFIER_NAME.
|
||||
required: false
|
||||
default: ClickSend
|
||||
type: string
|
||||
username:
|
||||
description: Your username.
|
||||
required: true
|
||||
type: string
|
||||
api_key:
|
||||
description: Your API Key.
|
||||
required: true
|
||||
type: string
|
||||
recipient:
|
||||
description: Your phone number. This is where you want to send your notification SMS messages (e.g., `09171234567`).
|
||||
required: true
|
||||
type: string
|
||||
language:
|
||||
description: The language you want to use to convert the message to audio. Accepted values are found in the [ClickSend Documentation](http://docs.clicksend.apiary.io/#reference/voice/voice-languages).
|
||||
required: false
|
||||
default: en-us
|
||||
type: string
|
||||
voice:
|
||||
description: The voice that needs to be used to play the message to the recipient. Allowed values are `female` or `male`.
|
||||
required: false
|
||||
default: female
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
To use notifications, please see the [getting started with automation page](/getting-started/automation/).
|
||||
|
||||
|
@ -42,13 +42,28 @@ notify:
|
||||
default_channel: '#general'
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
- **api_key** (*Required*): The Slack API token to use for sending Slack messages.
|
||||
- **default_channel** (*Required*): The default channel to post to if no channel is explicitly specified when sending the notification message. A channel can be specified adding a target attribute to the json at the same level as "message"
|
||||
- **username** (*Optional*): Setting username will allow Home Assistant to post to Slack using the username specified. By default not setting this will post to Slack using the user account or botname that you generated the api_key as.
|
||||
- **icon** (*Optional*): Use one of the Slack emojis as an Icon for the supplied username. Slack uses the standard emoji sets used [here](http://www.webpagefx.com/tools/emoji-cheat-sheet/).
|
||||
{% configuration %}
|
||||
name:
|
||||
description: Setting this parameter allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
required: false
|
||||
default: "notify"
|
||||
api_key:
|
||||
description: The Slack API token to use for sending Slack messages.
|
||||
required: true
|
||||
type: string
|
||||
default_channel:
|
||||
description: The default channel to post to if no channel is explicitly specified when sending the notification message. A channel can be specified adding a target attribute to the JSON at the same level as "message".
|
||||
required: true
|
||||
type: string
|
||||
username:
|
||||
description: Home Assistant will post to Slack using the username specified.
|
||||
required: false
|
||||
type: string
|
||||
default: The user account or botname that you generated the API key as.
|
||||
icon:
|
||||
description: Use one of the Slack emojis as an Icon for the supplied username. Slack uses the standard emoji sets used [here](http://www.webpagefx.com/tools/emoji-cheat-sheet/).
|
||||
required: false
|
||||
{% endconfiguration %}
|
||||
|
||||
### {% linkable_title Slack service data %}
|
||||
|
||||
|
@ -48,13 +48,31 @@ proximity:
|
||||
unit_of_measurement: mi
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **zone** (*Optional*): The zone to which this component is measuring the distance to. Default is the home zone.
|
||||
- **ignored_zones** array (*Optional*): Where proximity is not calculated for a device (either the device being monitored or ones being compared (e.g., work or school).
|
||||
- **devices** array (*Optional*): A list of devices to compare location against to check closeness to the configured zone.
|
||||
- **tolerance** (*Optional*): The tolerance used to calculate the direction of travel in meters (m) to filter out small GPS coordinate changes.
|
||||
- **unit_of_measurement** (*Optional*): The unit of measurement for distance. Valid values are (km, m, mi, ft) [kilometers, meters, miles and feet respectively]. The default value is kilometers.
|
||||
{% configuration %}
|
||||
proximity:
|
||||
zone:
|
||||
description: The zone to which this component is measuring the distance to. Default is the home zone.
|
||||
required: false
|
||||
type: map
|
||||
keys:
|
||||
ignored_zones:
|
||||
description: Where proximity is not calculated for a device (either the device being monitored or ones being compared (e.g., work or school).
|
||||
required: false
|
||||
type: list
|
||||
devices:
|
||||
description: A list of devices to compare location against to check closeness to the configured zone.
|
||||
required: false
|
||||
type: list
|
||||
tolerance:
|
||||
description: The tolerance used to calculate the direction of travel in meters (m) to filter out small GPS coordinate changes.
|
||||
required: false
|
||||
type: integer
|
||||
unit_of_measurement:
|
||||
description: The unit of measurement for distance. Valid values are (km, m, mi, ft) [kilometers, meters, miles and feet respectively].
|
||||
required: false
|
||||
type: string
|
||||
default: km
|
||||
{% endconfiguration %}
|
||||
|
||||
To add multiple proximity components, simply use a list in your `configuration.yaml` file:
|
||||
|
||||
|
@ -27,17 +27,47 @@ rest_command:
|
||||
url: 'http://example.com/'
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **[service_name]** (*Required*): The name used to expose the service. E.g., in the above example, it would be `rest_command.example_request`.
|
||||
- **url** (*Required*): The URL (support template) for sending request.
|
||||
- **method** (*Optional*): HTTP method to use (`get`, `post`, `put`, or `delete`). Defaults to `get`.
|
||||
- **headers** (*Optional*): The headers for the requests.
|
||||
- **payload** (*Optional*): A string/template to send with request.
|
||||
- **username** (*Optional*): The username for HTTP authentication.
|
||||
- **password** (*Optional*): The password for HTTP authentication.
|
||||
- **timeout** (*Optional*): Timeout for requests. Defaults to 10 seconds.
|
||||
- **content_type** (*Optional*): Content type for the request.
|
||||
{% configuration %}
|
||||
service_name:
|
||||
description: The name used to expose the service. E.g., in the above example, it would be 'rest_command.service_name'.
|
||||
required: true
|
||||
type: map
|
||||
keys:
|
||||
url:
|
||||
description: The URL (supports template) for sending request.
|
||||
required: true
|
||||
type: [string, template]
|
||||
method:
|
||||
description: HTTP method to use (get, post, put, or delete).
|
||||
required: false
|
||||
default: get
|
||||
type: string
|
||||
headers:
|
||||
description: The headers for the requests.
|
||||
required: false
|
||||
type: list
|
||||
payload:
|
||||
description: A string/template to send with request.
|
||||
required: false
|
||||
type: [string, template]
|
||||
username:
|
||||
description: The username for HTTP authentication.
|
||||
required: false
|
||||
type: string
|
||||
password:
|
||||
description: The password for HTTP authentication.
|
||||
required: false
|
||||
type: string
|
||||
timeout:
|
||||
description: Timeout for requests in seconds.
|
||||
required: false
|
||||
type: string
|
||||
defaut: 10
|
||||
content_type:
|
||||
description: Content type for the request.
|
||||
required: false
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
|
@ -116,6 +116,6 @@ script:
|
||||
|
||||
### {% linkable_title In the Overview %}
|
||||
|
||||
Scripts in the Overview panel will be displayed with an **ACTIVATE** button if the device has no `delay:` or `wait:` statement, and as a toggle switch if it has either of those.
|
||||
Scripts in the Overview panel will be displayed with an **EXECUTE** button if the device has no `delay:` or `wait:` statement, and as a toggle switch if it has either of those.
|
||||
|
||||
This is to enable you to stop a running script.
|
||||
|
@ -26,14 +26,32 @@ sensor:
|
||||
radius: <your radius>
|
||||
```
|
||||
|
||||
Configuration options for the Crime Reports Sensor:
|
||||
|
||||
- **name** (*Required*): Name the sensor whatever you want.
|
||||
- **radius** (*Required*): Radius in meters.
|
||||
- **latitude** (*Optional*): Defaults to your home zone latitude.
|
||||
- **longitude** (*Optional*): Defaults to your home zone longitude.
|
||||
- **include** (*Optional*): List of incident types to include.
|
||||
- **exclude** (*Optional*): List of incident types to exclude.
|
||||
{% configuration %}
|
||||
name:
|
||||
description: Custom name for the sensor.
|
||||
required: true
|
||||
type: string
|
||||
radius:
|
||||
description: Radius in meters
|
||||
required: true
|
||||
type: float
|
||||
latitude:
|
||||
description: Latitude for sensor.
|
||||
required: false
|
||||
default: Your home zone latitude defined in your configuration.
|
||||
longitude:
|
||||
description: Longitude for sensor.
|
||||
required: false
|
||||
default: Your home zone longitude defined in your configuration.
|
||||
include:
|
||||
description: List of incident types to include. See below for a list of valid incidents.
|
||||
required: false
|
||||
type: list
|
||||
exclude:
|
||||
description: List of incident types to exclude. See below for a list of valid incidents.
|
||||
required: false
|
||||
type: list
|
||||
{% endconfiguration %}
|
||||
|
||||
|
||||
## {% linkable_title Notes %}
|
||||
|
@ -13,7 +13,6 @@ ha_iot_class: "Local Polling"
|
||||
ha_release: 0.17
|
||||
---
|
||||
|
||||
|
||||
The `gtfs` sensor will give you the next departure time and associated data from your public transit station/stop. The data comes from your chosen public transit authority and is formatted as [General Transit Feed Specification](https://developers.google.com/transit/gtfs/) data, commonly known as GTFS.
|
||||
|
||||
You need to find a valid GTFS data set, which you can usually find just by searching the internet. Most public transit authorities have GTFS available somewhere, as Google requires public transit authorities to provide the data if they wish to appear on Google Maps. You may also be able to find data at either [TransitFeeds](http://transitfeeds.com/feeds) or [GTFS Data Exchange](http://www.gtfs-data-exchange.com/).
|
||||
@ -49,11 +48,27 @@ sensor:
|
||||
data: DATA_SOURCE
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **origin** (*Required*): The stop ID of your origin station.
|
||||
- **destination** (*Required*): The stop ID of your destination station.
|
||||
- **data** (*Required*): The name of the ZIP file or folder containing the GTFS data. It must be located inside the `gtfs` folder of your configuration directory.
|
||||
- **name** (*Optional*): Name to use in the frontend.
|
||||
- **offset** (*Optional*): A minimum delay to look for. If a departure is in less time than `offset`, it will be ignored. Defaults to `0`.
|
||||
|
||||
{% configuration %}
|
||||
origin:
|
||||
description: The stop ID of your origin station.
|
||||
required: true
|
||||
type: string
|
||||
destination:
|
||||
description: The stop ID of your destination station.
|
||||
required: true
|
||||
type: string
|
||||
data:
|
||||
description: The name of the ZIP file or folder containing the GTFS data. It must be located inside the `gtfs` folder of your configuration directory.
|
||||
required: true
|
||||
type: string
|
||||
name:
|
||||
description: Name to use in the frontend.
|
||||
required: false
|
||||
default: GTFS Sensor
|
||||
type: string
|
||||
offset:
|
||||
description: A minimum delay to look for. If a departure is in less time than `offset`, it will be ignored.
|
||||
required: false
|
||||
default: 0
|
||||
type: [integer, time]
|
||||
{% endconfiguration %}
|
||||
|
@ -28,6 +28,7 @@ Examples of what you can track:
|
||||
|
||||
To enable the history statistics sensor, add the following lines to your `configuration.yaml`:
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
@ -36,20 +37,43 @@ sensor:
|
||||
entity_id: light.my_lamp
|
||||
state: 'on'
|
||||
type: time
|
||||
start: '{% raw %}{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}{% endraw %}'
|
||||
end: '{% raw %}{{ now() }}{% endraw %}'
|
||||
start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
|
||||
end: '{{ now() }}'
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **entity_id** (*Required*): The entity you want to track
|
||||
- **state** (*Required*): The state you want to track
|
||||
- **name** (*Optional*): Name displayed on the frontend
|
||||
- **type** (*Optional*): The type of sensor: `time`, `ratio`, or `count`. Defaults to `time`
|
||||
- **start**: When to start the measure (timestamp or datetime).
|
||||
- **end**: When to stop the measure (timestamp or datetime)
|
||||
- **duration**: Duration of the measure
|
||||
|
||||
{% configuration %}
|
||||
entity_id:
|
||||
description: The entity you want to track.
|
||||
required: true
|
||||
type: string
|
||||
state:
|
||||
description: The state you want to track.
|
||||
required: true
|
||||
type: string
|
||||
name:
|
||||
description: Name displayed on the frontend.
|
||||
required: false
|
||||
default: unnamed statistics
|
||||
type: string
|
||||
type:
|
||||
description: "The type of sensor: `time`, `ratio`, or `count`."
|
||||
required: false
|
||||
default: time
|
||||
type: string
|
||||
start:
|
||||
description: When to start the measure (timestamp or datetime).
|
||||
required: false
|
||||
type: template
|
||||
end:
|
||||
description: When to stop the measure (timestamp or datetime).
|
||||
required: false
|
||||
type: template
|
||||
duration:
|
||||
description: Duration of the measure.
|
||||
required: false
|
||||
type: time
|
||||
{% endconfiguration %}
|
||||
|
||||
<p class='note'>
|
||||
You have to provide **exactly 2** of `start`, `end` and `duration`.
|
||||
@ -74,7 +98,6 @@ The `history_stats` component will execute a measure within a precise time perio
|
||||
|
||||
As `start` and `end` variables can be either datetimes or timestamps, you can configure almost any period you want.
|
||||
|
||||
|
||||
### {% linkable_title Duration %}
|
||||
|
||||
The duration variable is used when the time period is fixed. Different syntaxes for the duration are supported, as shown below.
|
||||
@ -103,49 +126,62 @@ Here are some examples of periods you could work with, and what to write in your
|
||||
|
||||
**Today**: starts at 00:00 of the current day and ends right now.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
start: '{% raw %}{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}{% endraw %}'
|
||||
end: '{% raw %}{{ now() }}{% endraw %}'
|
||||
start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
|
||||
end: '{{ now() }}'
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
**Yesterday**: ends today at 00:00, lasts 24 hours.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
end: '{% raw %}{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}{% endraw %}'
|
||||
end: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
|
||||
duration:
|
||||
hours: 24
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
**This morning (6AM - 11AM)**: starts today at 6, lasts 5 hours.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
start: '{% raw %}{{ now().replace(hour=6).replace(minute=0).replace(second=0) }}{% endraw %}'
|
||||
start: '{{ now().replace(hour=6).replace(minute=0).replace(second=0) }}'
|
||||
duration:
|
||||
hours: 5
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
**Current week**: starts last Monday at 00:00, ends right now.
|
||||
|
||||
Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekday (86400 is the number of seconds in one day, the weekday is 0 on Monday, 6 on Sunday).
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
start: '{% raw %}{{ as_timestamp( now().replace(hour=0).replace(minute=0).replace(second=0) ) - now().weekday() * 86400 }}{% endraw %}'
|
||||
end: '{% raw %}{{ now() }}{% endraw %}'
|
||||
start: '{{ as_timestamp( now().replace(hour=0).replace(minute=0).replace(second=0) ) - now().weekday() * 86400 }}'
|
||||
end: '{{ now() }}'
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
**Last 30 days**: ends today at 00:00, lasts 30 days. Easy one.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
end: '{% raw %}{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}{% endraw %}'
|
||||
end: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}'
|
||||
duration:
|
||||
days: 30
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
**All your history** starts at timestamp = 0, and ends right now.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
start: '{% raw %}{{ 0 }}{% endraw %}'
|
||||
end: '{% raw %}{{ now() }}{% endraw %}'
|
||||
start: '{{ 0 }}'
|
||||
end: '{{ now() }}'
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
<p class='note'>
|
||||
The `/dev-template` page of your home-assistant UI can help you check if the values for `start`, `end` or `duration` are correct. If you want to check if your period is right, just click on your component, the `from` and `to` attributes will show the start and end of the period, nicely formatted.
|
||||
|
@ -13,7 +13,6 @@ ha_release: 0.27
|
||||
ha_iot_class: depends
|
||||
---
|
||||
|
||||
|
||||
The `mqtt_room` sensor platform allows you to detect the indoor location of devices using MQTT clients.
|
||||
|
||||
## {% linkable_title Configuration %}
|
||||
@ -31,13 +30,32 @@ sensor:
|
||||
away_timeout: 60
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **device_id** (*Required*): The device id to track for this sensor.
|
||||
- **name** (*Optional*): The name of the sensor.
|
||||
- **state_topic** (*Optional*): The topic that contains all subtopics for the rooms.
|
||||
- **timeout** (*Optional*): The time in seconds after which a room presence state is considered old. An example: device1 is reported at scanner1 with a distance of 1. No further updates are sent from scanner1. After 5 seconds scanner2 reports device1 with a distance of 2. The old location info is discarded in favor of the new scanner2 information as the timeout has passed.
|
||||
- **away_timeout** (*Optional*): The time in seconds after which the state should be set to `not_home` if there were no updates. `0` disables the check and is the default.
|
||||
{% configuration %}
|
||||
device_id:
|
||||
description: The device id to track for this sensor.
|
||||
required: true
|
||||
type: string
|
||||
name:
|
||||
description: The name of the sensor.
|
||||
required: false
|
||||
default: Room Sensor
|
||||
type: string
|
||||
state_topic:
|
||||
description: The topic that contains all subtopics for the rooms.
|
||||
required: false
|
||||
default: room_presence
|
||||
type: string
|
||||
timeout:
|
||||
description: "The time in seconds after which a room presence state is considered old. An example: device1 is reported at scanner1 with a distance of 1. No further updates are sent from scanner1. After 5 seconds scanner2 reports device1 with a distance of 2. The old location info is discarded in favor of the new scanner2 information as the timeout has passed."
|
||||
required: false
|
||||
default: 5
|
||||
type: integer
|
||||
away_timeout:
|
||||
description: The time in seconds after which the state should be set to `not_home` if there were no updates. `0` disables the check.
|
||||
required: false
|
||||
default: 0
|
||||
type: integer
|
||||
{% endconfiguration %}
|
||||
|
||||
Example JSON that should be published to the room topics:
|
||||
|
||||
|
@ -27,16 +27,43 @@ sensor:
|
||||
- station: STATION_OR_STOP_NAME
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **station** (*Required*): Name of the stop or station. Visit [the MVG live web site](http://www.mvg-live.de) to find valid names.
|
||||
- **destinations** (*Optional*): One or multiple final stop names, e.g., 'Feldmoching' or ['Feldmoching','Harthof']. This can be used to only consider a particular direction of travel
|
||||
- **directions** (*Optional*): Filter by direction of the departure. For Tram, Bus, SEV, and S-Bahn, direction = direction. For U-Bahn trains, directions are more general. For U1, U2, U3 and U6, direction='1' indicates south-bound trains, direction='2' indicates northbound trains. For U4 and U5, direction='1' indicates east-bound trains, direction='2' indicates west-bound trains. For example, setting directions: '1' can be used to get all south-bound trains at Scheidplatz.
|
||||
- **lines** (*Optional*): One or more line numbers, e.g., 'U2' or ['U2','U8','N41']
|
||||
- **products** (*Optional*): One or more modes of transport, defaults to all 4 modes ['U-Bahn', 'Tram', 'Bus', 'S-Bahn'].
|
||||
- **timeoffset** (*Optional*): Do not display departures leaving sooner than this number of minutes (defaults to 0). Useful if you are a couple of minutes away from the stop.
|
||||
- **number** (*Optional*): Store a list of departures in the attribute "departures", defaults to 1. If you set this parameter to 3, the next three departures will be stored.
|
||||
- **name** (*Optional*): You can customize the name of the sensor, which defaults to the station name.
|
||||
{% configuration %}
|
||||
station:
|
||||
description: Name of the stop or station. Visit [the MVG live web site](http://www.mvg-live.de) to find valid names.
|
||||
required: true
|
||||
type: string
|
||||
destinations:
|
||||
description: One or multiple final stop names, e.g., 'Feldmoching' or ['Feldmoching','Harthof']. This can be used to only consider a particular direction of travel.
|
||||
required: false
|
||||
type: list
|
||||
directions:
|
||||
description: "Filter by direction of the departure. For Tram, Bus, SEV, and S-Bahn, direction = direction. For U-Bahn trains, directions are more general. For U1, U2, U3 and U6, direction='1' indicates south-bound trains, direction='2' indicates northbound trains. For U4 and U5, direction='1' indicates east-bound trains, direction='2' indicates west-bound trains. For example, setting directions: '1' can be used to get all south-bound trains at Scheidplatz."
|
||||
required: false
|
||||
type: list
|
||||
lines:
|
||||
description: One or more line numbers, e.g., 'U2' or ['U2','U8','N41'].
|
||||
required: false
|
||||
type: list
|
||||
products:
|
||||
description: One or more modes of transport.
|
||||
required: false
|
||||
default: all 4 modes ['U-Bahn', 'Tram', 'Bus', 'S-Bahn']
|
||||
type: list
|
||||
timeoffset:
|
||||
description: Do not display departures leaving sooner than this number of minutes. Useful if you are a couple of minutes away from the stop.
|
||||
required: false
|
||||
default: 0
|
||||
type: integer
|
||||
number:
|
||||
description: Store a list of departures in the attribute "departures". If you set this parameter to 3, the next three departures will be stored.
|
||||
required: false
|
||||
default: 1
|
||||
type: integer
|
||||
name:
|
||||
description: You can customize the name of the sensor, which defaults to the station name.
|
||||
required: false
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
|
@ -29,7 +29,8 @@ The 1-Wire bus can be connected directly to the IO pins of Raspberry Pi or using
|
||||
|
||||
## {% linkable_title Raspberry Pi setup %}
|
||||
|
||||
In order to setup 1-Wire support on Raspberry Pi, you'll need to edit `/boot/config.txt` following [this documentation](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor#Enable_1-Wire). Don't use the `mount_dir` option.
|
||||
In order to setup 1-Wire support on Raspberry Pi, you'll need to edit `/boot/config.txt` following [this documentation](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor#Enable_1-Wire).
|
||||
To edit `/boot/config.txt` on Hass.io use [this documentation](https://developers.home-assistant.io/docs/en/hassio_debugging.html) to enable SSH and edit `/mnt/boot/config.txt` via `vi`.
|
||||
|
||||
## {% linkable_title Interface adapter setup %}
|
||||
|
||||
|
@ -27,8 +27,12 @@ sensor:
|
||||
- rainsensor
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **monitored_conditions**: Currently only rainsensor is supported. Returns the sensor level.
|
||||
{% configuration %}
|
||||
monitored_conditions:
|
||||
description: Conditions to be monitored.
|
||||
keys:
|
||||
rainsensor:
|
||||
description: Returns the sensor level.
|
||||
{% endconfiguration %}
|
||||
|
||||
Please note that due to the implementation of the API within the LNK Module, there is a concurrency issue. For example, the Rain Bird app will give connection issues (like already a connection active).
|
||||
|
@ -38,13 +38,31 @@ sensor:
|
||||
minutes: 30
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **entity_id** (*Required*): The entity to monitor. Only [sensors](/components/sensor/) and [binary sensor](/components/binary_sensor/).
|
||||
- **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `Stats`.
|
||||
- **sampling_size** (*Optional*): Size of the sampling. If the limit is reached then the values are rotated. Defaults to `20`.
|
||||
- **max_age** (*Optional*): Maximum age of measurements. Setting this to a time interval will cause older values to be discarded.
|
||||
- **precision** (*Optional*): Defines the precision of the calculated values, through the argument of round(). Defaults to `2`.
|
||||
{% configuration %}
|
||||
entity_id:
|
||||
description: The entity to monitor. Only [sensors](/components/sensor/) and [binary sensor](/components/binary_sensor/).
|
||||
required: true
|
||||
type: string
|
||||
name:
|
||||
description: Name of the sensor to use in the frontend.
|
||||
required: false
|
||||
default: Stats
|
||||
type: string
|
||||
sampling_size:
|
||||
description: Size of the sampling. If the limit is reached then the values are rotated.
|
||||
required: false
|
||||
default: 20
|
||||
type: integer
|
||||
max_age:
|
||||
description: Maximum age of measurements. Setting this to a time interval will cause older values to be discarded.
|
||||
required: false
|
||||
type: time
|
||||
precision:
|
||||
description: Defines the precision of the calculated values, through the argument of round().
|
||||
required: false
|
||||
default: 2
|
||||
type: integer
|
||||
{% endconfiguration %}
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/screenshots/stats-sensor.png' />
|
||||
|
@ -292,7 +292,7 @@ sensor:
|
||||
|
||||
### {% linkable_title Working with dates %}
|
||||
|
||||
The `template` sensors are not limited to use attributes from other entities but can also work with [Home Assistant's template extensions](/docs/configuration/templating/#home-assistant-template-extensions). This template contains no entities that will trigger an update, so either we need to use `homeassistant.update_entity` or add an `entity_id:` line for an entity that will force an update - here we're using `sun.sun`.
|
||||
The `template` sensors are not limited to use attributes from other entities but can also work with [Home Assistant's template extensions](/docs/configuration/templating/#home-assistant-template-extensions). This template contains no entities that will trigger an update, so either we need to use `homeassistant.update_entity` or add an `entity_id:` line for an entity that will force an update - here we're using `sensor.date`.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
@ -301,28 +301,13 @@ sensor:
|
||||
sensors:
|
||||
nonsmoker:
|
||||
value_template: '{{ (( as_timestamp(now()) - as_timestamp(strptime("06.07.2018", "%d.%m.%Y")) ) / 86400 ) | round(2) }}'
|
||||
entity_id: sun.sun
|
||||
entity_id: sensor.date
|
||||
friendly_name: 'Not smoking'
|
||||
unit_of_measurement: "Days"
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Template tracking %}
|
||||
|
||||
This example shows how to add `entity_id` to a template to allow tracking of updates. Fixing an error caused in (81.0)
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
nonsmoker:
|
||||
entity_id: now.strptime
|
||||
value_template: '{{ (( as_timestamp(now()) - as_timestamp(strptime("06.07.2018", "%d.%m.%Y")) ) / 86400 ) | round(2) }}'
|
||||
friendly_name: 'Not smoking'
|
||||
unit_of_measurement: "Days"
|
||||
```
|
||||
{% endraw %}
|
||||
Useful entities to choose might be `sensor.date` which update once per day, or `sensor.time` which updates once per minute.
|
||||
|
||||
Note: If a template uses more than one sensor they can be listed
|
||||
|
||||
|
@ -14,7 +14,10 @@ ha_qa_scale: internal
|
||||
|
||||
The sun component will use your current location to track if the sun is above or
|
||||
below the horizon. The sun can be used within automation as
|
||||
[a trigger with an optional offset to simulate dawn/dusk](/getting-started/automation-trigger/#sun-trigger).
|
||||
[a trigger with an optional offset to simulate dawn/dusk][sun_trigger] or as [a condition with an optional offset to test if the sun has already set or risen][sun_condition].
|
||||
|
||||
[sun_trigger]: /docs/automation/trigger/#sun-trigger
|
||||
[sun_condition]: /docs/scripts/conditions/#sun-condition
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
|
@ -239,3 +239,47 @@ Not every code works.
|
||||
|
||||
8. Convert the HEX codes to base64
|
||||
Use [this](http://tomeko.net/online_tools/hex_to_base64.php?lang=en1) tool to convert the hex codes to base64 for use with Home Assistant.
|
||||
|
||||
### {% linkable_title Using iOS and Windows to Obtain Codes %}
|
||||
|
||||
1. Use the E-Control app to learn the codes from all of your suitable remotes. Depending on the remote, try to add useful names for the buttons and/or the remotes. This will mean that you should only have to run this process once and will help with getting them quickly into Home Assistant. Dump the files in the app by navigating to the hamburger icon, select `share and select`, then choose `Share to other phones on WLAN`.
|
||||
|
||||
2. Install Requirements
|
||||
|
||||
- Download and install Python 2.7 on your windows PC.
|
||||
- Run `pip install simplejson`. You must install simplejson in the same python version you will use to run the scripts. You can ensure that the current version is installed by attempting to install again and confirming that you see "Requirement already satisfied".
|
||||
- Download and install [iBackup Viewer](http://www.imactools.com/iphonebackupviewer/).
|
||||
- Download [these](https://github.com/NightRang3r/Broadlink-e-control-db-dump) github files. Make sure you place them in the \Python27 path in Windows. Be sure that the getBroadlinkSharedData.py from the download is in this directory.
|
||||
|
||||
3. Plug your iphone into your windows PC, open iTunes and create a non-encrypted backup of your device.
|
||||
|
||||
4. Open iBackup viewer then select the iOS backup that you created. Navigate to the App icon and then scroll until you find e-control.app, select this. Select and extract the files jsonButton, jsonIrCode and jsonSublr; they will be located in the Documents/SharedData section. Put these in the same location as the getBroadlinkSharedData.py.
|
||||
|
||||
5. Now open a Command Prompt and navigate to the directory where the aforementioned files are located e.g. C:\Python27. Now run the command python getBroadlinkSharedData.py, you should see something like this:
|
||||
```C:\Python27>python getBroadlinkSharedData.py
|
||||
ID: 1 | Name: TV
|
||||
ID: 2 | Name: Upstairs
|
||||
ID: 3 | Name: Sort in order
|
||||
ID: 4 | Name: Soundbar
|
||||
ID: 5 | Name: TV
|
||||
ID: 6 | Name: Xbox One
|
||||
ID: 7 | Name: User-Defined Aircon
|
||||
ID: 8 | Name: Sort in order
|
||||
ID: 9 | Name: User-Defined Aircon
|
||||
ID: 10 | Name: Kids Fan
|
||||
ID: 11 | Name: Downstairs
|
||||
ID: 12 | Name: Ceiling Fan
|
||||
ID: 13 | Name: Samsung TV
|
||||
ID: 14 | Name: Xbox One
|
||||
ID: 15 | Name: SONY SoundBar
|
||||
ID: 16 | Name: Fire TV
|
||||
ID: 17 | Name: New RF Remote
|
||||
```
|
||||
|
||||
6. Select the remote ID you would like to extract:
|
||||
```Select accessory ID: 5
|
||||
[+] You selected: TV
|
||||
[+] Dumping codes to TV.txt
|
||||
```
|
||||
|
||||
7. Now there should be a file with the name of the remote you chose in the same directory ending in `.txt`. Open that up and it will contain the Base64 code required for Home Assistant. To ensure these codes work correctly you may need to add `==` to the end of the code in your config.yaml file (or wherever you have your switches).
|
||||
|
@ -13,7 +13,6 @@ ha_iot_class: "Local Polling"
|
||||
ha_release: "0.24"
|
||||
---
|
||||
|
||||
|
||||
The `tplink` switch platform allows you to control the state of your [TP-Link smart switch](http://www.tp-link.com/en/products/list-5258.html).
|
||||
|
||||
Supported units:
|
||||
@ -23,7 +22,7 @@ Supported units:
|
||||
- HS110
|
||||
- HS200
|
||||
|
||||
To use your TP-Link switch in your installation, add the following to your `configuration.yaml` file:
|
||||
To use your TP-Link switch or socket in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
@ -48,3 +47,15 @@ enable_leds:
|
||||
type: boolean
|
||||
{% endconfiguration %}
|
||||
|
||||
## {% linkable_title Adding multiple switches %}
|
||||
|
||||
You may need to add [multiple switches](https://community.home-assistant.io/t/multiple-tp-link-switches/6935) and the config would need to include multiple switches separately.
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
switch:
|
||||
- platform: tplink
|
||||
host: FIRST_IP_ADDRESS
|
||||
- platform: tplink
|
||||
host: SECOND_IP_ADDRESS
|
||||
```
|
||||
|
@ -11,7 +11,7 @@ logo: telldus_tellstick.png
|
||||
ha_category: Hub
|
||||
---
|
||||
|
||||
The `tellstick` component integrates [TellStick](http://www.telldus.se/products/tellstick) devices into Home Assistant. This integration allows users to add switches, lights, and sensors which are communicating with 433 MHz. There are a number of vendors (Capidi Elro, Intertechno, Nexa, Proove, Sartano, and Viking) who are selling products that work with TellStick. For more details, please check the TellStick [protocol list](http://developer.telldus.com/wiki/TellStick_conf).
|
||||
The `tellstick` component integrates [TellStick](https://telldus.com/produkt/z-wave-gateway-tellstick-znet-lite-ver-2/) devices into Home Assistant. This integration allows users to add switches, lights, and sensors which are communicating with 433 MHz. There are a number of vendors (Capidi Elro, Intertechno, Nexa, Proove, Sartano, and Viking) who are selling products that work with TellStick. For more details, please check the TellStick [protocol list](http://developer.telldus.com/wiki/TellStick_conf).
|
||||
|
||||
## {% linkable_title Configuration %}
|
||||
|
||||
|
@ -8,7 +8,7 @@ comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: wink.png
|
||||
ha_category: water heater
|
||||
ha_category: Water heater
|
||||
ha_release: 0.32
|
||||
ha_iot_class: "Cloud Polling"
|
||||
---
|
||||
|
@ -24,6 +24,14 @@ Supported devices will be automatically discovered if the discovery component is
|
||||
wemo:
|
||||
```
|
||||
|
||||
{% configuration %}
|
||||
static:
|
||||
description: One or more static IP adresses for WeMo to use
|
||||
required: false
|
||||
type: list
|
||||
default: 1
|
||||
{% endconfiguration %}
|
||||
|
||||
Alternately, WeMo devices that are not discoverable can be statically configured. If you have WeMo devices on subnets other than where Home Assistant is running, or devices in a remote location reachable over a VPN, you will need to configure them manually. This is also useful if you wish to disable discovery for some WeMo's, even if they are local. Example static configuration:
|
||||
|
||||
```yaml
|
||||
|
@ -26,28 +26,33 @@ example:
|
||||
target: TARGET_ENTITY
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **target** (*Required*): TARGET_ENTITY should be one of your devices that can be turned on and off, e.g., a light or a switch. Example value could be light.Ceiling or switch.AC (if you have these devices with those names).
|
||||
{% configuration %}
|
||||
target:
|
||||
description: TARGET_ENTITY should be one of your devices that can be turned on and off, e.g., a light or a switch. Example value could be light.Ceiling or switch.AC (if you have these devices with those names).
|
||||
required: true
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
Create the file `<config dir>/custom_components/example.py` and copy paste the content below:
|
||||
|
||||
|
||||
```python
|
||||
"""
|
||||
Example of a custom component.
|
||||
"""
|
||||
import time
|
||||
import logging
|
||||
import time
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.const import STATE_HOME, STATE_NOT_HOME, STATE_ON, STATE_OFF
|
||||
from homeassistant.helpers import validate_config
|
||||
from homeassistant.helpers.event_decorators import \
|
||||
track_state_change, track_time_change
|
||||
from homeassistant.helpers.service import service
|
||||
import homeassistant.components as core
|
||||
from homeassistant.components import device_tracker
|
||||
from homeassistant.components import light
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.components import device_tracker, light
|
||||
from homeassistant.const import (ATTR_ENTITY_ID, SERVICE_TURN_OFF,
|
||||
SERVICE_TURN_ON, STATE_HOME, STATE_NOT_HOME,
|
||||
STATE_OFF, STATE_ON)
|
||||
from homeassistant.core import split_entity_id
|
||||
from homeassistant.helpers.event import (async_track_state_change,
|
||||
async_track_time_change)
|
||||
|
||||
# The domain of your component. Should be equal to the name of your component.
|
||||
DOMAIN = "example"
|
||||
@ -69,17 +74,20 @@ SERVICE_FLASH = 'flash'
|
||||
# Shortcut for the logger
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def setup(hass, config):
|
||||
"""Setup example component."""
|
||||
global TARGET_ID
|
||||
|
||||
# Validate that all required config options are given.
|
||||
if not validate_config(config, {DOMAIN: [CONF_TARGET]}, _LOGGER):
|
||||
return False
|
||||
CONFIG_SCHEMA = vol.Schema({
|
||||
DOMAIN: vol.Schema({
|
||||
vol.Optional(CONF_TARGET): cv.entity_id
|
||||
})
|
||||
}, extra=vol.ALLOW_EXTRA)
|
||||
|
||||
async def async_setup(hass, config):
|
||||
"""Setup example component."""
|
||||
TARGET_ID = config[DOMAIN][CONF_TARGET]
|
||||
|
||||
domain = split_entity_id(TARGET_ID)[0]
|
||||
data = {ATTR_ENTITY_ID: TARGET_ID}
|
||||
|
||||
# Validate that the target entity id exists.
|
||||
if hass.states.get(TARGET_ID) is None:
|
||||
_LOGGER.error("Target entity id %s does not exist",
|
||||
@ -90,57 +98,39 @@ def setup(hass, config):
|
||||
TARGET_ID = None
|
||||
return False
|
||||
|
||||
# Tell the bootstrapper that we initialized successfully.
|
||||
return True
|
||||
|
||||
|
||||
@track_state_change(device_tracker.ENTITY_ID_ALL_DEVICES)
|
||||
def track_devices(hass, entity_id, old_state, new_state):
|
||||
"""Called when the group.all devices change state."""
|
||||
async def async_switch_on(entity_id, old_state, new_state):
|
||||
"""Callback to turn on our target entity"""
|
||||
# If the target id is not set, return
|
||||
if not TARGET_ID:
|
||||
return
|
||||
|
||||
# If anyone comes home and the entity is not on, turn it on.
|
||||
if new_state.state == STATE_HOME and not core.is_on(hass, TARGET_ID):
|
||||
if not core.is_on(hass, TARGET_ID):
|
||||
await hass.services.async_call(domain, SERVICE_TURN_ON, data)
|
||||
|
||||
core.turn_on(hass, TARGET_ID)
|
||||
async def async_switch_off(entity_id, old_state, new_state):
|
||||
"""Callback to turn off our target entity"""
|
||||
# If the target id is not set, return
|
||||
if not TARGET_ID:
|
||||
return
|
||||
|
||||
# If all people leave the house and the entity is on, turn it off.
|
||||
elif new_state.state == STATE_NOT_HOME and core.is_on(hass, TARGET_ID):
|
||||
if core.is_on(hass, TARGET_ID):
|
||||
await hass.services.async_call(domain, SERVICE_TURN_OFF, data)
|
||||
|
||||
core.turn_off(hass, TARGET_ID)
|
||||
|
||||
|
||||
@track_time_change(hour=7, minute=0, second=0)
|
||||
def wake_up(hass, now):
|
||||
async def async_wake_up(service):
|
||||
"""Turn light on in the morning.
|
||||
|
||||
Turn the light on at 7 AM if there are people home and it is not already
|
||||
on.
|
||||
Turn the light on when called, but only if there are people home
|
||||
and it is not already on.
|
||||
"""
|
||||
if not TARGET_ID:
|
||||
return
|
||||
|
||||
if device_tracker.is_on(hass) and not core.is_on(hass, TARGET_ID):
|
||||
_LOGGER.info('People home at 7AM, turning it on')
|
||||
core.turn_on(hass, TARGET_ID)
|
||||
_LOGGER.info('People home at 7AM, turning target on')
|
||||
await hass.services.async_call(domain, SERVICE_TURN_ON, data)
|
||||
|
||||
|
||||
@track_state_change(light.ENTITY_ID_ALL_LIGHTS, STATE_ON, STATE_OFF)
|
||||
def all_lights_off(hass, entity_id, old_state, new_state):
|
||||
"""If all lights turn off, turn off."""
|
||||
if not TARGET_ID:
|
||||
return
|
||||
|
||||
if core.is_on(hass, TARGET_ID):
|
||||
_LOGGER.info('All lights have been turned off, turning it off')
|
||||
core.turn_off(hass, TARGET_ID)
|
||||
|
||||
|
||||
@service(DOMAIN, SERVICE_FLASH)
|
||||
def flash_service(hass, call):
|
||||
"""Service that will toggle the target.
|
||||
async def async_flash_service(service):
|
||||
"""Service callback that will toggle the target.
|
||||
|
||||
Set the light to off for 10 seconds if on and vice versa.
|
||||
"""
|
||||
@ -148,12 +138,33 @@ def flash_service(hass, call):
|
||||
return
|
||||
|
||||
if core.is_on(hass, TARGET_ID):
|
||||
core.turn_off(hass, TARGET_ID)
|
||||
# We need this call to run blocking, as we want to wait 10s after it finished
|
||||
await hass.services.async_call(domain, SERVICE_TURN_OFF, data, blocking=True)
|
||||
time.sleep(10)
|
||||
core.turn_on(hass, TARGET_ID)
|
||||
|
||||
await hass.services.async_call(domain, SERVICE_TURN_ON, data)
|
||||
else:
|
||||
core.turn_on(hass, TARGET_ID)
|
||||
await hass.services.async_call(domain, SERVICE_TURN_ON, data, blocking=True)
|
||||
time.sleep(10)
|
||||
core.turn_off(hass, TARGET_ID)
|
||||
await hass.services.async_call(domain, SERVICE_TURN_OFF, data)
|
||||
|
||||
# register the example.flash service
|
||||
hass.services.async_register(DOMAIN, SERVICE_FLASH, async_flash_service)
|
||||
|
||||
# If all lights turn off, turn off.
|
||||
async_track_state_change(
|
||||
hass, light.ENTITY_ID_ALL_LIGHTS, async_switch_off, STATE_ON, STATE_OFF)
|
||||
|
||||
# If all people leave the house and the entity is on, turn it off.
|
||||
async_track_state_change(
|
||||
hass, device_tracker.ENTITY_ID_ALL_DEVICES, async_switch_off, STATE_HOME, STATE_NOT_HOME)
|
||||
|
||||
# If anyone comes home and the entity is not on, turn it on.
|
||||
async_track_state_change(
|
||||
hass, device_tracker.ENTITY_ID_ALL_DEVICES, async_switch_on, STATE_NOT_HOME, STATE_HOME)
|
||||
|
||||
# Call wakeup callback at 7 AM
|
||||
async_track_time_change(hass, async_wake_up, hour=7, minute=00, second=00)
|
||||
|
||||
# Tell the bootstrapper that we initialized successfully.
|
||||
return True
|
||||
```
|
||||
|
@ -23,10 +23,16 @@ simple_alarm:
|
||||
unknown_light: group.living_room
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **known_light** (*Optional*): Which light/light group has to flash when a known device comes home.
|
||||
- **unknown_light** (*Optional*): Which light/light group has to flash red when light turns on while no one home.
|
||||
{% configuration %}
|
||||
known_light:
|
||||
description: Which light/light group has to flash when a known device comes home.
|
||||
required: false
|
||||
type: string
|
||||
unknown_light:
|
||||
description: Which light/light group has to flash red when light turns on while no one home.
|
||||
required: false
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
Create the file `<config dir>/custom_components/simple_alarm.py` and copy paste the content below:
|
||||
|
||||
|
@ -10,39 +10,56 @@ sharing: true
|
||||
footer: true
|
||||
---
|
||||
|
||||
Access to Home Assistant is secured by our authentication system. Each member of your household will get their own user account to log in and access Home Assistant.
|
||||
Our authentication system secures access to Home Assistant.
|
||||
|
||||
Home Assistant contains two different user types: the owner user account and normal users. The owner user account is created when you start Home Assistant for the first time. This account has some special privileges compared to the other users of the system:
|
||||
|
||||
- Manage users
|
||||
- Configure integrations and other settings (soon)
|
||||
- Configure Hass.io (soon)
|
||||
|
||||
## {% linkable_title Authentication %}
|
||||
|
||||
When a user wants to use Home Assistant, they have to log in. When navigating to the frontend without authentication, the user is asked for a login. The login page will always show you the website that you're logging in to.
|
||||
If you are starting Home Assistant for the first time, or you have logged out, you will be asked for credentials before you can log in.
|
||||
|
||||
<img src='/images/docs/authentication/login.png' alt='Screenshot of the login screen' style='border: 0;box-shadow: none;'>
|
||||
|
||||
When logging in, make sure that the URL in the URL bar is showing the address of your Home Assistant instance.
|
||||
## {% linkable_title User accounts %}
|
||||
|
||||
## {% linkable_title Profile %}
|
||||
When you start Home Assistant for the first time the _owner_ user account is created. This account has some special privileges and can:
|
||||
|
||||
Once you're logged in, you can access the profile page by clicking on the badge next to the Home Assistant title in the sidebar. Here you can change your preferred language or change your password. You can also log out.
|
||||
- Create and manage other user accounts.
|
||||
- Configure integrations and other settings (coming soon).
|
||||
- Configure Hass.io (coming soon).
|
||||
|
||||
<p class='note'>
|
||||
For the moment, other user accounts will have the same access as the owner account. In the future, non-owner accounts will be able to have restrictions applied.
|
||||
</p>
|
||||
|
||||
### {% linkable_title Your Account Profile %}
|
||||
|
||||
Once you're logged in, you can see the details of your account at the _Profile_ page by clicking on the circular badge next to the Home Assistant title in the sidebar.
|
||||
|
||||
<img src='/images/docs/authentication/profile.png' alt='Screenshot of the profile page' style='border: 0;box-shadow: none;'>
|
||||
|
||||
## {% linkable_title Multi-factor authentication %}
|
||||
You can:
|
||||
|
||||
As a user, you can setup multi-factor authentication with time-based one-time passwords. This is an extra challenge that you have to solve after you finish your login. You will be able to set up these challenges from the profile page once you're logged in.
|
||||
* Change the language you prefer Home Assistant to use.
|
||||
* Change your password.
|
||||
* Select the [theme](/components/frontend/#defining-themes) for the interface of Home Assistant.
|
||||
* Enable or disable [multi-factor authentication](/docs/authentication/multi-factor-auth/).
|
||||
* Delete _Refresh Tokens_. These are created when you log in from a device. Delete them if you want to force the device to log out.
|
||||
* Create [Long Lived Access Tokens](https://developers.home-assistant.io/docs/en/auth_api.html#long-lived-access-token) so scripts can securely interact with Home Assistant.
|
||||
* Log out of Home Assistant.
|
||||
|
||||
<img src='/images/docs/authentication/mfa.png' alt='Screenshot of setting up multi-factor authentication' style='border: 0;box-shadow: none;'>
|
||||
### {% linkable_title Securing your login %}
|
||||
|
||||
_Make sure to choose a secure password!_ At some time in the future, you will probably want to access Home Assistant from outside your local network. This means you are also exposed to random black-hats trying to do the same. Treat the password like the key to your house.
|
||||
|
||||
|
||||
As an extra level of security, you can turn on [multi-factor authentication](/docs/authentication/multi-factor-auth/).
|
||||
|
||||
## {% linkable_title Other authentication techniques %}
|
||||
|
||||
Home Assistant provides several ways to authenticate. See the [Auth Providers](/docs/authentication/providers/) section.
|
||||
|
||||
## {% linkable_title Troubleshooting %}
|
||||
|
||||
### {% linkable_title Authentication failures from `127.0.0.1` %}
|
||||
|
||||
If you're seeting authentication failures from `127.0.0.1` and you're using the `nmap` device tracker, you should [exclude the Home Assistant IP](/components/device_tracker.nmap_tracker/#exclude) from being scanned.
|
||||
If you're seeing authentication failures from `127.0.0.1` and you're using the `nmap` device tracker, you should [exclude the Home Assistant IP](/components/device_tracker.nmap_tracker/#exclude) from being scanned.
|
||||
|
||||
### {% linkable_title Bearer token warnings %}
|
||||
|
||||
@ -56,7 +73,7 @@ If you see this, you need to add an [`api_password`](/components/http/#api_passw
|
||||
|
||||
### {% linkable_title Bearer token informational messages %}
|
||||
|
||||
If instead, you see the following, then this is a message for component developers, to tell them that they need to update how they authenticate to Home Assistant. As an end user you don't need to do anything:
|
||||
If you see the following, then this is a message for component developers, to tell them they need to update how they authenticate to Home Assistant. As an end user you don't need to do anything:
|
||||
|
||||
```txt
|
||||
INFO (MainThread) [homeassistant.components.http.auth] You need to use a bearer token to access /blah/blah from 192.0.2.4
|
||||
@ -64,36 +81,36 @@ INFO (MainThread) [homeassistant.components.http.auth] You need to use a bearer
|
||||
|
||||
### {% linkable_title Lost owner password %}
|
||||
|
||||
While you should hopefully be storing your passwords in a password manager, if you lose the password associated with the owner account the only way to resolve this is to delete *all* the authentication data. You do this by shutting down Home Assistant and deleting the following files from the `.storage/` folder in your [configuration folder](https://www.home-assistant.io/docs/configuration/):
|
||||
While you should hopefully be storing your passwords in a password manager, if you lose the password associated with the owner account the only way to resolve this is to delete *all* the authentication data. You do this by shutting down Home Assistant and deleting the following files from the `.storage/` folder in your [configuration folder](/docs/configuration/):
|
||||
|
||||
* `auth`
|
||||
* `auth_provider.homeassistant`
|
||||
* `onboarding`
|
||||
|
||||
When you start Home Assistant next you'll be required to set up authentication again.
|
||||
When you start Home Assistant next, you'll be required to set up authentication again.
|
||||
|
||||
### {% linkable_title Error: invalid client id or redirect url%}
|
||||
|
||||
<img src='/images/docs/authentication/error-invalid-client-id.png' alt='Screenshot of Error: invalid client id or redirect url'>
|
||||
|
||||
You have to use a domain name, not IP address to remote access Home Assistant; otherwise you will get **Error: invalid client id or redirect url** error on the login form. However, you can use the IP address to access Home Assistant in your home network.
|
||||
You have to use a domain name, not IP address, to remote access Home Assistant otherwise you will get **Error: invalid client id or redirect url** error on the login form. However, you can use the IP address to access Home Assistant in your home network.
|
||||
|
||||
It because we only allow using IP address as client ID when your IP address is one of internal network address (e.g., 192.168.0.1) or loopback address (e.g., 127.0.0.1).
|
||||
This is because we only allow an IP address as a client ID when your IP address is an internal network address (e.g., `192.168.0.1`) or loopback address (e.g., `127.0.0.1`).
|
||||
|
||||
If you don't have a valid domain name for your Home Assistant instance, you can modify the `hosts` file on your computer to fake one. For example, if you are on Windows, edit `C:\Windows\System32\Drivers\etc\hosts` file with administrator privilege, add following entry.
|
||||
If you don't have a valid domain name for your Home Assistant instance, you can modify the `hosts` file on your computer to fake one. On Windows, edit the `C:\Windows\System32\Drivers\etc\hosts` file with administrator privilege, or on Linux the `/etc/hosts` file, and add following entry:
|
||||
|
||||
```text
|
||||
12.34.56.78 hassbian.home
|
||||
```
|
||||
|
||||
(Please replace `12.34.56.78` with your Home Assistant's public IP address)
|
||||
Replace `12.34.56.78` with your Home Assistant's public IP address.
|
||||
|
||||
It will allow you to open Home Assistant instance by access `http://hassbian.home:8123/`
|
||||
This will allow you to open Home Assistant at `http://hassbian.home:8123/`
|
||||
|
||||
### {% linkable_title Stuck on Loading data %}
|
||||
|
||||
Some advert blocking software, such as Wipr, also blocks web sockets. If you're stuck on the Loading data screen, try disabling your ad blocker.
|
||||
Some ad blocking software, such as Wipr, also blocks web sockets. If you're stuck on the Loading data screen, try disabling your ad blocker.
|
||||
|
||||
### {% linkable_title Migrating from pre 0.77 %}
|
||||
|
||||
If you were using the authentication system before 0.77, you'll likely have `auth:` and `auth_providers:` defined. You'll need to remove these and let Home Assistant [handle it automatically](https://www.home-assistant.io/docs/authentication/providers/#configuring-auth-providers).
|
||||
If you were using the authentication system before 0.77, you'd likely have `auth:` and `auth_providers:` defined. You'll need to remove these and let Home Assistant [handle it automatically](/docs/authentication/providers/#configuring-auth-providers).
|
||||
|
@ -10,23 +10,28 @@ sharing: true
|
||||
footer: true
|
||||
---
|
||||
|
||||
<p class='note warning'>
|
||||
This is an advanced feature. If misconfigured, you will not be able to access Home Assistant anymore!
|
||||
</p>
|
||||
The Multi-factor Authentication (MFA) modules require you to solve a second challenge after you provide your password.
|
||||
|
||||
Besides the authentication providers, it's also possible to configure multi-factor authentication modules. These authentication modules will require the user to solve a second challenge besides just logging in. The idea is that you ask the user for something they know, their username/password, and something they have, like a time-based authentication token from their phone.
|
||||
A password can be compromised in a number of ways, for example, it can be guessed if it is a simple password. MFA provides a second level of defense by requiring:
|
||||
|
||||
The multi-factor authentication module can be used mixed-matched with authentication providers. After the normal authentication provider validation, the login flow will ask the user for additional challenge(s) if there are multi-factor authentication modules enabled for this user. If more than one multi-factor authentication module is enabled, the user can select one of them during the login.
|
||||
* something you know, like your username and password, and
|
||||
* something you have, like a one-time password sent to your phone.
|
||||
|
||||
The multi-factor authentication module has to be enabled for the user before it can be used in the login process. The user can go to the profile page enable it by himself.
|
||||
You can use MFA with any of the other authentication providers. If more than one MFA module is enabled, you can choose one when you log in.
|
||||
|
||||
## {% linkable_title Configuring multi-factor authentication modules %}
|
||||
You can turn MFA on and off in the [profile page](/docs/authentication/#your-account-profile) for your user account.
|
||||
|
||||
<p class='note warning'>
|
||||
By configuring your own instead of using the default configuration, you take full responsibility for the authentication of the system.
|
||||
</p>
|
||||
## {% linkable_title Available MFA modules %}
|
||||
|
||||
Multi-factor authentication modules are configured in your `configuration.yaml` file under the `homeassistant:` block:
|
||||
### {% linkable_title Time-based One-Time Password MFA module %}
|
||||
|
||||
[Time-based One-Time Password](https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm) (TOTP) is widely adopted in modern authentication systems.
|
||||
|
||||
Home Assistant generates a secret key which is synchronized with an app on your phone. Every thirty seconds or so the phone app generates a random six digit number. Because Home Assistant knows the secret key, it knows which number will be generated. If you enter the correct digits, then you're in.
|
||||
|
||||
#### {% linkable_title Setting up TOTP %}
|
||||
|
||||
Enable TOTP in your `configuration.yaml` like this:
|
||||
|
||||
```yaml
|
||||
homeassistant:
|
||||
@ -34,45 +39,37 @@ homeassistant:
|
||||
- type: totp
|
||||
```
|
||||
|
||||
## {% linkable_title Available multi-factor authentication modules %}
|
||||
If no `auth_mfa_modules` config section is defined in `configuration.yaml` a TOTP module named "Authenticator app" will be autoloaded.
|
||||
|
||||
Below is a list of the currently available auth providers.
|
||||
You will need an authenticator app on your phone. We recommend either [Google Authenticator](https://support.google.com/accounts/answer/1066447) or [Authy](https://authy.com/). Both are available for iOS or Android.
|
||||
|
||||
### {% linkable_title Time-based One-Time Password multi-factor authentication module %}
|
||||
After restarting Home Assistant, go to your [profile page](/docs/authentication/#your-account-profile) and there should be a "Multi-factor Authentication Modules" section.
|
||||
|
||||
[Time-based One-Time Password](https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm) is widely adopted in modern authentication system, it combines a secret key with the current timestamp using a cryptographic hash function to generate a one-time password. Whoever possessed the secret key will get same one-time password in certain time period. By verifying that password, Home Assistant knows the user have the right secret key.
|
||||
Click _Enable_ and a new secret key will be generated. Go to your phone app and enter the key, either by scanning the QR code or typing in the key below the QR code manually.
|
||||
|
||||
When trying to set up TOTP module, a QR code will show up. The user can scan it by an authenticator app, or set it up manually using the code showed in the UI. After setup, the user needs to input a six digit number generated in the authenticator app to verify the setup is good. If the verification keeps failing, you need to check whether the clock on Home Assistant is accurate.
|
||||
|
||||
There are several authenticator apps on the market, we recommend either [Google Authenticator](https://support.google.com/accounts/answer/1066447) or [Authy](https://authy.com/).
|
||||
<img src='/images/docs/authentication/mfa.png' alt='Screenshot of setting up multi-factor authentication' style='border: 0;box-shadow: none;'>
|
||||
|
||||
<p class='note warning'>
|
||||
Please treat the secret key like a password, never expose it to others.
|
||||
Please treat the secret key like a password - never expose it to others.
|
||||
</p>
|
||||
|
||||
By default one TOTP multi-factor auth module named "Authenticator app" will be auto loaded if no `auth_mfa_modules` config section defined in `configuration.yaml`.
|
||||
Your phone app will now start generating a different six-digit code every thirty seconds or so. Enter one of these into Home Assistant under the QR code where it asks for a _Code_. Home Assistant and your phone app are now in sync and you can now use the code displayed in the app to log in.
|
||||
|
||||
Example of configuration:
|
||||
#### {% linkable_title Using TOTP %}
|
||||
|
||||
```yaml
|
||||
homeassistant:
|
||||
auth_mfa_modules:
|
||||
- type: totp
|
||||
```
|
||||
Once TOTP is enabled, Home Assistant requires the latest code from your phone app before you can log in.
|
||||
|
||||
<p class='note'>
|
||||
TOTP is _time based_ so it relies on your Home Assistant clock being accurate. If the verification keeps failing, make sure the clock on Home Assistant is correct.
|
||||
</p>
|
||||
|
||||
### {% linkable_title Notify multi-factor authentication module %}
|
||||
|
||||
Notify MFA module using [notify component](https://www.home-assistant.io/components/notify/) to delivery a [HMAC-based One-Time Password](https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_algorithm) to user configured target.
|
||||
The Notify MFA module uses the [notify component](https://www.home-assistant.io/components/notify/) to send you an [HMAC-based One-Time Password](https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_algorithm). It is typically sent to your phone, but can be sent to any destination supported by a `notify` service. You use this password to log in.
|
||||
|
||||
User need first set up the MFA module by select one of the available notify service. A 6 digit one-time password will be sent by this notify service, user need to input it to verify the setup.
|
||||
#### {% linkable_title Setting up TOTP %}
|
||||
|
||||
During the login process, a 6 digit one-time password will be sent again, user need to input it to verify his/her identity. If the validation failed, a new one-time password will be sent again.
|
||||
|
||||
<p class='note'>
|
||||
Notify MFA module would not verify the one-time password delivery success, so that if user cannot received the message due any reason, he/she may not be login again. Edit or remove `[your_config_dir]/.storage/auth_module.notify` can disable notify MFA module to resolve the issue.
|
||||
</p>
|
||||
|
||||
Example of configuration
|
||||
Add Notify MFA to your `configuration.yaml` file like this:
|
||||
|
||||
```yaml
|
||||
homeassistant:
|
||||
@ -80,14 +77,23 @@ homeassistant:
|
||||
- type: notify
|
||||
```
|
||||
|
||||
Optional configuration variables:
|
||||
|
||||
- **exclude** (*Optional*): The list of notify services you do not want to include in.
|
||||
- **include** (*Optional*): The list of notify services you want to include in.
|
||||
- **message** (*Optional*): The message template
|
||||
{% configuration %}
|
||||
exclude:
|
||||
description: The list of notifying services you want to exclude.
|
||||
required: false
|
||||
type: list
|
||||
include:
|
||||
description: The list of notifying services you want to include.
|
||||
required: false
|
||||
type: list
|
||||
message:
|
||||
description: The message template.
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
||||
```yaml
|
||||
# Example configure with message template
|
||||
# Example configuration, with a message template.
|
||||
homeassistant:
|
||||
auth_mfa_modules:
|
||||
- type: totp
|
||||
@ -95,3 +101,15 @@ homeassistant:
|
||||
- type: notify
|
||||
message: 'I almost forget, to get into my clubhouse, you need to say {}'
|
||||
```
|
||||
|
||||
After restarting Home Assistant, go to your [profile page](/docs/authentication/#your-account-profile) and there should be a "Multi-factor Authentication Modules" section. Click _Enable_ on the _Notify One-Time Password_ option.
|
||||
|
||||
Try logging out, then logging in again. You will be asked for the six-digit one-time password that was sent to your notify service. Enter the password to log in.
|
||||
|
||||
If the validation failed, a new one-time password will be sent again.
|
||||
|
||||
<p class='note'>
|
||||
The Notify MFA module can't tell if the one-time password was delivered successfully. If you don't get the notification, you won't be able to log in.
|
||||
|
||||
You can disable the Notify MFA module by editing or removing the file `[your_config_dir]/.storage/auth_module.notify`.
|
||||
</p>
|
||||
|
@ -10,27 +10,24 @@ sharing: true
|
||||
footer: true
|
||||
---
|
||||
|
||||
<p class='note warning'>
|
||||
This is an advanced feature. If misconfigured, you will not be able to access Home Assistant anymore!
|
||||
When you log in, an _auth provider_ checks your credentials to make sure you are an authorized user.
|
||||
|
||||
<p class='note'>
|
||||
The authentication system has been changed recently. Previously there was a single "_API password_" to log in, but you can now choose from several auth providers.<br/> <br/>
|
||||
|
||||
To make the transition from API passwords easier, we've added a _Legacy API Password_ auth provider. This is enabled by default if you have an API password configured so you will still be able to log in.
|
||||
|
||||
However, this feature is deprecated and will be removed in a future release so you should set up one of the newer authentication techniques.
|
||||
</p>
|
||||
|
||||
When a user logs in, it needs to authenticate against an auth provider. An auth provider will check the users' credentials, and if credentials are linked to a user in the system, allows the user to log in.
|
||||
|
||||
By default, Home Assistant has enabled an auth provider that stores the users in the configuration directory. An owner account can manage these users from the frontend.
|
||||
|
||||
To make the transition from API password to authentication system easier, we've added a legacy API password auth provider. This enables users to log in with the API password. This authentication provider is enabled by default if a user has an API password configured.
|
||||
|
||||
## {% linkable_title Configuring auth providers %}
|
||||
|
||||
<p class='note warning'>
|
||||
Home Assistant automatically configures the standard auth providers and you **do not** need to specify `auth_providers` in your `configuration.yaml` file. Specifying `auth_providers` in your configuration will disable all auth providers that are not listed and can reduce your security or create difficulties logging in.
|
||||
Home Assistant automatically configures the standard auth providers so you don't need to specify `auth_providers` in your `configuration.yaml` file unless you are configuring more than one. Specifying `auth_providers` will disable all auth providers that are not listed, so you could reduce your security or create difficulties logging in if it is not configured correctly.
|
||||
</p>
|
||||
|
||||
<p class='note warning'>
|
||||
[Issue 16441](https://github.com/home-assistant/home-assistant/issues/16441): the legacy API password auth provider won't be automatically configured if your API password is located in a package. This is because Home Assistant processes the `auth_provider` during the `core` section loading, which is earlier than the `packages` processing.
|
||||
</p>
|
||||
|
||||
Authentication providers are configured in your `configuration.yaml` under the `homeassistant:` block:
|
||||
Authentication providers are configured in your `configuration.yaml` under the `homeassistant:` block. You can supply more than one, for example:
|
||||
|
||||
```yaml
|
||||
homeassistant:
|
||||
@ -41,13 +38,15 @@ homeassistant:
|
||||
|
||||
## {% linkable_title Available auth providers %}
|
||||
|
||||
Below is a list of currently available auth providers.
|
||||
|
||||
### {% linkable_title Home Assistant auth provider %}
|
||||
|
||||
This is the default auth provider which stores the users in your configuration directory. All passwords are stored hashed and with a salt, making it almost impossible for an attacker to figure out the password from the storage.
|
||||
This is the default auth provider. The first user created is designated as the _owner_ and can create other users.
|
||||
|
||||
Users for this auth provider can be managed via the UI by the owner. Navigate to the configuration panel and click on users.
|
||||
User details are stored in the `[your config]/.storage` directory. All passwords are stored hashed and with a salt, making it almost impossible for an attacker to figure out the password even if they have access to the file.
|
||||
|
||||
Users can be managed in Home Assistant by the owner. Go to the configuration panel and click on _Users_.
|
||||
|
||||
This is the entry in `configuration.yaml` for Home Assistant auth:
|
||||
|
||||
```yaml
|
||||
homeassistant:
|
||||
@ -55,14 +54,20 @@ homeassistant:
|
||||
- type: homeassistant
|
||||
```
|
||||
|
||||
If you don't specify any `auth_providers` section in the `configuration.yaml` file then this provider will be set up automatically.
|
||||
|
||||
### {% linkable_title Trusted Networks %}
|
||||
|
||||
With the trusted networks auth provider you can whitelist an IP range for which no authentication will be required. The user will be prompted to pick a user to log in as.
|
||||
The Trusted Networks auth provider defines a range of IP addresses for which no authentication will be required (also known as "whitelisting"). For example, you can whitelist your local network so you won't be prompted for a password if you access Home Assistant from inside your home.
|
||||
|
||||
When you log in from one of these networks, you will be asked which user account to use and won't need to enter a password.
|
||||
|
||||
<p class='note info'>
|
||||
The [multi-factor autentication module](../multi-factor-auth) will not participate in login process by using this auth provider.
|
||||
The [multi-factor authentication module](/docs/authentication/multi-factor-auth/) will not participate in the login process if you using this auth provider.
|
||||
</p>
|
||||
|
||||
Here is an example in `configuration.yaml` to set up Trusted Networks:
|
||||
|
||||
```yaml
|
||||
homeassistant:
|
||||
auth_providers:
|
||||
@ -80,6 +85,10 @@ http:
|
||||
|
||||
### {% linkable_title Legacy API password %}
|
||||
|
||||
<p class='note warning'>
|
||||
This is a legacy feature for backwards compatibility and will be dropped in a future release. You should move to one of the other auth providers.
|
||||
</p>
|
||||
|
||||
Activating this auth provider will allow you to authenticate with the API password set in the HTTP component.
|
||||
|
||||
```yaml
|
||||
@ -92,3 +101,7 @@ http:
|
||||
```
|
||||
|
||||
Activating this auth provider will also allow you to provide the API password using an authentication header to make requests against the Home Assistant API. This feature will be dropped in the future in favor of long-lived access tokens.
|
||||
|
||||
<p class='note warning'>
|
||||
[Issue 16441](https://github.com/home-assistant/home-assistant/issues/16441): the legacy API password auth provider, won't be automatically configured if your API password is located in a package. This is because Home Assistant processes the `auth_provider` during the `core` section loading, which is earlier than the `packages` processing.
|
||||
</p>
|
||||
|
@ -25,15 +25,45 @@ homeassistant:
|
||||
- /tmp
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **latitude** (*Optional*): Latitude of your location required to calculate the time the sun rises and sets.
|
||||
- **longitude** (*Optional*): Longitude of your location required to calculate the time the sun rises and sets.
|
||||
- **elevation** (*Optional*): Altitude above sea level in meters. Impacts weather/sunrise data.
|
||||
- **unit_system** (*Optional*): `metric` for Metric, `imperial` for Imperial.
|
||||
- **time_zone** (*Optional*): Pick yours from here: [http://en.wikipedia.org/wiki/List_of_tz_database_time_zones](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
|
||||
- **name** (*Optional*): Name of the location where Home Assistant is running.
|
||||
- **customize** (*Optional*): [Customize](/docs/configuration/customizing-devices/) entities.
|
||||
- **customize_domain** (*Optional*): [Customize](/docs/configuration/customizing-devices/) all entities in a domain.
|
||||
- **customize_glob** (*Optional*): [Customize](/docs/configuration/customizing-devices/) entities matching a pattern.
|
||||
- **whitelist_external_dirs** (*Optional*): List of folders that can be used as sources for sending files.
|
||||
{% configuration %}
|
||||
latitude:
|
||||
description: Latitude of your location required to calculate the time the sun rises and sets.
|
||||
required: false
|
||||
type: float
|
||||
longitude:
|
||||
description: Longitude of your location required to calculate the time the sun rises and sets.
|
||||
required: false
|
||||
type: float
|
||||
elevation:
|
||||
description: Altitude above sea level in meters. Impacts weather/sunrise data.
|
||||
required: false
|
||||
type: integer
|
||||
unit_system:
|
||||
description: "`metric` for Metric, `imperial` for Imperial."
|
||||
required: false
|
||||
type: string
|
||||
time_zone:
|
||||
description: "Pick yours from here: [http://en.wikipedia.org/wiki/List_of_tz_database_time_zones](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones)"
|
||||
required: false
|
||||
type: string
|
||||
name:
|
||||
description: Name of the location where Home Assistant is running.
|
||||
required: false
|
||||
type: string
|
||||
customize:
|
||||
description: "[Customize](/docs/configuration/customizing-devices/) entities."
|
||||
required: false
|
||||
type: string
|
||||
customize_domain:
|
||||
description: "[Customize](/docs/configuration/customizing-devices/) all entities in a domain."
|
||||
required: false
|
||||
type: string
|
||||
customize_glob:
|
||||
description: "[Customize](/docs/configuration/customizing-devices/) entities matching a pattern."
|
||||
required: false
|
||||
type: string
|
||||
whitelist_external_dirs:
|
||||
description: List of folders that can be used as sources for sending files.
|
||||
required: false
|
||||
type: list
|
||||
{% endconfiguration %}
|
||||
|
@ -33,10 +33,19 @@ mqtt:
|
||||
discovery: true
|
||||
discovery_prefix: homeassistant
|
||||
```
|
||||
Configuration variables:
|
||||
|
||||
- **discovery** (*Optional*): If the MQTT discovery should be enabled or not. Defaults to `False`.
|
||||
- **discovery_prefix** (*Optional*): The prefix for the discovery topic. Defaults to `homeassistant`.
|
||||
{% configuration %}
|
||||
discovery:
|
||||
description: If the MQTT discovery should be enabled or not.
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
discovery_prefix:
|
||||
description: The prefix for the discovery topic.
|
||||
required: false
|
||||
default: homeassistant
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
<p class='note'>
|
||||
The [embedded MQTT broker](/docs/mqtt/broker#embedded-broker) does not save any messages between restarts. If you use the embedded MQTT broker you have to send the MQTT discovery messages after every Home Assistant restart for the devices to show up.
|
||||
|
@ -139,6 +139,10 @@ condition:
|
||||
before: sunrise
|
||||
```
|
||||
|
||||
A visual timeline is provided below showing an example of when these conditions will be true. In this chart, sunrise is at 6:00, and sunset is at 18:00 (6:00 PM). The green areas of the chart indicate when the specified conditions will be true.
|
||||
|
||||
<img src='/images/docs/scripts/sun-conditions.svg' alt='Graphic showing an example of sun conditions' />
|
||||
|
||||
### {% linkable_title Template condition %}
|
||||
|
||||
The template condition will test if the [given template][template] renders a value equal to true. This is achieved by having the template result in a true boolean expression or by having the template render 'true'.
|
||||
|
@ -1,141 +1,141 @@
|
||||
{% assign components = site.components | sort_natural: 'title' %}
|
||||
{% assign github_main_repo = 'https://github.com/home-assistant/home-assistant/blob/master/homeassistant' %}
|
||||
{%- assign components = site.components | sort_natural: 'title' -%}
|
||||
{%- assign github_main_repo = 'https://github.com/home-assistant/home-assistant/blob/master/homeassistant' -%}
|
||||
<section class="aside-module grid__item one-whole lap-one-half">
|
||||
{% include edit_github.html %}
|
||||
{%- include edit_github.html -%}
|
||||
|
||||
<div class='brand-logo-container section'>
|
||||
{% if page.logo %}
|
||||
{%- if page.logo -%}
|
||||
<img src='/images/supported_brands/{{ page.logo }}' />
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
</div>
|
||||
|
||||
{% assign file_parts = page.url | split: '/' | last | split: '.' %}
|
||||
{%- assign file_parts = page.url | split: '/' | last | split: '.' -%}
|
||||
|
||||
{% if file_parts.size == 2 %}
|
||||
{% assign is_platform = true %}
|
||||
{% assign imp_name = file_parts[1] %}
|
||||
{% assign parent_name = file_parts[0] %}
|
||||
{% assign parent_url = parent_name | prepend: '/components/' | append: '/' %}
|
||||
{% assign parent_component = components | where: 'url', parent_url | first %}
|
||||
{% else %}
|
||||
{% assign is_platform = false %}
|
||||
{% assign imp_name = file_parts | first %}
|
||||
{% endif %}
|
||||
{%- if file_parts.size == 2 -%}
|
||||
{%- assign is_platform = true -%}
|
||||
{%- assign imp_name = file_parts[1] -%}
|
||||
{%- assign parent_name = file_parts[0] -%}
|
||||
{%- assign parent_url = parent_name | prepend: '/components/' | append: '/' -%}
|
||||
{%- assign parent_component = components | where: 'url', parent_url | first -%}
|
||||
{%- else -%}
|
||||
{%- assign is_platform = false -%}
|
||||
{%- assign imp_name = file_parts | first -%}
|
||||
{%- endif -%}
|
||||
|
||||
{% if page.ha_iot_class %}
|
||||
{%- if page.ha_iot_class -%}
|
||||
<div class='section'>
|
||||
IoT class<sup><a href='/blog/2016/02/12/classifying-the-internet-of-things/#classifiers'><i class="icon-info-sign"></i></a></sup>: {{ page.ha_iot_class }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
|
||||
{% if page.ha_qa_scale %}
|
||||
{%- if page.ha_qa_scale -%}
|
||||
<div class='section'>
|
||||
Quality Scale: <a href='/docs/quality_scale/'>
|
||||
{% if page.ha_qa_scale == 'platinum' %}
|
||||
{%- if page.ha_qa_scale == 'platinum' -%}
|
||||
🏆 (platinum)
|
||||
{% elsif page.ha_qa_scale == 'gold' %}
|
||||
{%- elsif page.ha_qa_scale == 'gold' -%}
|
||||
🥇 (gold)
|
||||
{% elsif page.ha_qa_scale == 'silver' %}
|
||||
{%- elsif page.ha_qa_scale == 'silver' -%}
|
||||
🥈 (silver)
|
||||
{% elsif page.ha_qa_scale == 'internal' %}
|
||||
{%- elsif page.ha_qa_scale == 'internal' -%}
|
||||
🏠 (internal)
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
|
||||
{% if page.ha_release %}
|
||||
{%- if page.ha_release -%}
|
||||
<div class='section'>
|
||||
Introduced in release: {{ page.ha_release }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
|
||||
{% if is_platform %}
|
||||
{%- if is_platform -%}
|
||||
<div class='section'>
|
||||
Source:
|
||||
<a href='{{github_main_repo}}{{parent_url}}{{imp_name}}.py'>{{parent_name}}/{{imp_name}}.py</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
|
||||
{% if is_platform and parent_name != 'sensor' %}
|
||||
{%- if is_platform and parent_name != 'sensor' -%}
|
||||
<div class='section'>
|
||||
This is a platform for
|
||||
<a href='{{parent_component.url}}'>the {{parent_component.title}} component</a>.
|
||||
</div>
|
||||
|
||||
{% elsif is_platform == false and imp_name != 'ifttt' %}
|
||||
{%- elsif is_platform == false and imp_name != 'ifttt' -%}
|
||||
|
||||
{% assign platforms_found = false %}
|
||||
{% for component in components %}
|
||||
{% if component.url != page.url %}
|
||||
{% assign comp_imp_name = component.url | split: '/' | last | split: '.' | first %}
|
||||
{% if comp_imp_name == imp_name %}
|
||||
{% unless platforms_found %}
|
||||
{% assign platforms_found = true %}
|
||||
{%- assign platforms_found = false -%}
|
||||
{%- for component in components -%}
|
||||
{%- if component.url != page.url -%}
|
||||
{%- assign comp_imp_name = component.url | split: '/' | last | split: '.' | first -%}
|
||||
{%- if comp_imp_name == imp_name %}
|
||||
{%- unless platforms_found -%}
|
||||
{%- assign platforms_found = true -%}
|
||||
<h1 class='title delta'>Platforms</h1>
|
||||
<ul class='divided'>
|
||||
{% endunless %}
|
||||
{%- endunless -%}
|
||||
<li><a href='{{component.url}}'>
|
||||
{{component.title}}
|
||||
</a></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif -%}
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
|
||||
{% if platforms_found %}
|
||||
{%- if platforms_found -%}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
|
||||
|
||||
{% assign related_found = false %}
|
||||
{% for component in components %}
|
||||
{% if component.url != page.url %}
|
||||
{% assign comp_file_parts = component.url | split: '/' | last | split: '.' %}
|
||||
{% if comp_file_parts.size == 2 %}
|
||||
{% assign comp_imp_name = comp_file_parts | last %}
|
||||
{% else %}
|
||||
{% assign comp_imp_name = comp_file_parts | first %}
|
||||
{% endif %}
|
||||
{%- assign related_found = false -%}
|
||||
{%- for component in components -%}
|
||||
{%- if component.url != page.url -%}
|
||||
{%- assign comp_file_parts = component.url | split: '/' | last | split: '.' -%}
|
||||
{%- if comp_file_parts.size == 2 -%}
|
||||
{%- assign comp_imp_name = comp_file_parts | last -%}
|
||||
{%- else -%}
|
||||
{%- assign comp_imp_name = comp_file_parts | first -%}
|
||||
{%- endif -%}
|
||||
|
||||
{% if comp_imp_name == imp_name %}
|
||||
{% unless related_found %}
|
||||
{% assign related_found = true %}
|
||||
{%- if comp_imp_name == imp_name -%}
|
||||
{%- unless related_found -%}
|
||||
{%- assign related_found = true -%}
|
||||
<div class='section'>
|
||||
<h1 class='title delta'>Related components</h1>
|
||||
<ul class='divided'>
|
||||
{% endunless %}
|
||||
{%- endunless -%}
|
||||
<li><a href='{{component.url}}'>
|
||||
{{component.title}}
|
||||
</a></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
|
||||
{% if related_found %}
|
||||
{%- if related_found -%}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
|
||||
|
||||
|
||||
{% if page.ha_category %}
|
||||
{%- if page.ha_category -%}
|
||||
<div class='section'>
|
||||
<h1 class="title delta">Category {{page.ha_category}}</h1>
|
||||
<ul class='divided'>
|
||||
{% for component in components %}
|
||||
{% if component.ha_category == page.ha_category %}
|
||||
{%- for component in components -%}
|
||||
{%- if component.ha_category == page.ha_category -%}
|
||||
<li>
|
||||
{% if component.url == page.url %}
|
||||
{%- if component.url == page.url -%}
|
||||
{{component.title}}
|
||||
{% else %}
|
||||
{%- else -%}
|
||||
<a href='{{component.url}}'>{{component.title}}</a>
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{%- endif -%}
|
||||
</section>
|
||||
|
@ -1,10 +0,0 @@
|
||||
---
|
||||
# Jekyll layout that compresses HTML
|
||||
# v3.0.2
|
||||
# http://jch.penibelst.de/
|
||||
# © 2014–2015 Anatol Broder
|
||||
# MIT License
|
||||
---
|
||||
|
||||
{% capture _LINE_FEED %}
|
||||
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd p rt rp optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
|
@ -1,7 +1,3 @@
|
||||
---
|
||||
layout: compress
|
||||
---
|
||||
|
||||
{% capture root_url %}{{ site.root | strip_slash }}{% endcapture %}{% include site/head.html %}
|
||||
|
||||
<body {% if page.body_id %} id="{{ page.body_id }}"{% endif %}>
|
||||
|
@ -76,7 +76,7 @@ Title and Script Service Example:
|
||||
|
||||
```yaml
|
||||
- type: entity-button
|
||||
title: Turn Off Lights
|
||||
name: Turn Off Lights
|
||||
entity: script.turn_off_lights
|
||||
service: script.turn_on
|
||||
```
|
||||
|
@ -78,6 +78,22 @@ Other things to be aware of:
|
||||
[openuv docs]: /components/openuv/
|
||||
[twilio docs]: /components/twilio/
|
||||
|
||||
## {% linkable_title Release 0.81.2 - October 29 %}
|
||||
|
||||
- Fix controller not being stored when setup fails and sequentially fails the retry functionality ([@Kane610] - [#17927]) ([unifi docs])
|
||||
- Pass hass_config to load_platform ([@balloob] - [#17952])
|
||||
- Update requests to 2.20.0 ([@balloob] - [#17978])
|
||||
- Don't use keyset ([@balloob] - [#17984]) ([cloud docs])
|
||||
|
||||
[#17927]: https://github.com/home-assistant/home-assistant/pull/17927
|
||||
[#17952]: https://github.com/home-assistant/home-assistant/pull/17952
|
||||
[#17978]: https://github.com/home-assistant/home-assistant/pull/17978
|
||||
[#17984]: https://github.com/home-assistant/home-assistant/pull/17984
|
||||
[@Kane610]: https://github.com/Kane610
|
||||
[@balloob]: https://github.com/balloob
|
||||
[cloud docs]: /components/cloud/
|
||||
[unifi docs]: /components/unifi/
|
||||
|
||||
## {% linkable_title If you need help... %}
|
||||
|
||||
...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks.
|
||||
|
@ -40,11 +40,11 @@ Support for these components is provided by the Home Assistant community.
|
||||
<a href='#version/{{ added_one_ago_version }}' class="btn added_one_version_ago">Added in {{ added_one_ago_version }} ({{ one_ago_version_components_count }})</a>
|
||||
<a href='#version/{{ added_two_ago_version }}' class="btn added_two_versions_ago">Added in {{ added_two_ago_version }} ({{ two_ago_version_components_count }})</a>
|
||||
|
||||
{% for category in categories %}
|
||||
{% if category and category != 'Other' %}
|
||||
{%- for category in categories -%}
|
||||
{%- if category and category != 'Other' -%}
|
||||
<a href='#{{ category | slugify }}' class="btn">{{ category }} ({{ components | where: 'ha_category', category | size }})</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
|
||||
<a href='#other' class="btn">Other</a>
|
||||
</div>
|
||||
@ -61,11 +61,11 @@ Support for these components is provided by the Home Assistant community.
|
||||
|
||||
{% comment %}
|
||||
## Pages without categories
|
||||
{% for component in components %}
|
||||
{%- for component in components -%}
|
||||
{% unless component.ha_category %}
|
||||
<p>{{ component.title }}</p>
|
||||
{% endunless %}
|
||||
{% endfor %}
|
||||
{%- endfor -%}
|
||||
{% endcomment %}
|
||||
|
||||
<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.4.js"></script>
|
||||
@ -89,14 +89,14 @@ Support for these components is provided by the Home Assistant community.
|
||||
<script type="text/javascript">
|
||||
// This object contains all components we have
|
||||
var allComponents = [
|
||||
{% for component in components %}
|
||||
{% if component.ha_category %}
|
||||
{% assign sliced_version = component.ha_release | split: '.' %}
|
||||
{% assign minor_version = sliced_version[1]|plus: 0 %}
|
||||
{% assign major_version = sliced_version[0]|plus: 0 %}
|
||||
{%- for component in components -%}
|
||||
{%- if component.ha_category -%}
|
||||
{%- assign sliced_version = component.ha_release | split: '.' -%}
|
||||
{%- assign minor_version = sliced_version[1]|plus: 0 -%}
|
||||
{%- assign major_version = sliced_version[0]|plus: 0 -%}
|
||||
{url:"{{ component.url }}", title:"{{component.title}}", cat:"{{component.ha_category | slugify}}", featured: {% if component.featured %}true{% else %}false{% endif %}, v: "{{major_version}}.{{minor_version}}", logo: "{{component.logo}}"},
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif -%}
|
||||
{%- endfor -%}
|
||||
false
|
||||
];
|
||||
allComponents.pop(); // remove placeholder element at the end
|
||||
@ -260,10 +260,10 @@ allComponents.pop(); // remove placeholder element at the end
|
||||
|
||||
<noscript>
|
||||
<ul>
|
||||
{% for component in components %}
|
||||
{% if component.ha_category %}
|
||||
{%- for component in components -%}
|
||||
{%- if component.ha_category -%}
|
||||
<li><a href='{{ component.url }}'>{{ component.title }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
</ul>
|
||||
</noscript>
|
||||
|
@ -29,7 +29,7 @@ We will need a few things to get started with installing Home Assistant. For bes
|
||||
|
||||
### {% linkable_title Software requirements %}
|
||||
|
||||
- Download the Hass.io image for [your device](https://www.home-assistant.io/hassio/installation/)
|
||||
- Download the Hass.io image for [your device](/hassio/installation/)
|
||||
- Download [Etcher] to write the image to an SD card
|
||||
- Text Editor like [Visual Studio Code](https://code.visualstudio.com/)
|
||||
|
||||
|
@ -26,8 +26,8 @@ The following will take you through the steps required to install Hass.io.
|
||||
|
||||
- As a virtual appliance:
|
||||
|
||||
- [OVA][Virtual Appliance]
|
||||
- [VMDK][vmdk]
|
||||
- [OVA][Virtual Appliance] (not available at this time!)
|
||||
|
||||
2. Install Hass.io:
|
||||
|
||||
|
BIN
source/images/docs/scripts/sun-conditions-source.ods
Normal file
BIN
source/images/docs/scripts/sun-conditions-source.ods
Normal file
Binary file not shown.
74
source/images/docs/scripts/sun-conditions.svg
Normal file
74
source/images/docs/scripts/sun-conditions.svg
Normal file
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="199mm" height="90mm" viewBox="0 0 19900 9000" version="1.1" xmlns="http://www.w3.org/2000/svg" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve">
|
||||
<path fill="rgb(255,255,255)" stroke="none" d="M 9975,8991 L 22,8991 22,0 19928,0 19928,8991 9975,8991 Z"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12575,8163 L 6643,8163 6643,178 18507,178 18507,8163 12575,8163 Z"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6643,177 L 6643,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9609,177 L 9609,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12574,177 L 12574,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 15540,177 L 15540,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 18507,177 L 18507,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6643,8312 L 6643,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6643,8312 L 6643,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9609,8312 L 9609,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 9609,8312 L 9609,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12574,8312 L 12574,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 12574,8312 L 12574,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 15540,8312 L 15540,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 15540,8312 L 15540,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 18507,8312 L 18507,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 18507,8312 L 18507,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6643,8162 L 18507,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,8162 L 6643,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,8162 L 6643,8162"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,7274 L 6643,7274"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,7274 L 6643,7274"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,6387 L 6643,6387"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,6387 L 6643,6387"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,5500 L 6643,5500"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,5500 L 6643,5500"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,4612 L 6643,4612"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,4612 L 6643,4612"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,3726 L 6643,3726"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,3726 L 6643,3726"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,2839 L 6643,2839"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,2839 L 6643,2839"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,1951 L 6643,1951"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,1951 L 6643,1951"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,1064 L 6643,1064"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,1064 L 6643,1064"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,177 L 6643,177"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6493,177 L 6643,177"/>
|
||||
<path fill="none" stroke="rgb(179,179,179)" stroke-linejoin="round" d="M 6643,8162 L 6643,177"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="508" stroke-linejoin="round" d="M 16035,7274 L 18506,7274"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="508" stroke-linejoin="round" d="M 15540,6387 L 18506,6387"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="508" stroke-linejoin="round" d="M 6643,5500 L 16035,5500"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="508" stroke-linejoin="round" d="M 6643,4612 L 15540,4612"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="508" stroke-linejoin="round" d="M 10102,3726 L 18506,3726"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="508" stroke-linejoin="round" d="M 9609,2839 L 18506,2839"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="508" stroke-linejoin="round" d="M 6643,1951 L 10102,1951"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="508" stroke-linejoin="round" d="M 6643,1064 L 9609,1064"/>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6193" y="8730"><tspan fill="rgb(0,0,0)" stroke="none">00:00</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9159" y="8730"><tspan fill="rgb(0,0,0)" stroke="none">06:00</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="12125" y="8730"><tspan fill="rgb(0,0,0)" stroke="none">12:00</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="15091" y="8730"><tspan fill="rgb(0,0,0)" stroke="none">18:00</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="18058" y="8730"><tspan fill="rgb(0,0,0)" stroke="none">00:00</tspan></tspan></tspan></text>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="254" stroke-linejoin="round" d="M 875,1065 L 1675,1065"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="254" stroke-linejoin="round" d="M 875,1958 L 1675,1958"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="254" stroke-linejoin="round" d="M 875,2851 L 1675,2851"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="254" stroke-linejoin="round" d="M 875,3744 L 1675,3744"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="254" stroke-linejoin="round" d="M 875,4636 L 1675,4636"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="254" stroke-linejoin="round" d="M 875,5529 L 1675,5529"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="254" stroke-linejoin="round" d="M 875,6422 L 1675,6422"/>
|
||||
<path fill="none" stroke="rgb(114,191,68)" stroke-width="254" stroke-linejoin="round" d="M 875,7315 L 1675,7315"/>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="1775" y="1210"><tspan fill="rgb(0,0,0)" stroke="none">Before Sunrise</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="1775" y="2103"><tspan fill="rgb(0,0,0)" stroke="none">Before Sunrise +1:00:00</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="1775" y="2996"><tspan fill="rgb(0,0,0)" stroke="none">After Sunrise</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="1775" y="3889"><tspan fill="rgb(0,0,0)" stroke="none">After Sunrise +1:00:00</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="1775" y="4781"><tspan fill="rgb(0,0,0)" stroke="none">Before Sunset</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="1775" y="5674"><tspan fill="rgb(0,0,0)" stroke="none">Before Sunset +1:00:00</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="1775" y="6567"><tspan fill="rgb(0,0,0)" stroke="none">After Sunset</tspan></tspan></tspan></text>
|
||||
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="1775" y="7460"><tspan fill="rgb(0,0,0)" stroke="none">After Sunset +1:00:00</tspan></tspan></tspan></text>
|
||||
<path fill="rgb(255,255,255)" stroke="none" d="M 1687,4474 L 1687,8677 786,8677 786,271 1687,271 1687,4474 Z"/>
|
||||
<text class="TextShape" transform="translate(1421,8582) rotate(-90) translate(-1421,-8582)"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="529px" font-weight="400"><tspan class="TextPosition" x="1421" y="8582"><tspan fill="rgb(255,255,255)" stroke="none">AAAAAAAAAAAAAAAAAAAAAAA</tspan></tspan></tspan></text>
|
||||
</svg>
|
After Width: | Height: | Size: 9.7 KiB |
@ -65,7 +65,7 @@ excluded_entities:
|
||||
views:
|
||||
# View tab title.
|
||||
- title: Example
|
||||
# Optional unique id for direct access /lovelace/${id}
|
||||
# Unique id for direct access /lovelace/${id}. If you don't specify one, it is added automatically.
|
||||
id: example
|
||||
# Optional background (overwrites the global background).
|
||||
background: radial-gradient(crimson, skyblue)
|
||||
@ -74,7 +74,8 @@ views:
|
||||
# The cards to show on this view.
|
||||
cards:
|
||||
# The filter card will filter entities for their state
|
||||
- type: entity-filter
|
||||
- id: peoplehome # Every card needs an ID, if you don't specify one, it is added automatically.
|
||||
type: entity-filter
|
||||
entities:
|
||||
- device_tracker.paulus
|
||||
- device_tracker.anne_there
|
||||
@ -116,6 +117,9 @@ views:
|
||||
|
||||
Now restart Home Assistant, navigate to `<YOUR HASS URL>/lovelace`. When you make changes to `ui-lovelace.yaml`, you don't have to restart Home Assistant or refresh the page. Just hit the refresh button at the top of the UI.
|
||||
|
||||
## {% linkable_title IDs for cards and views %}
|
||||
Every card and view needs an ID, this is used to edit your config from the UI. If you don't specify an ID, Home Assistant will add one. If you don't want Home Assistant to write to your `ui-lovelace.yaml` file, make sure every view and card have an ID.
|
||||
|
||||
## {% linkable_title Setting Lovelace as the Default UI %}
|
||||
Once you are ready to start using Lovelace UI as your main user interface, click on info, the "i" icon under 'Developer Tools" in the Home Assistant side-bar. Next, locate >>Set Lovelace as default page on this device<< under the Home Assistant version information and click it.
|
||||
|
||||
@ -151,3 +155,9 @@ frontend:
|
||||
Given examples refer to `/local/example_image.jpg`. That means you should have `www` directory next to your HA `configuration.yaml`. An image kept in `HA_configuration_dir/www/example_image.jpg` will be shown after refreshing Lovelace page.
|
||||
|
||||
Restart Home Assistant after creating the `www` directory. Otherwise, HA will not know that you created this directory.
|
||||
|
||||
### {% linkable_title My `ui-lovelace.yaml` file suddenly has ID's added to all cards and views! %}
|
||||
|
||||
Since version 0.81 we started preparing for the ability to edit you Lovelace UI from the UI itself. To be able to do this every view and card should have a unique ID. If your cards or views do not have an ID, Home Assistant will add a random one. You can edit the ID, the only restriction is that it is unique.
|
||||
|
||||
If you don't want Home Assistant to write to your `ui-lovelace.yaml` file, make sure all your views and cards have an ID, then Home Assistant will not touch your file.
|
||||
|
@ -36,9 +36,11 @@ you with the ability to split your Lovelace configuration into multiple files.
|
||||
The [Lovelace Jinja2 Script][lovelace-jinja] by [@skalavala] is a simple Jinja2 script that you run in the template editor to generate lovelace configuration based on the entities that are already setup.
|
||||
|
||||
<p class='note'>
|
||||
Split configuration is no longer possible directly in Lovelace,
|
||||
due to fact that Home Assistant writes directly to the `ui-lovelace.yaml` file.
|
||||
Use one of the above generators if you would like to contintue to have such functionality.
|
||||
Split configuration is no longer possible in Lovelace since version 0.81, due to the fact that Home Assistant
|
||||
will be writing directly to the `ui-lovelace.yaml` file.
|
||||
|
||||
If you want to split your configuration you can use one of the tools listed above, but edits done with the UI will
|
||||
be overwritten by those tools, so you should not use both.
|
||||
</p>
|
||||
|
||||
## {% linkable_title Tips and Tricks %}
|
||||
|
@ -36,7 +36,7 @@ views:
|
||||
type: list
|
||||
id:
|
||||
required: false
|
||||
description: IDs are used in the URL, more info below.
|
||||
description: IDs are used in the URL, more info below. If you don't specify an ID, a random one will be added automatically.
|
||||
type: string
|
||||
default: view index
|
||||
icon:
|
||||
@ -62,6 +62,8 @@ views:
|
||||
|
||||
You can link to one view from another view by its ID. For this use cards that support navigation (`navigation_path`). Do not use special characters in IDs.
|
||||
|
||||
IDs are also used to identify a view for editing in the Home Assistant frontend (not yet released), we will add a randomly generated ID to your view if you don't specify one. You can change this ID, as long as every view has a unique ID.
|
||||
|
||||
### {% linkable_title Example %}
|
||||
|
||||
View config:
|
||||
|
Loading…
x
Reference in New Issue
Block a user