Merge branch 'current' into next

This commit is contained in:
Fabian Affolter 2019-04-25 23:12:39 +02:00
commit 559d18eaaa
No known key found for this signature in database
GPG Key ID: E23CD2DD36A4397F
20 changed files with 934 additions and 619 deletions

View File

@ -288,7 +288,7 @@ switch:
slot_4: 'Speaker slot'
```
### {% linkable_title Service `broadlink_send_packet` %}
### {% linkable_title Service `broadlink.send` %}
You can use the service `broadlink.send` to directly send IR packets without the need to assign a switch entity for each command.

View File

@ -0,0 +1,65 @@
---
layout: page
title: "Epson Printer"
description: "Instructions on how to integrate Epson Workforce Printer into Home Assistant."
date: 2019-04-09 16:00
sidebar: true
comments: false
sharing: true
footer: true
logo: epson.png
ha_category: Sensor
ha_release: 0.92
ha_iot_class: Local Polling
---
The `epson printer` platform allows you to monitor the ink levels of a Epson Workforce printer from Home
Assistant.
To add Epson Printer to your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
sensor:
- platform: epsonprinter
host: IP_ADDRESS
monitored_conditions:
- black
- yellow
- magenta
- cyan
- clean
```
{% configuration %}
host:
description: The host name or address of the Epson printer
required: true
type: string
monitored_conditions:
description: The cartridge colours to monitor.
required: true
type: map
keys:
black:
description: The black ink cartridge
yellow:
description: The yellow ink cartridge.
magenta:
description: The magenta (=red) ink cartridge.
cyan:
description: The cyan (=blue) ink cartridge.
clean:
description: The cleaning cartridge.
{% endconfiguration %}
Supported devices:
- Epson Workforce printers who publish a HTTP page containing the ink cardridge levels
Tested devices:
- Epson WF3540
To make this module work you need to connect your printer to your LAN.
The best is to navigate to the IP of the printer to check.

View File

@ -1,19 +1,31 @@
---
layout: page
title: "File"
description: "Instructions on how to add file notifications to Home Assistant."
description: "Instructions on how to integrate sensors which read from files into Home Assistant."
date: 2015-06-22 10:00
sidebar: true
comments: false
sharing: true
footer: true
logo: file.png
ha_category: Notifications
ha_category:
- Utility
- Notifications
- Sensor
ha_release: pre 0.7
ha_iot_class: Local Polling
redirect_from:
- /components/notify.file/
- /components/notify.file/
- /components/sensor.file/
---
There is currently support for the following device types within Home Assistant:
- [Notifications](#notifications)
- [Sensor](#sensor)
## {% linkable_title Notifications %}
The `file` platform allows you to store notifications from Home Assistant as a file.
To enable file notifications in your installation, add the following to your `configuration.yaml` file:
@ -44,3 +56,62 @@ timestamp:
{% endconfiguration %}
To use notifications, please see the [getting started with automation page](/getting-started/automation/).
## {% linkable_title Sensor %}
The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [whitelist_external_dirs](/docs/configuration/basic/).
To enable the `file` sensor, add the following lines to your `configuration.yaml`:
```yaml
# Example configuration.yaml entry
sensor:
- platform: file
file_path: /home/user/.homeassistant/sensor-data.txt
```
{% configuration %}
file_path:
description: Path to file that stores the sensor data.
required: true
type: string
name:
description: Name of the sensor to use in the frontend.
required: false
default: file name
type: string
unit_of_measurement:
description: Defines the units of measurement of the sensor, if any.
required: false
type: string
value_template:
description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload.
required: false
type: template
{% endconfiguration %}
### {% linkable_title Examples %}
In this section you find some real-life examples of how to use this sensor.
#### {% linkable_title Entries as JSON %}
Assuming that the log file contains multiple values formatted as JSON like shown below:
```text
[...]
{"temperature": 21, "humidity": 39}
{"temperature": 22, "humidity": 36}
```
This would require the following entry in the `configuration.yaml` file to extract the temperature:
```yaml
# Example configuration.yaml entry
sensor:
- platform: file
name: Temperature
file_path: /home/user/.homeassistant/sensor.json
value_template: {% raw %}'{{ value_json.temperature }}'{% endraw %}
unit_of_measurement: '°C'
```

View File

@ -69,7 +69,7 @@ ssl_key:
required: false
type: string
cors_allowed_origins:
description: "A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://www.home-assistant.io` will allow requests from `https://www.home-assistant.io` but __not__ `http://www.home-assistant.io`."
description: "A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, Authorization`. You must provide the exact Origin, i.e. `https://www.home-assistant.io` will allow requests from `https://www.home-assistant.io` but __not__ `http://www.home-assistant.io`."
required: false
type: string, list
use_x_forwarded_for:
@ -139,6 +139,8 @@ The `http` platforms are not real platforms within the meaning of the terminolog
To use those kind of [sensors](#sensor) or [binary sensors](#binary-sensor) in your installation no configuration in Home Assistant is needed. All configuration is done on the devices themselves. This means that you must be able to edit the target URL or endpoint and the payload. The entity will be created after the first message has arrived.
Create a [Long-Lived Access Tokens](https://developers.home-assistant.io/docs/en/auth_api.html#long-lived-access-token) in the Home Assistant UI at the bottom of your profile if you want to use HTTP sensors.
All [requests](/developers/rest_api/#post-apistatesltentity_id) need to be sent to the endpoint of the device and must be **POST**.
## {% linkable_title IP filtering and banning %}
@ -189,7 +191,7 @@ The JSON payload must contain the new state and can have a friendly name. The fr
For a quick test `curl` can be useful to "simulate" a device.
```bash
$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \
$ curl -X POST -H "Authorization: Bearer LONG_LIVED_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"state": "off", "attributes": {"friendly_name": "Radio"}}' \
http://localhost:8123/api/states/binary_sensor.radio
@ -198,7 +200,7 @@ $ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \
To check if the sensor is working, use again `curl` to retrieve the [current state](/developers/rest_api/#get-apistatesltentity_id).
```bash
$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \
$ curl -X GET -H "Authorization: Bearer LONG_LIVED_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8123/api/states/binary_sensor.radio
{
@ -223,7 +225,7 @@ As already shown on the [API](/developers/rest_api/) page, it's very simple to u
```python
response = requests.post(
'http://localhost:8123/api/states/binary_sensor.radio',
headers={'x-ha-access': 'YOUR_PASSWORD', 'content-type': 'application/json'},
headers={'Authorization': 'Bearer LONG_LIVED_ACCESS_TOKEN', 'content-type': 'application/json'},
data=json.dumps({'state': 'on', 'attributes': {'friendly_name': 'Radio'}}))
print(response.text)
```
@ -234,7 +236,7 @@ print(response.text)
```bash
$ http -v POST http://localhost:8123/api/states/binary_sensor.radio \
x-ha-access:YOUR_PASSWORD content-type:application/json state=off \
'Authorization:Bearer LONG_LIVED_ACCESS_TOKEN' content-type:application/json state=off \
attributes:='{"friendly_name": "Radio"}'
```
@ -263,7 +265,7 @@ You should choose a unique device name (DEVICE_NAME) to avoid clashes with other
For a quick test, `curl` can be useful to "simulate" a device.
```bash
$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \
$ curl -X POST -H "Authorization: Bearer LONG_LIVED_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"state": "20", "attributes": {"unit_of_measurement": "°C", "friendly_name": "Bathroom Temp"}}' \
http://localhost:8123/api/states/sensor.bathroom_temperature
@ -272,7 +274,7 @@ $ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \
You can then use `curl` again to retrieve the [current sensor state](/developers/rest_api/#get-apistatesltentity_id) and verify the sensor is working.
```bash
$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \
$ curl -X GET -H "Authorization: Bearer LONG_LIVED_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8123/api/states/sensor.bathroom_temperature
{
@ -287,4 +289,4 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \
}
```
For more examples please visit the [HTTP Binary Sensor](#examples) page.
For more examples please visit the [HTTP Binary Sensor](#examples) page.

View File

@ -1,24 +1,314 @@
---
layout: page
title: "Kodi"
description: "Instructions on how to add Kodi notifications to Home Assistant."
date: 2016-09-12 16:00
description: "Instructions on how to integrate Kodi into Home Assistant."
date: 2015-06-22 11:00
sidebar: true
comments: false
sharing: true
footer: true
logo: kodi.png
ha_category: Notifications
ha_release: 0.29
ha_category:
- Notifications
- Media Player
ha_release: pre 0.7
ha_iot_class: Local Push
redirect_from:
- /components/notify.kodi/
- /components/notify.kodi/
- /components/media_player.kodi/
---
The `kodi` platform allows you to control a [Kodi](http://kodi.tv/) multimedia system from Home Assistant.
The `kodi` platform allows you to send messages to your [Kodi](https://kodi.tv/) multimedia system from Home Assistant.
The preferred way to set up the Kodi platform is by enabling the [discovery component](/components/discovery/) which requires enabled [web interface](https://kodi.wiki/view/Web_interface) on your Kodi installation.
There is currently support for the following device types within Home Assistant:
- [Media Player](#configuration)
- [Notifications](#notifications)
## {% linkable_title Configuration %}
In case the discovery does not work, or you need specific configuration variables, you can add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
media_player:
- platform: kodi
host: IP_ADDRESS
```
{% configuration %}
host:
description: The host name or address of the device that is running XBMC/Kodi.
required: true
type: string
port:
description: The HTTP port number.
required: false
type: integer
default: 8080
tcp_port:
description: The TCP port number. Used for WebSocket connections to Kodi.
required: false
type: integer
default: 9090
name:
description: The name of the device used in the frontend.
required: false
type: string
proxy_ssl:
description: Connect to Kodi with HTTPS and WSS. Useful if Kodi is behind an SSL proxy.
required: false
type: boolean
default: false
username:
description: The XBMC/Kodi HTTP username.
required: false
type: string
password:
description: The XBMC/Kodi HTTP password.
required: false
type: string
turn_on_action:
description: Home Assistant script sequence to call when turning on.
required: false
type: list
turn_off_action:
description: Home Assistant script sequence to call when turning off.
required: false
type: list
enable_websocket:
description: Enable websocket connections to Kodi via the TCP port. The WebSocket connection allows Kodi to push updates to Home Assistant and removes the need for Home Assistant to poll. If websockets don't work on your installation this can be set to `false`.
required: false
type: boolean
default: true
timeout:
description: Set timeout for connections to Kodi. Defaults to 5 seconds.
required: false
type: integer
default: 5
{% endconfiguration %}
### {% linkable_title Services %}
#### {% linkable_title Service `kodi_add_to_playlist` %}
Add music to the default playlist (i.e. playlistid=0).
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | Name(s) of the Kodi entities where to add the media. |
| `media_type` | yes | Media type identifier. It must be one of SONG or ALBUM. |
| `media_id` | no | Unique Id of the media entry to add (`songid` or `albumid`). If not defined, `media_name` and `artist_name` are needed to search the Kodi music library. |
| `media_name` | no| Optional media name for filtering media. Can be 'ALL' when `media_type` is 'ALBUM' and `artist_name` is specified, to add all songs from one artist. |
| `artist_name` | no | Optional artist name for filtering media. |
#### {% linkable_title Service `media_player/kodi_set_shuffle` %}
| Service data attribute | Optional | Description |
|------------------------|----------|-------------|
| `entity_id` | yes | Target a specific media player. It must be of type kodi. |
| `shuffle_on` | no | True/false for shuffle on/off. |
#### {% linkable_title Service `kodi_call_method` %}
Call a [Kodi JSONRPC API](http://kodi.wiki/?title=JSON-RPC_API) method with optional parameters. Results of the Kodi API call will be redirected in a Home Assistant event: `kodi_call_method_result`.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | Name(s) of the Kodi entities where to run the API method. |
| `method` | yes | Name of the Kodi JSONRPC API method to be called. |
| any other parameter | no | Optional parameters for the Kodi API call. |
### {% linkable_title Event triggering %}
When calling the `kodi_call_method` service, if the Kodi JSONRPC API returns data, when received by Home Assistant it will fire a `kodi_call_method_result` event on the event bus with the following `event_data`:
```yaml
entity_id: "<Kodi media_player entity_id>"
result_ok: <boolean>
input: <input parameters of the service call>
result: <data received from the Kodi API>
```
### {% linkable_title Kodi turn on/off samples %}
With the `turn_on_action` and `turn_off_action` parameters you can run any combination of Home Assistant actions to turn on/off your Kodi instance. Here are a few examples of this usage, including the **migration instructions for the old `turn_off_action` list of options**.
#### Turn on Kodi with Wake on LAN
With this configuration, when calling `media_player/turn_on` on the Kodi device, a _magic packet_ will be sent to the specified MAC address. To use this service, first you need to config the [`wake_on_lan`](/components/wake_on_lan) component in Home Assistant, which is achieved simply by adding `wake_on_lan:` to your `configuration.yaml`.
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_on_action:
- service: wake_on_lan.send_magic_packet
data:
mac: aa:bb:cc:dd:ee:ff
broadcast_address: 192.168.255.255
```
#### Turn off Kodi with API calls
Here are the equivalent ways to configure each of the old options to turn off Kodi (`quit`, `hibernate`, `suspend`, `reboot`, or `shutdown`):
- **Quit** method (before was `turn_off_action: quit`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: Application.Quit
```
- **Hibernate** method (before was `turn_off_action: hibernate`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: System.Hibernate
```
- **Suspend** method (before was `turn_off_action: suspend`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: System.Suspend
```
- **Reboot** method (before was `turn_off_action: reboot`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: System.Reboot
```
- **Shutdown** method (before was `turn_off_action: shutdown`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: System.Shutdown
```
#### Turn on and off the TV with the Kodi JSON-CEC Add-on
For Kodi devices running 24/7 attached to a CEC capable TV (OSMC / OpenElec and systems alike running in Rasperry Pi's, for example), this configuration enables the optimal way to turn on/off the attached TV from Home Assistant while Kodi is always active and ready:
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_on_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: Addons.ExecuteAddon
addonid: script.json-cec
params:
command: activate
turn_off_action:
- service: media_player.media_stop
data:
entity_id: media_player.kodi
- service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: Addons.ExecuteAddon
addonid: script.json-cec
params:
command: standby
```
<p class='note'>
This example and the following requires to have the [script.json-cec](https://github.com/joshjowen/script.json-cec) plugin installed on your kodi player. It'll also expose the endpoints standby, toggle and activate without authentication on your kodi player. Use this with caution.
</p>
### {% linkable_title Kodi services samples %}
#### Simple script to turn on the PVR in some channel as a time function
{% raw %}
```yaml
script:
play_kodi_pvr:
alias: Turn on the silly box
sequence:
- alias: TV on
service: media_player.turn_on
data:
entity_id: media_player.kodi
- alias: Play TV channel
service: media_player.play_media
data_template:
entity_id: media_player.kodi
media_content_type: "CHANNEL"
media_content_id: >
{% if (now().hour < 14) or ((now().hour == 14) and (now().minute < 50)) %}
10
{% elif (now().hour < 16) %}
15
{% elif (now().hour < 20) %}
2
{% elif (now().hour == 20) and (now().minute < 50) %}
10
{% elif (now().hour == 20) or ((now().hour == 21) and (now().minute < 15)) %}
15
{% else %}
10
{% endif %}
```
{% endraw %}
#### Trigger a Kodi video library update
```yaml
script:
update_library:
alias: Update Kodi Library
sequence:
- alias: Call Kodi update
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: VideoLibrary.Scan
```
For a more complex usage of the `kodi_call_method` service, with event triggering of Kodi API results, you can have a look at this [example](/cookbook/automation_kodi_dynamic_input_select/)
## {% linkable_title Notifications %}
The `kodi` notifications platform allows you to send messages to your [Kodi](https://kodi.tv/) multimedia system from Home Assistant.
To add Kodi to your installation, add the following to your `configuration.yaml` file:
```yaml
@ -26,15 +316,37 @@ To add Kodi to your installation, add the following to your `configuration.yaml`
notify:
- platform: kodi
name: NOTIFIER_NAME
host: 192.168.0.123
host: IP_ADDRESS
```
- **name** (*Optional*): Name displayed in the frontend. The notifier will bind to the service `notify.NOTIFIER_NAME`.
- **host** (*Required*): The host name or address of the device that is running Kodi.
- **port** (*Optional*): The HTTP port number. Defaults to 8080.
- **proxy_ssl** (*Optional*): Connect to kodi with HTTPS. Defaults to `false`. Useful if Kodi is behind an SSL proxy.
- **username** (*Optional*): The XBMC/Kodi HTTP username.
- **password** (*Optional*): The XBMC/Kodi HTTP password.
{% configuration %}
name:
description: Name displayed in the frontend. The notifier will bind to the service `notify.NOTIFIER_NAME`.
required: false
type: string
host:
description: The host name or address of the device that is running Kodi.
required: true
type: string
port:
description: The HTTP port number.
required: false
default: 8080
type: integer
proxy_ssl:
description: Connect to kodi with HTTPS. Useful if Kodi is behind an SSL proxy.
required: false
default: "`false`"
type: boolean
username:
description: The XBMC/Kodi HTTP username.
required: false
type: string
password:
description: The XBMC/Kodi HTTP password.
required: false
type: string
{% endconfiguration %}
### {% linkable_title Script example %}
@ -52,11 +364,29 @@ kodi_notification:
#### {% linkable_title Message variables %}
- **title** (*Optional*): Title that is displayed on the message.
- **message** (*Required*): Message to be displayed.
- **data** (*Optional*)
- **icon** (*Optional*): Kodi comes with 3 default icons: `info`, `warning` and `error`, an URL to an image is also valid. *Defaults to `info`*
- **displaytime** (*Optional*): Length in milliseconds the message stays on screen. *Defaults to `10000` ms*
To use notifications, please see the [getting started with automation page](/getting-started/automation/).
{% configuration %}
title:
description: Title that is displayed on the message.
required: false
type: string
message:
description: Message to be displayed.
required: true
type: string
data:
required: false
type: map
keys:
icon:
description: "Kodi comes with 3 default icons: `info`, `warning` and `error`, an URL to an image is also valid."
required: false
default: "`info`"
type: string
displaytime:
description: Length in milliseconds the message stays on screen.
required: false
default: "`10000` ms"
type: integer
{% endconfiguration %}
To use notifications, please see the [getting started with automation page](/getting-started/automation/).

View File

@ -10,6 +10,7 @@ footer: true
logo: lcn.png
ha_category:
- Hub
- Binary Sensor
- Cover
- Light
- Sensor
@ -29,7 +30,7 @@ With this setup sending and receiving commands to and from LCN modules is possib
There is currently support for the following device types within Home Assistant:
- [Binary Sensor](#binary_sensor)
- [Binary Sensor](#binary-sensor)
- [Cover](#cover)
- [Light](#light)
- [Sensor](#sensor)

View File

@ -1,298 +0,0 @@
---
layout: page
title: "Kodi"
description: "Instructions on how to integrate Kodi into Home Assistant."
date: 2015-06-22 11:00
sidebar: true
comments: false
sharing: true
footer: true
logo: kodi.png
ha_category: Media Player
featured: true
ha_release: pre 0.7
ha_iot_class: Local Push
---
The `kodi` platform allows you to control a [Kodi](http://kodi.tv/) multimedia system from Home Assistant.
The preferred way to set up the Kodi platform is by enabling the [discovery component](/components/discovery/) which requires enabled [web interface](https://kodi.wiki/view/Web_interface) on your Kodi installation.
## {% linkable_title Configuration %}
In case the discovery does not work, or you need specific configuration variables, you can add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
media_player:
- platform: kodi
host: 192.168.0.123
```
{% configuration %}
host:
description: The host name or address of the device that is running XBMC/Kodi.
required: true
type: string
port:
description: The HTTP port number.
required: false
type: integer
default: 8080
tcp_port:
description: The TCP port number. Used for WebSocket connections to Kodi.
required: false
type: integer
default: 9090
name:
description: The name of the device used in the frontend.
required: false
type: string
proxy_ssl:
description: Connect to Kodi with HTTPS and WSS. Useful if Kodi is behind an SSL proxy.
required: false
type: boolean
default: false
username:
description: The XBMC/Kodi HTTP username.
required: false
type: string
password:
description: The XBMC/Kodi HTTP password.
required: false
type: string
turn_on_action:
description: Home Assistant script sequence to call when turning on.
required: false
type: list
turn_off_action:
description: Home Assistant script sequence to call when turning off.
required: false
type: list
enable_websocket:
description: Enable websocket connections to Kodi via the TCP port. The WebSocket connection allows Kodi to push updates to Home Assistant and removes the need for Home Assistant to poll. If websockets don't work on your installation this can be set to `false`.
required: false
type: boolean
default: true
timeout:
description: Set timeout for connections to Kodi. Defaults to 5 seconds.
required: false
type: integer
default: 5
{% endconfiguration %}
## {% linkable_title Services %}
### {% linkable_title Service `kodi_add_to_playlist` %}
Add music to the default playlist (i.e. playlistid=0).
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | Name(s) of the Kodi entities where to add the media. |
| `media_type` | yes | Media type identifier. It must be one of SONG or ALBUM. |
| `media_id` | no | Unique Id of the media entry to add (`songid` or `albumid`). If not defined, `media_name` and `artist_name` are needed to search the Kodi music library. |
| `media_name` | no| Optional media name for filtering media. Can be 'ALL' when `media_type` is 'ALBUM' and `artist_name` is specified, to add all songs from one artist. |
| `artist_name` | no | Optional artist name for filtering media. |
#### {% linkable_title Service `media_player/kodi_set_shuffle` %}
| Service data attribute | Optional | Description |
|------------------------|----------|-------------|
| `entity_id` | yes | Target a specific media player. It must be of type kodi. |
| `shuffle_on` | no | True/false for shuffle on/off. |
### {% linkable_title Service `kodi_call_method` %}
Call a [Kodi JSONRPC API](http://kodi.wiki/?title=JSON-RPC_API) method with optional parameters. Results of the Kodi API call will be redirected in a Home Assistant event: `kodi_call_method_result`.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | Name(s) of the Kodi entities where to run the API method. |
| `method` | yes | Name of the Kodi JSONRPC API method to be called. |
| any other parameter | no | Optional parameters for the Kodi API call. |
### {% linkable_title Event triggering %}
When calling the `kodi_call_method` service, if the Kodi JSONRPC API returns data, when received by Home Assistant it will fire a `kodi_call_method_result` event on the event bus with the following `event_data`:
```yaml
entity_id: "<Kodi media_player entity_id>"
result_ok: <boolean>
input: <input parameters of the service call>
result: <data received from the Kodi API>
```
### {% linkable_title Kodi turn on/off samples %}
With the `turn_on_action` and `turn_off_action` parameters you can run any combination of Home Assistant actions to turn on/off your Kodi instance. Here are a few examples of this usage, including the **migration instructions for the old `turn_off_action` list of options**.
#### Turn on Kodi with Wake on LAN
With this configuration, when calling `media_player/turn_on` on the Kodi device, a _magic packet_ will be sent to the specified MAC address. To use this service, first you need to config the [`wake_on_lan`](/components/wake_on_lan) component in Home Assistant, which is achieved simply by adding `wake_on_lan:` to your `configuration.yaml`.
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_on_action:
- service: wake_on_lan.send_magic_packet
data:
mac: aa:bb:cc:dd:ee:ff
broadcast_address: 192.168.255.255
```
#### Turn off Kodi with API calls
Here are the equivalent ways to configure each of the old options to turn off Kodi (`quit`, `hibernate`, `suspend`, `reboot`, or `shutdown`):
- **Quit** method (before was `turn_off_action: quit`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: Application.Quit
```
- **Hibernate** method (before was `turn_off_action: hibernate`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: System.Hibernate
```
- **Suspend** method (before was `turn_off_action: suspend`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: System.Suspend
```
- **Reboot** method (before was `turn_off_action: reboot`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: System.Reboot
```
- **Shutdown** method (before was `turn_off_action: shutdown`)
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_off_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: System.Shutdown
```
#### Turn on and off the TV with the Kodi JSON-CEC Add-on
For Kodi devices running 24/7 attached to a CEC capable TV (OSMC / OpenElec and systems alike running in Rasperry Pi's, for example), this configuration enables the optimal way to turn on/off the attached TV from Home Assistant while Kodi is always active and ready:
```yaml
media_player:
- platform: kodi
host: 192.168.0.123
turn_on_action:
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: Addons.ExecuteAddon
addonid: script.json-cec
params:
command: activate
turn_off_action:
- service: media_player.media_stop
data:
entity_id: media_player.kodi
- service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: Addons.ExecuteAddon
addonid: script.json-cec
params:
command: standby
```
<p class='note'>
This example and the following requires to have the [script.json-cec](https://github.com/joshjowen/script.json-cec) plugin installed on your kodi player. It'll also expose the endpoints standby, toggle and activate without authentication on your kodi player. Use this with caution.
</p>
### {% linkable_title Kodi services samples %}
#### Simple script to turn on the PVR in some channel as a time function
{% raw %}
```yaml
script:
play_kodi_pvr:
alias: Turn on the silly box
sequence:
- alias: TV on
service: media_player.turn_on
data:
entity_id: media_player.kodi
- alias: Play TV channel
service: media_player.play_media
data_template:
entity_id: media_player.kodi
media_content_type: "CHANNEL"
media_content_id: >
{% if (now().hour < 14) or ((now().hour == 14) and (now().minute < 50)) %}
10
{% elif (now().hour < 16) %}
15
{% elif (now().hour < 20) %}
2
{% elif (now().hour == 20) and (now().minute < 50) %}
10
{% elif (now().hour == 20) or ((now().hour == 21) and (now().minute < 15)) %}
15
{% else %}
10
{% endif %}
```
{% endraw %}
#### Trigger a Kodi video library update
```yaml
script:
update_library:
alias: Update Kodi Library
sequence:
- alias: Call Kodi update
service: media_player.kodi_call_method
data:
entity_id: media_player.kodi
method: VideoLibrary.Scan
```
For a more complex usage of the `kodi_call_method` service, with event triggering of Kodi API results, you can have a look at this [example](/cookbook/automation_kodi_dynamic_input_select/)

View File

@ -8,18 +8,26 @@ comments: false
sharing: true
footer: true
logo: plex.png
ha_category: Media Player
ha_category:
- Media Player
- Sensor
featured: true
ha_release: 0.7.4
ha_iot_class: Local Polling
redirect_from:
- /components/media_player.plex/
- /components/media_player.plex/
- /components/sensor.plex/
---
The `plex` platform allows you to connect to a [Plex Media Server](https://plex.tv). Once connected, [Plex Clients](https://www.plex.tv/apps-devices/) playing media from the connected Plex Media Server will show up as [Media Players](/components/media_player/) in Home Assistant. It will allow you to control media playback and see the current playing item.
## {% linkable_title Setup %}
There is currently support for the following device types within Home Assistant:
- [Media Player](#setup---media-player)
- [Sensor](#sensor)
## {% linkable_title Setup - Media Player %}
The preferred way to setup the Plex platform is by enabling the [discovery component](/components/discovery/) which requires GDM enabled on your Plex server. This can be found on your Plex Web App under Settings > (server Name) > settings > Network and choose "Enable local network discovery (GDM)".
@ -51,13 +59,33 @@ In the event that [discovery](/components/discovery/) does not work (GDM disable
{"IP_ADDRESS:PORT": {"token": "TOKEN", "ssl": false, "verify": true}}
```
- **IP_ADDRESS** (*Required*): IP address of the Plex Media Server.
- **PORT** (*Required*): Port where Plex is listening. Default is 32400.
- **TOKEN** (*Optional*): Only if authentication is required. Set to `null` (without quotes) otherwise.
- **ssl** (*Optional*): Whether to use SSL/TLS or not. Defaults to `false` if not present.
- **verify** (*Optional*): Perform a verification of the certificate. To allow invalid or self-signed SSL certificates set it to `false`. Defaults to `true` if not present.
{% configuration %}
IP_ADDRESS:
description: IP address of the Plex Media Server.
required: true
type: string
PORT:
description: Port where Plex is listening.
required: true
default: 32400
type: integer
TOKEN:
description: Only if authentication is required. Set to `null` (without quotes) otherwise.
required: false
type: string
ssl:
description: Whether to use SSL/TLS or not.
required: false
default: "`false`"
type: boolean
verify:
description: Perform a verification of the certificate. To allow invalid or self-signed SSL certificates set it to `false`.
required: false
default: "`true`"
type: boolean
{% endconfiguration %}
## {% linkable_title Customization %}
### {% linkable_title Customization %}
You can customize the Plex component by adding any of the variables below to your configuration:
@ -178,3 +206,63 @@ Plays a song, playlist, TV episode, or video on a connected client.
If this occurs, check the setting `Server`>`Network`>`Secure connections` on your Plex Media Server: if it is set to `Preferred` or `Required`, you may need to manually set the `ssl` and `verify` booleans in the `plex.conf` file to, respectively, `true` and `false`. See the **"Setup"** section above for details.
* Movies must be located under 'Movies' section in the Plex library to properly get 'playing' state.
## {% linkable_title Sensor %}
The `plex` sensor platform will monitor activity on a given [Plex Media Server](https://plex.tv/). It will create a sensor that shows the number of currently watching users as the state. If you click the sensor for more details it will show you who is watching what.
If your Plex server is on the same local network as Home Assistant, all you need to provide in the `configuration.yaml` is the host or IP address. If you want to access a remote Plex server, you must provide the Plex username, password, and optionally the server name of the remote Plex server. If no server name is given it will use the first server listed. If you use the username and password, all servers in that account are monitored.
If you don't know your token, see [Finding your account token / X-Plex-Token](https://support.plex.tv/hc/en-us/articles/204059436).
If you want to enable the plex sensor, add the following lines to your `configuration.yaml`:
```yaml
# Example configuration.yaml entry
sensor:
- platform: plex
```
{% configuration %}
host:
description: The IP address of your Plex server.
required: false
default: localhost
type: string
port:
description: The port of your Plex Server.
required: false
default: 32400
type: integer
name:
description: Name of the Plex server.
required: false
default: Plex
type: string
username:
description: The username for the remote Plex server.
required: false
type: string
password:
description: The password for your given account on the remote Plex server.
required: false
type: string
server:
description: The name of your remote Plex server.
required: false
type: string
token:
description: X-Plex-Token of your remote Plex server.
required: false
type: string
ssl:
description: Use HTTPS to connect to Plex server, **NOTE:** host **must not** be an IP when this option is enabled.
required: false
default: false
type: boolean
verify_ssl:
description: Verify the SSL certificate of your Plex server. You may need to disable this check if your local server enforces secure connections with the default certificate.
required: false
default: true
type: boolean
{% endconfiguration %}

View File

@ -1,73 +0,0 @@
---
layout: page
title: "File Sensor"
description: "Instructions on how to integrate sensors which read from files into Home Assistant."
date: 2017-05-13 12:10
sidebar: true
comments: false
sharing: true
footer: true
logo: file.png
ha_category: Utility
ha_iot_class: Local Polling
ha_release: 0.45
---
The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [whitelist_external_dirs](/docs/configuration/basic/).
## {% linkable_title Configuration %}
To enable the `file` sensor, add the following lines to your `configuration.yaml`:
```yaml
# Example configuration.yaml entry
sensor:
- platform: file
file_path: /home/user/.homeassistant/sensor-data.txt
```
{% configuration %}
file_path:
description: Path to file that stores the sensor data.
required: true
type: string
name:
description: Name of the sensor to use in the frontend.
required: false
default: file name
type: string
unit_of_measurement:
description: Defines the units of measurement of the sensor, if any.
required: false
type: string
value_template:
description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload.
required: false
type: template
{% endconfiguration %}
## {% linkable_title Examples %}
In this section you find some real-life examples of how to use this sensor.
### {% linkable_title Entries as JSON %}
Assuming that the log file contains multiple values formatted as JSON like shown below:
```text
[...]
{"temperature": 21, "humidity": 39}
{"temperature": 22, "humidity": 36}
```
This would require the following entry in the `configuration.yaml` file to extract the temperature:
```yaml
# Example configuration.yaml entry
sensor:
- platform: file
name: Temperature
file_path: /home/user/.homeassistant/sensor.json
value_template: {% raw %}'{{ value_json.temperature }}'{% endraw %}
unit_of_measurement: '°C'
```

View File

@ -1,72 +0,0 @@
---
layout: page
title: "Plex Activity Monitor"
description: "How to add a Plex sensor to Home Assistant."
date: 2016-06-3 08:19
sidebar: true
comments: false
sharing: true
footer: true
logo: plex.png
ha_category: Media Player
ha_release: 0.22
ha_iot_class: Local Polling
---
The `plex` sensor platform will monitor activity on a given [Plex Media Server](https://plex.tv/). It will create a sensor that shows the number of currently watching users as the state. If you click the sensor for more details it will show you who is watching what.
If your Plex server is on the same local network as Home Assistant, all you need to provide in the `configuration.yaml` is the host or IP address. If you want to access a remote Plex server, you must provide the Plex username, password, and optionally the server name of the remote Plex server. If no server name is given it will use the first server listed. If you use the username and password, all servers in that account are monitored.
If you don't know your token, see [Finding your account token / X-Plex-Token](https://support.plex.tv/hc/en-us/articles/204059436).
If you want to enable the plex sensor, add the following lines to your `configuration.yaml`:
```yaml
# Example configuration.yaml entry
sensor:
- platform: plex
```
{% configuration %}
host:
description: The IP address of your Plex server.
required: false
default: localhost
type: string
port:
description: The port of your Plex Server.
required: false
default: 32400
type: integer
name:
description: Name of the Plex server.
required: false
default: Plex
type: string
username:
description: The username for the remote Plex server.
required: false
type: string
password:
description: The password for your given account on the remote Plex server.
required: false
type: string
server:
description: The name of your remote Plex server.
required: false
type: string
token:
description: X-Plex-Token of your remote Plex server.
required: false
type: string
ssl:
description: Use HTTPS to connect to Plex server, **NOTE:** host **must not** be an IP when this option is enabled.
required: false
default: false
type: boolean
verify_ssl:
description: Verify the SSL certificate of your Plex server. You may need to disable this check if your local server enforces secure connections with the default certificate.
required: false
default: true
type: boolean
{% endconfiguration %}

View File

@ -1,102 +0,0 @@
---
layout: page
title: TCP Sensor
description: "Instructions on how to set up TCP sensors within Home Assistant."
date: 2016-02-22 10:03
sidebar: true
comments: false
sharing: true
footer: true
logo: tcp_ip.png
ha_category: Sensor
ha_release: 0.14
ha_iot_class: Local Polling
---
The TCP component allows the integration of some services for which a specific Home Assistant component does not exist. If the service communicates over a TCP socket with a simple request/reply mechanism then the chances are that this component will allow integration with it.
## {% linkable_title Configuration %}
To enable this sensor, add the following lines to your `configuration.yaml`:
```yaml
# Example configuration.yaml entry
sensor:
- platform: tcp
host: IP_ADDRESS
port: PORT
payload: PAYLOAD
```
Configuration options for the a TCP Sensor:
- **name** (*Required*): The name you'd like to give the sensor in Home Assistant.
- **host** (*Required*): The hostname/IP address to connect to.
- **port** (*Required*): The port to connect to the host on.
- **payload** (*Required*): What to send to the host in order to get the response we're interested in.
- **timeout** (*Optional*): How long in seconds to wait for a response from the service before giving up and disconnecting. Defaults to `10`
- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value. By default it's assumed that the entire response is the value.
- **unit_of_measurement** (*Optional*): The unit of measurement to use for the value.
- **buffer_size** (*Optional*): The size of the receive buffer in bytes. Set this to a larger value if you expect to receive a response larger than the default. Defaults to `1024`.
## {% linkable_title Examples %}
In this section you find some real-life examples of how to use this sensor.
### {% linkable_title EBUSd %}
The [EBUSd](https://github.com/john30/ebusd/wiki) service enables connection to an EBUS serial bus on some home heating/cooling systems. Using this service it is possible to extract various metrics which may be useful to have within Home Assistant. In order to use EBUSd, you connect to it using a TCP socket and send it a command. The service will respond with the value it has received from EBUS. On the command line, this would look something like:
```bash
$ echo "r WaterPressure" | nc 10.0.0.127 8888
0.903;ok
```
You will notice that the output from the service is not just a single value (it contains ";ok" as well). To grab the value we're interested in, we can use a Jinja2 template. The response received is injected into the template as the `value` variable. To use this value within Home Assistant, use the following configuration:
```yaml
sensor:
# Example configuration.yaml entry
- platform: tcp
name: Central Heating Pressure
host: 10.0.0.127
port: 8888
timeout: 5
payload: "r WaterPressure\n"
value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}"
unit_of_measurement: Bar
```
### {% linkable_title hddtemp %}
The tool `hddtemp` collects the temperature of your hard disks.
```bash
$ hddtemp
/dev/sda: SAMSUNG MZMTE256HMHP-000L1: 39°C
```
With `hddtemp -d` you can run the tool in TCP/IP daemon mode on port 7634 which enables you to get the data across the network.
```bash
$ telnet localhost 7634
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
|/dev/sda|SAMSUNG MZMTE256HMHP-000L1|38|C|Connection closed by foreign host.
```
The entry for the `configuration.yaml` file for a `hddtemp` sensor could look like the example below.
```yaml
sensor:
# Example configuration.yaml entry
- platform: tcp
name: HDD temperature
host: 127.0.0.1
port: 7634
timeout: 5
payload: "\n"
value_template: "{% raw %}{{ value.split('|')[3] }}{% endraw %}"
unit_of_measurement: "°C"
```

View File

@ -1,22 +1,145 @@
---
layout: page
title: TCP Binary Sensor
description: "Instructions on how to set up TCP binary sensors within Home Assistant."
description: "Instructions on how to set up TCP within Home Assistant."
date: 2016-02-22 11:05
sidebar: true
comments: false
sharing: true
footer: true
logo: tcp_ip.png
ha_category: Binary Sensor
ha_category:
- Binary Sensor
- Sensor
ha_release: 0.14
ha_iot_class: Local Polling
redirect_from:
- /components/binary_sensor.tcp/
- /components/binary_sensor.tcp/
- /components/sensor.tcp/
---
The TCP Binary Sensor is a type of [TCP Sensor](/components/sensor.tcp/) which is either "off" or "on". In order to use this sensor type, in addition to the configuration for the TCP Sensor, you must supply a `value_on` value to represent what is returned when the device is turned on.
The TCP component allows the integration of some services for which a specific Home Assistant component does not exist. If the service communicates over a TCP socket with a simple request/reply mechanism then the chances are that this component will allow integration with it.
## {% linkable_title Configuration %}
There is currently support for the following device types within Home Assistant:
- [Binary Sensor](#binary-sensor)
- [Sensor](#sensor)
## {% linkable_title Sensor %}
To enable the TCP sensor, add the following lines to your `configuration.yaml`:
```yaml
# Example configuration.yaml entry
sensor:
- platform: tcp
host: IP_ADDRESS
port: PORT
payload: PAYLOAD
```
{% configuration %}
name:
description: The name you'd like to give the sensor in Home Assistant.
required: false
type: string
host:
description: The hostname/IP address to connect to.
required: true
type: string
port:
description: The port to connect to the host on.
required: true
type: integer
payload:
description: What to send to the host in order to get the response we're interested in.
required: true
type: string
timeout:
description: How long in seconds to wait for a response from the service before giving up and disconnecting.
required: false
default: 10
type: integer
value_template:
description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value. By default it's assumed that the entire response is the value.
required: false
type: template
unit_of_measurement:
description: The unit of measurement to use for the value.
required: false
type: string
buffer_size:
description: The size of the receive buffer in bytes. Set this to a larger value if you expect to receive a response larger than the default.
required: false
default: "`1024`"
type: integer
{% endconfiguration %}
### {% linkable_title Examples %}
In this section you find some real-life examples of how to use this sensor.
#### {% linkable_title EBUSd %}
The [EBUSd](https://github.com/john30/ebusd/wiki) service enables connection to an EBUS serial bus on some home heating/cooling systems. Using this service it is possible to extract various metrics which may be useful to have within Home Assistant. In order to use EBUSd, you connect to it using a TCP socket and send it a command. The service will respond with the value it has received from EBUS. On the command line, this would look something like:
```bash
$ echo "r WaterPressure" | nc 10.0.0.127 8888
0.903;ok
```
You will notice that the output from the service is not just a single value (it contains ";ok" as well). To grab the value we're interested in, we can use a Jinja2 template. The response received is injected into the template as the `value` variable. To use this value within Home Assistant, use the following configuration:
```yaml
sensor:
# Example configuration.yaml entry
- platform: tcp
name: Central Heating Pressure
host: 10.0.0.127
port: 8888
timeout: 5
payload: "r WaterPressure\n"
value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}"
unit_of_measurement: Bar
```
#### {% linkable_title hddtemp %}
The tool `hddtemp` collects the temperature of your hard disks.
```bash
$ hddtemp
/dev/sda: SAMSUNG MZMTE256HMHP-000L1: 39°C
```
With `hddtemp -d` you can run the tool in TCP/IP daemon mode on port 7634 which enables you to get the data across the network.
```bash
$ telnet localhost 7634
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
|/dev/sda|SAMSUNG MZMTE256HMHP-000L1|38|C|Connection closed by foreign host.
```
The entry for the `configuration.yaml` file for a `hddtemp` sensor could look like the example below.
```yaml
sensor:
# Example configuration.yaml entry
- platform: tcp
name: HDD temperature
host: 127.0.0.1
port: 7634
timeout: 5
payload: "\n"
value_template: "{% raw %}{{ value.split('|')[3] }}{% endraw %}"
unit_of_measurement: "°C"
```
## {% linkable_title Binary Sensor %}
The TCP Binary Sensor is a type of [TCP Sensor](#sensor) which is either "off" or "on". In order to use this sensor type, in addition to the configuration for the TCP Sensor, you must supply a `value_on` value to represent what is returned when the device is turned on.
To enable this sensor, add the following lines to your `configuration.yaml`:
@ -24,12 +147,10 @@ To enable this sensor, add the following lines to your `configuration.yaml`:
# Example configuration.yaml entry
binary_sensor:
- platform: tcp
name: TCP Binary Sensor
host: IP_ADDRESS
port: PORT
payload: "r State\n"
payload: PAYLOAD
value_on: 1
timeout: 5
```
{% configuration %}
@ -69,4 +190,4 @@ timeout:
required: false
type: integer
default: 10
{% endconfiguration %}
{% endconfiguration %}

View File

@ -19,7 +19,7 @@ To get started, add the following lines to your `configuration.yaml` (example fo
```yaml
# Example configuration.yaml entry for Google TTS service
tts:
- platform: google
- platform: google_translate
```
<p class='note'>
@ -56,7 +56,7 @@ The extended example from above would look like the following sample:
```yaml
# Example configuration.yaml entry for Google TTS service
tts:
- platform: google
- platform: google_translate
cache: true
cache_dir: /tmp/tts
time_memory: 300
@ -96,8 +96,8 @@ The `say` service support `language` and on some platforms also `options` for se
Say to all `media_player` device entities:
```yaml
# Replace google_say with <platform>_say when you use a different platform.
service: tts.google_say
# Replace google_translate_say with <platform>_say when you use a different platform.
service: tts.google_translate_say
entity_id: "all"
data:
message: 'May the Force be with you.'
@ -106,7 +106,7 @@ data:
Say to the `media_player.floor` device entity:
```yaml
service: tts.google_say
service: tts.google_translate_say
entity_id: media_player.floor
data:
message: 'May the Force be with you.'
@ -115,7 +115,7 @@ data:
Say to the `media_player.floor` device entity in French:
```yaml
service: tts.google_say
service: tts.google_translate_say
entity_id: media_player.floor
data:
message: 'Que la force soit avec toi.'
@ -125,7 +125,7 @@ data:
With a template:
```yaml
service: tts.google_say
service: tts.google_translate_say
data_template:
message: "Temperature is {% raw %}{{states('sensor.temperature')}}{% endraw %}."
cache: false

View File

@ -10,4 +10,4 @@ footer: true
redirect_from: /ecosystem/notebooks/api/
---
You can interact with Home Assistant live from Jupyter notebooks by using the Home Assistant [Python API](/developers/python_api/). [See this example notebook](http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/blob/master/home-assistant-python-api.ipynb).
Python API is deprecated.

View File

@ -59,7 +59,7 @@ mqtt:
### {% linkable_title Run your own %}
Along with the embedded broker this is the most private option, but it requires a bit more work. There are multiple free and open-source brokers to pick from: e.g., [Mosquitto](http://mosquitto.org/), [EMQ](http://emqtt.io/), or [Mosca](http://www.mosca.io/).
Along with the embedded broker this is the most private option, but it requires a bit more work. There are multiple free and open-source brokers to pick from: e.g., [Mosquitto](http://mosquitto.org/), [EMQ](https://github.com/emqx/emqx) or [Mosca](http://www.mosca.io/).
```yaml
# Example configuration.yaml entry

View File

@ -21,22 +21,12 @@ What time is it? Yep, t-shirt time. Today we're launching the first two Home Ass
- [Visit the 🇺🇸 US store][store-us]
- [Visit the 🇪🇺 EU store][store-eu]
<a href='https://www.eff.org'><img src='/images/supported_brands/eff.png' style='width: 150px; float: right; box-shadow: none; border: 0; margin-left: 15px;' /></a>
And because we love the internet and all the things that it has brought us, **we will start with having 100% of the profit from the sales be donated to the [Electronic Frontier Foundation][eff]**. If you buy a shirt you will hit two birds with one stone (figuratively): you get to wear a kick-ass Home Assistant t-shirt and you help fund defending civil liberties in the digital world.
The EFF is a nonprofit organization that aims to protect the rights of technology users. You might however be more familiar with one of their projects: [Let's Encrypt][le]. [Read more about what the EFF does.][eff-issues]
So, what are you waiting for? Get yourself a shirt! [🇪🇺 EU store][store-eu] [🇺🇸 US store][store-us]
<p class='img'>
<img src='/images/blog/2017-02-shirts/family.png' />
Family of 4 on a bench wearing the new black Home Assistant shirt. [🇪🇺 EU][black-eu] [🇺🇸 US][black-us]
</p>
We are using [Teespring.com][ts] to manage all the sales, production and distribution of the shirts and they will also donate our profits to the EFF. It's also how we got all these amazing stockphotos. Some extra things to note about our teespring shop:
- Teespring shows that there is a number of days left until the end of the campaign for the shirts. Don't worry about that, it should automatically relaunch.
We are using [Teespring.com][ts] to manage all the sales, production and distribution of the shirts. It's also how we got all these amazing stockphotos.
More photos after the click.
<!--more-->

View File

@ -1,7 +1,7 @@
---
layout: post
title: "0.92: HEOS, Somfy MyLink, Genius Hub"
description: "Get your whole home audio "
description: "With 0.92, get your whole home auto game on with the new HEOS integration while controlling your covers with Somfy."
date: 2019-04-24 00:11:03
date_formatted: "April 24, 2019"
author: Paulus Schoutsen
@ -19,6 +19,9 @@ It's time for the 0.92 release. We took a week extra for this release, because w
This release continues to improve on our new camera streaming feature released with Home Assistant 0.90. This release adds support to Lovelace to show camera streams as part of your cards. Support has been aded to picture glance, picture entity and picture element cards. Just add `camera_view: live` to the configuration. Be careful showing live streams on mobile, camera streams can use a lot of data. We are exploring being able to add a mode to only show the streams on desktop.
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Home Assistant continues to grow their streaming component. Live camera feeds right in the cards! Say Good Morning to Chewy and Avie! <a href="https://twitter.com/hashtag/homeassistant?src=hash&amp;ref_src=twsrc%5Etfw">#homeassistant</a> <a href="https://twitter.com/hashtag/guineapigs?src=hash&amp;ref_src=twsrc%5Etfw">#guineapigs</a> <a href="https://twitter.com/hashtag/peoplelikethegridviewbetter?src=hash&amp;ref_src=twsrc%5Etfw">#peoplelikethegridviewbetter</a> <a href="https://t.co/Qu4pmOzt4M">pic.twitter.com/Qu4pmOzt4M</a></p>&mdash; kevank (@kevank) <a href="https://twitter.com/kevank/status/1121413437148618752?ref_src=twsrc%5Etfw">April 25, 2019</a>
</blockquote>
## {% linkable_title HEOS integration %}
The HEOS integration adds support for HEOS capable products, such as speakers, amps, and receivers (Denon and Marantz) into Home Assistant. The features include controlling players, viewing playing media info, selecting the source from physical inputs and HEOS favorites, and more. We have established a relationship with the lead architect for the HEOS API and look forward to adding more features through this collaboration. Thanks to [@easink] for the initial contribution.

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 323.79 323.79"><defs><style>.cls-1{fill:#b1e2f8;}.cls-2{fill:#174b62;}.cls-3{fill:#fff;}.cls-4{fill:none;}</style></defs><title>logo-text-square</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M246,133.32c0-.75.05-1.5.05-2.25A72.78,72.78,0,0,0,111.55,92.54a62.39,62.39,0,1,0-21.4,121H190.68V173h16.79v40.55h32.81A40.32,40.32,0,0,0,246,133.32Z"/><path class="cls-2" d="M239.86,149.93h-17.2V118.07H227a3.91,3.91,0,0,0,0-7.82H96.78a3.91,3.91,0,0,0,0,7.82h4.35v31.86H83.93a3.91,3.91,0,1,0,0,7.81h4.35v55.8h102.4V173h16.79v40.55h28v-55.8h4.35a3.91,3.91,0,1,0,0-7.81Z"/><rect class="cls-3" x="101.14" y="172.99" width="42.19" height="16.78"/><rect class="cls-3" x="166.84" y="125.62" width="16.78" height="16.8"/><rect class="cls-3" x="101.14" y="125.62" width="58.74" height="16.8"/><rect class="cls-3" x="190.68" y="125.62" width="16.78" height="16.8"/><rect class="cls-3" x="190.68" y="172.98" width="16.78" height="40.56"/><path d="M44.6,272.37H40.34L32,258.75v13.62H27.77v-20.7H32l8.32,13.65V251.67H44.6Z"/><path d="M71.92,268.11H64.44L63,272.37H58.48l7.71-20.7h4l7.75,20.7H73.36Zm-6.33-3.46h5.18l-2.6-7.75Z"/><path d="M91.48,272.37v-20.7h7.25A13.75,13.75,0,0,1,102,252a6.91,6.91,0,0,1,2.41,1.05,4.54,4.54,0,0,1,1.51,1.77,5.77,5.77,0,0,1,.52,2.51,5.15,5.15,0,0,1-.18,1.37,4.59,4.59,0,0,1-.54,1.22,4.45,4.45,0,0,1-.92,1,4.71,4.71,0,0,1-1.32.76,4.54,4.54,0,0,1,1.56.69,4.34,4.34,0,0,1,1.06,1.08,4,4,0,0,1,.61,1.33,5.55,5.55,0,0,1,.2,1.47,5.45,5.45,0,0,1-2,4.55,8.72,8.72,0,0,1-5.52,1.53Zm4.26-12H98.9a3.87,3.87,0,0,0,2.43-.69,2.31,2.31,0,0,0,.8-1.88,2.38,2.38,0,0,0-.82-2,4.29,4.29,0,0,0-2.58-.62h-3Zm0,3V269H99.4a4.29,4.29,0,0,0,1.42-.21,2.94,2.94,0,0,0,1-.57,2.29,2.29,0,0,0,.59-.85,2.9,2.9,0,0,0,.19-1.07,4.11,4.11,0,0,0-.17-1.21,2.17,2.17,0,0,0-1.48-1.48,4.39,4.39,0,0,0-1.39-.2Z"/><path d="M137.39,251.67v13.67a7.85,7.85,0,0,1-.6,3.16,6.55,6.55,0,0,1-1.65,2.3,7,7,0,0,1-2.51,1.39,11,11,0,0,1-6.37,0,7,7,0,0,1-2.51-1.39,6.55,6.55,0,0,1-1.65-2.3,8,8,0,0,1-.59-3.16V251.67h4.27v13.67a3.94,3.94,0,0,0,1,3,4.36,4.36,0,0,0,5.38,0,3.93,3.93,0,0,0,1-3V251.67Z"/><path d="M187.69,265.48a8.52,8.52,0,0,1-.71,2.9,6.81,6.81,0,0,1-1.65,2.27,7.43,7.43,0,0,1-2.55,1.47,10.06,10.06,0,0,1-3.42.54,8.9,8.9,0,0,1-3.58-.69,7.36,7.36,0,0,1-2.69-2,9.1,9.1,0,0,1-1.69-3.14,13.64,13.64,0,0,1-.59-4.13v-1.37a13,13,0,0,1,.61-4.13,9.12,9.12,0,0,1,1.73-3.15,7.57,7.57,0,0,1,2.71-2,8.82,8.82,0,0,1,3.55-.7,10,10,0,0,1,3.42.55,7.69,7.69,0,0,1,2.53,1.52,7,7,0,0,1,1.62,2.32,9.87,9.87,0,0,1,.74,2.92h-4.27a6.37,6.37,0,0,0-.32-1.63,3.21,3.21,0,0,0-.72-1.2,3,3,0,0,0-1.21-.73,5.81,5.81,0,0,0-1.79-.25,3.64,3.64,0,0,0-3.22,1.57,9,9,0,0,0-1.06,4.88v1.39a14.5,14.5,0,0,0,.24,2.81,5.71,5.71,0,0,0,.74,2,3.24,3.24,0,0,0,1.3,1.22,4.32,4.32,0,0,0,2,.41,6,6,0,0,0,1.74-.23,3,3,0,0,0,1.22-.69,3.12,3.12,0,0,0,.76-1.16,5.53,5.53,0,0,0,.34-1.62Z"/><path d="M213.83,268.11h-7.48l-1.42,4.26h-4.54l7.71-20.7h4l7.75,20.7h-4.54Zm-6.33-3.46h5.18l-2.61-7.75Z"/><path d="M244.12,266.94a3,3,0,0,0-.15-1,2,2,0,0,0-.61-.81,5.89,5.89,0,0,0-1.24-.72,17,17,0,0,0-2-.75,26.23,26.23,0,0,1-2.68-1,10.07,10.07,0,0,1-2.2-1.34,5.89,5.89,0,0,1-1.49-1.79,4.81,4.81,0,0,1-.55-2.36,5,5,0,0,1,.56-2.37A5.28,5.28,0,0,1,235.3,253a7.48,7.48,0,0,1,2.42-1.18,10.65,10.65,0,0,1,3.07-.42,9.65,9.65,0,0,1,3.13.48,7.29,7.29,0,0,1,2.41,1.33,6,6,0,0,1,1.53,2,6,6,0,0,1,.54,2.56h-4.26a3.42,3.42,0,0,0-.21-1.21,2.63,2.63,0,0,0-.63-.95,3.11,3.11,0,0,0-1.07-.62,4.86,4.86,0,0,0-1.51-.22,5.15,5.15,0,0,0-1.45.19,2.84,2.84,0,0,0-1,.51,2.15,2.15,0,0,0-.61.77,2.12,2.12,0,0,0-.21.94,2,2,0,0,0,1.05,1.71,12,12,0,0,0,3.06,1.29,20.4,20.4,0,0,1,3,1.16,8.87,8.87,0,0,1,2.15,1.45,5.35,5.35,0,0,1,1.74,4.11,5.43,5.43,0,0,1-.53,2.43,4.89,4.89,0,0,1-1.52,1.8,7.09,7.09,0,0,1-2.36,1.13,11.48,11.48,0,0,1-3.1.39,11.72,11.72,0,0,1-2-.18,9.61,9.61,0,0,1-2-.55,8.18,8.18,0,0,1-1.73-.92,6.37,6.37,0,0,1-1.38-1.31,5.65,5.65,0,0,1-.93-1.71,6.52,6.52,0,0,1-.33-2.13h4.28a3.76,3.76,0,0,0,.3,1.59,2.66,2.66,0,0,0,.83,1.06,3.34,3.34,0,0,0,1.29.59,6.66,6.66,0,0,0,1.67.19,5.15,5.15,0,0,0,1.44-.18,3,3,0,0,0,1-.49,2,2,0,0,0,.59-.75A2.24,2.24,0,0,0,244.12,266.94Z"/><path d="M274.63,268.11h-7.48l-1.42,4.26h-4.54l7.71-20.7h4l7.75,20.7h-4.54Zm-6.33-3.46h5.18l-2.61-7.75Z"/><rect class="cls-4" width="323.79" height="323.79"/></g></g></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 164.10268 138.46133"
height="138.46133"
width="164.10268"
xml:space="preserve"
id="svg2"
version="1.1"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
id="clipPath18"
clipPathUnits="userSpaceOnUse"><path
id="path16"
d="m 6.998,7.392 h 109.08 V 96.455 H 6.998 Z" /></clipPath><clipPath
id="clipPath44"
clipPathUnits="userSpaceOnUse"><path
id="path42"
d="m 61.723,52.808 c -3.456,0.157 -6.115,1.034 -8.175,2.303 v 0 c 1.395,-6.055 6.612,-9.029 6.864,-9.17 v 0 l 1.538,-0.848 c 11.768,0.786 18.656,8.383 18.656,18.317 v 0 2.153 C 77.809,56.437 71.299,52.377 61.723,52.808" /></clipPath><linearGradient
id="linearGradient54"
spreadMethod="pad"
gradientTransform="matrix(27.057007,0,0,27.057007,53.548492,55.328064)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop50"
offset="0"
style="stop-opacity:1;stop-color:#656263" /><stop
id="stop52"
offset="1"
style="stop-opacity:1;stop-color:#a7a5a6" /></linearGradient><clipPath
id="clipPath66"
clipPathUnits="userSpaceOnUse"><path
id="path64"
d="m 6.998,7.392 h 109.08 V 96.455 H 6.998 Z" /></clipPath></defs><g
transform="matrix(1.3333333,0,0,-1.3333333,0,138.46133)"
id="g10"><g
id="g12"><g
clip-path="url(#clipPath18)"
id="g14"><g
transform="translate(79.6021,65.8706)"
id="g20"><path
id="path22"
style="fill:#0d0d0d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 1.004,3.275 v 22.437 c -11.734,0 -12.956,-4.499 -12.956,-8.796 v -24.64 c 0,-1.276 -0.124,-2.629 -0.382,-3.956 C -6.112,-10.547 -2.053,-6.701 0,0" /></g><path
id="path24"
style="fill:#39a2e1;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 49.566,86.46 h -2.593 v 2.561 h 2.593 z" /><path
id="path26"
style="fill:#39a2e1;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 52.156,82.59 h -2.59 v 2.563 h 2.59 z" /><path
id="path28"
style="fill:#39a2e1;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 49.551,79.367 h -2.563 v 2.562 h 2.563 z" /><path
id="path30"
style="fill:#39a2e1;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 46.96,75.525 h -2.562 v 2.562 h 2.562 z" /><path
id="path32"
style="fill:#39a2e1;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 41.792,89.021 h -2.59 v 2.589 h 2.59 z" /><g
transform="translate(44.3853,72.9648)"
id="g34"><path
id="path36"
style="fill:#39a2e1;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h 2.587 v -5.707 h 2.594 v 9.548 h 2.59 v -18.659 c 0,-8.855 7.749,-13.126 7.749,-13.126 -13.017,0 -20.703,7.891 -20.703,18.39 V 11.56 h 2.589 V -2.562 H 0 Z" /></g></g></g><g
id="g38"><g
clip-path="url(#clipPath44)"
id="g40"><g
id="g46"><g
id="g48"><path
id="path56"
style="fill:url(#linearGradient54);stroke:none"
d="m 61.723,52.808 c -3.456,0.157 -6.115,1.034 -8.175,2.303 v 0 c 1.395,-6.055 6.612,-9.029 6.864,-9.17 v 0 l 1.538,-0.848 c 11.768,0.786 18.656,8.383 18.656,18.317 v 0 2.153 C 77.809,56.437 71.299,52.377 61.723,52.808" /></g></g></g></g><path
id="path58"
style="fill:#39a2e1;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 46.958,83.872 h -2.56 v 2.562 h 2.56 z" /><g
id="g60"><g
clip-path="url(#clipPath66)"
id="g62"><g
transform="translate(74.624,21.8422)"
id="g68"><path
id="path70"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C -2.232,0 -3.973,0.618 -5.173,1.839 -6.4,3.086 -7.005,4.891 -6.969,7.206 L -6.97,18.012 h 0.023 c 0.598,0 2.553,-0.142 2.553,-1.97 L -4.393,6.638 C -4.325,3.846 -2.724,2.247 0,2.247 c 2.723,0 4.324,1.601 4.391,4.393 v 9.402 c 0,1.828 1.956,1.97 2.556,1.97 H 6.969 L 6.966,7.204 C 7.004,4.891 6.4,3.086 5.172,1.839 3.97,0.618 2.23,0 0,0" /></g><g
transform="translate(15.1595,21.8422)"
id="g72"><path
id="path74"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C -2.232,0 -3.972,0.618 -5.172,1.839 -6.4,3.086 -7.004,4.891 -6.966,7.206 l 0.036,10.806 h 0.021 c 0.599,0 2.554,-0.142 2.554,-1.97 L -4.391,6.638 C -4.324,3.846 -2.724,2.247 0,2.247 c 2.725,0 4.325,1.601 4.392,4.393 l 0.038,9.402 c 0,1.828 1.956,1.97 2.555,1.97 H 7.008 L 6.968,7.204 C 7.005,4.891 6.4,3.086 5.173,1.839 3.972,0.618 2.23,0 0,0" /></g><g
transform="translate(56.3387,24.0893)"
id="g76"><path
id="path78"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -4.375,0 -5.028,4.213 -5.028,6.725 0,2.022 0.488,6.803 5.028,6.803 4.374,0 5.028,-4.292 5.028,-6.803 C 5.028,4.703 4.537,0 0,0 m 9.879,-1.894 c 0,0.272 -0.042,1.181 -0.56,1.728 C 9.043,0.122 8.676,0.268 8.218,0.268 h -3.01 c 1.621,1.579 2.514,3.861 2.514,6.457 0,4.336 -2.03,9.048 -7.722,9.048 -5.693,0 -7.721,-4.712 -7.721,-9.048 0,-4.335 2.026,-8.968 7.711,-8.972 l 0.015,0.002 c 0.437,0.02 0.89,0.067 1.35,0.14 0.275,0.031 0.569,0.083 0.852,0.132 l 0.449,0.079 z" /></g><g
transform="translate(85.9779,22.0111)"
id="g80"><path
id="path82"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 -0.002,15.872 c 0,1.83 1.955,1.971 2.554,1.971 H 2.575 V 0.293 C 2.575,0.132 2.444,0 2.283,0 Z" /></g><g
transform="translate(42.6704,21.9496)"
id="g84"><path
id="path86"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 -0.003,15.934 c 0,1.828 1.956,1.971 2.555,1.971 H 2.575 V 0.293 C 2.575,0.132 2.444,0 2.283,0 Z" /></g><g
transform="translate(106.4436,22.0111)"
id="g88"><path
id="path90"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v 15.916 c 0,1.829 1.949,1.971 2.549,1.971 H 2.572 V 0.293 C 2.572,0.132 2.441,0 2.28,0 Z" /></g><g
transform="translate(91.0876,39.8103)"
id="g92"><path
id="path94"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 V -2.246 H 5.267 V -17.8 h 2.282 c 0.158,0 0.289,0.13 0.293,0.286 v 15.268 h 4.798 c 0.157,0 0.288,0.129 0.291,0.285 l 0,1.961 z" /></g><g
transform="translate(91.1307,39.8103)"
id="g96"><path
id="path98"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 V -2.246 H 5.267 V -17.8 H 7.55 c 0.158,0 0.288,0.13 0.291,0.286 v 15.268 h 4.799 c 0.158,0 0.289,0.129 0.292,0.285 V 0 Z" /></g><g
transform="translate(33.3493,24.2646)"
id="g100"><path
id="path102"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -4.099 v 5.836 h 3.827 C 0.929,5.836 2.943,5.341 2.943,2.914 2.943,0.663 1.21,0.058 0,0 M 2.249,10.671 C 2.249,9.725 1.959,8.946 1.363,8.562 0.939,8.285 0.347,8.134 -0.471,8.088 h -3.803 v 5.175 h 2.816 0.841 c 2.054,-0.079 2.866,-0.92 2.866,-2.592 M 2.547,6.962 2.326,7.028 2.538,7.12 c 1.482,0.644 2.404,2.148 2.404,3.716 0,2.886 -2.043,4.672 -5.602,4.672 H -6.85 V -2.253 l 6.188,0.001 c 0.173,-0.004 0.346,-0.006 0.522,-0.006 0.713,0 1.636,0.04 2.44,0.343 1.949,0.718 3.159,2.468 3.159,4.358 0,1.625 -0.762,3.881 -2.912,4.519" /></g><g
transform="translate(8.5432,16.664)"
id="g104"><path
id="path106"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 H 0.952 L 3.307,-3.8 H 3.321 V 0 h 0.86 V -5.157 H 3.227 L 0.88,-1.365 H 0.858 V -5.157 H 0 Z" /></g><g
transform="translate(22.4235,16.664)"
id="g108"><path
id="path110"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 H 3.713 V -0.78 H 0.904 V -2.131 H 3.503 V -2.867 H 0.904 v -1.509 h 2.859 v -0.781 l -3.763,0 z" /></g><g
transform="translate(35.2121,16.664)"
id="g112"><path
id="path114"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 H 4.176 V -0.78 H 2.535 V -5.157 H 1.633 V -0.78 L 0,-0.78 Z" /></g><g
transform="translate(48.3348,16.664)"
id="g116"><path
id="path118"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 H 0.917 L 1.849,-3.944 H 1.863 L 2.903,0 H 3.827 L 4.839,-3.944 H 4.853 L 5.814,0 H 6.732 L 5.309,-5.157 H 4.391 L 3.358,-1.213 H 3.344 L 2.288,-5.157 H 1.359 Z" /></g><g
transform="translate(66.3609,16.0497)"
id="g120"><path
id="path122"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -0.274,0 -0.512,-0.055 -0.711,-0.166 -0.199,-0.11 -0.362,-0.259 -0.488,-0.444 -0.124,-0.186 -0.218,-0.396 -0.277,-0.633 -0.06,-0.235 -0.091,-0.476 -0.091,-0.721 0,-0.247 0.031,-0.487 0.091,-0.722 0.059,-0.237 0.153,-0.447 0.277,-0.633 0.126,-0.185 0.289,-0.334 0.488,-0.444 0.199,-0.111 0.437,-0.166 0.711,-0.166 0.276,0 0.511,0.055 0.711,0.166 0.2,0.11 0.362,0.259 0.489,0.444 0.124,0.186 0.217,0.396 0.276,0.633 0.062,0.235 0.092,0.475 0.092,0.722 0,0.245 -0.03,0.486 -0.092,0.721 C 1.417,-1.006 1.324,-0.796 1.2,-0.61 1.073,-0.425 0.911,-0.276 0.711,-0.166 0.511,-0.055 0.276,0 0,0 M 0,0.738 C 0.385,0.738 0.731,0.665 1.036,0.52 1.342,0.376 1.6,0.181 1.813,-0.065 2.025,-0.31 2.188,-0.597 2.3,-0.924 2.414,-1.251 2.471,-1.598 2.471,-1.964 2.471,-2.335 2.414,-2.684 2.3,-3.012 2.188,-3.34 2.025,-3.625 1.813,-3.871 1.6,-4.116 1.342,-4.311 1.036,-4.452 0.731,-4.594 0.385,-4.665 0,-4.665 c -0.385,0 -0.73,0.071 -1.037,0.213 -0.305,0.141 -0.563,0.336 -0.776,0.581 -0.21,0.246 -0.374,0.531 -0.487,0.859 -0.113,0.328 -0.17,0.677 -0.17,1.048 0,0.366 0.057,0.713 0.17,1.04 0.113,0.327 0.277,0.614 0.487,0.859 C -1.6,0.181 -1.342,0.376 -1.037,0.52 -0.73,0.665 -0.385,0.738 0,0.738" /></g><g
transform="translate(79.1802,14.3163)"
id="g124"><path
id="path126"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 H 1.481 C 1.77,0 1.988,0.068 2.139,0.206 2.287,0.343 2.362,0.549 2.362,0.823 2.362,0.987 2.338,1.121 2.29,1.224 2.241,1.328 2.175,1.409 2.091,1.466 2.006,1.525 1.91,1.563 1.802,1.582 1.693,1.601 1.582,1.61 1.466,1.61 H 0 Z M -0.904,2.348 H 1.56 C 2.128,2.348 2.554,2.225 2.839,1.979 3.122,1.733 3.264,1.391 3.264,0.954 3.264,0.707 3.228,0.504 3.156,0.343 3.084,0.182 3,0.052 2.904,-0.046 2.807,-0.145 2.712,-0.217 2.618,-0.259 2.524,-0.303 2.455,-0.333 2.412,-0.347 v -0.014 c 0.078,-0.01 0.161,-0.033 0.25,-0.072 0.089,-0.039 0.172,-0.1 0.249,-0.184 0.076,-0.085 0.14,-0.194 0.191,-0.329 0.051,-0.134 0.076,-0.303 0.076,-0.506 0,-0.303 0.022,-0.579 0.069,-0.826 0.045,-0.249 0.117,-0.426 0.213,-0.531 H 2.491 c -0.067,0.11 -0.107,0.233 -0.118,0.368 -0.013,0.134 -0.018,0.265 -0.018,0.39 0,0.236 -0.015,0.439 -0.044,0.61 -0.029,0.171 -0.082,0.314 -0.159,0.427 -0.077,0.113 -0.181,0.195 -0.315,0.248 -0.133,0.053 -0.301,0.08 -0.508,0.08 H 0 v -2.123 h -0.904 z" /></g><g
transform="translate(92.0189,16.664)"
id="g128"><path
id="path130"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 H 0.902 V -2.347 L 3.2,0 H 4.312 L 2.253,-2.058 4.456,-5.157 H 3.329 L 1.64,-2.694 0.902,-3.423 V -5.157 H 0 Z" /></g><g
transform="translate(106.0308,13.2265)"
id="g132"><path
id="path134"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-0.198 0.033,-0.367 0.1,-0.506 0.068,-0.14 0.162,-0.255 0.282,-0.343 0.12,-0.09 0.259,-0.155 0.416,-0.195 0.156,-0.041 0.326,-0.062 0.508,-0.062 0.199,0 0.366,0.023 0.506,0.07 0.14,0.045 0.253,0.104 0.34,0.176 0.087,0.072 0.148,0.155 0.188,0.248 0.038,0.095 0.057,0.19 0.057,0.287 0,0.197 -0.044,0.343 -0.133,0.436 C 2.175,0.206 2.078,0.271 1.971,0.31 1.788,0.377 1.575,0.442 1.333,0.501 1.088,0.561 0.79,0.639 0.432,0.737 0.211,0.795 0.027,0.87 -0.119,0.963 -0.266,1.058 -0.383,1.162 -0.47,1.278 c -0.086,0.115 -0.148,0.238 -0.184,0.368 -0.036,0.13 -0.054,0.262 -0.054,0.397 0,0.261 0.054,0.485 0.163,0.676 0.108,0.189 0.251,0.347 0.428,0.472 0.18,0.126 0.381,0.218 0.608,0.279 0.226,0.06 0.455,0.091 0.686,0.091 0.27,0 0.524,-0.036 0.762,-0.106 C 2.178,3.386 2.387,3.281 2.568,3.141 2.747,3.001 2.891,2.83 2.997,2.624 3.103,2.42 3.156,2.183 3.156,1.913 H 2.253 C 2.229,2.245 2.115,2.48 1.914,2.617 1.711,2.754 1.454,2.823 1.14,2.823 1.034,2.823 0.926,2.812 0.815,2.791 0.705,2.769 0.603,2.733 0.513,2.683 0.421,2.632 0.346,2.563 0.284,2.477 0.226,2.39 0.194,2.282 0.194,2.152 0.194,1.969 0.251,1.825 0.365,1.723 0.477,1.619 0.626,1.54 0.808,1.487 0.828,1.482 0.903,1.463 1.036,1.425 1.169,1.39 1.317,1.35 1.479,1.307 1.644,1.263 1.804,1.221 1.96,1.18 2.117,1.139 2.229,1.109 2.295,1.09 2.465,1.037 2.612,0.964 2.737,0.873 2.862,0.782 2.966,0.677 3.051,0.559 3.135,0.442 3.199,0.315 3.238,0.18 3.28,0.045 3.3,-0.089 3.3,-0.224 3.3,-0.513 3.242,-0.761 3.123,-0.965 3.005,-1.17 2.85,-1.337 2.657,-1.467 2.465,-1.596 2.246,-1.691 2,-1.752 c -0.245,-0.06 -0.495,-0.09 -0.751,-0.09 -0.293,0 -0.57,0.035 -0.83,0.109 -0.261,0.072 -0.487,0.181 -0.68,0.331 -0.193,0.149 -0.346,0.341 -0.462,0.574 -0.115,0.235 -0.176,0.51 -0.181,0.828 z" /></g><g
transform="translate(112.2806,38.2932)"
id="g136"><path
id="path138"
style="fill:#4f4c4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 H 0.311 C 0.575,0 0.816,0.013 0.816,0.316 0.816,0.571 0.597,0.61 0.395,0.61 H 0 Z m -0.298,0.852 h 0.742 c 0.456,0 0.671,-0.18 0.671,-0.549 0,-0.347 -0.22,-0.492 -0.505,-0.522 L 1.159,-1.067 H 0.838 L 0.316,-0.241 H 0 v -0.826 h -0.298 z m 0.64,-2.362 c 0.76,0 1.347,0.606 1.347,1.409 0,0.786 -0.587,1.391 -1.347,1.391 -0.768,0 -1.356,-0.605 -1.356,-1.391 0,-0.803 0.588,-1.409 1.356,-1.409 m 0,3.041 c 0.896,0 1.646,-0.706 1.646,-1.632 0,-0.944 -0.75,-1.65 -1.646,-1.65 -0.9,0 -1.654,0.706 -1.654,1.65 0,0.926 0.754,1.632 1.654,1.632" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -93,7 +93,7 @@ description: Open source home automation that puts local control and privacy fir
Join the Home Assistant t-shirt revolution!
</div>
<div class='subtitle'>
All proceeds will be donated to the Electronic Frontier Foundation.
Look sharp in blue, black or gray. Wearing a HA t-shirt is okay.
</div>
</div>
</a>
@ -141,7 +141,18 @@ description: Open source home automation that puts local control and privacy fir
</div>
</div>
<div class="seen-press grid__item one-whole lap-one-whole palm-one-whole">
<div class="seen-press grid__item one-half lap-one-half palm-one-whole">
<div class="material-card">
<h1>Home Assistant is sponsored by</h1>
<a href='https://www.ui.com'><img src='/images/sponsors/ubnt.svg' alt='Ubituiti Networks logo'></a>
<a href='https://www.nabucasa.com'><img src='/images/sponsors/nabu_casa.svg' alt='Nabu Casa logo'></a>
</div>
</div>
<div class="seen-press grid__item one-half lap-one-half palm-one-whole">
<div class="material-card">
<h1>Home Assistant in the press</h1>