Merge branch 'current' into next

This commit is contained in:
Franck Nijhof 2020-09-29 19:16:30 +02:00
commit ce6ebd36f8
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
43 changed files with 239 additions and 719 deletions

View File

@ -101,8 +101,8 @@ social:
# Home Assistant release details
current_major_version: 0
current_minor_version: 115
current_patch_version: 2
date_released: 2020-09-19
current_patch_version: 5
date_released: 2020-09-29
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.

View File

@ -104,7 +104,7 @@ module Jekyll
unless [true, false, 'inclusive', 'exclusive'].include? attr['required']
isTrue = attr['required'].to_s == 'true'
startSymbol = isTrue ? '' : '('
startSymbol = isTrue ? ' ' : ' ('
endSymbol = isTrue ? '' : ')'
showDefault = isDefault && (defaultValue.length <= MIN_DEFAULT_LENGTH)
shortDefaultValue = ""

View File

@ -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>

View File

@ -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
---

View File

@ -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)

View File

@ -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"}` |

View File

@ -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
```

View File

@ -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"
}
```

View File

@ -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
```

View File

@ -27,7 +27,7 @@ automation 2:
platform: mqtt
topic: /notify/+
action:
service_template: >
service: >
notify.{{ trigger.topic.split('/')[-1] }}
data:
message: '{{ trigger.payload }}'

View File

@ -4,7 +4,7 @@ description: "Details about the database used by Home Assistant."
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.
First load your database with `sqlite3`:

View File

@ -41,7 +41,7 @@ sudo apt-get upgrade -y
Install the dependencies.
```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`.

View File

@ -313,8 +313,8 @@ This is 'when dark' - equivalent to a state condition on `sun.sun` of `below_hor
```yaml
condition:
- condition: sun
after: sunrise
before: sunset
after: sunrise
before: sunset
```
This is 'when light' - equivalent to a state condition on `sun.sun` of `above_horizon`.

View File

@ -6,7 +6,6 @@
<h1 class="title delta">Lovelace UI</h1>
<ul class="divided sidebar-menu">
<li>{% active_link /lovelace/ Introduction %}</li>
<li>{% active_link /lovelace/changelog/ Changelog %}</li>
</ul>
</div>
@ -21,10 +20,9 @@
<li>{% active_link /lovelace/badges/ Badges %}</li>
<li>{% active_link /lovelace/actions/ Actions %}</li>
<li>
<a
href="https://developers.home-assistant.io/docs/frontend/custom-ui/lovelace-custom-card.html"
>Developing Custom Cards <i class="icon-external-link"></i
></a>
<a href="https://developers.home-assistant.io/docs/frontend/custom-ui/lovelace-custom-card.html">Developing Custom Cards
<i class="icon-external-link"></i>
</a>
</li>
</ul>
</div>
@ -33,7 +31,7 @@
<h1 class="title delta">Cards</h1>
<ul class="divided sidebar-menu">
{% for card in cards %}
<li>{% active_link {{card.url}} {{card.sidebar_label}} %}</li>
<li>{% active_link {{card.url}} {{card.sidebar_label}} %}</li>
{% endfor %}
</ul>
</div>

View File

@ -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`.)
- 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)
- 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 `/`*.
- 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.
- 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.)
<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.
- Save your environmental variables by clicking 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.
### Account Linking

View File

@ -42,3 +42,12 @@ app_key:
required: true
type: string
{% 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)).

View File

@ -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)
- **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'>
<img src='/images/screenshots/binary_sensor_classes_icons.png' />

View File

@ -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**.
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

View File

@ -44,7 +44,7 @@ A connection to a single device enables control for all devices on the network.
### 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
username: "example@example.com"

View File

@ -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).
### 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
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`.

View File

@ -33,10 +33,10 @@ http:
{% configuration %}
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
type: [list, string]
default: 0.0.0.0
default: "0.0.0.0, ::"
server_port:
description: Let you set a port to use.
required: false

View File

@ -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.
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`:
```yaml

View File

@ -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.
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,
one with both date and time, and one with date or time each,
add the following lines to your `configuration.yaml`:

View File

@ -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.
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`:
```yaml

View File

@ -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.
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`:
```yaml

View File

@ -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.
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`:
```yaml

View File

@ -10,9 +10,11 @@ ha_domain: kankun
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)
script to provide an HTTP API. Details of the necessary modifications can be found
[here](http://www.homeautomationforgeeks.com/openhab_http.shtml#kankun) (be sure to install the JSON version
of the script as linked above).
script to provide an HTTP API.
Details of the necessary modifications were provided on the now dead HomeAutomationForGeeks site,
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

View File

@ -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`:
```bash
curl https://api.luftdaten.info/v1/sensor/[sensorid]/
curl https://data.sensor.community/airrohr/v1/sensor/[sensorid]/
```
## Full example

View File

@ -114,5 +114,7 @@ camera:
mode: crop
max_image_width: 480
max_image_height: 320
max_stream_width: 480
max_stream_height: 320
image_left: 100
```

View File

@ -36,7 +36,7 @@ To create the required Spotify application:
- Click **Save** after adding the URI.
<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>
## Configuration
@ -71,11 +71,26 @@ After you have set up the above:
- Follow the steps shown to authenticate Home Assistant with your Spotify account.
<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>
## 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
You can send playlists to Spotify using the `"media_content_type": "playlist"`, which are part of the

View File

@ -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.
### 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

View File

@ -1,5 +1,5 @@
---
title: Valloxs
title: Vallox
description: Instructions on how to integrate Vallox ventilation units into Home Assistant.
ha_category:
- Fan

View File

@ -106,6 +106,9 @@ navigating you around this release.
- [Farewell to the following](#farewell-to-the-following)
- [Release 0.115.1 - September 18](#release-01151---september-18)
- [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)
## Media Browser
@ -1730,6 +1733,142 @@ discovery. Users currently using that should set up all devices through UI.
[vera docs]: /integrations/vera/
[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
<details>

View File

@ -2,6 +2,7 @@
#
# General use redirects
/join-chat https://discord.gg/c5DvZ4e
/suggest-community-highlight https://docs.google.com/forms/d/e/1FAIpQLSd9VWPeVM0xg0swWL6kT3wkQUKt8vWsTL5WtPO95LAy-0cYZw/viewform
# Older development pages

View File

@ -6,27 +6,24 @@ regenerate: 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.
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).
This is a community curated list of different ways to use Home Assistant. Most
of these examples are using [the automation integration][automations].
<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>
[automation]: /getting-started/automation/
[github-search]: https://github.com/search?q=topic%3Ahome-assistant-config&type=Repositories
{% assign cookbook = site.cookbook | sort: 'title' %}
{% assign categories = cookbook | map: 'ha_category' | uniq | sort %}
{% for category in categories %}
### {{ category }}
## {{ category }}
{% if category == 'Automation Examples' %}

View File

@ -9,10 +9,10 @@ The following will take you through the steps required to install Home Assistant
- 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 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) 64-bit][pi4-64]
- [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 4GB and 8 GB model) 64-bit][pi4-64] (64-bit is required for 8 GB model)
- [Tinkerboard][tinker]
- [Odroid-C2][odroid-c2], [Odroid-N2][odroid-n2], [Odroid-XU4][odroid-xu4]
- [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]
- Not yet supported hardware:
- Raspberry Pi 4 Model B (8 GB model)
- Not recommended hardware:
- [Raspberry Pi][pi1], [Raspberry Pi Zero-W][pi0-w], [Raspberry Pi 2][pi2]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -1,3 +0,0 @@
<script>
document.location = 'https://discord.gg/c5DvZ4e';
</script>

View File

@ -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)
* [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)