Merge branch 'current' into next
@ -101,8 +101,8 @@ social:
|
|||||||
# Home Assistant release details
|
# Home Assistant release details
|
||||||
current_major_version: 0
|
current_major_version: 0
|
||||||
current_minor_version: 115
|
current_minor_version: 115
|
||||||
current_patch_version: 2
|
current_patch_version: 5
|
||||||
date_released: 2020-09-19
|
date_released: 2020-09-29
|
||||||
|
|
||||||
# Either # or the anchor link to latest release notes in the blog post.
|
# Either # or the anchor link to latest release notes in the blog post.
|
||||||
# Must be prefixed with a # and have double quotes around it.
|
# Must be prefixed with a # and have double quotes around it.
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Custom Panel using React"
|
|
||||||
description: ""
|
|
||||||
ha_category: User Interface
|
|
||||||
---
|
|
||||||
|
|
||||||
This is a [React](https://facebook.github.io/react/) implementation of [TodoMVC](http://todomvc.com/) but instead of checking off to do items, you are turning lights and switches on/off.
|
|
||||||
|
|
||||||
- It uses React to render the data.
|
|
||||||
- It hooks into Home Assistant JS which means updates pushed from the server are instantly rendered.
|
|
||||||
- It accesses properties made available from Polymer.
|
|
||||||
- It uses the user configuration for the integration in the `configuration.yaml` file for rendering.
|
|
||||||
- It allows toggling the sidebar.
|
|
||||||
|
|
||||||
[Download the source for React Starter Kit here](https://github.com/home-assistant/custom-panel-starter-kit-react). Copy the file to `<config dir>/panels/` (you might have to create the directory if it doesn't exist).
|
|
||||||
|
|
||||||
Create an entry for the panel in your `configuration.yaml` file to enable it.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
panel_custom:
|
|
||||||
- name: react
|
|
||||||
sidebar_title: TodoMVC
|
|
||||||
sidebar_icon: mdi:work
|
|
||||||
url_path: todomvc
|
|
||||||
config:
|
|
||||||
title: hello
|
|
||||||
```
|
|
||||||
|
|
||||||
This video shows the example in action.
|
|
||||||
|
|
||||||
<div class='videoWrapper'>
|
|
||||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/2200UutdXlo" frameborder="0" allowfullscreen></iframe>
|
|
||||||
</div>
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Custom UI state-card by andrey-git"
|
|
||||||
description: ""
|
|
||||||
ha_category: User Interface
|
|
||||||
ha_external_link: https://github.com/andrey-git/home-assistant-custom-ui
|
|
||||||
---
|
|
@ -1,164 +0,0 @@
|
|||||||
---
|
|
||||||
title: "fail2ban"
|
|
||||||
description: "Setting up fail2ban to read Home Assistant's log files to improve security."
|
|
||||||
ha_category: Infrastructure
|
|
||||||
---
|
|
||||||
|
|
||||||
This is a quick guide on how to set up `fail2ban` for Home Assistant. Contains extracts from [Is there a log file for invalid logins? \(Blocking hackers\)](https://community.home-assistant.io/t/is-there-a-log-file-for-invalid-logins-blocking-hackers/2892).
|
|
||||||
|
|
||||||
## Installing fail2ban
|
|
||||||
|
|
||||||
Debian/Ubuntu:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo apt-get install fail2ban
|
|
||||||
```
|
|
||||||
|
|
||||||
CentOS/RHEL:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo yum install epel-release
|
|
||||||
sudo yum install -y fail2ban
|
|
||||||
```
|
|
||||||
Fedora:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo dnf install -y fail2ban
|
|
||||||
```
|
|
||||||
|
|
||||||
For other package managers use the appropriate commands.
|
|
||||||
|
|
||||||
## Enable Home Assistant Logging
|
|
||||||
|
|
||||||
First, enable `http.ban` logging in `configuration.yaml` file for your Home Assistant instance:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
logger:
|
|
||||||
default: critical
|
|
||||||
logs:
|
|
||||||
homeassistant.components.http.ban: warning
|
|
||||||
```
|
|
||||||
|
|
||||||
Restart Home Assistant to activate the changes:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo systemctl restart home-assistant
|
|
||||||
```
|
|
||||||
|
|
||||||
Tail the Home Assistant log then log out of the Home Assistant web interface and attempt logging in with an incorrect password, look for a line like `Login attempt or request with invalid authentication from xxx.xxx.xxx.xxx`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ tail -f /home/homeassistant/.homeassistant/home-assistant.log | grep WARNING
|
|
||||||
2018-08-29 14:28:15 WARNING (MainThread) [homeassistant.components.http.ban] Login attempt or request with invalid authentication from xxx.xxx.xxx.xxx
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configure fail2ban
|
|
||||||
|
|
||||||
Next we will create a filter and jail file for `fail2ban`:
|
|
||||||
|
|
||||||
- `/etc/fail2ban/filter.d/ha.conf`
|
|
||||||
- `/etc/fail2ban/jail.d/ha.conf`
|
|
||||||
|
|
||||||
Contents of `/etc/fail2ban/filter.d/ha.conf`:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[INCLUDES]
|
|
||||||
before = common.conf
|
|
||||||
|
|
||||||
[Definition]
|
|
||||||
failregex = ^%(__prefix_line)s.*Login attempt or request with invalid authentication from <HOST>.*$
|
|
||||||
ignoreregex =
|
|
||||||
```
|
|
||||||
|
|
||||||
Contents of `/etc/fail2ban/jail.d/ha.conf`. Note that you'll need to change the `logpath` to match your logfile which will be different from the path listed.:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[DEFAULT]
|
|
||||||
# Email config
|
|
||||||
sender = email@address.com
|
|
||||||
destemail = email@address.com
|
|
||||||
|
|
||||||
# Action "%(action_mwl)s" will ban the IP and send an email notification including whois data and log entries.
|
|
||||||
action = %(action_mwl)s
|
|
||||||
|
|
||||||
[ha]
|
|
||||||
enabled = true
|
|
||||||
filter = ha
|
|
||||||
logpath = /home/homeassistant/.homeassistant/home-assistant.log
|
|
||||||
|
|
||||||
# 3600 seconds = 1 hour
|
|
||||||
bantime = 30 # during testing it is useful to have a short ban interval, change this to 3600 later
|
|
||||||
|
|
||||||
# Maximum amount of login attempts before IP is blocked
|
|
||||||
maxretry = 3
|
|
||||||
```
|
|
||||||
|
|
||||||
Restart `fail2ban`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo systemctl restart fail2ban
|
|
||||||
```
|
|
||||||
|
|
||||||
Confirm `fail2ban` is running:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo systemctl status fail2ban
|
|
||||||
```
|
|
||||||
|
|
||||||
Check that the ha jail is active:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo fail2ban-client status
|
|
||||||
Status
|
|
||||||
|- Number of jail: 1
|
|
||||||
`- Jail list: ha
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing fail2ban
|
|
||||||
|
|
||||||
Tail the fail2ban log file then log out of the Home Assistant web interface and attempt to log in again with an incorrect password.
|
|
||||||
```bash
|
|
||||||
sudo tail -f -n 20 /var/log/fail2ban.log
|
|
||||||
2018-08-29 13:25:37,907 fail2ban.server [10208]: INFO Starting Fail2ban v0.10.3.fix1
|
|
||||||
2018-08-29 13:25:37,916 fail2ban.database [10208]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
|
|
||||||
2018-08-29 13:25:37,918 fail2ban.jail [10208]: INFO Creating new jail 'ha'
|
|
||||||
2018-08-29 13:25:37,922 fail2ban.jail [10208]: INFO Jail 'ha' uses poller {}
|
|
||||||
2018-08-29 13:25:37,922 fail2ban.jail [10208]: INFO Initiated 'polling' backend
|
|
||||||
2018-08-29 13:25:37,932 fail2ban.filter [10208]: INFO Added logfile: '/home/homeassistant/.homeassistant/home-assistant.log' (pos = 5873, hash = 02ec3aefc005465a6cd8db91eff2d5e57c45757e)
|
|
||||||
2018-08-29 13:25:37,932 fail2ban.filter [10208]: INFO encoding: UTF-8
|
|
||||||
2018-08-29 13:25:37,933 fail2ban.filter [10208]: INFO maxRetry: 3
|
|
||||||
2018-08-29 13:25:37,934 fail2ban.filter [10208]: INFO findtime: 600
|
|
||||||
2018-08-29 13:25:37,934 fail2ban.actions [10208]: INFO banTime: 30
|
|
||||||
2018-08-29 13:25:37,938 fail2ban.jail [10208]: INFO Jail 'ha' started
|
|
||||||
2018-08-29 13:27:49,125 fail2ban.filter [10208]: INFO [ha] Found xxx.xxx.xxx.xxx - 2018-08-29 13:27:48
|
|
||||||
2018-08-29 13:27:51,330 fail2ban.filter [10208]: INFO [ha] Found xxx.xxx.xxx.xxx - 2018-08-29 13:27:51
|
|
||||||
2018-08-29 13:27:52,533 fail2ban.filter [10208]: INFO [ha] Found xxx.xxx.xxx.xxx - 2018-08-29 13:27:52
|
|
||||||
2018-08-29 13:27:52,678 fail2ban.actions [10208]: NOTICE [ha] Ban xxx.xxx.xxx.xxx
|
|
||||||
2018-08-29 13:28:23,941 fail2ban.actions [10208]: NOTICE [ha] Unban xxx.xxx.xxx.xxx
|
|
||||||
```
|
|
||||||
|
|
||||||
Now that fail2ban is working it can be enabled for startup at boot time, also raise the bantime from 30 seconds to what ever you would like. 8 hours is 28800 seconds.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo sed -i 's/bantime = 30/bantime = 28800/g' /etc/fail2ban/jail.d/ha.conf
|
|
||||||
sudo systemctl enable fail2ban
|
|
||||||
sudo systemctl restart fail2ban
|
|
||||||
```
|
|
||||||
|
|
||||||
A final note, if you need to unban an IP it can be done with `fail2ban-client`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo fail2ban-client set JAILNAME unbanip IPADDRESS
|
|
||||||
```
|
|
||||||
eg:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo fail2ban-client set ha unbanip xxx.xxx.xxx.xxx
|
|
||||||
```
|
|
||||||
|
|
||||||
Fail2ban should now be configured and running, if an IP address is banned you will receive an email with WHOIS details about the IP address that attempted to connect, if not you will need configure Postfix or another MTA (Mail Transport Agent).
|
|
||||||
|
|
||||||
If you want to read more about `fail2ban`, some links are below:
|
|
||||||
|
|
||||||
- [fail2ban Split configuration](http://www.fail2ban.org/wiki/index.php/FEATURE_Split_config)
|
|
||||||
- [How To Protect SSH with Fail2Ban on Ubuntu 14.04](https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-ubuntu-14-04)
|
|
@ -1,67 +0,0 @@
|
|||||||
---
|
|
||||||
title: "ManyThing"
|
|
||||||
description: "Instructions on how to setup ManyThing support with IFTTT."
|
|
||||||
logo: manything.png
|
|
||||||
ha_category: Camera
|
|
||||||
redirect_from:
|
|
||||||
/integrations/ifttt.manything/
|
|
||||||
---
|
|
||||||
|
|
||||||
[Manything](https://manything.com) is a smart app that turns your Android device, iPhone, iPod, or iPad into a Wi-Fi camera for monitoring your home, your pets, anything! Comes with live streaming, motion activated alerts, cloud video recording, and more.
|
|
||||||
|
|
||||||
To get manything support, HA will use IFTTT's [Webhooks Service](https://ifttt.com/maker_webhooks) and the [ManyThing Service](https://ifttt.com/manything). Use the [IFTTT Setup instructions](/integrations/ifttt/) to activate the IFTTT Platform.
|
|
||||||
|
|
||||||
After setting up IFTTT, Maker Service and ManyThing Service, you can use the following examples to configure Home Assistant.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Example configuration.yaml entry
|
|
||||||
automation:
|
|
||||||
- alias: 'ManyThing Recording ON'
|
|
||||||
# This calls an IFTTT recipe to turn on recording of the ManyThing Camera
|
|
||||||
# if we leave the house during the day.
|
|
||||||
trigger:
|
|
||||||
- platform: state
|
|
||||||
entity_id: all
|
|
||||||
to: 'not_home'
|
|
||||||
condition:
|
|
||||||
- platform: state
|
|
||||||
entity_id: sun.sun
|
|
||||||
state: 'above_horizon'
|
|
||||||
action:
|
|
||||||
service: ifttt.trigger
|
|
||||||
data: {"event":"manything_on"}
|
|
||||||
|
|
||||||
- alias: 'ManyThing Recording OFF'
|
|
||||||
# This calls an IFTTT recipe to turn off recording of the ManyThing Camera
|
|
||||||
# when we get home unless it's nighttime.
|
|
||||||
trigger:
|
|
||||||
- platform: state
|
|
||||||
entity_id: all
|
|
||||||
to: 'home'
|
|
||||||
condition:
|
|
||||||
- condition: state
|
|
||||||
entity_id: sun.sun
|
|
||||||
state: 'above_horizon'
|
|
||||||
action:
|
|
||||||
service: ifttt.trigger
|
|
||||||
data: {"event":"manything_off"}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Setting up a recipe
|
|
||||||
|
|
||||||
<p class='img'>
|
|
||||||
<img src='/images/integrations/ifttt/IFTTT_manything_trigger.png' />
|
|
||||||
You need to setup a unique trigger for each event you sent to IFTTT.
|
|
||||||
For ManyThing support, you need to set up an `on` and `off` event.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
### Testing your trigger
|
|
||||||
|
|
||||||
You can use the developer tools to test your [Maker Service](https://ifttt.com/maker_webhooks) trigger. To do this, open the Home Assistant UI, open the sidebar, click on the first icon in the developer tools. This should get you to the 'Call Service' screen. Fill in the following values:
|
|
||||||
|
|
||||||
| Field | Value |
|
|
||||||
| ------------ | --------------------------- |
|
|
||||||
| domain | `ifttt` |
|
|
||||||
| service | `trigger` |
|
|
||||||
| Service Data | `{"event": "manything_on"}` |
|
|
||||||
|
|
@ -1,184 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Automation in Code"
|
|
||||||
description: "A sample to do automations in Python Code."
|
|
||||||
ha_category: Automation in Python Examples
|
|
||||||
---
|
|
||||||
|
|
||||||
Example integration to target an `entity_id` to:
|
|
||||||
|
|
||||||
- turn it on at 7AM in the morning
|
|
||||||
- turn it on if anyone comes home and it is off
|
|
||||||
- turn it off if all lights are turned off
|
|
||||||
- turn it off if all people leave the house
|
|
||||||
- offer a service to turn it on for 10 seconds
|
|
||||||
|
|
||||||
To set it up, add the following lines to your `configuration.yaml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Example configuration.yaml entry
|
|
||||||
example:
|
|
||||||
target: TARGET_ENTITY
|
|
||||||
```
|
|
||||||
|
|
||||||
{% configuration %}
|
|
||||||
target:
|
|
||||||
description: TARGET_ENTITY should be one of your devices that can be turned on and off, e.g., a light or a switch. Example value could be light.Ceiling or switch.AC (if you have these devices with those names).
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
{% endconfiguration %}
|
|
||||||
|
|
||||||
Create the file `<config dir>/custom_components/example.py` and copy paste the content below:
|
|
||||||
|
|
||||||
```python
|
|
||||||
"""
|
|
||||||
Example of a custom component.
|
|
||||||
"""
|
|
||||||
import logging
|
|
||||||
import time
|
|
||||||
|
|
||||||
import voluptuous as vol
|
|
||||||
|
|
||||||
import homeassistant.components as core
|
|
||||||
import homeassistant.helpers.config_validation as cv
|
|
||||||
from homeassistant.components import device_tracker, light
|
|
||||||
from homeassistant.const import (
|
|
||||||
ATTR_ENTITY_ID,
|
|
||||||
SERVICE_TURN_OFF,
|
|
||||||
SERVICE_TURN_ON,
|
|
||||||
STATE_HOME,
|
|
||||||
STATE_NOT_HOME,
|
|
||||||
STATE_OFF,
|
|
||||||
STATE_ON,
|
|
||||||
)
|
|
||||||
from homeassistant.core import split_entity_id
|
|
||||||
from homeassistant.helpers.event import (
|
|
||||||
async_track_state_change,
|
|
||||||
async_track_time_change,
|
|
||||||
)
|
|
||||||
|
|
||||||
# The domain of your component. Should be equal to the name of your component.
|
|
||||||
DOMAIN = "example"
|
|
||||||
|
|
||||||
# List of integration names (string) your integration depends upon.
|
|
||||||
# We depend on group because group will be loaded after all the integrations that
|
|
||||||
# initialize devices have been setup.
|
|
||||||
DEPENDENCIES = ["group", "device_tracker", "light"]
|
|
||||||
|
|
||||||
# Configuration key for the entity id we are targeting.
|
|
||||||
CONF_TARGET = "target"
|
|
||||||
|
|
||||||
# Variable for storing configuration parameters.
|
|
||||||
TARGET_ID = None
|
|
||||||
|
|
||||||
# Name of the service that we expose.
|
|
||||||
SERVICE_FLASH = "flash"
|
|
||||||
|
|
||||||
# Shortcut for the logger
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
# Validate that all required config options are given.
|
|
||||||
CONFIG_SCHEMA = vol.Schema(
|
|
||||||
{DOMAIN: vol.Schema({vol.Optional(CONF_TARGET): cv.entity_id})},
|
|
||||||
extra=vol.ALLOW_EXTRA,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
async def async_setup(hass, config):
|
|
||||||
"""Setup example component."""
|
|
||||||
TARGET_ID = config[DOMAIN][CONF_TARGET]
|
|
||||||
|
|
||||||
domain = split_entity_id(TARGET_ID)[0]
|
|
||||||
data = {ATTR_ENTITY_ID: TARGET_ID}
|
|
||||||
|
|
||||||
# Validate that the target entity id exists.
|
|
||||||
if hass.states.get(TARGET_ID) is None:
|
|
||||||
_LOGGER.error("Target entity id %s does not exist", TARGET_ID)
|
|
||||||
|
|
||||||
# Tell the bootstrapper that we failed to initialize and clear the
|
|
||||||
# stored target id so our functions don't run.
|
|
||||||
TARGET_ID = None
|
|
||||||
return False
|
|
||||||
|
|
||||||
async def async_switch_on(entity_id, old_state, new_state):
|
|
||||||
"""Callback to turn on our target entity"""
|
|
||||||
# If the target id is not set, return
|
|
||||||
if not TARGET_ID:
|
|
||||||
return
|
|
||||||
|
|
||||||
if not core.is_on(hass, TARGET_ID):
|
|
||||||
await hass.services.async_call(domain, SERVICE_TURN_ON, data)
|
|
||||||
|
|
||||||
async def async_switch_off(entity_id, old_state, new_state):
|
|
||||||
"""Callback to turn off our target entity"""
|
|
||||||
# If the target id is not set, return
|
|
||||||
if not TARGET_ID:
|
|
||||||
return
|
|
||||||
|
|
||||||
if core.is_on(hass, TARGET_ID):
|
|
||||||
await hass.services.async_call(domain, SERVICE_TURN_OFF, data)
|
|
||||||
|
|
||||||
async def async_wake_up(service):
|
|
||||||
"""Turn light on in the morning.
|
|
||||||
|
|
||||||
Turn the light on when called, but only if there are people home
|
|
||||||
and it is not already on.
|
|
||||||
"""
|
|
||||||
if not TARGET_ID:
|
|
||||||
return
|
|
||||||
|
|
||||||
if device_tracker.is_on(hass) and not core.is_on(hass, TARGET_ID):
|
|
||||||
_LOGGER.info("People home at 7AM, turning target on")
|
|
||||||
await hass.services.async_call(domain, SERVICE_TURN_ON, data)
|
|
||||||
|
|
||||||
async def async_flash_service(service):
|
|
||||||
"""Service callback that will toggle the target.
|
|
||||||
|
|
||||||
Set the light to off for 10 seconds if on and vice versa.
|
|
||||||
"""
|
|
||||||
if not TARGET_ID:
|
|
||||||
return
|
|
||||||
|
|
||||||
if core.is_on(hass, TARGET_ID):
|
|
||||||
# We need this call to run blocking, as we want to wait 10s after it finished
|
|
||||||
await hass.services.async_call(
|
|
||||||
domain, SERVICE_TURN_OFF, data, blocking=True
|
|
||||||
)
|
|
||||||
time.sleep(10)
|
|
||||||
await hass.services.async_call(domain, SERVICE_TURN_ON, data)
|
|
||||||
else:
|
|
||||||
await hass.services.async_call(domain, SERVICE_TURN_ON, data, blocking=True)
|
|
||||||
time.sleep(10)
|
|
||||||
await hass.services.async_call(domain, SERVICE_TURN_OFF, data)
|
|
||||||
|
|
||||||
# register the example.flash service
|
|
||||||
hass.services.async_register(DOMAIN, SERVICE_FLASH, async_flash_service)
|
|
||||||
|
|
||||||
# If all lights turn off, turn off.
|
|
||||||
async_track_state_change(
|
|
||||||
hass, light.ENTITY_ID_ALL_LIGHTS, async_switch_off, STATE_ON, STATE_OFF
|
|
||||||
)
|
|
||||||
|
|
||||||
# If all people leave the house and the entity is on, turn it off.
|
|
||||||
async_track_state_change(
|
|
||||||
hass,
|
|
||||||
device_tracker.ENTITY_ID_ALL_DEVICES,
|
|
||||||
async_switch_off,
|
|
||||||
STATE_HOME,
|
|
||||||
STATE_NOT_HOME,
|
|
||||||
)
|
|
||||||
|
|
||||||
# If anyone comes home and the entity is not on, turn it on.
|
|
||||||
async_track_state_change(
|
|
||||||
hass,
|
|
||||||
device_tracker.ENTITY_ID_ALL_DEVICES,
|
|
||||||
async_switch_on,
|
|
||||||
STATE_NOT_HOME,
|
|
||||||
STATE_HOME,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Call wakeup callback at 7 AM
|
|
||||||
async_track_time_change(hass, async_wake_up, hour=7, minute=00, second=00)
|
|
||||||
|
|
||||||
# Tell the bootstrapper that we initialized successfully.
|
|
||||||
return True
|
|
||||||
```
|
|
@ -1,76 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Basic MQTT Example"
|
|
||||||
description: ""
|
|
||||||
ha_category: Custom Python Component Examples
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class='note'>
|
|
||||||
|
|
||||||
This example requires you to have the [MQTT integration](/integrations/mqtt/) up and running.
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
This is a simple hello world example to show the basics of using MQTT in a custom integration. To use this example, create the file `<config dir>/custom_components/hello_mqtt.py` and copy the below example code.
|
|
||||||
|
|
||||||
This example follows a topic on MQTT and updates the state of an entity to the last message received on that topic. It will also register a service 'set_state' that will publish a message to the MQTT topic that we're listening to.
|
|
||||||
|
|
||||||
```python
|
|
||||||
import homeassistant.loader as loader
|
|
||||||
|
|
||||||
# The domain of your component. Should be equal to the name of your component.
|
|
||||||
DOMAIN = "hello_mqtt"
|
|
||||||
|
|
||||||
# List of integration names (string) your integration depends upon.
|
|
||||||
DEPENDENCIES = ["mqtt"]
|
|
||||||
|
|
||||||
|
|
||||||
CONF_TOPIC = "topic"
|
|
||||||
DEFAULT_TOPIC = "home-assistant/hello_mqtt"
|
|
||||||
|
|
||||||
|
|
||||||
def setup(hass, config):
|
|
||||||
"""Set up the Hello MQTT component."""
|
|
||||||
mqtt = hass.components.mqtt
|
|
||||||
topic = config[DOMAIN].get(CONF_TOPIC, DEFAULT_TOPIC)
|
|
||||||
entity_id = "hello_mqtt.last_message"
|
|
||||||
|
|
||||||
# Listener to be called when we receive a message.
|
|
||||||
# The msg parameter is a Message object with the following members:
|
|
||||||
# - topic, payload, qos, retain
|
|
||||||
def message_received(msg):
|
|
||||||
"""Handle new MQTT messages."""
|
|
||||||
hass.states.set(entity_id, msg.payload)
|
|
||||||
|
|
||||||
# Subscribe our listener to a topic.
|
|
||||||
mqtt.subscribe(topic, message_received)
|
|
||||||
|
|
||||||
# Set the initial state.
|
|
||||||
hass.states.set(entity_id, "No messages")
|
|
||||||
|
|
||||||
# Service to publish a message on MQTT.
|
|
||||||
def set_state_service(call):
|
|
||||||
"""Service to send a message."""
|
|
||||||
mqtt.publish(topic, call.data.get("new_state"))
|
|
||||||
|
|
||||||
# Register our service with Home Assistant.
|
|
||||||
hass.services.register(DOMAIN, "set_state", set_state_service)
|
|
||||||
|
|
||||||
# Return boolean to indicate that initialization was successfully.
|
|
||||||
return True
|
|
||||||
```
|
|
||||||
|
|
||||||
Load the integration by adding the following to your `configuration.yaml`. When your integration is loaded, a new entity should popup and there should be a new service available to call.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# configuration.yaml entry
|
|
||||||
hello_mqtt:
|
|
||||||
topic: some_mqtt/topic/here
|
|
||||||
```
|
|
||||||
|
|
||||||
You can call the service with example payload:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"new_state": "some new state"
|
|
||||||
}
|
|
||||||
```
|
|
@ -1,132 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Flash lights when intruder detected"
|
|
||||||
description: "Detect intruders by checking if the light is turning on while no one is home."
|
|
||||||
ha_category: Automation in Python Examples
|
|
||||||
---
|
|
||||||
|
|
||||||
This example integration will detect intruders. It does so by checking if lights are being turned on while there is no one at home. When this happens it will turn the lights red, flash them for 30 seconds and send a message via [the notify integration](/integrations/notify/). It will also flash a specific light when a known person comes home.
|
|
||||||
|
|
||||||
This integration depends on the integrations [device_tracker](/integrations/device_tracker/) and [light](/integrations/light/) being setup.
|
|
||||||
|
|
||||||
To set it up, add the following lines to your `configuration.yaml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Example configuration.yaml entry
|
|
||||||
simple_alarm:
|
|
||||||
known_light: light.Bowl
|
|
||||||
unknown_light: group.living_room
|
|
||||||
```
|
|
||||||
|
|
||||||
{% configuration %}
|
|
||||||
known_light:
|
|
||||||
description: Which light/light group has to flash when a known device comes home.
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
unknown_light:
|
|
||||||
description: Which light/light group has to flash red when light turns on while no one home.
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
{% endconfiguration %}
|
|
||||||
|
|
||||||
Create the file `<config dir>/custom_components/simple_alarm.py` and copy paste the content below:
|
|
||||||
|
|
||||||
```python
|
|
||||||
"""Simple alarm component."""
|
|
||||||
import logging
|
|
||||||
|
|
||||||
import homeassistant.loader as loader
|
|
||||||
from homeassistant.components import device_tracker, light, notify
|
|
||||||
from homeassistant.helpers.event import track_state_change
|
|
||||||
from homeassistant.const import STATE_ON, STATE_OFF, STATE_HOME, STATE_NOT_HOME
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
DOMAIN = 'simple_alarm"'
|
|
||||||
|
|
||||||
DEPENDENCIES = ["group", "device_tracker", "light"]
|
|
||||||
|
|
||||||
# Attribute to tell which light has to flash when a known person comes home
|
|
||||||
# If omitted will flash all.
|
|
||||||
CONF_KNOWN_LIGHT = "known_light"
|
|
||||||
|
|
||||||
# Attribute to tell which light has to flash when an unknown person comes home
|
|
||||||
# If omitted will flash all.
|
|
||||||
CONF_UNKNOWN_LIGHT = "unknown_light"
|
|
||||||
|
|
||||||
# Services to test the alarms
|
|
||||||
SERVICE_TEST_KNOWN_ALARM = "test_known"
|
|
||||||
SERVICE_TEST_UNKNOWN_ALARM = "test_unknown"
|
|
||||||
|
|
||||||
|
|
||||||
def setup(hass, config):
|
|
||||||
"""Set up the simple alarms."""
|
|
||||||
light_ids = []
|
|
||||||
|
|
||||||
for conf_key in (CONF_KNOWN_LIGHT, CONF_UNKNOWN_LIGHT):
|
|
||||||
light_id = config[DOMAIN].get(conf_key, light.ENTITY_ID_ALL_LIGHTS)
|
|
||||||
|
|
||||||
if hass.states.get(light_id) is None:
|
|
||||||
_LOGGER.error("Light id %s could not be found in state machine", light_id)
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
light_ids.append(light_id)
|
|
||||||
|
|
||||||
# pylint: disable=unbalanced-tuple-unpacking
|
|
||||||
known_light_id, unknown_light_id = light_ids
|
|
||||||
|
|
||||||
if hass.states.get(device_tracker.ENTITY_ID_ALL_DEVICES) is None:
|
|
||||||
_LOGGER.error("No devices are being tracked, cannot setup alarm")
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
def known_alarm():
|
|
||||||
""" Fire an alarm if a known person arrives home. """
|
|
||||||
light.turn_on(hass, known_light_id, flash=light.FLASH_SHORT)
|
|
||||||
|
|
||||||
def unknown_alarm():
|
|
||||||
""" Fire an alarm if the light turns on while no one is home. """
|
|
||||||
light.turn_on(
|
|
||||||
hass, unknown_light_id, flash=light.FLASH_LONG, rgb_color=[255, 0, 0]
|
|
||||||
)
|
|
||||||
|
|
||||||
# Send a message to the user
|
|
||||||
notify.send_message(
|
|
||||||
hass, "The lights just got turned on while no one was home."
|
|
||||||
)
|
|
||||||
|
|
||||||
# Setup services to test the effect
|
|
||||||
hass.services.register(DOMAIN, SERVICE_TEST_KNOWN_ALARM, lambda call: known_alarm())
|
|
||||||
hass.services.register(
|
|
||||||
DOMAIN, SERVICE_TEST_UNKNOWN_ALARM, lambda call: unknown_alarm()
|
|
||||||
)
|
|
||||||
|
|
||||||
def unknown_alarm_if_lights_on(entity_id, old_state, new_state):
|
|
||||||
"""Called when a light has been turned on."""
|
|
||||||
if not device_tracker.is_on(hass):
|
|
||||||
unknown_alarm()
|
|
||||||
|
|
||||||
track_state_change(
|
|
||||||
hass,
|
|
||||||
light.ENTITY_ID_ALL_LIGHTS,
|
|
||||||
unknown_alarm_if_lights_on,
|
|
||||||
STATE_OFF,
|
|
||||||
STATE_ON,
|
|
||||||
)
|
|
||||||
|
|
||||||
def ring_known_alarm(entity_id, old_state, new_state):
|
|
||||||
"""Called when a known person comes home."""
|
|
||||||
if light.is_on(hass, known_light_id):
|
|
||||||
known_alarm()
|
|
||||||
|
|
||||||
# Track home coming of each device
|
|
||||||
track_state_change(
|
|
||||||
hass,
|
|
||||||
hass.states.entity_ids(device_tracker.DOMAIN),
|
|
||||||
ring_known_alarm,
|
|
||||||
STATE_NOT_HOME,
|
|
||||||
STATE_HOME,
|
|
||||||
)
|
|
||||||
|
|
||||||
return True
|
|
||||||
```
|
|
@ -27,7 +27,7 @@ automation 2:
|
|||||||
platform: mqtt
|
platform: mqtt
|
||||||
topic: /notify/+
|
topic: /notify/+
|
||||||
action:
|
action:
|
||||||
service_template: >
|
service: >
|
||||||
notify.{{ trigger.topic.split('/')[-1] }}
|
notify.{{ trigger.topic.split('/')[-1] }}
|
||||||
data:
|
data:
|
||||||
message: '{{ trigger.payload }}'
|
message: '{{ trigger.payload }}'
|
||||||
|
@ -4,7 +4,7 @@ description: "Details about the database used by Home Assistant."
|
|||||||
redirect_from: /details/database/
|
redirect_from: /details/database/
|
||||||
---
|
---
|
||||||
|
|
||||||
Database is used in by Home Assistant as history and tracker only, to store the events and its parameters. The default database used by Home Assistant is [SQLite](https://www.sqlite.org/), and the database file is stored in your [configuration directory](/getting-started/configuration/) (e.g., `<path to config dir>/.homeassistant/home-assistant_v2.db`). If you prefer to run a database server (e.g., PostgreSQL), use the [`recorder` component](/integrations/recorder/).
|
Database is used in by Home Assistant as history and tracker only, to store the events and its parameters. The default database used by Home Assistant is [SQLite](https://www.sqlite.org/), and the database file is stored in your [configuration directory](/getting-started/configuration/) (e.g., `<path to config dir>/home-assistant_v2.db`). If you prefer to run a database server (e.g., PostgreSQL), use the [`recorder` component](/integrations/recorder/).
|
||||||
|
|
||||||
To work with the SQLite database manually from the command-line, you will need an [installation](http://www.sqlitetutorial.net/download-install-sqlite/) of `sqlite3`. Alternatively [DB Browser for SQLite](http://sqlitebrowser.org/) provides a viewer for exploring the database data and an editor for executing SQL commands.
|
To work with the SQLite database manually from the command-line, you will need an [installation](http://www.sqlitetutorial.net/download-install-sqlite/) of `sqlite3`. Alternatively [DB Browser for SQLite](http://sqlitebrowser.org/) provides a viewer for exploring the database data and an editor for executing SQL commands.
|
||||||
First load your database with `sqlite3`:
|
First load your database with `sqlite3`:
|
||||||
|
@ -41,7 +41,7 @@ sudo apt-get upgrade -y
|
|||||||
Install the dependencies.
|
Install the dependencies.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev autoconf build-essential libopenjp2-7
|
sudo apt-get install python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libtiff-dev autoconf build-essential libopenjp2-7
|
||||||
```
|
```
|
||||||
|
|
||||||
Add an account for Home Assistant Core called `homeassistant`.
|
Add an account for Home Assistant Core called `homeassistant`.
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
<h1 class="title delta">Lovelace UI</h1>
|
<h1 class="title delta">Lovelace UI</h1>
|
||||||
<ul class="divided sidebar-menu">
|
<ul class="divided sidebar-menu">
|
||||||
<li>{% active_link /lovelace/ Introduction %}</li>
|
<li>{% active_link /lovelace/ Introduction %}</li>
|
||||||
<li>{% active_link /lovelace/changelog/ Changelog %}</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -21,10 +20,9 @@
|
|||||||
<li>{% active_link /lovelace/badges/ Badges %}</li>
|
<li>{% active_link /lovelace/badges/ Badges %}</li>
|
||||||
<li>{% active_link /lovelace/actions/ Actions %}</li>
|
<li>{% active_link /lovelace/actions/ Actions %}</li>
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a href="https://developers.home-assistant.io/docs/frontend/custom-ui/lovelace-custom-card.html">Developing Custom Cards
|
||||||
href="https://developers.home-assistant.io/docs/frontend/custom-ui/lovelace-custom-card.html"
|
<i class="icon-external-link"></i>
|
||||||
>Developing Custom Cards <i class="icon-external-link"></i
|
</a>
|
||||||
></a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -73,17 +73,13 @@ Next you need to create a Lambda function.
|
|||||||
- Scroll down little bit, you need to input the `Skill ID` from the skill you created in previous step. (You may need to switch back to the Alexa Developer Console to copy the `Skill ID`.)
|
- Scroll down little bit, you need to input the `Skill ID` from the skill you created in previous step. (You may need to switch back to the Alexa Developer Console to copy the `Skill ID`.)
|
||||||
- Click your Lambda Function icon in the middle of the diagram and scroll down, you will see a `Function code` window.
|
- Click your Lambda Function icon in the middle of the diagram and scroll down, you will see a `Function code` window.
|
||||||
- Clear the example code and copy the Python script from: [https://gist.github.com/lpomfrey/97381cf4316553b03622c665ae3a47da](https://gist.github.com/lpomfrey/97381cf4316553b03622c665ae3a47da)
|
- Clear the example code and copy the Python script from: [https://gist.github.com/lpomfrey/97381cf4316553b03622c665ae3a47da](https://gist.github.com/lpomfrey/97381cf4316553b03622c665ae3a47da)
|
||||||
- Scroll down again and you will find `Environment variables`, add the following environment variables as needed:
|
- Click the `Deploy` button of the `Function code` window.
|
||||||
|
- Scroll down again and you will find `Environment variables`, click on `Edit` button and add the following environment variables as needed:
|
||||||
- BASE_URL *(required)*: your Home Assistant instance's Internet accessible URL with port if needed. *Do not include the trailing `/`*.
|
- BASE_URL *(required)*: your Home Assistant instance's Internet accessible URL with port if needed. *Do not include the trailing `/`*.
|
||||||
- NOT_VERIFY_SSL *(optional)*: set to *True* to ignore the SSL issue, if you don't have a valid SSL certificate or you are using self-signed certificate.
|
- NOT_VERIFY_SSL *(optional)*: set to *True* to ignore the SSL issue, if you don't have a valid SSL certificate or you are using self-signed certificate.
|
||||||
- DEBUG *(optional)*: set to *True* to log debugging messages.
|
- DEBUG *(optional)*: set to *True* to log debugging messages.
|
||||||
- LONG_LIVED_ACCESS_TOKEN *(optional, not recommended)*: you will connect your Alexa Custom skill with your Home Assistant user account in the later steps, so that you don't need to use long-lived access token here. However, the access token you got from login flow is only valid for 30 minutes. It will be hard for you to test lambda function with the access token in test data. So for your convinces, you can remove the access token from the test data, [generate a long-lived access token][generate-long-lived-access-token] put here, then the function will fall back to reading the token from environment variables. (tips: You did not enable the security storage for your environment variables, so your token saved here is not that safe. You should only use it for debugging and testing purpose. You should remove and delete the long-lived access token after you finish the debugging.)
|
- LONG_LIVED_ACCESS_TOKEN *(optional, not recommended)*: you will connect your Alexa Custom skill with your Home Assistant user account in the later steps, so that you don't need to use long-lived access token here. However, the access token you got from login flow is only valid for 30 minutes. It will be hard for you to test lambda function with the access token in test data. So for your convinces, you can remove the access token from the test data, [generate a long-lived access token][generate-long-lived-access-token] put here, then the function will fall back to reading the token from environment variables. (tips: You did not enable the security storage for your environment variables, so your token saved here is not that safe. You should only use it for debugging and testing purpose. You should remove and delete the long-lived access token after you finish the debugging.)
|
||||||
|
- Save your environmental variables by clicking the `Save` button.
|
||||||
<p class='img'>
|
|
||||||
<img src='/images/integrations/alexa/lambda_function_env_var.png' alt='Screenshot: Environment variables in Lambda function'>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
- Now scroll up to the top and click the `Save` button.
|
|
||||||
- Next, copy the ARN displayed in the top of the page, which is the identify of this Lambda function. Set the end point of the custom Alexa Skill you created earlier to this value.
|
- Next, copy the ARN displayed in the top of the page, which is the identify of this Lambda function. Set the end point of the custom Alexa Skill you created earlier to this value.
|
||||||
|
|
||||||
### Account Linking
|
### Account Linking
|
||||||
|
@ -42,3 +42,12 @@ app_key:
|
|||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
{% endconfiguration %}
|
{% endconfiguration %}
|
||||||
|
|
||||||
|
## Local API Option
|
||||||
|
|
||||||
|
This integration communicates with Ambient Weather PWS units via the Ambient Weather
|
||||||
|
Cloud. Users wishing to explore a local option are encouraged to explore the
|
||||||
|
[Ecowitt GW1000](http://www.ecowitt.com/wifi_weather/80.html), a small device that is
|
||||||
|
able to read RF signals directly from the PWS and transmit them to a variety of
|
||||||
|
other applications, including [`ecowitt2mqtt`](https://github.com/bachya/ecowitt2mqtt)
|
||||||
|
(which supports [MQTT Discovery](/docs/mqtt/discovery)).
|
||||||
|
@ -40,7 +40,7 @@ The way these sensors are displayed in the frontend can be modified in the [cust
|
|||||||
- **vibration**: `on` means vibration detected, `off` means no vibration (clear)
|
- **vibration**: `on` means vibration detected, `off` means no vibration (clear)
|
||||||
- **window**: `on` means open, `off` means closed
|
- **window**: `on` means open, `off` means closed
|
||||||
|
|
||||||
For analog sensors please check the [integration overview](/integrations/#sensor).
|
For analog sensors please check the [integration overview](/integrations/sensor).
|
||||||
|
|
||||||
<p class='img'>
|
<p class='img'>
|
||||||
<img src='/images/screenshots/binary_sensor_classes_icons.png' />
|
<img src='/images/screenshots/binary_sensor_classes_icons.png' />
|
||||||
|
@ -24,7 +24,7 @@ devolo Home Control is a Z-Wave ecosystem with a Z-Wave to IP gateway in the cen
|
|||||||
|
|
||||||
Menu: **Configuration** -> **Integrations**.
|
Menu: **Configuration** -> **Integrations**.
|
||||||
|
|
||||||
Click on the `+` sign to add an integration and click on **devolo Home Control**. You will be asked for your [mydevolo](https://www.mydevolo.com) credentials. After entering them, the devolo Home Control integration will be available.
|
Click on the `+` sign to add an integration and click on **devolo Home Control**. You will be asked for your [mydevolo](https://www.mydevolo.com) credentials. After entering them, the devolo Home Control integration will be available. Please do not change the URLs provided in the advanced mode unless you know what you are doing.
|
||||||
|
|
||||||
## Switches
|
## Switches
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ A connection to a single device enables control for all devices on the network.
|
|||||||
|
|
||||||
### Service `heos.sign_in`
|
### Service `heos.sign_in`
|
||||||
|
|
||||||
Use the sign-in service to sign the connected controller into a HEOS account so that it can retrieve and play HEOS favorites and playlists. An error message is logged if sign-in is unsuccessful. Example service data payload:
|
Use the sign-in service (go to Developer Tools -> Services and then run the `heos.sign_in` with your username and password. Use the "Fill example data" first, then change it with your data. Check the logs right after, there you should see if the sign-in was successful or not) to sign the connected controller into a HEOS account so that it can retrieve and play HEOS favorites and playlists. An error message is logged if sign-in is unsuccessful. Example service data payload:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
username: "example@example.com"
|
username: "example@example.com"
|
||||||
|
@ -291,6 +291,12 @@ Unfortunately, `HomeKit` doesn't support any persistent storage - only the confi
|
|||||||
|
|
||||||
A common situation might be if you decide to disable parts of the configuration for testing. Please make sure to disable `auto start` and `turn off` the `Start HomeKit` automation (if you have one).
|
A common situation might be if you decide to disable parts of the configuration for testing. Please make sure to disable `auto start` and `turn off` the `Start HomeKit` automation (if you have one).
|
||||||
|
|
||||||
|
### Multiple HomeKit instances
|
||||||
|
|
||||||
|
If you create a HomeKit integration via the UI (i.e., **Configuration** >> **Integrations**), it must be configured via the UI **only**. While the UI only offers limited configuration options at the moment, any attempt to configure a HomeKit instance created in the UI via the `configuration.yaml` file will result in another instance of HomeKit running on a different port.
|
||||||
|
|
||||||
|
It is recommended to only edit a HomeKit instance in the UI that was created in the UI, and likewise, only edit a HomeKit instance in YAML that was created in YAML.
|
||||||
|
|
||||||
## Disable Auto Start
|
## Disable Auto Start
|
||||||
|
|
||||||
Depending on your setup, it might be necessary to disable `Auto Start` for all accessories to be available for `HomeKit`. Only those entities that are fully set up when the `HomeKit` integration is started, can be added. To start `HomeKit` when `auto_start: false`, you can call the service `homekit.start`.
|
Depending on your setup, it might be necessary to disable `Auto Start` for all accessories to be available for `HomeKit`. Only those entities that are fully set up when the `HomeKit` integration is started, can be added. To start `HomeKit` when `auto_start: false`, you can call the service `homekit.start`.
|
||||||
|
@ -33,10 +33,10 @@ http:
|
|||||||
|
|
||||||
{% configuration %}
|
{% configuration %}
|
||||||
server_host:
|
server_host:
|
||||||
description: "Only listen to incoming requests on specific IP/host. By default the `http` integration will accept all IPv4 and IPv6 connections. Use `server_host: 0.0.0.0` if you want to only listen to IPv4 addresses."
|
description: "Only listen to incoming requests on specific IP/host. By default the `http` integration auto-detects IPv4/IPv6 and listens on all connections. Use `server_host: 0.0.0.0` if you want to only listen to IPv4 addresses. The default listed assumes support for IPv4 and IPv6."
|
||||||
required: false
|
required: false
|
||||||
type: [list, string]
|
type: [list, string]
|
||||||
default: 0.0.0.0
|
default: "0.0.0.0, ::"
|
||||||
server_port:
|
server_port:
|
||||||
description: Let you set a port to use.
|
description: Let you set a port to use.
|
||||||
required: false
|
required: false
|
||||||
|
@ -14,6 +14,9 @@ The `input_boolean` integration allows the user to define boolean values that ca
|
|||||||
|
|
||||||
The preferred way to configure input booleans is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the "**Toggle**" option.
|
The preferred way to configure input booleans is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the "**Toggle**" option.
|
||||||
|
|
||||||
|
To be able to add **Helpers** via the user interface you should have `default_config:` in your `configuration.yaml`, it should already be there by default unless you removed it.
|
||||||
|
If you removed `default_config:` from you configuration, you must add `input_boolean:` to your `configuration.yaml` first, then you can use the UI.
|
||||||
|
|
||||||
Input booleans can also be configured via `configuration.yaml`:
|
Input booleans can also be configured via `configuration.yaml`:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
@ -16,6 +16,9 @@ templates.
|
|||||||
|
|
||||||
The preferred way to configure input datetime is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the **Date and/or time** option.
|
The preferred way to configure input datetime is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the **Date and/or time** option.
|
||||||
|
|
||||||
|
To be able to add **Helpers** via the user interface you should have `default_config:` in your `configuration.yaml`, it should already be there by default unless you removed it.
|
||||||
|
If you removed `default_config:` from you configuration, you must add `input_datetime:` to your `configuration.yaml` first, then you can use the UI.
|
||||||
|
|
||||||
`input_datetime` can also be configured via YAML. To add three datetime inputs to your installation,
|
`input_datetime` can also be configured via YAML. To add three datetime inputs to your installation,
|
||||||
one with both date and time, and one with date or time each,
|
one with both date and time, and one with date or time each,
|
||||||
add the following lines to your `configuration.yaml`:
|
add the following lines to your `configuration.yaml`:
|
||||||
|
@ -14,6 +14,9 @@ The `input_number` integration allows the user to define values that can be cont
|
|||||||
|
|
||||||
The preferred way to configure an input number is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the **Number** option.
|
The preferred way to configure an input number is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the **Number** option.
|
||||||
|
|
||||||
|
To be able to add **Helpers** via the user interface you should have `default_config:` in your `configuration.yaml`, it should already be there by default unless you removed it.
|
||||||
|
If you removed `default_config:` from you configuration, you must add `input_number:` to your `configuration.yaml` first, then you can use the UI.
|
||||||
|
|
||||||
Input numbers can also be configured via `configuration.yaml`:
|
Input numbers can also be configured via `configuration.yaml`:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
@ -14,6 +14,9 @@ The `input_select` integration allows the user to define a list of values that c
|
|||||||
|
|
||||||
The preferred way to configure an input select is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the **Dropdown** option.
|
The preferred way to configure an input select is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the **Dropdown** option.
|
||||||
|
|
||||||
|
To be able to add **Helpers** via the user interface you should have `default_config:` in your `configuration.yaml`, it should already be there by default unless you removed it.
|
||||||
|
If you removed `default_config:` from you configuration, you must add `input_select:` to your `configuration.yaml` first, then you can use the UI.
|
||||||
|
|
||||||
Input selects can also be configured via `configuration.yaml`:
|
Input selects can also be configured via `configuration.yaml`:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
@ -14,6 +14,9 @@ The `input_text` integration allows the user to define values that can be contro
|
|||||||
|
|
||||||
The preferred way to configure an input text is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the **Text** option.
|
The preferred way to configure an input text is via the user interface at **Configuration** -> **Helpers**. Click the add button and then choose the **Text** option.
|
||||||
|
|
||||||
|
To be able to add **Helpers** via the user interface you should have `default_config:` in your `configuration.yaml`, it should already be there by default unless you removed it.
|
||||||
|
If you removed `default_config:` from you configuration, you must add `input_text:` to your `configuration.yaml` first, then you can use the UI.
|
||||||
|
|
||||||
It can also be configured via `configuration.yaml`:
|
It can also be configured via `configuration.yaml`:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
@ -10,9 +10,11 @@ ha_domain: kankun
|
|||||||
|
|
||||||
The `kankun` switch platform allows you to toggle customized Kankun SP3 Wi-Fi switches. Switches are
|
The `kankun` switch platform allows you to toggle customized Kankun SP3 Wi-Fi switches. Switches are
|
||||||
modified to include the [json.cgi](https://github.com/homedash/kankun-json/blob/master/cgi-bin/json.cgi)
|
modified to include the [json.cgi](https://github.com/homedash/kankun-json/blob/master/cgi-bin/json.cgi)
|
||||||
script to provide an HTTP API. Details of the necessary modifications can be found
|
script to provide an HTTP API.
|
||||||
[here](http://www.homeautomationforgeeks.com/openhab_http.shtml#kankun) (be sure to install the JSON version
|
Details of the necessary modifications were provided on the now dead HomeAutomationForGeeks site,
|
||||||
of the script as linked above).
|
but fortunately we can still access the information via
|
||||||
|
[archive.org link](https://web.archive.org/web/20170628063659/http://www.homeautomationforgeeks.com/openhab_http.shtml)
|
||||||
|
(be sure to install the JSON version of the script as linked above).
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ If you set `show_on_map` to `true` then the location attributes are named `latit
|
|||||||
Not all sensors provide all conditions. Also, it's possible that the sensor values are not available all the time. To check what a sensor is publishing use `curl`:
|
Not all sensors provide all conditions. Also, it's possible that the sensor values are not available all the time. To check what a sensor is publishing use `curl`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl https://api.luftdaten.info/v1/sensor/[sensorid]/
|
curl https://data.sensor.community/airrohr/v1/sensor/[sensorid]/
|
||||||
```
|
```
|
||||||
|
|
||||||
## Full example
|
## Full example
|
||||||
|
@ -114,5 +114,7 @@ camera:
|
|||||||
mode: crop
|
mode: crop
|
||||||
max_image_width: 480
|
max_image_width: 480
|
||||||
max_image_height: 320
|
max_image_height: 320
|
||||||
|
max_stream_width: 480
|
||||||
|
max_stream_height: 320
|
||||||
image_left: 100
|
image_left: 100
|
||||||
```
|
```
|
||||||
|
@ -36,7 +36,7 @@ To create the required Spotify application:
|
|||||||
- Click **Save** after adding the URI.
|
- Click **Save** after adding the URI.
|
||||||
|
|
||||||
<div class='note'>
|
<div class='note'>
|
||||||
Your Home Assitant instance does not need to be exposed to the internet. It works just fine with local IP addresses.
|
Your Home Assistant instance does not need to be exposed to the internet. It works just fine with local IP addresses.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
@ -72,10 +72,25 @@ After you have set up the above:
|
|||||||
|
|
||||||
<div class='note'>
|
<div class='note'>
|
||||||
|
|
||||||
If you receive an `INVALID_CLIENT: Invalid redirect URI` error while trying to authenticate with your Spotify account, make sure to check the Redirect URI in the address bar after adding the new integration. Compare this value with the Redirect URI defined in the Spotify Developer Portal.
|
If you receive an `INVALID_CLIENT: Invalid redirect URI` error while trying to
|
||||||
|
authenticate with your Spotify account, make sure to check the Redirect URI in
|
||||||
|
the address bar after adding the new integration. Compare this value with the
|
||||||
|
Redirect URI defined in the Spotify Developer Portal.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
## Using multiple Spotify accounts
|
||||||
|
|
||||||
|
The integration support multiple Spotify accounts at once. You don't need to
|
||||||
|
create another Spotify Application in the Spotify Developer portal and no
|
||||||
|
modification to the `configuration.yaml` file is needed. Multiple Spotify
|
||||||
|
accounts can be linked on a _single_ Spotify application.
|
||||||
|
|
||||||
|
To add an additional Spotify account to Home Assistant, repeat _only_ the steps
|
||||||
|
in the [Activating the Spotify integration](#activating-the-spotify-integration)
|
||||||
|
chapter. However, make sure you go to the Spotify website and log out before
|
||||||
|
you do so.
|
||||||
|
|
||||||
## URI Links for Playlists
|
## URI Links for Playlists
|
||||||
|
|
||||||
You can send playlists to Spotify using the `"media_content_type": "playlist"`, which are part of the
|
You can send playlists to Spotify using the `"media_content_type": "playlist"`, which are part of the
|
||||||
|
@ -83,6 +83,15 @@ Due to the nature of the Synology DSM API, it is required to grant the user admi
|
|||||||
|
|
||||||
When creating the user, it is possible to deny access to all locations and applications. By doing this, the user will not be able to login to the web interface or view any of the files on the Synology NAS. It is still able to read the utilization and storage information using the API.
|
When creating the user, it is possible to deny access to all locations and applications. By doing this, the user will not be able to login to the web interface or view any of the files on the Synology NAS. It is still able to read the utilization and storage information using the API.
|
||||||
|
|
||||||
|
### If you utilize 2-Step Verification or Two Factor Authentication (2FA) with your Synology NAS
|
||||||
|
|
||||||
|
If you have the "Enforce 2-step verification for the following users" option checked under **Control Panel > User > Advanced > 2-Step Verification**, you'll need to configure the 2-step verification/one-time password (OTP) for the user you just created before the credentials for this user will work with Home Assistant.
|
||||||
|
|
||||||
|
Make sure to log out of your "normal" user's account and then login with the separate user you created specifically for Home Assistant. DSM will walk you through the process of setting up the one-time password for this user which you'll then be able to use in Home Assistant's frontend configuration screen.
|
||||||
|
|
||||||
|
<div class='note'>
|
||||||
|
If you denied access to all locations and applications it is normal to receive a message indicating you do not have access to DSM when trying to login with this separate user. As noted above, you do not need access to the DSM and Home Assistant will still be able to read statistics from your NAS.
|
||||||
|
</div>
|
||||||
|
|
||||||
## Sensors
|
## Sensors
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
title: Valloxs
|
title: Vallox
|
||||||
description: Instructions on how to integrate Vallox ventilation units into Home Assistant.
|
description: Instructions on how to integrate Vallox ventilation units into Home Assistant.
|
||||||
ha_category:
|
ha_category:
|
||||||
- Fan
|
- Fan
|
||||||
|
@ -106,6 +106,9 @@ navigating you around this release.
|
|||||||
- [Farewell to the following](#farewell-to-the-following)
|
- [Farewell to the following](#farewell-to-the-following)
|
||||||
- [Release 0.115.1 - September 18](#release-01151---september-18)
|
- [Release 0.115.1 - September 18](#release-01151---september-18)
|
||||||
- [Release 0.115.2 - September 19](#release-01152---september-19)
|
- [Release 0.115.2 - September 19](#release-01152---september-19)
|
||||||
|
- [Release 0.115.3 - September 25](#release-01153---september-25)
|
||||||
|
- [Release 0.115.4 - September 28](#release-01154---september-28)
|
||||||
|
- [Release 0.115.5 - September 29](#release-01155---september-29)
|
||||||
- [All changes](#all-changes)
|
- [All changes](#all-changes)
|
||||||
|
|
||||||
## Media Browser
|
## Media Browser
|
||||||
@ -1730,6 +1733,142 @@ discovery. Users currently using that should set up all devices through UI.
|
|||||||
[vera docs]: /integrations/vera/
|
[vera docs]: /integrations/vera/
|
||||||
[zha docs]: /integrations/zha/
|
[zha docs]: /integrations/zha/
|
||||||
|
|
||||||
|
## Release 0.115.3 - September 25
|
||||||
|
|
||||||
|
- Use Cloud State as alternative state if condition unknown ([@thehaxxa] - [#37121]) ([bom docs])
|
||||||
|
- Guard SolarEdge for inverters without batteries ([@mhaack] - [#40295]) ([solaredge docs])
|
||||||
|
- Ignore packets with missing dts in peek_first_pts ([@uvjustin] - [#40299]) ([stream docs])
|
||||||
|
- Axis - Fix list applications breaks if empty response ([@Kane610] - [#40360]) ([axis docs])
|
||||||
|
- Fix Met.no missing conditions in API forecasts ([@thimic] - [#40373]) ([met docs])
|
||||||
|
- Bump pyinsteon to 1.0.8 ([@teharris1] - [#40383]) ([insteon docs])
|
||||||
|
- Fix OSError ([@bieniu] - [#40393]) ([shelly docs])
|
||||||
|
- Fix handling of empty ws port ([@OnFreund] - [#40399]) ([kodi docs])
|
||||||
|
- Validate Met.no forecast entries before passing them on to HA ([@thimic] - [#40400]) ([met docs])
|
||||||
|
- Fix luci device_tracker incorrectly reporting devices status ([@cagnulein] - [#40409]) ([luci docs])
|
||||||
|
- Make modbus switch read_coil failure resistent ([@janiversen] - [#40417]) ([modbus docs])
|
||||||
|
- Fix webostv supported features for "external_speaker" sound output ([@PedroLamas] - [#40435]) ([webostv docs])
|
||||||
|
- Fix regression in Nextcloud component ([@meichthys] - [#40438]) ([nextcloud docs])
|
||||||
|
- Fix proxy camera conversion with PNG Alpha(RGBA) ([@square99] - [#40446]) ([proxy docs])
|
||||||
|
- Bump accuweather library to version 0.0.11 ([@bieniu] - [#40458])
|
||||||
|
- Increase gogogate2 request timeout ([@vangorra] - [#40461]) ([gogogate2 docs])
|
||||||
|
- Fix handling of quoted time_pattern values ([@amelchio] - [#40470]) ([homeassistant docs])
|
||||||
|
- Ensure group state is recalculated when re-adding on reload ([@bdraco] - [#40497]) ([group docs])
|
||||||
|
- Disable audio in stream when audio stream profile is None ([@uvjustin] - [#40521]) ([stream docs])
|
||||||
|
- Fix luci device_tracker when release is none ([@cagnulein] - [#40524]) ([luci docs])
|
||||||
|
- Increase upnp timeout from 5 seconds to 10 seconds ([@StevenLooman] - [#40540]) ([upnp docs])
|
||||||
|
- Fix connection validation during import for dsmr integration ([@RobBie1221] - [#40548]) ([dsmr docs])
|
||||||
|
- Updated frontend to 20200918.2 ([@bramkragten] - [#40549]) ([frontend docs])
|
||||||
|
- Fix bug in state trigger when using for: without to: ([@KevinCathcart] - [#40556]) ([homeassistant docs])
|
||||||
|
|
||||||
|
[#37121]: https://github.com/home-assistant/core/pull/37121
|
||||||
|
[#40295]: https://github.com/home-assistant/core/pull/40295
|
||||||
|
[#40299]: https://github.com/home-assistant/core/pull/40299
|
||||||
|
[#40360]: https://github.com/home-assistant/core/pull/40360
|
||||||
|
[#40373]: https://github.com/home-assistant/core/pull/40373
|
||||||
|
[#40383]: https://github.com/home-assistant/core/pull/40383
|
||||||
|
[#40393]: https://github.com/home-assistant/core/pull/40393
|
||||||
|
[#40399]: https://github.com/home-assistant/core/pull/40399
|
||||||
|
[#40400]: https://github.com/home-assistant/core/pull/40400
|
||||||
|
[#40409]: https://github.com/home-assistant/core/pull/40409
|
||||||
|
[#40417]: https://github.com/home-assistant/core/pull/40417
|
||||||
|
[#40435]: https://github.com/home-assistant/core/pull/40435
|
||||||
|
[#40438]: https://github.com/home-assistant/core/pull/40438
|
||||||
|
[#40446]: https://github.com/home-assistant/core/pull/40446
|
||||||
|
[#40458]: https://github.com/home-assistant/core/pull/40458
|
||||||
|
[#40461]: https://github.com/home-assistant/core/pull/40461
|
||||||
|
[#40470]: https://github.com/home-assistant/core/pull/40470
|
||||||
|
[#40497]: https://github.com/home-assistant/core/pull/40497
|
||||||
|
[#40521]: https://github.com/home-assistant/core/pull/40521
|
||||||
|
[#40524]: https://github.com/home-assistant/core/pull/40524
|
||||||
|
[#40540]: https://github.com/home-assistant/core/pull/40540
|
||||||
|
[#40548]: https://github.com/home-assistant/core/pull/40548
|
||||||
|
[#40549]: https://github.com/home-assistant/core/pull/40549
|
||||||
|
[#40556]: https://github.com/home-assistant/core/pull/40556
|
||||||
|
[@Kane610]: https://github.com/Kane610
|
||||||
|
[@KevinCathcart]: https://github.com/KevinCathcart
|
||||||
|
[@OnFreund]: https://github.com/OnFreund
|
||||||
|
[@PedroLamas]: https://github.com/PedroLamas
|
||||||
|
[@RobBie1221]: https://github.com/RobBie1221
|
||||||
|
[@StevenLooman]: https://github.com/StevenLooman
|
||||||
|
[@amelchio]: https://github.com/amelchio
|
||||||
|
[@bdraco]: https://github.com/bdraco
|
||||||
|
[@bieniu]: https://github.com/bieniu
|
||||||
|
[@bramkragten]: https://github.com/bramkragten
|
||||||
|
[@cagnulein]: https://github.com/cagnulein
|
||||||
|
[@janiversen]: https://github.com/janiversen
|
||||||
|
[@meichthys]: https://github.com/meichthys
|
||||||
|
[@mhaack]: https://github.com/mhaack
|
||||||
|
[@square99]: https://github.com/square99
|
||||||
|
[@teharris1]: https://github.com/teharris1
|
||||||
|
[@thehaxxa]: https://github.com/thehaxxa
|
||||||
|
[@thimic]: https://github.com/thimic
|
||||||
|
[@uvjustin]: https://github.com/uvjustin
|
||||||
|
[@vangorra]: https://github.com/vangorra
|
||||||
|
[axis docs]: /integrations/axis/
|
||||||
|
[bom docs]: /integrations/bom/
|
||||||
|
[dsmr docs]: /integrations/dsmr/
|
||||||
|
[frontend docs]: /integrations/frontend/
|
||||||
|
[gogogate2 docs]: /integrations/gogogate2/
|
||||||
|
[group docs]: /integrations/group/
|
||||||
|
[homeassistant docs]: /integrations/homeassistant/
|
||||||
|
[insteon docs]: /integrations/insteon/
|
||||||
|
[kodi docs]: /integrations/kodi/
|
||||||
|
[luci docs]: /integrations/luci/
|
||||||
|
[met docs]: /integrations/met/
|
||||||
|
[modbus docs]: /integrations/modbus/
|
||||||
|
[nextcloud docs]: /integrations/nextcloud/
|
||||||
|
[proxy docs]: /integrations/proxy/
|
||||||
|
[shelly docs]: /integrations/shelly/
|
||||||
|
[solaredge docs]: /integrations/solaredge/
|
||||||
|
[stream docs]: /integrations/stream/
|
||||||
|
[upnp docs]: /integrations/upnp/
|
||||||
|
[webostv docs]: /integrations/webostv/
|
||||||
|
|
||||||
|
## Release 0.115.4 - September 28
|
||||||
|
|
||||||
|
- Bump aioshelly library to version 0.3.3 ([@bieniu] - [#40415]) ([shelly docs])
|
||||||
|
- Create master playlist for cast ([@uvjustin] - [#40483]) ([stream docs])
|
||||||
|
- Fix fitbit current URL not available while configuring ([@colinfrei] - [#40547]) ([fitbit docs])
|
||||||
|
- Bump Plugwise-Smile to v1.5.1 ([@bouwew] - [#40572]) ([plugwise docs])
|
||||||
|
- Fix camera play stream ([@hunterjm] - [#40641]) ([camera docs]) ([cast docs]) ([media_player docs]) ([stream docs])
|
||||||
|
- set ID3 tags as TextFrame types ([@digitallyserviced] - [#40666]) ([tts docs])
|
||||||
|
- Pin gRPC to 1.31.0 to workaround amrv7 issues ([@frenck] - [#40678])
|
||||||
|
- Bump Airly package to 1.0.0 ([@ak-ambi] - [#40695]) ([airly docs])
|
||||||
|
|
||||||
|
[#40415]: https://github.com/home-assistant/core/pull/40415
|
||||||
|
[#40483]: https://github.com/home-assistant/core/pull/40483
|
||||||
|
[#40547]: https://github.com/home-assistant/core/pull/40547
|
||||||
|
[#40572]: https://github.com/home-assistant/core/pull/40572
|
||||||
|
[#40641]: https://github.com/home-assistant/core/pull/40641
|
||||||
|
[#40666]: https://github.com/home-assistant/core/pull/40666
|
||||||
|
[#40678]: https://github.com/home-assistant/core/pull/40678
|
||||||
|
[#40695]: https://github.com/home-assistant/core/pull/40695
|
||||||
|
[@ak-ambi]: https://github.com/ak-ambi
|
||||||
|
[@bieniu]: https://github.com/bieniu
|
||||||
|
[@bouwew]: https://github.com/bouwew
|
||||||
|
[@colinfrei]: https://github.com/colinfrei
|
||||||
|
[@digitallyserviced]: https://github.com/digitallyserviced
|
||||||
|
[@frenck]: https://github.com/frenck
|
||||||
|
[@hunterjm]: https://github.com/hunterjm
|
||||||
|
[@uvjustin]: https://github.com/uvjustin
|
||||||
|
[airly docs]: /integrations/airly/
|
||||||
|
[camera docs]: /integrations/camera/
|
||||||
|
[cast docs]: /integrations/cast/
|
||||||
|
[fitbit docs]: /integrations/fitbit/
|
||||||
|
[media_player docs]: /integrations/media_player/
|
||||||
|
[plugwise docs]: /integrations/plugwise/
|
||||||
|
[shelly docs]: /integrations/shelly/
|
||||||
|
[stream docs]: /integrations/stream/
|
||||||
|
[tts docs]: /integrations/tts/
|
||||||
|
|
||||||
|
## Release 0.115.5 - September 29
|
||||||
|
|
||||||
|
- Fix ID3 tagging in TTS ([@frenck] - [#40740]) ([tts docs])
|
||||||
|
|
||||||
|
[#40740]: https://github.com/home-assistant/core/pull/40740
|
||||||
|
[@frenck]: https://github.com/frenck
|
||||||
|
[tts docs]: /integrations/tts/
|
||||||
|
|
||||||
## All changes
|
## All changes
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# General use redirects
|
# General use redirects
|
||||||
|
/join-chat https://discord.gg/c5DvZ4e
|
||||||
/suggest-community-highlight https://docs.google.com/forms/d/e/1FAIpQLSd9VWPeVM0xg0swWL6kT3wkQUKt8vWsTL5WtPO95LAy-0cYZw/viewform
|
/suggest-community-highlight https://docs.google.com/forms/d/e/1FAIpQLSd9VWPeVM0xg0swWL6kT3wkQUKt8vWsTL5WtPO95LAy-0cYZw/viewform
|
||||||
|
|
||||||
# Older development pages
|
# Older development pages
|
||||||
|
@ -6,27 +6,24 @@ regenerate: true
|
|||||||
hide_github_edit: true
|
hide_github_edit: true
|
||||||
---
|
---
|
||||||
|
|
||||||
This is a community curated list of different ways to use Home Assistant. Most of these examples are using the [automation] integration and other built-in [automation related][sec-automation] and [organization] integrations available.
|
This is a community curated list of different ways to use Home Assistant. Most
|
||||||
|
of these examples are using [the automation integration][automations].
|
||||||
For [`python_script:` examples](/integrations/python_script/) visit the [Scripts section](https://community.home-assistant.io/c/projects/scripts) in our forum.
|
|
||||||
|
|
||||||
[automation]: /getting-started/automation/
|
|
||||||
[sec-automation]: /integrations/#automation
|
|
||||||
[organization]: /integrations/#organization
|
|
||||||
|
|
||||||
New recipes can be added via the [home-assistant.io repository](https://github.com/home-assistant/home-assistant.io/tree/current/source/_cookbook).
|
|
||||||
|
|
||||||
<div class='note'>
|
<div class='note'>
|
||||||
|
|
||||||
A great place to find popular configurations is on this [GitHub search](https://github.com/search?q=topic%3Ahome-assistant-config&type=Repositories) for repositories with the `home-assistant-config` topic.
|
A great place to find popular configurations is on this
|
||||||
|
[GitHub search][github-search] for repositories with the
|
||||||
|
`home-assistant-config` topic.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
[automation]: /getting-started/automation/
|
||||||
|
[github-search]: https://github.com/search?q=topic%3Ahome-assistant-config&type=Repositories
|
||||||
|
|
||||||
{% assign cookbook = site.cookbook | sort: 'title' %}
|
{% assign cookbook = site.cookbook | sort: 'title' %}
|
||||||
{% assign categories = cookbook | map: 'ha_category' | uniq | sort %}
|
{% assign categories = cookbook | map: 'ha_category' | uniq | sort %}
|
||||||
|
|
||||||
{% for category in categories %}
|
{% for category in categories %}
|
||||||
### {{ category }}
|
## {{ category }}
|
||||||
|
|
||||||
{% if category == 'Automation Examples' %}
|
{% if category == 'Automation Examples' %}
|
||||||
|
|
||||||
|
@ -9,10 +9,10 @@ The following will take you through the steps required to install Home Assistant
|
|||||||
|
|
||||||
- As an image for your device:
|
- As an image for your device:
|
||||||
|
|
||||||
- [Raspberry Pi 3 Model B and B+ 32-bit][pi3-32] (recommended)
|
- [Raspberry Pi 3 Model B and B+ 32-bit][pi3-32] (32-bit is required for GPIO support)
|
||||||
- [Raspberry Pi 3 Model B and B+ 64-bit][pi3-64]
|
- [Raspberry Pi 3 Model B and B+ 64-bit][pi3-64]
|
||||||
- [Raspberry Pi 4 Model B (1 GB, 2 GB and 4 GB model) 32-bit][pi4-32] (recommended)
|
- [Raspberry Pi 4 Model B (1 GB, 2 GB and 4 GB model) 32-bit][pi4-32] (32-bit is required for GPIO support)
|
||||||
- [Raspberry Pi 4 Model B (1 GB, 2 GB and 4 GB model) 64-bit][pi4-64]
|
- [Raspberry Pi 4 Model B (1 GB, 2 GB 4GB and 8 GB model) 64-bit][pi4-64] (64-bit is required for 8 GB model)
|
||||||
- [Tinkerboard][tinker]
|
- [Tinkerboard][tinker]
|
||||||
- [Odroid-C2][odroid-c2], [Odroid-N2][odroid-n2], [Odroid-XU4][odroid-xu4]
|
- [Odroid-C2][odroid-c2], [Odroid-N2][odroid-n2], [Odroid-XU4][odroid-xu4]
|
||||||
- [Intel NUC][intel-nuc]
|
- [Intel NUC][intel-nuc]
|
||||||
@ -21,10 +21,6 @@ The following will take you through the steps required to install Home Assistant
|
|||||||
|
|
||||||
- [VMDK][vmdk], [VHDX][vhdx], [VDI][vdi], [QCOW2][qcow2], [OVA][Virtual Appliance]
|
- [VMDK][vmdk], [VHDX][vhdx], [VDI][vdi], [QCOW2][qcow2], [OVA][Virtual Appliance]
|
||||||
|
|
||||||
- Not yet supported hardware:
|
|
||||||
|
|
||||||
- Raspberry Pi 4 Model B (8 GB model)
|
|
||||||
|
|
||||||
- Not recommended hardware:
|
- Not recommended hardware:
|
||||||
|
|
||||||
- [Raspberry Pi][pi1], [Raspberry Pi Zero-W][pi0-w], [Raspberry Pi 2][pi2]
|
- [Raspberry Pi][pi1], [Raspberry Pi Zero-W][pi0-w], [Raspberry Pi 2][pi2]
|
||||||
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 38 KiB |
@ -1,3 +0,0 @@
|
|||||||
<script>
|
|
||||||
document.location = 'https://discord.gg/c5DvZ4e';
|
|
||||||
</script>
|
|
@ -33,4 +33,5 @@ To try it yourself, check out [the demo](https://demo.home-assistant.io).
|
|||||||
|
|
||||||
* [Awesome HA](https://www.awesome-ha.com/#lovelace-ui)
|
* [Awesome HA](https://www.awesome-ha.com/#lovelace-ui)
|
||||||
* [Community Custom Cards](https://github.com/custom-cards)
|
* [Community Custom Cards](https://github.com/custom-cards)
|
||||||
|
* [Home Assistant Cards](https://home-assistant-cards.bessarabov.com/)
|
||||||
* [Material Design Icons](https://materialdesignicons.com/tag/community)
|
* [Material Design Icons](https://materialdesignicons.com/tag/community)
|
||||||
|