2595 lines
No EOL
30 KiB
HTML
2595 lines
No EOL
30 KiB
HTML
<!doctype html>
|
|
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
|
|
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
|
|
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
|
|
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->
|
|
|
|
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
|
<title>Automation - Home Assistant</title>
|
|
<meta name="author" content="Paulus Schoutsen">
|
|
|
|
<meta name="description" content="Instructions how to setup automation within Home Assistant.">
|
|
|
|
<meta name="viewport" content="width=device-width">
|
|
<link rel="canonical" href="https://home-assistant.io/components/automation.html">
|
|
|
|
<meta property="fb:app_id" content="338291289691179">
|
|
<meta property="og:title" content="Automation">
|
|
<meta property="og:site_name" content="Home Assistant">
|
|
<meta property="og:url" content="https://home-assistant.io/components/automation.html/">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:description" content="Instructions how to setup automation within Home Assistant.">
|
|
<meta property="og:image" content="https://home-assistant.io/images/home-assistant-logo-2164x2164.png">
|
|
|
|
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet">
|
|
<link href="/atom.xml" rel="alternate" title="Home Assistant" type="application/atom+xml">
|
|
<link rel='shortcut icon' href='/images/favicon.ico' />
|
|
<link rel='icon' type='image/png' href='/images/favicon-192x192.png' sizes='192x192' />
|
|
</head>
|
|
|
|
|
|
<body >
|
|
|
|
<header>
|
|
<div class="grid-wrapper">
|
|
<div class="grid">
|
|
|
|
<div class="grid__item three-tenths lap-two-sixths palm-one-whole ha-title">
|
|
<a href="/" class="site-title">
|
|
<img width='40' src='/images/favicon-192x192.png'> Home Assistant
|
|
</a>
|
|
</div>
|
|
|
|
<div class="grid__item seven-tenths lap-four-sixths palm-one-whole">
|
|
<nav>
|
|
<input type="checkbox" id="toggle">
|
|
<label for="toggle" class="toggle" data-open="Main Menu" data-close="Close Menu"></label>
|
|
<ul class="menu pull-right">
|
|
<li>
|
|
<a href="/getting-started/">Getting started</a>
|
|
<ul>
|
|
<li><a href='/getting-started/'>Installing Home Assistant</a></li>
|
|
<li><a href='/getting-started/configuration.html'>Configuration basics</a></li>
|
|
<li><a href='/getting-started/devices.html'>Adding devices</a></li>
|
|
<li><a href='/getting-started/presence-detection.html'>Presence detection</a></li>
|
|
<li><a href='/getting-started/automation.html'>Automation</a></li>
|
|
<li><a href='/cookbook'>Configuration cookbook</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href='/components/'>Components</a></li>
|
|
<li>
|
|
<a href="/developers/">Developers</a>
|
|
<ul>
|
|
<li><a href="/developers/architecture.html">Architecture</a></li>
|
|
<li><a href="/developers/frontend.html">Frontend development</a></li>
|
|
<li><a href="/developers/creating_components.html">
|
|
Creating components
|
|
</a></li>
|
|
<li><a href="/developers/add_new_platform.html">
|
|
Adding platform support
|
|
</a></li>
|
|
<li><a href="/developers/api.html">API</a></li>
|
|
<li><a href="/developers/credits.html">Credits</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="/blog/">Blog</a></li>
|
|
<li><a href="/help/">Need help?</a></li>
|
|
</ul>
|
|
|
|
</nav>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
|
|
|
|
<div class="grid-wrapper">
|
|
<div class="grid grid-center">
|
|
|
|
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
|
|
|
|
|
|
<article class="page">
|
|
<header>
|
|
<h1 class="title indent">
|
|
Automation
|
|
</h1>
|
|
</header>
|
|
<hr class="divider">
|
|
|
|
<p>This page will go into more detail about the various options the <code>automation</code> component offers. If
|
|
you haven’t yet, read the <a href="/getting-started/automation.html">getting started page on automation</a>.</p>
|
|
|
|
<p>A configuration section of an automation requires a <code>trigger</code> and an <code>action</code> section. <code>condition</code> and
|
|
<code>condition_type</code> are optional. To keep this page compact, all following sections will not show the
|
|
full configuration but only the relevant part.</p>
|
|
|
|
<pre><code class="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: group.all_devices
|
|
state: 'home'
|
|
condition:
|
|
# Prefix the first line of each condition configuration
|
|
# with a '-'' to enter multiple
|
|
- platform: state
|
|
entity_id: group.all_devices
|
|
state: 'home'
|
|
- platform: time
|
|
after: '16:00:00'
|
|
before: '23:00:00'
|
|
action:
|
|
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: group.all_devices
|
|
state: 'not_home'
|
|
action:
|
|
service: light.turn_off
|
|
entity_id: group.all_lights
|
|
|
|
# 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:
|
|
platform: time
|
|
after: '20:00'
|
|
action:
|
|
service: notify.notify
|
|
data:
|
|
message: 'Paulus left the house'
|
|
</code></pre>
|
|
|
|
<ul>
|
|
<li><a href="#conditions">Jump to conditions</a></li>
|
|
<li><a href="#actions">Jump to actions</a></li>
|
|
<li><a href="#troubleshooting">Jump to troubleshooting</a></li>
|
|
</ul>
|
|
|
|
|
|
<h2><a class='title-link' name='triggers' href='#triggers'></a> Triggers</h2>
|
|
|
|
<p>Triggers are what starts the processing of an automation rule. It is possible to specify multiple
|
|
triggers for the same rule. Once a trigger starts, Home Assistant will validate the conditions, if any,
|
|
and call the action.</p>
|
|
|
|
<h4><a class='title-link' name='event-trigger' href='#event-trigger'></a> Event trigger</h4>
|
|
|
|
<p>Triggers when an event is being processed. Events are the raw building blocks of Home Assistant.
|
|
You can match events on just the event name or also require specific event data to be present.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
trigger:
|
|
platform: event
|
|
event_type: MY_CUSTOM_EVENT
|
|
# optional
|
|
event_data:
|
|
mood: happy
|
|
</code></pre>
|
|
|
|
<h4><a class='title-link' name='mqtt-trigger' href='#mqtt-trigger'></a> MQTT trigger</h4>
|
|
|
|
<p>Triggers when a specific message is received on given topic. Optionally can match on the payload
|
|
being sent over the topic.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
trigger:
|
|
platform: mqtt
|
|
topic: living_room/switch/ac
|
|
# Optional
|
|
payload: 'on'
|
|
</code></pre>
|
|
|
|
<h4><a class='title-link' name='numeric-state-trigger' href='#numeric-state-trigger'></a> Numeric state trigger</h4>
|
|
|
|
<p>On state change of a specified entity, attempts to parse the state as a number and triggers if value
|
|
is above and/or below a threshold.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
trigger:
|
|
platform: numeric_state
|
|
entity_id: sensor.temperature
|
|
# At least one of the following required
|
|
above: 17
|
|
below: 25
|
|
</code></pre>
|
|
|
|
<h4><a class='title-link' name='state-trigger' href='#state-trigger'></a> State trigger</h4>
|
|
|
|
<p>Triggers when the state of an entity changes. If only entity_id given will match all state changes.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
trigger:
|
|
platform: state
|
|
entity_id: device_tracker.paulus
|
|
# Optional
|
|
from: 'not_home'
|
|
to: 'home'
|
|
</code></pre>
|
|
|
|
<p class='note warning'>
|
|
Use quotes around your values for <code>from</code> and <code>to</code> to avoid the YAML parser
|
|
interpreting some values as booleans.
|
|
</p>
|
|
|
|
|
|
<h4><a class='title-link' name='sun-trigger' href='#sun-trigger'></a> Sun trigger</h4>
|
|
|
|
<p>Trigger when the sun is setting or rising. An optional time offset can be given to have it trigger for
|
|
example 45 minutes before sunset, when dusk is setting in.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
trigger:
|
|
platform: sun
|
|
# Possible values: sunset, sunrise
|
|
event: sunset
|
|
# Optional time offset. This example is 45 minutes.
|
|
offset: '-00:45:00'
|
|
</code></pre>
|
|
|
|
<h4><a class='title-link' name='time-trigger' href='#time-trigger'></a> Time trigger</h4>
|
|
|
|
<p>Time can be triggered in many ways. The most common is to specify <code>after</code> and trigger at a specific
|
|
point in time each day. Alternatively, you can also match if the hour, minute or second of the current
|
|
time has a specific value. For example, by only setting minutes in the config to 5 it will trigger every
|
|
hour when it is 5 minutes past whole. You cannot use <code>after</code> together with hour, minute or second.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
trigger:
|
|
platform: time
|
|
# All following are optional.
|
|
# When 'after' is used, you cannot also match on hour, minute, seconds.
|
|
# Military time format.
|
|
# after: '15:32:00'
|
|
hours: 0
|
|
minutes: 5
|
|
seconds: 0
|
|
weekday:
|
|
- sat
|
|
- sun
|
|
</code></pre>
|
|
|
|
<p>You can use <code>weekday</code> to limit the trigger times to speific days as well (also available in conditions).
|
|
Valid values for <code>weekday</code> are (<code>sun</code>, <code>mon</code>, <code>tue</code>, <code>wed</code>, <code>thu</code>, <code>fri</code> & <code>sat</code>)</p>
|
|
|
|
<p>The above example will trigger on Saturday and Sunday every hour on the 5 (2:05, 3:05, 4:05, etc).</p>
|
|
|
|
<h4><a class='title-link' name='zone-trigger' href='#zone-trigger'></a> Zone trigger</h4>
|
|
|
|
<p>Zone triggers can trigger when an entity is entering or leaving the zone. For zone automation to work,
|
|
you need to have setup a device tracker platform that supports reporting GPS coordinates. Currently
|
|
this is limited to the <a href="/components/device_tracker.owntracks.html">OwnTracks platform</a>.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
trigger:
|
|
platform: zone
|
|
entity_id: device_tracker.paulus
|
|
zone: zone.home
|
|
# Event is either enter or leave
|
|
event: enter
|
|
</code></pre>
|
|
|
|
<h2><a class='title-link' name='conditions' href='#conditions'></a> Conditions</h2>
|
|
|
|
<p>Conditions are an optional part of an automation rule and be used to prevent an action from happening
|
|
when triggered. Conditions look very familiar to triggers but are very different. A trigger will look
|
|
at events happening at the system while a condition only looks at how the system looks right now.
|
|
A trigger can observe that a switch is being turned on. A condition can only see if a switch is on
|
|
or off.</p>
|
|
|
|
<p>An automation rule can have mulitiple triggers. By default the action will only fire if all conditions
|
|
pass. An optional key <code>condition_type: 'or'</code> can be set on the automation rule to fire action if any
|
|
condition matches. In the example below, the automation would trigger if the time is before 05:00 <em>OR</em> after 20:00.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
condition_type: or
|
|
condition:
|
|
- platform: time
|
|
before: '05:00'
|
|
- platform: time
|
|
after: '20:00'
|
|
</code></pre>
|
|
|
|
<p>If your triggers and conditions are exactly the same, you can use a shortcut to specify conditions.
|
|
In this case, triggers that are not valid conditions will be ignored.
|
|
<code>yaml
|
|
automation:
|
|
condition: use_trigger_values
|
|
</code></p>
|
|
|
|
<h4><a class='title-link' name='numeric-state-condition' href='#numeric-state-condition'></a> Numeric state condition</h4>
|
|
|
|
<p>Attempts to parse the state of specified entity as a number and triggers if value is above and/or
|
|
below a threshold.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
condition:
|
|
platform: numeric_state
|
|
entity_id: sensor.temperature
|
|
# At least one of the following required
|
|
above: 17
|
|
below: 25
|
|
</code></pre>
|
|
|
|
<h4><a class='title-link' name='state-condition' href='#state-condition'></a> State condition</h4>
|
|
|
|
<p>Tests if an entity is a specified state.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
condition:
|
|
platform: state
|
|
entity_id: device_tracker.paulus
|
|
state: not_home
|
|
</code></pre>
|
|
|
|
<h4><a class='title-link' name='time-condition' href='#time-condition'></a> Time condition</h4>
|
|
|
|
<p>The time condition can test if it is after a specified time, before a specified time or if it is a
|
|
certain day of the week</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
condition:
|
|
platform: time
|
|
# At least one of the following is required.
|
|
after: '15:00:00'
|
|
before: '23:00:00'
|
|
weekday:
|
|
- mon
|
|
- wed
|
|
- fri
|
|
</code></pre>
|
|
|
|
<p>Valid values for <code>weekday</code> are (sun, mon, tue, wed, thu, fri & sat)</p>
|
|
|
|
<h4><a class='title-link' name='zone-condition' href='#zone-condition'></a> Zone condition</h4>
|
|
|
|
<p>Zone conditions test if an entity is in a certain zone. For zone automation to work,
|
|
you need to have setup a device tracker platform that supports reporting GPS coordinates. Currently
|
|
this is limited to the <a href="/components/device_tracker.owntracks.html">OwnTracks platform</a>.</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
condition:
|
|
platform: zone
|
|
entity_id: device_tracker.paulus
|
|
zone: zone.home
|
|
</code></pre>
|
|
|
|
<h2><a class='title-link' name='actions' href='#actions'></a> Actions</h2>
|
|
|
|
<p>When an automation rule fires, it calls a service. For this service you can specify an entity id it
|
|
should apply to and optional service parameters (to specify for example the brightness).</p>
|
|
|
|
<pre><code class="yaml">automation:
|
|
# Change the light in the kitchen and living room to 150 brightness and color red.
|
|
action:
|
|
service: homeassistant.turn_on
|
|
entity_id:
|
|
- light.kitchen
|
|
- light.living_room
|
|
data:
|
|
brightness: 150
|
|
rgb_color: [255, 0, 0]
|
|
</code></pre>
|
|
|
|
<pre><code class="yaml">automation:
|
|
# Notify me on my mobile phone of an event
|
|
action:
|
|
service: notify.notify
|
|
data:
|
|
message: Something just happened, better take a look!
|
|
</code></pre>
|
|
|
|
<p>If you want to specify multiple services to be called or include a delay, have a look at the
|
|
<a href="/components/script.html">script component</a>. If you want to describe how certain entities should look,
|
|
check out the <a href="/components/scene.html">scene component</a>.</p>
|
|
|
|
<h2><a class='title-link' name='troubleshooting' href='#troubleshooting'></a> Troubleshooting</h2>
|
|
|
|
<p>You can verify that your automation rules are being initialized correctly by watching both the realtime
|
|
logs and also the logbook. The realtime logs will show the rules being initialized (once for each trigger):</p>
|
|
|
|
<pre><code class="bash">INFO [homeassistant.components.automation] Initialized rule Rainy Day
|
|
INFO [homeassistant.components.automation] Initialized rule Rainy Day
|
|
INFO [homeassistant.components.automation] Initialized rule Rainy Day
|
|
INFO [homeassistant.components.automation] Initialized rule Rain is over
|
|
</code></pre>
|
|
|
|
<p>The Logbook component will show a line entry when an automation is triggered. You can look at the
|
|
previous entry to determine which trigger in the rule triggered the event.</p>
|
|
|
|
<p><img src="/images/components/automation/logbook.png" alt="Logbook example" /></p>
|
|
|
|
</article>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
|
|
<div class="grid">
|
|
|
|
|
|
|
|
<section class="aside-module grid__item one-whole lap-one-half">
|
|
<div class='brand-logo-container section'>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class='section'>
|
|
<h1 class="title delta">Category Automation</h1>
|
|
<ul class='divided'>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li>
|
|
|
|
Automation
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li>
|
|
|
|
<a href='/components/ifttt.html'>IFTTT</a>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li>
|
|
|
|
<a href='/components/keyboard.html'>Keyboard</a>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li>
|
|
|
|
<a href='/components/device_sun_light_trigger.html'>Presence based lights</a>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li>
|
|
|
|
<a href='/components/script.html'>Scripts</a>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
<li>
|
|
|
|
<a href='/components/shell_command.html'>Shell command</a>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
|
|
</div>
|
|
|
|
</aside>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<footer>
|
|
<div class="grid-wrapper">
|
|
<div class="grid">
|
|
<div class="grid__item">
|
|
<p class="copyright">
|
|
<span class="credit">Powered by <a href="http://octopress.org">Octopress</a>, <a href='http://jekyllrb.com/'>Jekyll</a> and the <a href='https://github.com/coogie/oscailte'>Oscalite theme</a>. Hosted by <a href='https://pages.github.com/'>GitHub</a> and served by <a href='https://cloudflare.com'>CloudFlare</a>.</span>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</footer>
|
|
|
|
<!--[if lt IE 7]>
|
|
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
|
|
<![endif]-->
|
|
|
|
|
|
|
|
|
|
<script>
|
|
var _gaq=[['_setAccount','UA-57927901-1'],['_trackPageview']];
|
|
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
|
|
g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
|
|
s.parentNode.insertBefore(g,s)}(document,'script'));
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</body>
|
|
</html> |