Merge branch 'next' of https://github.com/balloob/home-assistant.io into next
BIN
apcupsd.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
@ -13,6 +13,7 @@
|
||||
text-transform: uppercase;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.front-install {
|
||||
@ -204,7 +205,7 @@ p.note {
|
||||
}
|
||||
|
||||
.install-instructions-container {
|
||||
#normal-install, #raspberry-install, #docker-install, .install-instructions {
|
||||
#normal-install, #raspberry-install, #docker-install, #synology-install, .install-instructions {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -223,14 +224,16 @@ p.note {
|
||||
|
||||
#normal-install:checked ~ .menu-selector.normal,
|
||||
#raspberry-install:checked ~ .menu-selector.raspberry,
|
||||
#docker-install:checked ~ .menu-selector.docker
|
||||
#docker-install:checked ~ .menu-selector.docker,
|
||||
#synology-install:checked ~ .menu-selector.synology
|
||||
{
|
||||
border-bottom-color: $blue;
|
||||
}
|
||||
|
||||
#normal-install:checked ~ .install-instructions.normal,
|
||||
#raspberry-install:checked ~ .install-instructions.raspberry,
|
||||
#docker-install:checked ~ .install-instructions.docker
|
||||
#docker-install:checked ~ .install-instructions.docker,
|
||||
#synology-install:checked ~ .install-instructions.synology
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
@ -242,7 +245,7 @@ p.note {
|
||||
|
||||
.advanced-installs-container {
|
||||
|
||||
#upstart-install, #systemd-install, #osx-install, .advanced-installs {
|
||||
#upstart-install, #systemd-install, #osx-install, #synology-install, .advanced-installs {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -261,14 +264,16 @@ p.note {
|
||||
|
||||
#upstart-install:checked ~ .menu-selector.upstart,
|
||||
#systemd-install:checked ~ .menu-selector.systemd,
|
||||
#osx-install:checked ~ .menu-selector.osx
|
||||
#osx-install:checked ~ .menu-selector.osx,
|
||||
#synology-install:checked ~ .menu-selector.synology
|
||||
{
|
||||
border-bottom-color: $blue;
|
||||
}
|
||||
|
||||
#upstart-install:checked ~ .advanced-installs.upstart,
|
||||
#systemd-install:checked ~ .advanced-installs.systemd,
|
||||
#osx-install:checked ~ .advanced-installs.osx
|
||||
#osx-install:checked ~ .advanced-installs.osx,
|
||||
#synology-install:checked ~ .advanced-installs.synology
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
|
@ -7,7 +7,6 @@
|
||||
background-size: cover;
|
||||
border-bottom: 1px solid $white;
|
||||
color: $white;
|
||||
font-weight: bold;
|
||||
margin-top: -2em;
|
||||
margin-bottom: 1.5em;
|
||||
padding: 50px 0;
|
||||
|
@ -11,25 +11,19 @@ logo: apcupsd.png
|
||||
ha_category: Hub
|
||||
---
|
||||
|
||||
[APCUPSd](http://www.apcupsd.org/) status information can be integrated into Home Assistant when the Network Information Server (NIS) [is configured](http://www.apcupsd.org/manual/manual.html#nis-server-client-configuration-using-the-net-driver).
|
||||
[APCUPSd](http://www.apcupsd.org/) status information can be integrated into Home Assistant when the Network Information Server (NIS) [is configured](http://www.apcupsd.org/manual/manual.html#nis-server-client-configuration-using-the-net-driver) is enabled on the APC device.
|
||||
|
||||
Create an `apcupsd` section in your configuration, optionally containing the following parameters:
|
||||
|
||||
- **host**: The hostname/IP address on which the APCUPSd NIS is being served. Default: `localhost`
|
||||
- **port**: The port on which the APCUPSd NIS is listening. Default: `3551`
|
||||
|
||||
#### Example
|
||||
|
||||
Use defaults:
|
||||
To enable this sensor, add the following lines to your `configuration.yaml`:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
apcupsd:
|
||||
host: IP_ADDRESS
|
||||
port: PORT
|
||||
```
|
||||
|
||||
Set parameters:
|
||||
Configuration variables:
|
||||
|
||||
- **host** (*Optional*): The hostname/IP address on which the APCUPSd NIS is being served. Defaults to `localhost`.
|
||||
- **port** (*Optional*): The port on which the APCUPSd NIS is listening. Defaults to `3551`.
|
||||
|
||||
```yaml
|
||||
apcupsd:
|
||||
host: 192.168.1.10
|
||||
port: 1234
|
||||
```
|
||||
|
@ -11,12 +11,18 @@ logo: apcupsd.png
|
||||
ha_category: Binary Sensor
|
||||
---
|
||||
|
||||
In addition to the [APCUPSd Sensor](/components/sensor.apcupsd/) devices, you may also create a device which is simply `on` when the UPS status is `ONLINE` and `off` at all other times.
|
||||
In addition to the [APCUPSd Sensor](/components/sensor.apcupsd/) devices, you may also create a device which is simply "on" when the UPS status is online and "off" at all other times.
|
||||
|
||||
#### Example
|
||||
To enable this sensor, add the following lines to your `configuration.yaml` file for a GET request:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
binary_sensor:
|
||||
- name: UPS Online
|
||||
platform: apcupsd
|
||||
- platform: apcupsd
|
||||
name: UPS Online
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **resource** (*Required*): The resource or endpoint that contains the value.
|
||||
- **method** (*Optional*): The method of the request. Default is GET.
|
||||
|
@ -17,7 +17,7 @@ To enable this sensor, add the following lines to your `configuration.yaml` file
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
binary_sensor:
|
||||
platform: rest
|
||||
resource: http://IP_ADDRESS/ENDPOINT
|
||||
method: GET
|
||||
@ -29,7 +29,7 @@ or for a POST request:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
binary_sensor:
|
||||
platform: rest
|
||||
resource: http://IP_ADDRESS/ENDPOINT
|
||||
method: POST
|
||||
|
@ -9,6 +9,35 @@ sharing: true
|
||||
footer: true
|
||||
ha_category: Binary Sensor
|
||||
---
|
||||
The TCP Binary Sensor is a type of [TCP Sensor](/components/sensor.tcp/) which is either `OFF` or `ON`. In order the 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`.
|
||||
|
||||
- **value_on** (*Required*): The value returned when the device is `ON`.
|
||||
|
||||
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.
|
||||
|
||||
To enable this sensor, add the following lines to your `configuration.yaml`:
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
# Example configuration.yaml entry
|
||||
- platform: tcp
|
||||
name: TCP Binary Sensor
|
||||
host: IP_ADDRESS
|
||||
port: PORT
|
||||
payload: "r State\n"
|
||||
value_on: 1
|
||||
timeout: 5
|
||||
value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}"
|
||||
unit: UNIT_OF_MEASUREMENT
|
||||
```
|
||||
|
||||
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.
|
||||
- **value_on** (*Required*): The value returned when the device is "on".
|
||||
- **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](/getting-started/templating/) to extract the value. By default it's assumed that the entire response is the value.
|
||||
- **unit** (*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.
|
||||
|
||||
|
@ -7,7 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: browser.png
|
||||
logo: home-assistant.png
|
||||
ha_category: Other
|
||||
---
|
||||
|
||||
|
@ -27,7 +27,7 @@ camera:
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **nvr** *Optional*: The IP or hostname of the NVR (Network Video Recorder) server.
|
||||
- **nvr** *Required**: The IP or hostname of the NVR (Network Video Recorder) server.
|
||||
- **port** *Optional*: The port number to use for accessing the NVR.
|
||||
- **key** *Required*: The API key available from the NVR web interface.
|
||||
|
||||
|
@ -7,7 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: conversation.png
|
||||
logo: home-assistant.png
|
||||
ha_category: "Voice"
|
||||
---
|
||||
|
||||
|
@ -15,7 +15,7 @@ ha_category: Presence Detection
|
||||
The `fritz` platform offers presence detection by looking at connected devices to a [AVM Fritz!Box](http://avm.de/produkte/fritzbox/) based router.
|
||||
|
||||
<p class='note warning'>
|
||||
It might be necessary to install additional packages: <code>$ sudo apt-get install libxslt-dev libxml2-dev</code>
|
||||
It might be necessary to install additional packages: <code>$ sudo apt-get install libxslt-dev libxml2-dev python3-lxml</code>
|
||||
</p>
|
||||
|
||||
To use an Fritz!Box router in your installation, add the following to your `configuration.yaml` file:
|
||||
|
@ -14,7 +14,7 @@ ha_category: Presence Detection
|
||||
|
||||
The `icloud` platform allows you to detect presence using the [iCloud](https://www.icloud.com/) service. iCloud allows users to track their location on iOS devices.
|
||||
|
||||
It does require that your device has beend registered with "Find My iPhone".
|
||||
It does require that your device is registered with "Find My iPhone".
|
||||
|
||||
To integrate iCloud in Home Assistant, add the following section to your `configuration.yaml` file:
|
||||
|
||||
|
@ -7,7 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: downloader.png
|
||||
logo: home-assistant.png
|
||||
ha_category: Other
|
||||
---
|
||||
|
||||
|
@ -14,5 +14,5 @@ ha_category: Garage Door
|
||||
|
||||
The Wink garage door platform allows you to control your [Wink](http://www.wink.com/) enabled garage door.
|
||||
|
||||
The requirement is that you have setup your [Wink hub](/components/light.wink/).
|
||||
The requirement is that you have setup your [Wink hub](/components/wink/).
|
||||
|
||||
|
@ -24,5 +24,5 @@ light:
|
||||
Configuration variables:
|
||||
|
||||
- **server** (*Optional*): Your server address. Only needed if using more than one network interface. Omit if you are unsure.
|
||||
- **consumer_secret** (*Optional*): The broadcast address, set to reach all LIFX bulbs.
|
||||
- **broadcast** (*Optional*): The broadcast address, set to reach all LIFX bulbs.
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
layout: page
|
||||
title: "MySensors Light"
|
||||
description: "Instructions how to integrate MySensors lights into Home Assistant."
|
||||
date: 2016-01-17 15:49
|
||||
date: 2016-02-15 17:37 +0100
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
@ -13,3 +13,25 @@ featured: false
|
||||
---
|
||||
|
||||
Integrates MySensors lights into Home Assistant. See the [main component] for configuration instructions.
|
||||
|
||||
The following actuator types are supported:
|
||||
|
||||
##### MySensors version 1.4 and higher
|
||||
|
||||
S_TYPE | V_TYPE
|
||||
---------|--------------
|
||||
S_LIGHT | V_LIGHT
|
||||
S_DIMMER | V_DIMMER
|
||||
|
||||
##### MySensors version 1.5 and higher
|
||||
|
||||
S_TYPE | V_TYPE
|
||||
------------|-------------
|
||||
S_LIGHT | V_STATUS
|
||||
S_DIMMER | V_PERCENTAGE
|
||||
S_RGB_LIGHT | V_RGB
|
||||
|
||||
For more information, visit the [serial api] of MySensors.
|
||||
|
||||
[main component]: /components/mysensors/
|
||||
[serial api]: https://www.mysensors.org/download/serial_api_15
|
||||
|
@ -7,6 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: bus_scs.png
|
||||
ha_category: Light
|
||||
---
|
||||
|
||||
|
@ -1,24 +1,21 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Belkin WeMo Light"
|
||||
description: "Instructions how to integrate Belkin WeMo lights into Home Assistant."
|
||||
date: 2016-02-22 07:00
|
||||
title: "Belkin WeMo Lights"
|
||||
description: "Instructions how to integrate Belkin WeMo LED lights into Home Assistant."
|
||||
date: 2016-02-20 00:45
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: belkin_wemo.png
|
||||
ha_category: Light
|
||||
ha_iot_class: "Local Polling"
|
||||
---
|
||||
|
||||
|
||||
The `wemo` light platform allows you to control your [Belkin WeMo](http://www.belkin.com) lights from within Home Assistant.
|
||||
The `wemo` platform allows you to control your [Belkin WeMo](http://www.belkin.com/us/p/P-F5Z0489/) LED lights from within Home Assistant.
|
||||
|
||||
They will be automatically discovered if the discovery component is enabled.
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
light:
|
||||
platform: wemo
|
||||
```
|
||||
For more configuration information see the [WeMo component](/components/wemo/) documentation.
|
||||
|
||||
|
@ -14,4 +14,4 @@ ha_category: Light
|
||||
|
||||
The wink light platform allows you to use your [Wink](http://www.wink.com/) lights.
|
||||
|
||||
The requirement is that you have setup your [Wink hub](/components/light.wink/).
|
||||
The requirement is that you have setup your [Wink hub](/components/wink/).
|
||||
|
@ -21,7 +21,7 @@ To add Kodi to your installation, add the following to your `configuration.yaml`
|
||||
# Example configuration.yaml entry
|
||||
media_player:
|
||||
platform: kodi
|
||||
host: 192.168.0.123
|
||||
host: http://192.168.0.123
|
||||
port: 8080
|
||||
name: Kodi
|
||||
user: USERNAME
|
||||
|
@ -1,8 +1,8 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Samsung TV"
|
||||
description: "Instructions how to integrate a Samsung TV in Home Assistant."
|
||||
date: 2016-02-01 19:00
|
||||
title: "Samsung Smart TV"
|
||||
description: "Instructions on how to integrate a Samsung Smart TV into Home Assistant."
|
||||
date: 2016-02-13 12:02
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
@ -12,14 +12,30 @@ ha_category: Media Player
|
||||
featured: false
|
||||
---
|
||||
|
||||
The `samsungtv` platform allows you to control an [Samsung TV](http://www.samsung.com).
|
||||
The `samsungtv` platform allows you to control a [Samsung Smart TV](http://www.samsung.com/uk/consumer/tv-audio-video/televisions/).
|
||||
|
||||
When the TV is first connected, you will need to accept Home Assistant on the TV to allow communication.
|
||||
|
||||
To add an Samsung TV to your installation, add the following to your `configuration.yaml` file:
|
||||
To add a TV to your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
media_player:
|
||||
platform: samsungtv
|
||||
host: 192.168.0.10
|
||||
name: Living Room TV
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **host** *Required*: The IP of the Samsung Smart TV, e.g. 192.168.0.10
|
||||
- **name** *Optional*: The name you would like to give to the Samsung Smart TV.
|
||||
|
||||
|
||||
Currently known supported models:
|
||||
|
||||
- ES5500
|
||||
- C7700
|
||||
|
||||
If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/balloob/home-assistant.io).
|
||||
The two letters at the beginning of the model number represent the region, UE is Europe, UN is North America and UA is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list.
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
layout: page
|
||||
title: "snapcast"
|
||||
description: "Instructions how to integrate a snapcast in Home Assistant."
|
||||
title: "SnapCast"
|
||||
description: "Instructions on how to integrate SnapCast into Home Assistant."
|
||||
date: 2016-02-01 19:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
@ -12,9 +12,9 @@ ha_category: Media Player
|
||||
featured: false
|
||||
---
|
||||
|
||||
The `snapcast` platform allows you to control [Snapcast](https://github.com/badaix/snapcast).
|
||||
The `snapcast` platform allows you to control [SnapCast](https://github.com/badaix/snapcast) from Home Assistant.
|
||||
|
||||
To add Snapcast to your installation, add the following to your `configuration.yaml` file:
|
||||
To add SnapCast to your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
|
@ -2,7 +2,7 @@
|
||||
layout: page
|
||||
title: "MySensors"
|
||||
description: "Instructions how to integrate MySensors sensors into Home Assistant."
|
||||
date: 2015-05-14 21:57
|
||||
date: 2016-02-18 20:13 +0100
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
@ -12,9 +12,9 @@ ha_category: Hub
|
||||
featured: true
|
||||
---
|
||||
|
||||
The [MySensors](https://www.mysensors.org) project combines Arduino boards with NRF24L01 radio boards to build sensor networks. The component will automatically add all available switches and sensors to Home Assistant.
|
||||
The [MySensors](https://www.mysensors.org) project combines Arduino boards with NRF24L01 radio boards to build sensor networks. The component will automatically add all available devices to Home Assistant, after [presentation](#presentation) is done.
|
||||
|
||||
### Configuration
|
||||
### {% linkable_title Configuration %}
|
||||
|
||||
Integrate your Serial MySensors Gateway by adding the following to your `configuration.yaml` file:
|
||||
|
||||
@ -31,6 +31,7 @@ mysensors:
|
||||
debug: true
|
||||
persistence: true
|
||||
version: '1.5'
|
||||
optimistic: 'true'
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
@ -40,7 +41,8 @@ Configuration variables:
|
||||
- **persistence** (*Optional*): Enable or disable local persistence of sensor information. If this is disabled, then each sensor will need to send presentation messages after Home Assistant starts. Default is true.
|
||||
- **persistence_file** (*Optional*): Path to a file to save sensor information. The file extension determines the file type. Currently supported file types are 'pickle' and 'json'.
|
||||
- **version** (*Optional*): Specifies the MySensors protocol version to use. Supports 1.4 and 1.5. Default is 1.4.
|
||||
- **baud_rate** (*Optional*): Specifies baud rate of the connected gateway.
|
||||
- **baud_rate** (*Optional*): Specifies baud rate of the connected gateway. Default is 115200.
|
||||
- **optimistic** (*Optional*): Enable or disable optimistic mode for actuators (switch/light). Default is false. Set this to true if no state feedback from actuators is possible. Home Assistant will assume that the command succeeded and change state.
|
||||
|
||||
If you are using an original Arduino the port will be named `ttyACM*`. The exact number can be determined with the command shown below.
|
||||
|
||||
@ -48,7 +50,7 @@ If you are using an original Arduino the port will be named `ttyACM*`. The exact
|
||||
$ ls /dev/ttyACM*
|
||||
```
|
||||
|
||||
### Presentation
|
||||
### {% linkable_title Presentation %}
|
||||
|
||||
Present a MySensors sensor or actuator, by following these steps:
|
||||
|
||||
|
@ -7,6 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: bus_scs.png
|
||||
ha_category: Rollershutter
|
||||
---
|
||||
The SCSGate device can control motirized roller shutters connected to the BTicino MyHome system.
|
||||
|
@ -7,6 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: bus_scs.png
|
||||
ha_category: Hub
|
||||
---
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
layout: page
|
||||
title: "MySensors Sensor"
|
||||
description: "Instructions how to integrate MySensors sensors into Home Assistant."
|
||||
date: 2016-01-17 15:49
|
||||
date: 2016-02-18 20:13 +0100
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
@ -55,6 +55,12 @@ S_LIGHT_LEVEL | V_LEVEL
|
||||
S_AIR_QUALITY | V_LEVEL (replaces V_DUST_LEVEL)
|
||||
S_DUST | V_LEVEL (replaces V_DUST_LEVEL)
|
||||
|
||||
### {% linkable_title Custom unit of measurement %}
|
||||
|
||||
Some sensor value types are not specific for a certain sensor type. These do not have a default unit of measurement in Home Assistant. For example, the V_LEVEL type can be used for different sensor types, dust, sound, vibration etc.
|
||||
|
||||
By using V_UNIT_PREFIX, it's possible to set a custom unit for any sensor. The string value that is sent for V_UNIT_PREFIX will be used in preference to any other unit of measurement, for the defined sensors. V_UNIT_PREFIX can't be used as a standalone sensor value type. Sending a supported value type and value from the tables above is also required. V_UNIT_PREFIX is available with MySensors version 1.5 and later.
|
||||
|
||||
For more information, visit the [serial api] of MySensors.
|
||||
|
||||
[main component]: /components/mysensors/
|
||||
|
@ -14,9 +14,9 @@ featured: false
|
||||
|
||||
The `speedtest` sensor component uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance.
|
||||
|
||||
By default, it will run every hour on the hour. The user can change the update frequency in the config by defining the minute, hour, and day for speedtest to run.
|
||||
By default, it will run every hour. The user can change the update frequency in the config by defining the minute, hour, and day for a speedtest to run.
|
||||
|
||||
To add speedtest.net sensors to your installation, add the following to your `configuration.yaml` file:
|
||||
To add a Speedtest.net sensor to your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
Once per hour, on the hour (default):
|
||||
|
||||
@ -65,11 +65,11 @@ sensor:
|
||||
Configuration variables:
|
||||
|
||||
- **monitored_conditions** array (*Required*): Sensors to display in the frontend.
|
||||
- **ping**: Reaction time in ms of your connection–how fast you get a response after you've sent out a request.
|
||||
- **ping**: Reaction time in ms of your connection, (how fast you get a response after you've sent out a request).
|
||||
- **download**: Download speed in Mbps.
|
||||
- **upload**: Upload speed in Mbps.
|
||||
- **minute** (*Optional*): Specify the minute(s) of the hour to schedule the speedtest. Use a list for multiple entries. Default is 0.
|
||||
- **hour** (*Optional*): Specify the hour(s) of the day to schedule the speedtest. Use a list for multiple entries. Default is None.
|
||||
- **day** (*Optional*): Specify the day(s) of the month to schedule the speedtest. Use a list for multiple entries. Default is None.
|
||||
|
||||
This component uses [speetest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from speedtest.net. Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display.
|
||||
This component uses [speetest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from Speedtest.net. Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display.
|
||||
|
@ -9,36 +9,55 @@ sharing: true
|
||||
footer: true
|
||||
ha_category: Sensor
|
||||
---
|
||||
|
||||
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.
|
||||
|
||||
The configuration options for the a TCP Sensor:
|
||||
To enable this sensor, add the following lines to your `configuration.yaml`:
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
# Example configuration.yaml entry
|
||||
- platform: tcp
|
||||
name: Central Heating Pressure
|
||||
host: IP_ADDRESS
|
||||
port: PORT
|
||||
timeout: 5
|
||||
payload: PAYLOAD
|
||||
value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}"
|
||||
unit: UNIT_OF_MEASUREMENT
|
||||
```
|
||||
|
||||
Configuration options for the a TCP Sensor:
|
||||
|
||||
- **name** (*Required*): The name you'd like to give the sensor in Home Assistant.
|
||||
- **platform** (*Required*): Set to `tcp`.
|
||||
- **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**: How long in seconds to wait for a response from the service before giving up and disconnecting. Default: `10`
|
||||
- **value_template**: A Jinja2 template to extract the desired value from the response returned by the server. By default we assume that the entire response is the value.
|
||||
- **unit**: The unit of measurement to use for the value.
|
||||
- **buffer_size**: 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. Default: `1024`.
|
||||
- **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](/getting-started/templating/) to extract the value. By default it's assumed that the entire response is the value.
|
||||
- **unit** (*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`.
|
||||
|
||||
#### Example
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
The usage of the TCP component is best explained with an example. 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:
|
||||
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:
|
||||
- name: Central Heating Pressure
|
||||
platform: tcp
|
||||
# Example configuration.yaml entry
|
||||
- platform: tcp
|
||||
name: Central Heating Pressure
|
||||
host: 10.0.0.127
|
||||
port: 8888
|
||||
timeout: 5
|
||||
@ -47,4 +66,3 @@ sensor:
|
||||
unit: Bar
|
||||
```
|
||||
|
||||
|
||||
|
@ -7,6 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: home-assistant.png
|
||||
ha_category: Sensor
|
||||
ha_iot_class: "Local Push"
|
||||
---
|
||||
|
@ -14,5 +14,5 @@ ha_category: Sensor
|
||||
|
||||
The Wink sensor platform allows you to get data from your [Wink](http://www.wink.com/) sensors.
|
||||
|
||||
The requirement is that you have setup your [Wink hub](/components/light.wink/).
|
||||
The requirement is that you have setup your [Wink hub](/components/wink/).
|
||||
|
||||
|
@ -7,6 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: home-assistant.png
|
||||
ha_category: Sensor
|
||||
ha_iot_class: "Local Push"
|
||||
---
|
||||
|
@ -27,6 +27,6 @@ simple_alarm:
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **known_light** (*Required*): Which light/light group has to flash when a known device comes home.
|
||||
- **unknown_light** (*Required*): Which light/light group has to flash red when light turns on while no one home.
|
||||
- **known_light** (*Optional*): Which light/light group has to flash when a known device comes home.
|
||||
- **unknown_light** (*Optional*): Which light/light group has to flash red when light turns on while no one home.
|
||||
|
||||
|
@ -7,7 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: sun.png
|
||||
logo: home-assistant.png
|
||||
ha_category: Weather
|
||||
---
|
||||
|
||||
|
@ -8,7 +8,7 @@ comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: hikvision.png
|
||||
ha_category: Camera
|
||||
ha_category: Switch
|
||||
---
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
layout: page
|
||||
title: "MySensors Switch"
|
||||
description: "Instructions how to integrate MySensors switches into Home Assistant."
|
||||
date: 2016-01-17 15:49
|
||||
date: 2016-02-15 20:49 +0100
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
@ -23,14 +23,12 @@ S_TYPE | V_TYPE
|
||||
S_DOOR | V_ARMED
|
||||
S_MOTION | V_ARMED
|
||||
S_SMOKE | V_ARMED
|
||||
S_LIGHT | V_LIGHT
|
||||
S_LOCK | V_LOCK_STATUS
|
||||
|
||||
##### MySensors version 1.5 and higher
|
||||
|
||||
S_TYPE | V_TYPE
|
||||
-------------|------------------
|
||||
S_LIGHT | V_STATUS
|
||||
S_BINARY | V_STATUS, V_LIGHT
|
||||
S_SPRINKLER | V_STATUS
|
||||
S_WATER_LEAK | V_ARMED
|
||||
|
@ -7,6 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: bus_scs.png
|
||||
ha_category: Switch
|
||||
---
|
||||
|
||||
|
@ -2,13 +2,14 @@
|
||||
layout: page
|
||||
title: "Belkin WeMo Switch"
|
||||
description: "Instructions how to integrate Belkin WeMo switches into Home Assistant."
|
||||
date: 2015-03-23 19:59
|
||||
date: 2016-02-20 00:47
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: belkin_wemo.png
|
||||
ha_category: Switch
|
||||
ha_iot_class: "Local Push"
|
||||
---
|
||||
|
||||
|
||||
@ -16,22 +17,4 @@ The `wemo` platform allows you to control your [Belkin WeMo](http://www.belkin.c
|
||||
|
||||
They will be automatically discovered if the discovery component is enabled.
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
switch:
|
||||
platform: wemo
|
||||
```
|
||||
|
||||
Alternately, wemos that are not discoverable can be statically configured. If you have WeMo devices on subnets other than where Home Assistant is running, and/or devices in a remote location reachable over a VPN, you will need to manually configure them. This is also useful if you wish to disable discovery for some wemos, even if they are local. Example static configuration:
|
||||
|
||||
```yaml
|
||||
switch:
|
||||
platform: wemo
|
||||
static:
|
||||
- 192.168.1.23
|
||||
- 192.168.52.172
|
||||
```
|
||||
|
||||
Any WeMo devices that are not statically configured but reachable via discovery will still be added automatically.
|
||||
|
||||
Note that if you use this, you may want to configure your router (or whatever runs your DHCP server) to force your WeMo devices to use a static IP address. Check the DHCP section of your router configuration for this ability.
|
||||
For more configuration information see the [WeMo component](/components/wemo/) documentation.
|
||||
|
@ -14,5 +14,5 @@ ha_category: Switch
|
||||
|
||||
The Wink switch platform allows you to control your [Wink](http://www.wink.com/) switches.
|
||||
|
||||
The requirement is that you have setup your [Wink hub](/components/light.wink/).
|
||||
The requirement is that you have setup your [Wink hub](/components/wink/).
|
||||
|
||||
|
@ -7,7 +7,7 @@ sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: updater.png
|
||||
logo: home-assistant.png
|
||||
ha_category: Other
|
||||
---
|
||||
|
||||
|
@ -17,9 +17,9 @@ Home Assistant has support to integrate your [Verisure](https://www.verisure.com
|
||||
|
||||
We support:
|
||||
|
||||
* Alarm
|
||||
* Smartplugs
|
||||
* Reading from thermometers and hygrometers integrated in various devices
|
||||
* Reading alarm status
|
||||
* Locks
|
||||
|
||||
To integrate Verisure with Home Assistant, add the following section to your `configuration.yaml` file:
|
||||
@ -44,7 +44,7 @@ Configuration variables:
|
||||
- **alarm** (*Optional*): Set to 1 to show alarm, 0 to disable. Default 1.
|
||||
- **hygrometers** (*Optional*): Set to 1 to show hygrometers, 0 to disable. Default 1.
|
||||
- **smartplugs** (*Optional*): Set to 1 to show smartplugs, 0 to disable. Default 1.
|
||||
- **locls** (*Optional*): Set to 1 to show locks, 0 to disable. Default 1.
|
||||
- **locks** (*Optional*): Set to 1 to show locks, 0 to disable. Default 1.
|
||||
- **thermometers** (*Optional*): Set to 1 to show thermometers, 0 to disable. Default 1.
|
||||
- **code_digits** (*Optional*): Number of digits in PIN code. Default 4.
|
||||
|
||||
|
@ -21,6 +21,14 @@ weblink:
|
||||
entities:
|
||||
- name: Router
|
||||
url: http://192.168.1.1/
|
||||
icon: mdi:router-wireless
|
||||
- name: Home Assistant
|
||||
url: https://home-assistant.io
|
||||
```
|
||||
Configuration variables:
|
||||
|
||||
- **name** (*Required*): Text for the link.
|
||||
- **url** (*Required*): The URL for the link.
|
||||
- **icon** (*Optional*): Icon for entry.
|
||||
|
||||
Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`.
|
||||
|
34
source/_components/wemo.markdown
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Belkin WeMo devices"
|
||||
description: "Instructions how to integrate Belkin WeMo devices into Home Assistant."
|
||||
date: 2016-02-20 00:41
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: belkin_wemo.png
|
||||
ha_category: Hub
|
||||
---
|
||||
|
||||
The `wemo` component is the main component to integrate various [Belkin WeMo](http://www.belkin.com/us/Products/home-automation/c/wemo-home-automation/) devices with Home Assistant.
|
||||
|
||||
Supported devices will be automatically discovered if the discovery component is enabled. If you are not using the discovery component, loading the `wemo` component will scan for WeMo devices on the local network.
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
wemo:
|
||||
```
|
||||
|
||||
Alternately, WeMo devices that are not discoverable can be statically configured. If you have WeMo devices on subnets other than where Home Assistant is running, and/or devices in a remote location reachable over a VPN, you will need to manually configure them. This is also useful if you wish to disable discovery for some wemos, even if they are local. Example static configuration:
|
||||
|
||||
```yaml
|
||||
wemo:
|
||||
static:
|
||||
- 192.168.1.23
|
||||
- 192.168.52.172
|
||||
```
|
||||
|
||||
Any WeMo devices that are not statically configured but reachable via discovery will still be added automatically.
|
||||
|
||||
Note that if you use this, you may want to configure your router (or whatever runs your DHCP server) to force your WeMo devices to use a static IP address. Check the DHCP section of your router configuration for this ability.
|
13
source/_cookbook/configuration_yaml_by_danichispa.markdown
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Configuration.yaml by Danichispa"
|
||||
description: ""
|
||||
date: 2016-02-20 02:19 -0800
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
ha_category: Example configuration.yaml
|
||||
ha_external_link: https://github.com/danichispa/hass-config
|
||||
---
|
||||
|
13
source/_cookbook/configuration_yaml_by_greenturtwig.markdown
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Configuration.yaml by GreenTurtwig"
|
||||
description: ""
|
||||
date: 2016-02-13 13:51 +0700
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
ha_category: Example configuration.yaml
|
||||
ha_external_link: https://github.com/GreenTurtwig/personal-home-automation/tree/master/Home%20Assistant
|
||||
---
|
||||
|
@ -10,20 +10,20 @@ footer: true
|
||||
ha_category: Custom Python Component Examples
|
||||
---
|
||||
|
||||
This is a simple hello world example to show the basics of registering a service. To use this example, create the file `<config dir>/custom_components/hello_service.py` and copy the below example code.
|
||||
This is a simple "hello world" example to show the basics of registering a service. To use this example, create the file `<config dir>/custom_components/hello_service.py` and copy the below example code.
|
||||
|
||||
Services can be called from automation and from the service developer tools in the frontend.
|
||||
Services can be called from automation and from the service "Developer tools" in the frontend.
|
||||
|
||||
```python
|
||||
# The domain of your component. Should be equal to the name of your component
|
||||
DOMAIN = "hello_service"
|
||||
# The domain of your component. Should be equal to the name of your component.
|
||||
DOMAIN = 'hello_service'
|
||||
|
||||
ATTR_NAME = 'name'
|
||||
DEFAULT_NAME = 'World'
|
||||
|
||||
|
||||
def setup(hass, config):
|
||||
""" Setup is called when Home Assistant is loading our component. """
|
||||
"""Setup is called when Home Assistant is loading our component."""
|
||||
|
||||
def handle_hello(call):
|
||||
name = call.data.get(ATTR_NAME, DEFAULT_NAME)
|
||||
@ -32,7 +32,7 @@ def setup(hass, config):
|
||||
|
||||
hass.services.register(DOMAIN, 'hello', handle_hello)
|
||||
|
||||
# return boolean to indicate that initialization was successful
|
||||
# Return boolean to indicate that initialization was successfully.
|
||||
return True
|
||||
```
|
||||
|
||||
|
@ -13,15 +13,15 @@ ha_category: Custom Python Component Examples
|
||||
This is a simple hello world example to show the basics for setting a state. To use this example, create the file `<config dir>/custom_components/hello_state.py` and copy the below example code.
|
||||
|
||||
```python
|
||||
# The domain of your component. Should be equal to the name of your component
|
||||
DOMAIN = "hello_state"
|
||||
# The domain of your component. Should be equal to the name of your component.
|
||||
DOMAIN = 'hello_state'
|
||||
|
||||
CONF_NAME = 'name'
|
||||
DEFAULT_NAME = 'World'
|
||||
|
||||
|
||||
def setup(hass, config):
|
||||
""" Setup is called when Home Assistant is loading our component. """
|
||||
"""Setup is called when Home Assistant is loading our component."""
|
||||
|
||||
# Get the name from the configuration. Use DEFAULT_NAME if no name provided.
|
||||
name = config[DOMAIN].get(CONF_NAME, DEFAULT_NAME)
|
||||
@ -29,7 +29,7 @@ def setup(hass, config):
|
||||
# States are in the format DOMAIN.OBJECT_ID
|
||||
hass.states.set('hello_state.hello', name)
|
||||
|
||||
# return boolean to indicate that initialization was successful
|
||||
# Return boolean to indicate that initialization was successfully.
|
||||
return True
|
||||
```
|
||||
|
||||
|
@ -21,10 +21,10 @@ This example follows a topic on MQTT and updates the state of an entity to the l
|
||||
```python
|
||||
import homeassistant.loader as loader
|
||||
|
||||
# The domain of your component. Should be equal to the name of your component
|
||||
# The domain of your component. Should be equal to the name of your component.
|
||||
DOMAIN = "hello_mqtt"
|
||||
|
||||
# List of component names (string) your component depends upon
|
||||
# List of component names (string) your component depends upon.
|
||||
DEPENDENCIES = ['mqtt']
|
||||
|
||||
|
||||
@ -33,31 +33,31 @@ DEFAULT_TOPIC = 'home-assistant/hello_mqtt'
|
||||
|
||||
|
||||
def setup(hass, config):
|
||||
""" Setup our hello_mqtt component. """
|
||||
"""Setup the Hello MQTT component."""
|
||||
mqtt = loader.get_component('mqtt')
|
||||
topic = config[DOMAIN].get('topic', DEFAULT_TOPIC)
|
||||
entity_id = 'hello_mqtt.last_message'
|
||||
|
||||
# Listener to be called when we receive a message
|
||||
# Listener to be called when we receive a message.
|
||||
def message_received(topic, payload, qos):
|
||||
""" A new MQTT message has been received. """
|
||||
"""A new MQTT message has been received."""
|
||||
hass.states.set(entity_id, payload)
|
||||
|
||||
# Subscribe our listener to a topic
|
||||
# Subscribe our listener to a topic.
|
||||
mqtt.subscribe(hass, topic, message_received)
|
||||
|
||||
# Set the intial state
|
||||
hass.states.set(entity_id, 'No messages')
|
||||
|
||||
# Service to publish a message on MQTT
|
||||
# Service to publish a message on MQTT.
|
||||
def set_state_service(call):
|
||||
""" Service to send a message. """
|
||||
"""Service to send a message."""
|
||||
mqtt.publish(hass, topic, call.data.get('new_state'))
|
||||
|
||||
# Register our service with Home Assistant
|
||||
# Register our service with Home Assistant.
|
||||
hass.services.register(DOMAIN, 'set_state', set_state_service)
|
||||
|
||||
# return boolean to indicate that initialization was successful
|
||||
# Return boolean to indicate that initialization was successfully.
|
||||
return True
|
||||
```
|
||||
|
||||
|
124
source/_cookbook/python_component_simple_alarm.markdown
Normal file
@ -0,0 +1,124 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Flash lights when intruder detected"
|
||||
description: "Detect intruders by checking if the light is turning on while no one is home."
|
||||
date: 2016-02-14 0:40 -0800
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
ha_category: Automation in Python Examples
|
||||
---
|
||||
|
||||
This example component will detect intruders. It does so by checking if lights are being turned on while there is no one at home. When this happens it will turn the lights red, flash them for 30 seconds and send a message via [the notifiy component](/components/notify/). It will also flash a specific light when a known person comes home.
|
||||
|
||||
This component depends on the components [device_tracker](/components/device_tracker/) and [light](/components/light/) being setup.
|
||||
|
||||
To set it up, add the following lines to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
simple_alarm:
|
||||
known_light: light.Bowl
|
||||
unknown_light: group.living_room
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **known_light** (*Optional*): Which light/light group has to flash when a known device comes home.
|
||||
- **unknown_light** (*Optional*): Which light/light group has to flash red when light turns on while no one home.
|
||||
|
||||
Create the file `<config dir>/custom_components/simple_alarm.py` and copy paste the content below:
|
||||
|
||||
```python
|
||||
"""Simple alarm component."""
|
||||
import logging
|
||||
|
||||
import homeassistant.loader as loader
|
||||
from homeassistant.components import device_tracker, light, notify
|
||||
from homeassistant.helpers.event import track_state_change
|
||||
from homeassistant.const import STATE_ON, STATE_OFF, STATE_HOME, STATE_NOT_HOME
|
||||
|
||||
DOMAIN = "simple_alarm"
|
||||
|
||||
DEPENDENCIES = ['group', 'device_tracker', 'light']
|
||||
|
||||
# Attribute to tell which light has to flash whem a known person comes home
|
||||
# If omitted will flash all.
|
||||
CONF_KNOWN_LIGHT = "known_light"
|
||||
|
||||
# Attribute to tell which light has to flash whem an unknown person comes home
|
||||
# If omitted will flash all.
|
||||
CONF_UNKNOWN_LIGHT = "unknown_light"
|
||||
|
||||
# Services to test the alarms
|
||||
SERVICE_TEST_KNOWN_ALARM = "test_known"
|
||||
SERVICE_TEST_UNKNOWN_ALARM = "test_unknown"
|
||||
|
||||
|
||||
def setup(hass, config):
|
||||
""" Sets up the simple alarms. """
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
light_ids = []
|
||||
|
||||
for conf_key in (CONF_KNOWN_LIGHT, CONF_UNKNOWN_LIGHT):
|
||||
light_id = config[DOMAIN].get(conf_key, light.ENTITY_ID_ALL_LIGHTS)
|
||||
|
||||
if hass.states.get(light_id) is None:
|
||||
logger.error(
|
||||
'Light id %s could not be found in state machine', light_id)
|
||||
|
||||
return False
|
||||
|
||||
light_ids.append(light_id)
|
||||
|
||||
# pylint: disable=unbalanced-tuple-unpacking
|
||||
known_light_id, unknown_light_id = light_ids
|
||||
|
||||
if hass.states.get(device_tracker.ENTITY_ID_ALL_DEVICES) is None:
|
||||
logger.error('No devices are being tracked, cannot setup alarm')
|
||||
|
||||
return False
|
||||
|
||||
def known_alarm():
|
||||
""" Fire an alarm if a known person arrives home. """
|
||||
light.turn_on(hass, known_light_id, flash=light.FLASH_SHORT)
|
||||
|
||||
def unknown_alarm():
|
||||
""" Fire an alarm if the light turns on while no one is home. """
|
||||
light.turn_on(
|
||||
hass, unknown_light_id,
|
||||
flash=light.FLASH_LONG, rgb_color=[255, 0, 0])
|
||||
|
||||
# Send a message to the user
|
||||
notify.send_message(
|
||||
hass, "The lights just got turned on while no one was home.")
|
||||
|
||||
# Setup services to test the effect
|
||||
hass.services.register(
|
||||
DOMAIN, SERVICE_TEST_KNOWN_ALARM, lambda call: known_alarm())
|
||||
hass.services.register(
|
||||
DOMAIN, SERVICE_TEST_UNKNOWN_ALARM, lambda call: unknown_alarm())
|
||||
|
||||
def unknown_alarm_if_lights_on(entity_id, old_state, new_state):
|
||||
""" Called when a light has been turned on. """
|
||||
if not device_tracker.is_on(hass):
|
||||
unknown_alarm()
|
||||
|
||||
track_state_change(
|
||||
hass, light.ENTITY_ID_ALL_LIGHTS,
|
||||
unknown_alarm_if_lights_on, STATE_OFF, STATE_ON)
|
||||
|
||||
def ring_known_alarm(entity_id, old_state, new_state):
|
||||
""" Called when a known person comes home. """
|
||||
if light.is_on(hass, known_light_id):
|
||||
known_alarm()
|
||||
|
||||
# Track home coming of each device
|
||||
track_state_change(
|
||||
hass, hass.states.entity_ids(device_tracker.DOMAIN),
|
||||
ring_known_alarm, STATE_NOT_HOME, STATE_HOME)
|
||||
|
||||
return True
|
||||
```
|
@ -0,0 +1,116 @@
|
||||
---
|
||||
layout: post
|
||||
title: "0.13: Speedtest.net, Bloomsky, Splunk and Garage Doors"
|
||||
description: "Home Assistant 0.13 brings test coverage to a whopping 90% and adds a whole bunch of new components."
|
||||
date: 2016-02-12 22:15:00 -0800
|
||||
date_formatted: "February 13, 2016"
|
||||
author: Paulus Schoutsen
|
||||
author_twitter: balloob
|
||||
comments: true
|
||||
categories: Release-Notes
|
||||
og_image: /images/blog/2016-02-release-13/social-img.png
|
||||
---
|
||||
|
||||
The focus of 0.13 was on test coverage, big cheers to [@rmkraus] for his hard work on this. I'm proud to announce that we've hit the 90% test coverage of the core + important components. A big milestone for the project.
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/blog/2016-02-release-13/input_select__input_boolean__weblink.png'>
|
||||
Examples of the new [input_select] and [weblink] components.
|
||||
</p>
|
||||
|
||||
Not only did we gain a lot of test coverage, we also attracted a lot of new developers that contributed a variety of components and platforms:
|
||||
|
||||
<img src='/images/supported_brands/speedtest.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='70' /><img src='/images/supported_brands/apcupsd.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/splunk.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/bloomsky.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/ubiquiti.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/networx.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' /><img src='/images/supported_brands/samsung.png' style='clear: right; margin-left: 5px; border:none; box-shadow: none; float: right; margin-bottom: 16px;' width='150' />
|
||||
|
||||
- Core: Add service to restart Home Assistant ([@rmkraus])
|
||||
- Core: Allow device to report as unavailable ([@MartinHjelmare])
|
||||
- Core: Allow overriding polling interval in platforms and [via config][polling-config] ([@balloob])
|
||||
- Frontend: support for a [default view] have been added to replace the show all view ([@balloob])
|
||||
- Component: Added [apcupsd] component ([@flyte])
|
||||
- Component: Added component to log values to [Splunk] ([@miniconfig])
|
||||
- Component: Added [garage door] component including [Wink] support ([@xrolfex])
|
||||
- Component: Added [input_select] component ([@balloob])
|
||||
- Component: Added [proximity] component to track people closest to a location ([@nickwaring], [@Bart274] )
|
||||
- Component: Added support for [Bloomsky Weather Station] ([@haraldnagel])
|
||||
- Component: Added support for pushing stats to [graphite] ([@kk7ds])
|
||||
- Component: Added support for [SCSGate] devices ([@flavio])
|
||||
- Component: Added [weblink] component to link to other pages ([@MagnusKnutas])
|
||||
- Component: Support for Ubiquiti mFI [sensors][mfi.sensor] and [switchable devices][mfi.switch] added ([@kk7ds])
|
||||
- Alarm control panel: Added [Caddx/GE/Interlogix NetworX][nx584] support ([@kk7ds])
|
||||
- Camera: [MJPEG] camera's will now show real stream instead of a 2fps stream ([@stjohnjohnson])
|
||||
- Camera: Added [Unifi video cameras][unifi] support ([@kk7ds])
|
||||
- Device Tracker: [Aruba] platform now uses SSH instead of telnet ([@carlosmgr])
|
||||
- History: Show correct graphs for thermostats ([@sdague])
|
||||
- Light: Added [MySensors] support ([@MartinHjelmare])
|
||||
- Lock: Added [Verisure] support ([@turbokongen])
|
||||
- Media Player: Added [Samsung TV] support ([@stefan-jonasson])
|
||||
- Media Player: Added [Snapcast] support ([@happyleavesaoc])
|
||||
- MQTT: Allow using templates in [publish service][mqtt-publish] ([@flyte])
|
||||
- Notify: Added [REST] support ([@Theb-1])
|
||||
- Sensor: Added [Speedtest.net] support ([@nkgilley])
|
||||
- Switch: Added [template] platform ([@pavoni])
|
||||
- Thermostat: Support for [Honeywell] in the US added ([@kk7ds])
|
||||
- Z-Wave: Allow [configuring polling][zwave-polling] and [support scenes][zwave-scene] ([@lukas-hetzenecker])
|
||||
- Bug fixes and improvements by [@persandstrom], [@fabaff], [@balloob], [@pavoni], [@philipbl], [@MartinHjelmare], [@rmkraus], [@molobrakos], [@lukas-hetzenecker], [@TangoAlpha], [@deisi], [@Danielhiversen], [@roqeer], [@jaharkes]
|
||||
|
||||
[@rmkraus]: https://github.com/rmkraus/
|
||||
[@MartinHjelmare]: https://github.com/MartinHjelmare/
|
||||
[@balloob]: https://github.com/balloob/
|
||||
[@flyte]: https://github.com/flyte/
|
||||
[@miniconfig]: https://github.com/miniconfig/
|
||||
[@xrolfex]: https://github.com/xrolfex/
|
||||
[@nickwaring]: https://github.com/nickwaring/
|
||||
[@Bart274]: https://github.com/Bart274/
|
||||
[@haraldnagel]: https://github.com/haraldnagel/
|
||||
[@kk7ds]: https://github.com/kk7ds/
|
||||
[@flavio]: https://github.com/flavio/
|
||||
[@MagnusKnutas]: https://github.com/MagnusKnutas/
|
||||
[@stjohnjohnson]: https://github.com/stjohnjohnson/
|
||||
[@carlosmgr]: https://github.com/carlosmgr/
|
||||
[@sdague]: https://github.com/sdague/
|
||||
[@turbokongen]: https://github.com/turbokongen/
|
||||
[@stefan-jonasson]: https://github.com/stefan-jonasson/
|
||||
[@happyleavesaoc]: https://github.com/happyleavesaoc/
|
||||
[@Theb-1]: https://github.com/Theb-1/
|
||||
[@nkgilley]: https://github.com/nkgilley/
|
||||
[@pavoni]: https://github.com/pavoni/
|
||||
[@lukas-hetzenecker]: https://github.com/lukas-hetzenecker/
|
||||
[@persandstrom]: https://github.com/persandstrom/
|
||||
[@fabaff]: https://github.com/fabaff/
|
||||
[@philipbl]: https://github.com/philipbl/
|
||||
[@molobrakos]: https://github.com/molobrakos/
|
||||
[@TangoAlpha]: https://github.com/TangoAlpha/
|
||||
[@deisi]: https://github.com/deisi/
|
||||
[@Danielhiversen]: https://github.com/Danielhiversen/
|
||||
[@roqeer]: https://github.com/roqeer/
|
||||
[@jaharkes]: https://github.com/jaharkes/
|
||||
[polling-config]: /cookbook/customize_polling_interval/
|
||||
[default view]: /components/group/
|
||||
[apcupsd]: /components/apcupsd/
|
||||
[Splunk]: /components/splunk/
|
||||
[garage door]: /components/garage_door/
|
||||
[Wink]: /components/garage_door.wink/
|
||||
[input_select]: /components/input_select/
|
||||
[proximity]: /components/proximity/
|
||||
[Bloomsky Weather Station]: /components/bloomsky/
|
||||
[graphite]: /components/graphite/
|
||||
[SCSGate]: /components/scsgate/
|
||||
[weblink]: /components/weblink/
|
||||
[mfi.switch]: /components/switch.mfi/
|
||||
[mfi.sensor]: /components/sensor.mfi/
|
||||
[nx584]: /components/alarm_control_panel.nx584/
|
||||
[MJPEG]: /components/camera.mjpeg/
|
||||
[unifi]: /components/camera.uvc/
|
||||
[Aruba]: /components/device_tracker.aruba/
|
||||
[History]: /components/history/
|
||||
[MySensors]: /components/light.mysensors/
|
||||
[Verisure]: /components/lock.verisure/
|
||||
[Speedtest.net]: /components/sensor.speedtest/
|
||||
[Samsung TV]: /components/media_player.samsungtv/
|
||||
[Snapcast]: /components/media_player.snapcast/
|
||||
[mqtt-publish]: /components/mqtt/#publish-service
|
||||
[REST]: /components/notify.rest/
|
||||
[template]: /components/switch.template/
|
||||
[Honeywell]: /components/thermostat.honeywell/
|
||||
[zwave-polling]: /components/zwave/#configuration
|
||||
[zwave-scene]: /components/zwave/#events
|
141
source/_posts/2016-02-18-multi-room-audio-with-snapcast.markdown
Normal file
@ -0,0 +1,141 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Multi-room audio with Snapcast, Mopidy, and Home Assistant"
|
||||
date: 2016-02-18 00:10:56 -0500
|
||||
author: happyleavesaoc
|
||||
comments: true
|
||||
categories: How-To
|
||||
date_formatted: "February 18, 2016"
|
||||
og_image: /images/blog/2016-02-snapcast/diagram.png
|
||||
---
|
||||
|
||||
Would you like to listen to music in every room in your home, controlled from one source? Then multi-room audio is for you.
|
||||
|
||||
Multi-room audio can be achieved by having a computer attached to speakers in every room. On each computer, services run to play and/or control the audio. With this DIY approach, the kind of computer and speakers is very much up to you. It could be your desktop computer with attached powered speakers, your HTPC hooked up to your TV and receiver, a Raspberry Pi with Amp or DAC, or even an Android device.
|
||||
|
||||
You'll need two key software packages, besides Home Assistant. The first is [Mopidy](https://www.mopidy.com/), a music server that can play local files, or connect to streaming music services like Spotify. The second is [Snapcast](https://github.com/badaix/snapcast/), which enables synchronized audio streaming across your network. Both can be integrated into Home Assistant. Each room audio device will run an instance of the Snapcast client, and optionally a Mopidy instance. Your server will run a special instance of Mopidy and the Snapcast server.
|
||||
|
||||
Finally, you also need a player to control Mopidy. Any MPD-compatible player will work, and there are several [Mopidy-only web-based options](https://docs.mopidy.com/en/latest/ext/web/#ext-web) available. On Android, [Remotedy](https://play.google.com/store/apps/details?id=se.anil.remotedy) is particularly nice since you can access multiple Mopidy instances in one place.
|
||||
|
||||
Home Assistant will provide device status, and volume control for each room. If you want to play music in all your rooms (on all your clients), access the server instance of Mopidy. If you want to play music only in a specific room, access that specific Mopidy instance. If you're using a web UI for Mopidy, you can add links to each instance in Home Assistant with the [weblink] component.
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/blog/2016-02-snapcast/diagram.png'>
|
||||
</p>
|
||||
|
||||
<!--more-->
|
||||
|
||||
## Staging
|
||||
|
||||
- [Install](https://www.mopidy.com/) Mopidy (2.0.0 or greater)
|
||||
- [Download](https://github.com/badaix/snapcast/releases/) and [Install](https://github.com/badaix/snapcast/tree/v0.5.0-beta-1#installation) Snapcast (0.5.0 or greater)
|
||||
|
||||
## Configure Mopidy
|
||||
|
||||
Mopidy can be run with multiple configuration files, each extending the previous file. This is helpful when we're running multiple instances with varying functionality.
|
||||
|
||||
|
||||
### core.conf
|
||||
The core configuration is shared between all instances:
|
||||
|
||||
```conf
|
||||
[mpd]
|
||||
hostname = ::
|
||||
|
||||
[http]
|
||||
hostname = ::
|
||||
|
||||
[audio]
|
||||
output = alsasink
|
||||
|
||||
[spotify]
|
||||
username = <redacted>
|
||||
password = <redacted>
|
||||
```
|
||||
|
||||
### local.conf
|
||||
Add the local configuration on computers that have local media files:
|
||||
|
||||
```conf
|
||||
[local]
|
||||
media_dir = <your/music/here>
|
||||
```
|
||||
|
||||
### snapcast.conf
|
||||
Finally, the Mopidy instance that connects with Snapcast needs special configuration. Run on a different port to avoid conflicts if you have a second Mopidy instance running on your computer. The audio output is sent to a named pipe - Snapcast will read from there. Note that you may have to adjust the audio output attribute depending on your system and audio sources.
|
||||
|
||||
```conf
|
||||
[mpd]
|
||||
hostname = ::
|
||||
port = 6601
|
||||
|
||||
[http]
|
||||
hostname = ::
|
||||
port = 6681
|
||||
|
||||
[audio]
|
||||
output = audioresample ! audio/x-raw,rate=48000,channels=2,format=S16LE ! audioconvert ! wavenc ! filesink location=/tmp/snapfifo
|
||||
```
|
||||
|
||||
## Run Mopidy
|
||||
|
||||
To run a room-specific instance:
|
||||
|
||||
```bash
|
||||
$ mopidy --config $CONF_DIR/core.conf
|
||||
```
|
||||
|
||||
To run a room-specific instance with local media:
|
||||
|
||||
```bash
|
||||
$ mopidy --config $CONF_DIR/core.conf:$CONF_DIR/local.conf
|
||||
```
|
||||
|
||||
To run the special Snapcast-connected instance (with local media):
|
||||
|
||||
```bash
|
||||
$ mopidy --config $CONF_DIR/core.conf:$CONF_DIR/local.conf:$CONF_DIR/snapcast.conf
|
||||
```
|
||||
|
||||
## Run Snapcast
|
||||
|
||||
Start the `snapserver` on the same server running Mopidy with the snapcast configuration.
|
||||
|
||||
```bash
|
||||
$ snapserver # or use systemd
|
||||
```
|
||||
|
||||
Start the `snapclient` on computers that will be playing audio.
|
||||
|
||||
```bash
|
||||
$ snapclient # or use systemd, add -h <server host> if necessary
|
||||
```
|
||||
|
||||
## Configure Snapcast
|
||||
|
||||
There are a number of snapcast configuration options, but the one relevant to Home Assistant is the client names. You can set them in the snapserver configuration file, by default located at `~/.config/Snapcast/settings.json`. Only edit this file while the `snapserver` is not running. Modify the `name` JSON value to your liking - this is how the client will be named in Home Assistant.
|
||||
|
||||
## Configure Home Assistant
|
||||
|
||||
Use the [mpd] and [snapcast] components. Optionally, use [weblink] to provide easy access to a Mopidy web UI.
|
||||
|
||||
```yaml
|
||||
media_player:
|
||||
- platform: snapcast
|
||||
host: xxxxx
|
||||
- platform: mpd
|
||||
server: xxxx
|
||||
location: Multi-Room Controller
|
||||
- platform: mpd
|
||||
server: xxx
|
||||
location: Room 1
|
||||
|
||||
weblink:
|
||||
entities:
|
||||
- name: Multi-Room Player
|
||||
url: xxxx
|
||||
```
|
||||
|
||||
[weblink]: /components/weblink/
|
||||
[snapcast]: /components/media_player.snapcast/
|
||||
[mpd]: /components/media_player.mpd/
|
61
source/_posts/2016-02-20-community-highlights.markdown
Normal file
@ -0,0 +1,61 @@
|
||||
---
|
||||
layout: post
|
||||
title: Community Highlights
|
||||
description: Another round-up of the amazing things from our community including Alexa Lightning skill and HomeKit integration.
|
||||
date: 2016-02-20 01:06:00 -0800
|
||||
date_formatted: "February 20, 2016"
|
||||
author: Paulus Schoutsen
|
||||
author_twitter: balloob
|
||||
comments: true
|
||||
categories: Community
|
||||
og_image: /images/blog/2016-02-community-highlights/part-of-the-thing.png
|
||||
---
|
||||
|
||||
Home Assistant land has been busy and a lot of people have been creating awesome stuff. We've added [a cookbook section](/cookbook/) to the website full of examples how you can automate different things. Make sure you take a look and share your own recipes too!
|
||||
|
||||
### {% linkable_title Home automation demo by Part of the Thing %}
|
||||
|
||||
<div class='videoWrapper'>
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/Mc_29EC3aZw" frameborder="0" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
### {% linkable_title Haaska - Alexa Skill Adapter for Home Assistant %}
|
||||
|
||||
Haaska allows you to control lights, switches, and scenes exposed by your Home Assistant instance using an Amazon Echo. This is different from our own [Alexa](/components/alexa/) component because it will teach the Amazon Echo directly about the devices instead of teaching it to talk to Home Assistant. It will not allow you to use custom sentences but it will allow you to skip the 'Ask Home Assistant' part when giving commands:
|
||||
|
||||
- "Alexa, set kitchen to twenty percent"
|
||||
- "Alexa, turn on evening scene"
|
||||
- "Alexa, turn off bedroom light"
|
||||
|
||||
[Haaska on GitHub](https://github.com/auchter/haaska)
|
||||
|
||||
### {% linkable_title Integrating Home Assistant with HomeKit %}
|
||||
|
||||
Contributor Maddox has created a plugin for HomeBridge, an open-source HomeKit bridge. This will allow you to control your home using Siri on your Apple devices. HomeBridge has recently restructured so you'll have to access the plugin in the legacy plugin package.
|
||||
|
||||
Example config.json entry to load Home Assistant:
|
||||
|
||||
```json
|
||||
"platforms": [
|
||||
{
|
||||
"platform": "HomeAssistant",
|
||||
"name": "HomeAssistant",
|
||||
"host": "http://192.168.1.50:8123",
|
||||
"password": "xxx",
|
||||
"supported_types": ["light", "switch", "media_player", "scene"]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
[HomeBridge on GitHub](https://github.com/nfarina/homebridge)
|
||||
[HomeBridge Legacy Plugins on GitHub](https://github.com/nfarina/homebridge-legacy-plugins)
|
||||
[Home Assistant on HomeBridge instructions](https://github.com/nfarina/homebridge-legacy-plugins/blob/master/platforms/HomeAssistant.js)
|
||||
|
||||
### {% linkable_title Custom alarm system with Home Assistant %}
|
||||
|
||||
User thaijames [describes in the Home Assistant forums](https://automic.us/forum/viewtopic.php?f=4&t=43&hilit=nfc) how he has created his own NFC-based alarm system using Home Assistant, DIY components and Garfield dolls.
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/blog/2016-02-community-highlights/garfield-nfc.png'>
|
||||
Hold your NFC tag against the belly of Garfield to unlock the alarm.
|
||||
</p>
|
@ -14,7 +14,7 @@ hide_github_edit: true
|
||||
This is a community currated list of different ways to use Home Assistant. New recipes can be added via the [home-assistant.io repository](https://github.com/balloob/home-assistant.io/tree/master/source/_cookbook).
|
||||
|
||||
{% assign cookbook = site.cookbook | sort: 'title' %}
|
||||
{% assign categories = cookbook | sort: 'ha_category' | map: 'ha_category' | uniq %}
|
||||
{% assign categories = cookbook | map: 'ha_category' | uniq | sort %}
|
||||
|
||||
{% for category in categories %}
|
||||
### {% linkable_title {{ category }} %}
|
||||
@ -27,7 +27,7 @@ Some users keep a public scrubbed copy of their `configuration.yaml` to learn fr
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% for recipe in site.cookbook %}
|
||||
{% for recipe in cookbook %}
|
||||
{% if recipe.ha_category == category %}
|
||||
{% if recipe.ha_external_link %}
|
||||
* [{{recipe.title}} <i class="icon-external-link"></i>]({{recipe.ha_external_link}})
|
||||
|
@ -9,9 +9,9 @@ sharing: true
|
||||
footer: true
|
||||
---
|
||||
|
||||
Home Assistant offers [built-in components]({{site_root}}/components/) but it is easy to build your own. If you are the kind of person that likes to learn from code rather then guide then head over to the [`config/custom_components`](https://github.com/balloob/home-assistant/tree/master/config/custom_components) folder in the repository for two example components.
|
||||
Home Assistant offers [built-in components]({{site_root}}/components/) but it is easy to build your own. If you are the kind of person that likes to learn from code rather then guide then head over to the [`config/custom_components`](https://github.com/balloob/home-assistant/tree/master/config/custom_components) folder in the repository for two example components. Or visit the [Custom Python Component Examples]({{site_root}}/cookbook/#custom-python-component-examples).
|
||||
|
||||
The first is [hello_world.py](https://github.com/balloob/home-assistant/blob/master/config/custom_components/hello_world.py), which is the classic Hello World example for Home Assistant. The second one is [example.py](https://github.com/balloob/home-assistant/blob/master/config/custom_components/example.py) which showcases various ways you can tap into Home Assistant to be notified when certain events occur.
|
||||
The first is [hello_world.py](https://github.com/balloob/home-assistant/blob/master/config/custom_components/hello_world.py) (this is similar to the [Basic State Setting Example](https://home-assistant.io/cookbook/python_component_basic_state/)), which is the classic "Hello World" example for Home Assistant. The second one is [example.py](https://github.com/balloob/home-assistant/blob/master/config/custom_components/example.py) which showcases various ways you can tap into Home Assistant to be notified when certain events occur.
|
||||
|
||||
If you want to load these components in Home Assistant, add the following lines to your `configuration.yaml` file:
|
||||
|
||||
@ -55,7 +55,7 @@ After loading, the bootstrapper will call `setup(hass, config)` method on the co
|
||||
|
||||
### {% linkable_title `hass`: the Home Assistant instance %}
|
||||
|
||||
The Home Assistant instace contains three objects to help you interact with the system.
|
||||
The Home Assistant instance contains three objects to help you interact with the system.
|
||||
|
||||
| Object | Description |
|
||||
| ------ | ----------- |
|
||||
@ -66,7 +66,7 @@ The Home Assistant instace contains three objects to help you interact with the
|
||||
|
||||
### {% linkable_title `config`: User given configuration. %}
|
||||
|
||||
The `config` paramter is a dictionary containing the user supplied configuration. The keys of the dictionary are the component names and the value is another dictionary with the component configuration.
|
||||
The `config` parameter is a dictionary containing the user supplied configuration. The keys of the dictionary are the component names and the value is another dictionary with the component configuration.
|
||||
|
||||
If your configuration file contains the following lines:
|
||||
|
||||
|
@ -72,18 +72,24 @@ Polymer build architecture diagram
|
||||
|
||||
# {% linkable_title Adding state cards %}
|
||||
|
||||
The main interface of Home Assistant is a list of the current entities and their states. For each entity in the system, a state card will be rendered. State cards will show a state badge, the name of the entity, when the state has last changed and the current state or a control to interact with it.
|
||||
The main interface of Home Assistant is a list of the current entities and their states. For each entity in the system, a state card will be rendered. State cards will show an icon, the name of the entity, when the state has last changed and the current state or a control to interact with it.
|
||||
|
||||

|
||||

|
||||
|
||||
The different card types can be found [here](https://github.com/balloob/home-assistant-polymer/tree/master/src/state-summary).
|
||||
|
||||
Adding a custom card type can be done with a few simple steps. For this example we will add a new state card for the domain `camera`: _(All files in this example link to their source-code)_
|
||||
Sensors, when not [grouped](/components/group/), are shown as so-called badges on top of the state cards.
|
||||
|
||||
1. Add `'camera'` to the array `DOMAINS_WITH_CARD` in the file [`/util/state-card-type.js`](https://github.com/balloob/home-assistant-polymer/blob/master/src/util/state-card-type.js#L3-L4).
|
||||
2. Create the files `state-card-camera.html` and `state-card-camera.js` in the folder [`/state-summary/`](https://github.com/balloob/home-assistant-polymer/tree/master/src/state-summary).
|
||||
3. Add `require('./state-card-camera')` to [`state-card-content.js`](https://github.com/balloob/home-assistant-polymer/blob/master/src/state-summary/state-card-content.js).
|
||||
4. Add `<link rel="import" href="state-card-camera.html">` to [`state-card-content.html`](https://github.com/balloob/home-assistant-polymer/blob/master/src/state-summary/state-card-content.html).
|
||||

|
||||
|
||||
The different badges are located in the file [`/src/components/entity/ha-state-label-badge.js`](https://github.com/balloob/home-assistant-polymer/blob/master/src/components/entity/ha-state-label-badge.js).
|
||||
|
||||
Adding a custom card type can be done with a few simple steps. For this example we will add a new state card for the domain `camera`:
|
||||
|
||||
1. Add `'camera'` to the array `DOMAINS_WITH_CARD` in the file [/util/state-card-type.js](https://github.com/balloob/home-assistant-polymer/blob/master/src/util/state-card-type.js#L3-L4).
|
||||
2. Create the files `state-card-camera.html` and `state-card-camera.js` in the folder [/state-summary/](https://github.com/balloob/home-assistant-polymer/tree/master/src/state-summary).
|
||||
3. Add `require('./state-card-camera')` to [state-card-content.js](https://github.com/balloob/home-assistant-polymer/blob/master/src/state-summary/state-card-content.js).
|
||||
4. Add `<link rel="import" href="state-card-camera.html">` to [state-card-content.html](https://github.com/balloob/home-assistant-polymer/blob/master/src/state-summary/state-card-content.html).
|
||||
|
||||
# {% linkable_title More info screens for custom types %}
|
||||
|
||||
@ -95,9 +101,8 @@ Whenever the user taps or clicks on one of the cards, a more info dialog will sh
|
||||
</p>
|
||||
|
||||
The instructions to add a more info dialog are very similar to adding a new card type. This example will add a new more info component for the domain `camera`:
|
||||
_(All files in this example link to their source-code)_
|
||||
|
||||
1. Add `'camera'` to the array `DOMAINS_WITH_MORE_INFO` in the file [`util/state-more-info-type.js`](https://github.com/balloob/home-assistant-polymer/blob/master/src/util/state-more-info-type.js#L1).
|
||||
2. Create the files `more-info-camera.html` and `more-info-camera.js` in the folder [`/more-infos`](https://github.com/balloob/home-assistant-polymer/tree/master/src/more-infos).
|
||||
3. Add `require('./more-info-camera')` to [`more-info-content.js`](https://github.com/balloob/home-assistant-polymer/blob/master/src/more-infos/more-info-content.js)
|
||||
4. Add `<link rel="import" href="more-info-camera.html">` to [`more-info-content.html`](https://github.com/balloob/home-assistant-polymer/blob/master/src/more-infos/more-info-content.html)
|
||||
1. Add `'camera'` to the array `DOMAINS_WITH_MORE_INFO` in the file [util/state-more-info-type.js](https://github.com/balloob/home-assistant-polymer/blob/master/src/util/state-more-info-type.js#L1).
|
||||
2. Create the files `more-info-camera.html` and `more-info-camera.js` in the folder [/more-infos](https://github.com/balloob/home-assistant-polymer/tree/master/src/more-infos).
|
||||
3. Add `require('./more-info-camera')` to [more-info-content.js](https://github.com/balloob/home-assistant-polymer/blob/master/src/more-infos/more-info-content.js)
|
||||
4. Add `<link rel="import" href="more-info-camera.html">` to [more-info-content.html](https://github.com/balloob/home-assistant-polymer/blob/master/src/more-infos/more-info-content.html)
|
||||
|
@ -40,7 +40,7 @@ Improvements to Home Assistant should be submitted one feature at a time using G
|
||||
`git checkout -b some-feature`
|
||||
2. Make the changes you want
|
||||
3. Test your changes and check for style violations
|
||||
`./script/test`
|
||||
`tox`
|
||||
4. Commit the changes
|
||||
`git add .`
|
||||
`git commit -m "Added some-feature"`
|
||||
@ -48,6 +48,12 @@ Improvements to Home Assistant should be submitted one feature at a time using G
|
||||
`git push origin HEAD`
|
||||
6. Follow [these steps](https://help.github.com/articles/creating-a-pull-request/) to create your pull request.
|
||||
|
||||
Note that the above requires `tox` to be installed. If you don't have it, do this:
|
||||
|
||||
```bash
|
||||
$ pip3 install tox
|
||||
```
|
||||
|
||||
### {% linkable_title Further reading %}
|
||||
|
||||
- [Home Assistant Architecture](/developers/architecture/)
|
||||
|
@ -389,6 +389,14 @@ Returns the rendered template in plain text.
|
||||
Paulus is at work!
|
||||
```
|
||||
|
||||
Sample `curl` command:
|
||||
|
||||
```bash
|
||||
$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \
|
||||
-d '{"template": "It is {{ now }}!"}' \
|
||||
http://localhost:8123/api/template
|
||||
```
|
||||
|
||||
#### {% linkable_title POST /api/event_forwarding %}
|
||||
Setup event forwarding to another Home Assistant instance.
|
||||
|
||||
|
@ -13,9 +13,11 @@ footer: true
|
||||
<input name='advanced-installs' type='radio' id='upstart-install' checked>
|
||||
<input name='advanced-installs' type='radio' id='systemd-install'>
|
||||
<input name='advanced-installs' type='radio' id='osx-install'>
|
||||
<input name='advanced-installs' type='radio' id='synology-install'>
|
||||
<label class='menu-selector upstart' for='upstart-install'>Upstart Daemon</label>
|
||||
<label class='menu-selector systemd' for='systemd-install'>Systemd Daemon</label>
|
||||
<label class='menu-selector osx' for='osx-install'>OS X</label>
|
||||
<label class='menu-selector synology' for='synology-install'>Synology NAS</label>
|
||||
|
||||
<div class='advanced-installs upstart' markdown='1'>
|
||||
Many linux distributions use the Upstart system (or similar) for managing daemons. Typically, systems based on Debian 7 or previous use Upstart. This includes Ubuntu releases before 15.04 and all current Raspian releases. If you are unsure if your system is using Upstart, you may check with the following command:
|
||||
@ -130,6 +132,47 @@ Home Assistant has been uninstalled.
|
||||
```
|
||||
|
||||
</div> <!-- OSX -->
|
||||
|
||||
<div class='advanced-installs synology' markdown='1'>
|
||||
To get Home Assistant to automatically start when you boot your Synology NAS:
|
||||
|
||||
SSH onto your synology & login as admin or root
|
||||
|
||||
```bash
|
||||
$ cd /volume1/homeassistant
|
||||
```
|
||||
|
||||
Create "homeassistant.conf" file using the following code
|
||||
|
||||
```bash
|
||||
# only start this service after the httpd user process has started
|
||||
start on started httpd-user
|
||||
|
||||
# stop the service gracefully if the runlevel changes to 'reboot'
|
||||
stop on runlevel [06]
|
||||
|
||||
# run the scripts as the 'http' user. Running as root (the default) is a bad ide
|
||||
#setuid admin
|
||||
|
||||
# exec the process. Use fully formed path names so that there is no reliance on
|
||||
# the 'www' file is a node.js script which starts the foobar application.
|
||||
exec /bin/sh /volume1/homeassistant/hass-daemon start
|
||||
```
|
||||
|
||||
Register the autostart
|
||||
|
||||
```bash
|
||||
$ ln -s homeassistant-conf /etc/init/homeassistant-conf
|
||||
```
|
||||
|
||||
Make the relevant files executable:
|
||||
|
||||
```bash
|
||||
$ chmod -r 777 /etc/init/homeassistant-conf
|
||||
```
|
||||
|
||||
That's it - reboot your NAS and Home Assistant should automatically start
|
||||
</div> <!-- SYNOLOGY -->
|
||||
</div>
|
||||
|
||||
### [« Back to Getting Started](/getting-started/)
|
||||
|
@ -13,9 +13,11 @@ footer: true
|
||||
<input name='install-instructions' type='radio' id='normal-install' checked>
|
||||
<input name='install-instructions' type='radio' id='raspberry-install'>
|
||||
<input name='install-instructions' type='radio' id='docker-install'>
|
||||
<label class='menu-selector normal' for='normal-install'>Install on local machine</label>
|
||||
<label class='menu-selector raspberry' for='raspberry-install'>Install on a Raspberry Pi</label>
|
||||
<label class='menu-selector docker' for='docker-install'>Install using Docker</label>
|
||||
<input name='install-instructions' type='radio' id='synology-install'>
|
||||
<label class='menu-selector normal' for='normal-install'>Local machine</label>
|
||||
<label class='menu-selector raspberry' for='raspberry-install'>Raspberry Pi</label>
|
||||
<label class='menu-selector docker' for='docker-install'>Docker</label>
|
||||
<label class='menu-selector synology' for='synology-install'>Synology NAS</label>
|
||||
|
||||
<div class='install-instructions normal' markdown='1'>
|
||||
Installing and running Home Assistant on your local machine is easy. Make sure you have [Python 3.4 or higher](https://www.python.org/downloads/) installed and execute the following code in a console:
|
||||
@ -29,8 +31,8 @@ Running these commands will:
|
||||
|
||||
- Install Home Assistant
|
||||
- Launch Home Assistant and serve the web interface on [http://localhost:8123](http://localhost:8123)
|
||||
|
||||
|
||||
|
||||
|
||||
If would prefer to watch a video tutorial however, [tktino](https://github.com/tktino) has made some great ones.
|
||||
|
||||
- [Windows 10](https://www.youtube.com/watch?v=X27eVvuqwnY)
|
||||
@ -74,6 +76,199 @@ Running these commands will:
|
||||
- Launch Home Assistant and serve the web interface on [http://localhost:8123](http://localhost:8123)
|
||||
|
||||
</div> <!-- INSTALL-INSTRUCTIONS RASPBERRY -->
|
||||
|
||||
<div class='install-instructions synology' markdown='1'>
|
||||
|
||||
The following configuration has been tested on Synology 415+ running DSM 5.2-5644 Update 3.
|
||||
|
||||
Running these commands will:
|
||||
|
||||
- Install Home Assistant
|
||||
- Enable Home Assistant to be launched on [http://localhost:8123](http://localhost:8123)
|
||||
|
||||
Using the Synology webadmin:
|
||||
|
||||
- Install python3 using the Synology package centre
|
||||
- Create homeassistant user and add to the "users" group
|
||||
|
||||
SSH onto your synology & login as admin or root
|
||||
|
||||
Check the path to python3 (assumed to be /usr/local/python3/bin)
|
||||
|
||||
```bash
|
||||
$ cd /usr/local/python3/bin
|
||||
```
|
||||
|
||||
Use PIP to install Homeassistant package
|
||||
|
||||
```bash
|
||||
$ pip3 install homeassistant
|
||||
```
|
||||
|
||||
Create homeassistant config directory & switch to it
|
||||
|
||||
```bash
|
||||
$ mkdir /volume1/homeassistant
|
||||
$ cd /volume1/homeassistant
|
||||
```
|
||||
|
||||
Create hass-daemon file using the following code (edit the variables in uppercase if necessary)
|
||||
|
||||
```bash
|
||||
#!/bin/sh
|
||||
|
||||
# Package
|
||||
PACKAGE="homeassistant"
|
||||
DNAME="Home Assistant"
|
||||
|
||||
# Others
|
||||
USER="homeassistant"
|
||||
PYTHON_DIR="/usr/local/python3/bin"
|
||||
PYTHON="$PYTHON_DIR/python3"
|
||||
HASS="$PYTHON_DIR/hass"
|
||||
INSTALL_DIR="/volume1/homeassistant"
|
||||
PID_FILE="$INSTALL_DIR/home-assistant.pid"
|
||||
FLAGS="-v --config $INSTALL_DIR --pid-file $PID_FILE --daemon"
|
||||
REDIRECT="> $INSTALL_DIR/home-assistant.log 2>&1"
|
||||
|
||||
start_daemon ()
|
||||
{
|
||||
su ${USER} -s /bin/sh -c "$PYTHON $HASS $FLAGS $REDIRECT;"
|
||||
}
|
||||
|
||||
stop_daemon ()
|
||||
{
|
||||
kill `cat ${PID_FILE}`
|
||||
wait_for_status 1 20 || kill -9 `cat ${PID_FILE}`
|
||||
rm -f ${PID_FILE}
|
||||
}
|
||||
|
||||
daemon_status ()
|
||||
{
|
||||
if [ -f ${PID_FILE} ] && kill -0 `cat ${PID_FILE}` > /dev/null 2>&1; then
|
||||
return
|
||||
fi
|
||||
rm -f ${PID_FILE}
|
||||
return 1
|
||||
}
|
||||
|
||||
wait_for_status ()
|
||||
{
|
||||
counter=$2
|
||||
while [ ${counter} -gt 0 ]; do
|
||||
daemon_status
|
||||
[ $? -eq $1 ] && return
|
||||
let counter=counter-1
|
||||
sleep 1
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
if daemon_status; then
|
||||
echo ${DNAME} is already running
|
||||
exit 0
|
||||
else
|
||||
echo Starting ${DNAME} ...
|
||||
start_daemon
|
||||
exit $?
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
if daemon_status; then
|
||||
echo Stopping ${DNAME} ...
|
||||
stop_daemon
|
||||
exit $?
|
||||
else
|
||||
echo ${DNAME} is not running
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
restart)
|
||||
if daemon_status; then
|
||||
echo Stopping ${DNAME} ...
|
||||
stop_daemon
|
||||
echo Starting ${DNAME} ...
|
||||
start_daemon
|
||||
exit $?
|
||||
else
|
||||
echo ${DNAME} is not running
|
||||
echo Starting ${DNAME} ...
|
||||
start_daemon
|
||||
exit $?
|
||||
fi
|
||||
;;
|
||||
status)
|
||||
if daemon_status; then
|
||||
echo ${DNAME} is running
|
||||
exit 0
|
||||
else
|
||||
echo ${DNAME} is not running
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
log)
|
||||
echo ${LOG_FILE}
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
```
|
||||
|
||||
Create links to python folders to make things easier in the future:
|
||||
|
||||
```bash
|
||||
$ ln -s /usr/local/python3/bin python3
|
||||
$ ln -s /usr/local/python3/lib/python3.4/site-packages/homeassistant
|
||||
```
|
||||
|
||||
Set the owner and permissions on your config folder
|
||||
|
||||
```bash
|
||||
$ chown -r homeassistant:users /volume1/homeassistant
|
||||
$ chmod -r 660 /volume1/homeassistant
|
||||
```
|
||||
|
||||
Make the daemon file executable:
|
||||
|
||||
```bash
|
||||
$ chmod -r 777 /volume1/homeassistant/hass-daemon
|
||||
```
|
||||
|
||||
Copy your configuration.yaml file into the config folder
|
||||
That's it... you're all set to go
|
||||
|
||||
Here are some useful commands:
|
||||
|
||||
- Start Home Assistant:
|
||||
|
||||
```bash
|
||||
$ sh hass-daemon start
|
||||
```
|
||||
|
||||
- Stop Home Assistant:
|
||||
|
||||
```bash
|
||||
$ sh hass-daemon stop
|
||||
```
|
||||
|
||||
- Restart Home Assistant:
|
||||
|
||||
```bash
|
||||
$ sh hass-daemon restart
|
||||
```
|
||||
|
||||
- Upgrade Home Assistant::
|
||||
|
||||
```bash
|
||||
$ python3/pip3 install --upgrade homeassistant
|
||||
```
|
||||
|
||||
</div> <!-- INSTALL-INSTRUCTIONS SYNOLOGY -->
|
||||
</div>
|
||||
|
||||
### {% linkable_title Troubleshooting %}
|
||||
@ -84,7 +279,6 @@ For additional help, in addition to this site, there are four sources:
|
||||
|
||||
- [Forum](https://automic.us/forum/)
|
||||
- [Gitter Chatroom](https://gitter.im/balloob/home-assistant) for general Home Assistant discussions and questions.
|
||||
- [Development Mailing List](https://groups.google.com/forum/#!forum/home-assistant-dev) for development related questions and discussing new features.
|
||||
- [GitHub Page](https://github.com/balloob/home-assistant/issues) for issue reporting.
|
||||
|
||||
### What's next
|
||||
|
@ -52,36 +52,54 @@ script:
|
||||
{% endif %}{% endraw %}
|
||||
```
|
||||
|
||||
### {% linkable_title Home Assistant template extensions %}
|
||||
## {% linkable_title Home Assistant template extensions %}
|
||||
|
||||
Home Assistant adds extensions to allow templates to access all of the current states:
|
||||
|
||||
- Iterating `states` will yield each state sorted alphabetically by entity ID
|
||||
- Iterating `states.domain` will yield each state of that domain sorted alphabetically by entity ID
|
||||
- `states.sensor.temperature` returns the state object for `sensor.temperature`
|
||||
- Iterating `states` will yield each state sorted alphabetically by entity ID.
|
||||
- Iterating `states.domain` will yield each state of that domain sorted alphabetically by entity ID.
|
||||
- `states.sensor.temperature` returns the state object for `sensor.temperature`.
|
||||
- `states('device_tracker.paulus')` will return the state string (not the object) of the given entity or `unknown` if it doesn't exist.
|
||||
- `is_state('device_tracker.paulus', 'home')` will test if the given entity is specified state.
|
||||
- `is_state_attr('device_tracker.paulus', 'battery', 40)` will test if the given entity is specified state.
|
||||
- Filter `multiply(x)` will convert the input to a number and multiply it with `x`
|
||||
- Filter `multiply(x)` will convert the input to a number and multiply it with `x`.
|
||||
- Filter `round(x)` will convert the input to a number and round it to `x` decimals.
|
||||
- `now` will be rendered as current time in your time zone.
|
||||
- `utcnow` will be rendered as UTC time.
|
||||
- `distance()` will measure the distance in meters between home, entity, coordinates.
|
||||
- `closest()` will find the closest entity.
|
||||
|
||||
#### {% linkable_title Examples %}
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
### {% linkable_title States %}
|
||||
Next two statements result in same value if state exists. Second one will result in an error if state does not exist.
|
||||
|
||||
```jinja2
|
||||
{% raw %}
|
||||
# Next two statements result in same value if state exists
|
||||
# Second one will result in an error if state does not exist
|
||||
{{ states('device_tracker.paulus') }}
|
||||
{{ states.device_tracker.paulus.state }}
|
||||
{{ states.device_tracker.paulus.state }}{% endraw %}
|
||||
```
|
||||
|
||||
# Print an attribute if state is defined
|
||||
### {% linkable_title Attributes %}
|
||||
|
||||
Print an attribute if state is defined
|
||||
|
||||
```jinja2
|
||||
{% raw %}
|
||||
{% if states.device_tracker.paulus %}
|
||||
{{ states.device_tracker.paulus.attributes.battery }}
|
||||
{% else %}
|
||||
??
|
||||
{% endif %}
|
||||
{% endif %}{% endraw %}
|
||||
```
|
||||
|
||||
# Print out a list of all the sensor states
|
||||
### {% linkable_title Sensor states %}
|
||||
|
||||
Print out a list of all the sensor states.
|
||||
|
||||
```jinja2
|
||||
{% raw %}
|
||||
{% for state in states.sensor %}
|
||||
{{ state.entity_id }}={{ state.state }},
|
||||
{% endfor %}
|
||||
@ -99,6 +117,50 @@ Home Assistant adds extensions to allow templates to access all of the current s
|
||||
{%endif %}{% endraw %}
|
||||
```
|
||||
|
||||
### {% linkable_title Distance examples %}
|
||||
|
||||
If only 1 location is passed in will measure the distance from home.
|
||||
|
||||
```jinja2
|
||||
{% raw %}
|
||||
Using Lat Lng coordinates: {{ distance(123.45, 123.45) }}
|
||||
|
||||
Using State: {{ distance(device_tracker.paulus) }}
|
||||
|
||||
These can also be combined in any combination:
|
||||
{{ distance(123.45, 123.45, device_tracker.paulus) }}
|
||||
{{ distance(device_tracker.anne_therese, device_tracker.paulus) }}{% endraw %}
|
||||
```
|
||||
|
||||
### {% linkable_title Closest examples %}
|
||||
|
||||
Find entities closest to the Home Assistant location:
|
||||
|
||||
```jinja2
|
||||
{% raw %}
|
||||
Query all entities: {{ closest(states) }}
|
||||
Query all entities of a specific domain: {{ closest(states.device_tracker) }}
|
||||
Query all entities in group.children: {{ closest('group.children') }}
|
||||
Query all entities in group.children: {{ closest(states.group.children) }}{% endraw %}
|
||||
```
|
||||
|
||||
Find entities closest to a coordinate or another entity. All previous arguments still apply for 2nd argument.
|
||||
|
||||
```jinja2
|
||||
{% raw %}
|
||||
Closest to a coordinate: {{ closest(23.456, 23.456, 'group.children') }}
|
||||
Closest to an entity: {{ closest('zone.school', 'group.children') }}
|
||||
Closest to an entity: {{ closest(states.zone.school, 'group.children') }}{% endraw %}
|
||||
```
|
||||
|
||||
### {% linkable_title Combined %}
|
||||
Since closest returns a state, we can combine it with distance too
|
||||
|
||||
```jinja2
|
||||
{% raw %}
|
||||
{{ closest(states).name }} is {{ distance(closest(states)) }} meters away.{% endraw %}
|
||||
```
|
||||
|
||||
## {% linkable_title Processing incoming data %}
|
||||
|
||||
The other part of templating is processing incoming data. It will allow you to modify incoming data and extract only the data you care about. This will work only for platforms and components that mentioned support for this in their documentation.
|
||||
|
BIN
source/images/blog/2016-02-community-highlights/garfield-nfc.png
Normal file
After Width: | Height: | Size: 178 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 20 KiB |
BIN
source/images/blog/2016-02-release-13/social-img.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
source/images/blog/2016-02-snapcast/diagram.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
source/images/frontend/frontend-badges.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
source/images/frontend/frontend-cards1.png
Normal file
After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 7.6 KiB |
BIN
source/images/supported_brands/bus_scs.png
Normal file
After Width: | Height: | Size: 20 KiB |