Merge remote-tracking branch 'origin/current' into rc

This commit is contained in:
Paulus Schoutsen 2019-08-06 10:16:07 -07:00
commit b8f989761e
29 changed files with 245 additions and 335 deletions

View File

@ -81,7 +81,7 @@ In order to connect to the device, you need a *login id*. The easiest way to obt
Make sure Home Sharing is enabled on the Apple TV. Make sure Home Sharing is enabled on the Apple TV.
To scan for devices and determine the `login_id`, press the icon in the upper left corner and select the leftmost icon according to the image: To scan for devices and determine the `login_id`, open the developer tools by selecting the hammer icon in the sidebar. Once in the developer tools select **services**.
<img src='/images/screenshots/developer-tools.png' /> <img src='/images/screenshots/developer-tools.png' />
@ -111,7 +111,7 @@ If you, when playing media with `play_url`, get the following error message:
*“This AirPlay connection requires iOS 7.1 or later, OS X 10.10 or later, or iTunes 11.2 or later.”* *“This AirPlay connection requires iOS 7.1 or later, OS X 10.10 or later, or iTunes 11.2 or later.”*
then device authentication is required. Press the icon in the upper left corner and select the leftmost icon according to the image below: then device authentication is required, open the developer tools by selecting the hammer icon in the sidebar. Once in the developer tools select **services**.
<img src='/images/screenshots/developer-tools.png' /> <img src='/images/screenshots/developer-tools.png' />

View File

@ -32,7 +32,7 @@ to:
required: true required: true
type: string type: string
offset: offset:
description: Do not display departures leaving sooner than this number of minutes. Useful if you are a couple of minutes away from the stop. description: Do not display departures leaving sooner than this number of seconds. Useful if you are a couple of minutes away from the stop. The formats "HH:MM" and "HH:MM:SS" are also supported.
required: false required: false
type: time type: time
default: 00:00 default: 00:00

View File

@ -118,10 +118,6 @@ If running Home Assistant in a [Docker container](/docs/installation/docker/) us
#### 64-bit Python #### 64-bit Python
There is currently a <a href='https://bitbucket.org/al45tair/netifaces/issues/17/dll-fails-to-load-windows-81-64bit'>known issue</a> with running this integration on a 64-bit version of Python and Windows. There is currently a <a href='https://bitbucket.org/al45tair/netifaces/issues/17/dll-fails-to-load-windows-81-64bit'>known issue</a> with running this integration on a 64-bit version of Python and Windows.
#### Python 3.5
If you are on Windows and you're using Python 3.5, download the [Netifaces](http://www.lfd.uci.edu/~gohlke/pythonlibs/#netifaces) dependency.
### could not install dependency netdisco ### could not install dependency netdisco
If you see `Not initializing discovery because could not install dependency netdisco==0.6.1` in the logs, you will need to install the `python3-dev` or `python3-devel` package on your system manually (eg. `sudo apt-get install python3-dev` or `sudo dnf -y install python3-devel`). On the next restart of Home Assistant, the discovery should work. If you still get an error, check if you have a compiler (`gcc`) available on your system. If you see `Not initializing discovery because could not install dependency netdisco==0.6.1` in the logs, you will need to install the `python3-dev` or `python3-devel` package on your system manually (eg. `sudo apt-get install python3-dev` or `sudo dnf -y install python3-devel`). On the next restart of Home Assistant, the discovery should work. If you still get an error, check if you have a compiler (`gcc`) available on your system.

View File

@ -12,26 +12,27 @@ redirect_from:
--- ---
The `evohome` integration links Home Assistant with all _non-US_ [Honeywell Total Connect Comfort (TCC)](https://international.mytotalconnectcomfort.com/Account/Login) CH/DHW systems, such as: The `evohome` integration links Home Assistant with all _non-US_ [Honeywell Total Connect Comfort (TCC)](https://international.mytotalconnectcomfort.com/Account/Login) CH/DHW systems, such as:
* the Honeywell evohome CH/DHW system, and
* the Honeywell Round Thermostat - The Honeywell evohome CH/DHW system, and
- The Honeywell Round Thermostat
It does not support the home security functionality of TCC. It does not support the home security functionality of TCC.
It uses v2 of the [evohome-client](https://github.com/watchforstock/evohome-client) client library. It uses v2 of the [evohome-client](https://github.com/watchforstock/evohome-client) client library.
Honeywell removed support for higher-precision temperatures from the v2 API, so temperatures are reported to the nearest 0.5C. Honeywell removed support for higher-precision temperatures from the v2 API, and thus reported temperatures are rounded up to the nearest 0.5C.
### evohome ### evohome
evohome is a multi-zone system. Each Zone is represented as a **Climate** device: it will expose the Zone's operating mode, temperature and setpoint. evohome is a multi-zone system. Each zone is represented as a **Climate** device: it will expose the zone's operating mode, temperature and setpoint.
The Controller/Location is also represented as a **Climate** device: it will expose the location's operating mode (see below for details). Note that the Controller's temperatures are calculated as an average of all the Zones. The controller/location is also represented as a **Climate** device: it will expose the location's operating mode (see below for details). Note that the controller's current temperature is calculated as an average of all the Zones.
The DHW controller is represented as a **WaterHeater** device: It will report its current temperature (but not target temperature), and it can be turned on or off. The DHW controller is represented as a **WaterHeater** device: It will report its current temperature (but not target temperature), and it can be turned on or off.
### Round Thermostat ### Round Thermostat
Round Thermostat is a single zone system. It is currently implemented as two **Climate** devices, as if a single zone evohome system. Although Round Thermostat is, strictly speaking, a Controller and a single zone, they are merged into a single **Climate** device.
## Configuration ## Configuration
@ -67,32 +68,65 @@ scan_interval:
This is an IoT cloud-polling device, and the recommended `scan_interval` is 180 seconds. Testing has indicated that this is a safe interval that - by itself - shouldn't cause you to be rate-limited by Honeywell. This is an IoT cloud-polling device, and the recommended `scan_interval` is 180 seconds. Testing has indicated that this is a safe interval that - by itself - shouldn't cause you to be rate-limited by Honeywell.
## Operating modes, and Inheritance ## Operating modes, and inheritance
Zones support only three setpoint modes: **FollowSchedule**, **TemporaryOverride**, and **PermanentOverride**. Zones support only three setpoint modes: **FollowSchedule**, **TemporaryOverride**, and **PermanentOverride**.
Mostly, the Zone 'inherits' its functional operating mode from the controller (the actual algorithm for this is a little complicated). Mostly, the zone 'inherits' its functional operating mode from the controller (the actual algorithm for this is a little complicated).
The evohome Controller supports seven distinct system modes: **Auto**, **AutoWithEco**, **Away**, **DayOff**, **HeatingOff**, and **Custom**; **AutoWithReset** is a hidden mode that will revert all Zones to **FollowSchedule** mode. The evohome controller supports seven distinct system modes: **Auto**, **AutoWithEco**, **Away**, **DayOff**, **HeatingOff**, and **Custom**; **AutoWithReset** is a hidden mode that will revert all zones to **FollowSchedule** mode.
If the zone is in **FollowSchedule** mode, its `temperature` (target temperature) is a function of its scheduled temperature and its functional mode - for example, **AutoWithEco** is scheduled temperature less 3C. If the zone is in **FollowSchedule** mode, its `temperature` (target temperature) is a function of its scheduled temperature and its functional mode - for example, **AutoWithEco** is scheduled temperature less 3C.
If the Controller is set to **HeatingOff** (target temperature to minimum) or **Away** (target temperature to 12C), then the Zones will inherit that mode regardless of their own setpoint mode. If the controller is set to **HeatingOff** (target temperature to a minimum) or **Away** (target temperature to 12C), then the zones will inherit that mode regardless of their own setpoint mode.
If the Zone's temperature is changed, then it will be a **TemporaryOverride** that will revert to **FollowSchedule** at the next scheduled setpoint. Once this is done, the ZOne can be switched to **PermanentOverride** mode. If the zone's temperature is changed, then it will be a **TemporaryOverride** that will revert to **FollowSchedule** at the next scheduled setpoint. Once this is done, the zone can be switched to **PermanentOverride** mode.
In Home Assistant, all this is done via `HVAC_MODE` and `PRESET_MODE`. However, the actual operating mode of these devices can be tracked via its state attributes, which includes a JSON data structure for current state called `status`. In Home Assistant, all this is done via `HVAC_MODE` and `PRESET_MODE` (but also see `systemModeStatus`, `setpointStatus`, below).
## Useful Jinja Templates
The actual operating mode of evohome entities can be tracked via their state attributes, which includes a JSON data structure for the current state called `status`.
For the Controller, see `systemModeStatus`:
For the Controller:
{% raw %} {% raw %}
``` ```text
value_template: "{{ state_attr('climate.main_room', 'status').systemModeStatus.mode }}" {% if state_attr('climate.my_home', 'status').systemModeStatus.mode == "Away" %}
The system is in Away mode
{% else %}
The system is not in Away mode
{% endif %}
``` ```
{% endraw %} {% endraw %}
For the Zones: For the Zones, it is `setpointStatus`:
{% raw %} {% raw %}
``` ```text
value_template: "{{ state_attr('climate.my_house', 'status').setpointStatus.setpointMode }}" {{ state_attr('climate.kitchen', 'status').setpointStatus.setpointMode }}
```
{% endraw %}
The Zones will expose the current/upcoming scheduled `setpoints`:
{% raw %}
```text
{{ state_attr('climate.kitchen', 'status').setpoints.next.temperature }}
```
{% endraw %}
All evohome entities may have faults, and these can be turned into sensors, or:
{% raw %}
```text
{% if state_attr('climate.bedroom', 'status').activeFaults %}
{% if state_attr('climate.bedroom', 'status').activeFaults[0].faultType == 'TempZoneActuatorLowBattery' %}
There is a low battery
{% endif %}
There is a Fault!
{% else %}
Yay, everything is OK :)
{% endif %}
``` ```
{% endraw %} {% endraw %}

View File

@ -73,8 +73,8 @@ automations and templates.
| ----- | ----- | | ----- | ----- |
| `has_time` | `true` if this entity has a time. | `has_time` | `true` if this entity has a time.
| `has_date` | `true` if this entity has a date. | `has_date` | `true` if this entity has a date.
| `year`<br>`month`<br>`day` | The year, month and day of the date.<br>(only available if `has_| `hour`<br>`minute`<br>`second` | The hour, minute and second of the time.<br>(only available if `has_time: true`) | `year`<br>`month`<br>`day` | The year, month and day of the date.<br>(only available if `has_date: true`)
| `timestamp` | A timestamp representing the time held in the input.<br>If `has_ | `timestamp` | A timestamp representing the time held in the input.<br>(only available if `has_time: true`)
### Restore State ### Restore State

View File

@ -14,7 +14,7 @@ The integration requires a local KNX/IP interface like the [Weinzierl 730](https
<div class='note warning'> <div class='note warning'>
Please note, the `knx` platform does not support Windows and needs at least python version 3.5. Please note, the `knx` platform does not support Windows.
</div> </div>
@ -162,7 +162,3 @@ address:
description: KNX group address. description: KNX group address.
type: string type: string
{% endconfiguration %} {% endconfiguration %}
### Known issues
Due to lame multicast support the routing abstraction and the gateway scanner only work with Python >=3.5.

View File

@ -26,32 +26,22 @@ filter:
required: false required: false
type: list type: list
keys: keys:
exclude: exclude_entities:
description: Excluded from recording. description: The list of entity ids to be excluded from recording.
required: false required: false
type: list type: list
keys: exclude_domains:
entities: description: The list of domains to be excluded from recording.
description: The list of entity ids to be excluded from recording. required: false
required: false type: list
type: list include_entities:
domains: description: The list of entity ids to be included from recordings. If set, all other entities will not be recorded. Values set by the **exclude_*** option will prevail.
description: The list of domains to be excluded from recording. required: false
required: false type: list
type: list include_domains:
include: description: The list of domains to be included from recordings. If set, all other entities will not be recorded. Values set by the **exclude_*** option will prevail.
description: Included in recordings. If set, all other entities will not be recorded. Values set by the **exclude** option will prevail.
required: false required: false
type: list type: list
keys:
entities:
description: The list of entity ids to be included from recordings.
required: false
type: list
domains:
description: The list of domains to be included from recordings.
required: false
type: list
{% endconfiguration %} {% endconfiguration %}
You can then configure Prometheus to fetch metrics from Home Assistant by adding to its `scrape_configs` configuration. You can then configure Prometheus to fetch metrics from Home Assistant by adding to its `scrape_configs` configuration.

View File

@ -12,7 +12,7 @@ The `recorder` integration is responsible for storing details in a database, whi
Home Assistant uses [SQLAlchemy](http://www.sqlalchemy.org/), which is an Object Relational Mapper (ORM). This means that you can use **any** SQL backend for the recorder that is supported by SQLAlchemy, like [MySQL](https://www.mysql.com/), [MariaDB](https://mariadb.org/), [PostgreSQL](https://www.postgresql.org/), or [MS SQL Server](https://www.microsoft.com/en-us/sql-server/). Home Assistant uses [SQLAlchemy](http://www.sqlalchemy.org/), which is an Object Relational Mapper (ORM). This means that you can use **any** SQL backend for the recorder that is supported by SQLAlchemy, like [MySQL](https://www.mysql.com/), [MariaDB](https://mariadb.org/), [PostgreSQL](https://www.postgresql.org/), or [MS SQL Server](https://www.microsoft.com/en-us/sql-server/).
The default database engine is [SQLite](https://www.sqlite.org/) which doesn't require any configuration. The database is stored in your Home Assistant configuration directory (`.homeassistant`) and called `home-assistant_v2.db`. The default database engine is [SQLite](https://www.sqlite.org/) which doesn't require any configuration. The database is stored in your Home Assistant configuration directory (`.homeassistant` or '/config/' in HassIO) and called `home-assistant_v2.db`.
To change the defaults for the `recorder` integration in your installation, add the following to your `configuration.yaml` file: To change the defaults for the `recorder` integration in your installation, add the following to your `configuration.yaml` file:

View File

@ -41,7 +41,7 @@ ports:
type: map type: map
keys: keys:
"port: name": "port: name":
description: The port numbers (BCM mode pin numbers) and corresponding names. description: The port numbers ([BCM mode pin numbers](https://pinout.xyz/resources/raspberry-pi-pinout.png)) and corresponding names.
required: true required: true
type: string type: string
bouncetime: bouncetime:

View File

@ -133,7 +133,7 @@ Example:
```yaml ```yaml
custom: custom:
yesterday_consumption: yesterday_consumption:
key: 6400_00543A01 key: '6400_00543A01'
unit: kWh unit: kWh
factor: 1000 factor: 1000
``` ```

View File

@ -1,6 +1,6 @@
--- ---
title: "System Health" title: "System Health"
description: "Systeam Health integration will report system info and allow to run system diagnostics." description: "System Health integration will report system info and allow to run system diagnostics."
logo: home-assistant.png logo: home-assistant.png
ha_category: ha_category:
- "Other" - "Other"
@ -10,9 +10,10 @@ ha_release: 0.87
The System Health integration provides an API to offer information on the system and its components. It also allows to run diagnostic tools to diagnose problems. The System Health integration provides an API to offer information on the system and its components. It also allows to run diagnostic tools to diagnose problems.
Add the following to your configuration.yaml file. System health is included as part of the [default config](https://www.home-assistant.io/components/default_config/) starting with Home Assistant 0.88. If you do not wish to use the default config, you can add the following to your configuration.yaml file.
```yaml ```yaml
system_health: system_health:
``` ```
Once added the system health integration data can be viewed in the developer tools under <img src='/images/screenshots/developer-tool-about-icon.png' alt='service developer tool icon' class="no-shadow" height="38">. System Health integration data can be viewed in Developer Tools on the "Info" tab.

View File

@ -8,14 +8,14 @@ ha_release: 0.95
ha_iot_class: Local Polling ha_iot_class: Local Polling
--- ---
The `vlc-telnet` platform allows you to control a [VLC media player](http://www.videolan.org/vlc/index.html) using the built in telnet interface. The `vlc_telnet` platform allows you to control a [VLC media player](http://www.videolan.org/vlc/index.html) using the built in telnet interface.
To add a VLC media player to your installation, add the following to your `configuration.yaml` file: To add a VLC media player to your installation, add the following to your `configuration.yaml` file:
```yaml ```yaml
# Example configuration.yaml entry # Example configuration.yaml entry
media_player: media_player:
- platform: vlc-telnet - platform: vlc_telnet
host: IP_ADDRESS host: IP_ADDRESS
password: PASSWORD password: PASSWORD
``` ```
@ -53,7 +53,7 @@ A full configuration for VLC could look like the one below:
```yaml ```yaml
# Example configuration.yaml entry # Example configuration.yaml entry
media_player: media_player:
- platform: vlc-telnet - platform: vlc_telnet
name: Remote Player name: Remote Player
host: 192.168.1.48 host: 192.168.1.48
port: 4212 port: 4212

View File

@ -9,9 +9,9 @@ redirect_from:
[Manything](https://manything.com) is a smart app that turns your Android device, iPhone, iPod, or iPad into a WiFi camera for monitoring your home, your pets, anything! Comes with live streaming, motion activated alerts, cloud video recording, and more. [Manything](https://manything.com) is a smart app that turns your Android device, iPhone, iPod, or iPad into a WiFi camera for monitoring your home, your pets, anything! Comes with live streaming, motion activated alerts, cloud video recording, and more.
To get manything support, HA will use IFTTT's [Maker Channel](https://ifttt.com/maker) and the [ManyThing Channel](https://ifttt.com/manything). Use the [IFTTT Setup instructions](/components/ifttt/) to activate the IFTTT Platform. To get manything support, HA will use IFTTT's [Webhooks Service](https://ifttt.com/maker_webhooks) and the [ManyThing Service](https://ifttt.com/manything). Use the [IFTTT Setup instructions](/components/ifttt/) to activate the IFTTT Platform.
After setting up IFTTT, Maker Channel and ManyThing Channel, you can use the following examples to configure Home Assistant. After setting up IFTTT, Maker Service and ManyThing Service, you can use the following examples to configure Home Assistant.
```yaml ```yaml
# Example configuration.yaml entry # Example configuration.yaml entry
@ -57,7 +57,7 @@ For ManyThing support, you need to set up an `on` and `off` event.
### Testing your trigger ### Testing your trigger
You can use the developer tools to test your [Maker Channel](https://ifttt.com/maker) trigger. To do this, open the Home Assistant UI, open the sidebar, click on the first icon in the developer tools. This should get you to the 'Call Service' screen. Fill in the following values: You can use the developer tools to test your [Maker Service](https://ifttt.com/maker_webhooks) trigger. To do this, open the Home Assistant UI, open the sidebar, click on the first icon in the developer tools. This should get you to the 'Call Service' screen. Fill in the following values:
Field | Value Field | Value
----- | ----- ----- | -----

View File

@ -34,8 +34,9 @@ $ sudo service hass-daemon install
This logrotate script at `/etc/logrotate.d/homeassistant` will create an outage of a few seconds every week at night. If you do not want this add `--log-rotate-days 7` to the `FLAGS` variable in the init script. This logrotate script at `/etc/logrotate.d/homeassistant` will create an outage of a few seconds every week at night. If you do not want this add `--log-rotate-days 7` to the `FLAGS` variable in the init script.
``` File `/var/log/homeassistant/home-assistant.log`:
/var/log/homeassistant/home-assistant.log
```text
{ {
rotate 7 rotate 7
daily daily

View File

@ -19,7 +19,7 @@ A service file is needed to control Home Assistant with `systemd`. The template
- If unfamiliar with command-line text editors, `sudo nano -w [filename]` can be used with `[filename]` replaced with the full path to the file. Ex. `sudo nano -w /etc/systemd/system/home-assistant@YOUR_USER.service`. After text entered, press CTRL-X then press Y to save and exit. - If unfamiliar with command-line text editors, `sudo nano -w [filename]` can be used with `[filename]` replaced with the full path to the file. Ex. `sudo nano -w /etc/systemd/system/home-assistant@YOUR_USER.service`. After text entered, press CTRL-X then press Y to save and exit.
- If you're running Home Assistant in a Python virtual environment or a Docker container, please skip to the appropriate template listed below. - If you're running Home Assistant in a Python virtual environment or a Docker container, please skip to the appropriate template listed below.
``` ```text
[Unit] [Unit]
Description=Home Assistant Description=Home Assistant
After=network-online.target After=network-online.target
@ -37,7 +37,7 @@ WantedBy=multi-user.target
If you've setup Home Assistant in `virtualenv` following our [Python installation guide](/getting-started/installation-virtualenv/) or [manual installation guide for Raspberry Pi](/getting-started/installation-raspberry-pi/), the following template should work for you. If Home Assistant install is not located at `/srv/homeassistant`, please modify the `ExecStart=` line appropriately. `YOUR_USER` should be replaced by the user account that Home Assistant will run as (e.g `homeassistant`). If you've setup Home Assistant in `virtualenv` following our [Python installation guide](/getting-started/installation-virtualenv/) or [manual installation guide for Raspberry Pi](/getting-started/installation-raspberry-pi/), the following template should work for you. If Home Assistant install is not located at `/srv/homeassistant`, please modify the `ExecStart=` line appropriately. `YOUR_USER` should be replaced by the user account that Home Assistant will run as (e.g `homeassistant`).
``` ```text
[Unit] [Unit]
Description=Home Assistant Description=Home Assistant
After=network-online.target After=network-online.target
@ -55,7 +55,7 @@ WantedBy=multi-user.target
If you want to use Docker, the following template should work for you. If you want to use Docker, the following template should work for you.
``` ```text
[Unit] [Unit]
Description=Home Assistant Description=Home Assistant
Requires=docker.service Requires=docker.service
@ -132,7 +132,7 @@ $ sudo systemctl restart home-assistant@YOUR_USER && sudo journalctl -f -u home-
If you want to restart the Home Assistant service automatically after a crash, add the following lines to the `[Service]` section of your unit file: If you want to restart the Home Assistant service automatically after a crash, add the following lines to the `[Service]` section of your unit file:
``` ```text
Restart=on-failure Restart=on-failure
RestartSec=5s RestartSec=5s
``` ```

View File

@ -26,7 +26,7 @@ Forward ports 443 and 80 to your server on your router. Do not forward port 8123
Use this as your Caddyfile, change the domain name to match yours. Use this as your Caddyfile, change the domain name to match yours.
``` ```text
example.com { example.com {
proxy / localhost:8123 { proxy / localhost:8123 {
websocket websocket

View File

@ -11,14 +11,14 @@ Scenegen is a scene generation tool for [Home Assistant](/) home automation soft
### Clone the Repository ### Clone the Repository
Clone the [**scenegen**](https://github.com/home-assistant/scenegen) repository to the current local directory on your machine. Clone the [**scenegen**](https://github.com/home-assistant/scenegen) repository to the current local directory on your machine.
``` bash ```bash
$ git clone https://github.com/home-assistant/scenegen.git git clone https://github.com/home-assistant/scenegen.git
``` ```
Change your working directory to the repository root. Moving forward, we will be working from this directory. Change your working directory to the repository root. Moving forward, we will be working from this directory.
``` bash ```bash
$ cd scenegen cd scenegen
``` ```
## Install Prerequisites ## Install Prerequisites
@ -26,14 +26,14 @@ $ cd scenegen
Before running `SceneGen` you will need to add some python prerequisites: Before running `SceneGen` you will need to add some python prerequisites:
```bash ```bash
$ sudo pip3 install configparser sudo pip3 install configparser
``` ```
You should now be ready to run `scenegen` You should now be ready to run `scenegen`
## Basic Operation ## Basic Operation
``` ```text
usage: scenegen [-h] [-k KEY] [-s SCENENAME] [-m MAPFILE] [-f FILTER] usage: scenegen [-h] [-k KEY] [-s SCENENAME] [-m MAPFILE] [-f FILTER]
[-c {xy_color,rgb_color,color_temp,color_name}] [-t TYPES] [-c {xy_color,rgb_color,color_temp,color_name}] [-t TYPES]
url url
@ -60,7 +60,7 @@ optional arguments:
For basic operation just supply the url and optionally the api key (using the --key option) on the command line and scenegen will output a list of all lights and switches with their attributes. Optionally use the `--scenename` flag to explicitly set the scenename. For basic operation just supply the url and optionally the api key (using the --key option) on the command line and scenegen will output a list of all lights and switches with their attributes. Optionally use the `--scenename` flag to explicitly set the scenename.
``` ```bash
$ ./scenegen.py https://<some url> -k <some api key> $ ./scenegen.py https://<some url> -k <some api key>
name: My New Scene name: My New Scene
entities: entities:
@ -90,14 +90,14 @@ Note that depending on the type of light there may be a delay in actually settin
For a more advanced way to use the output try the following. In configuration.yaml add the following line: For a more advanced way to use the output try the following. In configuration.yaml add the following line:
``` ```yaml
scene: !include_dir_list scenes scene: !include_dir_list scenes
``` ```
This will tell Home Assistant to look in the subdirectory `scenes` for yaml files containing scene information. Each file will be named for the scene it will create and should contain information formatted as above. Then simply run Scenegen and redirect its output to the scenes subdirectory: This will tell Home Assistant to look in the subdirectory `scenes` for yaml files containing scene information. Each file will be named for the scene it will create and should contain information formatted as above. Then simply run Scenegen and redirect its output to the scenes subdirectory:
``` ```bash
$ ./scenegen.py https://<some url> -k <some api key> > scenes/my_new_scene.yaml ./scenegen.py https://<some url> -k <some api key> > scenes/my_new_scene.yaml
``` ```
This will create a new scene called `my_new_scene` which will automatically be picked up by Home Assistant on the next restart. This will create a new scene called `my_new_scene` which will automatically be picked up by Home Assistant on the next restart.
@ -110,13 +110,13 @@ Scenegen allows colors to be captured, and in fact Home Assistant light entities
By default, Scenegen will list all lights and switches. To restrict the device type use the `--types` option and supply a comma separated list (no spaces) of types to output. e.g.: By default, Scenegen will list all lights and switches. To restrict the device type use the `--types` option and supply a comma separated list (no spaces) of types to output. e.g.:
``` ```bash
./scenegen.py https://<some url> -k <some api key> --types light,switch ./scenegen.py https://<some url> -k <some api key> --types light,switch
``` ```
or: or:
``` ```bash
./scenegen.py https://<some url> -k <some api key> --types light ./scenegen.py https://<some url> -k <some api key> --types light
``` ```
@ -126,7 +126,7 @@ This will make more sense as and when more types are added.
Maps allow you to specify and label various subsets of devices that you want to work on together. A mapfile is specified using the `--mapfile` option and is a `.ini` style file consisting of section headers and entries. The section headers specify a region or zone or otherwise organized selection of entities you want to filter on, and it is mandatory to have at least one. If you create a map file like this: Maps allow you to specify and label various subsets of devices that you want to work on together. A mapfile is specified using the `--mapfile` option and is a `.ini` style file consisting of section headers and entries. The section headers specify a region or zone or otherwise organized selection of entities you want to filter on, and it is mandatory to have at least one. If you create a map file like this:
``` ```text
[entities] [entities]
light.living_room: light.living_room:
light.dining_room: light.dining_room:
@ -136,7 +136,7 @@ The trailing colons are necessary to prevent parsing errors for including just k
If you run scenegen with the `--mapfile` argument pointing to that file you will only get output for the listed entities (the name of the section is irrelevant if not using the `--filter` option). A more complex mapfile might look like this: If you run scenegen with the `--mapfile` argument pointing to that file you will only get output for the listed entities (the name of the section is irrelevant if not using the `--filter` option). A more complex mapfile might look like this:
``` ```text
[Outside] [Outside]
light.porch: light.porch:
switch.path_lights: switch.path_lights:
@ -149,7 +149,7 @@ light.bedside:
Again, if you run with that map file it will output all of the entities listed, however you now have the possibility of restricting output devices based on the sections they are in, using the `--filter` option and supplying a comma separated list of sections you want to include, for instance: Again, if you run with that map file it will output all of the entities listed, however you now have the possibility of restricting output devices based on the sections they are in, using the `--filter` option and supplying a comma separated list of sections you want to include, for instance:
``` ```bash
./scenegen.py https://<some url> -k <some api key> --mapfile map.cfg --filter "Outside,Living Room" ./scenegen.py https://<some url> -k <some api key> --mapfile map.cfg --filter "Outside,Living Room"
``` ```
@ -159,6 +159,6 @@ The intended use of the mapfile and filter is that you create a map of all your
To update SceneGen after a new version is released, just run the following command to update your copy: To update SceneGen after a new version is released, just run the following command to update your copy:
```bash ```bash
$ git pull git pull
``` ```

View File

@ -22,7 +22,7 @@ To allow WebSocket by default for all service exposed by NGINX, you can enable i
Open `/usr/syno/share/nginx/Portal.mustache` and add the followings in the `Location` section: Open `/usr/syno/share/nginx/Portal.mustache` and add the followings in the `Location` section:
``` ```text
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; proxy_set_header Connection "upgrade";
proxy_read_timeout 86400; proxy_read_timeout 86400;
@ -43,7 +43,7 @@ You can find more information [here](https://github.com/orobardet/dsm-reverse-pr
- Copy the Home Assistant specific Reverse Proxy settings from the existing `/etc/nginx/app.d/server.ReverseProxy.conf` file to `/usr/local/etc/nginx/conf.d/http.HomeAssistant.conf`. - Copy the Home Assistant specific Reverse Proxy settings from the existing `/etc/nginx/app.d/server.ReverseProxy.conf` file to `/usr/local/etc/nginx/conf.d/http.HomeAssistant.conf`.
- Include these lines in the location declaration: - Include these lines in the location declaration:
``` ```text
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; proxy_set_header Connection "upgrade";
``` ```

View File

@ -5,8 +5,6 @@ description: "Instructions to install Home Assistant on an Armbian-powered syste
[armbian](https://www.armbian.com) runs on a wide-variety of [ARM development boards](https://www.armbian.com/download/). Currently there are around 50 boards supported inclusive the OrangePi family, Cubieboard, Pine64, and Odroid. [armbian](https://www.armbian.com) runs on a wide-variety of [ARM development boards](https://www.armbian.com/download/). Currently there are around 50 boards supported inclusive the OrangePi family, Cubieboard, Pine64, and Odroid.
Python 3.5.3 or later is required.
Setup Python and `pip`: Setup Python and `pip`:
```bash ```bash

View File

@ -41,7 +41,7 @@ $ sudo apt-get upgrade -y
Install the dependencies. Install the dependencies.
```bash ```bash
$ sudo apt-get install python3 python3-venv python3-pip libffi-dev libssl-dev $ sudo apt-get install python3 python3-venv python3-pip libffi-dev libssl-dev autoconf
``` ```
Add an account for Home Assistant called `homeassistant`. Add an account for Home Assistant called `homeassistant`.

View File

@ -120,16 +120,16 @@ The sun state can be used to test if the sun has set or risen.
```yaml ```yaml
condition: condition:
condition: state # 'day' condition: from sunrise until sunset condition: state # 'day' condition: from sunrise until sunset
entity_id: sun.sun entity_id: sun.sun
state: 'above_horizon' state: 'above_horizon'
``` ```
```yaml ```yaml
condition: condition:
condition: state # from sunset until sunrise condition: state # from sunset until sunrise
entity_id: sun.sun entity_id: sun.sun
state: 'below_horizon' state: 'below_horizon'
``` ```
#### Sun elevation condition #### Sun elevation condition
@ -141,18 +141,18 @@ For an in depth explanation of sun elevation see [sun elevation trigger][sun_ele
```yaml ```yaml
condition: condition:
condition: and # 'twilight' condition: dusk and dawn, in typical locations condition: and # 'twilight' condition: dusk and dawn, in typical locations
conditions: conditions:
- condition: template - condition: template
value_template: {% raw %}'{{ state_attr("sun.sun", "elevation") < 0 }}'{% endraw %} value_template: {% raw %}'{{ state_attr("sun.sun", "elevation") < 0 }}'{% endraw %}
- condition: template - condition: template
value_template: {% raw %}'{{ state_attr("sun.sun", "elevation") > -6 }}'{% endraw %} value_template: {% raw %}'{{ state_attr("sun.sun", "elevation") > -6 }}'{% endraw %}
``` ```
```yaml ```yaml
condition: condition:
condition: template # 'night' condition: from dusk to dawn, in typical locations condition: template # 'night' condition: from dusk to dawn, in typical locations
value_template: {% raw %}'{{ state_attr("sun.sun", "elevation") < -6 }}'{% endraw %} value_template: {% raw %}'{{ state_attr("sun.sun", "elevation") < -6 }}'{% endraw %}
``` ```
#### Sunset/sunrise condition #### Sunset/sunrise condition
@ -177,22 +177,22 @@ condition:
```yaml ```yaml
condition: condition:
condition: or # 'when dark' condition: either after sunset or before sunrise - equivalent to a state condition on `sun.sun` of `below_horizon` condition: or # 'when dark' condition: either after sunset or before sunrise - equivalent to a state condition on `sun.sun` of `below_horizon`
conditions: conditions:
- condition: sun - condition: sun
after: sunset after: sunset
- condition: sun - condition: sun
before: sunrise before: sunrise
``` ```
```yaml ```yaml
condition: condition:
condition: and # 'when light' condition: before sunset and after sunrise - equivalent to a state condition on `sun.sun` of `above_horizon` condition: and # 'when light' condition: before sunset and after sunrise - equivalent to a state condition on `sun.sun` of `above_horizon`
conditions: conditions:
- condition: sun - condition: sun
before: sunset before: sunset
- condition: sun - condition: sun
after: sunrise after: sunrise
``` ```
A visual timeline is provided below showing an example of when these conditions will be true. In this chart, sunrise is at 6:00, and sunset is at 18:00 (6:00 PM). The green areas of the chart indicate when the specified conditions will be true. A visual timeline is provided below showing an example of when these conditions will be true. In this chart, sunrise is at 6:00, and sunset is at 18:00 (6:00 PM). The green areas of the chart indicate when the specified conditions will be true.
@ -253,18 +253,18 @@ condition:
### Examples ### Examples
```yaml ```yaml
condition: condition:
- condition: numeric_state - condition: numeric_state
entity_id: sun.sun entity_id: sun.sun
value_template: '{{ state.attributes.elevation }}' value_template: '{{ state.attributes.elevation }}'
below: 1 below: 1
- condition: state - condition: state
entity_id: light.living_room entity_id: light.living_room
state: 'off' state: 'off'
- condition: time - condition: time
before: '23:00:00' before: '23:00:00'
after: '14:00:00' after: '14:00:00'
- condition: state - condition: state
entity_id: script.light_turned_off_5min entity_id: script.light_turned_off_5min
state: 'off' state: 'off'
``` ```

View File

@ -10,13 +10,13 @@ The frontend contains a section called "Developer Tools".
Screenshot of Home Assistant's Developer Tools. Screenshot of Home Assistant's Developer Tools.
</p> </p>
| Section | Icon | Description | | Section |Description |
| ------- |------| ----- | | ------- |----- |
| Services | <img src='/images/screenshots/developer-tool-services-icon.png' alt='service developer tool icon' class="no-shadow" height="38" /> | Calls services from integrations | | Services | Calls services from integrations |
| States | <img src='/images/screenshots/developer-tool-states-icon.png' alt='service developer tool icon' class="no-shadow" height="38" /> | Sets the representation of an entity | | States | Sets the representation of an entity |
| Events | <img src='/images/screenshots/developer-tool-events-icon.png' alt='service developer tool icon' class="no-shadow" height="38" /> | Fires events | | Events | Fires events |
| Templates | <img src='/images/screenshots/developer-tool-templates-icon.png' alt='service developer tool icon' class="no-shadow" height="38" /> | Renders templates | | Templates | Renders templates |
| Info | <img src='/images/screenshots/developer-tool-about-icon.png' alt='service developer tool icon' class="no-shadow" height="38" /> | Details about Home Assistant | | Info | Details about Home Assistant |
## What can I do with Developer Tools? ## What can I do with Developer Tools?
The Developer Tools is meant for **all** (not just for the developers) to quickly try out things - like calling services, update states, raising events, and publish messages in mqtt…etc.). It is also a necessary tool for those who write custom automations and scripts by hand. The following describes each of the section in detail. The Developer Tools is meant for **all** (not just for the developers) to quickly try out things - like calling services, update states, raising events, and publish messages in mqtt…etc.). It is also a necessary tool for those who write custom automations and scripts by hand. The following describes each of the section in detail.

View File

@ -122,7 +122,7 @@ You can also check what hardware has been found using the [hassio command](/hass
$ hassio hardware info $ hassio hardware info
``` ```
The `modemmanager` package will interfere with any Z-Wave (or Zigbee) stick and should be removed or disabled. Failure to do so will result in random failures of those components. For example you can disable with `sudo systemctl disable ModemManager` and remove with `sudo apt-get purge modemmanager` If you did an alternative install on Linux then the `modemmanager` package will interfere with any Z-Wave (or Zigbee) stick and should be removed or disabled. Failure to do so will result in random failures of those components. For example you can disable with `sudo systemctl disable ModemManager` and remove with `sudo apt-get purge modemmanager`.
### Docker ### Docker

View File

@ -0,0 +1,63 @@
---
title: "Home Assistant Cast"
description: "Show Home Assistant on a Chromecast or Google Assistant device with screen."
date: 2019-08-06 01:11:03
date_formatted: "August 6, 2019"
author: Paulus Schoutsen
author_twitter: balloob
categories: Announcements
og_image: /images/blog/2019-08-home-assistant-cast/social.png
---
<p class='img'>
<img src='/images/blog/2019-08-home-assistant-cast/hero.png' alt='Picture of a Google Nest Hub with the Home Assistant UI on it.'>
</p>
Home automation itself has never been a goal of Home Assistant. Instead, it's a tool that allows us to have technology improve our life, and that of the people around us. I wrote about this [3,5 years ago](https://www.home-assistant.io/blog/2016/01/19/perfect-home-automation/), and it's been our guiding principle in building out Home Assistant.
Today we're introducing Home Assistant Cast to help with this. With Home Assistant Cast, people in your house can have quick access to see the state of your house and it's residents, and quickly adjust the most important settings. This is achieved by running on Chromecast powered screens that you already have throughout your house: your Google Nest Hubs and TVs.
You can launch Home Assistant Cast by going to [**the Home Assistant Cast launcher website**](https://cast.home-assistant.io). It works with any version of Home Assistant released in the last year. Home Assistant Cast can show any Lovelace view, including support for custom cards and themes. Got no Lovelace configuration? Don't worry, we'll generate a view and show that instead.
For a demo, also check out the [Home Assistant Cast launcher](https://cast.home-assistant.io). If you have any questions, make sure to check the [Frequently Asked Questions](https://cast.home-assistant.io/faq.html).
## How it works
You need to authorize Home Assistant Cast to access your Home Assistant instance. Once it's authorized, you can start Home Assistant Cast on your Chromecast device. Next, your Chromecast device will set up a direct connection to your Home Assistant instance and give you the option to pick a view to display.
Home Assistant Cast can:
- Render Lovelace views, including custom cards.
- Stream real-time data to make sure that the UI always shows the latest state of your house.
- Navigate between views using navigate actions inside an entities card or using weblinks.
- Instantly update the casted Lovelace UI when you update your Lovelace configuration.
## About touch
We have been able to get touch controls working on the Google Nest Hub and other Google Assistant devices with a screen. The available configuration options to indicate that we're a touch-optimized app [did not work](https://github.com/home-assistant/home-assistant-polymer/blob/98b882d5991e05fae7962d96e5d0f7a5ae773a5b/cast/src/receiver/entrypoint.ts#L18-L30). We were still able to achieve touch controls by [manipulating code](https://github.com/home-assistant/home-assistant-polymer/blob/98b882d5991e05fae7962d96e5d0f7a5ae773a5b/cast/src/receiver/layout/hc-main.ts#L200-L206) that is injected into the Home Assistant Cast website when the Chromecast runs our receiver application.
There is no guarantee that touch controls will keep working, it might be blocked. It might stop this week, next month, next year, or it keeps working forever.
I hope that by releasing it with touch controls enabled, we can show Google that this is something that people want, and are willing to invest in for just this reason.
**To make sure everyone sees it, I encourage people to share photos and videos of Home Assistant Cast in action on Twitter, Facebook, YouTube and other social media with the hashtag `#homeassistantcast`. Let's share the love!**
## Coming soon and future plans
On August 7, Home Assistant 0.97 will be released. This release will allow launching Home Assistant Cast from the Home Assistant frontend. You can do this by including a new `cast` row that can be placed inside an entities card.
```yaml
# Example entities card configuration
type: entities
entities:
- type: cast
name: Lights
# The path of the view (or number)
view: lights
hide_if_unavailable: true
```
This is the first release of Home Assistant Cast, and so we focused on the minimum that was worthy of a release. We still have some more things planned:
- Allow starting Home Assistant Cast from Home Assistant itself (not a browser), as part of an automation or script.
- Use Home Assistant Cast as a text-to-speech target (inspired by [lovelace-browser-commander by @thomasloven](https://github.com/thomasloven/lovelace-browser-commander)).

View File

@ -17,6 +17,14 @@ og_image: /images/blog/2019-08-release-97/components.png
As per previous announcements, this is the first release that requires at least Python 3.6. As per previous announcements, this is the first release that requires at least Python 3.6.
## Reload scenes from configuration.yaml
Thanks to [@balloob] it is now possible to reload scenes from configuration.yaml without restarting Home Assistant. This is part of an effort for Home Assistant 1.0 to make scenes a first class citizen of Home Assistant, including creating/restoring scenes on the fly in the future. To track the effort, [follow this page](https://github.com/home-assistant/home-assistant/issues/25681).
## Home Assistant Cast
In case you missed the announcement, we released Home Assistant Cast yesterday. It allows you to transform any Cast interface into a display for Home Assistant. Read the announcement for more information.
## UI changes ## UI changes
- Improved accessibility. This is an [ongoing effort](https://github.com/home-assistant/home-assistant-polymer/issues/3267) on making the frontend accessible for visually impaired users. - Improved accessibility. This is an [ongoing effort](https://github.com/home-assistant/home-assistant-polymer/issues/3267) on making the frontend accessible for visually impaired users.

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -1,177 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 15 KiB