Merge branch 'current' into next

This commit is contained in:
Franck Nijhof 2021-04-07 15:06:04 +02:00
commit 1e9218bd51
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
19 changed files with 207 additions and 155 deletions

View File

@ -57,7 +57,7 @@ jobs:
- name: Check out files from GitHub - name: Check out files from GitHub
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Setting up Ruby 2.6 - name: Setting up Ruby 2.6
uses: ruby/setup-ruby@v1.66.1 uses: ruby/setup-ruby@v1.68.0
with: with:
ruby-version: 2.6 ruby-version: 2.6
- name: Setup Ruby Gems cache - name: Setup Ruby Gems cache

View File

@ -90,7 +90,7 @@ GEM
rb-fsevent (0.10.4) rb-fsevent (0.10.4)
rb-inotify (0.10.1) rb-inotify (0.10.1)
ffi (~> 1.0) ffi (~> 1.0)
rexml (3.2.4) rexml (3.2.5)
rouge (3.26.0) rouge (3.26.0)
ruby-enum (0.9.0) ruby-enum (0.9.0)
i18n i18n

View File

@ -3,7 +3,7 @@ title: "Automation Editor"
description: "Instructions on how to use the automation editor." description: "Instructions on how to use the automation editor."
--- ---
From the UI choose **{% my config %}** which is located in the sidebar, then click on **{% my automations %}** to go to the automation editor. Press the **+** sign in the lower right corner to get started. This example is based on the manual steps described in the [Getting started section](/getting-started/automation/) for a [`random` sensor](/integrations/random#sensor). From the UI choose **{% my config %}** which is located in the sidebar, then click on **{% my automations %}** to go to the automation editor. Press the **+** sign in the lower right corner to get started. This page uses the [Random sensor](/integrations/random#sensor) as an example. Any other sensor with a numeric value, can be used as well.
Choose a meaningful name for your automation rules. Choose a meaningful name for your automation rules.

View File

@ -30,7 +30,7 @@
<a <a
href="{{ site.netlify.repository_url }}/issues?utf8=%E2%9C%93&q=%22{{ page.url | url_encode }}%22&in=body" href="{{ site.netlify.repository_url }}/issues?utf8=%E2%9C%93&q=%22{{ page.url | url_encode }}%22&in=body"
target="_blank" target="_blank"
><i class="icon-comments" /> View pending feedback</a ><i class="icon-comments" /> View given feedback</a
> >
{% endif %} {% endif %}
</div> </div>

View File

@ -185,7 +185,7 @@ Prior to Home Assistant 0.101, this approach did not work well for newer devices
The second option is to use an ADB server to connect to your Android TV and Fire TV devices. The second option is to use an ADB server to connect to your Android TV and Fire TV devices.
For Home Assistant users, you can install the [Android Debug Bridge](https://github.com/hassio-addons/addon-adb/blob/master/README.md) add-on. Using this approach, Home Assistant will send the ADB commands to the server, which will then send them to the Android TV / Fire TV device and report back to Home Assistant. To use this option, add the `adb_server_ip` option to your configuration. If you are running the server on the same machine as Home Assistant, you can use `127.0.0.1` for this value. Using this approach, Home Assistant will send the ADB commands to the server, which will then send them to the Android TV / Fire TV device and report back to Home Assistant. To use this option, add the `adb_server_ip` option to your configuration. If you are running the server on the same machine as Home Assistant, you can use `127.0.0.1` for this value.
## ADB Troubleshooting ## ADB Troubleshooting

View File

@ -186,7 +186,7 @@ retain:
type: boolean type: boolean
default: false default: false
set_position_template: set_position_template:
description: "Defines a [template](/topics/templating/) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{{position}}`. If no template is defined, the position (0-100) will be calculated according to `position_open` and `position_closed` values." description: "Defines a [template](/topics/templating/) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{% raw %}{{ position }}{% endraw %}`. If no template is defined, the position (0-100) will be calculated according to `position_open` and `position_closed` values."
required: false required: false
type: string type: string
set_position_topic: set_position_topic:

View File

@ -35,7 +35,7 @@ host:
required: true required: true
type: string type: string
token: token:
description: "See [Fortinet Developer Network](https://fndn.fortinet.net) for how to create an API token. Remember this integration only needs read access to a FortiGate, so configure the API user to only to have limited and read-only access." description: "See: [Generate an API token for FortiOS](https://registry.terraform.io/providers/fortinetdev/fortios/latest/docs/guides/fgt_token) for how to create an API token. Remember this integration only needs read access to a FortiGate, so configure the API user to only to have limited and read-only access."
required: true required: true
type: string type: string
verify_ssl: verify_ssl:

View File

@ -34,7 +34,7 @@ To integrate Google Maps Location Sharing in Home Assistant, add the following s
# Example configuration.yaml entry # Example configuration.yaml entry
device_tracker: device_tracker:
- platform: google_maps - platform: google_maps
username: YOUR_USERNAME username: "YOUR_EMAIL"
``` ```
Once enabled and you have rebooted devices discovered through this integration will be listed in the `known_devices.yaml` file within your configuration directory. Once enabled and you have rebooted devices discovered through this integration will be listed in the `known_devices.yaml` file within your configuration directory.

View File

@ -55,6 +55,8 @@ If you want to see if a specific device you have is supported, head over to the
We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear), via JSON-RPC or the XML-API you may have installed on your CCU. Since this may fail this is disabled by default. We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear), via JSON-RPC or the XML-API you may have installed on your CCU. Since this may fail this is disabled by default.
You can manually rename the created entities by using Home Assistant's [Customizing](/docs/configuration/customizing-devices/) feature. The Homematic integration is also supported by the [Entity Registry](https://developers.home-assistant.io/docs/en/entity_registry_index.html), which allows you to change the friendly name and the entity ID directly in the Home Assistant UI. You can manually rename the created entities by using Home Assistant's [Customizing](/docs/configuration/customizing-devices/) feature. The Homematic integration is also supported by the [Entity Registry](https://developers.home-assistant.io/docs/en/entity_registry_index.html), which allows you to change the friendly name and the entity ID directly in the Home Assistant UI.
## Configuration
To set up the component, add the following information to your `configuration.yaml` file: To set up the component, add the following information to your `configuration.yaml` file:
```yaml ```yaml
@ -159,38 +161,38 @@ password:
type: string type: string
{% endconfiguration %} {% endconfiguration %}
#### Example configuration with multiple protocols and some other options set: ### Example configuration with multiple protocols and some other options set
```yaml ```yaml
homematic: homematic:
interfaces: interfaces:
rf: rf:
host: 127.0.0.1 host: 127.0.0.1
resolvenames: json resolvenames: "json"
username: Admin username: "Admin"
password: secret password: "secret"
wired: wired:
host: 127.0.0.1 host: 127.0.0.1
port: 2000 port: 2000
resolvenames: json resolvenames: "json"
username: Admin username: "Admin"
password: secret password: "secret"
ip: ip:
host: 127.0.0.1 host: 127.0.0.1
port: 2010 port: 2010
groups: groups:
host: 127.0.0.1 host: 127.0.0.1
port: 9292 port: 9292
resolvenames: json resolvenames: "json"
username: Admin username: "Admin"
password: secret password: "secret"
path: /groups path: /groups
hosts: hosts:
ccu2: ccu2:
host: 127.0.0.1 host: 127.0.0.1
port: 2001 port: 2001
username: Admin username: "Admin"
password: secret password: "secret"
``` ```
@ -214,7 +216,6 @@ This does *not* affect the entities in Home Assistant. They all use their own co
Most devices have, besides their state, additional attributes like their battery state or valve position. These can be accessed using templates in automations, or even as their own entities using the [template sensor](/integrations/template) component. Here's an example of a template sensor that exposes the valve position of a thermostat. Most devices have, besides their state, additional attributes like their battery state or valve position. These can be accessed using templates in automations, or even as their own entities using the [template sensor](/integrations/template) component. Here's an example of a template sensor that exposes the valve position of a thermostat.
{% raw %} {% raw %}
```yaml ```yaml
@ -239,8 +240,8 @@ The values of variables are polled from the CCU/Homegear in an interval of 30 se
When Homematic devices change their state or some other internal value, the CCU/Homegear sends event messages to Home Assistant. These events are automatically parsed and the entities in Home Assistant are updated. However, you can also manually use these events to trigger automations. Two event-types are available: When Homematic devices change their state or some other internal value, the CCU/Homegear sends event messages to Home Assistant. These events are automatically parsed and the entities in Home Assistant are updated. However, you can also manually use these events to trigger automations. Two event-types are available:
- **homematic.keypress**: For devices with buttons, see information below - `homematic.keypress`: For devices with buttons, see information below
- **homematic.impulse**: For impulse sensors - `homematic.impulse`: For impulse sensors
#### Devices with buttons #### Devices with buttons
@ -256,7 +257,7 @@ automation:
platform: event platform: event
event_type: homematic.keypress event_type: homematic.keypress
event_data: event_data:
name: Kitchen Switch name: "Kitchen Switch"
channel: 1 channel: 1
param: PRESS_SHORT param: PRESS_SHORT
action: action:
@ -309,7 +310,7 @@ Simulate a button being pressed:
action: action:
service: homematic.virtualkey service: homematic.virtualkey
data: data:
address: BidCoS-RF address: "BidCoS-RF"
channel: 1 channel: 1
param: PRESS_LONG param: PRESS_LONG
``` ```
@ -321,7 +322,7 @@ Open KeyMatic:
action: action:
service: homematic.virtualkey service: homematic.virtualkey
data: data:
address: LEQ1234567 address: "LEQ1234567"
channel: 1 channel: 1
param: OPEN param: OPEN
``` ```
@ -335,7 +336,7 @@ action:
target: target:
entity_id: homematic.ccu2 entity_id: homematic.ccu2
data: data:
name: Variablename name: "Variablename"
value: true value: true
``` ```
@ -351,7 +352,7 @@ Manually turn on a switch actor:
action: action:
service: homematic.set_device_value service: homematic.set_device_value
data: data:
address: LEQ1234567 address: "LEQ1234567"
channel: 1 channel: 1
param: STATE param: STATE
value: true value: true
@ -364,7 +365,7 @@ Manually set temperature on thermostat:
action: action:
service: homematic.set_device_value service: homematic.set_device_value
data: data:
address: LEQ1234567 address: "LEQ1234567"
channel: 4 channel: 4
param: SET_TEMPERATURE param: SET_TEMPERATURE
value: 23.0 value: 23.0
@ -377,7 +378,7 @@ Manually set the active profile on thermostat:
action: action:
service: homematic.set_device_value service: homematic.set_device_value
data: data:
address: LEQ1234567 address: "LEQ1234567"
channel: 1 channel: 1
param: ACTIVE_PROFILE param: ACTIVE_PROFILE
value: 1 value: 1
@ -392,7 +393,7 @@ action:
service: homematic.put_paramset service: homematic.put_paramset
data: data:
interface: wireless interface: wireless
address: LEQ1234567 address: "LEQ1234567"
paramset_key: MASTER paramset_key: MASTER
paramset: paramset:
WEEK_PROGRAM_POINTER: 1 WEEK_PROGRAM_POINTER: 1
@ -406,7 +407,7 @@ action:
service: homematic.put_paramset service: homematic.put_paramset
data: data:
interface: wireless interface: wireless
address: LEQ1234567 address: "LEQ1234567"
paramset_key: MASTER paramset_key: MASTER
rx_mode: WAKEUP rx_mode: WAKEUP
paramset: paramset:
@ -457,7 +458,7 @@ binary_sensor:
- sensor.office_voltage - sensor.office_voltage
- sensor.time - sensor.time
value_template: >- value_template: >-
{{as_timestamp(now()) - as_timestamp(states.sensor.office_voltage.last_changed) < 600}} {{ as_timestamp(now()) - as_timestamp(state_attr('sensor.office_voltage', 'last_changed')) < 600 }}
automation: automation:
- alias: "Homematic Reconnect" - alias: "Homematic Reconnect"
@ -528,7 +529,7 @@ To use this notification platform in your installation, add the following to you
notify: notify:
- name: my_hm - name: my_hm
platform: homematic platform: homematic
address: NEQXXXXXXX address: "NEQXXXXXXX"
channel: 2 channel: 2
param: "SUBMIT" param: "SUBMIT"
value: "1,1,108000,8" value: "1,1,108000,8"

View File

@ -1,6 +1,6 @@
--- ---
title: LiteJet title: LiteJet
description: Instructions on how to setup the LiteJet hub within Home Assistant. description: Instructions on how to setup the LiteJet hub, Centralite Elegance or Centralite Jetstream within Home Assistant.
ha_category: ha_category:
- Light - Light
- Scene - Scene
@ -16,7 +16,7 @@ ha_codeowners:
- '@joncar' - '@joncar'
--- ---
LiteJet is a centralized lighting system that predates most home automation technology. All lights and wall switches are wired to a central panel. This central panel has a serial port interface that allows a computer to control the system via LiteJet's third party protocol. Home Assistant integrates the LiteJet 3rd party protocol and allows you to get the status and control the connected lights. LiteJet is a centralized lighting system that predates most home automation technology. All lights and wall switches are wired to a central panel. This central panel has a serial port interface that allows a computer to control the system via LiteJet's third party protocol. Home Assistant integrates the LiteJet 3rd party protocol and allows you to get the status and control the connected lights. This integration also supports the Centralite Elegance and Centralite Jetstream.
## Prerequisites ## Prerequisites

View File

@ -40,6 +40,18 @@ mqtt:
broker: IP_ADDRESS_BROKER broker: IP_ADDRESS_BROKER
``` ```
Manual configuration is required when connecting to a broker over TLS.
```yaml
# Example configuration.yaml entry
mqtt:
certificate: "PATH_TO_CA.crt"
broker: "IP_ADDRESS_BROKER"
port: 8883
username: "MQTT_USERNAME"
password: !secret MQTT_PASSWORD
```
## Additional features ## Additional features
- [Certificate](/docs/mqtt/certificate/) - [Certificate](/docs/mqtt/certificate/)

View File

@ -17,7 +17,7 @@ ha_platforms:
- weather - weather
--- ---
The `openweathermap` weather platform uses [OpenWeatherMap](https://openweathermap.org/) as a source for current meteorological data for your location. The OpenWeatherMap weather integrations uses [OpenWeatherMap](https://openweathermap.org/) as a source for current meteorological data for your location.
There is currently support for the following device types within Home Assistant: There is currently support for the following device types within Home Assistant:
@ -26,6 +26,12 @@ There is currently support for the following device types within Home Assistant:
You need an API key, which is free, but requires a [registration](https://home.openweathermap.org/users/sign_up). You need an API key, which is free, but requires a [registration](https://home.openweathermap.org/users/sign_up).
<div class='note'>
If you register an new API key with OpenWeatherMap, it will be activated automatically, this typically takes between 10 minutes and 2 hours
after your successful registration. Keep in mind when configuring this integration, that you new API key might
not be activated yet.
</div>
{% include integrations/config_flow.md %} {% include integrations/config_flow.md %}
| Parameter | Value | | Parameter | Value |

View File

@ -60,7 +60,7 @@ sensor:
- platform: template - platform: template
sensors: sensors:
power_consumption: power_consumption:
value_template: "{% if is_state_attr("sensor.pvoutput", "power_consumption", "NaN") %}0{% else %}{{ state_attr("sensor.pvoutput", "power_consumption") }}{% endif %}" value_template: "{% if is_state_attr('sensor.pvoutput', 'power_consumption', 'NaN') %}0{% else %}{{ state_attr('sensor.pvoutput', 'power_consumption') }}{% endif %}"
friendly_name: "Using" friendly_name: "Using"
unit_of_measurement: "Watt" unit_of_measurement: "Watt"
energy_consumption: energy_consumption:

View File

@ -29,7 +29,7 @@ sensor:
- platform: rest - platform: rest
resource: http://IP_ADDRESS/ENDPOINT resource: http://IP_ADDRESS/ENDPOINT
method: POST method: POST
payload: "{ "device" : "heater" }" payload: '{ "device" : "heater" }'
``` ```
or a template based request: or a template based request:
@ -155,7 +155,7 @@ sensor:
- platform: rest - platform: rest
resource: http://ip.jsontest.com resource: http://ip.jsontest.com
name: External IP name: External IP
value_template: '{{ value_json.ip }}' value_template: "{{ value_json.ip }}"
``` ```
{% endraw %} {% endraw %}
@ -171,7 +171,7 @@ sensor:
- platform: rest - platform: rest
resource: http://IP_ADRRESS:61208/api/2/mem/used resource: http://IP_ADRRESS:61208/api/2/mem/used
name: Used mem name: Used mem
value_template: '{{ value_json.used| multiply(0.000000954) | round(0) }}' value_template: "{{ value_json.used| multiply(0.000000954) | round(0) }}"
unit_of_measurement: MB unit_of_measurement: MB
``` ```
@ -190,7 +190,7 @@ sensor:
- platform: rest - platform: rest
resource: http://IP_ADDRESS:8123/api/states/sensor.weather_temperature resource: http://IP_ADDRESS:8123/api/states/sensor.weather_temperature
name: Temperature name: Temperature
value_template: '{{ value_json.state }}' value_template: "{{ value_json.state }}"
unit_of_measurement: "°C" unit_of_measurement: "°C"
``` ```
@ -252,7 +252,7 @@ sensor:
username: YOUR_GITHUB_USERNAME username: YOUR_GITHUB_USERNAME
password: YOUR_GITHUB_ACCESS_TOKEN password: YOUR_GITHUB_ACCESS_TOKEN
authentication: basic authentication: basic
value_template: '{{ value_json.tag_name }}' value_template: "{{ value_json.tag_name }}"
headers: headers:
Accept: application/vnd.github.v3+json Accept: application/vnd.github.v3+json
Content-Type: application/json Content-Type: application/json
@ -275,15 +275,15 @@ sensor:
- date - date
- milliseconds_since_epoch - milliseconds_since_epoch
resource: http://date.jsontest.com/ resource: http://date.jsontest.com/
value_template: '{{ value_json.time }}' value_template: "{{ value_json.time }}"
- platform: template - platform: template
sensors: sensors:
date: date:
friendly_name: "Date" friendly_name: "Date"
value_template: "{{ states.sensor.json_time.attributes["date"] }}" value_template: "{{ state_attr('sensor.json_time', 'date') }}"
milliseconds: milliseconds:
friendly_name: "milliseconds" friendly_name: "milliseconds"
value_template: '{{ states.sensor.json_time.attributes["milliseconds_since_epoch"] }}' value_template: "{{ state_attr('sensor.json_time', 'milliseconds_since_epoch') }}"
``` ```
{% endraw %} {% endraw %}
@ -303,7 +303,7 @@ sensor:
- city - city
- zipcode - zipcode
resource: https://jsonplaceholder.typicode.com/users resource: https://jsonplaceholder.typicode.com/users
value_template: '{{ value_json[0].name }}' value_template: "{{ value_json[0].name }}"
``` ```
{% endraw %} {% endraw %}
@ -319,27 +319,27 @@ sensor:
json_attributes: json_attributes:
- main - main
- weather - weather
value_template: '{{ value_json["weather"][0]["description"].title() }}' value_template: "{{ value_json['weather'][0]['description'].title() }}"
resource: https://api.openweathermap.org/data/2.5/weather?zip=80302,us&APPID=VERYSECRETAPIKEY resource: https://api.openweathermap.org/data/2.5/weather?zip=80302,us&APPID=VERYSECRETAPIKEY
- platform: template - platform: template
sensors: sensors:
owm_weather: owm_weather:
value_template: '{{ state_attr('sensor.owm_report', 'weather')[0]["description"].title() }}' value_template: "{{ state_attr('sensor.owm_report', 'weather')[0]['description'].title() }}"
entity_picture_template: '{{ "https://openweathermap.org/img/w/"+state_attr('sensor.owm_report', 'weather')[0]["icon"].lower()+".png" }}' entity_picture_template: "{{ 'https://openweathermap.org/img/w/' + state_attr('sensor.owm_report', 'weather')[0]['icon'].lower() + '.png' }}"
entity_id: sensor.owm_report entity_id: sensor.owm_report
owm_temp: owm_temp:
friendly_name: "Outside temp" friendly_name: "Outside temp"
value_template: '{{ state_attr('sensor.owm_report', 'main')["temp"]-273.15 }}' value_template: "{{ state_attr(['sensor.owm_report', 'main')['temp'] - 273.15 }}"
unit_of_measurement: "°C" unit_of_measurement: "°C"
entity_id: sensor.owm_report entity_id: sensor.owm_report
owm_pressure: owm_pressure:
friendly_name: "Outside pressure" friendly_name: "Outside pressure"
value_template: '{{ state_attr('sensor.owm_report', 'main')["pressure"] }}' value_template: "{{ state_attr('sensor.owm_report', 'main')['pressure'] }}"
unit_of_measurement: "hP" unit_of_measurement: "hP"
entity_id: sensor.owm_report entity_id: sensor.owm_report
owm_humidity: owm_humidity:
friendly_name: "Outside humidity" friendly_name: "Outside humidity"
value_template: '{{ state_attr('sensor.owm_report', 'main')["humidity"] }}' value_template: "{{ state_attr('sensor.owm_report', 'main')['humidity'] }}"
unit_of_measurement: "%" unit_of_measurement: "%"
entity_id: sensor.owm_report entity_id: sensor.owm_report
``` ```
@ -390,19 +390,19 @@ sensor:
- platform: template - platform: template
sensors: sensors:
bedroom1_temperature: bedroom1_temperature:
value_template: '{{ states.sensor.room_sensors.attributes["bedroom1"]["temperature"] }}' value_template: "{{ state_attr('sensor.room_sensors', 'bedroom1')['temperature'] }}"
device_class: temperature device_class: temperature
unit_of_measurement: "°C" unit_of_measurement: "°C"
bedroom1_humidity: bedroom1_humidity:
value_template: '{{ states.sensor.room_sensors.attributes["bedroom1"]["humidity"] }}' value_template: "{{ state_attr('sensor.room_sensors', 'bedroom1')['humidity'] }}"
device_class: humidity device_class: humidity
unit_of_measurement: "%" unit_of_measurement: "%"
bedroom1_battery: bedroom1_battery:
value_template: '{{ states.sensor.room_sensors.attributes["bedroom1"]["battery"] }}' value_template: "{{ state_attr('sensor.room_sensors', 'bedroom1')['battery'] }}"
device_class: battery device_class: battery
unit_of_measurement: "V" unit_of_measurement: "V"
bedroom2_temperature: bedroom2_temperature:
value_template: '{{ states.sensor.room_sensors.attributes["bedroom2"]["temperature"] }}' value_template: "{{ state_attr('sensor.room_sensors', 'bedroom2')['temperature'] }}"
device_class: temperature device_class: temperature
unit_of_measurement: "°C" unit_of_measurement: "°C"
``` ```
@ -433,18 +433,18 @@ sensor:
sensors: sensors:
steam_temp: steam_temp:
friendly_name: Steam Temp friendly_name: Steam Temp
value_template: '{{ states.sensor.steam_system_data.attributes["temp0"] | regex_findall_index("([0-9]+)XF") }}' value_template: "{{ state_attr('sensor.steam_system_data', 'temp0') | regex_findall_index('([0-9]+)XF') }}"
unit_of_measurement: "°F" unit_of_measurement: "°F"
steam_time_remaining: steam_time_remaining:
friendly_name: "Steam Time Remaining" friendly_name: "Steam Time Remaining"
value_template: '{{ states.sensor.steam_system_data.attributes["time0"] }}' value_template: "{{ state_attr('sensor.steam_system_data', 'time0') }}"
unit_of_measurement: "minutes" unit_of_measurement: "minutes"
switch: switch:
- platform: template - platform: template
switches: switches:
steam: steam:
value_template: '{{ states.sensor.steam_system_data.attributes["usr0"] | int >= 1 }}' value_template: "{{ state_attr('sensor.steam_system_data', 'usr0') | int >= 1 }}"
turn_on: turn_on:
- service: rest_command.set_steam_led - service: rest_command.set_steam_led
data: data:

View File

@ -12,17 +12,17 @@ ha_platforms:
- notify - notify
--- ---
The `smtp` platform allows you to deliver notifications from Home Assistant to an e-mail recipient. The SMTP platform allows you to deliver notifications from Home Assistant to an e-mail recipient.
To enable notification by e-mail in your installation, add the following to your `configuration.yaml` file: To enable notification by e-mail in your installation, add the following to your `configuration.yaml` file:
```yaml ```yaml
# Example configuration.yaml entry # Example configuration.yaml entry
notify: notify:
- name: NOTIFIER_NAME - name: "NOTIFIER_NAME"
platform: smtp platform: smtp
sender: YOUR_SENDER sender: "YOUR_SENDER"
recipient: YOUR_RECIPIENT recipient: "YOUR_RECIPIENT"
``` ```
{% configuration %} {% configuration %}
@ -59,7 +59,7 @@ username:
required: false required: false
type: string type: string
password: password:
description: Password for the SMTP server that belongs to the given username. If the password contains a colon it need to be wrapped in apostrophes. description: Password for the SMTP server that belongs to the given username. Make sure to wrap it in double quotes; e.g., `"MY_PASSWORD"`.
required: false required: false
type: string type: string
encryption: encryption:
@ -72,7 +72,7 @@ sender_name:
required: false required: false
type: string type: string
debug: debug:
description: Enables Debug, e.g., True or False. description: Enables Debug, e.g., `true` or `false`.
required: false required: false
type: boolean type: boolean
default: false default: false
@ -83,19 +83,19 @@ A sample configuration entry for Google Mail.
```yaml ```yaml
# Example configuration.yaml entry # Example configuration.yaml entry
notify: notify:
- name: NOTIFIER_NAME - name: "NOTIFIER_NAME"
platform: smtp platform: smtp
server: smtp.gmail.com server: "smtp.gmail.com"
port: 587 port: 587
timeout: 15 timeout: 15
sender: john@gmail.com sender: "john@gmail.com"
encryption: starttls encryption: starttls
username: john@gmail.com username: "john@gmail.com"
password: thePassword password: "thePassword"
recipient: recipient:
- james@gmail.com - "james@gmail.com"
- bob@gmail.com - "bob@gmail.com"
sender_name: My Home Assistant sender_name: "My Home Assistant"
``` ```
Keep in mind that Google has some extra layers of protection which need special attention (Hint: 'Less secure apps'). If you have 2-step verification enabled on your Google account, you'll need to use [an application-specific password](https://support.google.com/mail/answer/185833?hl=en). Keep in mind that Google has some extra layers of protection which need special attention (Hint: 'Less secure apps'). If you have 2-step verification enabled on your Google account, you'll need to use [an application-specific password](https://support.google.com/mail/answer/185833?hl=en).
@ -103,20 +103,20 @@ Keep in mind that Google has some extra layers of protection which need special
To use the SMTP notification, refer to it in an automation or script like in this example: To use the SMTP notification, refer to it in an automation or script like in this example:
```yaml ```yaml
burglar: burglar:
alias: "Burglar Alarm" alias: "Burglar Alarm"
sequence: sequence:
- service: shell_command.snapshot - service: shell_command.snapshot
- delay: - delay:
seconds: 1 seconds: 1
- service: notify.NOTIFIER_NAME - service: notify.NOTIFIER_NAME
data: data:
title: "Intruder alert" title: "Intruder alert"
message: "Intruder alert at apartment!!" message: "Intruder alert at apartment!!"
data: data:
images: images:
- /home/pi/snapshot1.jpg - /home/pi/snapshot1.jpg
- /home/pi/snapshot2.jpg - /home/pi/snapshot2.jpg
``` ```
The optional `images` field adds in-line image attachments to the email. This sends a text/HTML multi-part message instead of the plain text default. The optional `images` field adds in-line image attachments to the email. This sends a text/HTML multi-part message instead of the plain text default.
@ -124,74 +124,72 @@ The optional `images` field adds in-line image attachments to the email. This se
The optional `html` field makes a custom text/HTML multi-part message, allowing total freedom for sending rich html emails. In them, if you need to attach images, you can pass both arguments (`html` and `images`), the attachments will be joined with the basename of the images, so they can be included in the html page with `src="cid:image_name.ext"`. The optional `html` field makes a custom text/HTML multi-part message, allowing total freedom for sending rich html emails. In them, if you need to attach images, you can pass both arguments (`html` and `images`), the attachments will be joined with the basename of the images, so they can be included in the html page with `src="cid:image_name.ext"`.
```yaml ```yaml
burglar: burglar:
alias: "Burglar Alarm" alias: "Burglar Alarm"
sequence: sequence:
- service: shell_command.snapshot - service: shell_command.snapshot
- delay: - delay:
seconds: 1 seconds: 1
- service: notify.NOTIFIER_NAME - service: notify.NOTIFIER_NAME
data: data:
message: "Intruder alert at apartment!!" message: "Intruder alert at apartment!!"
data: data:
images: images:
- /home/pi/snapshot1.jpg - /home/pi/snapshot1.jpg
- /home/pi/snapshot2.jpg - /home/pi/snapshot2.jpg
html: > html: >
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Intruder alert</title> <title>Intruder alert</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
<style type="text/css"> <style type="text/css">
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTZS3E-kSBmtLoNJPDtbj2Pk.ttf) format('truetype'); src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTZS3E-kSBmtLoNJPDtbj2Pk.ttf) format('truetype');
} }
h1,h2,h3,h4,h5,h6 { h1,h2,h3,h4,h5,h6 {
font-family:'Open Sans',Arial,sans-serif; font-family:'Open Sans',Arial,sans-serif;
font-weight:400; font-weight:400;
margin:10px 0 margin:10px 0
} }
</style> </style>
</head> </head>
<body> <body>
<div class="jumbotron jumbotron-fluid" style="background-color: #f00a2d; color: white;"> <div class="jumbotron jumbotron-fluid" style="background-color: #f00a2d; color: white;">
<div class="container py-0"> <div class="container py-0">
<h1>Intruder alert at apartment!!</h1> <h1>Intruder alert at apartment!!</h1>
</div> </div>
</div> </div>
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-xs-12 col-md-6 px-0"> <div class="col-xs-12 col-md-6 px-0">
<img class="rounded" style="width: 100%;" <img class="rounded" style="width: 100%;"
alt="snapshot1" src="cid:snapshot1.jpg" /> alt="snapshot1" src="cid:snapshot1.jpg" />
</div> </div>
<div class="col-xs-12 col-md-6 px-0"> <div class="col-xs-12 col-md-6 px-0">
<img class="rounded" style="width: 100%;" <img class="rounded" style="width: 100%;"
alt="snapshot2" src="cid:snapshot2.jpg" /> alt="snapshot2" src="cid:snapshot2.jpg" />
</div>
</div> </div>
<br>
</div> </div>
</body> <br>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> </div>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js"></script> </body>
</html> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js"></script>
</html>
``` ```
This platform is fragile and not able to catch all exceptions in a smart way because of the large number of possible configuration combinations. This platform is fragile and not able to catch all exceptions in a smart way because of the large number of possible configuration combinations.
A combination that will work properly is port 587 and STARTTLS. It's recommended to enable STARTTLS, if possible. A combination that will work properly is port 587 and STARTTLS. It's recommended to enable STARTTLS, if possible.
Keep in mind that if the password contains a colon, it needs to be wrapped in apostrophes in the `configuration.yaml` file.
For Google Mail (smtp.gmail.com) an additional step in the setup process is needed. Google has some extra layers of protection For Google Mail (smtp.gmail.com) an additional step in the setup process is needed. Google has some extra layers of protection
which need special attention. By default, the usage by external applications, especially scripts, is limited. Visit the [Less secure apps](https://www.google.com/settings/security/lesssecureapps) page and enable it. which need special attention. By default, the usage by external applications, especially scripts, is limited. Visit the [Less secure apps](https://www.google.com/settings/security/lesssecureapps) page and enable it.

View File

@ -22,7 +22,7 @@ ha_platforms:
- switch - switch
--- ---
The `Tahoma` integration platform is used as an interface to the [tahomalink.com](https://www.tahomalink.com) website. It adds covers, scenes and a sun sensor from the Tahoma platform. The Tahoma integration is used as an interface to the [tahomalink.com](https://www.tahomalink.com) website. It adds covers, scenes and a sun sensor from the Tahoma platform.
There is currently support for the following device types within Home Assistant: There is currently support for the following device types within Home Assistant:
@ -40,9 +40,12 @@ To use your Tahoma devices in your installation, add the following to your `conf
```yaml ```yaml
# Example configuration.yaml entry # Example configuration.yaml entry
tahoma: tahoma:
username: YOUR_USERNAME username: "YOUR_USERNAME"
password: YOUR_PASSWORD password: "YOUR_PASSWORD"
exclude: [BridgeHUEComponent, HueLampHUEComponent, PodComponent] exclude:
- "BridgeHUEComponent"
- "HueLampHUEComponent"
- "PodComponent"
``` ```
{% configuration %} {% configuration %}
@ -60,4 +63,4 @@ exclude:
type: list type: list
{% endconfiguration %} {% endconfiguration %}
This also works with the Somfy Connexoon. Check [here](https://somfyhouse.freshdesk.com/nl/support/solutions/articles/14000058145-wat-is-het-verschil-tussen-de-tahoma-en-de-connexoon-) for the differences between the bridges. This also works with the Somfy Connexoon. Check [here](https://www.somfy.nl/keuzehulp/verschillen-tahoma-en-connexoon) for the differences between the bridges.

View File

@ -38,7 +38,7 @@ There is currently support for the following device types within Home Assistant:
{% include integrations/config_flow.md %} {% include integrations/config_flow.md %}
During configuration, be careful to select the [country code](https://www.countrycode.org/) and the platform corresponding to those used by you in the app. Once configuration flow is completed, the devices configured in your app will be automatically discovered. During configuration, be careful to select the [country code](https://www.countrycode.org/) and the platform corresponding to those used by you in the app. Once configuration flow is completed, the devices configured in your app will be automatically discovered. Additionally, if your username or e-mail address isn't accepted, please try using your phone number (minus the country code) as your username.
## Integration Options ## Integration Options

View File

@ -188,7 +188,23 @@ zha:
You can choose if the IKEA or LEDVANCE provider should be set to enabled (`true`) or disabled (`false`) individually. After the OTA firmware upgrades are finished, you can set these to `false` again if you do not want ZHA to automatically download and perform OTA firmware upgrades in the future. You can choose if the IKEA or LEDVANCE provider should be set to enabled (`true`) or disabled (`false`) individually. After the OTA firmware upgrades are finished, you can set these to `false` again if you do not want ZHA to automatically download and perform OTA firmware upgrades in the future.
Note that the `otau_directory` setting is optional and can be used for any firmware files you have downloaded yourself. Note that the `otau_directory` setting is optional and can be used for any firmware files you have downloaded yourself, for any device type and manufacturer. For example, Philips Hue firmwares manually downloaded from [here](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/OTA-Image-Types---Firmware-versions) and/or [here](https://github.com/Koenkk/zigbee-OTA/blob/a02a4cb33f7c46b4d2916805bfcad582124ec975/index.json) added to the `otau_directory` can be flashed, although a manual `zha.issue_zigbee_cluster_command` command currently (as of 2021.3.3) must be issued against the IEEE of the Philips Hue device under Developer Tools->Services, e.g.:
```yaml
service: zha.issue_zigbee_cluster_command
data:
ieee: "xx:xx:xx:xx:xx:xx:xx:xx"
endpoint_id: 11
cluster_id: 25
cluster_type: out
command: 0
command_type: client
args:
- 0
- 100
```
Note: `cluster_id: 25` may also be `cluster_id: 0x0019`. The two are synonymous.
### Defining Zigbee channel to use ### Defining Zigbee channel to use

View File

@ -0,0 +1,16 @@
---
title: "AppArmor issues"
description: "More information on why missing AppArmor marks the installation as unsupported."
---
## The issue
AppArmor is how the Supervisor does handling all the security around add-ons,
without this, the Supervisor is missing important security mechanics to protect your system and data within it.
## The solution
If the AppArmor is not enabled on your host, set this to the Linux boot cmd: `apparmor=1 security=apparmor` and reboot your operating system.
As a last resort, you might need to reinstall the host running the Supervisor
with one of the supported operating systems, [see instructions here](/more-info/unsupported/os).