Merge branch 'rc' into current

This commit is contained in:
Franck Nijhof 2020-12-13 22:39:56 +01:00
commit ed52524427
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
110 changed files with 5838 additions and 910 deletions

View File

@ -358,7 +358,6 @@ source/_integrations/rpi_power.markdown @shenxn @swetoast
source/_integrations/ruckus_unleashed.markdown @gabe565
source/_integrations/safe_mode.markdown @home-assistant/core
source/_integrations/saj.markdown @fredericvl
source/_integrations/salt.markdown @bjornorri
source/_integrations/samsungtv.markdown @escoand
source/_integrations/scene.markdown @home-assistant/core
source/_integrations/schluter.markdown @prairieapps
@ -453,7 +452,6 @@ source/_integrations/transmission.markdown @engrbm87 @JPHutchins
source/_integrations/tts.markdown @pvizeli
source/_integrations/tuya.markdown @ollo69
source/_integrations/twentemilieu.markdown @frenck
source/_integrations/ubee.markdown @mzdrale
source/_integrations/unifi.markdown @Kane610
source/_integrations/unifiled.markdown @florisvdk
source/_integrations/upb.markdown @gwww
@ -499,7 +497,6 @@ source/_integrations/yamaha_musiccast.markdown @jalmeroth
source/_integrations/yandex_transport.markdown @rishatik92 @devbis
source/_integrations/yeelight.markdown @rytilahti @zewelor @shenxn
source/_integrations/yeelightsunflower.markdown @lindsaymarkward
source/_integrations/yessssms.markdown @flowolf
source/_integrations/yi.markdown @bachya
source/_integrations/zeroconf.markdown @bdraco
source/_integrations/zerproc.markdown @emlove

View File

@ -99,10 +99,10 @@ social:
account: home_assistant
# Home Assistant release details
current_major_version: 0
current_minor_version: 118
current_patch_version: 5
date_released: 2020-12-05
current_major_version: 2020
current_minor_version: 12
current_patch_version: 0
date_released: 2020-12-13
# 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

@ -5,11 +5,13 @@ module Jekyll
'device_class' => '/docs/configuration/customizing-devices/#device-class',
'template' => '/docs/configuration/templating/',
'icon' => '/docs/configuration/customizing-devices/#icon',
'selector' => '/docs/blueprint/selectors/',
}
TYPES = [
'action', 'boolean', 'string', 'integer', 'float', 'time', 'template',
'device_class', 'icon', 'map', 'list', 'date', 'datetime', 'any'
'device_class', 'icon', 'map', 'list', 'date', 'datetime', 'any',
'selector',
]
MIN_DEFAULT_LENGTH = 30

45
plugins/details.rb Normal file
View File

@ -0,0 +1,45 @@
module Jekyll
class DetailsBlock < Liquid::Block
def render_details_block(vars:, converter:, classes: nil, parent_type: nil)
result = Array.new
result << vars.map do |entry|
markup = Array.new
markup << "<div class='details-block-item' onclick='showDetails(this)'>"
markup << "<div class='details-block-title'>#{entry['title']}"
markup << '<svg id="down" style="display: block;" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z" /></svg>'
markup << '<svg id="up" style="display: none;" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z" /></svg>'
markup << "</div>"
markup << "<div class='details-block-content' hidden onclick>#{converter.convert(entry['content'].to_s)}</div>"
markup << "</div>"
end
result.join
end
def render(context)
contents = super(context)
vars = SafeYAML.load(contents)
site = context.registers[:site]
converter = site.find_converter_instance(::Jekyll::Converters::Markdown)
<<~MARKUP
<script>
function showDetails(el) {
const content = el.querySelector(".details-block-content");
const up = el.querySelector(".details-block-title").querySelector("svg#up");
const down = el.querySelector(".details-block-title").querySelector("svg#down");
up.style.display = up.style.display === "none" ? "block" : "none";
down.style.display = down.style.display === "none" ? "block" : "none";
content.hidden = !content.hidden;
}
</script>
<div class="details-block">
#{render_details_block(vars: vars, converter: converter)}
</div>
MARKUP
end
end
end
Liquid::Template.register_tag('details', Jekyll::DetailsBlock)

998
sass/custom/_blue.scss Normal file
View File

@ -0,0 +1,998 @@
$blue__deep_color: #161d61;
$blue__light_color: #18abfd;
$ha__primary_color: #03a9f4;
#blue {
$blue__hero_height: 670px;
font-family: Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif;
.site-header {
.grid-wrapper {
max-width: 1100px !important;
padding: 0 25px !important;
}
}
.grid-wrapper {
max-width: 1500px;
padding: 0;
width: 100%;
}
.page-content {
overflow-x: hidden;
}
.banner {
height: $blue__hero_height;
margin-bottom: 16px;
margin-top: -42px;
width: 100%;
text-align: center;
.title {
position: relative;
width: 550px;
height: 168px;
left: calc(50% - 550px / 2 - 0.5px);
font-weight: 900;
font-size: 68px;
line-height: 55px;
text-align: center;
color: #ffffff;
bottom: 226px;
svg {
stroke: $ha__primary_color;
}
}
img {
width: 100%;
object-fit: cover;
object-position: bottom;
border-radius: 0;
border: 0;
height: $blue__hero_height;
box-shadow: none;
}
}
.content {
max-width: 1000px;
margin: auto;
.sub-title {
font-weight: bold;
font-size: 42px;
line-height: 49px;
margin: 32px;
text-align: center;
}
.missing-piece {
z-index: 2;
position: relative;
display: flex;
width: 600px;
border-radius: 8px;
margin: -36px auto 0;
.missing-piece-header {
font-weight: 900;
font-size: 24px;
line-height: 28px;
}
.missing-piece-content {
font-size: 16px;
line-height: 19px;
margin-top: 16px;
width: 420px;
}
.missing-piece-overlay {
width: 210px;
border-radius: 8px;
margin: -50px -50px 0 0;
padding: 22px;
display: flex;
flex-flow: wrap;
justify-content: space-between;
.missing-piece-overlay-header {
font-weight: 500;
font-size: 12px;
line-height: 14px;
letter-spacing: 0.1em;
color: #0c0c0c;
opacity: 0.33;
width: 100%;
text-align: right;
}
.missing-piece-overlay-price {
width: calc(100% - 6px);
text-align: right;
font-weight: 900;
font-size: 24px;
line-height: 28px;
color: #0c0c0c;
display: inline-flex;
justify-content: flex-end;
div {
width: 6px;
margin-top: 2px;
font-size: 12px;
line-height: 14px;
color: #0c0c0c;
opacity: 0.4;
}
}
.missing-piece-overlay-images {
display: grid;
grid-template-columns: 47px 47px 47px;
grid-template-rows: 47px 47px;
grid-auto-flow: row;
gap: 2px;
.img-container {
border: 1px solid #e9e9e9;
box-sizing: border-box;
border-radius: 4px;
height: 47px;
width: 47px;
display: flex;
img {
margin: auto;
box-shadow: none;
border-radius: 0;
border: 0;
}
}
.img-container:first-of-type {
grid-column: 1 / span 2;
grid-row: 1 / span 2;
height: 96px;
width: 96px;
}
}
.missing-piece-overlay-button {
background-color: $ha__primary_color;
margin-top: 12px;
border-radius: 4px;
width: 154px;
height: 46px;
display: flex;
cursor: pointer;
div {
margin: auto;
font-weight: 900;
font-size: 18px;
color: #ffffff;
}
}
}
}
.missing-piece-disclaimer {
font-size: 12px;
line-height: 14px;
color: #0c0c0c;
opacity: 0.4;
text-align: center;
margin: 12px auto 50px;
}
.bullet-points {
margin: 24px 136px;
display: grid;
gap: 32px;
grid-template-columns: repeat(2, 1fr);
.item {
display: grid;
text-align: center;
span:nth-of-type(1) {
color: rgba(0, 0, 0, 0.87);
font-size: 24px;
font-weight: 300;
letter-spacing: 0.1em;
line-height: 28px;
opacity: 0.66;
text-transform: uppercase;
}
span:nth-of-type(2) {
color: rgba(0, 0, 0, 0.87);
font-size: 48px;
letter-spacing: -2px;
line-height: 56px;
}
span:nth-of-type(3) {
color: rgba(0, 0, 0, 0.87);
font-size: 14px;
font-weight: 500;
letter-spacing: -1px;
line-height: 16px;
}
}
}
.vision {
position: sticky;
text-align: center;
display: inline-block;
width: 100%;
margin-bottom: 160px;
svg {
z-index: 0;
width: 100vw;
margin-left: calc(-100vw / 2);
position: absolute;
path {
z-index: 0;
}
}
.vision-content {
z-index: 1;
position: relative;
.vision-header {
margin-top: 172px;
font-weight: 900;
font-size: 68px;
line-height: 80px;
color: $blue__deep_color;
}
.vision-statement {
font-size: 18px;
line-height: 21px;
}
.vision-blocks {
width: 100%;
display: flex;
flex-flow: wrap;
justify-content: space-between;
.vision-block {
width: 335px;
margin: 62px;
.vision-block-title {
text-transform: uppercase;
color: $blue__deep_color;
letter-spacing: -2px;
font-size: 48px;
line-height: 56px;
font-weight: bold;
}
.vision-block-content {
font-size: 18px;
line-height: 133%;
}
}
}
}
}
.mood {
text-align: center;
margin-bottom: 32px;
margin-bottom: 80px;
.mood-cards {
display: inline-flex;
align-items: center;
justify-content: space-between;
margin: 0 150px;
width: calc(100% - 300px);
position: relative;
.material-card {
display: block;
align-items: initial;
width: 300px;
z-index: 1;
img {
box-shadow: none;
border: 0;
border-radius: 0;
}
.mood-card-type {
width: 60px;
text-align: start;
font-weight: bold;
font-size: 32px;
line-height: 32px;
.mode {
margin-top: -8px;
font-weight: normal;
font-size: 15px;
text-align: justify;
letter-spacing: 6px;
}
}
.mood-card-footer {
display: flex;
.specifications {
display: grid;
height: 60px;
margin-top: 16px;
grid-template-columns: repeat(2, 1fr);
justify-items: left;
align-items: self-end;
flex-wrap: wrap;
width: calc(100% - 75px);
.spec-item {
height: 30px;
font-size: 11px;
display: inline-grid;
line-height: 15px;
justify-items: left;
span:first-of-type {
font-weight: bold;
}
}
}
.outline {
display: flex;
place-self: flex-end;
color: #c4c4c4;
}
}
}
.mood-separator {
z-index: 0;
display: grid;
height: 120px;
width: 120px;
align-content: center;
justify-content: center;
border-radius: 188px;
border: 1px dashed #c4c4c4;
margin: 0 -80px;
padding: 120px;
span {
display: block;
width: inherit;
}
span:first-of-type {
color: $ha__primary_color;
font-weight: bold;
font-size: 16px;
line-height: 15px;
}
span:last-of-type {
font-size: 12px;
color: #0c0c0c;
opacity: 0.4;
}
.mood-separator-arrow {
color: #c4c4c4;
}
.mood-separator-arrow.right {
margin-top: -118px;
}
.mood-separator-arrow.left {
margin-bottom: -118px;
align-self: end;
}
}
}
}
.specifications {
display: grid;
grid-template-columns: repeat(5, 1fr);
.specifications-components {
grid-column: 1 / span 3;
margin-right: 24px;
}
.component-list {
display: grid;
row-gap: 8px;
grid-template-columns: repeat(5, 1fr);
font-size: 18px;
line-height: 21px;
.spec-title {
grid-column: 1;
margin-right: 24px;
margin-top: 16px;
text-transform: uppercase;
opacity: 0.4;
}
.spec-content {
grid-column: 2 / span 4;
font-weight: bold;
margin-top: 16px;
.spec-content-additional {
font-weight: normal;
ul {
margin-bottom: 0;
margin-left: 16px;
li {
margin-bottom: 0;
}
li::marker {
content: "- ";
}
}
}
}
}
.specifications-form-factor {
grid-column: 4 / span 2;
.specifications-form-factor-grid {
display: grid;
margin-left: 42px;
.sff-description {
display: grid;
span:first-of-type {
font-size: 1.525em;
line-height: 24px;
grid-column: 1;
text-transform: uppercase;
opacity: 0.4;
align-self: self-end;
}
span:last-of-type {
font-weight: bold;
font-size: 1.425em;
word-spacing: -4px;
}
}
.sff-width {
grid-column: 1 / span 2;
}
svg#zen {
grid-column: 1;
height: 100px;
width: 200px;
margin-bottom: 32px;
}
.sff-height {
grid-column: 2;
margin-left: 14px;
}
svg#depth {
grid-column: 1;
height: 200px;
width: 200px;
margin-bottom: 32px;
}
.sff-depth {
grid-column: 2;
margin-left: 14px;
}
svg#weight {
grid-column: 1 / span 2;
height: 200px;
width: 100%;
}
.sff-weight {
grid-column: 1 / span 2;
justify-content: center;
margin-top: -24px;
}
}
img {
box-shadow: none;
border: 0;
border-radius: 0;
}
}
}
.faq-list {
margin: 0 72px;
}
.blue3d {
text-decoration: none;
.blue3d-container {
align-items: flex-end;
background-image: url('/images/blue/blue_3d.jpg');
background-position: bottom;
background-size: cover;
display: flex;
height: 390px;
margin: auto;
margin-top: 62px;
padding: 0;
width: 720px;
.blue3d-description {
display: flex;
align-items: center;
justify-content: space-between;
background-color: #000000ab;
color: #FFFFFF;
height: 60px;
width: 100%;
svg {
fill: white;
height: 32px;
width: 32px;
min-width: 32px;
}
}
}
}
}
.blue-buy-fab {
background-color: $ha__primary_color;
border-radius: 62px;
bottom: 16px;
display: flex;
box-shadow: rgba(0, 0, 0, 0.2) 0px 7px 8px -4px,
rgba(0, 0, 0, 0.14) 0px 12px 17px 2px,
rgba(0, 0, 0, 0.12) 0px 5px 22px 4px;
box-sizing: border-box;
color: #ffffff;
cursor: pointer;
display: inline-flex;
float: right;
font-size: 12.25px;
font-weight: 400;
font-weight: bold;
line-height: 32px;
padding: 8px 16px 4px;
position: fixed;
right: 24px;
z-index: 1111;
svg {
margin-top: 4px;
}
}
#buy-dialog {
z-index: 1000;
display: none;
position: fixed;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
background-color: rgb(0, 0, 0);
background-color: rgba(0, 0, 0, 0.4);
.dialog-content {
border-radius: 8px;
margin: auto;
width: 600px;
padding: 0;
overflow-y: auto;
display: flex;
flex-flow: column;
justify-content: space-between;
.close-container {
position: fixed;
float: right;
width: 615px;
text-align: right;
margin-top: -17px;
.dialog-close {
cursor: pointer;
font-size: 32px;
background-color: #ffffff;
border-radius: 100px;
height: 32px;
width: 32px;
display: inline-flex;
align-items: center;
justify-content: center;
}
}
.dialog-header {
display: flex;
justify-content: space-between;
padding: 8px 16px;
font-weight: bold;
font-size: 24px;
svg {
width: 32px;
height: 32px;
cursor: pointer;
}
}
.distributors {
a {
text-decoration: none;
.distributor {
width: 100%;
display: flex;
justify-content: space-between;
padding: 8px 16px;
color: #222222;
margin: auto;
svg {
height: 100%;
align-self: center;
}
div {
display: grid;
line-height: 20px;
div:nth-of-type(1) {
align-content: center;
grid-column: 1;
grid-row: 1 / span 2;
margin-right: 8px;
}
div:nth-of-type(2) {
grid-column: 2;
}
div:nth-of-type(3) {
grid-column: 2;
color: darkslategrey;
font-size: small;
}
}
}
.distributor:hover {
border-color: $ha__primary_color;
}
}
}
.box-contents {
margin: 0 16px 32px;
ul {
margin: 12px 0 12px 24px;
color: darkslategrey;
font-size: small;
li {
margin-bottom: 4px;
}
}
.ul-sub {
margin: 0 0 0 16px;
}
}
.tip {
color: darkslategrey;
font-size: small;
text-align: center;
padding: 12px 62px 12px;
margin-top: 16px;
border-top: 1px darkslategrey solid;
}
}
}
}
@media only screen and (max-width: $palm-end) {
$blue__hero_height: 500px;
#blue {
.site-header {
background-color: #ffffff66;
transition: background 0.5s;
ul {
margin: 0 4px;
width: calc(100% - 8px);
}
}
.page-content {
margin-top: 0;
height: 100%;
}
.grid-wrapper {
margin-left: 0;
width: 100%;
}
.banner {
margin-bottom: 8px;
height: $blue__hero_height;
img {
height: $blue__hero_height;
}
.title {
width: 100%;
left: unset;
font-size: 2em;
line-height: 0px;
svg {
width: 152px;
height: 122px;
text {
font-size: 65px;
}
}
}
}
.content {
margin: 0 8px;
.sub-title {
font-size: 24px;
line-height: 28px;
}
.missing-piece {
margin: -116px auto 0;
display: block;
width: 100%;
padding: 0;
.missing-piece-header {
padding-left: 8px;
padding-top: 8px;
}
.missing-piece-content {
padding-left: 8px;
}
.missing-piece-content {
width: 100%;
}
.secondary {
display: none;
}
.missing-piece-overlay {
margin: 0;
margin-top: 12px;
width: 100%;
.missing-piece-overlay-images {
margin-top: -42px;
margin-left: -8px;
}
}
}
.missing-piece-disclaimer {
margin: 12px auto 12px;
}
.bullet-points {
margin: 24px 0;
.item {
span:nth-of-type(1) {
font-size: 16px;
line-height: 16px;
}
span:nth-of-type(2) {
font-size: 32px;
line-height: 32px;
}
span:nth-of-type(3) {
font-size: 12px;
line-height: 12px;
}
}
}
.vision {
margin-bottom: 0;
svg {
display: none;
}
.vision-content {
margin-top: 28px;
.vision-header {
font-size: 34px;
line-height: 40px;
margin-top: 8px;
}
.vision-statement {
font-size: 12px;
line-height: 14px;
}
.vision-blocks {
.vision-block {
width: 100%;
margin: 9px;
.vision-block-title {
font-size: 24px;
line-height: 28px;
}
.vision-block-content {
display: none;
}
}
}
}
}
.mood {
.mood-cards {
display: inline-grid;
margin: 0;
width: 100%;
.material-card {
width: 100% !important;
display: block;
height: auto !important;
margin: 0 !important;
z-index: 4;
img {
max-height: 180px;
}
.mood-card-footer {
.specifications {
display: none;
}
}
}
.mood-separator {
margin: -80px calc((100% / 2) - 120px);
.mood-separator-arrow {
display: none;
}
}
}
}
.faq-list {
margin: 0;
}
.specifications {
display: block;
h3 {
text-align: center;
}
.component-list {
grid-template-columns: repeat(1, 1fr);
.spec-title,
.spec-content {
grid-column: 1;
}
.spec-title {
margin-top: 8px;
}
.spec-content {
margin-top: -4px;
}
}
.specifications-form-factor {
.specifications-form-factor-grid {
margin-left: 0;
.sff-width {
margin-left: 50px;
}
.sff-description {
span:last-of-type {
font-size: 16px;
}
}
}
}
}
}
.blue-buy-fab {
bottom: 12px;
right: 12px;
display: none;
}
#buy-dialog {
padding-top: 0;
.dialog-content {
border-radius: 0;
height: 100vh;
width: 100vw;
padding-bottom: 64px;
display: block;
.tip {
margin: 32px 8px 8px 8px;
}
}
}
.blue3d {
.blue3d-container {
width: 100% !important;
.blue3d-description {
height: auto !important;
i {
align-self: center;
}
}
}
}
}
}
@media only screen and (max-width: $lap-end) {
#blue {
.page-content {
.content {
.bullet-points {
margin: 24px 0;
}
.vision {
margin-top: -200px;
.vision-content {
padding-top: 200px;
.vision-blocks {
margin: 32px 0;
.vision-block {
margin: 8px !important;
.vision-block-content {
display: none;
}
}
}
}
}
.mood {
.mood-cards {
margin: 0;
width: inherit;
.material-card {
height: 300px;
width: 230px;
margin: 0 24px;
}
}
}
.specifications {
margin: 0 16px;
}
}
}
}
}

26
sass/custom/_details.scss Normal file
View File

@ -0,0 +1,26 @@
div.details-block {
width: 100%;
display: block;
.details-block-item {
background-color: white;
padding: 4px 16px;
margin: 8px;
cursor: pointer;
box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.1);
border-radius: 16px;
.details-block-title {
font-weight: bold;
font-size: 18px;
line-height: 21px;
height: 54px;
justify-content: space-between;
display: flex;
align-items: center;
}
.details-block-content {
margin: 4px 32px 0 0;
}
}
}

View File

@ -0,0 +1,59 @@
.feature-cards {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 32px;
margin: auto;
.card {
border-radius: 8px;
display: inline-block;
width: calc(100% - 16px);
vertical-align: top;
.card-header {
font-size: 1.4rem;
line-height: 1.6;
display: flex;
align-items: center;
padding-bottom: 8px;
height: 62px;
i {
height: 62px;
min-width: 62px;
text-align: center;
font-size: 39px;
}
}
.card-content {
padding-left: 24px;
.button {
font-size: small;
font-weight: 600;
text-decoration: none;
}
p:last-of-type,
ul {
margin-bottom: 12px;
}
}
}
}
@media only screen and (max-width: $palm-end) {
.feature-cards {
width: 95%;
grid-template-columns: repeat(1, 1fr);
.card {
width: 100%;
.card-content {
padding-left: 0;
}
}
}
}

View File

@ -157,6 +157,9 @@ $primary-color: #049cdb;
color: white;
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
display: flex;
justify-content: space-between;
align-items: center;
.title {
font-size: 20px;
@ -167,6 +170,13 @@ $primary-color: #049cdb;
font-size: 12px;
font-weight: initial;
}
svg {
fill: white;
width: 32px;
height: 32px;
min-width: 32px;
}
}
}

View File

@ -1,6 +1,9 @@
@import 'oscailte/oscailte';
@import 'custom/paulus';
@import 'custom/blue';
@import 'custom/features';
@import 'custom/component_page';
@import 'custom/syntax';
@import 'custom/details';
@import 'custom/print';
@import 'custom/layout';

View File

@ -3,42 +3,14 @@ title: "Automating Home Assistant"
description: "Steps to help you get automation setup in Home Assistant."
---
Home Assistant offers a wide range of automation configurations. In this section, we'll try to guide you through all the different possibilities and options. Besides this documentation, there are also a couple of people who have made their automations [publicly available](/cookbook/#example-configurationyaml).
Home Assistant contains information about all your devices and services. This information is not only available for the user in the dashboard, it can also be used to trigger automations. And that's fun!
Please see [Automation Integration](/integrations/automation/) for configuration options and services.
Automations in Home Assistant allow you to automatically respond to things that happen. You can turn the lights on at sunset or pause the music when you receive a call.
### Automation basics
If you are just starting out, we strongly suggest you start with blueprint automations. These are ready-made automations by the community that you only need to configure.
Before you can go ahead and create your own automations, it's important to learn the basics. To explore these, let's have a look at the following example home automation rule:
### [Learn about automation blueprints &raquo;](/docs/automation/using_blueprints/)
```text
(trigger) When Paulus arrives home
(condition) and it is after sunset:
(action) Turn the lights in the living room on
```
If you got the hang of blueprints and need more, it's time for the next step. But before we can start creating automations, you will need to learn about the automation basics.
The example consists of three different parts: a [trigger](/docs/automation/trigger/), a [condition](/docs/automation/condition/) and an [action](/docs/automation/action/).
The first line is the **trigger** of the automation rule. Triggers describe events that should trigger the automation rule. In this case, it is a person arriving home, which can be observed in Home Assistant by observing the state of Paulus changing from 'not_home' to 'home'.
The second line is the **condition**. Conditions are optional tests that can limit an automation rule to only work in your specific use cases. A condition will test against the current state of the system. This includes the current time, devices, people and other things like the sun. In this case, we only want to act when the sun has set.
The third part is the **action**, which will be performed when a rule is triggered and all conditions are met. For example, it can turn a light on, set the temperature on your thermostat or activate a scene.
<div class='note'>
The difference between a condition and a trigger can be confusing as they are very similar. Triggers look at the actions, while conditions look at the results: turning a light on versus a light being on.
</div>
### Exploring the internal state
Automation rules interact directly with the internal state of Home Assistant, so you'll need to familiarize yourself with it. Home Assistant exposes its current state via the developer tools. These are available at the bottom of the sidebar in the frontend. **Developer Tools** -> **States** will show all currently available states. An entity can be anything. A light, a switch, a person and even the sun. A state consists of the following parts:
| Name | Description | Example |
| ---- | ----- | ---- |
| Entity ID | Unique identifier for the entity. | `light.kitchen`
| State | The current state of the device. | `home`
| Attributes | Extra data related to the device and/or current state. | `brightness`
State changes can be used as the source of triggers and the current state can be used in conditions.
Actions are all about calling services. To explore the available services open the **Developer Tools** -> **Services**. Services allow to change anything. For example turn on a light, run a script or enable a scene. Each service has a domain and a name. For example the service `light.turn_on` is capable of turning on any light in your system. Services can be passed parameters to for example tell which device to turn on or what color to use.
### [Learn about automation basics &raquo;](/docs/automation/basics/)

View File

@ -0,0 +1,46 @@
---
title: "Understanding Automations"
description: "A breakdown of what an automation consists of."
---
All automations are made up of a trigger and an action. Optionally combined with a condition. Take for example the automation:
> When Paulus arrives home and it is after sunset: Turn the lights on in the living room.".
We can break up this automation into the following three parts:
```text
(trigger) When Paulus arrives home
(condition) and it is after sunset:
(action) Turn the lights on in the living room
```
The first part is the [trigger](/docs/automation/trigger/) of the automation rule. Triggers describe events that should trigger the automation rule. In this case, it is a person arriving home, which can be observed in Home Assistant by observing the state of Paulus changing from 'not_home' to 'home'.
The second part is the [condition](/docs/automation/condition/). Conditions are optional tests that can limit an automation rule to only work in your specific use cases. A condition will test against the current state of the system. This includes the current time, devices, people and other things like the sun. In this case, we only want to act when the sun has set.
The third part is the [action](/docs/automation/action/), which will be performed when a rule is triggered and all conditions are met. For example, it can turn a light on, set the temperature on your thermostat or activate a scene.
<div class='note'>
The difference between a condition and a trigger can be confusing as they are very similar. Triggers look at the actions, while conditions look at the results: turning a light on versus a light being on.
</div>
## Exploring the internal state
Automation rules interact directly with the internal state of Home Assistant, so you'll need to familiarize yourself with it. Home Assistant exposes its current state via the developer tools. These are available at the bottom of the sidebar in the frontend. **Developer Tools** -> **States** will show all currently available states. An entity can be anything. A light, a switch, a person and even the sun. A state consists of the following parts:
| Name | Description | Example |
| ---- | ----- | ---- |
| Entity ID | Unique identifier for the entity. | `light.kitchen`
| State | The current state of the device. | `home`
| Attributes | Extra data related to the device and/or current state. | `brightness`
State changes can be used as the source of triggers and the current state can be used in conditions.
Actions are all about calling services. To explore the available services open the **Developer Tools** -> **Services**. Services allow changing anything. For example turn on a light, run a script or enable a scene. Each service has a domain and a name. For example the service `light.turn_on` is capable of turning on any light in your system. Services can be passed parameters to for example tell which device to turn on or what color to use.
## Creating automations
Now that you've got a sneak peek of what is possible, it's time to get your feet wet and create your first automation.
### [Using the automation editor &raquo;](/docs/automation/editor/)

View File

@ -3,8 +3,6 @@ title: "Automation Editor"
description: "Instructions on how to use the automation editor."
---
In Home Assistant 0.45 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant, then you're all set! Go to the UI and enjoy.
From the UI choose **Configuration** which is located in the sidebar, then click on **Automation** to go to the automation editor. Press the **+** sign in the lower right corner to get started. This example is based on the manual steps described in the [Getting started section](/getting-started/automation/) for a [`random` sensor](/integrations/random#sensor).
Choose a meaningful name for your automation rules.
@ -27,75 +25,9 @@ Firing a [persistent notification](/integrations/persistent_notification/) is th
As "Service Data" we want a simple text that is shown as part of the notification.
```json
{
"message": "Sensor value greater than 10"
}
```yaml
message: Sensor value greater than 10
```
Don't forget to save your new automation rule. For your saved automation rule to come into effect, you will need to go to the **Configuration** page and click on **Reload Automation**.
## Updating your configuration to use the editor
First, check that you have activated the configuration editor.
```yaml
# Activate the configuration editor
config:
```
The automation editor reads and writes to the file `automations.yaml` in the root of your [configuration](/docs/configuration/) folder.
Currently, both the name of this file and its location are fixed.
Make sure that you have set up the automation integration to read from it:
```yaml
# Configuration.yaml example
automation: !include automations.yaml
```
If you still want to use your old automation section, add a label to the old entry:
```yaml
automation old:
- trigger:
platform: ...
```
You can use the `automation:` and `automation old:` sections at the same time:
- `automation old:` to keep your manual designed automations
- `automation:` to save the automation created by the online editor
```yaml
automation: !include automations.yaml
automation old: !include_dir_merge_list automations
```
## Migrating your automations to `automations.yaml`
If you want to migrate your old automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over, you'll have to add an `id`. This can be any string as long as it's unique.
For example, the below automation will be triggered when the sun goes from below the horizon to above the horizon. Then, if the temperature is between 17 and 25 degrees, a light will be turned on.
```yaml
# Example automations.yaml entry
- id: my_unique_id # <-- Required for editor to work, for automations created with the editor the id will be automatically generated.
alias: Hello world
trigger:
- platform: state
entity_id: sun.sun
from: below_horizon
to: above_horizon
condition:
- condition: numeric_state
entity_id: sensor.temperature
above: 17
below: 25
value_template: '{% raw %}{{ float(state.state) + 2 }}{% endraw %}'
action:
- service: light.turn_on
```
<div class='note'>
Any comments in the YAML file will be lost and templates will be reformatted when you update an automation via the editor.
</div>

View File

@ -1,77 +0,0 @@
---
title: "Automation Examples"
description: "Some automation examples to get you started."
---
Just some sample automation rules to get you started.
{% raw %}
```yaml
# Example of entry in configuration.yaml
automation:
# Turns on lights 1 hour before sunset if people are home
# and if people get home between 16:00-23:00
- alias: 'Rule 1 Light on in the evening'
trigger:
# Prefix the first line of each trigger configuration
# with a '-' to enter multiple
- platform: sun
event: sunset
offset: '-01:00:00'
- platform: state
entity_id: all
to: 'home'
condition:
# Prefix the first line of each condition configuration
# with a '-'' to enter multiple
- condition: state
entity_id: all
state: 'home'
- condition: time
after: '16:00:00'
before: '23:00:00'
action:
# With a single service call, we don't need a '-' before service - though you can if you want to
service: homeassistant.turn_on
entity_id: group.living_room
# Turn off lights when everybody leaves the house
- alias: 'Rule 2 - Away Mode'
trigger:
platform: state
entity_id: all
to: 'not_home'
action:
service: light.turn_off
entity_id: all
# Notify when Paulus leaves the house in the evening
- alias: 'Leave Home notification'
trigger:
platform: zone
event: leave
zone: zone.home
entity_id: device_tracker.paulus
condition:
condition: time
after: '20:00'
action:
service: notify.notify
data:
message: 'Paulus left the house'
# Send a notification via Pushover with the event of a Xiaomi cube. Custom event from the Xiaomi component.
- alias: 'Xiaomi Cube Action'
initial_state: false
trigger:
platform: event
event_type: cube_action
event_data:
entity_id: binary_sensor.cube_158d000103a3de
action:
service: notify.pushover
data:
title: "Cube event detected"
message: "Cube has triggered this event: {{ trigger.event }}"
```
{% endraw %}

View File

@ -0,0 +1,53 @@
---
title: "Automation Modes"
description: "How to use and configure automation modes."
---
An automation can be triggered while it is already running.
The automation's `mode` configuration option controls what happens when the automation is triggered while the actions are still running from a previous trigger.
Mode | Description
-|-
`single` | (Default) Do not start a new run. Issue a warning.
`restart` | Start a new run after first stopping previous run.
`queued` | Start a new run after all previous runs complete. Runs are guaranteed to execute in the order they were queued.
`parallel` | Start a new, independent run in parallel with previous runs.
<p class='img'>
<img src='/images/integrations/script/script_modes.jpg'>
</p>
For both `queued` and `parallel` modes, configuration option `max` controls the maximum
number of runs that can be executing and/or queued up at a time. The default is 10.
When `max` is exceeded (which is effectively 1 for `single` mode) a log message will be emitted to indicate this has happened. Configuration option `max_exceeded` controls the severity level of that log message. Set it to `silent` to ignore warnings or set it to a [log level](/integrations/logger/#log-levels). The default is `warning`.
## Example throttled automation
Some automations you only want to run every 5 minutes. This can be achieved using the `single` mode and silencing the warnings when the automation is triggered while it's running.
```yaml
automation:
- mode: single
max_exceeded: silent
trigger:
- ...
action:
- ...
- delay: 300 # seconds (=5 minutes)
```
## Example Queued
Sometimes an automation is doing an action on a device that does not support multiple simultaneous actions. In such cases, a queue can be used. In that case, the automation will be executed once it's current invocation and queue are done.
```yaml
automation:
- mode: queued
max: 25
trigger:
- ...
action:
- ...
```

View File

@ -0,0 +1,46 @@
---
title: "Automation Services"
description: "How to use the various automation services."
---
The automation integration has services to control automations, like turning automations on and off. This can be useful if you want to disable an automation from another automation.
## Service `automation.turn_on`
This service enables the automation's triggers.
Service data attribute | Optional | Description
-|-|-
`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted.
## Service `automation.turn_off`
This service disables the automation's triggers, and optionally stops any currently active actions.
Service data attribute | Optional | Description
-|-|-
`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted.
`stop_actions` | yes | Stop any currently active actions (defaults to true).
## Service `automation.toggle`
This service enables the automation's triggers if they were disabled, or disables the automation's triggers, and stops any currently active actions, if the triggers were enabled.
Service data attribute | Optional | Description
-|-|-
`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted.
## Service `automation.trigger`
This service will trigger the action of an automation. By default it bypasses any conditions, though that can be changed via the `skip_condition` attribute.
Service data attribute | Optional | Description
-|-|-
`entity_id` | no | Entity ID of automation to trigger. Can be a list. `none` or `all` are also accepted.
`skip_condition` | yes | Whether or not the condition will be skipped (defaults to true).
## Service `automation.reload`
_This service is only required if you create/edit automations in YAML. Automations via the UI do this automatically._
This service reloads all automations, stopping all currently active automation actions.

View File

@ -32,6 +32,18 @@ automation:
- ANOTHER_USER_ID
```
It is also possible to listen for multiple events at once. This is useful for
event that contain no, or similar, data and contexts.
```yaml
automation:
trigger:
platform: event
event_type:
- automation_reloaded
- scene_reloaded
```
### Home Assistant trigger
Fires when Home Assistant starts up or shuts down.
@ -319,8 +331,6 @@ A very thorough explanation of this is available in the Wikipedia article about
Fires when a [tag](/integrations/tag) is scanned. For example, a NFC tag is
scanned using the Home Assistant Companion mobile application.
{% raw %}
```yaml
automation:
trigger:
@ -328,13 +338,9 @@ automation:
tag_id: A7-6B-90-5F
```
{% endraw %}
Additionally, you can also only trigger if a card is scanned by a specific
device/scanner by setting the `device_id`:
{% raw %}
```yaml
automation:
trigger:
@ -343,7 +349,19 @@ automation:
device_id: 0e19cd3cf2b311ea88f469a7512c307d
```
{% endraw %}
Or trigger on multiple possible devices for multiple tags:
```yaml
automation:
trigger:
platform: tag
tag_id:
- A7-6B-90-5F
- A7-6B-15-AC
device_id:
- 0e19cd3cf2b311ea88f469a7512c307d
- d0609cb25f4a13922bb27d8f86e4c821
```
### Template trigger

View File

@ -0,0 +1,45 @@
---
title: "Using Automation Blueprints"
description: "How to create automations based off blueprints."
---
Automation blueprints are pre-made automations that you can easily add to your Home Assistant instance. Each blueprint can be added as many times as you want.
Quick links:
- [Blueprints in the Home Assistant forums][blueprint-forums]
## Blueprint Automations
Automations based on a blueprint only need to be configured to be used. What needs to be configured differs on each blueprint.
To create your first automation based on a blueprint, go to **Configuration** and then **Blueprints**. Find the blueprint that you want to use and click on "Create Automation".
This will open the automation editor with the blueprint selected. Give it a name and configure the blueprint and click on the blue button "Save Automation" in the bottom right.
Done! If you want to revisit the configuration values, you can find it by going to **Configuration** and then **Automations**.
## Importing blueprints
Home Assistant can import blueprints from the Home Assistant forums, GitHub and GitHub gists.
To do this, first [find a blueprint you want to import][blueprint-forums]. If you just want to practice importing, you can use this URL:
```text
https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml
```
Go to **Configuration** and then **Blueprints**. Click on the blue "Import Blueprint" button in the bottom right.
A new dialog will pop-up asking you for the URL. Enter the URL and click on "preview blueprint".
This will load the blueprint and show a preview in the import dialog. You can change the name and finish the import.
The blueprint can now be used for creating automations.
## Finding new blueprints
The Home Assistant Community forums have a specific tag for blueprints. This tag is used to collect all blueprints.
[Visit the Home Assistant forums][blueprint-forums]
[blueprint-forums]: /get-blueprints

View File

@ -0,0 +1,145 @@
---
title: "Automation YAML"
description: "How to use the automation integration with YAML."
---
Automations are created in Home Assistant via the UI, but are stored in a YAML format. If you want to edit the YAML of an automation, go to edit the automation, click on the menu button in the top right and turn on YAML mode.
The UI will write your automations to `automations.yaml`. This file is managed by the UI and should not be edited manually.
It is also possible to write your automations directly inside `configuration.yaml` or other YAML files. You can do this by adding a labeled `automation` block to your `configuration.yaml`:
```yaml
# The configuration required for the UI to work
automation: !include automations.yaml
# Labeled automation block
automation kitchen:
- trigger:
platform: ...
```
You can add as many labeled `automation` blocks as you want.
## YAML Example
Example of a YAML based automation that you can add to `configuration.yaml`.
{% raw %}
```yaml
# Example of entry in configuration.yaml
automation my_lights:
# Turns on lights 1 hour before sunset if people are home
# and if people get home between 16:00-23:00
- alias: 'Rule 1 Light on in the evening'
trigger:
# Prefix the first line of each trigger configuration
# with a '-' to enter multiple
- platform: sun
event: sunset
offset: '-01:00:00'
- platform: state
entity_id: all
to: 'home'
condition:
# Prefix the first line of each condition configuration
# with a '-'' to enter multiple
- condition: state
entity_id: all
state: 'home'
- condition: time
after: '16:00:00'
before: '23:00:00'
action:
# With a single service call, we don't need a '-' before service - though you can if you want to
service: homeassistant.turn_on
entity_id: group.living_room
# Turn off lights when everybody leaves the house
- alias: 'Rule 2 - Away Mode'
trigger:
platform: state
entity_id: all
to: 'not_home'
action:
service: light.turn_off
entity_id: all
# Notify when Paulus leaves the house in the evening
- alias: 'Leave Home notification'
trigger:
platform: zone
event: leave
zone: zone.home
entity_id: device_tracker.paulus
condition:
condition: time
after: '20:00'
action:
service: notify.notify
data:
message: 'Paulus left the house'
# Send a notification via Pushover with the event of a Xiaomi cube. Custom event from the Xiaomi component.
- alias: 'Xiaomi Cube Action'
initial_state: false
trigger:
platform: event
event_type: cube_action
event_data:
entity_id: binary_sensor.cube_158d000103a3de
action:
service: notify.pushover
data:
title: "Cube event detected"
message: "Cube has triggered this event: {{ trigger.event }}"
```
{% endraw %}
## Extra options
When writing automations directly in YAML, you will have access to advanced options that are not available in the user interface.
### Automation initial state
At startup, automations by default restore their last state of when Home Assistant ran. This can be controlled with the `initial_state` option. Set it to `false` or `true` to force initial state to be off or on.
```yaml
automation:
- alias: Automation Name
initial_state: false
trigger:
- platform: ...
```
## Migrating your YAML automations to `automations.yaml`
If you want to migrate your manual automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over, you'll have to add an `id`. This can be any string as long as it's unique.
```yaml
# Example automations.yaml entry. Note, automations.yaml is always a list!
- id: my_unique_id # <-- Required for editor to work, for automations created with the editor the id will be automatically generated.
alias: Hello world
trigger:
- platform: state
entity_id: sun.sun
from: below_horizon
to: above_horizon
condition:
- condition: numeric_state
entity_id: sensor.temperature
above: 17
below: 25
value_template: '{% raw %}{{ float(state.state) + 2 }}{% endraw %}'
action:
- service: light.turn_on
```
### Deleting Automations
When automations remain visible in the Home Assistant Dashboard, even after having deleted in the YAML file, you have to delete them in the UI.
To delete them completely, go to UI **Configuration** -> **Entities** and find the automation in the search field or by scrolling down.
Check the square box aside of the automation you wish to delete and from the top-right of your screen, select 'REMOVE SELECTED'.

View File

@ -0,0 +1,22 @@
---
title: "Creating blueprints"
description: "Documentation on how to get started creating blueprints."
---
<div class='note'>
If you're looking on how to use blueprints, see the [automation documentation](/docs/automation/using_blueprints/).
</div>
An automation blueprint is an automation configuration with certain parts marked as configurable. This allows users to create multiple automations based on the same blueprint, with each having its own configuration.
Imagine a blueprint that controls a light based on motion, that allows you to configure the motion sensor to trigger on, and the light to control. It is now possible to create two automations that each have their own configuration for this blueprint and that act completely independent, yet are based on the same automation configuration.
<div class='note'>
This is an advanced feature and requires knowledge of writing [automations in YAML](/docs/automation/yaml/).
</div>
### [Tutorial: Create a blueprint &raquo;](/docs/blueprint/tutorial/)

View File

@ -0,0 +1,183 @@
---
title: "Blueprint schema"
description: "The schema for a valid blueprint."
---
The configuration schema of a blueprint consists of 2 parts:
- The blueprint high-level metadata, like its name and a description and
the input the blueprint needs from the user.
- The schema of the thing the blueprint describes.
The first part is referred to as the blueprint schema and contains mainly the
blueprint's metadata. The second part depends on what the blueprint is for.
For example, in the case of creating a blueprint for an automation, the full
schema for an [automation](/docs/automation/yaml/) applies.
This page is mainly set up to describe the configuration schema of the
blueprint metadata. Try our [blueprint tutorial](/docs/blueprint/tutorial/)
in case you are interested in creating your first blueprint.
## The blueprint schema
The only requirement for a blueprint is a name. In its most basic form,
a blueprint would look like:
```yaml
blueprint:
name: Example blueprint
domain: automation
```
And this is already a valid blueprint. But typically, one would need
more. For example, user inputs or a description to describe the blueprint's
functionality.
This is the full blueprint schema:
{% configuration %}
name:
description: The name of the blueprint. Keep this short and descriptive.
type: string
required: true
description:
description: >
The description of the blueprint. While optional, this field is highly
recommended. For example, to describe what the blueprint does, or tell more
about the options inputs of the blueprint provide. New lines in this
description are displayed in the UI, so paragraphs are allowed.
type: string
required: false
domain:
description: >
The domain name this blueprint provides a blueprint for. Currently, only
`automation` is supported.
type: string
required: true
input:
description: >
A dictionary of defined user inputs. These are the input fields that the
consumer of your blueprint can provide using YAML definition, or via
a configuration form in the UI.
type: map
required: false
keys:
name:
description: The name of the input field.
type: string
required: false
description:
description: >
A short description of the input field. Keep this short and descriptive.
type: string
required: false
selector:
description: >
The [selector](/docs/blueprint/selectors/) to use for this input. A
selector defines how the input is displayed in the frontend UI.
type: selector
required: false
default:
description: >
The default value of this input, in case the input is not provided
by the user of this blueprint.
type: any
required: false
{% endconfiguration %}
## Blueprint inputs
As written in the above schema, a blueprint can accept one (or multiple)
inputs from the blueprint consumer.
These inputs can be of any type (string, boolean, list, dictionary), can have
a default value and also provide a [selector](/docs/blueprint/selectors/) that
ensures a matching input field in the user interface.
Each input field can be referred to, outside of the blueprint metadata, using
the `!input` custom tag.
The following example shows a minimal blueprint with a single input:
```yaml
blueprint:
name: Example blueprint
description: Example showing an input
input:
my_input:
name: Example input
```
In the above example, `my_input` is the identifier of the input, that can be
referred to later on using the `!input my_input` custom tag.
In this example, no `selector` was provided. In this case, if this blueprint
was used in the user interface, a text input field would be shown to the user.
A blueprint can have as many inputs as you like.
## Example blueprints
The [built-in blueprints][blueprint-built-in]
are great examples to get a bit of a feeling of how blueprints work.
Here is the built-in motion light automation blueprint:
```yaml
blueprint:
name: Motion-activated Light
description: Turn on a light when motion is detected.
domain: automation
input:
motion_entity:
name: Motion Sensor
selector:
entity:
domain: binary_sensor
device_class: motion
light_target:
name: Light
selector:
target:
entity:
domain: light
no_motion_wait:
name: Wait time
description: Time to leave the light on after last motion is detected.
default: 120
selector:
number:
min: 0
max: 3600
unit_of_measurement: seconds
# If motion is detected within the delay,
# we restart the script.
mode: restart
max_exceeded: silent
trigger:
platform: state
entity_id: !input motion_entity
from: "off"
to: "on"
action:
- service: light.turn_on
target: !input light_target
- wait_for_trigger:
platform: state
entity_id: !input motion_entity
from: "on"
to: "off"
- delay: !input no_motion_wait
- service: light.turn_off
target: !input light_target
```
Additional examples, provided by the community, can be found on the
[community forum][blueprint-forums].
[blueprint-built-in]: https://github.com/home-assistant/core/tree/dev/homeassistant/components/automation/blueprints
[blueprint-forums]: /get-blueprints

View File

@ -0,0 +1,492 @@
---
title: "Selectors"
description: "Documentation on available selectors."
---
Selectors can be used to specify what values are accepted for a blueprint
input. The selector also defines how the input is shown in the user interface.
Some selectors can, for example, show a toggle button to turn something
on or off, while another select can filter a list of devices to show
only devices that have motion-sensing capabilities.
Having the good selectors set on your blueprint automations inputs makes a
blueprint easier to use from the UI.
The following selectors are currently available:
- [Action selector](#action-selector)
- [Area selector](#area-selector)
- [Boolean selector](#boolean-selector)
- [Device selector](#device-selector)
- [Entity selector](#entity-selector)
- [Number selector](#number-selector)
- [Target selector](#target-selector)
- [Time selector](#time-selector)
If no selector is defined, a text input for a single line will be shown.
## Action selector
The action selector allows the user to input one or more sequences of actions.
On the user interface, the action part of the automation editor will be shown.
The value of the input will contain a list of actions to perform.
![Screenshot of an action selector](/images/blueprints/selector-action.png)
This selector does not have any other options; therefore, it only has its key.
```yaml
action:
```
## Area selector
The area selector shows an area finder that can pick a single area. The value
of the input will be the area ID of the user-selected area.
An area selector can filter the list of areas, based on properties of the devices
and entities that are assigned to those areas. For example, the areas list could
be limited to areas with entities provided by the [ZHA](/integration/zha)
integration.
In its most basic form, it doesn't require any options, which will show
all areas.
```yaml
area:
```
{% configuration area %}
device:
description: >
When device options are provided, the list of areas is filtered by areas
that at least provide one device that matches the given conditions.
type: map
keys:
integration:
description: >
Can be set to an integration domain. Limits the list of areas that
provide devices by the set integration domain, for example,
[`zha`](/integrations/zha).
type: string
required: false
manufacturer:
description: >
When set, it limits the list of areas that provide devices by the set
manufacturer name.
type: string
required: false
model:
description: >
When set, it limits the list of areas that provide devices that have
the set model.
type: string
required: false
entity:
description: >
When entity options are provided, the list of areas is filtered by areas
that at least provide one entity that matches the given conditions.
type: map
required: false
keys:
integration:
description: >
Can be set to an integration domain. Limits the list of areas that
provide entities by the set integration domain, for example,
[`zha`](/integrations/zha).
type: string
required: false
domain:
description: >
Limits the list of areas that provide entities of a certain domain,
for example, [`light`](/integrations/light) or
[`binary_sensor`](/integrations/binary_sensor).
type: string
required: false
device_class:
description: >
Limits the list of areas to areas that have entities with a certain
device class, for example, `motion` or `window`.
type: device_class
required: false
{% endconfiguration %}
### Example area selectors
An example area selector only shows areas that provide one or more lights
provided by the [ZHA](/integrations/zha) integration.
```yaml
area:
entity:
integration: zha
domain: light
```
Another example uses the area selector, which only shows areas that provide one
or more remote controls provided by the [deCONZ](/integrations/deconz)
integration.
```yaml
area:
device:
integration: deconz
manufacturer: IKEA of Sweden
model: TRADFRI remote control
```
## Boolean selector
The boolean selector shows a toggle that allows the user to turn on or off
the selected option. The input's value will contain the boolean value of that
toggle as a boolean value, being `true` or `false`.
![Screenshot of a boolean selector](/images/blueprints/selector-boolean.png)
The boolean selector can be incredibly useful for adding feature switches
to, for example, blueprints.
This selector does not have any other options; therefore, it only has its key.
```yaml
boolean:
```
## Device selector
The device selector shows a device finder that can pick a single device.
The value of the input will contain the device ID of the user-selected device.
A device selector can filter the list of devices, based on things like the
manufacturer or model of the device, the entities the device provides or based
on the domain that provided the device.
![Screenshot of an device selector](/images/blueprints/selector-device.png)
In its most basic form, it doesn't require any options, which will show
all devices.
```yaml
device:
```
{% configuration device %}
integration:
description: >
Can be set to an integration domain. Limits the list of devices to devices
provided by the set integration domain.
type: string
required: false
manufacturer:
description: >
When set, it limits the list of devices to devices provided by the set
manufacturer name.
type: string
required: false
model:
description: >
When set, it limits the list of devices to devices that have the set model.
type: string
required: false
entity:
description: >
When entity options are provided, the list of devices is filtered by devices
that at least provide one entity that matches the given conditions.
type: map
required: false
keys:
integration:
description: >
Can be set to an integration domain. Limits the list of devices that
provide entities by the set integration domain, for example,
[`zha`](/integrations/zha).
type: string
required: false
domain:
description: >
Limits the list of devices that provide entities of a certain domain,
for example, [`light`](/integrations/light)
or [`binary_sensor`](/integrations/binary_sensor).
type: string
required: false
device_class:
description: >
Limits the list of entities to entities that have a certain device
class, for example, `motion` or `window`.
type: device_class
required: false
{% endconfiguration %}
### Example device selector
An example entity selector that, will only show devices that are:
- Provided by the [deCONZ](/integration/deconz) integration.
- Are a Philips Hue Remote of Model RWL021.
- Provide a battery [sensor](/integration/sensor).
And this is what is looks like in YAML:
```yaml
device:
integration: deconz
manufacturer: Philips
model: RWL021
entity:
domain: sensor
device_class: battery
```
## Entity selector
The entity selector shows an entity finder that can pick a single entity.
The value of the input will contain the entity ID of user-selected entity.
An entity selector can filter the list of entities, based on things like the
class of the device, the domain of the entity or the domain that provided the
entity.
![Screenshot of an entity selector](/images/blueprints/selector-entity.png)
In its most basic form, it doesn't require any options, which will show
all entities.
```yaml
entity:
```
{% configuration entity %}
integration:
description: >
Can be set to an integration domain. Limits the list of entities to entities
provided by the set integration domain, for example,
[`zha`](/integrations/zha).
type: string
required: false
domain:
description: >
Limits the list of entities to entities of a certain domain, for example,
[`light`](/integrations/light) or
[`binary_sensor`](/integrations/binary_sensor).
type: string
required: false
device_class:
description: >
Limits the list of entities to entities that have a certain device class,
for example, `motion` or `window`.
type: device_class
required: false
{% endconfiguration %}
### Example entity selector
An example entity selector that, will only show entities that are:
- Provided by the [ZHA](/integration/zha) integration.
- From the [Binary Sensor](/integration/binary_sensor) domain.
- Have presented themselves as devices of a motion device class.
And this is what it looks like in YAML:
```yaml
entity:
integration: zha
domain: binary_sensor
device_class: motion
```
## Number selector
The number selector shows either a number input or a slider input, that allows
the user to specify a numeric value. The value of the input will contain
the select value.
![Screenshot of a number selector](/images/blueprints/selector-number.png)
On the user interface, the input can either be in a slider or number mode.
Both modes limit the user input by a minimal and maximum value, and can
have a unit of measurement to go with it.
In its most basic form, it requires a minimal and maximum value:
```yaml
number:
min: 0
max: 100
```
{% configuration number %}
min:
description: The minimal user-settable number value.
type: [integer, float]
required: true
max:
description: The maximum user-settable number value.
type: [integer, float]
required: true
step:
description: The step value of the number value.
type: [integer, float]
required: false
default: 1
unit_of_measurement:
description: Unit of measurement in which the number value is expressed in.
type: string
required: false
mode:
description: This can be either `box` or `slider` mode.
type: string
required: false
default: box
{% endconfiguration %}
### Example number selectors
An example number selector that allows a user a percentage, directly in a
regular number input box.
```yaml
number:
min: 0
max: 100
unit_of_measurement: "%"
```
A more visual variant of this example could be achieved using a slider.
This can be helpful for things like allowing the user to select a
brightness level of lights. Additionally, this example changes the brightness
in incremental steps of 10%.
```yaml
number:
min: 0
max: 100
step: 10
unit_of_measurement: "%"
mode: slider
```
## Target selector
The target selector is a rather special selector, allowing the user to selector
targeted entities, devices or areas for service calls. The value of
the input will contain a special target format, that is accepted by
service calls.
The selectable targets can be filtered, based on entity or device properties.
Areas are only selectable as a target, if some entities or devices match
those properties in those areas.
![Screenshot of a target selector](/images/blueprints/selector-target.png)
Its most basic form, doesn't require any options, which will allow the
user to target any entity, device or area available in the system.
```yaml
target:
```
{% configuration target %}
device:
description: >
When device options are provided, the targets are limited by devices
that at least match the given conditions.
type: map
keys:
integration:
description: >
Can be set to an integration domain. Limits the device targets that
are provided devices by the set integration domain, for example,
[`zha`](/integrations/zha).
type: string
required: false
manufacturer:
description: >
When set, it limits the targets to devices provided by the set
manufacturer name.
type: string
required: false
model:
description: When set, it limits the targets to devices by the set model.
type: string
required: false
entity:
description: >
When entity options are provided, the targets are limited by entities
that at least match the given conditions.
type: map
required: false
keys:
integration:
description: >
Can be set to an integration domain. Limits targets to entities
provided by the set integration domain, for example,
[`zha`](/integrations/zha).
type: string
required: false
domain:
description: >
Limits the targets to entities of a certain domain,
for example, [`light`](/integrations/light) or
[`binary_sensor`](/integrations/binary_sensor).
type: string
required: false
device_class:
description: >
Limits the targets to entities with a certain
device class, for example, `motion` or `window`.
type: device_class
required: false
{% endconfiguration %}
<div class='note'>
Targets are meant to be used with the `target` property of a service call in
a script sequence. For example:
```yaml
action:
- service: light.turn_on
target: !input lights
```
</div>
### Example target selectors
An example target selector that only shows targets that at least provide one
or more lights, provided by the [ZHA](/integrations/zha) integration.
```yaml
target:
entity:
integration: zha
domain: light
```
Another example using the target selector, which only shows targets that
provide one or more remote controls, provided by the
[deCONZ](/integrations/deconz) integration.
```yaml
target:
device:
integration: deconz
manufacturer: IKEA of Sweden
model: TRADFRI remote control
```
## Time selector
The time selector shows a time input that allows the user to specify a time
of the day. The value of the input will contain the time in 24-hour format,
for example, `23:59:59`.
![Screenshot of a time selector](/images/blueprints/selector-time.png)
This selector does not have any other options; therefore, it only has its key.
```yaml
time:
```

View File

@ -0,0 +1,229 @@
---
title: "Blueprint tutorial"
description: "Tutorial on creating a blueprint."
---
In this tutorial, we're going to create a blueprint that controls a light based on a motion sensor. We will do this by taking an existing automation and converting it to a blueprint.
For this tutorial, we use a simple automation. The process for converting a complex automation is not any different.
## Our automation
To create a blueprint, we first need to have a working automation. The automation we're going to use in this tutorial, which controls a light based on a motion sensor, looks like this:
{% raw %}
```yaml
trigger:
platform: state
entity_id: binary_sensor.motion_kitchen
action:
service: >
{% if trigger.to_state.state == "on" %}
light.turn_on
{% else %}
light.turn_off
{% endif %}
target:
entity_id: light.kitchen
```
{% endraw %}
## Create the blueprint file
Automation blueprints are YAML files (with the `.yaml` extension) and live in the `<config>/blueprints/automation/` folder. You can create as many subdirectories in this folder as you want.
To get started with our blueprint, we're going to copy the above automation YAML and save it in that directory with the name `motion_light_tutorial.yaml`.
## Add basic blueprint metadata
Home Assistant needs to know about the blueprint. This is achieved by adding a `blueprint:` section. It should contain the `domain` of the integration it is for (`automation`) and `name`, the name of your blueprint. Optionally, you can also include a `description` for your blueprint.
Add this to the top of the file:
```yaml
blueprint:
name: Motion Light Tutorial
description: Turn a light on based on detected motion
domain: automation
```
## Define the configurable parts as inputs
Now we have to decide what steps we want to make configurable. We want to make it as re-usable as possible, without losing its original intent of turning on a light-based on a motion sensor.
Configurable parts in blueprints are called inputs. To make the motion sensor entity configurable, we're replacing the entity ID with a custom YAML tag `!input`. This YAML tag has to be combined with the name of the input:
```yaml
trigger:
platform: state
entity_id: !input motion_sensor
```
For the light, we can offer some more flexibility. We want to allow the user to be able to define any device or area as the target. The `target` property in the service action can contain references to areas, devices and/or entities, so that's what we will use.
Inputs are not limited to strings. They can contain complex objects too. So in this case, we're going to mark the whole `target` as input:
{% raw %}
```yaml
action:
service: >
{% if trigger.to_state.state == "on" %}
light.turn_on
{% else %}
light.turn_off
{% endif %}
target: !input target_light
```
{% endraw %}
## Add the inputs to the metadata
All parts that are marked as inputs need to be added to the metadata. The minimum is that we add their names as used in the automation:
```yaml
blueprint:
name: Motion Light Tutorial
description: Turn a light on based on detected motion
domain: automation
input:
motion_sensor:
target_light:
```
## Use it via `configuration.yaml`
With the bare minimum metadata added, your blueprint is ready to use.
Open your `configuration.yaml` and add the following:
```yaml
automation tutorial:
use_blueprint:
path: motion_light_tutorial.yaml
input:
motion_sensor: binary_sensor.kitchen
target_light:
entity_id: light.kitchen
```
Reload automations and your new automation should popup. Because we configured the exact values as the original automation, they should work exactly the same.
## Adding user friendly names to the inputs
Blueprints are easier to use if it's easy to see what each field is used for. We can improve this experience by adding names and descriptions to our inputs:
```yaml
blueprint:
name: Motion Light Tutorial
domain: automation
input:
motion_sensor:
name: Motion Sensor
description: This sensor will be synchronized with the light.
target_light:
name: Lights
description: The lights to keep in sync.
```
## Describing the inputs
Our blueprint doesn't currently describe what the inputs should contain. Without this information, Home Assistant will offer the user an empty text box.
To instead allow Home Assistant to offer more assistance, we will use [selectors](/docs/blueprint/selectors/). Selectors describe a type and can be used to help the user pick a matching value.
The selector for the motion sensor entity should describe that we want entities from the binary sensor domain that have the device class `motion`.
The selector for the target light should describe that we want to target light entities.
```yaml
blueprint:
name: Motion Light Tutorial
domain: automation
input:
motion_sensor:
name: Motion Sensor
description: This sensor will be synchronized with the light.
selector:
entity:
domain: binary_sensor
device_class: motion
target_light:
name: Lights
description: The lights to keep in sync.
selector:
target:
entity:
domain: light
```
By limiting our blueprint to working with lights and motion sensors, we unlock a couple of benefits: the UI will be able to limit suggested values to lights and motion sensors instead of all devices. It will also allow the user to pick an area to control the lights in.
## The final blueprint
After we have added all the steps, our blueprint will look like this:
{% raw %}
```yaml
blueprint:
name: Motion Light Tutorial
description: Turn a light on based on detected motion
domain: automation
input:
motion_sensor:
name: Motion Sensor
description: This sensor will be synchronized with the light.
selector:
entity:
domain: binary_sensor
device_class: motion
target_light:
name: Lights
description: The lights to keep in sync.
selector:
target:
entity:
domain: light
trigger:
platform: state
entity_id: !input motion_sensor
action:
service: >
{% if trigger.to_state.state == "on" %}
light.turn_on
{% else %}
light.turn_off
{% endif %}
target: !input target_light
```
{% endraw %}
## Use it via the UI
To configure it via the UI, go to **Configuration** and then **Blueprints**. Find the "Motion Light Tutorial" blueprint and click on "Create Automation".
<div class='note'>
Don't forget to reload automations after you make changes to your blueprint to have the UI and the automation integration pick up the latest blueprint changes.
</div>
![Screenshot of the blueprint UI](/images/blueprints/tutorial-ui.png)
## Share the love
The final step is to share this blueprint with others. For this tutorial we're going to share it on GitHub Gists.
- Go to [GitHub Gists](https://gist.github.com/)
- Gist description: blueprint tutorial
- Filename including extension: `motion_light_tutorial.yaml`
- Content is the content of the blueprint file.
- Click the "Create Gist" button
You can now copy the URL of your new Gist and share it with other people. They can import it by going to **Configuration**, **Blueprints** and clicking on the blue "Import Blueprint" button.

View File

@ -22,6 +22,28 @@ service: homeassistant.turn_on
entity_id: group.living_room
```
### Targeting areas and devices
Instead of targeting an entity, you can also target an area or device. Or a combination of these.
This is done with the `target` key.
A `target` is a map thats contains atleast one of the following: `area_id`, `device_id`, `entity_id`.
Each of these can be a list.
When the service is called, the area's and devices will be resolved to entities.
```yaml
service: homeassistant.turn_on
target:
area_id: livingroom
device_id:
- ff22a1889a6149c5ab6327a8236ae704
- 52c050ca1a744e238ad94d170651f96b
entity_id:
- light.hallway
- light.landing
```
### Passing data to the service call
You can also specify other parameters beside the entity to target. For example, the light turn on service allows specifying the brightness.

View File

@ -85,17 +85,29 @@
<li>
<b>{% active_link /docs/automation/ Automation %}</b>
<ul>
<li>{% active_link /docs/automation/examples/ Examples %}</li>
<li>{% active_link /docs/automation/using_blueprints/ Using Automation Blueprints %}</li>
<li>{% active_link /docs/automation/basics/ Automation Basics %}</li>
<li>{% active_link /docs/automation/editor/ Editor %}</li>
<li>{% active_link /docs/automation/trigger/ Triggers %}</li>
<li>{% active_link /docs/automation/condition/ Conditions %}</li>
<li>{% active_link /docs/automation/action/ Actions %}</li>
<li>{% active_link /docs/automation/modes/ Run Modes %}</li>
<li>{% active_link /docs/automation/services/ Services %}</li>
<li>{% active_link /docs/automation/templating/ Templates %}</li>
<li>{% active_link /docs/automation/yaml/ YAML %}</li>
<li>
{% active_link /docs/automation/troubleshooting/ Troubleshooting %}
</li>
</ul>
</li>
<li>
<b>{% active_link /docs/blueprint/ Blueprints %}</b>
<ul>
<li>{% active_link /docs/blueprint/tutorial/ Tutorial %}</li>
<li>{% active_link /docs/blueprint/schema/ Schema %}</li>
<li>{% active_link /docs/blueprint/selectors/ Selectors %}</li>
</ul>
</li>
<li>
<b>{% active_link /docs/frontend/ Frontend %}</b>
<ul>

View File

@ -0,0 +1,98 @@
<div class="feature-cards">
<div class="card">
<div class="card-header">
<i class="icon-lightbulb"></i>
Works with over 1000 devices
</div>
<div class="card-content">
<p>
Home Assistant can integration with over a thousand different devices
and services.
</p>
<p>
Once started, Home Assistant will automatically scan your network for
known devices and allow you to easily set them up.
</p>
<a class="button" href="/integrations">EXPLORE INTEGRATIONS</a>
</div>
</div>
<div class="card">
<div class="card-header">
<i class="icon-gears"></i>
Powerful automations
</div>
<div class="card-content">
<p>
Once you have integrated all your devices at home, you can unleash Home
Assistants advanced automation engine to make your home work for you.
</p>
<ul>
<li>Turn on the light when the sun sets or when coming home</li>
<li>Alert you when you leave your garage door open.</li>
</ul>
<a class="button" href="/docs/automation">EXPLORE AUTOMATIONS</a>
</div>
</div>
<div class="card">
<div class="card-header">
<i class="icon-puzzle-piece"></i>
Extend your system with add-ons
</div>
<div class="card-content">
<p>
Home Assistant is not just limited to Home Assistant. Easily install
other applications that will help you manage your home.
</p>
<ul>
<li>Run AdGuard, a DNS-based ad blocker</li>
<li>Run third party automation engines like NodeRed</li>
<li>Turn Home Assistant Blue into a Spotify Connect target</li>
</ul>
<a class="button" href="/addons">EXPLORE ADD-ONS</a>
</div>
</div>
<div class="card">
<div class="card-header">
<i class="icon-shield"></i>
All your smart home data stays local
</div>
<div class="card-content">
<p>Home Assistant keeps your data local, not need for a cloud.</p>
<p>
Home Assistant communicates with your devices locally, and will fallback
to pulling in data from the cloud if there is no other option. No data
is stored in the cloud, and everything is processed locally.
</p>
</div>
</div>
<div class="card">
<div class="card-header">
<i class="icon-mobile-phone"></i>
Companion Mobile Apps
</div>
<div class="card-content">
<p>
Use the official Home Assistant apps, a convenient companion to quickly
control your devices and be notified when things happen in your home,
even on your wrist using the Apple Watch.
</p>
<p>
The apps can also be used to send your location home to use presence
detection as part of your automations. Data is sent directly to your
home, no access by third-parties.
</p>
<a
class="button"
href="https://companion.home-assistant.io/"
target="_blank"
>
DOWNLOAD APPS
</a>
</div>
</div>
</div>

View File

@ -36,7 +36,7 @@ There is currently support for the following device types within Home Assistant:
## Configuration
To use Abode devices in your installation, add your Abode account from the integrations page. Two-factor authentication must be disabled on your Abode account. Alternatively, Abode can be configured by adding the following `abode` section to your `configuration.yaml` file:
To use Abode devices in your installation, add your Abode account from the integrations page. Alternatively, Abode can be configured by adding the following `abode` section to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry

View File

@ -349,10 +349,13 @@ The supported locales are:
- `en-US`
- `es-ES`
- `es-MX`
- `es-US`
- `fr-CA`
- `fr-FR`
- `hi-IN`
- `it-IT`
- `ja-JP`
- `pt-BR`
See [List of Capability Interfaces and Supported Locales][alexa-supported-locales].

View File

@ -10,173 +10,73 @@ ha_release: 0.49
ha_domain: apple_tv
---
The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation). See the [remote platform](/integrations/apple_tv#remote) if you want to send remote control buttons, e.g., arrow keys.
The Apple TV integration allows you to control an Apple TV (any generation). See the
[remote platform](/integrations/apple_tv#remote) if you want to send remote control buttons,
e.g., arrow keys.
There is currently support for the following device types within Home Assistant:
- Media Player
- [Remote](#remote)
<div class='note'>
Currently, you must have Home Sharing enabled for this to work. Support for pairing Home Assistant with your device will be supported in a later release.
</div>
## Configuration
To use this component, you must first install some system libraries and a compiler. For Debian or a similar system, this should be enough:
Menu: *Configuration* > *Integrations*
```shell
sudo apt-get install build-essential libssl-dev libffi-dev python-dev
```
Press on **Apple TV** and configure the integration:
If you want to discover new devices automatically, just make sure you have `discovery:` in your `configuration.yaml` file. To manually add one or more Apple TVs to your installation, add the following to your `configuration.yaml` file:
* Enter either an IP address or a device name and follow the next few steps
```yaml
# Example configuration.yaml entry
apple_tv:
- host: IP_1
login_id: LOGIN_ID_1
name: NAME_1
start_off: START_OFF_1
credentials: CREDENTIALS_1
- host: IP_2
login_id: LOGIN_ID_2
name: NAME_2
start_off: START_OFF_2
credentials: CREDENTIALS_2
```
## FAQ
{% configuration %}
host:
description: The IP-address of the device.
required: true
type: string
login_id:
description: An identifier used to login to the device, see below.
required: true
type: string
name:
description: The name of the device used in the frontend.
required: false
type: string
start_off:
description: Set to true if the device should start in fake standby.
required: false
type: boolean
default: false
credentials:
description: Credentials used for AirPlay playback.
required: false
type: string
{% endconfiguration %}
### My Apple TV does not turn on/off when I press on/off in the frontend
In order to connect to the device, you need a *login id*. The easiest way to obtain this identifier is to use the `apple_tv_scan` service (described below). Additional information about `start_off` and `credentials` can also be found under the guides section.
That is correct; it only toggles the power state in Home Assistant. Turning the device on or off is
currently not supported. However, support for this is in development so that it will be added at some
point in the future
## Guides
### Is it possible to see if a device is on without interacting with it
### Scanning for devices
No
Make sure Home Sharing is enabled on the Apple TV.
### When adding a new device, a PIN code is requested, but none is shown on the screen
To scan for devices and determine the `login_id`, open the developer tools by selecting the hammer icon in the sidebar. Once in the developer tools select **services**.
This can happen when pairing the AirPlay protocol in case the access settings are wrong. On your
Apple TV, navigate to Settings, find the AirPlay menu and make sure that the access setting
is set to "Everyone on the same network" and try again.
<img src='/images/screenshots/developer-tools.png' />
### The buttons (play, pause, etc.) does not work
Select `apple_tv` as domain and `apple_tv_scan` as service then press the button:
The tvOS apps themselves decide what commands they support and when they support
them. Likely, the app you are using does not support the action you are trying
to perform. Before writing an issue about this, verify if the same action is possible with the
Remote app in iOS. If that is the case, please write a bug in
[pyatv](https://github.com/postlund/pyatv/issues/new?assignees=&labels=bug&template=bug_report.md&title=)
and include logs (see Debugging below).
<img src='/images/integrations/apple_tv/scan_start.jpg' />
### I'm trying to play a stream via AirPlay, but it doesn't work
Scanning will be done for three seconds and notification will be shown in the state view with all found devices:
<img src='/images/integrations/apple_tv/scan_result.jpg' />
Alternatively, you may use the application ``atvremote``. Install it with ``pip3 install --upgrade pyatv`` in your Home Assistant environment (note: do *not* use sudo). Then run ``atvremote scan`` to scan for all devices (try again if a device is missing):
```bash
$ atvremote scan
Found Apple TVs:
- Apple TV at 10.0.10.22 (login id: 00000000-1234-5678-9012-345678901234)
Note: You must use 'pair' with devices that have home sharing disabled
```
Just copy and paste the `login_id` from the device you want to add. For more details about `atvremote`, see: [this page](https://postlund.github.io/pyatv).
### Setting up device authentication
If you, when playing media with `play_url`, get the following error message:
“This AirPlay connection requires iOS 7.1 or later, macOS 10.10 or later, or iTunes 11.2 or later.”
then device authentication is required, open the developer tools by selecting the hammer icon in the sidebar. Once in the developer tools select **services**.
<img src='/images/screenshots/developer-tools.png' />
Select `apple_tv` as domain, `apple_tv_authenticate` as service and enter `{"entity_id": "XXX"}` into "Service Data", but replace XXX with the entity id of your device (e.g., `media_player.apple_tv`). Press the button and hopefully you are presented with an input dialog asking for a pin code:
<img src='/images/integrations/apple_tv/auth_start.jpg' />
If no dialog appears, go back to the states view and display it from there (press `CONFIGURE` as displayed in the image):
<img src='/images/integrations/apple_tv/auth_pin.jpg' />
A PIN code should now be visible on your TV, just enter it into the dialog and press "Confirm". You should see if it succeeded in the state view. Copy the credentials and insert it into your configuration (make sure you copy everything, it should be 81 characters) after ``credentials:`` with no line-break:
```yaml
# Example configuration.yaml entry
apple_tv:
- host: 10.0.0.20
login_id: 00000000-1234-5678-9012-345678901234
credentials: 1B8C387DDB59BDF6:CF5ABB6A2C070688F5926ADB7C010F6DF847252C15F9BDB6DA3E09D6591E90E5
```
Restart Home Assistant, and you should now be able to use `play_url` as before.
### My Apple TV turns on when I restart Home Assistant
The Apple TV will automatically turn on if a request is sent to it, e.g., if a button is pressed, something is streamed to it via AirPlay or if current state (currently playing) is accessed. This is how Apple has designed it, and it will cause problems if you are using HDMI-CEC. Every time Home Assistant is started, a new request is sent to the device to figure out what is currently playing. When using CEC, this will wake up your TV and other devices you have configured.
So, if your TV is randomly turning on, this is probably the reason. As stated, this is by design, and there is no real fix for it. There's also no known way to turn off the Apple TV via the protocol used for communication. You have the following options:
- Do not use this platform
- Disable HDMI-CEC on your Apple TV
- Use "fake standby"
The first two points are quite obvious. Fake standby is a concept implemented in this platform that disables all requests to the device and makes it appear as being "off" in the web interface. This will make sure that the device is not woken up, but it will of course not show any information or allow you to control it. It is however easy to turn it on (or off) in the web interface or to use an automation with `turn_on`. To make it more useful, you can write automations that turn it on or off depending on some other device, like the input source on your receiver.
To put a device into fake standby when starting Home Assistant, add `start_off: true` to your configuration.
<div class='note warning'>
Turning the device on/off in the user interface will *not* turn the physical device on/off according to the description above.
</div>
## Services
### Service `apple_tv_authenticate`
To play media on an Apple TV with device authentication enabled (e.g., ATV4 with tvOS 10.2+), Home Assistant must be properly authenticated. This method starts the process and presents the credentials needed for playback as a persistent notification. Please see guide above for usage.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------ |
| `entity_id` | yes | String or list of strings that point at `entity_id`s of Apple TVs. |
### Service `apple_tv_scan`
Scans the local network for Apple TVs. All found devices are presented as a persistent notification.
The Apple TV is quite picky when it comes to which formats it plays. The best bet is MP4. If it doesn't
work, it's likely because of the media format.
## Remote
The `apple_tv` remote platform allows you to send remote control buttons to an Apple TV. It is automatically setup when an Apple TV is configured.
The `apple_tv` remote platform allows you to send remote control buttons to an Apple TV. It is
automatically set up when an Apple TV is configured.
At the moment, the following buttons are supported:
At the moment, the following buttons are available (but not necessarily supported by all devices):
- up
- down
- left
- right
- menu
- top_menu
- select
- `up`
- `down`
- `left`
- `right`
- `menu`
- `top_menu`
- `select`
- `volume_up`
- `volume_down`
- `home`
- `home_hold`
A typical service call for press several buttons looks like this.
@ -190,3 +90,18 @@ data:
- menu
- select
```
## Debugging
If you have any problems and intend to write an issue, make sure you have the
relevant logs included. For this integration, you can enable them like this:
```yaml
logger:
logs:
pyatv: debug
homeassistant.components.apple_tv: debug
```
By providing logs directly when creating the issue, you will likely get help
much faster.

View File

@ -16,31 +16,18 @@ You can check the attributes of the sensor to see your exact forecast.
## Configuration
To add the aurora binary sensor to your installation, add the following to your `configuration.yaml` file:
To add the aurora binary sensor to your installation, search for the Aurora integration through the Configuration -> Integrations menu.
```yaml
# Example configuration.yaml entry
binary_sensor:
- platform: aurora
```
Enter a name for your Aurora location as well as the longitude and latitude of the location (default to your Home Assistant location).
{% configuration %}
forecast_threshold:
description: Provide your own threshold number above which the sensor will trigger.
required: false
type: integer
default: 75
name:
description: The name of the sensor.
required: false
type: string
default: Aurora Visibility
{% endconfiguration %}
Click Submit to add the integration to your environment.
## Full example
You can configure multiple locations by adding the integration multiple times.
```yaml
binary_sensor:
- platform: aurora
forecast_threshold: 50
```
## Options
Once installed you can adjust the threshold for this location by clicking on the Options link on the integration.
## Sensors
The integration will add a single binary sensor for each location you configure which will be in the state on when there is a forecast probability of Aurora viewing above your threshold and off when it is below your selected threshold.

View File

@ -11,112 +11,4 @@ ha_iot_class:
ha_domain: automation
---
Please see [Automating Home Assistant](/docs/automation/) for in-depth
documentation on how to use the automation integration.
<p class='img'>
<img src='/images/screenshots/automation-switches.png' />
</p>
## Configuration
This integration is by default enabled, unless you've disabled or removed the [`default_config:`](https://www.home-assistant.io/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually:
```yaml
# Example configuration.yaml entry
automation:
```
### Automation initial state
When you create a new automation, it will be enabled unless you explicitly add `initial_state: false` to it or turn it off manually via UI/another automation/developer tools. In case automations need to be always enabled or disabled when Home Assistant starts, then you can set the `initial_state` in your automations. Otherwise, the previous state will be restored.
Please note that if for some reason Home Assistant cannot restore the previous state, it will result in the automation being enabled.
```yaml
automation:
- alias: Automation Name
initial_state: false
trigger:
...
```
### Automation Modes
The automation's `mode` configuration option controls what happens when the automation is triggered while the actions are still running from a previous trigger.
Mode | Description
-|-
`single` | (Default) Do not start a new run. Issue a warning.
`restart` | Start a new run after first stopping previous run.
`queued` | Start a new run after all previous runs complete. Runs are guaranteed to execute in the order they were queued.
`parallel` | Start a new, independent run in parallel with previous runs.
<p class='img'>
<img src='/images/integrations/script/script_modes.jpg'>
</p>
For both `queued` and `parallel` modes, configuration option `max` controls the maximum
number of runs that can be executing and/or queued up at a time. The default is 10.
When `max` is exceeded (which is effectively 1 for `single` mode) a log message will be emitted to indicate this has happened. Configuration option `max_exceeded` controls the severity level of that log message. See [Log Levels](/integrations/logger/#log-levels) for a list of valid options. Or `silent` may be specified to suppress the message from being emitted. The default is `warning`.
#### Example Setting Automation Mode
```yaml
automation:
- trigger:
- ...
mode: queued
max: 25
action:
- ...
```
### Deleting Automations
When automations remain visible in the Home Assistant Dashboard, even after having deleted in the YAML file, you have to delete them in the UI.
To delete them completely, go to UI **Configuration** -> **Entities** and find the automation in the search field or by scrolling down.
Check the square box aside of the automation you wish to delete and from the top-right of your screen, select 'REMOVE SELECTED'.
## Services
### `automation.turn_on`
This service enables the automation's triggers.
Service data attribute | Optional | Description
-|-|-
`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted.
### `automation.turn_off`
This service disables the automation's triggers, and optionally stops any currently active actions.
Service data attribute | Optional | Description
-|-|-
`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted.
`stop_actions` | yes | Stop any currently active actions (defaults to true).
### `automation.toggle`
This service enables the automation's triggers if they were disabled, or disables the automation's triggers, and stops any currently active actions, if the triggers were enabled.
Service data attribute | Optional | Description
-|-|-
`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted.
### `automation.reload`
This service reloads all automations, stopping any currently active actions in all of them.
### `automation.trigger`
This service will trigger the action of an automation. By default it bypasses any conditions, though that can be changed via the `skip_condition` attribute.
Service data attribute | Optional | Description
-|-|-
`entity_id` | no | Entity ID of automation to trigger. Can be a list. `none` or `all` are also accepted.
`skip_condition` | yes | Whether or not the condition will be skipped (defaults to true).
<script>document.location.href = '/docs/automation/';</script>

View File

@ -83,11 +83,11 @@ sensors:
required: true
type: template
delay_on:
description: The amount of time the template state must be ***met*** before this sensor will switch to `on`.
description: The amount of time the template state must be ***met*** before this sensor will switch to `on`. This can also be a template.
required: false
type: time
delay_off:
description: The amount of time the template state must be ***not met*** before this sensor will switch to `off`.
description: The amount of time the template state must be ***not met*** before this sensor will switch to `off`. This can also be a template.
required: false
type: time
{% endconfiguration %}

View File

@ -0,0 +1,14 @@
---
title: Blueprints
description: Instructions on how to use Automation Blueprints with Home Assistant.
ha_category:
- Automation
ha_release: 2020.12
ha_quality_scale: internal
ha_codeowners:
- '@home-assistant/core'
ha_iot_class:
ha_domain: blueprint
---
<script>document.location.href = '/docs/automation/using_blueprints/';</script>

View File

@ -20,7 +20,7 @@ The Broadlink integration allows you to control and monitor Broadlink universal
- Sensors: `e-Sensor`
- Smart Plugs: `SP mini`, `SP mini+`, `SP mini 3`, `SP1`, `SP2`, `SP2-CL`, `SP2-UK/BR/IN`, `SP3`, `SP3-EU`, `SP3S-EU`, `SP3S-US`, `SP4L-EU` and `SP4M-US`
- Universal Remotes: `RM mini`, `RM mini 3`, `RM pro`, `RM pro+`, `RM plus`, `RM4 mini`, `RM4 pro` and `RM4C mini`
- Wi-Fi Controlled Switches: `SC1`
- Wi-Fi Controlled Switches: `BG1`, `SC1`
## Configuration
@ -40,34 +40,67 @@ The entities are divided into three subdomains:
## Remote
The `remote` entities allow you to control Broadlink universal remotes. You can learn IR codes, send the codes you have learned and send RF codes (use the base64 functionality). These entities are created automatically when you configure a device that has IR/RF capabilities.
The `remote` entities allow you to learn and send codes with universal remotes. They are created automatically when you configure devices with IR/RF capabilities.
### Learning IR codes
### Learning commands
Use the `remote.learn_command` service to learn IR codes.
Use `remote.learn_command` to learn IR and RF codes. These codes are grouped by device and stored as commands in the [storage folder](#Learned%20codes%20storage%20location). They can be sent with the `remote.send_command` service later.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------ |
| `entity_id` | no | ID of the remote. |
| `device` | no | Name of the device to be controlled. |
| `command` | no | Names of the commands to be learned. |
| `alternative` | yes | Are they toggle commands? |
Example 1: Learn a single command
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------- |
| `entity_id` | no | ID of the remote. |
| `device` | no | Name of the device to be controlled. |
| `command` | no | Names of the commands to be learned. |
| `command_type` | yes | Command type. `ir` (default) or `rf`. |
| `alternative` | yes | Toggle command indicator. |
#### Learning IR codes
To learn IR codes, call `remote.learn_command` with the device name and command to be learned:
```yaml
# Example configuration.yaml entry
script:
learn_mute_tv:
learn_tv_power:
sequence:
- service: remote.learn_command
data:
entity_id: remote.bedroom
device: television
command: ok
command: power
```
Example 2: Learn a sequence of commands
When the LED blinks, point the remote at the Broadlink device and press the button you want to learn.
After this, you can call `remote.send_command` with the same data to send the code. You can also access the code in the storage folder to build a custom IR/RF switch or send it with the prefix `b64:`.
#### Learning RF codes
Learning RF codes takes place in two steps. First call `remote.learn_command` with the `command_type: rf` option:
```yaml
# Example configuration.yaml entry
script:
learn_car_unlock:
sequence:
- service: remote.learn_command
data:
entity_id: remote.garage
device: car
command: unlock
command_type: rf
```
When the LED blinks for the first time, press and hold the button to sweep the frequency. Then wait for the LED to blink again and press the button a second time to capture the code.
The codes will be stored in the same way as the IR codes. You don't need to specify `command_type` to send them because this information is stored in the first byte of the code.
_Tip:_ Click Notifications in the sidebar after calling the service and follow the instructions to make sure you are pressing the button at the right time.
#### Learning a sequence of commands
In order to streamline the learning process, you may want to provide a list of commands to be learned sequentially:
```yaml
# Example configuration.yaml entry
@ -85,9 +118,15 @@ script:
- volume down
```
Example 3: Learn a toggle command
After calling this service, you will be prompted to press the buttons in the same order as provided. Check the notifications to stay on track and make sure you are pressing the right button at the right time.
The `alternative` flag is useful for capturing commands in which the same button is used for more than one purpose, such as the power button, which can turn the television on and off.
#### Learning an alternative code
Some protocols require a toggle bit to distinguish one button press from another. In such cases, learning an alternative code will significantly increase the response rate of the device.
The toggle bit is common when a button is used for multiple purposes, such as the power button, which can turn the television on and off, and the volume button, which can be used with a short press or a long press.
If the code works sometimes, and sometimes it doesn't, you can try to relearn it with the `alternative: true` option:
```yaml
# Example configuration.yaml entry
@ -102,15 +141,15 @@ script:
alternative: true
```
In the above example, two codes will be captured for the power command, and they will be sent alternately each time this command is called.
When the LED blinks for the first time, press the button you want to learn. Then wait for the LED to blink again and press the same button. By doing so, two different codes will be learned for the same command, and they will be sent alternately at each call.
#### Learned codes storage location
The learned codes are stored in the `/configuration/.storage` folder in a file called `broadlink_remote_xxxxxxxxxxx_codes.json`. You can open this file with a text editor and copy the codes to set up a custom switch, but beware: the files in the .storage folder _should never be edited manually_.
The learned codes are stored in `/configuration/.storage/` in a JSON file called `broadlink_remote_MACADDRESS_codes`. You can open this file with a text editor and copy the codes to set up [custom IR/RF switches](#Setting%20up%20custom%20IR/RF%20switches) or to send them as [base64 codes](#Sending%20a%20base64%20code), but beware: the files in the .storage folder _should never be edited manually_.
### Sending IR/RF codes
### Sending commands
Use the `remote.send_command` service to send IR/RF codes.
After learning IR and RF codes with the `remote.learn_command` service, you can use `remote.send_command` to send them. You can also use this service to send base64 codes taken from elsewhere.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------------- |
@ -120,21 +159,25 @@ Use the `remote.send_command` service to send IR/RF codes.
| `num_repeats` | yes | Number of times to repeat the commands. |
| `delay_secs` | yes | Interval in seconds between one send and another. |
Example 1: Send a single command
#### Sending a command
To send a command that you've learned, call `remote.send_command` with the device name and the command to be sent:
```yaml
# Example configuration.yaml entry
script:
mute_tv:
tv_power:
sequence:
- service: remote.send_command
data:
entity_id: remote.bedroom
device: television
command: mute
command: power
```
Example 2: Send a command repeatedly
#### Sending a command repeatedly
Use `num_repeats:` to send the same command multiple times:
```yaml
# Example configuration.yaml entry
@ -149,7 +192,9 @@ script:
num_repeats: 20
```
Example 3: Send a sequence of commands
#### Sending a sequence of commands
You can provide a list of commands to be sent sequentially:
```yaml
# Example configuration.yaml entry
@ -165,7 +210,9 @@ script:
- turn off display
```
Example 4: Send a single base64 code
#### Sending a base64 code
Sometimes you may want to send a base64 code obtained elsewhere. Use the `b64:` prefix for this:
```yaml
# Example configuration.yaml entry
@ -178,7 +225,9 @@ script:
command: b64:JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=
```
Example 5: Send a sequence of base64 codes
#### Sending a sequence of base64 codes
You can send a sequence of base64 codes just like normal commands:
```yaml
# Example configuration.yaml entry
@ -193,7 +242,9 @@ script:
- b64:JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA=
```
Example 6: Mix commands and base64 codes
#### Mixing commands and base64 codes
You can mix commands and base64 codes:
```yaml
# Example configuration.yaml entry

View File

@ -30,9 +30,8 @@ Menu: **Configuration** -> **Integrations**.
Click on the `+` sign to add an integration and click on **BSBLan**.
Fill in the IP address of the device in your network and, if needed,
the port number. The default value should be 80.
For authentication now only passkey is supported.
Username and password are not supported yet. This will be supported in the next release.
the port number. The default value should be `80`.
For authentication passkey is supported and also HTTP authentication with username and password.
After completing the configuration flow, the BSBLan Climate integration will be
available.
@ -45,4 +44,5 @@ To see a more detailed listing of the reported systems which are successfully us
- [`Elco`](https://1coderookie.github.io/BSB-LPB-LAN_EN/chap03.html#312-elco)
- [`Other Manufacturers (e.g. Fujitsu, Atlantic, Weishaupt)`](https://1coderookie.github.io/BSB-LPB-LAN_EN/chap03.html#313-other-manufacturers)
The integration is tested with firmware the stable version `v0.43`.
The integration is tested with the stable firmware version `1.00`. A newer firmware versions will not work, because the parameters are changed of the specific info that is needed.
Please use the latest release. [release 1.0](https://github.com/fredlcore/bsb_lan/releases/tag/v1.0)

View File

@ -12,7 +12,7 @@ ha_codeowners:
ha_domain: cert_expiry
---
The `cert_expiry` integration fetches the certificate from a configured host and displays its expiration in both timestamp and days-to-expiry sensors.
The `cert_expiry` integration fetches the certificate from a configured host and displays its expiration in a timestamp sensor.
## Configuration

View File

@ -30,6 +30,7 @@ Available demo platforms:
- [Mailbox](/integrations/mailbox/) (`mailbox`)
- [Media Player](/integrations/media_player/) (`media_player`)
- [Notification](/integrations/notify/) (`notify`)
- [Number](/integrations/number/) (`number`)
- [Remote](/integrations/remote/) (`remote`)
- [Sensor](/integrations/sensor/) (`sensor`)
- [Switch](/integrations/switch/) (`switch`)

View File

@ -21,6 +21,7 @@ Compatible transceivers:
Tested smart meters:
- APATOR Norax 3D (enable InF Mode as described in manual to retrieve full data)
- Iskraemeco MT175 (ISKRA MT175-D2A51-V22-K0t)
## Configuration
@ -43,3 +44,11 @@ serial_port:
required: true
type: string
{% endconfiguration %}
### ser2net
To use this integration with a remote transceiver you could use [ser2net](https://linux.die.net/man/8/ser2net).
Example `ser2net.conf` configuration file:
> 2001:raw:0:/dev/ttyUSB0:9600 8DATABITS NONE 1STOPBIT

View File

@ -0,0 +1,224 @@
---
title: FireServiceRota
description: Instructions on how to configure the FireServiceRota integration for Home Assistant.
ha_category:
- Binary Sensor
- Sensor
- Switch
ha_iot_class: Cloud Polling
ha_release: 2020.12
ha_codeowners:
- '@cyberjunky'
ha_config_flow: true
ha_domain: fireservicerota
---
FireServiceRota is a powerful and flexible availability, scheduling and dispatching system for firefighters.
It's the international brand of the Dutch [BrandweerRooster](https://www.brandweerrooster.nl), which is in use by more than 200 fire stations in The Netherlands.
The FireServiceRota integration provides you real-time information about incidents (emergency calls) from your local fire station and the ability to send a response depending on your duty schedule.
You will need a FireServiceRota or BrandweerRooster account.
<div class='note'>
A word of caution: Do not solely rely on this integration for your emergency calls!
</div>
This integration provides the following platforms:
- Sensor: Incoming emergency calls. Metadata contains _among other data_ the location of the incident and a text-to-speech URL. The integration uses a WebSocket client connection with the service to ensure a minimum delay.
- Binary Sensor: Your current duty status (as scheduled via the FireServiceRota mobile app and/or website).
- Switch: Enabled for 30 minutes after an emergency call. on represents a confirmed response. Use this to automate your emergency call response and save valuable seconds.
On how to write automations using these platform read the 'Advanced Configuration' section below.
## Configuration
1. From Home Assistant, navigate to Configuration then Integrations. Click the plus icon and type/select FireServiceRota.
1. Choose your platform `BrandweerRooster` or `FireServiceRota`.
1. Enter your login credentials.
1. Click the Save button.
## Entities
The following entity types are created:
### Incidents Sensor
This is the main entity of the integration containing the incident message as it's `value`, it has several attributes which are described below.
| Attribute | Description |
| --------- | ----------- |
| `trigger` | Type of trigger, `new` or `update`.|
| `state` | The state of the incident. |
| `created_at` | Date and time when incident was created.|
| `message_to_speech_url` | The URL of the mp3 file containing the spoken text of the incident.|
| `prio` | Priority of the incident, `a1`, `a2`, `b1` or `b2`.|
| `type` | Type of incident, e.g. `incident_alert`.|
| `responder_mode` | Modes of response, e.g. `available_in_schedule_is_acknowledgment`.|
| `can_respond_until` | Date and time until response is accepted.|
| `latitude` | The Latitude of the incident.|
| `longitude` | The Longitude of the incident.|
| `address_type` | Type of address, e.g. `home`.|
| `formatted_address` | Address in string format.|
### Duty Binary Sensor
This entity reflects the duty you have scheduled, the value can be `on` = on duty, `off` = no duty. When you have no duty the response switch is disabled which means you cannot respond to a call.
| Attribute | Description |
| --------- | ----------- |
| `start_time` | Start date and time of duty schedule.|
| `end_time` | End date and time of duty schedule.|
| `available` | `true` or `false`.|
| `active` | `true` or `false`.|
| `assigned_function_ids` | Function id's, e.g. `540`.|
| `skill_ids` | Skill id's, e.g. `6, 8`.|
| `type` | Type, e.g. `standby_duty`.|
| `assigned function` | Assigned function, e.g. `Chauffeur`.|
### Incident Response Switch
With this switch you can respond to a incident, either by manually controlling the switch via the GUI, or by using an automation action.
It gets reset to `unknown` value with every incident received. Switching it to `on` means you send a response acknowledgement, switching it back `off` sends a response rejected.
The following attributes are available:
| Attribute | Description |
| --------- | ----------- |
| `user_name` | Your username.|
| `assigned_skill_ids` | Assigned skill ID's.|
| `responded_at` | Time you responded.|
| `start_time` | Incident response start time.|
| `status` | Status of response, e.g., `pending`.|
| `reported_status` | Reported status, e.g., `shown_up`.|
| `arrived_at_station` | `true` or `false`.|
| `available_at_incident_creation` | `true` or `false`.|
| `active_duty_function_ids` | Active function ID's, e.g., `540`.|
## Advanced Configuration
With Automation you can configure one or more of the following useful actions:
1. Sound an alarm and/or switch on lights when an emergency incident is received.
1. Use text to speech to play incident details via a media player while getting dressed.
1. Respond with a response acknowledgment using a door-sensor when leaving the house or by pressing a button to let your teammates know you are underway.
1. Cast a FireServiceRota dashboard to a Chromecast device. (this requires a Nabu Casa subscription)
These are documented below.
### Example Automation
{% raw %}
```yaml
automation:
- alias: 'Switch on a light when incident is received'
trigger:
platform: state
entity_id: sensor.incidents
action:
service: light.turn_on
entity_id: light.bedroom
- alias: 'Play TTS incident details when incident is received'
trigger:
platform: state
entity_id: sensor.incidents
attribute: message_to_speech_url
condition:
- condition: not
conditions:
- condition: state
entity_id: sensor.incidents
attribute: message_to_speech_url
state: None
action:
- service: media_player.play_media
data_template:
entity_id: media_player.nest_hub_bedroom
media_content_id: >
{{ state_attr('sensor.incidents','message_to_speech_url') }}
media_content_type: 'audio/mp4'
- alias: 'Send response acknowledgement when a button is pressed'
trigger:
platform: state
entity_id: switch.response_button
action:
service: homeassistant.turn_on
entity_id: switch.incident_response
- alias: 'Cast FireServiceRota dashboard to Nest Hub'
trigger:
platform: homeassistant
event: start
action:
service: cast.show_lovelace_view
data:
entity_id: media_player.nest_hub_bedroom
view_path: fsr
```
### Example Lovelace Dashboard
```yaml
panel: true
title: Home
views:
- badges: []
cards:
- entity: sensor.incidents
type: entity
- cards:
- cards:
- default_zoom: 15
entities:
- entity: sensor.incidents
hours_to_show: 0
type: map
type: vertical-stack
- cards:
- entities:
- entity: sensor.incidents
hours_to_show: 1
refresh_interval: 0
type: history-graph
type: vertical-stack
type: horizontal-stack
- content: |
{{ states('sensor.incidents') }}
title: Incident
type: markdown
- entities:
- entity: binary_sensor.duty
- entity: switch.incident_response
type: entities
path: fsr
title: FireServiceRota
type: horizontal-stack
```
{% endraw %}
### Screenshot
<img src='/images/integrations/fireservicerota/dashboard.png' alt='Example of a FireServiceRota dashboard' class="no-shadow"/>
This screenshot shows what a FireServiceRota dashboard can look like.
## Debugging
The FireServiceRota integration will log additional information about WebSocket incidents received, response and duty status gathered, and other messages when the log level is set to `debug`. Add the relevant lines below to the `configuration.yaml`:
```yaml
logger:
default: info
logs:
homeassistant.components.fireservicerota: debug
pyfireservicerota: debug
```

View File

@ -46,9 +46,9 @@ entity_id:
required: true
type: string
state:
description: The state you want to track.
description: The states you want to track.
required: true
type: string
type: [list, string]
name:
description: Name displayed on the frontend. Note that it is used by Home Assistant to generate sensor's `object_id` so it is advisable to choose a unique one and change name for frontend using [customization](/docs/configuration/customizing-devices/#friendly_name) or via [Lovelace](/lovelace/entities/#name).
required: false

View File

@ -13,6 +13,7 @@ ha_category:
- Sensor
- Fan
- Health
- Humidifier
ha_release: 0.68
ha_iot_class: Local Push
ha_config_flow: true
@ -41,6 +42,7 @@ There is currently support for the following device types within Home Assistant:
- Sensor (HomeKit humidity, temperature, co2 and light level sensors)
- Fan
- Air Quality
- Humidifier (HomeKit humidifiers and dehumidifiers)
- Automation Triggers (HomeKit 'stateless' accessories like buttons, remotes and doorbells)
<div class='note'>

View File

@ -14,41 +14,40 @@ The `hyperion` platform allows you to integrate your
[Hyperion](https://docs.hyperion-project.org/) into Home Assistant. Hyperion is
an open source Ambilight implementation which runs on many platforms.
NOTE: [Hyperion-NG](https://github.com/hyperion-project/hyperion.ng) is
**NOTE**: [Hyperion-NG](https://github.com/hyperion-project/hyperion.ng) is
supported, the original [discontinued Hyperion](https://github.com/hyperion-project/hyperion) is not supported by
this integration.
## Configuration
To use your Hyperion light in your installation, add the following to your `configuration.yaml` file:
This integration can be configured using the integrations in the
Home Assistant frontend.
```yaml
# Example configuration.yaml entry
light:
- platform: hyperion
host: IP_ADDRESS
```
Menu: **Configuration** -> **Integrations**.
{% configuration %}
host:
description: The IP address of the device the Hyperion service is running on.
required: true
type: string
port:
description: The port used to communicate with the Hyperion service.
required: false
type: integer
default: 19444
name:
description: The name of the device used in the frontend.
required: false
type: string
priority:
description: The priority for color and effects, make sure this is lower then the streaming sources priority in hyperion itself (typically lower than 200 is appropriate).
required: false
type: integer
default: 128
{% endconfiguration %}
In most cases, Hyperion servers will be automatically discovered by
Home Assistant. Those automatically discovered devices are listed
on the integrations page.
If for some reason Hyperion isn't discovered, it can be added manually.
Click on the `+` sign to add an integration and click on **Hyperion**.
After completing the configuration flow, the Hyperion integration will be
available.
### Extra configuration of the integration
All configuration options are offered from the frontend. Choose `Options` under the
relevant entry on the `Integrations` page.
Options supported:
- **priority**: The priority for color and effects, make sure this is lower then the streaming sources priority in hyperion itself (typically lower than 200 is appropriate).
## Hyperion Instances
This integration supports multiple Hyperion instances running on a single Hyperion
server. As instances are added/removed on the Hyperion UI, they will automatically be
added/removed from Home Assistant.
## Effects

View File

@ -666,6 +666,10 @@ invert_angle:
required: false
default: false
type: boolean
device_class:
description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend.
required: false
type: string
{% endconfiguration %}
## Light

View File

@ -0,0 +1,46 @@
---
title: Kuler Sky
description: Instructions for integrating Brightech Kuler Sky Bluetooth floor lamps with Home Assistant.
ha_category:
- Light
ha_iot_class: Local Polling
ha_release: 2020.12
ha_domain: kulersky
ha_codeowners:
- '@emlove'
ha_config_flow: true
---
This integration connects Brightech Kuler Sky floor lamps to Home Assistant.
## Configuration
This integration can be configured using the integrations page in Home Assistant.
Menu: **Configuration** -> **Integrations**.
Click on the `+` sign to add an integration and search for **Kuler Sky**.
The integration will scan for nearby Bluetooth devices, and ask you to select your lamp.
## Additional information for Home Assistant Core on Python environments
This integration requires `pybluez` to be installed. On Debian based installs, run:
```bash
sudo apt install bluetooth
```
Before you get started with this integration, please note that:
- Requires access to the Bluetooth stack, see [Rootless Setup section](#rootless-setup) for further information
## Rootless Setup
Normally accessing the Bluetooth stack is reserved for `root`, but running programs that are networked as `root` is a bad security wise. To allow non-root access to the Bluetooth stack we can give Python 3 and `hcitool` the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](https://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information).
```bash
sudo apt-get install libcap2-bin
sudo setcap 'cap_net_raw,cap_net_admin+eip' `readlink -f \`which python3\``
sudo setcap 'cap_net_raw+ep' `readlink -f \`which hcitool\``
```

View File

@ -402,7 +402,7 @@ The [MOTOR_PORT](#ports) values specify which hardware relay or outputs configur
| Constant | Values |
| -------- | ------ |
| LED_STATE | `on`, `off`, `blink`, `flicker` |
| LOGICOP_STATE | `not`, `or`, `and` |
| LOGICOP_STATE | `none`, `some`, `all` |
| KEY_STATE | `hit`, `make`, `break`, `dontsend` |
### Keys:

View File

@ -16,7 +16,7 @@ Use your Meraki AP as device tracker. Note that Meraki will see all devices, not
1. Make sure analytics and Scanning API are both enabled.
1. Make note of the Validator string, which will be used in the `device_tracker` configuration.
1. Click **Add a Post URL**:
1. Set the Post URL to `https://YOUR_HOSTNAME/api/meraki?api_password=YOUR_HASS_PASSWORD`
1. Set the Post URL to `https://YOUR_HOSTNAME/api/meraki`
1. Set the Secret to a randomly generated string, and make note of it for the `device_tracker` configuration.
1. Make sure the API Version is set to `2.0`.
1. Hit **Save** in the bottom right of the page.

View File

@ -0,0 +1,32 @@
---
title: Motion Blinds
description: Instructions on how to integrate Motion Blinds from Coulisse B.V. into Home Assistant.
ha_category:
- Cover
ha_iot_class: Local Polling
ha_release: 2020.12
ha_domain: motion_blinds
ha_codeowners:
- '@starkillerOG'
ha_config_flow: true
---
The integration allows you to control [Motion Blinds](https://motion-blinds.com) from [Coulisse B.V.](https://coulisse.com/products/motion).
To add a Motion Bridge to your installation, click Configuration in the sidebar, then click Integrations. Click the + icon in the lower right. Then search for "Motion Blinds" and enter the setup.
You will be asked for the IP address of the Motion Bridge, e.g., 192.168.1.100. Note that a static IP address is required in order for this integration to keep working properly.
## Retrieving the API Key
The Motion Blinds API uses a 16 character key that can be retrieved from the official "Motion Blinds" app for [IOS](https://apps.apple.com/us/app/motion-blinds/id1437234324) or [Android](https://play.google.com/store/apps/details?id=com.coulisse.motion).
Open the app, click the 3 dots in the top right corner, go to "settings", go to "Motion APP About", Please quickly tap this "Motion APP About" page 5 times, a popup will appear that gives you the key.
Please note that "-" characters need to be included in the key when providing it to Home Assistant. The key needs to be similar to `12ab345c-d67e-8f`
<p class='img'>
<img src='/images/integrations/motion_blinds/Motion_App__get_key_1.jpg' />
<img src='/images/integrations/motion_blinds/Motion_App__get_key_2.jpg' />
</p>

View File

@ -6,6 +6,7 @@ ha_category:
- Binary Sensor
- Camera
- Climate
- Doorbell
- Sensor
ha_iot_class: Cloud Push
ha_release: 0.7
@ -238,6 +239,18 @@ All Google Nest Thermostat models have traits exposed from the SDM API. The init
Given a thermostat named `Upstairs` then sensors are created with names such as `sensor.upstairs_temperature` or `sensor.upstairs_humidity`.
## Automation and Device Triggers
All Google Nest Cam models and the Google Nest Hello Video Doorbell support [Device Triggers](/docs/automation/trigger/#device-triggers) that enable automation in Home Assistant:
- `camera_motion`: Motion detected, when a [CameraMotion](https://developers.google.com/nest/device-access/traits/device/camera-motion#events) event is received.
- `camera_person`: Person detected, when a [CameraPerson](https://developers.google.com/nest/device-access/traits/device/camera-person#events) event is received.
- `camera_sound`: Sound detected, when a [CameraSound](https://developers.google.com/nest/device-access/traits/device/camera-sound#events) event is received.
- `doorbell_chime`: Doorbell pressed, when a [DoorbellChime](https://developers.google.com/nest/device-access/traits/device/doorbell-chime#events) event is received.
See [Automating Home Assistant](/getting-started/automation/) for the getting started guide on automations or the [Automation](/docs/automation/) documentation for full details.
# Legacy Works With Nest API
This section contains instructions for the Legacy [Works with Nest](https://developers.nest.com/) API.

View File

@ -0,0 +1,20 @@
---
title: Number
description: Instructions on how to manage your Number entities with Home Assistant.
ha_category:
- Number
ha_release: 2020.12
ha_quality_scale: internal
ha_domain: number
ha_iot_class: ~
---
Keeps track on `number` entities in your environment, their state, and allows you to control them. This integration allows other integrations to get a value input from user within a range.
### Services
The Number entities registers the following services:
| Service | Data | Description |
| ------- | ---- | ----------- |
| `set_value` | `value`<br>`entity_id(s)`<br>`area_id(s)` | Set the value of specific `number` entities

View File

@ -74,7 +74,7 @@ If your ONVIF camera supports PTZ, you will be able to pan, tilt or zoom your ca
| `distance` | Distance coefficient. Sets how much PTZ should be executed in one request. Allowed values: floating point numbers, 0 to 1. Default : 0.1 |
| `speed` | Speed coefficient. Sets how fast PTZ will be executed. Allowed values: floating point numbers, 0 to 1. Default : 0.5 |
| `preset` | PTZ preset profile token. Sets the preset profile token which is executed with GotoPreset. |
| `move_mode` | PTZ moving mode. Allowed values: `ContinuousMove`, `RelativeMove`, `AbsoluteMove`, `GotoPreset`. Default :`RelativeMove` |
| `move_mode` | PTZ moving mode. Allowed values: `ContinuousMove`, `RelativeMove`, `AbsoluteMove`, `GotoPreset`, `Stop`. Default :`RelativeMove` |
| `continuous_duration` | Set ContinuousMove delay in seconds before stoping the move. Allowed values: floating point numbers or integer. Default : 0.5 |
If you are running into trouble with this sensor, please refer to the [Troubleshooting section](/integrations/ffmpeg/#troubleshooting).

View File

@ -17,9 +17,17 @@ This integration allows you to utilize OpenZWave's ozwdaemon to control a Z-Wave
## Requirements
### Supervisor managed installation
- The official OpenZWave add-on installed available from the add-on store.
### Core installation
- MQTT server and the [MQTT integration](/integrations/mqtt/) set up in Home Assistant.
- The [ozwdaemon](https://github.com/OpenZWave/qt-openzwave) installed and running in your network.
For Home Assistant Supervisor there's an official add-on named OpenZWave available from the add-on store.
### Hardware requirements
- Supported Z-Wave dongle compatible with OpenZWave 1.6. See this [list](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules) of controllers. The Z-Wave controller dongle should be connected to the same host as where the ozwdaemon is running.
## Configuration
@ -136,6 +144,7 @@ This event is fired upon scene activation. The data in the event will vary depen
{
"event_type": "ozw.scene_activated",
"data": {
"instance_id": 1,
"node_id": 9,
"scene_id": 1,
"scene_label": "Scene 1",

View File

@ -19,36 +19,13 @@ The `recollect_waste` integration allows you to track the next scheduled waste p
5. Use the place_id and service_id when configuring the sensor.
## Configuration
To enable this sensor, add the following lines to your `configuration.yaml`:
```yaml
# Example configuration.yaml entry
sensor:
- platform: recollect_waste
place_id: YOUR_PLACE_ID
service_id: YOUR_SERVICE_ID
```
{% configuration %}
place_id:
description: The place_id used for your neighbourhood.
required: true
type: string
service_id:
description: The service_id used for your city.
required: true
type: string
name:
description: Name the sensor.
required: false
type: string
default: recollect_waste
{% endconfiguration %}
The default frequency for pulling data from Recollect Waste is once a day (86400 seconds).
<div class='note warning'>
The Recollect Waste sensor uses the Recollect API <strong>URL</strong> to obtain data not an official API from Recollect. Use at your own risk.
</div>
## Configuration
This integration can be configured via the Home Assistant UI by navigating to
**Configuration** -> **Integrations**.

View File

@ -104,6 +104,10 @@ headers:
description: The headers for the requests.
required: false
type: [string, list]
params:
description: The query params for the requests.
required: false
type: [string, list]
json_attributes:
description: A list of keys to extract values from a JSON dictionary result and then set as sensor attributes. If the endpoint returns XML with the "text/xml" or "application/xml" content type, it will automatically be converted to JSON according to this [specification](https://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html)
required: false

View File

@ -1,47 +0,0 @@
---
title: Salt Fiber Box
description: Instructions on how to integrate Salt Fiber Box router into Home Assistant.
ha_category:
- Presence Detection
ha_iot_class: Local Polling
ha_codeowners:
- '@bjornorri'
ha_release: 0.106
ha_domain: salt
---
The `salt` platform offers presence detection by looking at connected devices to a [Salt Fiber Box](https://fiber.salt.ch/en/fiber/equipment/fiber-box) router from [Salt](https://www.salt.ch), which is an internet provider in Switzerland.
<div class='note'>
The router only allows one user session at a time. If you log into the router's web interface, the platform will stop updating until you log out.
</div>
## Configuration
To use a Salt Fiber Box router in your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
device_tracker:
- platform: salt
host: 192.168.1.1
username: admin
password: YOUR_PASSWORD
```
{% configuration %}
host:
description: The IP address of your router, e.g. `192.168.1.1`.
required: true
type: string
username:
description: The username used to log into the router's web interface, e.g. `admin`.
required: true
type: string
password:
description: The password used to log into the router's web interface.
required: true
type: string
{% endconfiguration %}
See the [device tracker integration page](/integrations/device_tracker/) for instructions how to configure the people to be tracked.

View File

@ -0,0 +1,132 @@
---
title: "MQTT Scene"
description: "Instructions on how to integrate MQTT scenes into Home Assistant."
ha_category:
- Scene
ha_release: 2020.12
ha_iot_class: Configurable
ha_domain: mqtt
---
The `mqtt` scene platform lets you control your MQTT enabled scenes.
## Configuration
To enable a MQTT scene in your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
scene:
- platform: mqtt
command_topic: zigbee2mqtt/living_room_group/set
```
{% configuration %}
availability:
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
required: false
type: list
keys:
payload_available:
description: The payload that represents the available state.
required: false
type: string
default: online
payload_not_available:
description: The payload that represents the unavailable state.
required: false
type: string
default: offline
topic:
description: An MQTT topic subscribed to receive availability (online/offline) updates.
required: true
type: string
availability_topic:
description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`.
required: false
type: string
command_topic:
description: The MQTT topic to publish commands to change the switch state.
required: false
type: string
icon:
description: Icon for the switch.
required: false
type: icon
name:
description: The name to use when displaying this switch.
required: false
type: string
default: MQTT Switch
payload_available:
description: The payload that represents the available state.
required: false
type: string
default: online
payload_not_available:
description: The payload that represents the unavailable state.
required: false
type: string
default: offline
payload_on:
description: The payload that represents `on` state. If specified, will be used for both comparing to the value in the `state_topic` (see `value_template` and `state_on` for details) and sending as `on` command to the `command_topic`.
required: false
type: string
default: "ON"
qos:
description: The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages.
required: false
type: integer
default: 0
retain:
description: If the published message should have the retain flag on or not.
required: false
type: boolean
default: false
unique_id:
description: An ID that uniquely identifies this switch device. If two switches have the same unique ID, Home Assistant will raise an exception.
required: false
type: string
{% endconfiguration %}
<div class='note warning'>
Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics.
</div>
## Examples
In this section, you will find some real-life examples of how to use this sensor.
### Full configuration
The example below shows a full configuration for a switch.
```yaml
# Example configuration.yaml entry
switch:
- platform: mqtt
unique_id: living_room_party_scene
name: "Living Room Party Scene"
command_topic: "home/living_room/party_scene/set"
availability:
- topic: "home/living_room/party_scene/available"
payload_on: "ON"
qos: 0
retain: true
```
### Use with a JSON Payload
The example below shows a configuration using a JSON payload.
```yaml
# Example configuration.yaml entry
scene:
- platform: mqtt
name: Living Room Blue Scene
unique_id: living_room_blue_scene
command_topic: "home/living_room/set"
payload_on: '{"activate_scene": "Blue Scene"}'
```

View File

@ -51,8 +51,61 @@ Names are set from the device web page:
- Channel name for single-channel devices can be set in **Settings** >> **CHANNEL NAME**
- Channel name for multi-channel devices can be set in **Settings** >> **CHANNEL NAME** after selecting the channel, by clicking on the channel name.
## Appliance type
Shelly device relays are added to the Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if the device uses firmware version 1.9.0 or newer and the **Settings** >> **APPLIANCE TYPE** value is set to `light`.
## Events
If the **BUTTON TYPE** of the switch connected to the device is set to `momentary` or `detached switch`, integration fires events when the switch is used. You can use these events in your automations.
### Automation examples
```yaml
- alias: "Toggle living room light"
trigger:
platform: event
event_type: shelly.click
event_data:
device: shellyswitch25-AABBCC
channel: 1
click_type: single
action:
service: light.toggle
entity_id: light.living_room
- alias: "Toggle living room lamp"
trigger:
platform: event
event_type: shelly.click
event_data:
device: shellyswitch25-AABBCC
channel: 2
click_type: long
action:
service: light.toggle
entity_id: light.lamp_living_room
```
### Possible values for `click_type`
| Shelly input event | Click Type |
| ------------------ | --------------|
| `S` | `single` |
| `SS` | `double` |
| `SSS` | `triple` |
| `L` | `long` |
| `SL` | `single_long` |
| `LS` | `long_single` |
<div class="note">
Not all devices support all input events. You can check on [Shelly API Reference](https://shelly-api-docs.shelly.cloud/) website what types of Shelly input events your device supports.
</div>
## Known issues and limitations
- Only supports firmware 1.8 and later
- Support relays, lights (with brightness), sensors and rollers
- Support for battery-powered devices is currently very limited
- Support for RGB devices is limited
- Support for battery-powered devices is limited

View File

@ -228,6 +228,7 @@ The SmartThings Sensor platform lets your view devices that have sensor-related
| [`energyMeter`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Energy-Meter) | `energy` |
| [`equivalentCarbonDioxideMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Equivalent-Carbon-Dioxide-Measurement) | `equivalentCarbonDioxideMeasurement` |
| [`formaldehydeMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Formaldehyde-Measurement) | `formaldehydeLevel` |
| `gasMeter` | `gasMeter`, `meterCalorific`, `meterTime`, and `meterVolume` |
| [`illuminanceMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Illuminance-Measurement) | `illuminance` |
| [`infraredLevel`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Infrared-Level) | `infraredLevel` |
| [`lock`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Lock) | `lock` |
@ -256,7 +257,7 @@ The SmartThings Sensor platform lets your view devices that have sensor-related
| [`thermostatOperatingState`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Thermostat-Operating-State) | `thermostatOperatingState` |
| [`thermostatSetpoint`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Thermostat-Setpoint) | `thermostatSetpoint` |
| [`threeAxis`](https://docs.smartthings.com/en/latest/capabilities-reference.html#three-axis) | `threeAxis` (as discrete sensors `X`, `Y` and `Z`) |
| [`tvChannel`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Tv-Channel) | `tvChannel` |
| [`tvChannel`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Tv-Channel) | `tvChannel` and `tvChannelName` |
| [`tvocMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Tvoc-Measurement) | `tvocLevel` |
| [`ultravioletIndex`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Ultraviolet-Index) | `ultravioletIndex` |
| [`voltageMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Voltage-Measurement) | `voltage` |

View File

@ -23,41 +23,9 @@ The open JSON interface is deactivated by default. To activate the open JSON int
## Configuration
There are 2 options in configuring the `solarlog` integration:
- Via the Home Assistant user interface where it will let you enter the name and host to connect to your Solar-Log device.
- Via the Home Assistant `configuration.yaml` file.
```yaml
# Example configuration.yaml entry
sensor:
platform: solarlog
```
{% configuration %}
host:
description: The IP Address or host address of your Solar-Log device.
required: false
default: http://solar-log
type: string
name:
description: Let you overwrite the name of the device in the frontend.
required: false
default: solarlog
type: string
{% endconfiguration %}
### Full configuration sample
A full configuration entry would look like the sample below.
```yaml
# Example configuration.yaml entry
sensor:
- platform: solarlog
name: solarlog
host: 192.168.1.123
```
This integration can be configured via the Home Assistant UI by navigating to
**Configuration** -> **Integrations**.
You will have to enter a name that is used as prefix for your sensors and a host to connect to your Solar-Log device.
In case you would like to convert the values, for example, to Wh instead of the default kWh, you can use the [template platform](/integrations/template/).

View File

@ -0,0 +1,18 @@
---
title: "SRP Energy"
description: "How to integrate SRP Energy within Home Assistant."
ha_category:
- Energy
ha_release: 2020.12
ha_iot_class: Cloud Polling
---
The SRP Energy integration shows information from SRP hourly energy usage report for their customers.
You need a username, password, and account ID which you can create at [SRP](https://www.srpnet.com).
## Configuration
Add SRP Energy to your installation from the configuration integration.
Navigate to "Configuration", then "Integrations" and click `+` button in the bottom right. Select `SRP Energy` to start the configuration. After completing the configuration procedure, the SRP Energy integration will be available.

View File

@ -16,8 +16,6 @@ If you don't need to receive messages, you can use the [broadcast](/integrations
## Notification services
Available services: `send_message`, `send_photo`, `send_document`, `send_location`, `send_sticker`, `edit_message`, `edit_replymarkup`, `edit_caption`, `answer_callback_query`, `delete_message` and `leave_chat`.
### Service `telegram_bot.send_message`
Send a notification.
@ -74,6 +72,26 @@ Send a video.
| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` |
| `message_tag` | yes | Tag for sent message. In `telegram_sent` event data: `{{trigger.event.data.message_tag}}` |
### Service `telegram_bot.send_voice`
Send a voice message.
| Service data attribute | Optional | Description |
|---------------------------|----------|--------------------------------------------------|
| `url` | no | Remote path to a voice message. |
| `file` | no | Local path to a voice message. |
| `caption` | yes | The title of the voice message. |
| `username` | yes | Username for a URL which requires HTTP basic authentication. |
| `password` | yes | Password for a URL which requires HTTP basic authentication. |
| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. |
| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. |
| `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. |
| `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. |
| `timeout` | yes | Timeout for send voice. Will help with timeout errors (poor internet connection, etc) |
| `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. `[]` to reset to no custom keyboard. Example: `["/command1, /command2", "/command3"]` |
| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` |
| `message_tag` | yes | Tag for sent message. In `telegram_sent` event data: `{{trigger.event.data.message_tag}}` |
### Service `telegram_bot.send_document`
Send a document.

View File

@ -0,0 +1,28 @@
---
title: Twinkly
description: Instructions on how to integrate Twinkly LED string to Home Assistant.
ha_category:
- Light
ha_release: 2020.12
ha_config_flow: true
ha_domain: twinkly
ha_iot_class: Local pull
---
The Twinkly integration allows you to control [Twinkly](https://twinkly.com/) LED string from Home Assistant.
The Twinkly devices does not store the effects locally, they are instead re-sent from the Twinkly application each time.
This means that this integration does not support to change the LED string effect.
It only supports to configure the brightness and to turn the device on and off.
## Configuration
You can setup this integration from the Home Assistant user interface:
1. In Home Assistant, go to **Configuration > Integrations**.
1. At the bottom right, click on the **+** button.
1. In the list select the **Twinkly** integration.
1. Configure the host (or IP address) of your twinkly device.
_If configured using an IP address, on your router / DHCP, you should assign a static IP to your Twinkly device._

View File

@ -1,63 +0,0 @@
---
title: Ubee Router
description: Instructions on how to integrate Ubee routers into Home Assistant.
ha_category:
- Presence Detection
ha_release: 0.89
ha_iot_class: Local Polling
ha_codeowners:
- '@mzdrale'
ha_domain: ubee
---
This platform offers presence detection by looking at connected devices to a [Ubee Router](https://www.ubeeinteractive.com/).
To use a Ubee router in your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
device_tracker:
- platform: ubee
host: ROUTER_IP_ADDRESS
username: YOUR_ADMIN_USERNAME
password: YOUR_ADMIN_PASSWORD
```
{% configuration %}
model:
description: Ubee Router model, e.g., `EVW32C-0N`. If omitted, model will be detected automatically.
required: false
default: detect
type: string
host:
description: The IP address of your router, e.g., `192.168.1.1`.
required: true
type: string
username:
description: The username of a user with administrative privileges, usually `admin`.
required: true
type: string
password:
description: The password for your given admin account.
required: true
type: string
{% endconfiguration %}
Supported models:
- Ambit EVW320B
- Ambit EVW321B
- Ubee DDW36C
- Ubee DVW32CB
- Ubee EVW3200-Wifi
- Ubee EVW3226 (UPC)
- Ubee EVW32C-0N
<div class='note info'>
This integration uses <a href='https://github.com/mzdrale/pyubee'>pyUbee library</a>, which was tested with models listed above. If you have different model of <a href='http://www.ubeeinteractive.com/?page_id=20178'>Ubee Router</a> and it doesn't work with this component, please <a href='https://github.com/mzdrale/pyubee/issues/new'>create pyUbee issue</a> to request for support for your model.
</div>
By default, Home Assistant pulls information about connected devices from Ubee router every 5 seconds.
See the [device tracker integration page](/integrations/device_tracker/) for instructions on how to configure the people to be tracked.

View File

@ -28,11 +28,6 @@ name:
required: false
type: string
default: Uptime
unit_of_measurement:
description: "Units for uptime measurement in either `days`, `hours` or `minutes`."
required: false
type: string
default: days
{% endconfiguration %}
## Example
@ -42,5 +37,4 @@ unit_of_measurement:
sensor:
- platform: uptime
name: Time Online
unit_of_measurement: hours
````

View File

@ -39,7 +39,7 @@ source:
required: true
type: string
cycle:
description: How often to reset the counter. Valid values are `hourly`, `daily`, `weekly`, `monthly`, `bimonthly`, `quarterly` and `yearly`. Cycle value `bimonthly` will reset the counter once in two months.
description: How often to reset the counter. Valid values are `quarter-hourly`, `hourly`, `daily`, `weekly`, `monthly`, `bimonthly`, `quarterly` and `yearly`. Cycle value `bimonthly` will reset the counter once in two months.
required: true
type: string
offset:

View File

@ -43,11 +43,11 @@ departures:
required: false
type: string
from:
description: The start station.
description: The start station name or ID.
required: true
type: string
heading:
description: Direction of the traveling.
description: The destination station name or ID.
required: false
type: string
lines:
@ -80,3 +80,33 @@ sensor:
- GRÖN
delay: 10
```
## Solving incorrect selected station problems
It is possible to use the full name of the station for the from/heading values, e.g., Musikvägen, Göteborg.
In cases where the wrong station is being selected, it is possible to provide the station ID instead. To do this you first need to retrieve the station ID either via Västtrafik's [API-konsole](https://developer.vasttrafik.se/portal/#/api/Reseplaneraren/v2/landerss) or with `curl`.
To retrieve the ID using `curl`:
1. Login into the Västtrafik API and go to "Hantera nycklar" next to the application you created for Home Assistant.
2. Make a copy of your AccessToken and execute the following `curl` command, replacing "<ACCESS_TOKEN>" and "<STATION_NAME>" as necessary:
```shell
curl -H "Authorization: Bearer <ACCESS_TOKEN>" "https://api.vasttrafik.se/bin/rest.exe/v2/location.name?input=<STATION_NAME>&format=json
```
3. In the output locate the key called "StopLocation", and under this key, you will find a list of stops. Copy the ID for your desired stop and use it in your configuration.
```yaml
# Example configuration.yaml entry using station ID as departure and station name as destination
sensor:
- platform: vasttrafik
key: YOUR_API_KEY
secret: YOUR_API_SECRET
departures:
- name: To the Iron Square \o/
from: 9021014004870000
heading: Järntorget
delay: 0
```

View File

@ -24,7 +24,7 @@ The `xiaomi_miio` integration supports the following devices:
- [Xiaomi Gateway](#xiaomi-gateway)
- [Xiaomi device tracker (Xiaomi Mi WiFi Repeater 2)](#xiaomi-device-tracker-xiaomi-mi-wifi-repeater-2))
- [Xiaomi Air Purifier](#xiaomi-air-purifier)
- [Xiaomi Air Purifier and Humidifier](#xiaomi-air-purifier-and-humidifier)
- [Xiaomi Air Quality Index Monitor](#xiaomi-air-quality-index-monitor)
- [Xiaomi Mi Air Quality Monitor](#xiaomi-mi-air-quality-monitor)
- [Xiaomi IR Remote](#xiaomi-ir-remote)
@ -109,7 +109,7 @@ This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuu
### iOS
1. Configure the robot with the Mi Home app. Make sure to select the correct region, as Xiaomi uses different product names for different geographical areas. Note that the new RoboRock app is currently not supported for this method.
2. Using iTunes, create an unencrypted backup of your iPhone. Since macOS 10.15 there is no iTunes app. Use Finder instead - after connecting your iOS device you should see it in left menu of Finder window.
2. Using iTunes, create an unencrypted backup of your iPhone. Since macOS 10.15 there is no iTunes app. Use Finder instead - after connecting your iOS device you should see it in left menu of Finder window.
3. Install [iBackup Viewer](https://www.imactools.com/iphonebackupviewer/), open it, and open your backup.
4. Open the "Raw Data" module.
5. Navigate to `com.xiaomi.mihome`.
@ -126,7 +126,7 @@ This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuu
-- Execute to retrieve token for Smart Powerstrip
SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%powerstrip%"
-- Execute to retrieve token for Smart Plug
SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%plug%"
```
@ -324,7 +324,7 @@ token:
type: string
{% endconfiguration %}
## Xiaomi Air Purifier
## Xiaomi Air Purifier and Humidifier
The `xiaomi_miio` fan platform allows you to control the Xiaomi Air Purifier, Air Humidifier and Air Fresh.
@ -349,6 +349,7 @@ Supported devices:
| Air Purifier 3H (2019) | zhimi.airpurifier.mb3 | |
| Air Humidifier | zhimi.humidifier.v1 | |
| Air Humidifier CA1 | zhimi.humidifier.ca1 | |
| Air Humidifier CA4 | zhimi.humidifier.ca4 | |
| Air Humidifier CB1 | zhimi.humidifier.cb1 | |
| Air Fresh VA2 | zhimi.airfresh.va2 | |
@ -599,6 +600,34 @@ This model uses newer MiOT communication protocol.
- `depth`
- `dry`
### Air Humidifier CA (zhimi.humidifier.ca4)
- On, Off
- Operation modes (auto, low, mid, high)
- Buzzer (on, off)
- Child lock (on, off)
- LED brightness (off, dim, bright)
- Target humidity (30 - 80)
- Dry mode (on, off)
- Motor speed rpm (200 - 2000)
- Attributes
- `model`
- `temperature`
- `humidity`
- `mode`
- `buzzer`
- `child_lock`
- `target_humidity`
- `led_brightness`
- `use_time`
- `actual_speed`
- `button_pressed`
- `dry`
- `fahrenheit`
- `motor_speed`
- `power_time`
- `water_level`
### Air Humidifier CB (zhimi.humidifier.cb1)
- On, Off
@ -852,13 +881,22 @@ Turn the dry mode off.
|---------------------------|----------|---------------------------------------------------------|
| `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. |
### Service `xiaomi_miio.fan_set_motor_speed` (Air Humidifier CA4)
Set motor speed RPM.
| Service data attribute | Optional | Description |
|---------------------------|----------|----------------------------------------------------------|
| `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. |
| `motor_speed` | no | Motor speed RPM. Allowed values are between 200 and 2000 |
### Troubleshooting `Unable to find device` error messages
Check if the device is in the same subnet as the Home Assistant instance. Otherwise, you should configure your router/firewall to put this device in the same VLAN as the Home Assistant instance.
If it's not possible to use VLANs for some reason, your last resort may be using NAT translation, between the IPs.
## Xiaomi Air Quality Index Monitor
## Xiaomi Air Quality Index Monitor
The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor (PM2.5) and reporting the air quality index.
@ -1317,7 +1355,7 @@ Clean the specified segment/room. A room is identified by a number. Instructions
| Service data attribute | Optional | Description |
|---------------------------|----------|-------------------------------------------------------|
| `entity_id` | no | Only act on a specific robot |
| `entity_id` | no | Only act on a specific robot |
| `segments` | no | List of segment numbers or one single segment number. |
Example of `xiaomi_miio.vacuum_clean_segment` use:

View File

@ -1,96 +0,0 @@
---
title: yesss! SMS
description: Instructions on how to add Yesss-SMS notifications to Home Assistant.
ha_category:
- Notifications
ha_release: 0.57
ha_codeowners:
- '@flowolf'
ha_domain: yessssms
ha_iot_class: Cloud Push
---
The `yessssms` platform is using the Austrian mobile operator [Yesss.at](https://yesss.at) and others to send SMS via their web-site.
Currently some MVNOs (mobile virtual network operators), in the A1 network, that use the kontomanager.at interface work. These are currently (as of version 0.4.0 of [YesssSMS](https://pypi.org/project/YesssSMS/)):
* YESSS
* billitel
* EDUCOM
* fenercell
* georg
* goood
* kronemobile
* kuriermobil
* SIMfonie
* teleplanet
* WOWWW
* yooopi
![supported providers](/images/screenshots/yessssms_brands.png)
<div class='note warning'>
Regular charges apply and a contract or prepaid plan is needed.
</div>
<div class='note warning'>
Do not use this for high frequency notifications. The web-SMS page is rate limited and sending more than 45 SMS/h might get you blocked.
</div>
You can send to any number, but your phone number will appear as sender.
To enable SMS notifications in your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
notify:
- name: NOTIFIER_NAME
platform: yessssms
username: YOUR_PHONE_NUMBER
password: YOUR_PASSWORD
recipient: PHONE_NUMBER_TO_NOTIFY
```
{% configuration %}
name:
description: "The optional parameter name allows multiple notifiers to be created. The notifier will bind to the service notify.NOTIFIER_NAME."
required: false
type: string
default: notify
username:
description: This is your login name (usually your phone number, but in some cases it could be your e-mail). Veryfy that you can use your credentials on the Yesss.at website.
required: true
type: string
password:
description: This is the password you use to login to Yesss.at.
required: true
type: string
recipient:
description: This is the phone number you want to send the SMS notification to.
required: true
type: string
provider:
description: Possible values are `yesss`, `billitel`, `educom`, `fenercell`, `georg`, `goood`, `kronemobile`, `kuriermobil`, `simfonie`, `teleplanet`, `wowww` and `yooopi`.
required: false
default: "YESSS"
type: string
{% endconfiguration %}
For an alternative provider you would set the `provider` option. An example configuration for the `educom` provider with SMS to yourself would be:
```yaml
# Example configuration.yaml entry
notify:
- name: sms_to_self
platform: yessssms
username: "+436641234567"
password: tops3cr3tpass0rd
recipient: "+436641234567"
provider: educom
```
<div class='note warning'>
Verify that your credentials work on the website of your provider.
Using the wrong credentials three times in a row will get you suspended for one hour.
</div>
Home Assistant will check your credentials on startup. Check the logs for errors.
If the login credentials are not valid, re-check the credentials and restart Home Assistant.

View File

@ -72,7 +72,7 @@ Okay, one more highlight before we'll let you check out the changelog. Contribut
- Support for NO-IP ([@fabaff] - [#10155]) ([no_ip docs]) (new-platform)
- Linode ([@ryanm101] - [#9936]) ([linode docs]) ([binary_sensor.linode docs]) (new-platform)
- Nederlandse spoorwegen ([@b10m] - [#10136]) ([sensor.nederlandse_spoorwegen docs]) (new-platform)
- added Yesss SMS platform ([@flowolf] - [#10177]) ([notify.yessssms docs]) (new-platform)
- added Yesss SMS platform ([@flowolf] - [#10177]) (new-platform)
- Add Sytadin Traffic component ([@gautric] - [#9524]) (new-platform)
- Added new Clickatell SMS messaging Notify Platform ([@davlloyd] - [#9775]) ([notify.clickatell docs]) (new-platform)
- Add Random binary sensor ([@fabaff] - [#10164]) ([binary_sensor.random docs]) (new-platform)
@ -209,7 +209,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Nederlandse spoorwegen ([@b10m] - [#10136]) ([sensor.nederlandse_spoorwegen docs]) (new-platform)
- Added capability to pass a filename to the downloader component ([@tchellomello] - [#10059]) ([downloader docs])
- Limits of the favorite level updated. Values between 0 and 16 will be accepted. ([@syssi] - [#10186]) ([fan.xiaomi_miio docs])
- added Yesss SMS platform ([@flowolf] - [#10177]) ([notify.yessssms docs]) (new-platform)
- added Yesss SMS platform ([@flowolf] - [#10177]) (new-platform)
- Add Sytadin Traffic component ([@gautric] - [#9524]) (new-platform)
- media_title property now returns current source ([@etsinko] - [#10120]) ([media_player.monoprice docs])
- Added new Clickatell SMS messaging Notify Platform ([@davlloyd] - [#9775]) ([notify.clickatell docs]) (new-platform)
@ -585,7 +585,6 @@ Experiencing issues introduced by this release? Please report them in our [issue
[no_ip docs]: /integrations/no_ip/
[notify.clickatell docs]: /integrations/clickatell
[notify.sendgrid docs]: /integrations/sendgrid
[notify.yessssms docs]: /integrations/yessssms
[panel_custom docs]: /integrations/panel_custom/
[persistent_notification docs]: /integrations/persistent_notification/
[plant docs]: /integrations/plant/

View File

@ -405,7 +405,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Catch connection reset ([@balloob] - [#22982]) ([websocket_api docs])
- Stream support for Netatmo cameras ([@cgtobi] - [#22952]) ([netatmo docs])
- Google Assistant: Migrate light setting trait to use HSV color spectrum ([@balloob] - [#22980]) ([google_assistant docs]) (breaking change)
- Bump pyubee version to support more models and detect model automatically ([@mzdrale] - [#22450]) ([ubee docs])
- Bump pyubee version to support more models and detect model automatically ([@mzdrale] - [#22450])
- Load requirements and dependencies from manifests. Fallback to current `REQUIREMENTS` and `DEPENDENCIES` ([@rohankapoorcom] - [#22717]) (breaking change)
- Add device HmIP-MIOB to Homematic IP Cloud ([@SukramJ] - [#22975]) ([homematicip_cloud docs])
- Prevent the projector to toogle on/off ([@stbkde] - [#22985]) ([epson docs])
@ -1081,7 +1081,6 @@ Experiencing issues introduced by this release? Please report them in our [issue
[trend docs]: /integrations/trend/
[tts docs]: /integrations/tts/
[twilio docs]: /integrations/twilio/
[ubee docs]: /integrations/ubee/
[version docs]: /integrations/version/
[water_heater docs]: /integrations/water_heater/
[websocket_api docs]: /integrations/websocket_api/

View File

@ -282,7 +282,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Fix non-syncthru supporting printers ([@nielstron] - [#21482]) ([syncthru docs])
- Add support for a wider variety of EnOcean devices ([@bdurrer] - [#22052]) ([enocean docs])
- Convert Pollen.com sensor into IQVIA component ([@bachya] - [#22986]) ([iqvia docs]) ([pollen docs]) (breaking change) (new-integration) (new-platform)
- Upgrade to pyubee==0.6 ([@StevenLooman] - [#23355]) ([ubee docs])
- Upgrade to pyubee==0.6 ([@StevenLooman] - [#23355])
- Fix tox.ini lint target ([@ViViDboarder] - [#23359])
- Add media player external url ([@balloob] - [#23337]) ([media_player docs])
- Fix race condition. ([@mitchellrj] - [#21244]) ([plex docs])
@ -859,7 +859,6 @@ Experiencing issues introduced by this release? Please report them in our [issue
[tplink_lte docs]: /integrations/tplink_lte/
[traccar docs]: /integrations/traccar/
[trend docs]: /integrations/trend/
[ubee docs]: /integrations/ubee/
[upc_connect docs]: /integrations/upc_connect/
[upnp docs]: /integrations/upnp/
[velux docs]: /integrations/velux/

View File

@ -301,7 +301,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Add websock command to query device for triggers ([@emontnemery] - [#24044]) ([automation docs]) ([light docs])
- Uber API is going away on June 13, 2019, remove component ([@robbiet480] - [#24468]) (breaking change)
- Use met.no instead of yr.no in default config ([@thomasloven] - [#24470])
- Bump pyubee to 0.7 to support more models ([@mzdrale] - [#24477]) ([ubee docs])
- Bump pyubee to 0.7 to support more models ([@mzdrale] - [#24477])
- Somfy open api ([@tetienne] - [#19548]) ([somfy docs]) (new-platform)
- Add APRS device tracker component ([@PhilRW] - [#22469]) ([aprs docs]) (new-platform)
- Add Linky sensors : yesterday + months + years ([@Quentame] - [#23726]) (breaking change)
@ -780,7 +780,6 @@ Experiencing issues introduced by this release? Please report them in our [issue
[totalconnect docs]: /integrations/totalconnect/
[traccar docs]: /integrations/traccar/
[tradfri docs]: /integrations/tradfri/
[ubee docs]: /integrations/ubee/
[unifi docs]: /integrations/unifi/
[velbus docs]: /integrations/velbus/
[velux docs]: /integrations/velux/

View File

@ -471,7 +471,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Fix possible OpenUV exception due to missing data ([@bachya] - [#26958]) ([openuv docs])
- Update pythonegardia to 1.0.40 ([@SneakSnackSnake] - [#27009]) ([egardia docs])
- Improve ecobee service schemas ([@marthoc] - [#26955]) ([ecobee docs])
- Add more providers, bump yessssms version to 0.4.1 ([@flowolf] - [#26874]) ([yessssms docs])
- Add more providers, bump yessssms version to 0.4.1 ([@flowolf] - [#26874])
- Upgrade youtube_dl to 2019.09.28 ([@BKPepe] - [#27031]) ([media_extractor docs])
- Add availability_template to Template Cover platform ([@grillp] - [#26509]) ([template docs])
- Add availability_template to Template Binary Sensor platform ([@grillp] - [#26510]) ([template docs])
@ -1001,7 +1001,6 @@ Experiencing issues introduced by this release? Please report them in our [issue
[xbox_live docs]: /integrations/xbox_live/
[xiaomi_aqara docs]: /integrations/xiaomi_aqara/
[yandex_transport docs]: /integrations/yandex_transport/
[yessssms docs]: /integrations/yessssms/
[zha docs]: /integrations/zha/
[zone docs]: /integrations/zone/
[zwave docs]: /integrations/zwave/

View File

@ -556,7 +556,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- move service constants to const.py, move custom services to monoprice domain ([@raman325] - [#29099]) ([monoprice docs]) (breaking change)
- Move imports to top for uptimerobot ([@springstan] - [#29103]) ([uptimerobot docs])
- Move imports to top for twilio_call ([@springstan] - [#29104]) ([twilio_call docs])
- Move imports to top for ubee ([@springstan] - [#29105]) ([ubee docs])
- Move imports to top for ubee ([@springstan] - [#29105])
- Move flexit imports at top-level ([@Quentame] - [#29097]) ([flexit docs])
- Move flunearyou imports at top-level ([@Quentame] - [#29096]) ([flunearyou docs])
- Move folder_watcher imports at top-level ([@Quentame] - [#29095]) ([folder_watcher docs])
@ -1771,7 +1771,6 @@ Experiencing issues introduced by this release? Please report them in our [issue
[tts docs]: /integrations/tts/
[tuya docs]: /integrations/tuya/
[twilio_call docs]: /integrations/twilio_call/
[ubee docs]: /integrations/ubee/
[unifi docs]: /integrations/unifi/
[unifi_direct docs]: /integrations/unifi_direct/
[universal docs]: /integrations/universal/

View File

@ -723,7 +723,7 @@ Make sure to fill in all fields of the issue template, that is helping us a lot!
- Sort imports according to PEP8 for components starting with "N" ([@basnijholt] - [#29773])
- Sort imports according to PEP8 for components starting with "W" ([@basnijholt] - [#29781])
- Sort imports according to PEP8 for components starting with "Q" ([@basnijholt] - [#29785])
- Sort imports according to PEP8 for components starting with "Y" ([@basnijholt] - [#29783]) ([yale_smart_alarm docs]) ([yamaha docs]) ([yamaha_musiccast docs]) ([yandex_transport docs]) ([yeelightsunflower docs]) ([yessssms docs])
- Sort imports according to PEP8 for components starting with "Y" ([@basnijholt] - [#29783]) ([yale_smart_alarm docs]) ([yamaha docs]) ([yamaha_musiccast docs]) ([yandex_transport docs]) ([yeelightsunflower docs])
- Sort imports according to PEP8 for components starting with "X" ([@basnijholt] - [#29782]) ([x10 docs]) ([xbox_live docs]) ([xeoma docs]) ([xiaomi_tv docs]) ([xmpp docs]) ([xs1 docs])
- Move imports to top for homekit ([@springstan] - [#29560]) ([homekit docs])
- Cleanup removed component ([@pvizeli] - [#29788])
@ -2083,7 +2083,6 @@ Make sure to fill in all fields of the issue template, that is helping us a lot!
[yandex_transport docs]: /integrations/yandex_transport/
[yeelight docs]: /integrations/yeelight/
[yeelightsunflower docs]: /integrations/yeelightsunflower/
[yessssms docs]: /integrations/yessssms/
[zamg docs]: /integrations/zamg/
[zengge docs]: /integrations/zengge/
[zeroconf docs]: /integrations/zeroconf/

View File

@ -765,7 +765,7 @@ Hats over your heart for these shuttered integrations. Pour one out for:
- Search: Add search to default config and don't resolve area ([@bramkragten] - [#30762]) ([default_config docs]) ([search docs])
- Allow input_* and timer component setup without config ([@Adminiuga] - [#30772]) ([input_boolean docs]) ([input_number docs]) ([input_select docs]) ([input_text docs]) ([timer docs])
- Add Config Flow support, Device Registry support, available property to vizio component ([@raman325] - [#30653]) ([vizio docs]) (breaking change)
- Update pyubee to 0.8 ([@mzdrale] - [#30785]) ([ubee docs])
- Update pyubee to 0.8 ([@mzdrale] - [#30785])
- Add support for vacuums to Alexa. ([@ochlocracy] - [#30764]) ([alexa docs])
- Mark hide_entity deprecated in automation integration ([@frenck] - [#30799]) ([automation docs]) (breaking change)
- Bump librouteros to 3.0.0 ([@springstan] - [#30800]) ([mikrotik docs])
@ -1544,7 +1544,6 @@ Hats over your heart for these shuttered integrations. Pour one out for:
[tod docs]: /integrations/tod/
[tplink docs]: /integrations/tplink/
[tuya docs]: /integrations/tuya/
[ubee docs]: /integrations/ubee/
[velbus docs]: /integrations/velbus/
[versasense docs]: /integrations/versasense/
[vicare docs]: /integrations/vicare/

View File

@ -121,7 +121,7 @@ We have made some changes to Lovelace that might impact your custom card, so be
## New Integrations
- Add Salt Fiber Box device tracker ([@bjornorri] - [#30986]) ([salt docs]) (new-integration)
- Add Salt Fiber Box device tracker ([@bjornorri] - [#30986]) (new-integration)
- Add GDACS feed integration ([@exxamalte] - [#31235]) ([gdacs docs]) (new-integration)
- Add Minecraft Server Integration ([@elmurato] - [#30992]) ([minecraft_server docs]) (new-integration)
- Add MELCloud integration ([@vilppuvuorinen] - [#30712]) ([melcloud docs]) (new-integration)
@ -487,7 +487,7 @@ Added a Coronavirus integration to help monitor the ongoing epidemic. [More info
- Catch device not found in device automations ([@balloob] - [#31401]) ([device_automation docs])
- Upgrade numpy to 1.18.1 ([@fabaff] - [#31411]) ([iqvia docs]) ([opencv docs]) ([tensorflow docs]) ([trend docs])
- Update pyhomematic to 0.1.64 ([@danielperna84] - [#31406]) ([homematic docs])
- Add Salt Fiber Box device tracker ([@bjornorri] - [#30986]) ([salt docs]) (new-integration)
- Add Salt Fiber Box device tracker ([@bjornorri] - [#30986]) (new-integration)
- Upgrade alpha_vantage to 2.1.3 ([@fabaff] - [#31388]) ([alpha_vantage docs])
- Search specific train in Nederlandse Spoorwegen ([@gurbyz] - [#28898]) ([nederlandse_spoorwegen docs])
- Enable SUPPORT_VOLUME_STEP ([@Cloudenius] - [#31023]) ([pioneer docs])
@ -1194,7 +1194,6 @@ Added a Coronavirus integration to help monitor the ongoing epidemic. [More info
[roku docs]: /integrations/roku/
[rpi_gpio_pwm docs]: /integrations/rpi_gpio_pwm/
[sabnzbd docs]: /integrations/sabnzbd/
[salt docs]: /integrations/salt/
[samsungtv docs]: /integrations/samsungtv/
[scrape docs]: /integrations/scrape/
[script docs]: /integrations/script/

View File

@ -746,7 +746,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
- Bump pyicloud to 0.9.3 ([@Quentame] - [#32582]) ([icloud docs])
- Upgrade youtube_dl to version 2020.03.08 ([@BKPepe] - [#32581]) ([media_extractor docs])
- Bump denonavr to 0.8.0 ([@scarface-4711] - [#32578]) ([denonavr docs])
- Add support for Ubee Router DVW32CB ([@seanvictory] - [#32406]) ([ubee docs])
- Add support for Ubee Router DVW32CB ([@seanvictory] - [#32406])
- Bump rflink to 0.0.52 ([@jeyrb] - [#32588]) ([rflink docs])
- Correct grammatical error in CUSTOM_WARNING ([@davet2001] - [#32569])
- Add Steam game ID and screenshot paths as attributes ([@i00] - [#32005]) ([steam_online docs])
@ -1441,7 +1441,6 @@ Experiencing issues introduced by this release? Please report them in our [issue
[transmission docs]: /integrations/transmission/
[tts docs]: /integrations/tts/
[twitch docs]: /integrations/twitch/
[ubee docs]: /integrations/ubee/
[unifi docs]: /integrations/unifi/
[upnp docs]: /integrations/upnp/
[utility_meter docs]: /integrations/utility_meter/

View File

@ -651,7 +651,7 @@ These integrations have been removed. The websites for both have changed, causin
- Type hint improvements ([@scop] - [#32905]) ([directv docs]) ([directv docs]) ([gtfs docs]) ([here_travel_time docs]) ([remote docs]) ([switch docs]) ([switcher_kis docs]) ([vizio docs]) ([zone docs])
- Small tweaks ([@dshokouhi] - [#32946]) ([obihai docs])
- Resolve unexpected exception caused by sinch error_code being a string ([@bendikrb] - [#32929]) ([sinch docs])
- Bump pyubee to 0.10 to support more Ubee routers ([@mzdrale] - [#32934]) ([ubee docs])
- Bump pyubee to 0.10 to support more Ubee routers ([@mzdrale] - [#32934])
- Add support for homekit valve accessories to homekit_controller ([@Jc2k] - [#32937]) ([homekit_controller docs])
- Remove deprecated features from MQTT platforms ([@emontnemery] - [#32909]) ([mqtt docs]) (breaking change)
- Add pending to template alarm ([@MatthewFlamm] - [#31614]) ([template docs])
@ -1450,7 +1450,6 @@ These integrations have been removed. The websites for both have changed, causin
[tplink docs]: /integrations/tplink/
[tts docs]: /integrations/tts/
[twentemilieu docs]: /integrations/twentemilieu/
[ubee docs]: /integrations/ubee/
[unifi docs]: /integrations/unifi/
[velbus docs]: /integrations/velbus/
[version docs]: /integrations/version/

View File

@ -1088,7 +1088,7 @@ is automatically imported after upgrading and can be safely removed afterward.
- Use reference strings in Hunter Douglas PowerView ([@SNoof85] - [#41291]) ([hunterdouglas_powerview docs])
- Indicate to user that remote was turned off when call was attempted ([@elupus] - [#40715]) ([broadlink docs])
- Fix reported temperatures in Maxcube ([@Bre77] - [#41259]) ([maxcube docs])
- Improve yessssms test notify ([@sycx2] - [#41283]) ([yessssms docs])
- Improve yessssms test notify ([@sycx2] - [#41283])
- Use reference strings in ambient_station ([@SNoof85] - [#41276]) ([ambient_station docs])
- Don't use asynctest directly ([@balloob] - [#41306])
- Rewrite sigfox unittest tests to pytest ([@frangiz] - [#41302]) ([sigfox docs])
@ -2866,7 +2866,6 @@ is automatically imported after upgrading and can be safely removed afterward.
[xiaomi_aqara docs]: /integrations/xiaomi_aqara/
[xiaomi_miio docs]: /integrations/xiaomi_miio/
[yamaha_musiccast docs]: /integrations/yamaha_musiccast/
[yessssms docs]: /integrations/yessssms/
[zabbix docs]: /integrations/zabbix/
[zengge docs]: /integrations/zengge/
[zeroconf docs]: /integrations/zeroconf/

View File

@ -0,0 +1,123 @@
---
layout: post
title: "Home Assistant OS Release 5"
description: "Improved name resolution, external data disk, more reliability and supporting 3 new devices!"
date: 2020-12-13 00:00:00
date_formatted: "December 13, 2020"
author: Stefan Agner
author_twitter: falstaff_ch
comments: true
categories: Release-Notes
og_image: /images/blog/2020-12-13-os5/social.png
---
<img src='/images/blog/2020-12-13-os5/social.png' style='border: 0;box-shadow: none;'>
Today we also release Home Assistant OS 5.8, the first stable version of the 5.x
release series.
**Highlights**:
- Improved Multicast Name Resolution on OS level
- External Data Disk Feature
- Improved Reliability against Container corruption
- New support: Raspberry Pi 4 8GB
- New support: ASUS Tinker Board S
- New support: ODROID-C4
- Improved: OVA Virtual image includes more drivers
## Table of contents
- [Table of contents](#table-of-contents)
- [Operating System Changes](#operating-system-changes)
- [Multicast Name Resolution](#multicast-name-resolution)
- [External Data Disk](#external-data-disk)
- [Improved Reliability](#improved-reliability)
- [Under the Hood](#under-the-hood)
- [Board Support](#board-support)
- [Raspberry Pi](#raspberry-pi)
- [ODROID](#odroid)
- [Open Virtualization Appliance/Intel NUC](#open-virtualization-appliance-intel-nuc)
- [New Board Support](#new-board-suport)
- [Other Changes](#other-changes)
## Operating System Changes
### Multicast Name Resolution
Release 5 uses systemd-resolved to provide DNS services on the operating system
level and acts as a multicast name resolution responder. Besides, mDNS
systemd-resolved also supports the LLMNR hostname resolution protocol. In
practice, this makes discovering a new installation of Home Assistant OS working
in most situations, either using `http://homeassistant.local:8123` or
`http://homeassistant:8123`.
### External Data Disk
In release 4 we introduced external data disk support. The command `datactl`
allows moving the main data partition to any disk connected to the system. The
boot partition and main operating system partitions stay on the boot medium
(typically the SD card). Using this approach is more reliable than booting the
system from USB. Booting from USB requires several parts of the software stack
to rediscover the external storage. In release 5 we made the external data disk
feature more robust and the initial moving process much faster. We plan to
improve that feature even more and are happy to get your feedback!
### Improved Reliability
The main system service to start Home Assistant Supervisor is now more reliable.
Home Assistant OS is now able to detect a corrupted supervisor container in most
situations and automatically downloads a new version of it. File system checks
have also been expanded to the boot partition, which makes sure that all file
systems are being checked now.
### Under the Hood
Under the hood, we updated to Buildroot 2020.11, which brings tons of new software
versions along with bug and security fixes. Some key components which received
an update were systemd 246 and AppArmor version 3.0.
## Board Support
### Raspberry Pi
All Raspberry Pi versions now use Linux Kernel 5.4, just like Raspberry Pi OS.
With the move to U-Boot 2020.10, we are now also supporting Raspberry Pi with 8GB
of memory. With the new kernel and U-Boot Home Assistant OS can now also run on
the Compute Module 4 as well as the Pi 400 (the keyboard). A keyboard is
probably not the ideal form factor for a headless system such as Home Assistant
OS, but it comes with good cooling, which makes it not the worst choice :-). We
recently tested the 64-bit variant of Home Assistant OS much more and feel
comfortable to recommend the 64-bit version for Raspberry Pi 4.
### ODROID
The ODROID platforms now use Linux 5.9, which brings improved support for all
ODROID platforms such as the ODROID N2(+). For the N2(+) the Real-Time Clock is
now supported as well.
### Open Virtualization Appliance/Intel NUC
The x86 platforms (Intel NUC, OVA - Open Virtualization Appliance) now use
Linux 5.9. The kernel for OVA images has new drivers enabled for Intel Network
devices with Virtual Function, PCIe passthrough for Hyper-V, or support for
Audio (HDA audio devices).
### New Board Support
Besides the ASUS Tinker Board, we now also support the Tinker Board S, a variant
with fast on-board eMMC storage. Thanks to [@ubergeek801] we now also have support
for ODROID-C4, a cost-effective alternative to Raspberry Pi in a similar form
factor.
## Other Changes
The build pipeline is now using GitHub Actions and we compress the images using
the xz compression algorithm instead of gz. The flashing process will stay the
same: Etcher supports flashing from gz as well as xz.
This is all I can think of for now. The release 5.8 will be on the stable
channel today, so watch out for the update notification in the Supervisor
section. Images are available in the release section over on
[GitHub](https://github.com/home-assistant/operating-system/releases).

File diff suppressed because it is too large Load Diff

View File

@ -367,7 +367,6 @@
/components/device_tracker.tplink /integrations/tplink
/components/device_tracker.traccar /integrations/traccar
/components/device_tracker.trackr /integrations/trackr
/components/device_tracker.ubee /integrations/ubee
/components/device_tracker.ubus /integrations/ubus
/components/device_tracker.unifi /integrations/unifi
/components/device_tracker.unifi_direct /integrations/unifi_direct
@ -604,7 +603,6 @@
/components/notify.twitter /integrations/twitter
/components/notify.webostv /integrations/webostv
/components/notify.xmpp /integrations/xmpp
/components/notify.yessssms /integrations/yessssms
/components/openalpr /integrations/openalpr_local
/components/pollen /integrations/iqvia
/components/public_sensor.netatmo /integrations/netatmo
@ -1917,7 +1915,6 @@
/components/twilio_sms /integrations/twilio_sms
/components/twitch /integrations/twitch
/components/twitter /integrations/twitter
/components/ubee /integrations/ubee
/components/ubus /integrations/ubus
/components/ue_smart_radio /integrations/ue_smart_radio
/components/uk_transport /integrations/uk_transport
@ -2001,7 +1998,6 @@
/components/yandextts /integrations/yandextts
/components/yeelight /integrations/yeelight
/components/yeelightsunflower /integrations/yeelightsunflower
/components/yessssms /integrations/yessssms
/components/yi /integrations/yi
/components/zabbix /integrations/zabbix
/components/zamg /integrations/zamg
@ -2055,6 +2051,8 @@
/ecosystem/notebooks/stats https://data.home-assistant.io
/ios/whats-new https://companion.home-assistant.io/docs/getting_started/getting-started
/integrations/auth /docs/authentication
/integrations/automation /docs/automation
/integrations/blueprint /docs/automation/using_blueprints
/integrations/binary_sensor.knx /integrations/knx#binary-sensor
/integrations/climate.knx /integrations/knx#climate
/integrations/cover.knx /integrations/knx#cover

776
source/blue/index.html Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Some files were not shown because too many files have changed in this diff Show More