13
_config.yml
@ -140,11 +140,14 @@ social:
|
||||
|
||||
# Home Assistant release details
|
||||
current_major_version: 0
|
||||
current_minor_version: 44
|
||||
current_patch_version: 2
|
||||
date_released: 2017-05-08
|
||||
current_minor_version: 45
|
||||
current_patch_version: 0
|
||||
date_released: 2017-05-20
|
||||
|
||||
# Either # or the anchor link to latest release notes in the blog post.
|
||||
# Must be prefixed with a # and have double quotes around it.
|
||||
# Example #release-0431---april-25
|
||||
patch_version_notes: "#release-0442---may-8"
|
||||
# Major release:
|
||||
patch_version_notes: "#"
|
||||
# Minor release (Example #release-0431---april-25):
|
||||
#patch_version_notes: "#release-0451---may-X"
|
||||
|
||||
|
75
source/_components/axis.markdown
Normal file
@ -0,0 +1,75 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Axis"
|
||||
description: "Instructions on how to setup devices from Axis Communications within Home Assistant."
|
||||
date: 2017-04-30 23:04
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: axis.png
|
||||
ha_category: Hub
|
||||
ha_release: "0.45"
|
||||
---
|
||||
|
||||
[Axis Communications](https://www.axis.com/) devices are surveillance cameras and other security related network connected hardware. Sensor API works with firmware 5.50 and newer.
|
||||
|
||||
Home Assistant will automatically discover their presence on your network.
|
||||
|
||||
You can also manually configure your devices by adding the following lines to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
axis:
|
||||
m1065lw:
|
||||
host: IP ADDRESS
|
||||
username: USERNAME
|
||||
password: PASSWORD
|
||||
include:
|
||||
- camera
|
||||
- motion
|
||||
- pir
|
||||
- audio
|
||||
- daynight
|
||||
trigger_time: 0
|
||||
location: köket
|
||||
```
|
||||
|
||||
## {% linkable_title Dependencies %}
|
||||
|
||||
```bash
|
||||
sudo apt-get install python3-gi gir1.2-gstreamer-1.0
|
||||
```
|
||||
|
||||
Depending on how you run Home Assistant you might be needed to symlink the `gi` module into your environment (e.g. in Hassbian):
|
||||
|
||||
```bash
|
||||
ln -s /usr/lib/python3/dist-packages/gi /srv/homeassistant/lib/python3.4/site-packages
|
||||
```
|
||||
|
||||
## {% linkable_title Configuration variables %}
|
||||
|
||||
- **device** (*Required*): Unique name
|
||||
- **host** (*Required*): The IP address to your Axis device.
|
||||
- **username** (*Optional*): The username to your Axis device. Default 'root'.
|
||||
- **password** (*Optional*): The password to your Axis device. Default 'pass'.
|
||||
- **trigger_time** (*Optional*): Minimum time (in seconds) a sensor should keep its positive value. Default 0.
|
||||
- **location** (*Optional*): Physical location of your Axis device. Default not set.
|
||||
|
||||
- **include** (*Required*): This cannot be empty else there would be no use adding the device at all.
|
||||
- **camera**: Stream MJPEG video to Home Assistant
|
||||
- **motion**: The Built in motion detection in Axis cameras
|
||||
- **vmd3**: ACAP Motion Detection app which has better algorithms for motion detection
|
||||
- **pir**: PIR sensor that can trigger on motion
|
||||
- **sound**: Sound detector
|
||||
- **daynight**: Certain cameras have day/night mode if they have built-in IR lights
|
||||
- **tampering**: signals when camera believes that it has been tampered with
|
||||
- **input**: trigger on whatever you have connected to device input port
|
||||
|
||||
<p class='note'>
|
||||
Any specific levels for triggers needs to be configured on the device.
|
||||
</p>
|
||||
|
||||
<p class='note'>
|
||||
It is recommended that you create a user on your Axis device specifically for Home Assistant. For all current functionality it is enough to create a user belonging to user group viewer.
|
||||
</p>
|
28
source/_components/binary_sensor.axis.markdown
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Axis Binary Sensor"
|
||||
description: "Instructions how to integrate Axis binary sensors into Home Assistant."
|
||||
date: 2017-04-01 19:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: axis.png
|
||||
ha_category: Binary Sensor
|
||||
ha_iot_class: "Local Push"
|
||||
ha_release: "0.45"
|
||||
---
|
||||
|
||||
The `Axis` platform allows you to get data from your [Axis](https://www.axis.com/) devices from within Home Assistant.
|
||||
|
||||
See the [Axis main component](/components/axis/) for configuration instructions.
|
||||
|
||||
The following sensor types are supported:
|
||||
|
||||
|
||||
* Motion detection
|
||||
* Passive IR motion detection
|
||||
* Sound detection
|
||||
* Day/night mode
|
||||
* Tampering detection
|
||||
* Input port
|
70
source/_components/binary_sensor.mystrom.markdown
Normal file
@ -0,0 +1,70 @@
|
||||
---
|
||||
layout: page
|
||||
title: "myStrom Binary Sensor"
|
||||
description: "Instructions how to integrate myStrom buttons into Home Assistant."
|
||||
date: 2017-04-14 08:15
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: mystrom.png
|
||||
ha_category: Binary Sensor
|
||||
ha_iot_class: "Local Polling"
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
|
||||
The `mystrom` binary sensor platform allows you to use [myStrom Wifi Buttons](https://mystrom.ch/wifi-button/) with Home Assistant. The myStrom Wifi Buttons support three and the myStrom WiFi Button + four different push pattern:
|
||||
|
||||
- `single`: Short push (approx. 1/2 seconds)
|
||||
- `double`: 2x sequential short pushes (within 2 seconds)
|
||||
- `long`: Long push (approx. 2 seconds)
|
||||
- `touch`: Touch of the button's surface (only affective for WiFi Button +)
|
||||
|
||||
The first usage of the pattern will create the binary sensor for the pattern. If the WiFi Button is pushed one time then a binary sensor for the `single` pattern will be created. The same applies for the other patterns. With the second usage of the pattern the binary sensors become fully functional.
|
||||
|
||||
The buttons will give you feedback with its built-in LED:
|
||||
|
||||
- white then green: Pattern was submitted successfully
|
||||
- white then red: There is a problem with the communication
|
||||
|
||||
To use your myStrom WiFi Button in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
binary_sensor:
|
||||
- platform: mystrom
|
||||
```
|
||||
|
||||
### {% linkable_title Setup of the myStrom Buttons %}
|
||||
|
||||
After the Wifi Buttons are connected to your Wireless network, you have three minutes to set the actions for the push patterns. The fastest way is to use `curl`. Check the [documentation](https://mystrom.ch/wp-content/uploads/REST_API_WBP.txt) of the WiFi Button for further details about implementation (`http://` is replaced by `get://` or `post://`). `action` is the name of the corresponding push pattern.
|
||||
|
||||
```bash
|
||||
$ curl -d "[action]=get://[IP address Home Assistant]:8123/api/mystrom?single%3D[ID of the button]" http://[IP address of the button]/api/v1/device/[MAC address of the button]
|
||||
{
|
||||
"[MAC address of the button]": {
|
||||
"type": "button",
|
||||
"battery": true,
|
||||
"reachable": true,
|
||||
"meshroot": false,
|
||||
"charge": true,
|
||||
"voltage": 4.292,
|
||||
"fw_version": "2.26",
|
||||
"single": "get://[IP address Home Assistant]:8123/api/mystrom?single=[if of the button]",
|
||||
"double": "",
|
||||
"long": "",
|
||||
"touch": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
A complete command to set the URL for a double click could look like the example below:
|
||||
|
||||
```bash
|
||||
$ curl -d "double=get://192.168.1.3:8123/api/mystrom?double%3DButton1" http://192.168.1.12/api/v1/device/4D5F5D5CD553
|
||||
```
|
||||
|
||||
<p class='note'>
|
||||
The firmware version 2.26 doesn't support TLS/SSL. This means that you are only able to use the WiFi Buttons if you are using plain-text communication between Home Assistant and the clients/entities.
|
||||
</p>
|
47
source/_components/binary_sensor.raspihats.markdown
Normal file
@ -0,0 +1,47 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Raspihats Binary Sensor"
|
||||
description: "Instructions how to integrate Raspihats add-on boards for Raspberry PI into Home Assistant as a binary_sensor."
|
||||
date: 2017-05-01 04:09
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: raspihats.png
|
||||
ha_category: Binary Sensor
|
||||
ha_release: 0.44
|
||||
ha_iot_class: "Local Push"
|
||||
---
|
||||
|
||||
The `raspihats` binary sensor platform allows you to read sensor values using the digital inputs of the [raspihats](http://www.raspihats.com/) boards.
|
||||
|
||||
To use your `raspihats` boards in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
binary_sensor:
|
||||
- platform: raspihats
|
||||
i2c_hats:
|
||||
- board: DI6acDQ6rly
|
||||
address: 0x60
|
||||
channels:
|
||||
- index: 0
|
||||
name: PIR Office
|
||||
invert_logic: true
|
||||
device_class: motion
|
||||
- index: 1
|
||||
name: PIR Bedroom
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **i2c_hats** (*Optional*): Array of used I2C-HATs.
|
||||
- **board** (*Required*): The board name [Di16, Di6Rly6, DI16ac, DI6acDQ6rly].
|
||||
- **address** (*Required*): The board I2C address, hex value.
|
||||
- **channels** (*Required*): Array of used digital input channels.
|
||||
- **index** (*Required*): Digital input channel index.
|
||||
- **name** (*Required*): Friendly name to use for the frontend.
|
||||
- **invert_logic** (*Optional*): Inverts the input logic, default is `false`.
|
||||
- **device_class** (*Optional*): See device classes in [binary_sensor component](/components/binary_sensor/), default is `None`
|
||||
|
||||
For more details about the `raspihats` add-on boards for Raspberry PI, visit [raspihats.com](http://www.raspihats.com/).
|
39
source/_components/binary_sensor.rpi_pfio.markdown
Normal file
@ -0,0 +1,39 @@
|
||||
---
|
||||
layout: page
|
||||
title: "PiFace Digital I/O Binary Sensor"
|
||||
description: "Instructions how to integrate the PiFace Digital I/O module into Home Assistant as a binary sensor."
|
||||
date: 2016-05-08 15:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: raspberry-pi.png
|
||||
ha_category: Binary Sensor
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
The `rpi_pfio` binary sensor platform allows you to read sensor values of the [PiFace Digital I/O](http://www.piface.org.uk/products/piface_digital/) .
|
||||
|
||||
To use your PiFace Digital I/O module in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
binary_sensor:
|
||||
- platform: rpi_pfio
|
||||
ports:
|
||||
0:
|
||||
name: PIR Office
|
||||
invert_logic: true
|
||||
1:
|
||||
name: Doorbell
|
||||
settle_time: 50
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **ports** array (*Required*): Array of used ports.
|
||||
- **num** (*Required*): Port number.
|
||||
- **name** (*Required*): Port name.
|
||||
- **settle_time** (*Optional*): The time in milliseconds for port debouncing. Default is 2 0ms.
|
||||
- **invert_logic** (*Optional*): If true, inverts the output logic to ACTIVE LOW. Default is false (ACTIVE HIGH).
|
||||
|
@ -33,15 +33,16 @@ Once loaded, your front end will have the following components:
|
||||
* A sensor per camera that reports battery level.
|
||||
* A sensor per camera that reports unread notification (ie. detected motion events).
|
||||
|
||||
Since the cameras are battery operated, the images are only updated in Home Assistant when the user manually forces a new photo. The image can only be updated in Home Assistant every 60 seconds in order to not overwhelm Blink's servers with API requests.
|
||||
Since the cameras are battery operated, the images are only updated in Home Assistant when the user manually forces a new photo. This image can be updated with the `blink.snap_picture` service followed by a `blink.force_update` service call to force Home Assistant to request an update from Blink's servers. If the `blink.force_update` service is not called, the image will be updated within a 180 second interval, set so that automatic server requests don't overwhelm the Blink API. As a note, all of the camera-specific sensors are only polled when a new image is requested from the camera. This means that relying on any of these sensors to provide timely and accurate data is not recommended.
|
||||
|
||||
Services:
|
||||
There are three services availiabe for the blink platform:
|
||||
- arm_system
|
||||
- arm_camera
|
||||
- snap_picture
|
||||
- force_update
|
||||
|
||||
For arm_system, the value sent can be either "True" or "False" and will arm and disarm the whole blink system, respectively
|
||||
For `blink.arm_system`, the value sent can be either "True" or "False" and will arm and disarm the whole blink system, respectively
|
||||
|
||||
Arm system example
|
||||
```json
|
||||
@ -50,7 +51,7 @@ Arm system example
|
||||
}
|
||||
```
|
||||
|
||||
Arm camera follows a similar structure, but each indidivual camera can have motion detection enabled or disabled. Because of this, you also need to supply a name. For example, if I have a camera named "Living Room" and I want to turn off motion detection on that camera, I'd call the blink.arm_camera service with the following payload:
|
||||
Arm camera follows a similar structure, but each indidivual camera can have motion detection enabled or disabled. Because of this, you also need to supply a name. For example, if I have a camera named "Living Room" and I want to turn off motion detection on that camera, I'd call the `blink.arm_camera` service with the following payload:
|
||||
```json
|
||||
{
|
||||
"friendly_name": "Living Room",
|
||||
@ -58,13 +59,15 @@ Arm camera follows a similar structure, but each indidivual camera can have moti
|
||||
}
|
||||
```
|
||||
|
||||
The blink.snap_picture service takes the camera name as the payload and with take a new picture with your camera.
|
||||
The `blink.snap_picture` service takes the camera name as the payload and with take a new picture with your camera.
|
||||
```
|
||||
{
|
||||
"friendly_name": "Living Room"
|
||||
}
|
||||
```
|
||||
|
||||
The `blink.force_update` service can simply be called with no payload to force a server update.
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **username** (*Required*): Your username to login to Blink
|
||||
|
@ -33,8 +33,12 @@ Configuration variables:
|
||||
- **name** (*Optional*): This parameter allows you to override the name of your camera. The default is "Amcrest Camera".
|
||||
- **port** (*Optional*): The port that the camera is running on. The default is 80.
|
||||
- **resolution** (*Optional*): This parameter allows you to specify the camera resolution. For a high resolution (1080/720p), specify the option `high`. For VGA resolution (640x480p), specify the option `low`. If omitted, it defaults to *high*.
|
||||
- **stream_source** (*Optional*): The data source for the live stream. `mjpeg` will use the camera's native MJPEG stream, whereas `snapshot` will use the camera's snapshot API to create a stream from still images. If omitted, it defaults to *mjpeg*.
|
||||
- **stream_source** (*Optional*): The data source for the live stream. `mjpeg` will use the camera's native MJPEG stream, whereas `snapshot` will use the camera's snapshot API to create a stream from still images. You can also set the `rtsp` option to generate the streaming via RTSP protocol. If omitted, it defaults to *mjpeg*.
|
||||
- **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g. image quality or video filter options.
|
||||
|
||||
**Note:** Amcrest cameras with newer firmwares no longer have the ability to stream `high` definition video with MJPEG encoding. You may need to use `low` resolution stream or the `snapshot` stream source instead. If the quality seems too poor, lower the `Frame Rate (FPS)` and max out the `Bit Rate` settings in your camera's configuration manager.
|
||||
|
||||
**Note:** If you set the `stream_source` option to `rtsp`, make sure to follow the steps mentioned at
|
||||
[FFMPEG](https://home-assistant.io/components/ffmpeg/) documentation to install the `ffmpeg`.
|
||||
|
||||
To check if your Amcrest camera is supported/tested, visit the [supportability matrix](https://github.com/tchellomello/python-amcrest#supportability-matrix) link from the `python-amcrest` project.
|
||||
|
17
source/_components/camera.axis.markdown
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Axis Camera"
|
||||
description: "Instructions how to setup Axis cameras within Home Assistant."
|
||||
date: 2017-05-01 19:09
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: axis.png
|
||||
ha_category: Camera
|
||||
ha_release: "0.45"
|
||||
---
|
||||
|
||||
The `Axis` camera platform allows you to stream video from your [Axis](https://www.axis.com/) cameras.
|
||||
|
||||
The requirement is that you have setup your [Axis camera](/components/axis/).
|
@ -28,6 +28,6 @@ camera:
|
||||
Configuration variables:
|
||||
|
||||
- **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.
|
||||
|
||||
- **port** (*Optional*): The port number to use for accessing the NVR.
|
||||
- **password** (*Optional*): The camera password. Defaults to `ubnt` if not given.
|
||||
|
14
source/_components/cover.lutron_caseta.markdown
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Lutron Caseta Cover"
|
||||
description: "Instructions how to setup the Lutron Caseta covers within Home Assistant."
|
||||
date: 2017-05-20 09:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: lutron.png
|
||||
ha_category: Cover
|
||||
---
|
||||
|
||||
To get your Lutron Caseta covers working with Home Assistant, follow the instructions for the general [Lutron Caseta component](/components/lutron_caseta/).
|
41
source/_components/datadog.markdown
Normal file
@ -0,0 +1,41 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Datadog"
|
||||
description: "Send data and events to Datadog."
|
||||
date: 2017-04-18 00:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
logo: datadog.png
|
||||
footer: true
|
||||
ha_category: History
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
The `datadog` component sends all state changes to [Datadog](https://www.datadoghq.com/) using a [Datadog Agent](http://docs.datadoghq.com/guides/basic_agent_usage/).
|
||||
|
||||
Datadog allows you to analyze, monitor, cross-reference and alert upon your data. You can use it to detect statistical anomalies, see graphs across multiple sources in real-time, send critical alerts to Slack, etc.
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/screenshots/datadog-board-example.png' />
|
||||
</p>
|
||||
|
||||
The component also sends events from the logbook into Datadog, allowing you to correlate these events with your data.
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/screenshots/datadog-event-stream.png' />
|
||||
</p>
|
||||
|
||||
To use the `datadog` component in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
datadog:
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **host** (*Optional*): The IP address or hostname of your Datadog host, e.g. 192.168.1.23. Defaults to `localhost`.
|
||||
- **port** (*Optional*): Port to use. Defaults to 8125.
|
||||
- **prefix** (*Optional*): Prefix to use. Defaults to `hass`.
|
||||
- **rate** (*Optional*): The sample rate of UDP packets sent to Datadog. Defaults to 1.
|
@ -18,6 +18,8 @@ The `automatic` platform offers presence detection by retrieving your car's info
|
||||
|
||||
To use Automatic with Home Assistant, first you must [create a free development account](https://developer.automatic.com/). Automatic will generate a Client ID and Secret for you to use in your Home Assistant configuration. You will also need to update your Event Delivery preferences to ensure Home Assistant can receive updates. On the developer page, under App Settings / Event Delivery, select "Websocket" for Event Delivery Preference.
|
||||
|
||||
Home Assistant will also take advantage of `scope:current_location` if available. This will allow Home Assistant to receive periodic location updates during a trip. In order to use this functionality, you must request the scope for your application from Automatic. Once `scope:current_location` is available, Home Assistant will automatically make use of it after the next restart.
|
||||
|
||||
Once your developer account is created, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
|
@ -9,11 +9,11 @@ sharing: true
|
||||
footer: true
|
||||
logo: mikrotik.png
|
||||
ha_category: Presence Detection
|
||||
ha_release: "0.43"
|
||||
ha_release: 0.44
|
||||
---
|
||||
|
||||
|
||||
The `Mikrotik` platform offers presence detection by looking at connected devices to a [Mikrotik Routerboard](http://routerboard.com) based router.
|
||||
The `mikrotik` platform offers presence detection by looking at connected devices to a [Mikrotik Routerboard](http://routerboard.com) based router.
|
||||
|
||||
To use an Mikrotik router in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
@ -21,10 +21,9 @@ To use an Mikrotik router in your installation, add the following to your `confi
|
||||
# Example configuration.yaml entry
|
||||
device_tracker:
|
||||
- platform: mikrotik
|
||||
host: 192.168.81.1
|
||||
username: admin
|
||||
password: hellomoto
|
||||
port: 1603
|
||||
host: IP_ADDRESS
|
||||
username: ADMIN_USERNAME
|
||||
password: ADMIN_PASSWORD
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
@ -32,6 +31,6 @@ Configuration variables:
|
||||
- **host** (*Required*): The IP address of your router.
|
||||
- **username** (*Required*: The username of an user with administrative privileges.
|
||||
- **password** (*Required*): The password for your given admin account.
|
||||
- **port** (*Optional*): Mikrotik api port (See IP -> Services -> api ), default 8728
|
||||
- **port** (*Optional*): Mikrotik API port (see IP -> Services -> api ). Defaults to `8728`.
|
||||
|
||||
See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked.
|
||||
|
@ -31,6 +31,7 @@ Home Assistant can discover and automatically configure zeroconf/mDNS and uPnP d
|
||||
* Linn / Openhome
|
||||
* Denon Network Receivers
|
||||
* Bose Soundtouch speakers
|
||||
* Axis Communications security devices
|
||||
* IKEA Trådfri (Tradfri)
|
||||
|
||||
It will be able to add Google Chromecasts and Belkin WeMo switches automatically, for Philips Hue it will require some configuration from the user.
|
||||
@ -52,6 +53,7 @@ Configuration variables:
|
||||
Valid values for ignore are:
|
||||
|
||||
* `apple_tv`: Apple TV
|
||||
* `axis`: (Axis Communications security devices)
|
||||
* `denonavr`: Denon Network Receivers
|
||||
* `directv`: DirecTV
|
||||
* `flux_led`: Flux Led/MagicLight
|
||||
|
@ -1,6 +1,6 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Home Assistant 0.42"
|
||||
title: "Home Assistant 0.45"
|
||||
description: ""
|
||||
date: 2016-12-16 17:00
|
||||
sidebar: true
|
||||
@ -9,7 +9,7 @@ sharing: true
|
||||
footer: true
|
||||
logo: home-assistant.png
|
||||
ha_category: Other
|
||||
ha_release: 0.42
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
Details about the latest release can always be found at:
|
||||
|
92
source/_components/image_processing.seven_segments.markdown
Normal file
@ -0,0 +1,92 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Seven segments display"
|
||||
description: "Instructions how to use OCR for seven segemnts displays into Home Assistant."
|
||||
date: 2017-05-18 08:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: home-assistant.png
|
||||
ha_category: Image Processing
|
||||
featured: false
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
The `seven_segments` image processing platform allows you to read physical seven segments displays through Home Assistant. [`ssocr`](https://www.unix-ag.uni-kl.de/~auerswal/ssocr/) is used to extract the value shown on the display which is observed by a [camera](/components/camera/). `ssocr` need to be available on your system. Check the installation instruction for Fedora below or use `$ sudo apt-get install ssocr` on a Debian-based system:
|
||||
|
||||
```bash
|
||||
$ sudo dnf -y install imlib2-devel
|
||||
$ git clone https://github.com/auerswal/ssocr.git
|
||||
$ cd ssocr
|
||||
$ make
|
||||
$ sudo make PREFIX=/usr install
|
||||
```
|
||||
|
||||
To enable the OCR of a seven segement display in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
image_processing:
|
||||
- platform: seven_segments
|
||||
source:
|
||||
- entity_id: camera.seven_segments
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **ssocr_bin** (*Optional*): The command line tool `ssocr`. Set it if you use a different name for the executable. Defaults to `ssorc`.
|
||||
- **x_position** (*Optional*): X coordinate of the upper left corner of the area to crop. Defaults to `0`.
|
||||
- **y_position** (*Optional*): Y coordinate of the upper left corner of the area to crop. Defaults to `0`.
|
||||
- **height** (*Optional*): Height of the area to crop. Defaults to `0`.
|
||||
- **width** (*Optional*): Width of the area to crop. Defaults to `0`.
|
||||
- **threshold** (*Optional*): Threshold for the difference between the digits and the background. Defaults to `0`.
|
||||
- **digits** (*Optional*): Number of digits in the display. Defaults to `-1`.
|
||||
- **source** array (*Required*): List of image sources.
|
||||
- **entity_id** (*Required*): A camera entity id to get picture from.
|
||||
- **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity.
|
||||
|
||||
|
||||
### {% linkable_title Setup process %}
|
||||
|
||||
It's suggested that the first attempt to determine the needed parameters is using `ssocr` directly. This may require a couple of iterations to get the result
|
||||
|
||||
```bash
|
||||
$ ssocr -D erosion crop 390 250 490 280 -t 20 -d 4 ss-test.jpg
|
||||
```
|
||||
|
||||
This would lead to the following entry for the `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
camera:
|
||||
- platform: local_file
|
||||
file_path: /home/fab/.homeassistant/seven-seg.png
|
||||
name: seven_segments
|
||||
image_processing:
|
||||
- platform: seven_segments
|
||||
x_position: 390
|
||||
y_position: 250
|
||||
height: 280
|
||||
width: 490
|
||||
threshold: 20
|
||||
digits: 4
|
||||
source:
|
||||
- entity_id: camera.seven_segments
|
||||
```
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/screenshots/ssocr.png' />
|
||||
</p>
|
||||
|
||||
With the help of a [template sensor](/components/sensor.template/), the value can be shown as badge.
|
||||
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
power_meter:
|
||||
value_template: '{{ states.image_processing.sevensegement_ocr_seven_segments.state }}'
|
||||
friendly_name: 'Ampere'
|
||||
unit_of_measurement: 'A'
|
||||
```
|
||||
|
88
source/_components/kira.markdown
Normal file
@ -0,0 +1,88 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Kira"
|
||||
description: "Instructions how to integrate Keene Electronics IR over IP modules (Kira) into Home Assistant."
|
||||
date: 2017-05-07 00:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: keene.png
|
||||
ha_category: Hub
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
The `kira` component is the main component to integrate Keene Electronics IR over IP [Kira](https://www.keene.co.uk/keene-ir-anywhere-single-worldwide.html) modules with Home Assistant.
|
||||
|
||||
### {% linkable_title Example Configuration %}
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
kira:
|
||||
```
|
||||
|
||||
Kira modules have no built-in mechanism for auto-discovery, so will need to be configured to send packets to Home Assistant. Documentation for this can be found on the manufacturer's website [Here](https://www.keene.co.uk/pages/iranywhere/index.html).
|
||||
|
||||
### {% linkable_title Configuration Options %}
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
kira:
|
||||
sensors:
|
||||
- name: kira_sensor
|
||||
host: 0.0.0.0
|
||||
port: 65432
|
||||
remotes:
|
||||
name: kira_remote
|
||||
host: 192.168.100.1
|
||||
port: 65432
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
- **sensors** (*Optional*): Kira sensors to register
|
||||
- **name** (*Optional*): Name of this sensor.
|
||||
- **host** (*Optional*): Bind address for this sensor. 0.0.0.0 is default.
|
||||
- **port** (*Optional*): UDP port to listen for packets on. 65432 is default.
|
||||
- **remotes** (*Optional*): Remote Kira modules to register
|
||||
- **name** (*Optional*): Name of this remote.
|
||||
- **host** (*Required*): IP address of Kira module to send commands to.
|
||||
- **port** (*Optional*): UDP port to send packets to. 65432 is default.
|
||||
|
||||
If no sensors or remotes are specified, a sensor with default values will be added.
|
||||
|
||||
### {% linkable_title Code Configuration %}
|
||||
|
||||
The first time the Kira component is loaded, `kira_codes.yaml` will be created in the Home Assistant configuration directory.
|
||||
|
||||
```yaml
|
||||
# Example kira_codes.yaml entry
|
||||
- name: LivingRoomTVOn
|
||||
code: "K 2322 228A 1126 023E 0227 023E 0207 023F 0658 025D 0207 023F 0227 0220 0227 023F 0222 023E 0222 0220 067D 023F 0658 0222 0227 025C 0640 023F 0658 025D 0640 023E 0658 025D 0640 023F 0222 025C 0207 0222 0678 023E 0207 023F 0227 023F 0222 025C 063B 025C 0640 023E 0660 023E 0658 025D 0207 0222 0678 023E 0660 0220 0678 023E 0202 025D 0207 023F 2000"
|
||||
type: kira
|
||||
- name: HDMI_1
|
||||
code: "0000 006d 0026 0000 0155 00aa 0016 0015 0016 0015 0016 0040 0016 0015 0016 0015 0016 0014 0016 0015 0016 0015 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0040 0016 0040 0016 0015 0016 0040 0016 0040 0016 0040 0016 0014 0016 0015 0016 0040 0016 0040 0016 0040 0016 0015 0016 0014 0016 0014 0016 0040 0016 0040 0016 0014 0016 0015 0016 060b 0155 0055 0016 0e58 0155 0055 0016 00aa"
|
||||
device: LivingRoomTv
|
||||
type: pronto
|
||||
- name: RGB
|
||||
code: "F709 DC24"
|
||||
device: LivingRoomTv
|
||||
type: nec
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
- **name** (*Required*): The name of this code.
|
||||
- **code** (*Required*): The data for this code (see below).
|
||||
- **device** (*Optional*): The device this code is associated with. Default is "unknown".
|
||||
- **type** (*Optional*): The type of this code. If this field is omitted, the type will be autodetected if possible.
|
||||
- **repeat** (*Optional*): The number of times to repeat this code (on transmit). Default is 1.
|
||||
|
||||
Some manufacturers (e.g. Samsung) require an IR code to be sent a number of times in a row in rapid succession (usually 3). This doesn't apply to the vast majority of devices, but it can be helpful if needed.
|
||||
|
||||
### {% linkable_title Code Types %}
|
||||
|
||||
When creating an entry in `kira_codes.yaml`, a few different kinds of codes can be used.
|
||||
- **kira**: This is the native wire protocol used by Kira modules. These can be captured using netcat.
|
||||
- **pronto**: Pronto codes are supported.
|
||||
- **nec**: If the device uses NEC IR codes and the manufacturer has published them, they can be used here.
|
||||
|
||||
**NOTE**: NEC codes by themselves contain enough information to recognize an IR sequence, but not enough to reconstruct it. Codes of this type are receive-only (usable by sensors but not remotes).
|
@ -27,6 +27,22 @@ Configuration variables:
|
||||
|
||||
- **server** (*Optional*): Your server address. Only needed if using more than one network interface. Omit if you are unsure.
|
||||
|
||||
## {% linkable_title Set state %}
|
||||
|
||||
The LIFX bulbs allow a change of color and brightness even when they are turned off. This way you can control the light during the day so its settings are correct when events for turning on are received, for example from motion detectors or external buttons.
|
||||
|
||||
The normal `light.turn_on` call cannot be used for this because it always turns the power on. Thus, LIFX has its own service call that allows color changes without affecting the current power state.
|
||||
|
||||
### {% linkable_title Service `light.lifx_set_state` %}
|
||||
|
||||
Change the light to a new state.
|
||||
|
||||
| Service data attribute | Description |
|
||||
| ---------------------- | ----------- |
|
||||
| `entity_id` | String or list of strings that point at `entity_id`s of lights. Else targets all.
|
||||
| `transition` | Duration (in seconds) for the light to fade to the new state.
|
||||
| `power` | Turn the light on (`True`) or off (`False`). Leave out to keep the power as it is.
|
||||
| `...` | Use `color_name`, `brightness` etc. from [`light.turn_on`]({{site_root}}/components/light/#service-lightturn_on) to specify the new state.
|
||||
|
||||
## {% linkable_title Light effects %}
|
||||
|
||||
|
@ -38,8 +38,10 @@ Turns one light on or multiple lights on using [groups]({{site_root}}/components
|
||||
| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma separated floats that represent the color in XY.
|
||||
| `rgb_color` | yes | A list containing three integers representing the rgb color you want the light to be. Three comma separated integers that represent the color in RGB. You can find a great chart here: [Hue Color Chart](http://www.developers.meethue.com/documentation/hue-xy-values)
|
||||
| `color_temp` | yes | An INT in mireds representing the color temperature you want the light to be.
|
||||
| `kelvin` | yes | Alternatively, you can specify the color temperature in Kelvin.
|
||||
| `color_name` | yes | A human readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color) are supported.
|
||||
| `brightness` | yes | Integer between 0 and 255 for how bright the color should be.
|
||||
| `brightness_pct`| yes | Alternatively, you can specify brightness in percent (a number between 0 and 100).
|
||||
| `flash` | yes | Tell light to flash, can be either value `short` or `long`. *Not supported by all lights.
|
||||
| `effect`| yes | Applies an effect such as `colorloop` or `random`.
|
||||
|
||||
|
@ -16,6 +16,8 @@ logo: raspberry-pi.png
|
||||
|
||||
The `rpi_gpio_pwm` platform allows to control multiple lights using pulse-width modulation, for example led strips. It supports one-color, RGB and RGBW LEDs driven by GPIOs of a Raspberry Pi or a PCA9685 controller.
|
||||
|
||||
For controlling the GPIOs, the platform connects to the [pigpio-daemon](http://abyz.co.uk/rpi/pigpio/pigpiod.html), which must be running. On Raspbian Jessie 2016-05-10 or newer the `pigpio` library is already included. On other operating systems it needs to be installed first (see [installation instructions](https://github.com/soldag/python-pwmled#installation)).
|
||||
|
||||
To enable this platform, add the following lines to your `configuration.yaml`:
|
||||
|
||||
```yaml
|
||||
|
@ -24,6 +24,111 @@ The requirement is that you have setup [Wink](/components/wink/).
|
||||
- Schlage
|
||||
- Generic Z-wave
|
||||
|
||||
<p class='note'>
|
||||
The following services have only been confirmed on Schlage locks.
|
||||
</p>
|
||||
|
||||
### {% linkable_title Service `wink_set_lock_alarm_mode` %}
|
||||
|
||||
You can use the service wink/wink_set_lock_alarm_mode to set the alarm mode of your lock.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
| ---------------------- | -------- | ----------- |
|
||||
| `mode` | no | String one of tamper, activity, or forced_entry
|
||||
| `entity_id` | yes | String or list of strings that point at `entity_id`s of locks.
|
||||
|
||||
Example:
|
||||
|
||||
```yaml
|
||||
script:
|
||||
set_locks_to_tamper:
|
||||
sequence:
|
||||
- service: wink.wink_set_lock_alarm_mode
|
||||
data:
|
||||
mode: "tamper"
|
||||
```
|
||||
|
||||
### {% linkable_title Service `wink_set_lock_alarm_sensitivity` %}
|
||||
|
||||
You can use the service wink/wink_set_lock_alarm_sensitivity to set the alarm sensitivity of your lock.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
| ---------------------- | -------- | ----------- |
|
||||
| `sensitivity` | no | String one of low, medium_low, medium, medium_high, high
|
||||
| `entity_id` | yes | String or list of strings that point at `entity_id`s of locks.
|
||||
|
||||
Example:
|
||||
|
||||
```yaml
|
||||
script:
|
||||
set_locks_to_high_sensitivity:
|
||||
sequence:
|
||||
- service: wink.wink_set_lock_alarm_sensitivity
|
||||
data:
|
||||
sensitivity: "high"
|
||||
```
|
||||
|
||||
### {% linkable_title Service `wink_set_lock_alarm_state` %}
|
||||
|
||||
You can use the service wink/wink_set_lock_alarm_state to set the alarm state of your lock.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
| ---------------------- | -------- | ----------- |
|
||||
| `enabled` | no | Boolean enabled or disabled, true or false
|
||||
| `entity_id` | yes | String or list of strings that point at `entity_id`s of locks.
|
||||
|
||||
Example:
|
||||
|
||||
```yaml
|
||||
script:
|
||||
disable_all_locks_alarm:
|
||||
sequence:
|
||||
- service: wink.wink_set_lock_alarm_state
|
||||
data:
|
||||
enabled: false
|
||||
```
|
||||
|
||||
### {% linkable_title Service `wink_set_lock_beeper_state` %}
|
||||
|
||||
You can use the service wink/wink_set_lock_beeper_state to set the beeper state of your lock.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
| ---------------------- | -------- | ----------- |
|
||||
| `enabled` | no | Boolean enabled or disabled, true or false
|
||||
| `entity_id` | yes | String or list of strings that point at `entity_id`s of locks.
|
||||
|
||||
Example:
|
||||
|
||||
```yaml
|
||||
script:
|
||||
disable_all_locks_beepers:
|
||||
sequence:
|
||||
- service: wink.wink_set_lock_beeper_state
|
||||
data:
|
||||
enabled: false
|
||||
```
|
||||
|
||||
### {% linkable_title Service `wink_set_lock_vacation_mode` %}
|
||||
|
||||
You can use the service wink/wink_set_lock_vacation_mode to set the vacation mode of your lock.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
| ---------------------- | -------- | ----------- |
|
||||
| `enabled` | no | Boolean enabled or disabled, true or false
|
||||
| `entity_id` | yes | String or list of strings that point at `entity_id`s of locks.
|
||||
|
||||
Example:
|
||||
|
||||
```yaml
|
||||
script:
|
||||
enabled_vacation_mode_on_all_locks:
|
||||
sequence:
|
||||
- service: wink.wink_set_lock_vacation_mode
|
||||
data:
|
||||
enabled: false
|
||||
```
|
||||
|
||||
|
||||
<p class='note'>
|
||||
If supported by your lock, a binary sensor will be created for each user key code you have defined. These key codes will turn on when the code is entered and automatically turn off after a few seconds.
|
||||
</p>
|
||||
|
@ -13,11 +13,14 @@ featured: False
|
||||
ha_release: 0.41
|
||||
---
|
||||
|
||||
[Lutron](http://www.lutron.com/) is an American lighting control company. They have several lines of home automation devices that manage light switches/dimmers, occupancy sensors, HVAC controls, etc. The `lutron_caseta` component in Home Assistant is responsible for communicating with the Lutron SmartBridge for these systems.
|
||||
[Lutron](http://www.lutron.com/) is an American lighting control company. They have several lines of home automation devices that manage light switches/dimmers, occupancy sensors, HVAC controls, etc. The `lutron_caseta` component in Home Assistant is responsible for communicating with the Lutron SmartBridge for these systems. Both 'pro' and 'standard' models are supported.
|
||||
|
||||
This component only supports the Caseta line of products. Current only supports Caseta dimmers as Home Assistant lights and caseta wall switches as Home Assistant switches.
|
||||
This component only supports the Caseta line of products. The current supported Caseta devices are:
|
||||
- Dimmers as Home Assistant lights
|
||||
- Wall switches as Home Assistant switches
|
||||
- Serena shades as Home Assistant covers
|
||||
|
||||
When configured, the `lutron_caseta` component will automatically discover dimmers and switches as setup in the Lutron SmartBridge.
|
||||
When configured, the `lutron_caseta` component will automatically discover the currently support devices as setup in the Lutron SmartBridge.
|
||||
|
||||
To use Lutron Caseta devices in your installation, add the following to your `configuration.yaml` file using the IP of your lutron Smartbridge:
|
||||
|
||||
|
@ -37,3 +37,61 @@ Configuration variables:
|
||||
- **password** (*Optional*): The XBMC/Kodi HTTP password.
|
||||
- **turn_off_action** (*Optional*): The desired turn off action. Options are `none`, `quit`, `hibernate`, `suspend`, `reboot`, or `shutdown`. Default `none`.
|
||||
- **enable_websocket** (*Optional*): Enable websocket connections to Kodi via the TCP port. Defaults to `true`. The websocket connection allows Kodi to push updates to Home Assistant and removes the need for Home Assistant to poll. If websockets don't work on your installation this can be set to `false`.
|
||||
- **timeout** (*Optional*): Set timeout for connections to Kodi. Defaults to 5 seconds.
|
||||
|
||||
|
||||
### {% linkable_title Service `kodi_add_to_playlist` %}
|
||||
|
||||
Add music to the default playlist (i.e. playlistid=0).
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
| ---------------------- | -------- | ----------- |
|
||||
| `entity_id` | no | Name(s) of the Kodi entities where to add the media.
|
||||
| `media_type` | yes | Media type identifier. It must be one of SONG or ALBUM.
|
||||
| `media_id` | no | Unique Id of the media entry to add (`songid` or `albumid`). If not defined, `media_name` and `artist_name` are needed to search the Kodi music library.
|
||||
| `media_name` | no| Optional media name for filtering media. Can be 'ALL' when `media_type` is 'ALBUM' and `artist_name` is specified, to add all songs from one artist.
|
||||
| `artist_name` | no | Optional artist name for filtering media.
|
||||
|
||||
|
||||
### {% linkable_title Service `kodi_call_method` %}
|
||||
|
||||
Call a [Kodi JSONRPC API](http://kodi.wiki/?title=JSON-RPC_API) method with optional parameters. Results of the Kodi API call will be redirected in a Home Assistant event: `kodi_call_method_result`.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
| ---------------------- | -------- | ----------- |
|
||||
| `entity_id` | no | Name(s) of the Kodi entities where to run the API method.
|
||||
| `method` | yes | Name of the Kodi JSONRPC API method to be called.
|
||||
| any other parameter | no | Optional parameters for the Kodi API call.
|
||||
|
||||
|
||||
### {% linkable_title Event triggering %}
|
||||
|
||||
When calling the `kodi_call_method` service, if the Kodi JSONRPC API returns data, when received by Home Assistant it will fire a `kodi_call_method_result` event on the event bus with the following `event_data`:
|
||||
|
||||
```yaml
|
||||
entity_id: "<Kodi media_player entity_id>"
|
||||
result_ok: <boolean>
|
||||
input: <input parameters of the service call>
|
||||
result: <data received from the Kodi API>
|
||||
```
|
||||
|
||||
### {% linkable_title Kodi services samples %}
|
||||
|
||||
#### Simple script to turn on the TV with the Kodi JSON-CEC Addon
|
||||
|
||||
```yaml
|
||||
script:
|
||||
activate_tv:
|
||||
alias: Turn on TV
|
||||
sequence:
|
||||
- alias: TV on
|
||||
service: media_player.kodi_call_method
|
||||
data:
|
||||
entity_id: media_player.kodi
|
||||
method: Addons.ExecuteAddon
|
||||
addonid: script.json-cec
|
||||
params:
|
||||
command: activate
|
||||
```
|
||||
|
||||
For a more complex usage of the `kodi_call_method` service, with event triggering of Kodi API results, you can have a look at this [example](/cookbook/kodi_dynamic_input_select/)
|
||||
|
@ -107,3 +107,15 @@ Clear the sleep timer on a speaker, if one is set.
|
||||
| ---------------------- | -------- | ----------- |
|
||||
| `entity_id` | no | String or list of `entity_id`s that will have their timers cleared. Must be a coordinator speaker.
|
||||
|
||||
### {% linkable_title Service `sonos_update_alarm` %}
|
||||
|
||||
Update an existing sonos alarm.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
| ---------------------- | -------- | ----------- |
|
||||
| `entity_id` | no | String or list of `entity_id`s that will have their timers cleared. Must be a coordinator speaker.
|
||||
| `alarm_id` | no | Integer that is used in Sonos to refer to your alarm.
|
||||
| `time` | yes | Time to set the alarm.
|
||||
| `volume` | yes | Float for volume level.
|
||||
| `enabled` | yes | Boolean for whether or not to enable this alarm.
|
||||
| `include_linked_zones` | yes | Boolean that defines if the alarm also plays on grouped players.
|
||||
|
@ -22,11 +22,13 @@ To enable the Microsoft Face component, add the following lines to your `configu
|
||||
# Example configuration.yaml entry
|
||||
microsoft_face:
|
||||
api_key: YOUR_API_KEY
|
||||
azure_region: eastus2
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **api_key** (*Required*): The API key for your Cognitive resource.
|
||||
- **azure_region** (*Optional*): The region where you instantiated your Microsoft Cognitive services endpoint
|
||||
- **timeout** (*Optional)*: Set timeout for the API connection. Defaults to 10s.
|
||||
|
||||
### {% linkable_title Person and Groups %}
|
||||
|
@ -35,8 +35,9 @@ Configuration variables:
|
||||
- **sender** (*Optional*): E-mail address of the sender.
|
||||
- **username** (*Optional*): Username for the SMTP account.
|
||||
- **password** (*Optional*): Password for the SMTP server that belongs to the given username. If the password contains a colon it need to be wrapped in apostrophes.
|
||||
- **recipient** (*Required*): E-mail address of the recipient of the notification. This can be a recpient address or a list of addresses for multiple recipients.
|
||||
- **recipient** (*Required*): E-mail address of the recipient of the notification. This can be a recipient address or a list of addresses for multiple recipients.
|
||||
- **starttls** (*Optional*): Enables STARTTLS, eg. True or False. Defaults to False.
|
||||
- **sender_name** (*Optional*): Sets a custom 'sender name' in the emails headers (*From*: Custom name <example@mail.com>).
|
||||
- **debug** (*Optional*): Enables Debug, eg. True or False. Defaults to False.
|
||||
|
||||
A sample configuration entry for Google Mail.
|
||||
@ -56,6 +57,7 @@ notify:
|
||||
recipient:
|
||||
- james@gmail.com
|
||||
- bob@gmail.com
|
||||
sender_name: My Home Assistant
|
||||
```
|
||||
|
||||
Keep in mind that Google has some extra layers of protection which need special attention (Hint: 'Less secure apps').
|
||||
@ -81,6 +83,73 @@ To use the SMTP notification, refer to it in an automation or script like in thi
|
||||
|
||||
The optional `images` field adds in-line image attachments to the email. This sends a text/HTML multi-part message instead of the plain text default.
|
||||
|
||||
The optional `html` field makes a custom text/HTML multi-part message, allowing total freedom for sending rich html emails. In them, if you need to attach images, you can pass both arguments (`html` and `images`), the attachments will be joined with the basename of the images, so they can be included in the html page with `src="cid:image_name.ext"`.
|
||||
|
||||
```yaml
|
||||
burglar:
|
||||
alias: Burglar Alarm
|
||||
sequence:
|
||||
- service: shell_command.snapshot
|
||||
- delay:
|
||||
seconds: 1
|
||||
- service: notify.NOTIFIER_NAME
|
||||
data_template:
|
||||
message: 'Intruder alert at apartment!!'
|
||||
data:
|
||||
images:
|
||||
- /home/pi/snapshot1.jpg
|
||||
- /home/pi/snapshot2.jpg
|
||||
html: >
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Intruder alert</title>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
|
||||
<style type="text/css">
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTZS3E-kSBmtLoNJPDtbj2Pk.ttf) format('truetype');
|
||||
}
|
||||
h1,h2,h3,h4,h5,h6 {
|
||||
font-family:'Open Sans',Arial,sans-serif;
|
||||
font-weight:400;
|
||||
margin:10px 0
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="jumbotron jumbotron-fluid" style="background-color: #f00a2d; color: white;">
|
||||
<div class="container py-0">
|
||||
<h1>Intruder alert at apartment!!</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-6 px-0">
|
||||
<img class="rounded" style="width: 100%;"
|
||||
alt="snapshot1" src="cid:snapshot1.jpg" />
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-6 px-0">
|
||||
<img class="rounded" style="width: 100%;"
|
||||
alt="snapshot2" src="cid:snapshot2.jpg" />
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
</body>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js"></script>
|
||||
</html>
|
||||
|
||||
```
|
||||
Obviously, this kind of complex html email reporting is done much more conveniently using Jinja2 templating from an [AppDaemon app](https://home-assistant.io/docs/ecosystem/appdaemon/tutorial/), for example.
|
||||
|
||||
This platform is fragile and not able to catch all exceptions in a smart way because of the large number of possible configuration combinations.
|
||||
|
||||
A combination that will work properly is port 587 and STARTTLS. It's recommended to enable STARTTLS, if possible.
|
||||
|
@ -18,7 +18,8 @@ The `telegram` platform uses [Telegram](https://web.telegram.org) to delivery no
|
||||
The requirements are:
|
||||
|
||||
- You need a [Telegram bot](https://core.telegram.org/bots). Please follow those [instructions](https://core.telegram.org/bots#6-botfather) to create one and get the token for your bot. Keep in mind that bots are not allowed to contact users. You need to make the first contact with your user. Meaning that you need to send a message to the bot from your user.
|
||||
- The `chat_id` of an user.
|
||||
- You need to configure a [Telegram bot in Home Assistant](/components/telegram_bot) and define there your API key and the allowed chat ids to interact with.
|
||||
- The `chat_id` of an allowed user.
|
||||
|
||||
To retrieve your `chat_id`, contact any of the Telegram bots created for this purpose (@myidbot, @get_id_bot)
|
||||
|
||||
@ -45,22 +46,51 @@ $ python3
|
||||
To enable Telegram notifications in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
# Example configuration.yaml entry for the Telegram Bot
|
||||
telegram_bot:
|
||||
platform: webhooks
|
||||
api_key: ABCDEFGHJKLMNOPQRSTUVXYZ
|
||||
allowed_chat_ids:
|
||||
- CHAT_ID_1
|
||||
- CHAT_ID_2
|
||||
- CHAT_ID_3
|
||||
|
||||
# Example configuration.yaml entry for the notifier
|
||||
notify:
|
||||
- name: NOTIFIER_NAME
|
||||
platform: telegram
|
||||
api_key: ABCDEFGHJKLMNOPQRSTUVXYZ
|
||||
chat_id: YOUR_CHAT_ID
|
||||
chat_id: CHAT_ID_2
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
- **api_key** (*Required*): The API token of your bot.
|
||||
- **chat_id** (*Required*): The chat ID of your user.
|
||||
|
||||
To use notifications, please see the [getting started with automation page](/getting-started/automation/).
|
||||
|
||||
### {% linkable_title Text message %}
|
||||
|
||||
```yaml
|
||||
...
|
||||
action:
|
||||
service: notify.NOTIFIER_NAME
|
||||
data:
|
||||
title: '*Send a message*'
|
||||
message: 'That's an example that _sends_ a *formatted* message with a custom keyboard.'
|
||||
data:
|
||||
keyboard:
|
||||
- '/command1, /command2'
|
||||
- '/command3, /command4'
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **message** (*Required*): Message text.
|
||||
- **title** (*Optional*): Will be composed as '%title\n%message'.
|
||||
- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard.
|
||||
- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data.
|
||||
|
||||
### {% linkable_title Photo support %}
|
||||
|
||||
```yaml
|
||||
@ -81,10 +111,15 @@ action:
|
||||
caption: I.e. for a Title
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **url** or **file** (*Required*): For local or remote path to an image.
|
||||
- **caption** (*Optional*): The title of the image.
|
||||
- **username** (*Optional*): Username for a URL which require HTTP basic authentication.
|
||||
- **password** (*Optional*): Username for a URL which require HTTP basic authentication.
|
||||
- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard.
|
||||
- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data.
|
||||
|
||||
|
||||
### {% linkable_title Document support %}
|
||||
|
||||
@ -99,13 +134,16 @@ action:
|
||||
document:
|
||||
file: /tmp/whatever.odf
|
||||
caption: Document Title xy
|
||||
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **url** or **file** (*Required*): For local or remote path to a document.
|
||||
- **caption** (*Optional*): The title of the document.
|
||||
- **username** (*Optional*): Username for a URL which require HTTP basic authentication.
|
||||
- **password** (*Optional*): Username for a URL which require HTTP basic authentication.
|
||||
- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard.
|
||||
- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data.
|
||||
|
||||
### {% linkable_title Location support %}
|
||||
|
||||
@ -123,7 +161,10 @@ action:
|
||||
longitude: 117.22743
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **location** (*Required*): For local or remote path to an image.
|
||||
- **latitude** (*Required*): The latitude to send.
|
||||
- **longitude** (*Required*): The longitude to send.
|
||||
|
||||
- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard.
|
||||
- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data.
|
||||
|
15
source/_components/raspihats.markdown
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Raspihats"
|
||||
description: "Instructions how to integrate Raspihats add-on boards for Raspberry PI into Home Assistant."
|
||||
date: 2017-05-01 04:06
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: raspihats.png
|
||||
ha_category: DIY
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
The `raspihats` component is the base for all related Raspihats platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages.
|
18
source/_components/remote.kira.markdown
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Kira Remote"
|
||||
description: "Instructions how to integrate Kira modules into Home Assistant."
|
||||
date: 2017-05-07 17:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: keene.png
|
||||
ha_category: Remote
|
||||
ha_iot_class: "Assumed State"
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
The `kira` platform allows you to send IR commands via [Kira](https://www.keene.co.uk/keene-ir-anywhere-single-worldwide.html) modules from within Home Assistant.
|
||||
|
||||
For configuration information see the [Kira component](/components/kira/) documentation.
|
16
source/_components/rpi_pfio.markdown
Normal file
@ -0,0 +1,16 @@
|
||||
---
|
||||
layout: page
|
||||
title: "PiFace Digital I/O"
|
||||
description: "Instructions how to integrate the PiFace Digital I/O module into Home Assistant."
|
||||
date: 2016-05-08 15:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: raspberry-pi.png
|
||||
ha_category: DIY
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
The `rpi_pfio` component is the base for all related [PiFace Digital I/O (PFIO)](http://www.piface.org.uk/) platforms in Home Assistant. There is no setup needed for the component itself, for the platforms please check their corresponding pages.
|
||||
|
60
source/_components/sensor.file.markdown
Normal file
@ -0,0 +1,60 @@
|
||||
---
|
||||
layout: page
|
||||
title: "File Sensor"
|
||||
description: "Instructions how to integrate sensors which read from files into Home Assistant."
|
||||
date: 2017-05-13 12:10
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: file.png
|
||||
ha_category: Sensor
|
||||
ha_iot_class: "Local Polling"
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
|
||||
The `file` sensor platform reading the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line.
|
||||
|
||||
To enable the `file` sensor, add the following lines to your `configuration.yaml`:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- platform: file
|
||||
file_path: /home/user/.homeassistant/sensor-data.txt
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **file_path** (*Required*): path to file that stores the sensor data.
|
||||
- **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `File`.
|
||||
- **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any.
|
||||
- **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload.
|
||||
|
||||
## {% linkable_title Examples %}
|
||||
|
||||
In this section you find some real life examples of how to use this sensor.
|
||||
|
||||
### {% linkable_title Entries as JSON %}
|
||||
|
||||
Assuming that the log file contains multiple values formatted as JSON like shown below:
|
||||
|
||||
```text
|
||||
[...]
|
||||
{"temperature": 21, "humidity": 39}
|
||||
{"temperature": 22, "humidity": 36}
|
||||
```
|
||||
|
||||
This would require the following entry in the `configuration.yaml` file to extract the temperature:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- platform: file
|
||||
name: Temperature
|
||||
file_path: /home/user/.homeassistant/sensor.json
|
||||
value_template: {% raw %}'{{ value_json.temperature }}'{% endraw %}
|
||||
unit_of_measurement: '°C'
|
||||
```
|
||||
|
18
source/_components/sensor.kira.markdown
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Kira Sensor"
|
||||
description: "Instructions how to integrate Kira modules into Home Assistant."
|
||||
date: 2017-05-07 17:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: keene.png
|
||||
ha_category: Sensor
|
||||
ha_iot_class: "Local Push"
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
The `kira` platform allows you to respond to your [Kira](https://www.keene.co.uk/keene-ir-anywhere-single-worldwide.html) modules from within Home Assistant. This enables Home Assistant to respond to infrared inputs from a standard remote control.
|
||||
|
||||
For configuration information see the [Kira component](/components/kira/) documentation.
|
@ -27,7 +27,7 @@ sensor:
|
||||
```
|
||||
|
||||
- **mac** (*Required*): The MAC address of your sensor. You can find this be running `hcitool lescan` from command line.
|
||||
- **monitored_conditions** array (*Required*): The paramaters that should be monitored.
|
||||
- **monitored_conditions** array (*Optional*): The paramaters that should be monitored (defaults to monitoring all parameters).
|
||||
- **moisture**: Moisture in the soil.
|
||||
- **light**: Brightness at the sensor's location.
|
||||
- **temperature**: Temperature at the sensor's location.
|
||||
|
@ -32,6 +32,7 @@ Configuration variables:
|
||||
|
||||
- **host** (*Required*): IP address where your NZBGet installation is running.
|
||||
- **port** (*Optional*): The port of your NZBGet installation. Defaults to 6789.
|
||||
- **ssl** (*Optional*): Whether or not to use SSL to access NZBGet. Defaults to false.
|
||||
- **name** (*Optional*): The prefix to use for your sensor. Defaults to NZBGet.
|
||||
- **username** (*Optional*): The username to access your NZBGet installation.
|
||||
- **password** (*Optional*): The password to access your NZBGet installation.
|
||||
|
47
source/_components/switch.raspihats.markdown
Normal file
@ -0,0 +1,47 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Raspihats Switch"
|
||||
description: "Instructions how to integrate Raspihats add-on boards for Raspberry PI into Home Assistant as a switch."
|
||||
date: 2017-05-15 04:20
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: raspihats.png
|
||||
ha_category: Switch
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
|
||||
The `raspihats` switch platform allows you to control the digital outputs of your [raspihats](http://www.raspihats.com/) boards.
|
||||
|
||||
To use your raspihats boards in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
switch:
|
||||
- platform: raspihats
|
||||
i2c_hats:
|
||||
- board: DI6acDQ6rly
|
||||
address: 0x60
|
||||
channels:
|
||||
- index: 0
|
||||
name: Fan Office
|
||||
invert_logic: true
|
||||
initial_state: true
|
||||
- index: 1
|
||||
name: Light Office
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **i2c_hats** (*Optional*): Array of used I2C-HATs.
|
||||
- **board** (*Required*): The board name.
|
||||
- **address** (*Required*): The board I2C address, hex value.
|
||||
- **channels** (*Required*): Array of used digital output channels.
|
||||
- **index** (*Required*): Digital output channel index.
|
||||
- **name** (*Required*): Friendly name to use for the frontend.
|
||||
- **invert_logic** (*Optional*): Inverts the output logic, default is `False`.
|
||||
- **initial_state** (*Optional*): Initial state, default is `None`, can also be `True` or `False`. `None` means no state is forced on the corresponding digital output when this switch is instantiated.
|
||||
|
||||
For more details about the Raspihats add-on boards for Raspberry PI, visit [raspihats.com](http://www.raspihats.com/).
|
37
source/_components/switch.rpi_pfio.markdown
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
layout: page
|
||||
title: "PiFace Digital I/O Switch"
|
||||
description: "Instructions how to integrate the PiFace Digital I/O module into Home Assistant as a switch."
|
||||
date: 2016-05-08 15:00
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: raspberry-pi.png
|
||||
ha_category: Switch
|
||||
ha_release: 0.45
|
||||
---
|
||||
|
||||
The `rpi_pfio` switch platform allows you to control the [PiFace Digital I/O](http://www.piface.org.uk/products/piface_digital/) module.
|
||||
|
||||
To use your PiFace Digital I/O module in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
switch:
|
||||
- platform: rpi_pfio
|
||||
ports:
|
||||
0:
|
||||
name: Doorlock
|
||||
invert_logic: true
|
||||
1:
|
||||
name: Light Desk
|
||||
```
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **ports** array (*Required*): Array of used ports.
|
||||
- **num** (*Required*): Port number.
|
||||
- **name** (*Required*): Port name.
|
||||
- **invert_logic** (*Optional*): If true, inverts the output logic to ACTIVE LOW. Default is false (ACTIVE HIGH).
|
||||
|
@ -11,12 +11,132 @@ logo: telegram.png
|
||||
ha_release: 0.42
|
||||
---
|
||||
|
||||
Use Telegram on your mobile device to send messages or commands to your Home Assistant.
|
||||
Use Telegram on your mobile or desktop device to send and receive messages or commands to/from your Home Assistant.
|
||||
|
||||
This component creates notification services to send, or edit previously sent, messages from a [Telegram Bot account](https://core.telegram.org/bots) configured either with the [polling](/_components/telegram_bot.polling.markdown) method or with the [webhooks](/_components/telegram_bot.webhooks.markdown) one, and trigger events when receiving messages.
|
||||
|
||||
|
||||
A command looks like `/thecommand`
|
||||
### {% linkable_title Notification services %}
|
||||
Available services: `send_message`, `send_photo`, `send_document`, `send_location`, `edit_message`, `edit_replymarkup`, `edit_caption`, `answer_callback_query`.
|
||||
|
||||
When received by hass it will fire a `telegram_command` event on the event bus with the following `event_data`:
|
||||
#### {% linkable_title Service `telegram_bot/send_message` %}
|
||||
Send a notification.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
|---------------------------|----------|--------------------------------------------------|
|
||||
| `message` | no | Message body of the notification. |
|
||||
| `title` | yes | Optional title for your notification. Will be composed as '%title\n%message'. |
|
||||
| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. |
|
||||
| `parse_mode` | yes | Parser for the message text: `html` or `markdown`. |
|
||||
| `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. |
|
||||
| `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. |
|
||||
| `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` |
|
||||
| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` |
|
||||
|
||||
#### {% linkable_title Service `telegram_bot/send_photo` %}
|
||||
Send a photo.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
|---------------------------|----------|--------------------------------------------------|
|
||||
| `url` | no | Remote path to an image. |
|
||||
| `file` | no | Local path to an image. |
|
||||
| `caption` | yes | The title of the image. |
|
||||
| `username` | yes | Username for a URL which require HTTP basic authentication. |
|
||||
| `password` | yes | Password for a URL which require HTTP basic authentication. |
|
||||
| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. |
|
||||
| `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. |
|
||||
| `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` |
|
||||
| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` |
|
||||
|
||||
#### {% linkable_title Service `telegram_bot/send_document` %}
|
||||
Send a document.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
|---------------------------|----------|--------------------------------------------------|
|
||||
| `url` | no | Remote path to a document. |
|
||||
| `file` | no | Local path to a document. |
|
||||
| `caption` | yes | The title of the document. |
|
||||
| `username` | yes | Username for a URL which require HTTP basic authentication. |
|
||||
| `password` | yes | Password for a URL which require HTTP basic authentication. |
|
||||
| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. |
|
||||
| `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. |
|
||||
| `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` |
|
||||
| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` |
|
||||
|
||||
#### {% linkable_title Service `telegram_bot/send_location` %}
|
||||
Send a location.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
|---------------------------|----------|--------------------------------------------------|
|
||||
| `latitude` | no | The latitude to send. |
|
||||
| `longitude` | no | The longitude to send. |
|
||||
| `target` | yes | An array of pre-authorized chat_ids to send the notification to. Defaults to the first allowed chat_id. |
|
||||
| `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. |
|
||||
| `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` |
|
||||
| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` |
|
||||
|
||||
#### {% linkable_title Service `telegram_bot/edit_message` %}
|
||||
Edit a previusly sent message in a conversation.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
|---------------------------|----------|--------------------------------------------------|
|
||||
| `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. |
|
||||
| `chat_id` | no | The chat_id where to edit the message. |
|
||||
| `message` | no | Message body of the notification. |
|
||||
| `title` | yes | Optional title for your notification. Will be composed as '%title\n%message'. |
|
||||
| `parse_mode` | yes | Parser for the message text: `html` or `markdown`. |
|
||||
| `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. |
|
||||
| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` |
|
||||
|
||||
#### {% linkable_title Service `telegram_bot/edit_caption` %}
|
||||
Edit the caption of a previusly sent message.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
|---------------------------|----------|--------------------------------------------------|
|
||||
| `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. |
|
||||
| `chat_id` | no | The chat_id where to edit the caption. |
|
||||
| `caption` | no | Message body of the notification. |
|
||||
| `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. |
|
||||
| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` |
|
||||
|
||||
#### {% linkable_title Service `telegram_bot/edit_replymarkup` %}
|
||||
Edit the inline keyboard of a previusly sent message.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
|---------------------------|----------|--------------------------------------------------|
|
||||
| `message_id` | no | Id of the message to edit. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. |
|
||||
| `chat_id` | no | The chat_id where to edit the reply_markup. |
|
||||
| `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. |
|
||||
| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with asociated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` |
|
||||
|
||||
#### {% linkable_title Service `telegram_bot/answer_callback_query` %}
|
||||
Respond to a callback query originated by clicking on an online keyboard button. The answer will be displayed to the user as a notification at the top of the chat screen or as an alert.
|
||||
|
||||
| Service data attribute | Optional | Description |
|
||||
|---------------------------|----------|--------------------------------------------------|
|
||||
| `message` | no | Unformatted text message body of the notification. |
|
||||
| `callback_query_id` | no | Unique id of the callback response. In the `telegram_callback` event data: `{{ trigger.event.data.id }}` |
|
||||
| `show_alert` | yes | True/false for show a permanent notification. Defaults to False. |
|
||||
|
||||
### {% linkable_title `Telegram` notification platform %}
|
||||
|
||||
|
||||
The [Telegram notification platform](/_components/notify.telegram.markdown) requires the `telegram_bot` component to work with, and it's designed to generate a customised shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility.
|
||||
|
||||
The required yaml configuration now reduces to:
|
||||
```yaml
|
||||
notify:
|
||||
- name: NOTIFIER_NAME
|
||||
platform: telegram
|
||||
chat_id: USER_CHAT_ID
|
||||
```
|
||||
|
||||
### {% linkable_title Event triggering %}
|
||||
|
||||
|
||||
A command looks like `/thecommand`, or `/othercommand with some args`.
|
||||
|
||||
When received by Home Assistant it will fire a `telegram_command` event on the event bus with the following `event_data`:
|
||||
|
||||
```yaml
|
||||
command: "/thecommand"
|
||||
@ -26,13 +146,34 @@ from_last: "<last name of the sender>"
|
||||
user_id: "<id of the sender>"
|
||||
```
|
||||
|
||||
Any other message not starting with `/` will be processed as simple text, firing a `telegram_text` event on the event bus with the following `event_data`:
|
||||
|
||||
```yaml
|
||||
text: "some text received"
|
||||
from_first: "<first name of the sender>"
|
||||
from_last: "<last name of the sender>"
|
||||
user_id: "<id of the sender>"
|
||||
```
|
||||
|
||||
if the message is sent from a [press from an inline button](https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating), for example, a callback query is received, and Home Assistant will fire a `telegram_callback` event with:
|
||||
|
||||
```yaml
|
||||
data: "<data associated to action callback>"
|
||||
message: <message origin of the action callback>
|
||||
from_first: "<first name of the sender>"
|
||||
from_last: "<last name of the sender>"
|
||||
user_id: "<id of the sender>"
|
||||
id: "<unique id of the callback>"
|
||||
chat_instance: "<chat instance>"
|
||||
```
|
||||
|
||||
### {% linkable_title Configuration samples %}
|
||||
|
||||
|
||||
Simple ping pong example.
|
||||
|
||||
```yaml
|
||||
alias: 'telegram bot that reply pong to ping'
|
||||
alias: 'Telegram bot that reply pong to ping'
|
||||
hide_entity: true
|
||||
trigger:
|
||||
platform: event
|
||||
@ -95,3 +236,171 @@ An example to show the use of event_data in the action:
|
||||
message: >
|
||||
Message from {% raw %}{{ trigger.event.data["from_first"] }}. {% for state in trigger.event.data["args"] %} {{ state }} {% endfor %}{% endraw %}
|
||||
```
|
||||
|
||||
### {% linkable_title Sample automations with callback queries and inline keyboards %}
|
||||
|
||||
Quick example to show some of the callback capabilities of inline keyboards with a dumb automation consisting in a simple repeater of normal text that presents an inline keyboard with 3 buttons: 'EDIT', 'NO' and 'REMOVE BUTTON':
|
||||
- Pressing 'EDIT' changes the sent message.
|
||||
- Pressing 'NO' only shows a brief notification (answering the callback query).
|
||||
- Pressing 'REMOVE BUTTON' changes the inline keyboard removing that button.
|
||||
|
||||
Text repeater:
|
||||
```yaml
|
||||
- alias: 'Telegram bot that repeats text'
|
||||
hide_entity: true
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: telegram_text
|
||||
action:
|
||||
- service: telegram_bot.send_message
|
||||
data_template:
|
||||
title: '*Dumb automation*'
|
||||
target: '{{ trigger.event.data.user_id }}'
|
||||
message: 'You said: ``` {{ trigger.event.data.text }} ```'
|
||||
disable_notification: true
|
||||
inline_keyboard:
|
||||
- '/edit,/NO'
|
||||
- '/remove button'
|
||||
```
|
||||
|
||||
Message editor:
|
||||
```yaml
|
||||
- alias: 'Telegram bot that edits the last sent message'
|
||||
hide_entity: true
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: telegram_callback
|
||||
event_data:
|
||||
data: '/edit'
|
||||
action:
|
||||
- service: telegram_bot.answer_callback_query
|
||||
data_template:
|
||||
callback_query_id: '{{ trigger.event.data.id }}'
|
||||
message: 'Editing the message!'
|
||||
show_alert: true
|
||||
- service: telegram_bot.edit_message
|
||||
data_template:
|
||||
message_id: '{{ trigger.event.data.message.message_id }}'
|
||||
chat_id: '{{ trigger.event.data.user_id }}'
|
||||
title: '*Message edit*'
|
||||
inline_keyboard:
|
||||
- '/edit,/NO'
|
||||
- '/remove button'
|
||||
message: >
|
||||
Callback received from {{ trigger.event.data.from_first }}.
|
||||
Message id: {{ trigger.event.data.message.message_id }}.
|
||||
Data: ``` {{ trigger.event.data.data }} ```
|
||||
```
|
||||
|
||||
Keyboard editor:
|
||||
```yaml
|
||||
- alias: 'Telegram bot that edits the keyboard'
|
||||
hide_entity: true
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: telegram_callback
|
||||
event_data:
|
||||
data: '/remove button'
|
||||
action:
|
||||
- service: telegram_bot.answer_callback_query
|
||||
data_template:
|
||||
callback_query_id: '{{ trigger.event.data.id }}'
|
||||
message: 'Callback received for editing the inline keyboard!'
|
||||
- service: telegram_bot.edit_replymarkup
|
||||
data_template:
|
||||
message_id: 'last'
|
||||
chat_id: '{{ trigger.event.data.user_id }}'
|
||||
inline_keyboard:
|
||||
- '/edit,/NO'
|
||||
```
|
||||
|
||||
Only acknowledges the 'NO' answer:
|
||||
```yaml
|
||||
- alias: 'Telegram bot that simply acknowledges'
|
||||
hide_entity: true
|
||||
trigger:
|
||||
platform: event
|
||||
event_type: telegram_callback
|
||||
event_data:
|
||||
data: '/NO'
|
||||
action:
|
||||
- service: telegram_bot.answer_callback_query
|
||||
data_template:
|
||||
callback_query_id: '{{ trigger.event.data.id }}'
|
||||
message: 'OK, you said no!'
|
||||
```
|
||||
|
||||
For a more complex usage of the `telegram_bot` capabilities, using [AppDaemon](https://home-assistant.io/docs/ecosystem/appdaemon/tutorial/) is advised.
|
||||
|
||||
This is how the previous 4 automations would be through a simple AppDaemon app:
|
||||
|
||||
```python
|
||||
import appdaemon.appapi as appapi
|
||||
|
||||
class TelegramBotEventListener(appapi.AppDaemon):
|
||||
"""Event listener for Telegram bot events."""
|
||||
|
||||
def initialize(self):
|
||||
"""Listen to Telegram Bot events of interest."""
|
||||
self.listen_event(self.receive_telegram_text, 'telegram_text')
|
||||
self.listen_event(self.receive_telegram_callback, 'telegram_callback')
|
||||
|
||||
def receive_telegram_text(self, event_id, payload_event, *args):
|
||||
"""Text repeater."""
|
||||
assert event_id == 'telegram_text'
|
||||
user_id = payload_event['user_id']
|
||||
msg = 'You said: ``` %s ```' % payload_event['text']
|
||||
keyboard = ['/edit,/NO', '/remove button']
|
||||
self.call_service('telegram_bot/send_message',
|
||||
title='*Dumb automation*',
|
||||
target=user_id,
|
||||
message=msg,
|
||||
disable_notification=True,
|
||||
inline_keyboard=keyboard)
|
||||
|
||||
def receive_telegram_callback(self, event_id, payload_event, *args):
|
||||
"""Event listener for Telegram callback queries."""
|
||||
assert event_id == 'telegram_callback'
|
||||
data_callback = payload_event['data']
|
||||
callback_id = payload_event['id']
|
||||
user_id = payload_event['user_id']
|
||||
|
||||
if data_callback == '/edit': # Message editor:
|
||||
# Answer callback query
|
||||
self.call_service('telegram_bot/answer_callback_query',
|
||||
message='Editing the message!',
|
||||
callback_query_id=callback_id,
|
||||
show_alert=True)
|
||||
|
||||
# Edit the message origin of the callback query
|
||||
msg_id = payload_event['message']['message_id']
|
||||
user = payload_event['from_first']
|
||||
title = '*Message edit*'
|
||||
msg = 'Callback received from %s. Message id: %s. Data: ``` %s ```'
|
||||
keyboard = ['/edit,/NO', '/remove button']
|
||||
self.call_service('telegram_bot/edit_message',
|
||||
chat_id=user_id,
|
||||
message_id=msg_id,
|
||||
title=title,
|
||||
message=msg % (user, msg_id, data_callback),
|
||||
inline_keyboard=keyboard)
|
||||
|
||||
elif data_callback == '/remove button': # Keyboard editor:
|
||||
# Answer callback query
|
||||
self.call_service('telegram_bot/answer_callback_query',
|
||||
message='Callback received for editing the '
|
||||
'inline keyboard!',
|
||||
callback_query_id=callback_id)
|
||||
|
||||
# Edit the keyboard
|
||||
new_keyboard = ['/edit,/NO']
|
||||
self.call_service('telegram_bot/edit_replymarkup',
|
||||
chat_id=user_id,
|
||||
message_id='last',
|
||||
inline_keyboard=new_keyboard)
|
||||
|
||||
elif data_callback == '/NO': # Only Answer to callback query
|
||||
self.call_service('telegram_bot/answer_callback_query',
|
||||
message='OK, you said no!',
|
||||
callback_query_id=callback_id)
|
||||
```
|
@ -14,7 +14,7 @@ ha_release: 0.42
|
||||
|
||||
Telegram chatbot polling implementation.
|
||||
|
||||
One of two bot implementations supported by Telegram. Your hass does not have to be exposed to the internet.
|
||||
One of two bot implementations supported by Telegram. Your Home Assistant does not have to be exposed to the internet.
|
||||
|
||||
To integrate this into Home Assistant, add the following section to your `configuration.yaml` file:
|
||||
|
||||
@ -33,6 +33,7 @@ Configuration variables:
|
||||
|
||||
- **allowed_chat_ids** (*Required*): A list of user in the `user_id` Telegram format enabled to interact to webhook
|
||||
- **api_key** (*Required*): The API token of your bot.
|
||||
- **parse_mode** (*Optional*): Default parser for messages if not explicit in message data: 'html' or 'markdown'. Default is 'markdown'.
|
||||
|
||||
To get your `chat_id` and `api_key` follow the instructions [here](/components/notify.telegram) .
|
||||
To get your `chat_id` and `api_key` follow the instructions [here](/components/notify.telegram/).
|
||||
|
||||
|
@ -21,11 +21,12 @@ To integrate this into Home Assistant, add the following section to your `config
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
http:
|
||||
base_url: <public_url> # the hass https url which is exposed to the internet.
|
||||
base_url: <public_url> # the Home Assistant https url which is exposed to the internet.
|
||||
|
||||
telegram_bot:
|
||||
platform: webhooks
|
||||
api_key: telegram api key
|
||||
parse_mode: html
|
||||
allowed_chat_ids:
|
||||
- 12345
|
||||
- 67890
|
||||
@ -36,6 +37,7 @@ Configuration variables:
|
||||
- **allowed_chat_ids** (*Required*): A list of user in the `user_id` Telegram format enabled to interact to webhook
|
||||
- **api_key** (*Required*): The API token of your bot.
|
||||
- **trusted_networks** (*Optional*): Telegram server access ACL as list. Defaults to `149.154.167.197-233`.
|
||||
- **parse_mode** (*Optional*): Default parser for messages if not explicit in message data: 'html' or 'markdown'. Default is 'markdown'.
|
||||
|
||||
To get your `chat_id` and `api_key` follow the instructions [here](/components/notify.telegram) .
|
||||
|
||||
|
@ -64,3 +64,4 @@ Configuration variables:
|
||||
|
||||
- **host** (*Required*): The IP address or hostname of your Trådfri gateway.
|
||||
- **api_key** (*Required*): Can be found listed as Security Key on the back of the Trådfri gateway.
|
||||
- **allow_tradfri_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Tradfri bridge.
|
||||
|
156
source/_cookbook/automation_kodi_dynamic_input_select.markdown
Normal file
@ -0,0 +1,156 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Dynamic input select with Kodi media"
|
||||
description: "How to configure an `input_select` that can play in Kodi the latest entries added to the library"
|
||||
date: 2017-05-16 19:05
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
ha_category: Automation Examples
|
||||
---
|
||||
|
||||
This requires a [Kodi](/components/mediaplayer.kodi/) media player, and consists of commands that perform queries in the Kodi library, and a selection box (`input_select`) that shows the available options. By clicking the commands, the selection box is updated, and when selecting an option, Kodi plays the media.
|
||||
|
||||
Option filling is done in an [AppDaemon](https://home-assistant.io/docs/ecosystem/appdaemon/tutorial/) app, which listens for events that are triggered with the results of the Kodi JSONRPC API queries when scripts run. This application also listens to the selection box and calls the play media service with the corresponding parameters.
|
||||
|
||||
The media player yaml config:
|
||||
|
||||
```yaml
|
||||
media_player:
|
||||
- platform: kodi
|
||||
name: Kodi
|
||||
host: 192.168.0.123
|
||||
```
|
||||
|
||||
The `input_select` with the scripts and a group:
|
||||
|
||||
```yaml
|
||||
input_select:
|
||||
kodi_results:
|
||||
name: Kodi API results
|
||||
options:
|
||||
- Nothing to do
|
||||
|
||||
script:
|
||||
get_recent_movies:
|
||||
alias: Last added movies
|
||||
sequence:
|
||||
- service: media_player.kodi_call_method
|
||||
data:
|
||||
entity_id: media_player.kodi
|
||||
method: VideoLibrary.GetRecentlyAddedMovies
|
||||
properties:
|
||||
- title
|
||||
- year
|
||||
- file
|
||||
- lastplayed
|
||||
|
||||
get_recent_episodes:
|
||||
alias: Last TV shows
|
||||
sequence:
|
||||
- service: media_player.kodi_call_method
|
||||
data:
|
||||
entity_id: media_player.kodi
|
||||
method: VideoLibrary.GetRecentlyAddedEpisodes
|
||||
properties:
|
||||
- showtitle
|
||||
- file
|
||||
- lastplayed
|
||||
- firstaired
|
||||
|
||||
get_pvr_channels:
|
||||
alias: TV Channels
|
||||
sequence:
|
||||
- service: media_player.kodi_call_method
|
||||
data:
|
||||
entity_id: media_player.kodi
|
||||
method: PVR.GetChannels
|
||||
channelgroupid: 1
|
||||
|
||||
group:
|
||||
Media Select:
|
||||
control: hidden
|
||||
entities:
|
||||
- input_select.kodi_results
|
||||
- script.get_recent_movies
|
||||
- script.get_recent_episodes
|
||||
- script.get_pvr_channels
|
||||
```
|
||||
|
||||
The AppDaemon app:
|
||||
|
||||
```python
|
||||
import appdaemon.appapi as appapi
|
||||
from homeassistant.components.media_player.kodi import (
|
||||
EVENT_KODI_CALL_METHOD_RESULT)
|
||||
|
||||
ENTITY = 'input_select.kodi_results'
|
||||
MEDIA_PLAYER = 'media_player.kodi'
|
||||
DEFAULT_ACTION = "Nothing to do"
|
||||
MAX_RESULTS = 20
|
||||
|
||||
class DynamicKodiInputSelect(appapi.AppDaemon):
|
||||
"""AppDaemon app to dynamically populate an `input_select`."""
|
||||
_ids_options = None
|
||||
|
||||
def initialize(self):
|
||||
"""Set up appdaemon app."""
|
||||
self.listen_event(self._receive_kodi_result,
|
||||
EVENT_KODI_CALL_METHOD_RESULT)
|
||||
self.listen_state(self._change_selected_option, ENTITY)
|
||||
# Input select:
|
||||
self._ids_options = {DEFAULT_ACTION: None}
|
||||
|
||||
def _receive_kodi_result(self, event_id, payload_event, *args):
|
||||
result = payload_event['result']
|
||||
method = payload_event['input']['method']
|
||||
|
||||
assert event_id == EVENT_KODI_CALL_METHOD_RESULT
|
||||
if method == 'VideoLibrary.GetRecentlyAddedMovies':
|
||||
values = result['movies'][:MAX_RESULTS]
|
||||
data = [('{} ({})'.format(r['label'], r['year']),
|
||||
('MOVIE', r['file'])) for r in values]
|
||||
self._ids_options.update(dict(zip(*zip(*data))))
|
||||
labels = list(list(zip(*data))[0])
|
||||
self.call_service('input_select/set_options',
|
||||
entity_id=ENTITY,
|
||||
options=[DEFAULT_ACTION] + labels)
|
||||
self.set_state(ENTITY,
|
||||
attributes={"friendly_name": 'Recent Movies',
|
||||
"icon": 'mdi:movie'})
|
||||
elif method == 'VideoLibrary.GetRecentlyAddedEpisodes':
|
||||
values = list(filter(lambda r: not r['lastplayed'],
|
||||
result['episodes']))[:MAX_RESULTS]
|
||||
data = [('{} - {}'.format(r['showtitle'], r['label']),
|
||||
('TVSHOW', r['file'])) for r in values]
|
||||
self._ids_options.update(dict(zip(*zip(*data))))
|
||||
labels = list(list(zip(*data))[0])
|
||||
self.call_service('input_select/set_options',
|
||||
entity_id=ENTITY,
|
||||
options=[DEFAULT_ACTION] + labels)
|
||||
self.set_state(ENTITY,
|
||||
attributes={"friendly_name": 'Recent TvShows',
|
||||
"icon": 'mdi:play-circle'})
|
||||
elif method == 'PVR.GetChannels':
|
||||
values = result['channels']
|
||||
data = [(r['label'], ('CHANNEL', r['channelid']))
|
||||
for r in values]
|
||||
self._ids_options.update(dict(zip(*zip(*data))))
|
||||
labels = list(list(zip(*data))[0])
|
||||
self.call_service('input_select/set_options',
|
||||
entity_id=ENTITY,
|
||||
options=[DEFAULT_ACTION] + labels)
|
||||
self.set_state(ENTITY,
|
||||
attributes={"friendly_name": 'TV channels',
|
||||
"icon": 'mdi:play-box-outline'})
|
||||
|
||||
def _change_selected_option(self, entity, attribute, old, new, kwargs):
|
||||
selected = self._ids_options[new]
|
||||
if selected:
|
||||
mediatype, file = selected
|
||||
self.call_service('media_player/play_media',
|
||||
entity_id=MEDIA_PLAYER,
|
||||
media_content_type=mediatype,
|
||||
media_content_id=file)
|
||||
```
|
89
source/_docs/automation/editor.markdown
Normal file
@ -0,0 +1,89 @@
|
||||
---
|
||||
layout: page
|
||||
title: "Automation Editor"
|
||||
description: "Instructions on how to use the new automation editor."
|
||||
date: 2016-04-24 08:30 +0100
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
---
|
||||
|
||||
In Home Assistant 0.45 we have introduced the first version of our automation editor. The editor is still in a very early stage and rough around the edges. For now we are only supporting Chrome but better browser support is planned for the future.
|
||||
|
||||
If you just created a new configuration with Home Assistant then you're all set! Go to the UI and enjoy.
|
||||
|
||||
From the UI choose **Automation** which is located in the sidebar. Press the **+** sign in the lower right corner to get started. This example is based on the manual steps described in the [Getting started section](/getting-started/automation/) for a [`random` sensor](/components/sensor.random/).
|
||||
|
||||
Choose a meaningful name for your automation rules.
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/docs/automation-editor/new-automation.png' />
|
||||
</p>
|
||||
|
||||
If the value of the is greater than 10 then the automation rule should apply.
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/docs/automation-editor/new-trigger.png' />
|
||||
</p>
|
||||
|
||||
Firing a [persistent notification](/components/persistent_notification/) is the result.
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/docs/automation-editor/new-action.png' />
|
||||
</p>
|
||||
|
||||
As "Service Data" we want a simple text that is shown as part of the notification.
|
||||
|
||||
```json
|
||||
{
|
||||
"message": "Sensor value greater than 10"
|
||||
}
|
||||
```
|
||||
|
||||
Don't forget to save your new automation rule.
|
||||
|
||||
## {% linkable_title Updating your configuration to use the editor %}
|
||||
|
||||
The automation editor reads and writes to the file `automations.yaml` in your [configuration](/docs/configuration/) folder. Make sure that you have set up the automation component to read from it:
|
||||
|
||||
```yaml
|
||||
# Configuration.yaml example
|
||||
automation: !include automations.yaml
|
||||
```
|
||||
|
||||
If you still want to use your old automation section, add a label to the old entry:
|
||||
|
||||
```yaml
|
||||
automation old:
|
||||
- trigger:
|
||||
platform: ...
|
||||
```
|
||||
|
||||
## {% linkable_title Migrating your automations to `automations.yaml` %}
|
||||
|
||||
If you want to migrate your old automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over you'll have to add an `id`. This can be any string as long as it's unique.
|
||||
|
||||
```yaml
|
||||
# Example automations.yaml entry
|
||||
- id: my_unique_id # <-- Required for editor to work.
|
||||
alias: Hello world
|
||||
trigger:
|
||||
- entity_id: sun.sun
|
||||
from: below_horizon
|
||||
platform: state
|
||||
to: above_horizon
|
||||
condition:
|
||||
- above: 17
|
||||
below: 25
|
||||
condition: numeric_state
|
||||
entity_id: sensor.temperature
|
||||
value_template: '{% raw %}{{ float(state.state) + 2 }}{% endraw %}'
|
||||
action:
|
||||
- service: light.turn_on
|
||||
```
|
||||
|
||||
<p class='note'>
|
||||
Any comments in the YAML file will be lost when you update an automation via the editor.
|
||||
</p>
|
||||
|
@ -104,30 +104,3 @@ Upgrading Home Assistant is simple, just repeat steps 3, 5 and 6.
|
||||
### {% linkable_title Starting Home Assistant on boot %}
|
||||
|
||||
The [autostart instructions](/getting-started/autostart/) will work just fine, just be sure to replace `/usr/bin/hass` with `/srv/homeassistant/bin/hass` and specify the `homeassistant` user where appropriate.
|
||||
|
||||
### {% linkable_title Installing python-openzwave in a virtualenv %}
|
||||
|
||||
If you want to use Z-Wave devices, you will need to install `python-openzwave` in your virtualenv. This requires a small tweak to the instructions in [the Z-Wave Getting Started documentation](/getting-started/z-wave/)
|
||||
|
||||
Install the dependencies as normal (Note: you will need to do this as your normal user, since `homeassistant` isn't a sudoer).
|
||||
|
||||
```bash
|
||||
$ sudo apt-get install cython3 libudev-dev python3-sphinx python3-setuptools git
|
||||
```
|
||||
|
||||
Then, activate your virtualenv (steps 3 and 5 above) and upgrade cython.
|
||||
|
||||
```bash
|
||||
(homeassistant)$ pip3 install --upgrade cython==0.24.1
|
||||
```
|
||||
|
||||
Finally, get and install `python-openzwave`.
|
||||
|
||||
```bash
|
||||
(homeassistant)$ mkdir /srv/homeassistant/src
|
||||
(homeassistant)$ cd /srv/homeassistant/src
|
||||
(homeassistant)$ git clone https://github.com/OpenZWave/python-openzwave.git
|
||||
(homeassistant)$ cd python-openzwave
|
||||
(homeassistant)$ PYTHON_EXEC=`which python3` make build
|
||||
(homeassistant)$ PYTHON_EXEC=`which python3` make install
|
||||
```
|
||||
|
@ -14,56 +14,14 @@ redirect_from: /getting-started/z-wave/
|
||||
|
||||
There is currently support for climate, covers, lights, locks, sensors, switches and thermostats. All will be picked up automatically after configuring this platform.
|
||||
|
||||
### {% linkable_title Installation in Virtualenv (python-OpenZWave) %}
|
||||
|
||||
If you installed Home Assistant using a virtual environment then please read the instructions on [Installing python-OpenZWave in a virtualenv](https://home-assistant.io/docs/installation/virtualenv/#installing-python-openzwave-in-a-virtualenv).
|
||||
|
||||
### {% linkable_title Installation %}
|
||||
|
||||
To allow Home Assistant to talk to your Z-Wave USB stick you will have to compile the OpenZWave library and install the related [python-OpenZWave package](https://github.com/OpenZWave/python-openzwave). This can be done as follows. _(Note: The Home Assistant docker image and the All In One installer have support for Z-Wave already built-in!)_
|
||||
As of version 0.45, Home Assistant automatically installs python-openzwave from PyPI as needed.
|
||||
|
||||
Make sure you have the correct dependencies installed before running the script:
|
||||
There is one dependency you will need to have installed ahead of time:
|
||||
|
||||
```bash
|
||||
$ sudo apt-get install cython3 libudev-dev python3-sphinx python3-setuptools git
|
||||
```
|
||||
|
||||
Make sure you have at least version 0.23 and at the most 0.24.1 of cython.
|
||||
|
||||
```bash
|
||||
$ sudo pip3 install --upgrade cython==0.24.1
|
||||
```
|
||||
|
||||
Then get the OpenZWave files:
|
||||
|
||||
<p class='note warning'>Do not use root to build python-openzwave as it will surely fail.</p>
|
||||
|
||||
```bash
|
||||
$ git clone https://github.com/OpenZWave/python-openzwave.git
|
||||
$ cd python-openzwave
|
||||
$ PYTHON_EXEC=$(which python3) make build
|
||||
$ sudo PYTHON_EXEC=$(which python3) make install
|
||||
```
|
||||
|
||||
<p class='note'>
|
||||
Instead of `make install`, you can alternatively build your own python-openzwave package which can be easily uninstalled:
|
||||
</p>
|
||||
|
||||
```bash
|
||||
$ sudo apt-get install -y checkinstall
|
||||
$ sudo PYTHON_EXEC=$(which python3) checkinstall --pkgname python-openzwave --pkgversion 1.0 --provides python-openzwave
|
||||
```
|
||||
|
||||
With this installation, your `config_path` needed below will resemble:
|
||||
|
||||
```bash
|
||||
/usr/local/lib/python3.4/dist-packages/libopenzwave-0.3.0b8-py3.4-linux-x86_64.egg/config
|
||||
```
|
||||
|
||||
If you followed along with setting up a virtual environment, your path will be:
|
||||
|
||||
```bash
|
||||
/srv/homeassistant/src/python-openzwave/openzwave/config
|
||||
$ sudo apt-get install libudev-dev
|
||||
```
|
||||
|
||||
### {% linkable_title Configuration %}
|
||||
@ -77,7 +35,7 @@ zwave:
|
||||
Configuration variables:
|
||||
|
||||
- **usb_path** (*Optional*): The port where your device is connected to your Home Assistant host.
|
||||
- **config_path** (*Optional*): The path to the Python OpenZWave configuration files. Defaults to the folder `config` in your Python OpenZWave install directory.
|
||||
- **config_path** (*Optional*): The path to the Python OpenZWave configuration files. Defaults to the 'config' that is installed by python-openzwave
|
||||
- **autoheal** (*Optional*): Allows disabling auto Z-Wave heal at midnight. Defaults to True.
|
||||
- **polling_interval** (*Optional*): The time period in milliseconds between polls of a nodes value. Be careful about using polling values below 30000 (30 seconds) as polling can flood the zwave network and cause problems.
|
||||
- **device_config** (*Optional*): This attribute contains node-specific override values. (For releases prior to 0.39 this variable is called **customize**) See [Customizing devices and services](https://home-assistant.io/getting-started/customizing-devices/) for format:
|
||||
|
@ -55,6 +55,7 @@
|
||||
{% active_link /docs/automation/ Automation %}
|
||||
<ul>
|
||||
<li>{% active_link /docs/automation/examples/ Examples %}</li>
|
||||
<li>{% active_link /docs/automation/editor/ Editor %}</li>
|
||||
<li>{% active_link /docs/automation/trigger/ Triggers %}</li>
|
||||
<li>{% active_link /docs/automation/condition/ Conditions %}</li>
|
||||
<li>{% active_link /docs/automation/action/ Actions %}</li>
|
||||
|
@ -0,0 +1,417 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Home Assistant 0.45: Automation editor, Z-Wave panel, OCR"
|
||||
description: "AXIS and Keene support, PiFace, Raspihats, and Datadog integration"
|
||||
date: 2017-05-20 13:00:00 +0000
|
||||
date_formatted: "May 20, 2017"
|
||||
author: Paulus Schoutsen & Fabian Affolter
|
||||
author_twitter: balloob
|
||||
comments: true
|
||||
categories: Release-Notes
|
||||
og_image: /images/blog/2017-05-0.45/components.png
|
||||
---
|
||||
|
||||
<a href='/components/#added_in_current_version'><img src='/images/blog/2017-05-0.45/components.png' style='border: 0;box-shadow: none;'></a>
|
||||
|
||||
Welcome to another great release of Home Assistant! While some of contributors and users are gathering at PyCon US 2017, we still managed to get a great release together!
|
||||
|
||||
First thing for this release is a feature that has been requested a lot: an automation editor! It's still experimental - and many things are still in progress - but it works! You can create new automations and edit existing ones. If you start a new config, you're all good to go. Otherwise check [these instructions](https://home-assistant.io/docs/automation/editor/) to get your automations ready for editing in the UI.
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/blog/2017-05-0.45/trigger.png' />
|
||||
</p>
|
||||
|
||||
Check this [video](https://youtu.be/0j_hWdCTip4) by [Ben](https://twitter.com/BRUHautomation) from [BRUHautomation](http://www.bruhautomation.com/) to see the new release in action.
|
||||
|
||||
As the editor is experimental, there are some limitations. These include that Chrome/Chromium is the only supported browser, we don't support all triggers and actions and there is no support for conditions yet. But the foundation is there and so if you want to contribute to this, come help!
|
||||
|
||||
On the Z-Wave front a lot has happened. The biggest one is that we have a major extension of the Z-Wave panel thanks to [@turbokongen]! You will now be able to change config parameters and manage your devices.
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/blog/2017-05-0.45/zwave.png' />
|
||||
</p>
|
||||
Thanks to the work by the Python Open Z-Wave team we are now able to install it on demand from PyPi! There is no longer a need to pre-compile it yourself. This should give us the guarantee that we work with the Python Open Z-Wave version that the code expects.
|
||||
|
||||
<p class='note warning'>
|
||||
If you have a security key set in your Open Z-Wave `options.xml`, copy `options.xml` to your Home Assistant configuration directory. This is the only place where options will get persisted.
|
||||
</p>
|
||||
|
||||
Next to that [@armills] has lead the charge and managed to get full test coverage for Z-Wave! Thanks for all the hard work!
|
||||
|
||||
This release also contains two integrations which could help you to make non-smart devices a little smarter. The [`file` sensor][sensor.file docs] and the [`seven_segments` OCR image processing platform][image_processing.seven_segments docs]. The first simply reads a plain-text file which was created by a logger or alike. The latter one extracts the value from a captured image that shows a seven-segments display.
|
||||
|
||||
<p class='img'>
|
||||
<img src='{{site_root}}/images/blog/2017-05-0.45/power-meter.png' />
|
||||
</p>
|
||||
|
||||
And last, but not least, our Docker image is now based off Python 3.6. This version is faster and uses less memory than Python 3.5. Win!
|
||||
|
||||
If you are using our [experimental Hass.io image][hass.io], we made a breaking change in how the panel is served. If you have an existing installation, make sure you update your supervisor to the latest version before updating Home Assistant. If you are going to flash a new Hass.io image, make sure to only flash the new 0.8 image as linked on [the installation page][hass.io-install].
|
||||
|
||||
[hass.io]: https://community.home-assistant.io/t/introducing-hass-io/17296
|
||||
[hass.io-install]: https://home-assistant.io/hassio/installation/
|
||||
|
||||
## {% linkable_title New integrations %}
|
||||
|
||||
- Add new raspihats component ([@florincosta] - [#7392]) ([raspihats docs]) (new-platform)
|
||||
- Add datadog component ([@nunofgs] - [#7158]) ([datadog docs]) (new-platform)
|
||||
- Add support for automation config panel ([@balloob] - [#7509]) ([config.automation docs]) (new-platform)
|
||||
- Z-Wave panel API ([@turbokongen] - [#7456]) ([zwave docs]) ([zwave.api docs]) (new-platform)
|
||||
- myStrom Buttons support ([@fabaff] - [#7099]) ([binary_sensor.mystrom docs]) (new-platform)
|
||||
- Support for the PiFace Digital I/O module ([@basschipper] - [#7494]) ([rpi_pfio docs]) ([binary_sensor.rpi_pfio docs]) ([switch.rpi_pfio docs]) (new-platform)
|
||||
- Add raspihats binary sensor ([@florincosta] - [#7508]) ([binary_sensor.raspihats docs]) (new-platform)
|
||||
- Support lutron serena shades ([@gurumitts] - [#7565]) ([lutron_caseta docs]) ([cover.lutron_caseta docs]) (new-platform)
|
||||
- Add Kira component to sensor and remote platforms ([@stu-gott] - [#7479]) ([kira docs]) ([remote.kira docs]) ([sensor.kira docs]) (new-platform)
|
||||
- File sensor ([@fabaff] - [#7569]) ([sensor.file docs]) (new-platform)
|
||||
- Seven segments OCR image processing ([@fabaff] - [#7632]) ([image_processing.seven_segments docs]) (new-platform)
|
||||
- Axis component ([@Kane610] - [#7381]) ([axis docs]) (new-platform)
|
||||
|
||||
## {% linkable_title If you need help... %}
|
||||
...don't hesitate to use our very active [forums][forum] or join us for a little [chat][gitter]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks.
|
||||
|
||||
## {% linkable_title Reporting Issues %}
|
||||
Experiencing issues introduced by this release? Please report them in our [issue tracker][issue]. Make sure to fill in all fields of the issue template.
|
||||
|
||||
<!--more-->
|
||||
## {% linkable_title Breaking changes %}
|
||||
|
||||
- PyPI Openzwave ([@JshWright] - [#7415]) ([zwave docs]) (breaking change)
|
||||
- Remove listening to `homeassistant_start` with event automation ([@balloob] - [#7474]) ([automation.event docs]) (breaking change)
|
||||
|
||||
## {% linkable_title All changes %}
|
||||
|
||||
- Add hass to rfxtrx object ([@danielhiversen] - [#6844])
|
||||
- Add new raspihats component ([@florincosta] - [#7392]) ([raspihats docs]) (new-platform)
|
||||
- sensor.envirophat: add missing requirement ([@imrehg] - [#7451]) ([sensor.envirophat docs])
|
||||
- PyPI Openzwave ([@JshWright] - [#7415]) ([zwave docs]) (breaking change)
|
||||
- Add datadog component ([@nunofgs] - [#7158])
|
||||
- Add tests for deprecation helpers ([@armills] - [#7452])
|
||||
- Forecasts for weather underground ([@pezinek] - [#7062]) ([sensor.wunderground docs])
|
||||
- sensor.envirophat: add missing requirement ([@imrehg] - [#7451]) ([sensor.envirophat docs])
|
||||
- Switch russound, pymysensors, and pocketcasts to pypi ([@andrey-git] - [#7449])
|
||||
- Upgrade pymysensors to 0.10.0 ([@MartinHjelmare] - [#7469])
|
||||
- Upgrade Dockerfile to Python 3.6 ([@balloob] - [#7471])
|
||||
- Test only dependencies ([@balloob] - [#7472])
|
||||
- Update to pyunifi 2.12 ([@finish06] - [#7468]) ([device_tracker.unifi docs])
|
||||
- Remove listening to homeassistant_start with event automation ([@balloob] - [#7474]) ([automation.event docs]) (breaking change)
|
||||
- Fix plant MIN_TEMPERATURE, MAX_TEMPERATURE validation ([@frog32] - [#7476]) ([plant docs])
|
||||
- Forecasts for weather underground ([@pezinek] - [#7062]) ([sensor.wunderground docs])
|
||||
- Upgrade pymysensors to 0.10.0 ([@MartinHjelmare] - [#7469])
|
||||
- Fix plant MIN_TEMPERATURE, MAX_TEMPERATURE validation ([@frog32] - [#7476]) ([plant docs])
|
||||
- Update to pyunifi 2.12 ([@finish06] - [#7468]) ([device_tracker.unifi docs])
|
||||
- Uses pypi for deps ([@gurumitts] - [#7485]) ([lutron_caseta docs])
|
||||
- 0.44.2 ([@balloob] - [#7488])
|
||||
- LIFX: avoid out-of-bounds hue aborting the colorloop effect ([@amelchio] - [#7495])
|
||||
- Upgrade async_timeout to 1.2.1 ([@fabaff] - [#7490])
|
||||
- Prevent printing of packets. ([@aequitas] - [#7492]) ([rflink docs])
|
||||
- Upgrade beautifulsoup4 to 4.6.0 ([@fabaff] - [#7491]) ([device_tracker.linksys_ap docs]) ([sensor.scrape docs])
|
||||
- Switch onkyo to pypi ([@andrey-git] - [#7497]) ([media_player.onkyo docs])
|
||||
- Fixed potential AttributeError when checking for deleted sources ([@scarface-4711] - [#7502]) ([media_player.denonavr docs])
|
||||
- Refactor sun component for correctness ([@armills] - [#7295])
|
||||
- new source only forces "play" if the current state is "playing" ([@abmantis] - [#7506]) ([media_player.spotify docs])
|
||||
- Correct retrieval of spotify shuffle state ([@andersonshatch] - [#7505]) ([media_player.spotify docs])
|
||||
- Fix sonos sleep timer ([@frog32] - [#7503]) ([media_player.sonos docs])
|
||||
- Add support for automation config panel ([@balloob] - [#7509]) ([automation.__init__ docs]) ([config.automation docs]) ([config.__init__ docs]) (new-platform)
|
||||
- Zwave panel api ([@turbokongen] - [#7456]) ([zwave docs]) ([zwave.api docs]) (new-platform)
|
||||
- Update docker dev environment to python3.6 ([@frog32] - [#7520])
|
||||
- Switch basicmodem and python-roku to pypi ([@andrey-git] - [#7514]) ([media_player.roku docs]) ([sensor.modem_callerid docs])
|
||||
- sensor.envirophat: do not set up platform if hardware is not attached ([@imrehg] - [#7438]) ([sensor.envirophat docs])
|
||||
- Telegram Bot enhancements with callback queries and new notification services ([@azogue] - [#7454]) ([telegram_bot docs]) ([notify.telegram docs]) ([telegram_bot.polling docs]) ([telegram_bot.services.yaml docs]) ([telegram_bot.webhooks docs])
|
||||
- Add password parameter to uvc component ([@nunofgs] - [#7499]) ([camera.uvc docs])
|
||||
- Don't interact with hass directly ([@fabaff] - [#7099]) ([binary_sensor.mystrom docs]) (new-platform)
|
||||
- Support for the PiFace Digital I/O module ([@basschipper] - [#7494]) ([rpi_pfio docs]) ([binary_sensor.rpi_pfio docs]) ([switch.rpi_pfio docs]) (new-platform)
|
||||
- Upgrade limitlessled to 1.0.7 ([@corneyl] - [#7525]) ([light.limitlessled docs])
|
||||
- Update docstrings and log messages ([@fabaff] - [#7526]) ([light.blinksticklight docs]) ([light.enocean docs]) ([light.flux_led docs]) ([light.insteon_local docs]) ([light.insteon_plm docs]) ([light.isy994 docs]) ([light.limitlessled docs]) ([light.mystrom docs])
|
||||
- Try to request current_location Automatic scope ([@armills] - [#7447]) ([device_tracker.automatic docs])
|
||||
- Add myStrom binary sensor ([@fabaff] - [#7530])
|
||||
- Add not-context-manager ([@fabaff] - [#7523])
|
||||
- Threadsafe configurator ([@Kane610] - [#7536]) ([configurator docs])
|
||||
- Fix for #7459 ([@jumpkick] - [#7544]) ([alexa docs])
|
||||
- Upgrade sendgrid to 4.1.0 ([@fabaff] - [#7538]) ([notify.sendgrid docs])
|
||||
- Automatic version bump ([@armills] - [#7555]) ([device_tracker.automatic docs])
|
||||
- Upgrade dweepy to 0.3.0 ([@fabaff] - [#7550]) ([dweet docs]) ([sensor.dweet docs])
|
||||
- Add SSL support to NZBGet sensor ([@tboyce021] - [#7553]) ([sensor.nzbget docs])
|
||||
- Do not install all dependencies in dev mode ([@balloob] - [#7548])
|
||||
- Hide proximity updates in logbook ([@armills] - [#7549]) ([logbook docs])
|
||||
- Only install tox in dev mode ([@balloob] - [#7557])
|
||||
- Support adding different server locations for Microsoft face component ([@tsvi] - [#7532]) ([microsoft_face docs])
|
||||
- Treat swing and fan level as optional in Sensibo Climate. ([@andrey-git] - [#7560]) ([climate.sensibo docs])
|
||||
- LIFX: add lifx_set_state service call ([@amelchio] - [#7552]) ([light.lifx docs])
|
||||
- Add raspihats binary sensor ([@florincosta] - [#7508]) ([binary_sensor.raspihats docs]) (new-platform)
|
||||
- update pywebpush to 1.0.0 ([@perosb] - [#7561]) ([notify.html5 docs])
|
||||
- Initialize sun with correct values. ([@aequitas] - [#7559]) ([sun docs])
|
||||
- Comment RasPi specific requirements ([@Juggels] - [#7562]) ([sensor.envirophat docs])
|
||||
- Update netdisco ([@balloob] - [#7563])
|
||||
- Support lutron serena shades ([@gurumitts] - [#7565]) ([lutron_caseta docs]) ([cover.lutron_caseta docs]) (new-platform)
|
||||
- Tests for zwave discovery logic ([@armills] - [#7566])
|
||||
- Tests for zwave setup features ([@armills] - [#7570])
|
||||
- Blink version bump ([@fronzbot] - [#7571]) ([blink docs]) ([sensor.blink docs])
|
||||
- Fix systematic warning in influxdb sensor ([@bestlibre] - [#7541]) ([sensor.influxdb docs])
|
||||
- Fix Kodi specific services registry and add descriptions ([@azogue] - [#7551]) ([media_player.kodi docs])
|
||||
- Add Kira component to sensor and remote platforms ([@stu-gott] - [#7479]) ([kira docs]) ([remote.kira docs]) ([sensor.kira docs]) (new-platform)
|
||||
- Add tests for zwave network events ([@armills] - [#7573])
|
||||
- Additional Wink lock features ([@w1ll1am23] - [#7445])
|
||||
- Websocket_api: avoid parallel drain ([@balloob] - [#7576]) ([websocket_api docs])
|
||||
- Remove more test requirements ([@balloob] - [#7574])
|
||||
- camera.zoneminder: Handle old versions of zoneminder ([@mnoorenberghe] - [#7589]) ([camera.zoneminder docs])
|
||||
- Pass additional arguments to tox in test_docker ([@frog32] - [#7591])
|
||||
- Fix websocket api reaching queue ([@balloob] - [#7590]) ([websocket_api docs])
|
||||
- SMTP notify enhancements: full HTML emails and custom `product_name` in email headers ([@azogue] - [#7533]) ([notify.smtp docs])
|
||||
- Automation State Change For timer attribute fix ([@armills] - [#7584]) ([automation.state docs])
|
||||
- Add posibility to specify snmp protocol version ([@jhemzal] - [#7564]) ([sensor.snmp docs])
|
||||
- Add sonos alarm clock update service ([@frog32] - [#7521]) ([media_player.sonos docs])
|
||||
- Fix handling of single user ([@mezz64] - [#7587]) ([eight_sleep docs])
|
||||
- File sensor ([@fabaff] - [#7569]) ([sensor.file docs]) (new-platform)
|
||||
- Make miflora monitored_conditions parameter optional ([@frog32] - [#7598]) ([sensor.miflora docs])
|
||||
- Force automation ids to always be a string ([@balloob] - [#7612]) ([automation.__init__ docs])
|
||||
- Update Docker base image to python 3.6 ([@pschmitt] - [#7613])
|
||||
- Add Content-type: image/jpeg for camera proxy ([@olekenneth] - [#7581]) ([camera.__init__ docs])
|
||||
- Fix typo and update style to match the other platforms ([@fabaff] - [#7621]) ([image_processing.opencv docs])
|
||||
- Bump pyvera - fixes issue with % in brightness levels. ([@pavoni] - [#7622]) ([vera docs])
|
||||
- Add kelvin/brightness_pct alternatives to light.turn_on ([@amelchio] - [#7596]) ([light.lifx docs]) ([light.__init__ docs])
|
||||
- Add support for disabling tradfri groups ([@cnrd] - [#7593]) ([tradfri docs]) ([light.tradfri docs])
|
||||
- Update docstrings and comments ([@fabaff] - [#7626]) ([image_processing.openalpr_cloud docs]) ([image_processing.openalpr_local docs])
|
||||
- Upgrade Sphinx to 1.6.1 ([@fabaff] - [#7624])
|
||||
- Update docstrings ([@fabaff] - [#7630]) ([image_processing.demo docs]) ([image_processing.dlib_face_detect docs]) ([image_processing.dlib_face_identify docs]) ([image_processing.microsoft_face_detect docs]) ([image_processing.microsoft_face_identify docs]) ([image_processing.opencv docs])
|
||||
- Kodi specific service to call Kodi API methods ([@azogue] - [#7603]) ([media_player.kodi docs])
|
||||
- Updated limitlessled requirement to v1.0.8 ([@corneyl] - [#7629])
|
||||
- Osram lightify Removed wrong assignment ([@commento] - [#7615]) ([light.osramlightify docs])
|
||||
- Updated dependency ([@danielperna84] - [#7638]) ([homematic docs])
|
||||
- Seven segments OCR image processing ([@fabaff] - [#7632]) ([image_processing.seven_segments docs]) ([image_processing.__init__ docs]) (new-platform)
|
||||
- Abort tests when instances leaked ([@balloob] - [#7623])
|
||||
- Coerce color_temp to int even when passed in as kelvin ([@amelchio] - [#7640]) ([light.__init__ docs])
|
||||
- Fix automation failing to setup if no automations specified ([@balloob] - [#7647]) ([automation.__init__ docs])
|
||||
|
||||
[#6844]: https://github.com/home-assistant/home-assistant/pull/6844
|
||||
[#7062]: https://github.com/home-assistant/home-assistant/pull/7062
|
||||
[#7099]: https://github.com/home-assistant/home-assistant/pull/7099
|
||||
[#7158]: https://github.com/home-assistant/home-assistant/pull/7158
|
||||
[#7295]: https://github.com/home-assistant/home-assistant/pull/7295
|
||||
[#7381]: https://github.com/home-assistant/home-assistant/pull/7381
|
||||
[#7392]: https://github.com/home-assistant/home-assistant/pull/7392
|
||||
[#7415]: https://github.com/home-assistant/home-assistant/pull/7415
|
||||
[#7438]: https://github.com/home-assistant/home-assistant/pull/7438
|
||||
[#7445]: https://github.com/home-assistant/home-assistant/pull/7445
|
||||
[#7447]: https://github.com/home-assistant/home-assistant/pull/7447
|
||||
[#7449]: https://github.com/home-assistant/home-assistant/pull/7449
|
||||
[#7451]: https://github.com/home-assistant/home-assistant/pull/7451
|
||||
[#7452]: https://github.com/home-assistant/home-assistant/pull/7452
|
||||
[#7454]: https://github.com/home-assistant/home-assistant/pull/7454
|
||||
[#7456]: https://github.com/home-assistant/home-assistant/pull/7456
|
||||
[#7468]: https://github.com/home-assistant/home-assistant/pull/7468
|
||||
[#7469]: https://github.com/home-assistant/home-assistant/pull/7469
|
||||
[#7471]: https://github.com/home-assistant/home-assistant/pull/7471
|
||||
[#7472]: https://github.com/home-assistant/home-assistant/pull/7472
|
||||
[#7474]: https://github.com/home-assistant/home-assistant/pull/7474
|
||||
[#7476]: https://github.com/home-assistant/home-assistant/pull/7476
|
||||
[#7479]: https://github.com/home-assistant/home-assistant/pull/7479
|
||||
[#7485]: https://github.com/home-assistant/home-assistant/pull/7485
|
||||
[#7488]: https://github.com/home-assistant/home-assistant/pull/7488
|
||||
[#7490]: https://github.com/home-assistant/home-assistant/pull/7490
|
||||
[#7491]: https://github.com/home-assistant/home-assistant/pull/7491
|
||||
[#7492]: https://github.com/home-assistant/home-assistant/pull/7492
|
||||
[#7494]: https://github.com/home-assistant/home-assistant/pull/7494
|
||||
[#7495]: https://github.com/home-assistant/home-assistant/pull/7495
|
||||
[#7497]: https://github.com/home-assistant/home-assistant/pull/7497
|
||||
[#7499]: https://github.com/home-assistant/home-assistant/pull/7499
|
||||
[#7502]: https://github.com/home-assistant/home-assistant/pull/7502
|
||||
[#7503]: https://github.com/home-assistant/home-assistant/pull/7503
|
||||
[#7505]: https://github.com/home-assistant/home-assistant/pull/7505
|
||||
[#7506]: https://github.com/home-assistant/home-assistant/pull/7506
|
||||
[#7508]: https://github.com/home-assistant/home-assistant/pull/7508
|
||||
[#7509]: https://github.com/home-assistant/home-assistant/pull/7509
|
||||
[#7514]: https://github.com/home-assistant/home-assistant/pull/7514
|
||||
[#7520]: https://github.com/home-assistant/home-assistant/pull/7520
|
||||
[#7521]: https://github.com/home-assistant/home-assistant/pull/7521
|
||||
[#7523]: https://github.com/home-assistant/home-assistant/pull/7523
|
||||
[#7525]: https://github.com/home-assistant/home-assistant/pull/7525
|
||||
[#7526]: https://github.com/home-assistant/home-assistant/pull/7526
|
||||
[#7530]: https://github.com/home-assistant/home-assistant/pull/7530
|
||||
[#7532]: https://github.com/home-assistant/home-assistant/pull/7532
|
||||
[#7533]: https://github.com/home-assistant/home-assistant/pull/7533
|
||||
[#7536]: https://github.com/home-assistant/home-assistant/pull/7536
|
||||
[#7538]: https://github.com/home-assistant/home-assistant/pull/7538
|
||||
[#7541]: https://github.com/home-assistant/home-assistant/pull/7541
|
||||
[#7544]: https://github.com/home-assistant/home-assistant/pull/7544
|
||||
[#7548]: https://github.com/home-assistant/home-assistant/pull/7548
|
||||
[#7549]: https://github.com/home-assistant/home-assistant/pull/7549
|
||||
[#7550]: https://github.com/home-assistant/home-assistant/pull/7550
|
||||
[#7551]: https://github.com/home-assistant/home-assistant/pull/7551
|
||||
[#7552]: https://github.com/home-assistant/home-assistant/pull/7552
|
||||
[#7553]: https://github.com/home-assistant/home-assistant/pull/7553
|
||||
[#7555]: https://github.com/home-assistant/home-assistant/pull/7555
|
||||
[#7557]: https://github.com/home-assistant/home-assistant/pull/7557
|
||||
[#7559]: https://github.com/home-assistant/home-assistant/pull/7559
|
||||
[#7560]: https://github.com/home-assistant/home-assistant/pull/7560
|
||||
[#7561]: https://github.com/home-assistant/home-assistant/pull/7561
|
||||
[#7562]: https://github.com/home-assistant/home-assistant/pull/7562
|
||||
[#7563]: https://github.com/home-assistant/home-assistant/pull/7563
|
||||
[#7564]: https://github.com/home-assistant/home-assistant/pull/7564
|
||||
[#7565]: https://github.com/home-assistant/home-assistant/pull/7565
|
||||
[#7566]: https://github.com/home-assistant/home-assistant/pull/7566
|
||||
[#7569]: https://github.com/home-assistant/home-assistant/pull/7569
|
||||
[#7570]: https://github.com/home-assistant/home-assistant/pull/7570
|
||||
[#7571]: https://github.com/home-assistant/home-assistant/pull/7571
|
||||
[#7573]: https://github.com/home-assistant/home-assistant/pull/7573
|
||||
[#7574]: https://github.com/home-assistant/home-assistant/pull/7574
|
||||
[#7576]: https://github.com/home-assistant/home-assistant/pull/7576
|
||||
[#7581]: https://github.com/home-assistant/home-assistant/pull/7581
|
||||
[#7584]: https://github.com/home-assistant/home-assistant/pull/7584
|
||||
[#7587]: https://github.com/home-assistant/home-assistant/pull/7587
|
||||
[#7589]: https://github.com/home-assistant/home-assistant/pull/7589
|
||||
[#7590]: https://github.com/home-assistant/home-assistant/pull/7590
|
||||
[#7591]: https://github.com/home-assistant/home-assistant/pull/7591
|
||||
[#7593]: https://github.com/home-assistant/home-assistant/pull/7593
|
||||
[#7596]: https://github.com/home-assistant/home-assistant/pull/7596
|
||||
[#7598]: https://github.com/home-assistant/home-assistant/pull/7598
|
||||
[#7603]: https://github.com/home-assistant/home-assistant/pull/7603
|
||||
[#7612]: https://github.com/home-assistant/home-assistant/pull/7612
|
||||
[#7613]: https://github.com/home-assistant/home-assistant/pull/7613
|
||||
[#7615]: https://github.com/home-assistant/home-assistant/pull/7615
|
||||
[#7621]: https://github.com/home-assistant/home-assistant/pull/7621
|
||||
[#7622]: https://github.com/home-assistant/home-assistant/pull/7622
|
||||
[#7623]: https://github.com/home-assistant/home-assistant/pull/7623
|
||||
[#7624]: https://github.com/home-assistant/home-assistant/pull/7624
|
||||
[#7626]: https://github.com/home-assistant/home-assistant/pull/7626
|
||||
[#7629]: https://github.com/home-assistant/home-assistant/pull/7629
|
||||
[#7630]: https://github.com/home-assistant/home-assistant/pull/7630
|
||||
[#7632]: https://github.com/home-assistant/home-assistant/pull/7632
|
||||
[#7638]: https://github.com/home-assistant/home-assistant/pull/7638
|
||||
[#7640]: https://github.com/home-assistant/home-assistant/pull/7640
|
||||
[#7647]: https://github.com/home-assistant/home-assistant/pull/7647
|
||||
[@JshWright]: https://github.com/JshWright
|
||||
[@Juggels]: https://github.com/Juggels
|
||||
[@Kane610]: https://github.com/Kane610
|
||||
[@MartinHjelmare]: https://github.com/MartinHjelmare
|
||||
[@abmantis]: https://github.com/abmantis
|
||||
[@aequitas]: https://github.com/aequitas
|
||||
[@amelchio]: https://github.com/amelchio
|
||||
[@andersonshatch]: https://github.com/andersonshatch
|
||||
[@andrey-git]: https://github.com/andrey-git
|
||||
[@armills]: https://github.com/armills
|
||||
[@azogue]: https://github.com/azogue
|
||||
[@balloob]: https://github.com/balloob
|
||||
[@basschipper]: https://github.com/basschipper
|
||||
[@bestlibre]: https://github.com/bestlibre
|
||||
[@cnrd]: https://github.com/cnrd
|
||||
[@commento]: https://github.com/commento
|
||||
[@corneyl]: https://github.com/corneyl
|
||||
[@cribbstechnologies]: https://github.com/cribbstechnologies
|
||||
[@danielhiversen]: https://github.com/danielhiversen
|
||||
[@danielperna84]: https://github.com/danielperna84
|
||||
[@fabaff]: https://github.com/fabaff
|
||||
[@finish06]: https://github.com/finish06
|
||||
[@florincosta]: https://github.com/florincosta
|
||||
[@frog32]: https://github.com/frog32
|
||||
[@fronzbot]: https://github.com/fronzbot
|
||||
[@gurumitts]: https://github.com/gurumitts
|
||||
[@imrehg]: https://github.com/imrehg
|
||||
[@jhemzal]: https://github.com/jhemzal
|
||||
[@jminardi]: https://github.com/jminardi
|
||||
[@jumpkick]: https://github.com/jumpkick
|
||||
[@mezz64]: https://github.com/mezz64
|
||||
[@mnoorenberghe]: https://github.com/mnoorenberghe
|
||||
[@nunofgs]: https://github.com/nunofgs
|
||||
[@olekenneth]: https://github.com/olekenneth
|
||||
[@pavoni]: https://github.com/pavoni
|
||||
[@perosb]: https://github.com/perosb
|
||||
[@pezinek]: https://github.com/pezinek
|
||||
[@pschmitt]: https://github.com/pschmitt
|
||||
[@robbiet480]: https://github.com/robbiet480
|
||||
[@scarface-4711]: https://github.com/scarface-4711
|
||||
[@stu-gott]: https://github.com/stu-gott
|
||||
[@tboyce021]: https://github.com/tboyce021
|
||||
[@tsvi]: https://github.com/tsvi
|
||||
[@turbokongen]: https://github.com/turbokongen
|
||||
[@w1ll1am23]: https://github.com/w1ll1am23
|
||||
[alexa docs]: https://home-assistant.io/components/alexa/
|
||||
[axis docs]: https://home-assistant.io/components/axis/
|
||||
[config.automation docs]: https://home-assistant.io/docs/automation/editor/
|
||||
[automation.event docs]: https://home-assistant.io/components/automation.event/
|
||||
[automation.state docs]: https://home-assistant.io/components/automation.state/
|
||||
[binary_sensor.mystrom docs]: https://home-assistant.io/components/binary_sensor.mystrom/
|
||||
[binary_sensor.raspihats docs]: https://home-assistant.io/components/binary_sensor.raspihats/
|
||||
[binary_sensor.rpi_pfio docs]: https://home-assistant.io/components/binary_sensor.rpi_pfio/
|
||||
[blink docs]: https://home-assistant.io/components/blink/
|
||||
[camera.__init__ docs]: https://home-assistant.io/components/camera.__init__/
|
||||
[camera.uvc docs]: https://home-assistant.io/components/camera.uvc/
|
||||
[camera.zoneminder docs]: https://home-assistant.io/components/camera.zoneminder/
|
||||
[climate.sensibo docs]: https://home-assistant.io/components/climate.sensibo/
|
||||
[config.__init__ docs]: https://home-assistant.io/components/config.__init__/
|
||||
[config.automation docs]: https://home-assistant.io/components/config.automation/
|
||||
[configurator docs]: https://home-assistant.io/components/configurator/
|
||||
[cover.lutron_caseta docs]: https://home-assistant.io/components/cover.lutron_caseta/
|
||||
[datadog docs]: https://home-assistant.io/components/datadog/
|
||||
[device_tracker.automatic docs]: https://home-assistant.io/components/device_tracker.automatic/
|
||||
[device_tracker.linksys_ap docs]: https://home-assistant.io/components/device_tracker.linksys_ap/
|
||||
[device_tracker.unifi docs]: https://home-assistant.io/components/device_tracker.unifi/
|
||||
[dweet docs]: https://home-assistant.io/components/dweet/
|
||||
[eight_sleep docs]: https://home-assistant.io/components/eight_sleep/
|
||||
[homematic docs]: https://home-assistant.io/components/homematic/
|
||||
[image_processing.__init__ docs]: https://home-assistant.io/components/image_processing.__init__/
|
||||
[image_processing.demo docs]: https://home-assistant.io/components/image_processing.demo/
|
||||
[image_processing.dlib_face_detect docs]: https://home-assistant.io/components/image_processing.dlib_face_detect/
|
||||
[image_processing.dlib_face_identify docs]: https://home-assistant.io/components/image_processing.dlib_face_identify/
|
||||
[image_processing.microsoft_face_detect docs]: https://home-assistant.io/components/image_processing.microsoft_face_detect/
|
||||
[image_processing.microsoft_face_identify docs]: https://home-assistant.io/components/image_processing.microsoft_face_identify/
|
||||
[image_processing.openalpr_cloud docs]: https://home-assistant.io/components/image_processing.openalpr_cloud/
|
||||
[image_processing.openalpr_local docs]: https://home-assistant.io/components/image_processing.openalpr_local/
|
||||
[image_processing.opencv docs]: https://home-assistant.io/components/image_processing.opencv/
|
||||
[image_processing.seven_segments docs]: https://home-assistant.io/components/image_processing.seven_segments/
|
||||
[kira docs]: https://home-assistant.io/components/kira/
|
||||
[light.__init__ docs]: https://home-assistant.io/components/light.__init__/
|
||||
[light.blinksticklight docs]: https://home-assistant.io/components/light.blinksticklight/
|
||||
[light.enocean docs]: https://home-assistant.io/components/light.enocean/
|
||||
[light.flux_led docs]: https://home-assistant.io/components/light.flux_led/
|
||||
[light.insteon_local docs]: https://home-assistant.io/components/light.insteon_local/
|
||||
[light.insteon_plm docs]: https://home-assistant.io/components/light.insteon_plm/
|
||||
[light.isy994 docs]: https://home-assistant.io/components/light.isy994/
|
||||
[light.lifx docs]: https://home-assistant.io/components/light.lifx/
|
||||
[light.limitlessled docs]: https://home-assistant.io/components/light.limitlessled/
|
||||
[light.mystrom docs]: https://home-assistant.io/components/light.mystrom/
|
||||
[light.osramlightify docs]: https://home-assistant.io/components/light.osramlightify/
|
||||
[light.tradfri docs]: https://home-assistant.io/components/light.tradfri/
|
||||
[logbook docs]: https://home-assistant.io/components/logbook/
|
||||
[lutron_caseta docs]: https://home-assistant.io/components/lutron_caseta/
|
||||
[media_player.denonavr docs]: https://home-assistant.io/components/media_player.denonavr/
|
||||
[media_player.kodi docs]: https://home-assistant.io/components/media_player.kodi/
|
||||
[media_player.onkyo docs]: https://home-assistant.io/components/media_player.onkyo/
|
||||
[media_player.roku docs]: https://home-assistant.io/components/media_player.roku/
|
||||
[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/
|
||||
[media_player.spotify docs]: https://home-assistant.io/components/media_player.spotify/
|
||||
[microsoft_face docs]: https://home-assistant.io/components/microsoft_face/
|
||||
[notify.html5 docs]: https://home-assistant.io/components/notify.html5/
|
||||
[notify.sendgrid docs]: https://home-assistant.io/components/notify.sendgrid/
|
||||
[notify.smtp docs]: https://home-assistant.io/components/notify.smtp/
|
||||
[notify.telegram docs]: https://home-assistant.io/components/notify.telegram/
|
||||
[plant docs]: https://home-assistant.io/components/plant/
|
||||
[raspihats docs]: https://home-assistant.io/components/raspihats/
|
||||
[remote.kira docs]: https://home-assistant.io/components/remote.kira/
|
||||
[rflink docs]: https://home-assistant.io/components/rflink/
|
||||
[rpi_pfio docs]: https://home-assistant.io/components/rpi_pfio/
|
||||
[sensor.blink docs]: https://home-assistant.io/components/sensor.blink/
|
||||
[sensor.dweet docs]: https://home-assistant.io/components/sensor.dweet/
|
||||
[sensor.envirophat docs]: https://home-assistant.io/components/sensor.envirophat/
|
||||
[sensor.file docs]: https://home-assistant.io/components/sensor.file/
|
||||
[sensor.influxdb docs]: https://home-assistant.io/components/sensor.influxdb/
|
||||
[sensor.kira docs]: https://home-assistant.io/components/sensor.kira/
|
||||
[sensor.miflora docs]: https://home-assistant.io/components/sensor.miflora/
|
||||
[sensor.modem_callerid docs]: https://home-assistant.io/components/sensor.modem_callerid/
|
||||
[sensor.nzbget docs]: https://home-assistant.io/components/sensor.nzbget/
|
||||
[sensor.scrape docs]: https://home-assistant.io/components/sensor.scrape/
|
||||
[sensor.snmp docs]: https://home-assistant.io/components/sensor.snmp/
|
||||
[sensor.wunderground docs]: https://home-assistant.io/components/sensor.wunderground/
|
||||
[sun docs]: https://home-assistant.io/components/sun/
|
||||
[switch.rpi_pfio docs]: https://home-assistant.io/components/switch.rpi_pfio/
|
||||
[telegram_bot docs]: https://home-assistant.io/components/telegram_bot/
|
||||
[telegram_bot.polling docs]: https://home-assistant.io/components/telegram_bot.polling/
|
||||
[telegram_bot.services.yaml docs]: https://home-assistant.io/components/telegram_bot.services.yaml/
|
||||
[telegram_bot.webhooks docs]: https://home-assistant.io/components/telegram_bot.webhooks/
|
||||
[tradfri docs]: https://home-assistant.io/components/tradfri/
|
||||
[vera docs]: https://home-assistant.io/components/vera/
|
||||
[websocket_api docs]: https://home-assistant.io/components/websocket_api/
|
||||
[zwave docs]: https://home-assistant.io/components/zwave/
|
||||
[zwave.api docs]: https://home-assistant.io/components/zwave.api/
|
||||
[forum]: https://community.home-assistant.io/
|
||||
[gitter]: https://gitter.im/home-assistant/home-assistant
|
||||
[issue]: https://github.com/home-assistant/home-assistant/issues
|
18
source/developers/frontend.markdown
Normal file → Executable file
@ -39,6 +39,24 @@ Next step is to get the frontend code. When you clone the Home Assistant reposit
|
||||
$ script/bootstrap_frontend
|
||||
```
|
||||
|
||||
This script will update the git submodule for the polymer project in
|
||||
|
||||
`home-assistant/homeassistant/components/frontend/www_static/home-assistant-polymer`.
|
||||
|
||||
If you're planning on issuing a PR back to the Home Assistant codebase you need to fork the polymer project and add your fork as a remote.
|
||||
|
||||
```bash
|
||||
$ cd homeassistant/components/frontend/www_static/home-assistant-polymer
|
||||
$ git remote add <remote name> <github URL to your fork>
|
||||
```
|
||||
|
||||
When you've made your changes and are ready to push them change to the working directory for the polymer project and then push your changes
|
||||
|
||||
``` bash
|
||||
$ cd homeassistant/components/frontend/www_static/home-assistant-polymer
|
||||
$ git push -u <remote name> HEAD
|
||||
```
|
||||
|
||||
## {% linkable_title Development %}
|
||||
|
||||
While you are developing, you need to have Rollup running to have changes you make to the JavaScript app-core made available.
|
||||
|
BIN
source/images/blog/2017-05-0.45/components.png
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
source/images/blog/2017-05-0.45/power-meter.png
Normal file
After Width: | Height: | Size: 170 KiB |
BIN
source/images/blog/2017-05-0.45/trigger.png
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
source/images/blog/2017-05-0.45/zwave.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
source/images/docs/automation-editor/new-action.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
source/images/docs/automation-editor/new-automation.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
source/images/docs/automation-editor/new-trigger.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
source/images/screenshots/datadog-board-example.png
Normal file
After Width: | Height: | Size: 399 KiB |
BIN
source/images/screenshots/datadog-event-stream.png
Normal file
After Width: | Height: | Size: 236 KiB |
BIN
source/images/screenshots/ssocr.png
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
source/images/supported_brands/axis.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
source/images/supported_brands/datadog.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
source/images/supported_brands/keene.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
source/images/supported_brands/raspihats.png
Normal file
After Width: | Height: | Size: 27 KiB |