mirror of
https://github.com/home-assistant/home-assistant.io.git
synced 2025-07-21 16:27:19 +00:00
Merge remote-tracking branch 'origin/current' into next
This commit is contained in:
commit
111b08281d
@ -139,12 +139,12 @@ social:
|
||||
|
||||
# Home Assistant release details
|
||||
current_major_version: 0
|
||||
current_minor_version: 53
|
||||
current_patch_version: 1
|
||||
date_released: 2017-09-12
|
||||
current_minor_version: 54
|
||||
current_patch_version: 0
|
||||
date_released: 2017-09-23
|
||||
|
||||
# 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-0531---september-11"
|
||||
patch_version_notes: "#"
|
||||
# Minor release (Example #release-0431---april-25):
|
||||
|
114
plugins/configuration.rb
Normal file
114
plugins/configuration.rb
Normal file
@ -0,0 +1,114 @@
|
||||
module Jekyll
|
||||
class ConfigurationBlock < Liquid::Block
|
||||
TYPE_LINKS = {
|
||||
'action' => '/docs/scripts/',
|
||||
'device_class' => '/components/%{component}/#device_class',
|
||||
'template' => '/docs/configuration/templating/',
|
||||
}
|
||||
|
||||
def initialize(tag_name, text, tokens)
|
||||
super
|
||||
@component, @platform = text.strip.split('.', 2)
|
||||
end
|
||||
|
||||
def slug(key)
|
||||
key.downcase.strip.gsub(' ', '-').gsub(/[^\w\-]/, '')
|
||||
end
|
||||
|
||||
def type_class(type)
|
||||
((type.is_a? Array) ? type.join(' ') : type).downcase
|
||||
end
|
||||
|
||||
def type_link(type, component: nil)
|
||||
if type.include? ','
|
||||
type = type.split(',')
|
||||
end
|
||||
|
||||
if type.is_a? Array
|
||||
return (type.map { |t| type_link(t, component: component) }).join(' | ')
|
||||
end
|
||||
|
||||
type.strip!
|
||||
if TYPE_LINKS.include? type.downcase
|
||||
url = TYPE_LINKS[type.downcase] % {component: component}
|
||||
"[%s](%s)" % [type, url]
|
||||
else
|
||||
type
|
||||
end
|
||||
end
|
||||
|
||||
def required_value(value)
|
||||
if value === true
|
||||
"Required"
|
||||
elsif value === false
|
||||
"Optional"
|
||||
else
|
||||
value.strip.titlecase
|
||||
end
|
||||
end
|
||||
|
||||
def render_config_vars(vars:, component:, platform:, classes: nil)
|
||||
result = Array.new
|
||||
result << "<dl class='#{classes}'>"
|
||||
|
||||
result << vars.map do |key, attr|
|
||||
markup = Array.new
|
||||
markup << "<dt><a class='title-link' name='#{slug(key)}' href='\##{slug(key)}'></a> #{key}</dt>"
|
||||
markup << "<dd>"
|
||||
markup << "<p class='desc'>"
|
||||
if attr.key? 'type'
|
||||
markup << "<span class='type'>(<span class='#{type_class(attr['type'])}'>"
|
||||
markup << "#{type_link(attr['type'], component: component)}</span>)</span>"
|
||||
end
|
||||
if attr.key? 'required'
|
||||
markup << "<span class='required'>(#{required_value(attr['required'])})</span>"
|
||||
end
|
||||
if attr.key? 'description'
|
||||
markup << "<span class='description'>#{attr['description']}</span>"
|
||||
end
|
||||
markup << "</p>"
|
||||
if attr.key? 'default'
|
||||
markup << "<p class='default'>Default value: #{attr['default']}</p>"
|
||||
end
|
||||
markup << "</dd>"
|
||||
|
||||
# Check for nested configuration variables
|
||||
if attr.key? 'keys'
|
||||
markup << "<dd>"
|
||||
markup << render_config_vars(
|
||||
vars: attr['keys'], component: component,
|
||||
platform: platform, classes: 'nested')
|
||||
markup << "</dd>"
|
||||
end
|
||||
|
||||
markup
|
||||
end
|
||||
|
||||
result << "</dl>"
|
||||
result.join
|
||||
end
|
||||
|
||||
def render(context)
|
||||
if @component.nil? and @platform.nil?
|
||||
page = context.environments.first['page']
|
||||
@component, @platform = page['slug'].split('.', 2)
|
||||
end
|
||||
|
||||
contents = super(context)
|
||||
|
||||
component = Liquid::Template.parse(@component).render context
|
||||
platform = Liquid::Template.parse(@platform).render context
|
||||
|
||||
vars = SafeYAML.load(contents)
|
||||
|
||||
<<~MARKUP
|
||||
<div class="config-vars">
|
||||
<h3><a class="title-link" name="configuration-variables" href="#configuration-variables"></a> Configuration Variables</h3>
|
||||
#{render_config_vars(vars: vars, component: component, platform: platform)}
|
||||
</div>
|
||||
MARKUP
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Liquid::Template.register_tag('configuration', Jekyll::ConfigurationBlock)
|
@ -100,7 +100,6 @@ $primary-color: #049cdb;
|
||||
}
|
||||
|
||||
.frontpage {
|
||||
|
||||
.material-card {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
@ -109,7 +108,6 @@ $primary-color: #049cdb;
|
||||
.release-date {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.recent-posts {
|
||||
@ -202,7 +200,8 @@ h2:hover a.title-link,
|
||||
h3:hover a.title-link,
|
||||
h4:hover a.title-link,
|
||||
h5:hover a.title-link,
|
||||
h6:hover a.title-link {
|
||||
h6:hover a.title-link,
|
||||
dt:hover a.title-link {
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
@ -310,6 +309,13 @@ article.post, article.page, article.listing {
|
||||
h2 {
|
||||
font-size: 1.5em;
|
||||
margin-top: 2em;
|
||||
|
||||
// Future re-design
|
||||
// margin: 1.5em 0 1rem;
|
||||
//
|
||||
// border: 0;
|
||||
// border-top: 1px solid $primary-color;
|
||||
// padding-top: 1.4rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
@ -317,11 +323,17 @@ article.post, article.page, article.listing {
|
||||
letter-spacing: 0.125rem;
|
||||
font-size: 1.2rem;
|
||||
margin-top: 2em;
|
||||
|
||||
// Future re-design
|
||||
// margin: 2em 0 1rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.1rem;
|
||||
margin-top: 2em;
|
||||
|
||||
// Future re-design
|
||||
// margin: 1.5em 0 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@ -431,7 +443,7 @@ ul.sidebar-menu {
|
||||
}
|
||||
|
||||
a code {
|
||||
color: #049cdb;
|
||||
color: $primary-color;
|
||||
}
|
||||
|
||||
twitterwidget {
|
||||
@ -447,3 +459,48 @@ twitterwidget {
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
// Configuration variables
|
||||
div.config-vars {
|
||||
// Future re-design
|
||||
// h3 {
|
||||
// border: 0;
|
||||
// border-top: 1px solid $primary-color;
|
||||
// padding-top: 1.4rem;
|
||||
// }
|
||||
|
||||
dl {
|
||||
margin-bottom: 1.5em;
|
||||
|
||||
&.nested {
|
||||
border-left: 1px dotted $primary-color;
|
||||
padding-left: 6px;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin: 0 0 0.5em 1em;
|
||||
|
||||
p.desc {
|
||||
margin: 0;
|
||||
|
||||
span.type,
|
||||
span.required {
|
||||
font-style: italic;
|
||||
|
||||
&::after {
|
||||
content: " "
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p.default {
|
||||
font-style: italic;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,145 +1,191 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Template Binary Sensor"
|
||||
description: "Instructions how to integrate Template binary sensors into Home Assistant."
|
||||
description: "Instructions how to integrate Template Binary Sensors into Home Assistant."
|
||||
date: 2016-02-25 15:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
ha_category: Binary Sensor
|
||||
ha_release: 0.12
|
||||
ha_iot_class: "Local Push"
|
||||
logo: home-assistant.png
|
||||
---
|
||||
|
||||
The `template` platform supports sensors which breaks out the `state` and `state_attributes` from other entities. The state of a template binary sensor can only be `on` or `off`.
|
||||
The `template` platform supports sensors which breaks out the `state` and
|
||||
`state_attributes` from other entities. The state of a Template Binary Sensor
|
||||
can only be `on` or `off`.
|
||||
|
||||
To enable template binary sensors in your installation, add the following to your `configuration.yaml` file:
|
||||
To enable Template Binary Sensors in your installation, add the following to
|
||||
your `configuration.yaml` file:
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
binary_sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
sun_up:
|
||||
value_template: {% raw %}'{{ states.sun.sun.attributes.elevation > 0}}'{% endraw %}
|
||||
friendly_name: 'Sun is up'
|
||||
friendly_name: "Sun is up"
|
||||
value_template: >-
|
||||
{{ states.sun.sun.attributes.elevation|float > 0 }}
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
Configuration variables:
|
||||
{% configuration binary_sensor.template %}
|
||||
sensors:
|
||||
description: List of your sensors.
|
||||
required: true
|
||||
type: map
|
||||
keys:
|
||||
friendly_name:
|
||||
description: Name to use in the frontend.
|
||||
required: false
|
||||
type: string
|
||||
entity_id:
|
||||
description: Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update its state.
|
||||
required: false
|
||||
type: string, list
|
||||
device_class:
|
||||
description: The type/class of the sensor to set the icon in the frontend.
|
||||
required: false
|
||||
type: device_class
|
||||
default: None
|
||||
value_template:
|
||||
description: Defines a template to set the state of the sensor.
|
||||
required: true
|
||||
type: template
|
||||
on_delay:
|
||||
description: The amount of time the template state must be ***met*** before this sensor will switch to `on`.
|
||||
required: false
|
||||
type: time
|
||||
off_delay:
|
||||
description: The amount of time the template state must be ***not met*** before this sensor will switch to `off`.
|
||||
required: false
|
||||
type: time
|
||||
{% endconfiguration %}
|
||||
|
||||
- **sensors** array (*Required*): List of your sensors.
|
||||
- **friendly_name** (*Optional*): Name to use in the Frontend.
|
||||
- **device_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend.
|
||||
- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload.
|
||||
- **entity_id** (*Optional*): Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update it's state.
|
||||
- **on_delay** (*Optional*): The amount of time the template state must be met before this sensor will switch to on.
|
||||
- **off_delay** (*Optional*): The amount of time the template state must be not met before this sensor will switch to off.
|
||||
## {% linkable_title Considerations %}
|
||||
|
||||
If you are using the state of a platform that takes extra time to load, the
|
||||
Template Binary Sensor may get an `unknown` state during startup. This results
|
||||
in error messages in your log file until that platform has completed loading.
|
||||
If you use `is_state()` function in your template, you can avoid this situation.
|
||||
For example, you would replace
|
||||
{% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %}
|
||||
with this equivalent that returns `true`/`false` and never gives an unknown
|
||||
result:
|
||||
{% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %}
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
In this section you find some real life examples of how to use this sensor.
|
||||
|
||||
### {% linkable_title Sensor threshold %}
|
||||
### {% linkable_title Sensor Threshold %}
|
||||
|
||||
This example indicates true if a sensor is above a given threshold. Assuming a sensor of `furnace` that provides a current reading for the fan motor, we can determine if the furnace is running by checking that it is over some threshold:
|
||||
This example indicates true if a sensor is above a given threshold. Assuming a
|
||||
sensor of `furnace` that provides a current reading for the fan motor, we can
|
||||
determine if the furnace is running by checking that it is over some threshold:
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
furnace_on:
|
||||
value_template: {% raw %}{{ states.sensor.furnace.state > 2.5 }}{% endraw %}
|
||||
friendly_name: 'Furnace Running'
|
||||
friendly_name: "Furnace Running"
|
||||
device_class: heat
|
||||
value_template: "{{ states('sensor.furnace')|float > 2.5 }}"
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Switch as sensor %}
|
||||
### {% linkable_title Switch as Sensor %}
|
||||
|
||||
Some movement sensors and door/window sensors will appear as a switch. By using a template binary sensor, the switch can be displayed as a binary sensors. The original switch can then be hidden by [customizing.](/getting-started/customizing-devices/)
|
||||
Some movement sensors and door/window sensors will appear as a switch. By using
|
||||
a Template Binary Sensor, the switch can be displayed as a binary sensors. The
|
||||
original switch can then be hidden by
|
||||
[customizing](/getting-started/customizing-devices/).
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
binary_sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
movement:
|
||||
value_template: {% raw %}"{{ states.switch.movement.state == 'on' }}"{% endraw %}
|
||||
device_class: motion
|
||||
value_template: "{{ is_state('switch.movement', 'on') }}"
|
||||
door:
|
||||
value_template: {% raw %}"{{ states.switch.door.state == 'on' }}"{% endraw %}
|
||||
device_class: opening
|
||||
value_template: "{{ is_state('switch.door', 'on') }}"
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
|
||||
### {% linkable_title Combining multiple sensors, and using entity_id: %}
|
||||
### {% linkable_title Combining Multiple Sensors, and Using `entity_id` %}
|
||||
|
||||
This example combines multiple CO sensors into a single overall
|
||||
status. When using templates with binary sensors, you need to return
|
||||
`True` or `False` explicitly. `entity_id` is used to limit which
|
||||
`true` or `false` explicitly. `entity_id` is used to limit which
|
||||
sensors are being monitored to update the state, making computing this
|
||||
sensor far more efficient.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
binary_sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
co:
|
||||
friendly_name: 'CO'
|
||||
device_class: 'gas'
|
||||
value_template: {% raw %}>-
|
||||
{%- if is_state("sensor.bedroom_co_status", "Ok")
|
||||
and is_state("sensor.kitchen_co_status", "Ok")
|
||||
and is_state("sensor.wardrobe_co_status", "Ok") -%}
|
||||
False
|
||||
{%- else -%}
|
||||
True
|
||||
{%- endif %}{% endraw %}
|
||||
friendly_name: "CO"
|
||||
device_class: gas
|
||||
entity_id:
|
||||
- sensor.bedroom_co_status
|
||||
- sensor.kitchen_co_status
|
||||
- sensor.wardrobe_co_status
|
||||
value_template: >-
|
||||
{{ is_state('sensor.bedroom_co_status', 'Ok')
|
||||
and is_state('sensor.kitchen_co_status', 'Ok')
|
||||
and is_state('sensor.wardrobe_co_status', 'Ok') }}
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Washing Machine Running %}
|
||||
|
||||
This example creates a washing machine "load running" sensor by monitoring an energy meter connected to the washer. During the washer's operation, the energy meter will fluctuate wildly, hitting zero frequently even before the load is finished. By utilizing `off_delay`, we can have this sensor only turn off if there has been no washer activity for 5 minutes.
|
||||
This example creates a washing machine "load running" sensor by monitoring an
|
||||
energy meter connected to the washer. During the washer's operation, the energy
|
||||
meter will fluctuate wildly, hitting zero frequently even before the load is
|
||||
finished. By utilizing `off_delay`, we can have this sensor only turn off if
|
||||
there has been no washer activity for 5 minutes.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
# Determine when the washing machine has a load running.
|
||||
binary_sensor:
|
||||
- platform: template
|
||||
name: Washing Machine
|
||||
value_template: {% raw %}'{{ states.sensor.washing_machine_power.state > 0 }}'{% endraw %}
|
||||
sensors:
|
||||
washing_machine:
|
||||
friendly_name: "Washing Machine"
|
||||
off_delay:
|
||||
minutes: 5
|
||||
value_template: >-
|
||||
{{ states('sensor.washing_machine_power')|float > 0 }}
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Is anyone home? %}
|
||||
### {% linkable_title Is Anyone Home? %}
|
||||
|
||||
This example is determining if anyone is home based on the combination
|
||||
of device tracking and motion sensors. It's extremely useful if you
|
||||
have kids/baby sitter/grand parents who might still be in your
|
||||
house that aren't represented by a trackable device in home
|
||||
assistant. This is providing a composite of wifi based device tracking
|
||||
and z-wave multisensor presence sensors.
|
||||
assistant. This is providing a composite of WiFi based device tracking
|
||||
and Z-Wave multisensor presence sensors.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
binary_sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
people_home:
|
||||
value_template: {% raw %}>-
|
||||
{%- if is_state("device_tracker.sean", "home")
|
||||
or is_state("device_tracker.susan", "home")
|
||||
or is_state("binary_sensor.office_124", "on")
|
||||
or is_state("binary_sensor.hallway_134", "on")
|
||||
or is_state("binary_sensor.living_room_139", "on")
|
||||
or is_state("binary_sensor.porch_ms6_1_129", "on")
|
||||
or is_state("binary_sensor.family_room_144", "on")
|
||||
-%}
|
||||
True
|
||||
{%- else -%}
|
||||
False
|
||||
{%- endif %}{% endraw %}
|
||||
entity_id:
|
||||
- device_tracker.sean
|
||||
- device_tracker.susan
|
||||
@ -148,4 +194,13 @@ binary_sensor:
|
||||
- binary_sensor.living_room_139
|
||||
- binary_sensor.porch_ms6_1_129
|
||||
- binary_sensor.family_room_144
|
||||
value_template: >-
|
||||
{{ is_state('device_tracker.sean', 'home')
|
||||
or is_state('device_tracker.susan', 'home')
|
||||
or is_state('binary_sensor.office_124', 'on')
|
||||
or is_state('binary_sensor.hallway_134', 'on')
|
||||
or is_state('binary_sensor.living_room_139', 'on')
|
||||
or is_state('binary_sensor.porch_ms6_1_129', 'on')
|
||||
or is_state('binary_sensor.family_room_144', 'on') }}
|
||||
```
|
||||
{% endraw %}
|
||||
|
@ -12,4 +12,4 @@ ha_category: Binary Sensor
|
||||
ha_iot_class: "Local Polling"
|
||||
---
|
||||
|
||||
To get your ZigBee binary sensors working with Home Assistant, follow then instructions for the general [ZigBee Home Automationcomponent](/components/zha/).
|
||||
To get your ZigBee binary sensors working with Home Assistant, follow the instructions for the general [ZigBee Home Automation component](/components/zha/).
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Template Cover"
|
||||
description: "Instructions how to integrate Template covers into Home Assistant."
|
||||
description: "Instructions how to integrate Template Covers into Home Assistant."
|
||||
date: 2017-06-19 20:32
|
||||
sidebar: true
|
||||
comments: false
|
||||
@ -13,10 +13,14 @@ ha_iot_class: "Local Push"
|
||||
logo: home-assistant.png
|
||||
---
|
||||
|
||||
The `template` platform can create covers that combine components and provides the ability to run scripts or invoke services for each of the open, close, stop, position, and tilt commands of a cover.
|
||||
The `template` platform can create covers that combine components and provides
|
||||
the ability to run scripts or invoke services for each of the open, close,
|
||||
stop, position, and tilt commands of a cover.
|
||||
|
||||
To enable Template covers in your installation, add the following to your `configuration.yaml` file:
|
||||
To enable Template Covers in your installation, add the following to your
|
||||
`configuration.yaml` file:
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
cover:
|
||||
@ -24,7 +28,7 @@ cover:
|
||||
covers:
|
||||
garage_door:
|
||||
friendly_name: "Garage Door"
|
||||
value_template: "{% raw %}'{{is_state('sensor.garage_door > 0'}}'{% endraw %}"
|
||||
value_template: "{{ states('sensor.garage_door')|float > 0 }}"
|
||||
open_cover:
|
||||
service: script.open_garage_door
|
||||
close_cover:
|
||||
@ -32,27 +36,93 @@ cover:
|
||||
stop_cover:
|
||||
service: script.stop_garage_door
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
Configuration variables:
|
||||
{% configuration %}
|
||||
covers:
|
||||
description: List of your covers.
|
||||
required: true
|
||||
type: map
|
||||
keys:
|
||||
friendly_name:
|
||||
description: Name to use in the frontend.
|
||||
required: false
|
||||
type: string
|
||||
entity_id:
|
||||
description: Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the cover will try to update its state.
|
||||
required: false
|
||||
type: [string, list]
|
||||
value_template:
|
||||
description: Defines a template to get the state of the cover. Valid values are `open`/`true` or `closed`/`false`. [`value_template`](#value_template) and [`position_template`](#position_template) cannot be specified concurrently.
|
||||
required: exclusive
|
||||
type: template
|
||||
position_template:
|
||||
description: Defines a template to get the state of the cover. Legal values are numbers between `0` (closed) and `100` (open). [`value_template`](#value_template) and [`position_template`](#position_template) cannot be specified concurrently.
|
||||
required: exclusive
|
||||
type: template
|
||||
icon_template:
|
||||
description: Defines a template to specify which icon to use.
|
||||
required: false
|
||||
type: template
|
||||
open_cover:
|
||||
description: Defines an action to run when the cover is opened. If [`open_cover`](#open_cover) is specified, [`close_cover`](#close_cover) must also be specified. At least one of [`open_cover`](#open_cover) and [`set_cover_position`](#set_cover_position) must be specified.
|
||||
required: inclusive
|
||||
type: action
|
||||
close_cover:
|
||||
description: Defines an action to run when the cover is closed.
|
||||
required: inclusive
|
||||
type: action
|
||||
stop_cover:
|
||||
description: Defines an action to run when the cover is stopped.
|
||||
required: false
|
||||
type: action
|
||||
set_cover_position:
|
||||
description: Defines an action to run when the cover is set to a specific value (between `0` and `100`).
|
||||
required: false
|
||||
type: action
|
||||
set_cover_tilt_position:
|
||||
description: Defines an action to run when the cover tilt is set to a specific value (between `0` and `100`).
|
||||
required: false
|
||||
type: action
|
||||
optimistic:
|
||||
description: Force cover position to use [optimistic mode](#optimistic-mode).
|
||||
required: false
|
||||
type: bool
|
||||
default: false
|
||||
tilt_optimistic:
|
||||
description: Force cover tilt position to use [optimistic mode](#optimistic-mode).
|
||||
required: false
|
||||
type: bool
|
||||
default: false
|
||||
tilt_template:
|
||||
description: Defines a template to get the tilt state of the cover. Legal values are numbers between `0` (closed) and `100` (open).
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
||||
- **covers** array (*Required*): List of your coverss.
|
||||
- **open_cover** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover is opened. If `open_cover` is specified, `close_cover` must also be specified. At least one of `open_cover` and `set_cover_position` must be specified.
|
||||
- **close_cover** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover is closed.
|
||||
- **stop_cover** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover is stopped.
|
||||
- **set_cover_position** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover is set to a specific value (between 0 and 100).
|
||||
- **set_cover_tilt_position** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover tilt is set to a specific value (between 0 and 100).
|
||||
- **value_template** (*Optional*): Defines a [template](/topics/templating/) to get the state of the cover. Valid values are open/true or closed/false. `value_template` and `position_template` cannot be specified concurrently.
|
||||
- **position_template** (*Optional*): Defines a [template](/topics/templating/) to get the state of the cover. Legal values are numbers between 0 (closed) and 100 (open). `value_template` and `position_template` cannot be specified concurrently.
|
||||
- **tilt_template** (*Optional*): Defines a [template](/topics/templating/) to get the tilt state of the cover. Legal values are numbers between 0 (closed) and 100 (open).
|
||||
- **optimistic** (*Optional*): Force cover position to use optimistic mode. Value is either `true` or `false`. [See below](#optimistic-mode) for more details.
|
||||
- **tilt_optimistic** (*Optional*): Force cover tilt position to use optimistic mode. Value is either `true` or `false`. [See below](#optimistic mode) for more details.
|
||||
- **icon_template** (*Optional*): Defines a [template](/topics/templating/) to specify which icon to use. Either `value_template` or `position_template` must be specified.
|
||||
- **friendly_name** (*Optional*): Name to use in the frontend.
|
||||
- **entity_id** (*Optional*): Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the cover will try to update it's state.
|
||||
## {% linkable_title Considerations %}
|
||||
|
||||
## {% linkable_title Optitmistic Mode %}
|
||||
If you are using the state of a platform that takes extra time to load, the
|
||||
Template Cover may get an `unknown` state during startup. This results
|
||||
in error messages in your log file until that platform has completed loading.
|
||||
If you use `is_state()` function in your template, you can avoid this situation.
|
||||
For example, you would replace
|
||||
{% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %}
|
||||
with this equivalent that returns `true`/`false` and never gives an unknown
|
||||
result:
|
||||
{% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %}
|
||||
|
||||
In optmistic mode, the cover position state is maintained internally. This mode is automatically enabled if neither `value_template` or `position_template` are sepcified. Note that this is unlikely to be very reliable without some feedback mechanism, since there is otherwise no way to know if the cover is moving properly. The cover can be forced into optimistic mode by using the `optimistic` attribute. There is an equivalent mode for tilt-position that is enabled when `tilt_template` is not specified or when the `tilt-optimistic` attribute is used.
|
||||
## {% linkable_title Optimistic Mode %}
|
||||
|
||||
In optimistic mode, the cover position state is maintained internally. This
|
||||
mode is automatically enabled if neither [`value_template`](#value_template) or
|
||||
[`position_template`](#position_template) are specified. Note that this is
|
||||
unlikely to be very reliable without some feedback mechanism, since there is
|
||||
otherwise no way to know if the cover is moving properly. The cover can be
|
||||
forced into optimistic mode by using the [`optimistic`](#optimistic)
|
||||
attribute. There is an equivalent mode for `tilt_position` that is enabled
|
||||
when [`tilt_template`](#tilt_template) is not specified or when the
|
||||
[`tilt_optimistic`](#tilt_optimistic) attribute is used.
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
@ -60,34 +130,44 @@ In this section you will find some real life examples of how to use this cover.
|
||||
|
||||
### {% linkable_title Garage Door %}
|
||||
|
||||
This example converts a garage door with a controllable switch and position sensor into a cover.
|
||||
This example converts a garage door with a controllable switch and position
|
||||
sensor into a cover.
|
||||
|
||||
```yaml
|
||||
{% raw %}
|
||||
```yaml
|
||||
cover:
|
||||
- platform: template
|
||||
covers:
|
||||
garage_door:
|
||||
friendly_name: 'Garage Door'
|
||||
value_template: "{{ sensor.garage_door }}"
|
||||
friendly_name: "Garage Door"
|
||||
position_template: "{{ states('sensor.garage_door') }}"
|
||||
open_cover:
|
||||
service: switch.turn_on
|
||||
data:
|
||||
entity_id: switch.garage_door
|
||||
close_cover:
|
||||
service: switch.turn_off
|
||||
data:
|
||||
entity_id: switch.garage_door
|
||||
stop_cover:
|
||||
service: switch.turn_on
|
||||
data:
|
||||
entity_id: switch.garage_door
|
||||
icon_template: "{% if not is_state('sensor.garage_door', 'on') %}mdi:garage-open{% else %}mdi:garage{% endif %}"{% endraw %}
|
||||
icon_template: >-
|
||||
{% if states('sensor.garage_door')|float > 0 %}
|
||||
mdi:garage-open
|
||||
{% else %}
|
||||
mdi:garage
|
||||
{% endif %}
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Multi Covers %}
|
||||
### {% linkable_title Multiple Covers %}
|
||||
|
||||
This example allows you to control two or more covers at once.
|
||||
|
||||
```yaml
|
||||
{% raw %}
|
||||
```yaml
|
||||
homeassistant:
|
||||
customize:
|
||||
all_covers:
|
||||
@ -97,7 +177,7 @@ cover:
|
||||
- platform: template
|
||||
covers:
|
||||
all_covers:
|
||||
friendly_name: 'All Covers'
|
||||
friendly_name: "All Covers"
|
||||
open_cover:
|
||||
service: script.cover_all_open
|
||||
close_cover:
|
||||
@ -108,20 +188,13 @@ cover:
|
||||
service: script.cover_all_set_position
|
||||
data_template:
|
||||
position: "{{ position }}"
|
||||
value_template: >
|
||||
{% if is_state('sensor.all_covers', 'open') %}
|
||||
open
|
||||
{% else %}
|
||||
closed
|
||||
{% endif %}
|
||||
|
||||
icon_template: >
|
||||
value_template: "{{ is_state('sensor.all_covers', 'open') }}"
|
||||
icon_template: >-
|
||||
{% if is_state('sensor.all_covers', 'open') %}
|
||||
mdi:window-open
|
||||
{% else %}
|
||||
mdi:window-closed
|
||||
{% endif %}
|
||||
|
||||
entity_id:
|
||||
- cover.bedroom
|
||||
- cover.livingroom
|
||||
@ -130,7 +203,7 @@ sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
all_covers:
|
||||
value_template: >
|
||||
value_template: >-
|
||||
{% if is_state('cover.bedroom', 'open') %}
|
||||
open
|
||||
{% elif is_state('cover.livingroom', 'open') %}
|
||||
@ -138,7 +211,6 @@ sensor:
|
||||
{% else %}
|
||||
closed
|
||||
{% endif %}
|
||||
|
||||
entity_id:
|
||||
- cover.bedroom
|
||||
- cover.livingroom
|
||||
@ -147,41 +219,43 @@ script:
|
||||
cover_all_open:
|
||||
sequence:
|
||||
- service: cover.open_cover
|
||||
entity_id: cover.bedroom
|
||||
- service: cover.open_cover
|
||||
entity_id: cover.livingroom
|
||||
data:
|
||||
entity_id:
|
||||
- cover.bedroom
|
||||
- cover.livingroom
|
||||
cover_all_stop:
|
||||
sequence:
|
||||
- service: cover.stop_cover
|
||||
entity_id: cover.bedroom
|
||||
- service: cover.stop_cover
|
||||
entity_id: cover.livingroom
|
||||
data:
|
||||
entity_id:
|
||||
- cover.bedroom
|
||||
- cover.livingroom
|
||||
cover_all_close:
|
||||
sequence:
|
||||
- service: cover.close_cover
|
||||
entity_id: cover.bedroom
|
||||
- service: cover.close_cover
|
||||
entity_id: cover.livingroom
|
||||
data:
|
||||
entity_id:
|
||||
- cover.bedroom
|
||||
- cover.livingroom
|
||||
cover_all_set_position:
|
||||
sequence:
|
||||
- service: cover.set_cover_position
|
||||
entity_id: cover.bedroom
|
||||
data_template:
|
||||
position: "{{ position }}"
|
||||
- service: cover.set_cover_position
|
||||
entity_id: cover.livingroom
|
||||
data_template:
|
||||
entity_id:
|
||||
- cover.bedroom
|
||||
- cover.livingroom
|
||||
position: "{{ position }}"
|
||||
|
||||
automation:
|
||||
- alias: 'Close covers at night'
|
||||
- alias: "Close covers at night"
|
||||
trigger:
|
||||
- platform: sun
|
||||
event: sunset
|
||||
offset: '+00:30:00'
|
||||
action:
|
||||
service: cover.set_cover_position
|
||||
- service: cover.set_cover_position
|
||||
data:
|
||||
entity_id: cover.all_covers
|
||||
data_template:
|
||||
position: 25{% endraw %}
|
||||
position: 25
|
||||
```
|
||||
{% endraw %}
|
||||
|
@ -9,7 +9,7 @@ sharing: true
|
||||
footer: true
|
||||
logo: abode.jpg
|
||||
ha_release: 0.54
|
||||
ha_category: Cover
|
||||
ha_category: Light
|
||||
ha_iot_class: "Cloud Push"
|
||||
---
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Template Light"
|
||||
description: "Instructions how to integrate Template lights into Home Assistant."
|
||||
description: "Instructions how to integrate Template Lights into Home Assistant."
|
||||
date: 2016-05-18 20:32
|
||||
sidebar: true
|
||||
comments: false
|
||||
@ -13,10 +13,14 @@ ha_iot_class: "Local Push"
|
||||
logo: home-assistant.png
|
||||
---
|
||||
|
||||
The `template` platform creates lights that combine components and provides the ability to run scripts or invoke services for each of the on, off, and brightness commands of a light.
|
||||
The `template` platform creates lights that combine components and provides the
|
||||
ability to run scripts or invoke services for each of the on, off, and
|
||||
brightness commands of a light.
|
||||
|
||||
To enable Template lights in your installation, add the following to your `configuration.yaml` file:
|
||||
To enable Template Lights in your installation, add the following to your
|
||||
`configuration.yaml` file:
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
light:
|
||||
@ -24,7 +28,8 @@ light:
|
||||
lights:
|
||||
theater_lights:
|
||||
friendly_name: "Theater Lights"
|
||||
value_template: "{% raw %}{{is_state('sensor.theater_brightness.attributes.lux > 0'}}{% endraw %}"
|
||||
level_template: "{{ sensor.theater_brightness.attributes.lux|int }}"
|
||||
value_template: "{{ sensor.theater_brightness.attributes.lux|int > 0 }}"
|
||||
turn_on:
|
||||
service: script.theater_lights_on
|
||||
turn_off:
|
||||
@ -32,26 +37,59 @@ light:
|
||||
set_level:
|
||||
service: script.theater_lights_level
|
||||
data_template:
|
||||
brightness: "{% raw %}{{brightness}}{% endraw %}"
|
||||
level_template: "{% raw %}{{is_state('sensor.theater_brightness.attributes.lux'}}{% endraw %}"
|
||||
brightness: "{{ brightness }}"
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **lights** array (*Required*): List of your lights.
|
||||
- **friendly_name** (*Optional*): Name to use in the Frontend.
|
||||
- **value_template** (*Optional*): Defines a [template](/topics/templating/) to get the state of the light. If not provided the component defaults to optimisitc state determination.
|
||||
- **turn_on** (*Required*): Defines an [action](/getting-started/automation/) to run when the light is turned on.
|
||||
- **turn_off** (*Required*): Defines an [action](/getting-started/automation/) to run when the light is turned off.
|
||||
- **set_level** (*Optional*): Defines an [action](/getting-started/automation/) to run when the light is given a brightness command.
|
||||
- **level_template** (*Optional): Defines a [template](/topics/templating/) to get the brightness of the light. If not provided the component defaults to optimisitc brightness determination.
|
||||
- **entity_id** (*Optional*): Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the light will try to update it's state.
|
||||
|
||||
{% configuration %}
|
||||
switches:
|
||||
description: List of your lights.
|
||||
required: true
|
||||
type: map
|
||||
keys:
|
||||
friendly_name:
|
||||
description: Name to use in the frontend.
|
||||
required: false
|
||||
type: string
|
||||
entity_id:
|
||||
description: Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the light will try to update its state.
|
||||
required: false
|
||||
type: [string, list]
|
||||
value_template:
|
||||
description: Defines a template to get the state of the light.
|
||||
required: false
|
||||
type: template
|
||||
default: optimistic
|
||||
level_template:
|
||||
description: Defines a template to get the brightness of the light.
|
||||
required: false
|
||||
type: template
|
||||
default: optimistic
|
||||
turn_on:
|
||||
description: Defines an action to run when the light is turned on.
|
||||
required: true
|
||||
type: action
|
||||
turn_off:
|
||||
description: Defines an action to run when the light is turned off.
|
||||
required: true
|
||||
type: action
|
||||
set_level:
|
||||
description: Defines an action to run when the light is given a brightness command.
|
||||
required: false
|
||||
type: action
|
||||
{% endconfiguration %}
|
||||
|
||||
## {% linkable_title Considerations %}
|
||||
|
||||
If you are using the state of a platform that takes extra time to load, the template light may get an 'unknown' state during startup. This results in error messages in your log file until that platform has completed loading. If you use is_state() function in your template, you can avoid this situation. For example, you would replace {% raw %}'{{ states.switch.source.state }}'{% endraw %} with this equivalent that returns true/false and never gives an unknown result:
|
||||
{% raw %}'{{ is_state('switch.source', 'on') }}'{% endraw %}
|
||||
If you are using the state of a platform that takes extra time to load, the
|
||||
Template Light may get an `unknown` state during startup. This results
|
||||
in error messages in your log file until that platform has completed loading.
|
||||
If you use `is_state()` function in your template, you can avoid this situation.
|
||||
For example, you would replace
|
||||
{% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %}
|
||||
with this equivalent that returns `true`/`false` and never gives an unknown
|
||||
result:
|
||||
{% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %}
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
@ -59,26 +97,29 @@ In this section you will find some real life examples of how to use this light.
|
||||
|
||||
### {% linkable_title Theater Volume Control %}
|
||||
|
||||
This example shows a light that is actually a home theater's volume. This component gives you the flexibility to provide whatever you'd like to send as the payload to the consumer including any scale conversions you may need to make; the media_player component needs a floating point percentage value 0.0-1.0
|
||||
This example shows a light that is actually a home theater's volume. This
|
||||
component gives you the flexibility to provide whatever you'd like to send as
|
||||
the payload to the consumer including any scale conversions you may need to
|
||||
make; the [Media Player component](/components/media_player/) needs a floating
|
||||
point percentage value from `0.0` to `1.0`.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
light:
|
||||
- platform: template
|
||||
lights:
|
||||
theater_volume:
|
||||
friendly_name: 'Receiver Volume'
|
||||
friendly_name: "Receiver Volume"
|
||||
value_template: >-
|
||||
{% raw %}
|
||||
{%- if is_state("media_player.receiver", "on") -%}
|
||||
{%- if states.media_player.receiver.attributes.is_volume_muted -%}
|
||||
{% if is_state('media_player.receiver', 'on') %}
|
||||
{% if states.media_player.receiver.attributes.is_volume_muted %}
|
||||
off
|
||||
{%- else -%}
|
||||
{% else %}
|
||||
on
|
||||
{%- endif -%}
|
||||
{%- else -%}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
off
|
||||
{%- endif -%}
|
||||
{% endraw %}
|
||||
{% endif %}
|
||||
turn_on:
|
||||
service: media_player.volume_mute
|
||||
data:
|
||||
@ -91,16 +132,14 @@ light:
|
||||
is_volume_muted: true
|
||||
set_level:
|
||||
service: media_player.volume_set
|
||||
data:
|
||||
entity_id: media_player.receiver
|
||||
data_template:
|
||||
volume_level: '{% raw %}{{((brightness / 255 * 100) | int)/100}}{% endraw %}'
|
||||
entity_id: media_player.receiver
|
||||
volume_level: "{{ (brightness / 255 * 100)|int / 100 }}"
|
||||
level_template: >-
|
||||
{% raw %}
|
||||
{%- if is_state("media_player.receiver", "on") -%}
|
||||
{{(255 * states.media_player.receiver.attributes.volume_level) | int}}
|
||||
{%- else -%}
|
||||
{% if is_state('media_player.receiver', 'on') %}
|
||||
{{ (states.media_player.receiver.attributes.volume_level|float * 255)|int }}
|
||||
{% else %}
|
||||
0
|
||||
{%- endif -%}
|
||||
{% endraw %}
|
||||
{% endif %}
|
||||
```
|
||||
{% endraw %}
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Template Sensor"
|
||||
description: "Instructions how to integrate Template sensors into Home Assistant."
|
||||
description: "Instructions how to integrate Template Sensors into Home Assistant."
|
||||
date: 2016-01-27 07:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
@ -13,142 +13,205 @@ ha_iot_class: "Local Push"
|
||||
logo: home-assistant.png
|
||||
---
|
||||
|
||||
The `template` platform supports sensors which break out `state_attributes` from other entities.
|
||||
The `template` platform supports sensors which break out `state_attributes`
|
||||
from other entities.
|
||||
|
||||
To enable Template sensors in your installation, add the following to your `configuration.yaml` file:
|
||||
To enable Template Sensors in your installation, add the following to your
|
||||
`configuration.yaml` file:
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
solar_angle:
|
||||
value_template: {% raw %}'{{ states.sun.sun.attributes.elevation }}'{% endraw %}
|
||||
friendly_name: 'Sun angle'
|
||||
friendly_name: "Sun angle"
|
||||
unit_of_measurement: 'degrees'
|
||||
value_template: "{{ states.sun.sun.attributes.elevation }}"
|
||||
|
||||
sunrise:
|
||||
value_template: {% raw %}'{{ states.sun.sun.attributes.next_rising }}'{% endraw %}
|
||||
value_template: "{{ states.sun.sun.attributes.next_rising }}"
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
Configuration variables:
|
||||
{% configuration %}
|
||||
sensors:
|
||||
description: List of your sensors.
|
||||
required: true
|
||||
type: map
|
||||
keys:
|
||||
friendly_name:
|
||||
description: Name to use in the frontend.
|
||||
required: false
|
||||
type: string
|
||||
entity_id:
|
||||
description: Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update its state.
|
||||
required: false
|
||||
type: string, list
|
||||
unit_of_measurement:
|
||||
description: Defines the units of measurement of the sensor, if any.
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: Defines a template to get the state of the sensor.
|
||||
required: true
|
||||
type: template
|
||||
icon_template:
|
||||
description: Defines a template for the icon of the sensor.
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
||||
- **sensors** array (*Required*): List of your sensors.
|
||||
- **friendly_name** (*Optional*): Name to use in the Frontend.
|
||||
- **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any.
|
||||
- **value_template** (*Required*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the event bus.
|
||||
- **icon_template** (*Optional*): Defines a [template](/topics/templating/) for the icon of the sensor.
|
||||
- **entity_id** (*Optional*): Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update its state.
|
||||
## {% linkable_title Considerations %}
|
||||
|
||||
If you are using the state of a platform that takes extra time to load, the
|
||||
Template Sensor may get an `unknown` state during startup. This results
|
||||
in error messages in your log file until that platform has completed loading.
|
||||
If you use `is_state()` function in your template, you can avoid this situation.
|
||||
For example, you would replace
|
||||
{% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %}
|
||||
with this equivalent that returns `true`/`false` and never gives an unknown
|
||||
result:
|
||||
{% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %}
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
In this section you find some real life examples of how to use this sensor.
|
||||
|
||||
### {% linkable_title Sun angle %}
|
||||
### {% linkable_title Sun Angle %}
|
||||
|
||||
This example shows the sun angle in the frontend.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
solar_angle:
|
||||
value_template: {% raw %}'{{ "%+.1f"|format(states.sun.sun.attributes.elevation) }}'{% endraw %}
|
||||
friendly_name: 'Sun Angle'
|
||||
friendly_name: "Sun Angle"
|
||||
unit_of_measurement: '°'
|
||||
value_template: "{{ '%+.1f'|format(states.sun.sun.attributes.elevation) }}"
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Renaming sensor output %}
|
||||
### {% linkable_title Renaming Sensor Output %}
|
||||
|
||||
If you don't like the wording of a sensor output then the template sensor can help too. Let's rename the output of the [Sun component](/components/sun/) as a simple example:
|
||||
If you don't like the wording of a sensor output then the Template Sensor can
|
||||
help too. Let's rename the output of the [Sun component](/components/sun/) as
|
||||
a simple example:
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
sun_state:
|
||||
value_template: {% raw %}'{% if is_state("sun.sun", "above_horizon") %}up{% else %}down{% endif %}'{% endraw %}
|
||||
friendly_name: 'Sun state'
|
||||
friendly_name: "Sun State"
|
||||
value_template: >-
|
||||
{% if is_state('sun.sun', 'above_horizon') %}
|
||||
up
|
||||
{% else %}
|
||||
down
|
||||
{% endif %}
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
Processes monitored by the [System Monitor sensor](/components/sensor.systemmonitor/) show `on` or `off` if they are running or not. This example shows how the output of a monitored `glances` process can be renamed.
|
||||
Processes monitored by the [System Monitor sensor](/components/sensor.systemmonitor/)
|
||||
show `on` or `off` if they are running or not. This example shows how the
|
||||
output of a monitored `glances` process can be renamed.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
glances:
|
||||
value_template: {% raw %}'{% if is_state("sensor.process_glances", "off") %}not running{% else %}running{% endif %}'{% endraw %}
|
||||
friendly_name: 'Glances'
|
||||
friendly_name: "Glances"
|
||||
value_template: >-
|
||||
{% if is_state('sensor.process_glances', 'on') %}
|
||||
running
|
||||
{% else %}
|
||||
not running
|
||||
{% endif %}
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
By comparing the details published on the [template](/topics/templating/) page the same can be achieved with a different approach:
|
||||
The [Template Binary Sensor](/components/binary_sensor.template/) is the one in
|
||||
similar cases if you prefer to see an icon instead of text.
|
||||
|
||||
```yaml
|
||||
value_template: {% raw %}"{%if states.sensor.ENTITY_ID.state == 'on' %}running{%elif states.switch.ENTITY_ID.state == 'off' %}not running{% endif %}"{% endraw %}
|
||||
```
|
||||
### {% linkable_title Multiline Example With an `if` Test %}
|
||||
|
||||
The [Binary template sensor](/components/binary_sensor.template/) is the one in similar cases if you prefer to see an icon instead of text.
|
||||
|
||||
### {% linkable_title Multiline example with an if test %}
|
||||
|
||||
This example shows a multiple line template with an if test. It looks at a sensing switch and shows on/off in the frontend.
|
||||
This example shows a multiple line template with an `if` test. It looks at a
|
||||
sensing switch and shows `on`/`off` in the frontend.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
kettle:
|
||||
friendly_name: 'Kettle'
|
||||
{% raw %}value_template: >-
|
||||
{%- if is_state("switch.kettle", "off") %}
|
||||
friendly_name: "Kettle"
|
||||
value_template: >-
|
||||
{% if is_state('switch.kettle', 'off') %}
|
||||
off
|
||||
{% elif states.switch.kettle.attributes.kwh < 1000 %}
|
||||
{% elif states.switch.kettle.attributes.kwh|float < 1000 %}
|
||||
standby
|
||||
{% elif is_state("switch.kettle", "on") %}
|
||||
{% elif is_state('switch.kettle', 'on') %}
|
||||
on
|
||||
{% else %}
|
||||
failed
|
||||
{%- endif %}{% endraw %}
|
||||
{% endif %}
|
||||
|
||||
next_sensor:
|
||||
[...]
|
||||
...
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
<p class='note'>
|
||||
Please note the blank line to close the multi-line template.
|
||||
</p>
|
||||
### {% linkable_title Change The Unit of Measurement %}
|
||||
|
||||
### {% linkable_title Change the unit of measurement %}
|
||||
|
||||
With a template sensor it's easy to convert given values into others if the unit of measurement doesn't fit your needs.
|
||||
With a Template Sensor it's easy to convert given values into others if the
|
||||
unit of measurement doesn't fit your needs.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
transmission_down_speed_kbps:
|
||||
value_template: {% raw %}'{{ states.sensor.transmission_down_speed.state | multiply(1024) }}'{% endraw %}
|
||||
friendly_name: 'Transmission Down Speed'
|
||||
friendly_name: "Transmission Down Speed"
|
||||
unit_of_measurement: 'kB/s'
|
||||
transmission_up_speed_kbps:
|
||||
value_template: {% raw %}'{{ states.sensor.transmission_up_speed.state | multiply(1024) }}'{% endraw %}
|
||||
friendly_name: 'Transmission Up Speed'
|
||||
unit_of_measurement: 'kB/s'
|
||||
```
|
||||
value_template: "{{ states('sensor.transmission_down_speed')|float * 1024 }}"
|
||||
|
||||
### {% linkable_title Change the icon %}
|
||||
transmission_up_speed_kbps:
|
||||
friendly_name: "Transmission Up Speed"
|
||||
unit_of_measurement: 'kB/s'
|
||||
value_template: "{{ states('sensor.transmission_up_speed')|float * 1024 }}"
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Change The Icon %}
|
||||
|
||||
This example shows how to change the icon based on the day/night cycle.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
day_night:
|
||||
friendly_name: 'Day/Night'
|
||||
value_template: {% raw %}'{% if is_state("sun.sun", "above_horizon") %}Day{% else %}Night{% endif %}'{% endraw %}
|
||||
icon_template: {% raw %}'{% if is_state("sun.sun", "above_horizon") %}mdi:weather-sunny{% else %}mdi:weather-night{% endif %}'{% endraw %}
|
||||
|
||||
friendly_name: "Day/Night"
|
||||
value_template: >-
|
||||
{% if is_state('sun.sun', 'above_horizon') %}
|
||||
Day
|
||||
{% else %}
|
||||
Night
|
||||
{% endif %}
|
||||
icon_template: >-
|
||||
{% if is_state('sun.sun', 'above_horizon') %}
|
||||
mdi:weather-sunny
|
||||
{% else %}
|
||||
mdi:weather-night
|
||||
{% endif %}
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
@ -9,7 +9,6 @@ sharing: true
|
||||
footer: true
|
||||
ha_category: DIY
|
||||
ha_release: 0.54
|
||||
logo: home-assistant.png
|
||||
ha_iot_class: "Local Polling"
|
||||
---
|
||||
|
||||
|
@ -158,7 +158,7 @@ group:
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: wunderground
|
||||
- api_key: your_api_key
|
||||
api_key: your_api_key
|
||||
monitored_conditions:
|
||||
- temp_high_record_c
|
||||
- temp_high_1d_c
|
||||
|
@ -7,7 +7,6 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: home-assistant.png
|
||||
ha_category: Switch
|
||||
ha_release: 0.54
|
||||
ha_iot_class: "Local Polling"
|
||||
@ -29,7 +28,7 @@ switch:
|
||||
command_on: "PWR ON"
|
||||
command_off: "PWR OFF"
|
||||
command_state: "PWR?"
|
||||
value_template: '{{ value == "PWR=01" }}'
|
||||
value_template: '{% raw %}{{ value == "PWR=01" }}{% endraw %}'
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Template switch"
|
||||
description: "Instructions how to integrate Template switches into Home Assistant."
|
||||
title: "Template Switch"
|
||||
description: "Instructions how to integrate Template Switches into Home Assistant."
|
||||
date: 2016-02-07 07:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
@ -15,116 +15,174 @@ logo: home-assistant.png
|
||||
|
||||
The `template` platform creates switches that combines components.
|
||||
|
||||
For example, if you have a garage door with a toggle switch that operates the motor and a sensor that allows you know whether the door is open or closed, you can combine these into a switch that knows whether the garage door is open or closed.
|
||||
For example, if you have a garage door with a toggle switch that operates the
|
||||
motor and a sensor that allows you know whether the door is open or closed,
|
||||
you can combine these into a switch that knows whether the garage door is open
|
||||
or closed.
|
||||
|
||||
This can simplify the GUI and make it easier to write automations. You can mark the components you have combined as `hidden` so they don't appear themselves.
|
||||
This can simplify the GUI and make it easier to write automations. You can mark
|
||||
the components you have combined as `hidden` so they don't appear themselves.
|
||||
|
||||
To enable Template switches in your installation, add the following to your `configuration.yaml` file:
|
||||
To enable Template Switches in your installation, add the following to your
|
||||
`configuration.yaml` file:
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
switch:
|
||||
- platform: template
|
||||
switches:
|
||||
skylight:
|
||||
value_template: {% raw %}"{{ is_state('sensor.skylight', 'on') }}"{% endraw %}
|
||||
value_template: "{{ is_state('sensor.skylight', 'on') }}"
|
||||
turn_on:
|
||||
service: switch.turn_on
|
||||
data:
|
||||
entity_id: switch.skylight_open
|
||||
turn_off:
|
||||
service: switch.turn_on
|
||||
data:
|
||||
entity_id: switch.skylight_close
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **switches** array (*Required*): List of your switches.
|
||||
- **friendly_name** (*Optional*): Name to use in the Frontend.
|
||||
- **value_template** (*Required*): Defines a [template](/topics/templating/) to set the state of the switch.
|
||||
- **turn_on** (*Required*): Defines an [action](/getting-started/automation/) to run when the switch is turned on.
|
||||
- **turn_off** (*Required*): Defines an [action](/getting-started/automation/) to run when the switch is turned off.
|
||||
- **entity_id** (*Optional*): Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the switch will try to update it's state.
|
||||
|
||||
{% configuration %}
|
||||
switches:
|
||||
description: List of your switches.
|
||||
required: true
|
||||
type: map
|
||||
keys:
|
||||
friendly_name:
|
||||
description: Name to use in the frontend.
|
||||
required: false
|
||||
type: string
|
||||
entity_id:
|
||||
description: Add a list of entity IDs so the switch only reacts to state changes of these entities. This will reduce the number of times the switch will try to update its state.
|
||||
required: false
|
||||
type: [string, list]
|
||||
value_template:
|
||||
description: Defines a template to set the state of the switch.
|
||||
required: true
|
||||
type: template
|
||||
turn_on:
|
||||
description: Defines an action to run when the switch is turned on.
|
||||
required: true
|
||||
type: action
|
||||
turn_off:
|
||||
description: Defines an action to run when the switch is turned off.
|
||||
required: true
|
||||
type: action
|
||||
{% endconfiguration %}
|
||||
|
||||
## {% linkable_title Considerations %}
|
||||
|
||||
If you are using the state of a platform that takes extra time to load, the template switch may get an 'unknown' state during startup. This results in error messages in your log file until that platform has completed loading. If you use `is_state()` function in your template, you can avoid this situation. For example, you would replace {% raw %}`{{ states.switch.source.state }}`{% endraw %} with this equivalent that returns true/false and never gives an unknown result:
|
||||
If you are using the state of a platform that takes extra time to load, the
|
||||
Template Switch may get an `unknown` state during startup. This results
|
||||
in error messages in your log file until that platform has completed loading.
|
||||
If you use `is_state()` function in your template, you can avoid this situation.
|
||||
For example, you would replace
|
||||
{% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %}
|
||||
with this equivalent that returns `true`/`false` and never gives an unknown
|
||||
result:
|
||||
{% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %}
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
In this section you find some real life examples of how to use this switch.
|
||||
|
||||
### {% linkable_title Copy switch %}
|
||||
### {% linkable_title Copy Switch %}
|
||||
|
||||
This example shows a switch that copies another switch.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
switch:
|
||||
- platform: template
|
||||
switches:
|
||||
copy:
|
||||
value_template: {% raw %}"{{ is_state('switch.source', 'on') }}"{% endraw %}
|
||||
value_template: "{{ is_state('switch.source', 'on') }}"
|
||||
turn_on:
|
||||
service: switch.turn_on
|
||||
data:
|
||||
entity_id: switch.source
|
||||
turn_off:
|
||||
service: switch.turn_off
|
||||
data:
|
||||
entity_id: switch.source
|
||||
````
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Toggle switch %}
|
||||
### {% linkable_title Toggle Switch %}
|
||||
|
||||
This example shows a switch that takes its state from a sensor, and toggles a switch.
|
||||
This example shows a switch that takes its state from a sensor, and toggles
|
||||
a switch.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
switch:
|
||||
- platform: template
|
||||
switches:
|
||||
blind:
|
||||
friendly_name: 'Blind'
|
||||
value_template: {% raw %}"{{ is_state_attr('switch.blind_toggle', 'sensor_state', 'on') }}"{% endraw %}
|
||||
friendly_name: "Blind"
|
||||
value_template: "{{ is_state_attr('switch.blind_toggle', 'sensor_state', 'on') }}"
|
||||
turn_on:
|
||||
service: switch.toggle
|
||||
data:
|
||||
entity_id: switch.blind_toggle
|
||||
turn_off:
|
||||
service: switch.toggle
|
||||
data:
|
||||
entity_id: switch.blind_toggle
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Sensor and two switches %}
|
||||
### {% linkable_title Sensor and Two Switches %}
|
||||
|
||||
This example shows a switch that takes its state from a sensor, and uses two momentary switches to control a device.
|
||||
This example shows a switch that takes its state from a sensor, and uses two
|
||||
momentary switches to control a device.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
switch:
|
||||
- platform: template
|
||||
switches:
|
||||
skylight:
|
||||
friendly_name: 'Skylight'
|
||||
value_template: {% raw %}"{{ is_state('sensor.skylight.state', 'on') }}"{% endraw %}
|
||||
friendly_name: "Skylight"
|
||||
value_template: "{{ is_state('sensor.skylight.state', 'on') }}"
|
||||
turn_on:
|
||||
service: switch.turn_on
|
||||
data:
|
||||
entity_id: switch.skylight_open
|
||||
turn_off:
|
||||
service: switch.turn_on
|
||||
data:
|
||||
entity_id: switch.skylight_close
|
||||
```
|
||||
### {% linkable_title Change the icon %}
|
||||
{% endraw %}
|
||||
|
||||
### {% linkable_title Change The Icon %}
|
||||
|
||||
This example shows how to change the icon based on the day/night cycle.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
switch:
|
||||
- platform: template
|
||||
switches:
|
||||
garage:
|
||||
value_template: {% raw %}"{{ is_state(cover.garage_door', 'on') }}"{% endraw %}
|
||||
value_template: "{{ is_state('cover.garage_door', 'on') }}"
|
||||
turn_on:
|
||||
service: cover.open_cover
|
||||
data:
|
||||
entity_id: cover.garage_door
|
||||
turn_off:
|
||||
service: cover.close_cover
|
||||
data:
|
||||
entity_id: cover.garage_door
|
||||
icon_template: {% raw %}"{% if is_state('cover.garage_door', 'open') %}mdi:garage-open{% else %}mdi:garage{% endif %}"{% endraw %}
|
||||
icon_template: >-
|
||||
{% if is_state('cover.garage_door', 'open') %}
|
||||
mdi:garage-open
|
||||
{% else %}
|
||||
mdi:garage
|
||||
{% endif %}
|
||||
```
|
||||
{% endraw %}
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
layout: page
|
||||
title: "ZigBee Home Automation Switch"
|
||||
description: "Instructions how to setup ZigBee Home Automation switches within Home Assistant."
|
||||
description: "Instructions on how to setup ZigBee Home Automation switches within Home Assistant."
|
||||
date: 2017-02-22 00:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
@ -12,4 +12,4 @@ ha_category: Switch
|
||||
ha_iot_class: "Local Polling"
|
||||
---
|
||||
|
||||
To get your ZigBee switches working with Home Assistant, follow theminstructions for the general [ZigBee Home Automation component](/components/zha/).
|
||||
To get your ZigBee switches working with Home Assistant, follow the instructions for the general [ZigBee Home Automation component](/components/zha/).
|
||||
|
@ -1,6 +1,6 @@
|
||||
---
|
||||
layout: page
|
||||
title: "MQTT"
|
||||
title: "MQTT Vacuum"
|
||||
description: "Instructions how to integrate your MQTT enabled Vacuum within Home Assistant."
|
||||
date: 2017-09-11 20:26
|
||||
sidebar: true
|
||||
|
@ -86,6 +86,10 @@ $ ls /dev/cu.usbmodem*
|
||||
Depending on what's plugged into your USB ports, the name found above may change. You can lock in a name, such as `/dev/zwave`, by following [these instructions](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/).
|
||||
</p>
|
||||
|
||||
<p class='note'>
|
||||
After installing and configuring Z-Wave, Home Assistant will try to install required Python Z-Wave libraries during startup (if they are not already installed). This process might take anywhere between 5 to 25 minutes depending upon various factors. Please be patient, and let it run! This happens only once and the subsequent restarts will have no impact in performance.
|
||||
</p>
|
||||
|
||||
### {% linkable_title Adding Devices %}
|
||||
|
||||
To add a Z-Wave device to your system, go to the Z-Wave panel in the Home Assistant frontend and click the Add Node button in the Z-Wave Network Management card. This will place the controller in inclusion mode, after which you should activate your device to be included by following the instructions provided with the device.
|
||||
|
355
source/_posts/2017-09-23-release-54.markdown
Normal file
355
source/_posts/2017-09-23-release-54.markdown
Normal file
@ -0,0 +1,355 @@
|
||||
---
|
||||
layout: post
|
||||
title: "0.54: Todoist, DoorBird, Abode cameras"
|
||||
description: "4 years of Home Assistant is celebrated with another great release."
|
||||
date: 2017-09-23 00:11:05
|
||||
date_formatted: "September 23, 2017"
|
||||
author: Paulus Schoutsen
|
||||
author_twitter: balloob
|
||||
comments: true
|
||||
categories: Release-Notes
|
||||
og_image: /images/blog/2017-09-0.54/components.png
|
||||
---
|
||||
|
||||
<a href='/components/#version/0.54'><img src='/images/blog/2017-09-0.54/components.png' style='border: 0;box-shadow: none;'></a>
|
||||
|
||||
We're approaching the end of September and that means that it was our birthday! We are now officially 4 years old and are getting more amazing with every release. This release too will include some great new stuff and tons of bugfixes. Included is a bug fix by [@fanthos] that should fix the frontend in some browsers. If you had issues with your browser before, make sure to check out this release.
|
||||
|
||||
This release we've started the work to make our Xiaomi integrations more robust. This meant that we've had to rename the components to make it more clear which of the Xiaomi protocols are being used. We have some developers working on making this very affordable home automation solution a first class citizen in the Home Assistant ecosystem, stay tuned for more integrations!
|
||||
|
||||
Another cool thing in this release is the new [`mqtt_statestream`][mqtt_statestream docs] component to export state changes to MQTT. Each entity will be exported on their own topic which makes it very easy to subscribe to individual entity updates.
|
||||
|
||||
## {% linkable_title New Platforms %}
|
||||
|
||||
- Added mqtt_statestream component ([@mw-white] - [#9286]) ([mqtt_statestream docs]) (new-platform)
|
||||
- Add support for Todoist platform ([@Jay2645] - [#9236]) ([calendar.todoist docs]) (new-platform)
|
||||
- DoorBird Component ([@Klikini] - [#9281]) ([doorbird docs]) ([binary_sensor.doorbird docs]) ([camera.doorbird docs]) ([switch.doorbird docs]) (new-platform)
|
||||
- Basic MQTT vacuum support ([@johnboiles] - [#9386]) ([vacuum docs]) ([vacuum.mqtt docs]) (new-platform)
|
||||
- Added Zyxel Keenetic NDMS2 based routers support for device tracking ([@foxel] - [#9315]) ([device_tracker.keenetic_ndms2 docs]) (new-platform)
|
||||
- Telnet switch ([@multiholle] - [#8913]) ([switch.telnet docs]) (new-platform)
|
||||
- Abode services, events, lights, cameras, automations, quick actions. ([@MisterWil] - [#9310]) ([abode docs]) ([alarm_control_panel.abode docs]) ([binary_sensor.abode docs]) ([camera.abode docs]) ([cover.abode docs]) ([light.abode docs]) ([lock.abode docs]) ([switch.abode docs]) (new-platform)
|
||||
- Added satel_integra alarm panel and binary sensor platform ([@c-soft] - [#9336]) ([satel_integra docs]) ([alarm_control_panel.satel_integra docs]) ([binary_sensor.satel_integra docs]) (new-platform)
|
||||
- Worx Landroid sensor ([@nilzen] - [#9416]) ([sensor.worxlandroid docs]) (new-platform)
|
||||
|
||||
## {% linkable_title If you need help... %}
|
||||
...don't hesitate to use our very active [forums][forum] or join us for a little [chat][discord]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks.
|
||||
|
||||
## {% linkable_title Reporting Issues %}
|
||||
Experiencing issues introduced by this release? Please report them in our [issue tracker][issue]. Make sure to fill in all fields of the issue template.
|
||||
|
||||
<!--more-->
|
||||
|
||||
## {% linkable_title Breaking Changes %}
|
||||
|
||||
- Sensor - OneWire: This update changes the names of the sensors from `<sensor_name>` to `<sensor_name> <Sensor_type>` ([@tcastberg] - [#9404]) ([sensor.onewire docs]) (breaking change)
|
||||
- Renamed Xiaomi platforms to include their protocol names. xiaomi -> xiaomi_aqara, xiaomi_aqara.switch, xiaomi_aqara.light, xiaomi_aqara.binary_sensor, ... and vacuum.xiaomi, xiaomi_philipslight -> xiaomi_miio, vacuum.xiaomi_miio, light.xiaomi_miio ([@danielhiversen] - [#9426]) (breaking change)
|
||||
- Swiss Public Transport sensor: All times handled by the Swiss Public Transport sensor are now in ISO 8601 format. Please update your templates sensors and automations. ([@fabaff] - [#9129]) ([sensor.swiss_public_transport docs]) (breaking change)
|
||||
- iOS: All category identifiers need to be lowercase. If you do not update, it will break actionable notifications to IOS devices sent by scripts/automations. ([@rbflurry] - [#9427]) (breaking change)
|
||||
- Fitbit: Put endpoints behind `/api` like the other oauth-using components ([@happyleavesaoc] - [#9460]) ([sensor.fitbit docs]) (breaking change)
|
||||
- Version 0.53 introduced a bug in the HomeMatic component which breaks the usage of system variables on the CCU / Homegear. This has not been fixed yet. If you are using these variables in your automations you should skip updates until the bug has been resolved. Upgrading is safe however if you only interact with devices.
|
||||
|
||||
## {% linkable_title All changes %}
|
||||
|
||||
- Add HTTP Basic auth to RESTful Switch ([@amelchio] - [#9162]) ([switch.rest docs])
|
||||
- Bump pywebpush and pyJWT versions ([@fanaticDavid] - [#9355]) ([notify.html5 docs])
|
||||
- Add /usr/sbin to PATH ([@morberg] - [#9364])
|
||||
- Add polling interval service and setting available through zwave node entity panel ([@turbokongen] - [#9056]) ([zwave docs])
|
||||
- Round off probability to 2 decimals. ([@arsaboo] - [#9365]) ([binary_sensor.bayesian docs])
|
||||
- Added mqtt_statestream component ([@mw-white] - [#9286]) ([mqtt_statestream docs]) (new-platform)
|
||||
- typo in waypoint import topic preventing waypoint import ([@diplix] - [#9338]) ([device_tracker.owntracks docs])
|
||||
- Cleanup and simplitfy the async state update ([@pvizeli] - [#9390])
|
||||
- Update cloud auth ([@balloob] - [#9357])
|
||||
- Allow multiple observations of same entity ([@jlmcgehee21] - [#9391]) ([binary_sensor.bayesian docs])
|
||||
- Break up Alexa per functionality ([@balloob] - [#9400]) ([alexa docs])
|
||||
- Upgrade psutil to 5.3.1 ([@fabaff] - [#9403]) ([sensor.systemmonitor docs])
|
||||
- fix mopar sensor ([@happyleavesaoc] - [#9389]) ([sensor.mopar docs])
|
||||
- Support specifying no Apple TVs ([@postlund] - [#9394]) ([apple_tv docs])
|
||||
- Update netdisco to 1.2.0 ([@balloob] - [#9408])
|
||||
- components/xiaomi: Add initial discovery using NetDisco. ([@pfalcon] - [#9283])
|
||||
- Fix copy&paste mistake ([@tinloaf] - [#9378])
|
||||
- Added log-file command line flag ([@TD22057] - [#9422])
|
||||
- Add LC_CTYPE to environment variables in macOS ([@morberg] - [#9227])
|
||||
- Added more devices and types to onewire ([@tcastberg] - [#9404]) ([sensor.onewire docs]) (breaking change)
|
||||
- Bump uvcclient to 0.10.1 to work with beta NVR releases ([@antonym] - [#9423]) ([camera.uvc docs])
|
||||
- full RGB support for users of tradfri GW ([@spektren] - [#9411]) ([light.tradfri docs])
|
||||
- Add support for Todoist platform ([@Jay2645] - [#9236]) ([calendar.todoist docs]) (new-platform)
|
||||
- Fix artwork bug in Apple TV ([@postlund] - [#9415]) ([media_player.apple_tv docs])
|
||||
- Bump python-mirobo for improved device support and introduce API changes. ([@syssi] - [#9424])
|
||||
- MPD small improvements ([@pdanilew] - [#9301]) ([media_player.mpd docs])
|
||||
- update broadlink.py to add support for MP1 switch ([@giangvo] - [#9222]) ([switch.broadlink docs])
|
||||
- Fix displaying of friendly_name for light template component ([@rollbrettler] - [#9413]) ([light.template docs])
|
||||
- Improve Python script ([@doudz] - [#9417]) ([python_script docs])
|
||||
- Add manual alarm_control_panel pending time per state ([@snjoetw] - [#9264]) ([alarm_control_panel.manual docs])
|
||||
- Rename xiaomi #9425 ([@danielhiversen] - [#9426]) (breaking change)
|
||||
- Bump version of aioautomatic ([@armills] - [#9435]) ([device_tracker.automatic docs])
|
||||
- Fix russound_rio for python 3.4 ([@wickerwaka] - [#9428]) ([media_player.russound_rio docs])
|
||||
- Basic MQTT vacuum support ([@johnboiles] - [#9386]) ([vacuum docs]) ([vacuum.mqtt docs]) (new-platform)
|
||||
- Optimaze vacuum mqtt platform ([@pvizeli] - [#9439]) ([vacuum.mqtt docs])
|
||||
- Polymer access to log file broken when using new log file command line ([@TD22057] - [#9437])
|
||||
- Allow empty hostnames when detecting devices with the aruba device_tracker. ([@michaelarnauts] - [#9440]) ([device_tracker.aruba docs])
|
||||
- mqtt_statestream: Update to append 'state' to topic for future use with mqtt discovery ([@mw-white] - [#9446]) ([mqtt_statestream docs])
|
||||
- Fix for DTE Energy Bridge returning the wrong units from time to time ([@kylehendricks] - [#9246]) ([sensor.dte_energy_bridge docs])
|
||||
- Refactor Swiss Public Transport sensor ([@fabaff] - [#9129]) ([sensor.swiss_public_transport docs]) (breaking change)
|
||||
- Added Zyxel Keenetic NDMS2 based routers support for device tracking ([@foxel] - [#9315]) ([device_tracker.keenetic_ndms2 docs]) (new-platform)
|
||||
- Add city/state/country options and fix bugs for airvisual ([@bachya] - [#9436]) ([sensor.airvisual docs])
|
||||
- Fix emulated hue warning message ([@astone123] - [#9452]) ([emulated_hue docs])
|
||||
- Alexa smart home native support ([@pvizeli] - [#9443])
|
||||
- fix for Twitter notifications without media ([@MikeChristianson] - [#9448])
|
||||
- Load WebComponent polyfill on header. ([@fanthos] - [#9438])
|
||||
- Fix issue 5728: Emulated Hue UPnP crashes on special characters. ([@SqyD] - [#9453])
|
||||
- Ios notify camera fix ([@rbflurry] - [#9427]) (breaking change)
|
||||
- Adds MQTT Fan Discovery ([@hufman] - [#9463])
|
||||
- Upgrade sqlalchemy to 1.1.14 ([@fabaff] - [#9458])
|
||||
- Upgrade uber_rides to 0.6.0 ([@fabaff] - [#9457]) ([sensor.uber docs])
|
||||
- Upgrade youtube_dl to 2017.9.15 ([@fabaff] - [#9456])
|
||||
- DoorBird Component ([@Klikini] - [#9281]) ([doorbird docs]) ([binary_sensor.doorbird docs]) ([camera.doorbird docs]) ([switch.doorbird docs]) (new-platform)
|
||||
- Fix recorder does not vacuum SQLite DB on purge ([@milanvo] - [#9469])
|
||||
- fitbit fixes ([@happyleavesaoc] - [#9460]) ([sensor.fitbit docs]) (breaking change)
|
||||
- Fix typo in services.yaml ([@mika] - [#9475])
|
||||
- Upgrade pyasn1 to 0.3.5 and pyasn1-modules to 0.1.4 ([@fabaff] - [#9474]) ([notify.xmpp docs])
|
||||
- Xiaomi Gateway: Allow static configuration of a gateway without discovery ([@syssi] - [#9464]) ([xiaomi_aqara docs])
|
||||
- Added support for the DTE Energy Bridge v2 ([@Blender3D] - [#9431]) ([sensor.dte_energy_bridge docs])
|
||||
- Telnet switch ([@multiholle] - [#8913]) ([switch.telnet docs]) (new-platform)
|
||||
- Abode services, events, lights, cameras, automations, quick actions. ([@MisterWil] - [#9310]) ([abode docs]) ([alarm_control_panel.abode docs]) ([binary_sensor.abode docs]) ([camera.abode docs]) ([cover.abode docs]) ([light.abode docs]) ([lock.abode docs]) ([switch.abode docs]) (new-platform)
|
||||
- Added satel_integra alarm panel and binary sensor platform ([@c-soft] - [#9336]) ([satel_integra docs]) ([alarm_control_panel.satel_integra docs]) ([binary_sensor.satel_integra docs]) (new-platform)
|
||||
- Worx Landroid sensor ([@nilzen] - [#9416]) ([sensor.worxlandroid docs]) (new-platform)
|
||||
- Fix universal media_player mute ([@colindunn] - [#9462]) ([media_player.universal docs])
|
||||
- Small improvement of KNX Covers ([@Julius2342] - [#9476])
|
||||
- Upgrade async_timeout to 1.4.0 ([@fabaff] - [#9488])
|
||||
- Bump version of abodepy ([@MisterWil] - [#9491]) ([abode docs])
|
||||
- Upgrade coinmarketcap to 4.1.1 ([@fabaff] - [#9490]) ([sensor.coinmarketcap docs])
|
||||
- Upgrade blockchain to 1.4.0 ([@fabaff] - [#9489])
|
||||
- Solve Recorder component failing when using Axis component ([@Kane610] - [#9293]) ([axis docs]) ([camera.axis docs])
|
||||
- switch to pypi for xiaomi gw ([@danielhiversen] - [#9498]) ([xiaomi_aqara docs])
|
||||
- renamed add_devices to async_add_devices according to hass naming scheme ([@Julius2342] - [#9485]) ([binary_sensor.knx docs]) ([climate.knx docs]) ([light.knx docs]) ([sensor.knx docs]) ([switch.knx docs])
|
||||
- Revert "renamed add_devices to async_add_devices according to hass naming scheme (#9485)" ([@pvizeli] - [#9503]) ([alarm_control_panel.spc docs]) ([binary_sensor.knx docs]) ([binary_sensor.spc docs]) ([climate.knx docs]) ([light.knx docs]) ([sensor.citybikes docs]) ([sensor.knx docs]) ([sensor.worxlandroid docs]) ([switch.knx docs])
|
||||
- LIFX: fix multi-zone color restore after effects ([@amelchio] - [#9492]) ([light.lifx docs])
|
||||
- renamed add_devices to async_add_devices according to hass naming scheme (second try after failed #9485) ([@Julius2342] - [#9505]) ([alarm_control_panel.spc docs]) ([binary_sensor.knx docs]) ([binary_sensor.spc docs]) ([climate.knx docs]) ([light.knx docs]) ([sensor.citybikes docs]) ([sensor.knx docs]) ([sensor.worxlandroid docs]) ([switch.knx docs])
|
||||
- Xiaomi pycryptodome ([@danielhiversen] - [#9511]) ([xiaomi_aqara docs])
|
||||
- Bumped pyhomematic, additional device support ([@danielperna84] - [#9506]) ([homematic docs]) ([sensor.homematic docs])
|
||||
- abode: Bump abodepy dependency to 0.11.7 ([@vickyg3] - [#9504]) ([abode docs])
|
||||
- abode: Set device_type in state attributes ([@vickyg3] - [#9515]) ([abode docs])
|
||||
- update xiaomi aqara lib ([@danielhiversen] - [#9520]) ([xiaomi_aqara docs])
|
||||
- added services.yaml integration for input_boolean ([@skalavala] - [#9519]) ([input_boolean docs])
|
||||
- Add reload service to python_script ([@doudz] - [#9512]) ([python_script docs])
|
||||
- MQTT Binary Sensor - Add availability_topic for online/offline status ([@marthoc] - [#9507]) ([binary_sensor.mqtt docs])
|
||||
- Fix typo within cover/knx https://github.com/XKNX/xknx/issues/64 ([@Julius2342] - [#9527]) ([cover.knx docs])
|
||||
- LIFX: improve performance of setting multi-zone lights to a single color ([@amelchio] - [#9526]) ([light.lifx docs])
|
||||
|
||||
[#8913]: https://github.com/home-assistant/home-assistant/pull/8913
|
||||
[#9056]: https://github.com/home-assistant/home-assistant/pull/9056
|
||||
[#9129]: https://github.com/home-assistant/home-assistant/pull/9129
|
||||
[#9162]: https://github.com/home-assistant/home-assistant/pull/9162
|
||||
[#9222]: https://github.com/home-assistant/home-assistant/pull/9222
|
||||
[#9227]: https://github.com/home-assistant/home-assistant/pull/9227
|
||||
[#9236]: https://github.com/home-assistant/home-assistant/pull/9236
|
||||
[#9246]: https://github.com/home-assistant/home-assistant/pull/9246
|
||||
[#9264]: https://github.com/home-assistant/home-assistant/pull/9264
|
||||
[#9281]: https://github.com/home-assistant/home-assistant/pull/9281
|
||||
[#9283]: https://github.com/home-assistant/home-assistant/pull/9283
|
||||
[#9286]: https://github.com/home-assistant/home-assistant/pull/9286
|
||||
[#9293]: https://github.com/home-assistant/home-assistant/pull/9293
|
||||
[#9301]: https://github.com/home-assistant/home-assistant/pull/9301
|
||||
[#9310]: https://github.com/home-assistant/home-assistant/pull/9310
|
||||
[#9315]: https://github.com/home-assistant/home-assistant/pull/9315
|
||||
[#9336]: https://github.com/home-assistant/home-assistant/pull/9336
|
||||
[#9338]: https://github.com/home-assistant/home-assistant/pull/9338
|
||||
[#9355]: https://github.com/home-assistant/home-assistant/pull/9355
|
||||
[#9357]: https://github.com/home-assistant/home-assistant/pull/9357
|
||||
[#9364]: https://github.com/home-assistant/home-assistant/pull/9364
|
||||
[#9365]: https://github.com/home-assistant/home-assistant/pull/9365
|
||||
[#9378]: https://github.com/home-assistant/home-assistant/pull/9378
|
||||
[#9386]: https://github.com/home-assistant/home-assistant/pull/9386
|
||||
[#9389]: https://github.com/home-assistant/home-assistant/pull/9389
|
||||
[#9390]: https://github.com/home-assistant/home-assistant/pull/9390
|
||||
[#9391]: https://github.com/home-assistant/home-assistant/pull/9391
|
||||
[#9394]: https://github.com/home-assistant/home-assistant/pull/9394
|
||||
[#9400]: https://github.com/home-assistant/home-assistant/pull/9400
|
||||
[#9403]: https://github.com/home-assistant/home-assistant/pull/9403
|
||||
[#9404]: https://github.com/home-assistant/home-assistant/pull/9404
|
||||
[#9408]: https://github.com/home-assistant/home-assistant/pull/9408
|
||||
[#9411]: https://github.com/home-assistant/home-assistant/pull/9411
|
||||
[#9413]: https://github.com/home-assistant/home-assistant/pull/9413
|
||||
[#9415]: https://github.com/home-assistant/home-assistant/pull/9415
|
||||
[#9416]: https://github.com/home-assistant/home-assistant/pull/9416
|
||||
[#9417]: https://github.com/home-assistant/home-assistant/pull/9417
|
||||
[#9422]: https://github.com/home-assistant/home-assistant/pull/9422
|
||||
[#9423]: https://github.com/home-assistant/home-assistant/pull/9423
|
||||
[#9424]: https://github.com/home-assistant/home-assistant/pull/9424
|
||||
[#9426]: https://github.com/home-assistant/home-assistant/pull/9426
|
||||
[#9427]: https://github.com/home-assistant/home-assistant/pull/9427
|
||||
[#9428]: https://github.com/home-assistant/home-assistant/pull/9428
|
||||
[#9431]: https://github.com/home-assistant/home-assistant/pull/9431
|
||||
[#9435]: https://github.com/home-assistant/home-assistant/pull/9435
|
||||
[#9436]: https://github.com/home-assistant/home-assistant/pull/9436
|
||||
[#9437]: https://github.com/home-assistant/home-assistant/pull/9437
|
||||
[#9438]: https://github.com/home-assistant/home-assistant/pull/9438
|
||||
[#9439]: https://github.com/home-assistant/home-assistant/pull/9439
|
||||
[#9440]: https://github.com/home-assistant/home-assistant/pull/9440
|
||||
[#9443]: https://github.com/home-assistant/home-assistant/pull/9443
|
||||
[#9446]: https://github.com/home-assistant/home-assistant/pull/9446
|
||||
[#9448]: https://github.com/home-assistant/home-assistant/pull/9448
|
||||
[#9452]: https://github.com/home-assistant/home-assistant/pull/9452
|
||||
[#9453]: https://github.com/home-assistant/home-assistant/pull/9453
|
||||
[#9456]: https://github.com/home-assistant/home-assistant/pull/9456
|
||||
[#9457]: https://github.com/home-assistant/home-assistant/pull/9457
|
||||
[#9458]: https://github.com/home-assistant/home-assistant/pull/9458
|
||||
[#9460]: https://github.com/home-assistant/home-assistant/pull/9460
|
||||
[#9462]: https://github.com/home-assistant/home-assistant/pull/9462
|
||||
[#9463]: https://github.com/home-assistant/home-assistant/pull/9463
|
||||
[#9464]: https://github.com/home-assistant/home-assistant/pull/9464
|
||||
[#9469]: https://github.com/home-assistant/home-assistant/pull/9469
|
||||
[#9474]: https://github.com/home-assistant/home-assistant/pull/9474
|
||||
[#9475]: https://github.com/home-assistant/home-assistant/pull/9475
|
||||
[#9476]: https://github.com/home-assistant/home-assistant/pull/9476
|
||||
[#9485]: https://github.com/home-assistant/home-assistant/pull/9485
|
||||
[#9488]: https://github.com/home-assistant/home-assistant/pull/9488
|
||||
[#9489]: https://github.com/home-assistant/home-assistant/pull/9489
|
||||
[#9490]: https://github.com/home-assistant/home-assistant/pull/9490
|
||||
[#9491]: https://github.com/home-assistant/home-assistant/pull/9491
|
||||
[#9492]: https://github.com/home-assistant/home-assistant/pull/9492
|
||||
[#9498]: https://github.com/home-assistant/home-assistant/pull/9498
|
||||
[#9503]: https://github.com/home-assistant/home-assistant/pull/9503
|
||||
[#9504]: https://github.com/home-assistant/home-assistant/pull/9504
|
||||
[#9505]: https://github.com/home-assistant/home-assistant/pull/9505
|
||||
[#9506]: https://github.com/home-assistant/home-assistant/pull/9506
|
||||
[#9507]: https://github.com/home-assistant/home-assistant/pull/9507
|
||||
[#9511]: https://github.com/home-assistant/home-assistant/pull/9511
|
||||
[#9512]: https://github.com/home-assistant/home-assistant/pull/9512
|
||||
[#9515]: https://github.com/home-assistant/home-assistant/pull/9515
|
||||
[#9519]: https://github.com/home-assistant/home-assistant/pull/9519
|
||||
[#9520]: https://github.com/home-assistant/home-assistant/pull/9520
|
||||
[#9526]: https://github.com/home-assistant/home-assistant/pull/9526
|
||||
[#9527]: https://github.com/home-assistant/home-assistant/pull/9527
|
||||
[@MisterWil]: https://github.com/MisterWil
|
||||
[@pdanilew]: https://github.com/pdanilew
|
||||
[@marthoc]: https://github.com/marthoc
|
||||
[@spektren]: https://github.com/spektren
|
||||
[@Blender3D]: https://github.com/Blender3D
|
||||
[@Jay2645]: https://github.com/Jay2645
|
||||
[@Julius2342]: https://github.com/Julius2342
|
||||
[@Kane610]: https://github.com/Kane610
|
||||
[@Klikini]: https://github.com/Klikini
|
||||
[@MikeChristianson]: https://github.com/MikeChristianson
|
||||
[@SqyD]: https://github.com/SqyD
|
||||
[@TD22057]: https://github.com/TD22057
|
||||
[@amelchio]: https://github.com/amelchio
|
||||
[@antonym]: https://github.com/antonym
|
||||
[@armills]: https://github.com/armills
|
||||
[@arsaboo]: https://github.com/arsaboo
|
||||
[@astone123]: https://github.com/astone123
|
||||
[@bachya]: https://github.com/bachya
|
||||
[@balloob]: https://github.com/balloob
|
||||
[@c-soft]: https://github.com/c-soft
|
||||
[@colindunn]: https://github.com/colindunn
|
||||
[@danielhiversen]: https://github.com/danielhiversen
|
||||
[@danielperna84]: https://github.com/danielperna84
|
||||
[@diplix]: https://github.com/diplix
|
||||
[@doudz]: https://github.com/doudz
|
||||
[@fabaff]: https://github.com/fabaff
|
||||
[@fanaticDavid]: https://github.com/fanaticDavid
|
||||
[@fanthos]: https://github.com/fanthos
|
||||
[@foxel]: https://github.com/foxel
|
||||
[@giangvo]: https://github.com/giangvo
|
||||
[@happyleavesaoc]: https://github.com/happyleavesaoc
|
||||
[@hufman]: https://github.com/hufman
|
||||
[@jlmcgehee21]: https://github.com/jlmcgehee21
|
||||
[@johnboiles]: https://github.com/johnboiles
|
||||
[@kylehendricks]: https://github.com/kylehendricks
|
||||
[@michaelarnauts]: https://github.com/michaelarnauts
|
||||
[@mika]: https://github.com/mika
|
||||
[@milanvo]: https://github.com/milanvo
|
||||
[@morberg]: https://github.com/morberg
|
||||
[@multiholle]: https://github.com/multiholle
|
||||
[@mw-white]: https://github.com/mw-white
|
||||
[@nilzen]: https://github.com/nilzen
|
||||
[@pfalcon]: https://github.com/pfalcon
|
||||
[@postlund]: https://github.com/postlund
|
||||
[@pvizeli]: https://github.com/pvizeli
|
||||
[@rbflurry]: https://github.com/rbflurry
|
||||
[@rollbrettler]: https://github.com/rollbrettler
|
||||
[@skalavala]: https://github.com/skalavala
|
||||
[@snjoetw]: https://github.com/snjoetw
|
||||
[@syssi]: https://github.com/syssi
|
||||
[@tcastberg]: https://github.com/tcastberg
|
||||
[@tinloaf]: https://github.com/tinloaf
|
||||
[@turbokongen]: https://github.com/turbokongen
|
||||
[@vickyg3]: https://github.com/vickyg3
|
||||
[@wickerwaka]: https://github.com/wickerwaka
|
||||
[abode docs]: /components/abode/
|
||||
[alarm_control_panel.abode docs]: /components/alarm_control_panel.abode/
|
||||
[alarm_control_panel.manual docs]: /components/alarm_control_panel.manual/
|
||||
[alarm_control_panel.satel_integra docs]: /components/alarm_control_panel.satel_integra/
|
||||
[alarm_control_panel.spc docs]: /components/alarm_control_panel.spc/
|
||||
[alexa docs]: /components/alexa/
|
||||
[api docs]: /components/api/
|
||||
[apple_tv docs]: /components/apple_tv/
|
||||
[axis docs]: /components/axis/
|
||||
[binary_sensor.abode docs]: /components/binary_sensor.abode/
|
||||
[binary_sensor.bayesian docs]: /components/binary_sensor.bayesian/
|
||||
[binary_sensor.doorbird docs]: /components/binary_sensor.doorbird/
|
||||
[binary_sensor.knx docs]: /components/binary_sensor.knx/
|
||||
[binary_sensor.mqtt docs]: /components/binary_sensor.mqtt/
|
||||
[binary_sensor.satel_integra docs]: /components/binary_sensor.satel_integra/
|
||||
[binary_sensor.spc docs]: /components/binary_sensor.spc/
|
||||
[calendar.todoist docs]: /components/calendar.todoist/
|
||||
[camera.abode docs]: /components/camera.abode/
|
||||
[camera.axis docs]: /components/camera.axis/
|
||||
[camera.doorbird docs]: /components/camera.doorbird/
|
||||
[camera.uvc docs]: /components/camera.uvc/
|
||||
[climate.knx docs]: /components/climate.knx/
|
||||
[config.zwave docs]: /components/config.zwave/
|
||||
[cover.abode docs]: /components/cover.abode/
|
||||
[cover.knx docs]: /components/cover.knx/
|
||||
[device_tracker.aruba docs]: /components/device_tracker.aruba/
|
||||
[device_tracker.automatic docs]: /components/device_tracker.automatic/
|
||||
[device_tracker.keenetic_ndms2 docs]: /components/device_tracker.keenetic_ndms2/
|
||||
[device_tracker.owntracks docs]: /components/device_tracker.owntracks/
|
||||
[doorbird docs]: /components/doorbird/
|
||||
[emulated_hue docs]: /components/emulated_hue/
|
||||
[homematic docs]: /components/homematic/
|
||||
[input_boolean docs]: /components/input_boolean/
|
||||
[light.abode docs]: /components/light.abode/
|
||||
[light.knx docs]: /components/light.knx/
|
||||
[light.lifx docs]: /components/light.lifx/
|
||||
[light.template docs]: /components/light.template/
|
||||
[light.tradfri docs]: /components/light.tradfri/
|
||||
[light.xiaomi_philipslight docs]: /components/light.xiaomi_philipslight/
|
||||
[lock.abode docs]: /components/lock.abode/
|
||||
[media_player.apple_tv docs]: /components/media_player.apple_tv/
|
||||
[media_player.mpd docs]: /components/media_player.mpd/
|
||||
[media_player.russound_rio docs]: /components/media_player.russound_rio/
|
||||
[media_player.universal docs]: /components/media_player.universal/
|
||||
[mqtt_statestream docs]: /components/mqtt_statestream/
|
||||
[notify.html5 docs]: /components/notify.html5/
|
||||
[notify.xmpp docs]: /components/notify.xmpp/
|
||||
[python_script docs]: /components/python_script/
|
||||
[satel_integra docs]: /components/satel_integra/
|
||||
[sensor.airvisual docs]: /components/sensor.airvisual/
|
||||
[sensor.citybikes docs]: /components/sensor.citybikes/
|
||||
[sensor.coinmarketcap docs]: /components/sensor.coinmarketcap/
|
||||
[sensor.dte_energy_bridge docs]: /components/sensor.dte_energy_bridge/
|
||||
[sensor.fitbit docs]: /components/sensor.fitbit/
|
||||
[sensor.homematic docs]: /components/sensor.homematic/
|
||||
[sensor.knx docs]: /components/sensor.knx/
|
||||
[sensor.mopar docs]: /components/sensor.mopar/
|
||||
[sensor.onewire docs]: /components/sensor.onewire/
|
||||
[sensor.swiss_public_transport docs]: /components/sensor.swiss_public_transport/
|
||||
[sensor.systemmonitor docs]: /components/sensor.systemmonitor/
|
||||
[sensor.uber docs]: /components/sensor.uber/
|
||||
[sensor.worxlandroid docs]: /components/sensor.worxlandroid/
|
||||
[switch.abode docs]: /components/switch.abode/
|
||||
[switch.broadlink docs]: /components/switch.broadlink/
|
||||
[switch.doorbird docs]: /components/switch.doorbird/
|
||||
[switch.knx docs]: /components/switch.knx/
|
||||
[switch.rest docs]: /components/switch.rest/
|
||||
[switch.telnet docs]: /components/switch.telnet/
|
||||
[vacuum docs]: /components/vacuum/
|
||||
[vacuum.mqtt docs]: /components/vacuum.mqtt/
|
||||
[vacuum.xiaomi docs]: /components/vacuum.xiaomi/
|
||||
[xiaomi docs]: /components/xiaomi/
|
||||
[xiaomi_aqara docs]: /components/xiaomi_aqara/
|
||||
[zwave docs]: /components/zwave/
|
||||
[forum]: https://community.home-assistant.io/
|
||||
[issue]: https://github.com/home-assistant/home-assistant/issues
|
||||
[discord]: https://discord.gg/c5DvZ4e
|
BIN
source/images/blog/2017-09-0.54/components.png
Normal file
BIN
source/images/blog/2017-09-0.54/components.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 100 KiB |
Loading…
x
Reference in New Issue
Block a user