Merge branch 'rc' into current
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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
@ -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
@ -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
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
59
sass/custom/_features.scss
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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';
|
@ -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 »](/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 »](/docs/automation/basics/)
|
||||
|
46
source/_docs/automation/basics.markdown
Normal 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 »](/docs/automation/editor/)
|
@ -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>
|
||||
|
@ -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 %}
|
53
source/_docs/automation/modes.markdown
Normal 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:
|
||||
- ...
|
||||
```
|
46
source/_docs/automation/services.markdown
Normal 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.
|
@ -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
|
||||
|
||||
|
45
source/_docs/automation/using_blueprints.markdown
Normal 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
|
145
source/_docs/automation/yaml.markdown
Normal 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'.
|
22
source/_docs/blueprint.markdown
Normal 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 »](/docs/blueprint/tutorial/)
|
183
source/_docs/blueprint/schema.markdown
Normal 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
|
492
source/_docs/blueprint/selectors.markdown
Normal 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.
|
||||
|
||||

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

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

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

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

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

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

|
||||
|
||||
This selector does not have any other options; therefore, it only has its key.
|
||||
|
||||
```yaml
|
||||
time:
|
||||
```
|
229
source/_docs/blueprint/tutorial.markdown
Normal 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>
|
||||
|
||||

|
||||
|
||||
## 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.
|
@ -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.
|
||||
|
@ -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>
|
||||
|
98
source/_includes/custom/features.html
Normal 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
|
||||
Assistant’s 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>
|
@ -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
|
||||
|
@ -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].
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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>
|
||||
|
@ -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 %}
|
||||
|
14
source/_integrations/blueprint.markdown
Normal 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>
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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`)
|
||||
|
@ -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
|
224
source/_integrations/fireservicerota.markdown
Normal 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
|
||||
```
|
@ -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
|
||||
|
@ -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'>
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
46
source/_integrations/kulersky.markdown
Normal 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\``
|
||||
```
|
@ -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:
|
||||
|
@ -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.
|
||||
|
32
source/_integrations/motion_blinds.markdown
Normal 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>
|
@ -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.
|
||||
|
20
source/_integrations/number.markdown
Normal 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
|
@ -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).
|
||||
|
@ -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",
|
||||
|
@ -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**.
|
||||
|
@ -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
|
||||
|
@ -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.
|
132
source/_integrations/scene.mqtt.markdown
Normal 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"}'
|
||||
```
|
@ -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
|
||||
|
@ -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` |
|
||||
|
@ -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/).
|
||||
|
||||
|
18
source/_integrations/srp_energy.markdown
Normal 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.
|
@ -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.
|
||||
|
28
source/_integrations/twinkly.markdown
Normal 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._
|
||||
|
@ -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.
|
@ -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
|
||||
````
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
```
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
||||

|
||||
|
||||
<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.
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
@ -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/
|
||||
|
123
source/_posts/2020-12-13-home-assistant-os-release-5.markdown
Normal 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).
|
1372
source/_posts/2020-12-13-release-202012.markdown
Normal 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
BIN
source/images/blog/2020-12-13-os5/social.png
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
source/images/blog/2020-12/blueprint-ui.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
source/images/blog/2020-12/blueprints.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
source/images/blog/2020-12/disable-device.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
source/images/blog/2020-12/entity-areas.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
source/images/blog/2020-12/social.png
Normal file
After Width: | Height: | Size: 123 KiB |
BIN
source/images/blue/blue1.png
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
source/images/blue/blue2.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
source/images/blue/blue3.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
source/images/blue/blue_3d.jpg
Normal file
After Width: | Height: | Size: 304 KiB |
BIN
source/images/blue/blue_dev_mode.png
Normal file
After Width: | Height: | Size: 270 KiB |
BIN
source/images/blue/blue_hero.jpg
Normal file
After Width: | Height: | Size: 382 KiB |
BIN
source/images/blue/blue_narrow.jpg
Normal file
After Width: | Height: | Size: 215 KiB |
BIN
source/images/blue/blue_zen_mode.png
Normal file
After Width: | Height: | Size: 258 KiB |
BIN
source/images/blueprints/selector-action.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
source/images/blueprints/selector-boolean.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
source/images/blueprints/selector-device.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
source/images/blueprints/selector-entity.png
Normal file
After Width: | Height: | Size: 6.1 KiB |