mirror of
https://github.com/home-assistant/home-assistant.io.git
synced 2025-07-16 05:46:52 +00:00
Merge branch 'current' into next
This commit is contained in:
commit
559d18eaaa
@ -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.
|
||||
|
||||
|
65
source/_components/epsonprinter.markdown
Normal file
65
source/_components/epsonprinter.markdown
Normal 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.
|
@ -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'
|
||||
```
|
||||
|
@ -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.
|
||||
|
@ -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/).
|
@ -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)
|
||||
|
@ -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/)
|
@ -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 %}
|
@ -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'
|
||||
```
|
@ -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 %}
|
@ -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"
|
||||
```
|
@ -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 %}
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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-->
|
||||
|
@ -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&ref_src=twsrc%5Etfw">#homeassistant</a> <a href="https://twitter.com/hashtag/guineapigs?src=hash&ref_src=twsrc%5Etfw">#guineapigs</a> <a href="https://twitter.com/hashtag/peoplelikethegridviewbetter?src=hash&ref_src=twsrc%5Etfw">#peoplelikethegridviewbetter</a> <a href="https://t.co/Qu4pmOzt4M">pic.twitter.com/Qu4pmOzt4M</a></p>— 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.
|
||||
|
1
source/images/sponsors/nabu_casa.svg
Normal file
1
source/images/sponsors/nabu_casa.svg
Normal 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 |
177
source/images/sponsors/ubnt.svg
Normal file
177
source/images/sponsors/ubnt.svg
Normal 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 |
@ -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>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user