home-assistant.github.io/docs/ecosystem/ios/notifications/actions/index.html
2017-11-18 20:42:08 +00:00

457 lines
29 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>Actionable notifications - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="Making push notifications a two way system">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/docs/ecosystem/ios/notifications/actions/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Actionable notifications">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/docs/ecosystem/ios/notifications/actions/">
<meta property="og:type" content="article">
<meta property="og:description" content="Making push notifications a two way system">
<meta property="og:image" content="https://home-assistant.io/images/default-social.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@home_assistant">
<meta name="twitter:title" content="Actionable notifications">
<meta name="twitter:description" content="Making push notifications a two way system">
<meta name="twitter:image" content="https://home-assistant.io/images/default-social.png">
<link href="/stylesheets/screen.css" media="screen, projection, print" 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 class='site-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='/demo/favicon-192x192.png'>
<span>Home Assistant</span>
</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></li>
<li><a href="/components/">Components</a></li>
<li><a href="/docs/">Docs</a></li>
<li><a href="/cookbook/">Examples</a></li>
<li><a href="/developers/">Developers</a></li>
<li><a href="/blog/">Blog</a></li>
<li><a href="/help/">Need help?</a></li>
<li><a href='#' class='show-search'><i class="icon-search"></i></a></li>
</ul>
</nav>
<div class='search-container' style='display: none'>
<div class='search'>
<i class="icon-search"></i>
<input id='search' placeholder='Search the docs…'>
<a href='#' class='close'><i class="icon-remove-sign"></i></a>
</div>
</div>
</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">
<div class='edit-github'><a href='https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_docs/ecosystem/ios/notifications/actions.markdown'>Edit this page on GitHub</a></div>
<header>
<h1 class="title indent">
Actionable notifications
</h1>
</header>
<hr class="divider">
<p>Actionable notifications allow you to attach 1-4 custom buttons to a notification. When one of the actions is selected Home Assistant will be notified which action was chosen. This allows you to build complex automations.</p>
<p>Examples of actionable notifications:</p>
<ul>
<li>A notification is sent whenever motion is detected in your home while you are away or asleep. You can add an action to Sound Alarm. When tapped, Home Assistant is notified that the <code class="highlighter-rouge">sound_alarm</code> action was selected. You can add an automation to sound the burglar alarm whenever this event is seen.</li>
<li>Someone rings your front door bell. You can send an action to lock or unlock your front door. When tapped, a notification is sent back to Home Assistant upon which you can build automations.</li>
<li>Send a notification whenever your garage door opens with actions to open and close the garage.</li>
</ul>
<p class="img">
<img src="/images/ios/actions.png" />
Actionable notifications allow the user to send a command back to Home Assistant.
</p>
<h2><a class="title-link" name="overview-of-how-actionable-notifications-work" href="#overview-of-how-actionable-notifications-work"></a> Overview of how actionable notifications work</h2>
<p>In advance of sending a notification:</p>
<ol>
<li>Define a notification category in your Home Assistant configuration which contain 1-4 actions.</li>
<li>At launch iOS app requests notification categories from Home Assistant (can also be done manually in notification settings).</li>
</ol>
<p>When sending a notification:</p>
<ol>
<li>Send a notification with <code class="highlighter-rouge">data.push.category</code> set to a pre-defined notification category identifer.</li>
<li>Push notification delivered to device</li>
<li>User opens notification.</li>
<li>Action tapped</li>
<li>Identifier of action sent back to HA as the <code class="highlighter-rouge">actionName</code> property of the event <code class="highlighter-rouge">ios.notification_action_fired</code>, along with other metadata such as the device and category name.</li>
</ol>
<p class="img">
<img src="/images/ios/NotificationActionFlow.png" />
How the iOS device and Home Assistant work together to enable actionable notifications.
</p>
<h2><a class="title-link" name="definitions" href="#definitions"></a> Definitions</h2>
<ul>
<li>Category - A category represents a type of notification that the app might receive. Think of it as a unique group of actions.</li>
<li>Actions - An action consists of a button title and the information that iOS needs to notify the app when the action is selected. You create separate action objects for distinct action your app supports.</li>
</ul>
<h2><a class="title-link" name="category-parameters" href="#category-parameters"></a> Category parameters</h2>
<ul>
<li><strong>name</strong> (<em>Required</em>): A friendly name for this category.</li>
<li><strong>identifier</strong> (<em>Required</em>): A unique identifier for the category. Must be lowercase and have no special characters or spaces.</li>
<li><strong>actions</strong> (<em>Required</em>): A list of actions.</li>
</ul>
<h2><a class="title-link" name="actions-parameters" href="#actions-parameters"></a> Actions parameters</h2>
<ul>
<li><strong>identifier</strong> (<em>Required</em>): A unique identifier for this action. Must be uppercase and have no special characters or spaces. Only needs to be unique to the category, not unique globally.</li>
<li><strong>title</strong> (<em>Required</em>): The text to display on the button. Keep it short.</li>
<li><strong>activationMode</strong> (<em>Optional</em>): The mode in which to run the app when the action is performed. Setting this to <code class="highlighter-rouge">foreground</code> will make the app open after selecting. Default value is <code class="highlighter-rouge">background</code>.</li>
<li><strong>authenticationRequired</strong> (<em>Optional</em>): If a truthy value (<code class="highlighter-rouge">true</code>, <code class="highlighter-rouge">True</code>, <code class="highlighter-rouge">yes</code>, etc.) the user must unlock the device before the action is performed.</li>
<li><strong>destructive</strong> (<em>Optional</em>): When the value of this property is a truthy value, the system displays the corresponding button differently to indicate that the action is destructive (text color is red).</li>
<li><strong>behavior</strong> (<em>Optional</em>): When <code class="highlighter-rouge">textInput</code> the system provides a way for the user to enter a text response to be included with the notification. The entered text will be sent back to Home Assistant. Default value is <code class="highlighter-rouge">default</code>.</li>
<li><strong>textInputButtonTitle</strong> (<em>Optional</em>): The button label. <em>Required</em> if <code class="highlighter-rouge">behavior</code> is <code class="highlighter-rouge">textInput</code>.</li>
<li><strong>textInputPlaceholder</strong> (<em>Optional</em>): The placeholder text to show in the text input field. Only used if <code class="highlighter-rouge">behavior</code> is <code class="highlighter-rouge">textInput</code> and the device runs iOS 10.</li>
</ul>
<p>Heres a fully built example configuration:</p>
<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">ios</span><span class="pi">:</span>
<span class="s">push</span><span class="pi">:</span>
<span class="s">categories</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">Alarm</span>
<span class="s">identifier</span><span class="pi">:</span> <span class="s1">'</span><span class="s">alarm'</span>
<span class="s">actions</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">identifier</span><span class="pi">:</span> <span class="s1">'</span><span class="s">SOUND_ALARM'</span>
<span class="s">title</span><span class="pi">:</span> <span class="s1">'</span><span class="s">Sound</span><span class="nv"> </span><span class="s">Alarm'</span>
<span class="s">activationMode</span><span class="pi">:</span> <span class="s1">'</span><span class="s">background'</span>
<span class="s">authenticationRequired</span><span class="pi">:</span> <span class="s">yes</span>
<span class="s">destructive</span><span class="pi">:</span> <span class="s">yes</span>
<span class="s">behavior</span><span class="pi">:</span> <span class="s1">'</span><span class="s">default'</span>
<span class="pi">-</span> <span class="s">identifier</span><span class="pi">:</span> <span class="s1">'</span><span class="s">SILENCE_ALARM'</span>
<span class="s">title</span><span class="pi">:</span> <span class="s1">'</span><span class="s">Silence</span><span class="nv"> </span><span class="s">Alarm'</span>
<span class="s">activationMode</span><span class="pi">:</span> <span class="s1">'</span><span class="s">background'</span>
<span class="s">authenticationRequired</span><span class="pi">:</span> <span class="s">yes</span>
<span class="s">destructive</span><span class="pi">:</span> <span class="s">no</span>
<span class="s">behavior</span><span class="pi">:</span> <span class="s1">'</span><span class="s">textInput'</span>
<span class="s">textInputButtonTitle</span><span class="pi">:</span> <span class="s1">'</span><span class="s">Silencio!'</span>
<span class="s">textInputPlaceholder</span><span class="pi">:</span> <span class="s1">'</span><span class="s">Placeholder'</span>
</code></pre>
</div>
<h2><a class="title-link" name="building-automations-for-notification-actions" href="#building-automations-for-notification-actions"></a> Building automations for notification actions</h2>
<p>Here is an example automation to send a notification with a category in the payload:</p>
<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">automation</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">alias</span><span class="pi">:</span> <span class="s">Notify iOS app</span>
<span class="s">trigger</span><span class="pi">:</span>
<span class="s">...</span>
<span class="s">action</span><span class="pi">:</span>
<span class="s">service</span><span class="pi">:</span> <span class="s">notify.ios_robbies_iphone_7_plus</span>
<span class="s">data</span><span class="pi">:</span>
<span class="s">message</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Something</span><span class="nv"> </span><span class="s">happened</span><span class="nv"> </span><span class="s">at</span><span class="nv"> </span><span class="s">home!"</span>
<span class="s">data</span><span class="pi">:</span>
<span class="s">push</span><span class="pi">:</span>
<span class="s">badge</span><span class="pi">:</span> <span class="s">5</span>
<span class="s">sound</span><span class="pi">:</span> <span class="s">&lt;SOUND FILE HERE&gt;</span>
<span class="s">category</span><span class="pi">:</span> <span class="s2">"</span><span class="s">alarm"</span> <span class="c1"># Needs to match the top level identifier you used in the ios configuration</span>
<span class="s">action_data</span><span class="pi">:</span> <span class="c1"># Anything passed in action_data will get echoed back to Home Assistant.</span>
<span class="s">entity_id</span><span class="pi">:</span> <span class="s">light.test</span>
<span class="s">my_custom_data</span><span class="pi">:</span> <span class="s">foo_bar</span>
</code></pre>
</div>
<p>When an action is selected an event named <code class="highlighter-rouge">ios.notification_action_fired</code> will be emitted on the Home Assistant event bus. Below is an example payload.</p>
<div class="language-json highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nt">"sourceDeviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Robbie's iPhone 7 Plus"</span><span class="p">,</span><span class="w">
</span><span class="nt">"sourceDeviceID"</span><span class="p">:</span><span class="w"> </span><span class="s2">"robbies_iphone_7_plus"</span><span class="p">,</span><span class="w">
</span><span class="nt">"actionName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SOUND_ALARM"</span><span class="p">,</span><span class="w">
</span><span class="nt">"sourceDevicePushId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ab9f02fe-6ac6-47b8-adeb-5dd87b489156"</span><span class="p">,</span><span class="w">
</span><span class="nt">"textInput"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
</span><span class="nt">"actionData"</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
</div>
<p>Heres an example automation for the given payload:</p>
<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">automation</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">alias</span><span class="pi">:</span> <span class="s">Sound the alarm</span>
<span class="s">trigger</span><span class="pi">:</span>
<span class="s">platform</span><span class="pi">:</span> <span class="s">event</span>
<span class="s">event_type</span><span class="pi">:</span> <span class="s">ios.notification_action_fired</span>
<span class="s">event_data</span><span class="pi">:</span>
<span class="s">actionName</span><span class="pi">:</span> <span class="s">SOUND_ALARM</span>
<span class="s">action</span><span class="pi">:</span>
<span class="s">...</span>
</code></pre>
</div>
<p>Notes:</p>
<ul>
<li><code class="highlighter-rouge">textInput</code> will only exist if <code class="highlighter-rouge">behavior</code> was set to <code class="highlighter-rouge">textInput</code>.</li>
<li><code class="highlighter-rouge">actionData</code> is a dictionary with parameters passed in the <code class="highlighter-rouge">action_data</code> dictionary of the <code class="highlighter-rouge">push</code> dictionary in the original notification.</li>
<li>When adding or updating push categories be sure to update push settings within the Home Assistant iOS app. This can be found within the app at <strong>Settings</strong> (gear icon) &gt; <strong>Notification Settings</strong>.</li>
</ul>
</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='section'>
<h1 class="title delta">Topics</h1>
<ul class='divided sidebar-menu'>
<li>
<b><a href='/faq/'>FAQ </a></b> |
<b><a href='/docs/glossary/'>Glossary </a></b>
</li>
<li>
<b><a href='/docs/installation/'>Installation </a></b>
<ul>
<li><a href='/hassio/'>Hass.io </a></li>
<li><a href='/docs/installation/virtualenv/'>Python Virtual Env </a></li>
<li><a href='/docs/installation/hassbian/'>Hassbian </a></li>
<!--<li><a href='/docs/installation/raspberry-pi-all-in-one/'>Raspberry Pi All-in-One </a></li>-->
<li><a href='/docs/installation/updating/'>Updating </a></li>
<li><a href='/docs/installation/troubleshooting/'>Troubleshooting </a></li>
</ul>
</li>
<li>
<b><a href='/docs/configuration/'>Configuration </a></b>
<ul>
<li><a href='/docs/configuration/yaml/'>YAML </a></li>
<li><a href='/docs/configuration/basic/'>Basic information </a></li>
<li><a href='/docs/configuration/devices/'>Setting up devices </a></li>
<li><a href='/docs/configuration/customizing-devices/'>Customizing entities </a></li>
<li><a href='/docs/configuration/troubleshooting/'>Troubleshooting </a></li>
<li><a href='/docs/configuration/securing/'>Security Check Points </a></li>
</ul>
</li>
<li>
<b>Advanced Configuration</b>
<ul>
<li><a href='/docs/configuration/remote/'>Remote access </a></li>
<li><a href='/docs/configuration/packages/'>Packages </a></li>
<li><a href='/docs/configuration/splitting_configuration/'>Splitting up the configuration </a></li>
<li><a href='/docs/configuration/secrets/'>Storing Secrets </a></li>
<li><a href='/docs/configuration/templating/'>Templating </a></li>
<li><a href='/docs/configuration/group_visibility/'>Group Visibility </a></li>
<li><a href='/docs/configuration/platform_options/'>Entity component platform options </a></li>
</ul>
</li>
<li>
<b>Core objects</b>
<ul>
<li><a href='/docs/configuration/events/'>Events </a></li>
<li><a href='/docs/configuration/state_object/'>State Objects </a></li>
</ul>
</li>
<li>
<b><a href='/docs/automation/'>Automation </a></b>
<ul>
<li><a href='/docs/automation/examples/'>Examples </a></li>
<li><a href='/docs/automation/editor/'>Editor </a></li>
<li><a href='/docs/automation/trigger/'>Triggers </a></li>
<li><a href='/docs/automation/condition/'>Conditions </a></li>
<li><a href='/docs/automation/action/'>Actions </a></li>
<li><a href='/docs/automation/templating/'>Templates </a></li>
</ul>
</li>
<li>
<b><a href='/docs/frontend/'>Frontend </a></b>
<ul>
<li><a href='/docs/frontend/mobile/'>Android/iOS Homescreen </a></li>
<li><a href='/docs/frontend/webserver/'>Web server fingerprint </a></li>
<li><a href='/docs/frontend/browsers/'>Browser Compatibility List </a></li>
</ul>
</li>
<li>
<b><a href='/docs/backend/'>Backend </a></b>
<ul>
<li><a href='/docs/backend/database/'>Database </a></li>
<li><a href='/docs/backend/updater/'>Updater </a></li>
<li><a href='/developers/api/'>API </a></li>
</ul>
</li>
<li>
<b><a href='/docs/scripts/'>Scripts </a></b>
<ul>
<li><a href='/docs/scripts/service-calls/'>Service Calls </a></li>
<li><a href='/docs/scripts/conditions/'>Conditions </a></li>
<li><a href='/docs/scripts/editor/'>Editor </a></li>
</ul>
</li>
<li>
<b><a href='/docs/tools/'>Tools and Helpers </a></b>
<ul>
<li><a href='/docs/tools/dev-tools/'>Developer Tools </a></li>
<li><a href='/docs/tools/hass/'>hass </a></li>
<li><a href='/docs/tools/scripts/'>Scripts </a></li>
</ul>
</li>
<li>
<b><a href='/docs/z-wave/'>Z-Wave </a></b>
<ul>
<li><a href='/docs/z-wave/installation/'>Configuring the Z-Wave component </a></li>
<li><a href='/docs/z-wave/adding/'>Adding devices </a></li>
<li><a href='/docs/z-wave/control-panel/'>The Z-Wave control panel </a></li>
<li><a href='/docs/z-wave/controllers/'>Controllers </a></li>
<li><a href='/docs/z-wave/devices/'>Devices </a> and <a href='/docs/z-wave/entities/'>Entities </a></li>
<li><a href='/docs/z-wave/query-stage/'>Query Stages </a> for devices</li>
<li><a href='/docs/z-wave/device-specific/'>Device Specific </a> configuration</li>
<li><a href='/docs/z-wave/events/'>Events </a> and <a href='/docs/z-wave/services/'>Services </a></li>
</ul>
</li>
<li>
<b><a href='/docs/mqtt/'>MQTT </a></b>
<ul>
<li><a href='/docs/mqtt/broker/'>Broker </a></li>
<li><a href='/docs/mqtt/certificate/'>Certificate </a></li>
<li><a href='/docs/mqtt/discovery/'>Discovery </a></li>
<li><a href='/docs/mqtt/service/'>Publish service </a></li>
<li><a href='/docs/mqtt/birth_will/'>Birth and last will messages </a></li>
<li><a href='/docs/mqtt/testing/'>Testing your setup </a></li>
<li><a href='/docs/mqtt/logging/'>Logging </a></li>
<li><a href='/docs/mqtt/processing_json/'>Processing JSON </a></li>
</ul>
</li>
<li>
<b><a href='/docs/ecosystem/ios/'>iOS </a></b>
<ul>
<li><a href='/docs/ecosystem/ios/notifications/basic/'>Basic notifications </a></li>
<ul>
<li><a href='/docs/ecosystem/ios/notifications/sounds/'>Sounds </a></li>
<li><a href='/docs/ecosystem/ios/notifications/architecture/'>Architecture </a></li>
<li><a href='/docs/ecosystem/ios/notifications/privacy_security_rate_limits/'>Privacy, rate limiting and security </a></li>
</ul>
<li>Advanced notifications</li>
<ul>
<li><a href='/docs/ecosystem/ios/notifications/attachments/'>Attachments </a></li>
<li><a href='/docs/ecosystem/ios/notifications/content_extensions/'>Dynamic content </a></li>
<li><a class='active' href='/docs/ecosystem/ios/notifications/actions/'>Actionable notifications </a></li>
<li><a href='/docs/ecosystem/ios/notifications/requesting_location_updates/'>Requesting location updates </a></li>
</ul>
<li><a href='/docs/ecosystem/ios/location/'>Location Tracking </a></li>
<li><a href='/docs/ecosystem/ios/integration/'>Integration with other apps </a></li>
</ul>
</li>
<li>
<a href='/docs/ecosystem/'>Ecosystem </a>
<ul>
<li>
<a href='/docs/autostart/'>Autostart </a>
<ul>
<li><a href='/docs/autostart/systemd/'>systemd (Linux) </a></li>
<li><a href='/docs/autostart/upstart/'>Upstart (Linux) </a></li>
<li><a href='/docs/autostart/init.d/'>init.d (Linux) </a></li>
<li><a href='/docs/autostart/macos/'>macOS </a></li>
<li><a href='/docs/autostart/synology/'>Synology NAS </a></li>
</ul>
</li>
<li>
<a href='/docs/ecosystem/appdaemon/'>AppDaemon </a>
</li>
<li>
<a href='/docs/ecosystem/hadashboard/'>HADashboard </a>
</li>
<li>
<a href='/docs/ecosystem/notebooks/'>Notebooks </a>
<ul>
<li><a href='/docs/ecosystem/notebooks/'>Introduction </a></li>
<li><a href='/docs/ecosystem/notebooks/installation/'>Installation </a></li>
<li><a href='/docs/ecosystem/notebooks/graph/'>Graph </a></li>
<li><a href='/docs/ecosystem/notebooks/api/'>Home Assistant API </a></li>
<li><a href='/docs/ecosystem/notebooks/database/'>Database </a></li>
<li><a href='/docs/ecosystem/notebooks/stats/'>Statistics </a></li>
</ul>
</li>
<li>
Remote access
<ul>
<li><a href='/docs/ecosystem/apache/'>Apache </a></li>
<li><a href='/docs/ecosystem/caddy/'>Caddy Server </a></li>
<li><a href='/docs/ecosystem/nginx/'>NGINX </a></li>
<li><a href='/docs/ecosystem/nginx_subdomain/'>NGINX with subdomain</a></li>
<li><a href='/docs/ecosystem/tor/'>Tor Onion Service </a></li>
</ul>
</li>
<li>
<a href='/docs/ecosystem/certificates/'>Certificates </a>
<ul>
<li><a href='/docs/ecosystem/certificates/tls_self_signed_certificate/'>Self-signed certificate </a></li>
<li><a href='/docs/ecosystem/certificates/tls_domain_certificate/'>Certificate domain owners </a></li>
<li><a href='/docs/ecosystem/certificates/lets_encrypt/'>Let's Encrypt (detailed) </a></li>
</ul>
</li>
<li>
Backup
<ul>
<li><a href='/docs/ecosystem/backup/backup_github/'>Backup to GitHub </a></li>
<li><a href='/docs/ecosystem/backup/backup_dropbox/'>Backup to Dropbox </a></li>
<li><a href='/docs/ecosystem/backup/backup_usb/'>Backup to USB device </a></li>
</ul>
</li>
<li><a href='/docs/ecosystem/scenegen/'>scenegen </a></li>
<li><a href='/docs/ecosystem/synology/'>Synology </a></li>
<li><a href='/docs/ecosystem/hass-configurator/'>HASS Configurator </a></li>
</ul>
</ul>
</div>
</section>
</div>
</aside>
</div>
</div>
<footer>
<div class="grid-wrapper">
<div class="grid">
<div class="grid__item">
<div class="copyright">
<a rel="me" href='https://twitter.com/home_assistant'><i class="icon-twitter"></i></a>
<a rel="me" href='https://facebook.com/homeassistantio'><i class="icon-facebook"></i></a>
<a rel="me" href='https://plus.google.com/110560654828510104551'><i class="icon-google-plus"></i></a>
<a rel="me" href='https://github.com/home-assistant/home-assistant'><i class="icon-github"></i></a>
<div class="credit">
Contact us at <a href='mailto:hello@home-assistant.io'>hello@home-assistant.io</a> (no support!).<br>
Website powered by <a href='http://jekyllrb.com/'>Jekyll</a> and the <a href='https://github.com/coogie/oscailte'>Oscalite theme</a>.<br />
Hosted by <a href='https://pages.github.com/'>GitHub</a> and served by <a href='https://cloudflare.com'>CloudFlare</a>.
</div>
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">home-assistant.io</span> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.
</div>
</div>
</div>
</div>
</footer>
<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>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.css" />
<script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.js"></script>
<script type="text/javascript">
docsearch({
apiKey: 'ae96d94b201c5444c8a443093edf3efb',
indexName: 'home-assistant',
inputSelector: '#search',
debug: false // Set debug to true if you want to inspect the dropdown
});
document.querySelector('.search .close').addEventListener('click', function(ev) {
ev.preventDefault();
document.querySelector('.search-container').style.display = 'none';
});
document.querySelector('.show-search').addEventListener('click', function(ev) {
ev.preventDefault();
document.querySelector('.search-container').style.display = 'block';
document.getElementById('toggle').checked = false;
document.querySelector('.search-container input').focus();
});
</script>
</body>
</html>