home-assistant.github.io/docs/autostart/init.d/index.html
2018-02-23 07:38:21 +00:00

616 lines
37 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>Autostart using init.d - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="Documentation about setting up Home Assistant as a daemon running under init.d.">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/docs/autostart/init.d/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Autostart using init.d">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/docs/autostart/init.d/">
<meta property="og:type" content="article">
<meta property="og:description" content="Documentation about setting up Home Assistant as a daemon running under init.d.">
<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="Autostart using init.d">
<meta name="twitter:description" content="Documentation about setting up Home Assistant as a daemon running under init.d.">
<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/autostart/init.d.markdown'>Edit this page on GitHub</a></div>
<header>
<h1 class="title indent">
Autostart using init.d
</h1>
</header>
<hr class="divider">
<p>Home Assistant can run as a daemon within init.d with the script below.</p>
<h3><a class="title-link" name="1-copy-script" href="#1-copy-script"></a> 1. Copy script</h3>
<p>Copy either the daemon script or the Python environment scrip at the end of this page to <code class="highlighter-rouge">/etc/init.d/hass-daemon</code> depending on your installation.</p>
<p>After that, set the script to be executable:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>sudo chmod +x /etc/init.d/hass-daemon
</code></pre>
</div>
<h3><a class="title-link" name="2-select-a-user" href="#2-select-a-user"></a> 2. Select a user.</h3>
<p>Create or pick a user that the Home Assistant daemon will run under. Update script to set <code class="highlighter-rouge">RUN_AS</code> to the username that should be used to execute hass.</p>
<h3><a class="title-link" name="3-change-hass-executable-and-other-variables-if-required" href="#3-change-hass-executable-and-other-variables-if-required"></a> 3. Change hass executable and other variables if required.</h3>
<p>Some installation environments may require a change in the Home Assistant executable <code class="highlighter-rouge">hass</code>. Update script to set <code class="highlighter-rouge">HASS_BIN</code> to the appropriate <code class="highlighter-rouge">hass</code> executable path. Please also check the other variables for the appropriate value. In general the defaults should work</p>
<h3><a class="title-link" name="4-install-this-service" href="#4-install-this-service"></a> 4. Install this service</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>sudo service hass-daemon install
</code></pre>
</div>
<h3><a class="title-link" name="5-create-logrotate-rule" href="#5-create-logrotate-rule"></a> 5. Create logrotate rule</h3>
<p>This logrotate script at <code class="highlighter-rouge">/etc/logrotate.d/homeassistant</code> will create an outage of a few seconds every week at night. If you do not want this add <code class="highlighter-rouge">--log-rotate-days 7</code> to the <code class="highlighter-rouge">FLAGS</code> variable in the init script.</p>
<div class="highlighter-rouge"><pre class="highlight"><code>/var/log/homeassistant/home-assistant.log
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d hass-daemon restart &gt; /dev/null
endscript
}
</code></pre>
</div>
<h3><a class="title-link" name="6-restart-machine" href="#6-restart-machine"></a> 6. Restart Machine</h3>
<p>Thats it. Restart your machine and Home Assistant should start automatically.</p>
<p>If HA does not start, check the log file output for errors at <code class="highlighter-rouge">/var/log/homeassistant/home-assistant.log</code></p>
<h3><a class="title-link" name="extra-running-commands-before-hass-executes" href="#extra-running-commands-before-hass-executes"></a> Extra: Running commands before hass executes</h3>
<p>If any commands need to run before executing hass (like loading a virtual environment), put them in PRE_EXEC. This command must end with a semicolon.</p>
<h3><a class="title-link" name="daemon-script" href="#daemon-script"></a> Daemon script</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="c">#!/bin/sh</span>
<span class="c">### BEGIN INIT INFO</span>
<span class="c"># Provides: hass</span>
<span class="c"># Required-Start: $local_fs $network $named $time $syslog</span>
<span class="c"># Required-Stop: $local_fs $network $named $time $syslog</span>
<span class="c"># Default-Start: 2 3 4 5</span>
<span class="c"># Default-Stop: 0 1 6</span>
<span class="c"># Description: Home\ Assistant</span>
<span class="c">### END INIT INFO</span>
<span class="c"># /etc/init.d Service Script for Home Assistant</span>
<span class="c"># Created with: https://gist.github.com/naholyr/4275302#file-new-service-sh</span>
<span class="nv">PRE_EXEC</span><span class="o">=</span><span class="s2">""</span>
<span class="c"># Typically /usr/bin/hass</span>
<span class="nv">HASS_BIN</span><span class="o">=</span><span class="s2">"hass"</span>
<span class="nv">RUN_AS</span><span class="o">=</span><span class="s2">"USER"</span>
<span class="nv">PID_DIR</span><span class="o">=</span><span class="s2">"/var/run"</span>
<span class="nv">PID_FILE</span><span class="o">=</span><span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">/hass.pid"</span>
<span class="nv">CONFIG_DIR</span><span class="o">=</span><span class="s2">"/var/opt/homeassistant"</span>
<span class="nv">LOG_DIR</span><span class="o">=</span><span class="s2">"/var/log/homeassistant"</span>
<span class="nv">LOG_FILE</span><span class="o">=</span><span class="s2">"</span><span class="nv">$LOG_DIR</span><span class="s2">/home-assistant.log"</span>
<span class="nv">FLAGS</span><span class="o">=</span><span class="s2">"-v --config </span><span class="nv">$CONFIG_DIR</span><span class="s2"> --pid-file </span><span class="nv">$PID_FILE</span><span class="s2"> --log-file </span><span class="nv">$LOG_FILE</span><span class="s2"> --daemon"</span>
start<span class="o">()</span> <span class="o">{</span>
create_piddir
<span class="k">if</span> <span class="o">[</span> -f <span class="nv">$PID_FILE</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nb">kill</span> -0 <span class="k">$(</span>cat <span class="nv">$PID_FILE</span><span class="k">)</span> 2&gt; /dev/null; <span class="k">then
</span><span class="nb">echo</span> <span class="s1">'Service already running'</span> &gt;&amp;2
<span class="k">return </span>1
<span class="k">fi
</span><span class="nb">echo</span> -n <span class="s1">'Starting service… '</span> &gt;&amp;2
<span class="nb">local </span><span class="nv">CMD</span><span class="o">=</span><span class="s2">"</span><span class="nv">$PRE_EXEC</span><span class="s2"> </span><span class="nv">$HASS_BIN</span><span class="s2"> </span><span class="nv">$FLAGS</span><span class="s2">;"</span>
su -s /bin/bash -c <span class="s2">"</span><span class="nv">$CMD</span><span class="s2">"</span> <span class="nv">$RUN_AS</span>
<span class="k">if</span> <span class="o">[</span> <span class="nv">$?</span> -ne 0 <span class="o">]</span>; <span class="k">then
</span><span class="nb">echo</span> <span class="s2">"Failed"</span> &gt;&amp;2
<span class="k">else
</span><span class="nb">echo</span> <span class="s1">'Done'</span> &gt;&amp;2
<span class="k">fi</span>
<span class="o">}</span>
stop<span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">[</span> ! -f <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span> <span class="o">]</span> <span class="o">||</span> ! <span class="nb">kill</span> -0 <span class="k">$(</span>cat <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span><span class="k">)</span> 2&gt; /dev/null; <span class="k">then
</span><span class="nb">echo</span> <span class="s1">'Service not running'</span> &gt;&amp;2
<span class="k">return </span>1
<span class="k">fi
</span><span class="nb">echo</span> -n <span class="s1">'Stopping service… '</span> &gt;&amp;2
<span class="nb">kill</span> <span class="k">$(</span>cat <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span><span class="k">)</span>
<span class="k">while </span>ps -p <span class="k">$(</span>cat <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span><span class="k">)</span> &gt; /dev/null 2&gt;&amp;1; <span class="k">do </span>sleep 1;done;
rm -f <span class="nv">$PID_FILE</span>
<span class="nb">echo</span> <span class="s1">'Done'</span> &gt;&amp;2
<span class="o">}</span>
install<span class="o">()</span> <span class="o">{</span>
<span class="nb">echo</span> <span class="s2">"Installing Home Assistant Daemon (hass-daemon)"</span>
update-rc.d hass-daemon defaults
create_piddir
mkdir -p <span class="nv">$CONFIG_DIR</span>
chown <span class="nv">$RUN_AS</span> <span class="nv">$CONFIG_DIR</span>
mkdir -p <span class="nv">$LOG_DIR</span>
chown <span class="nv">$RUN_AS</span> <span class="nv">$LOG_DIR</span>
<span class="o">}</span>
uninstall<span class="o">()</span> <span class="o">{</span>
<span class="nb">echo</span> <span class="s2">"Are you really sure you want to uninstall this service? The INIT script will"</span>
<span class="nb">echo</span> -n <span class="s2">"also be deleted! That cannot be undone. [yes|No] "</span>
<span class="nb">local </span>SURE
<span class="nb">read </span>SURE
<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$SURE</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"yes"</span> <span class="o">]</span>; <span class="k">then
</span>stop
remove_piddir
<span class="nb">echo</span> <span class="s2">"Notice: The config directory has not been removed"</span>
<span class="nb">echo</span> <span class="nv">$CONFIG_DIR</span>
<span class="nb">echo</span> <span class="s2">"Notice: The log directory has not been removed"</span>
<span class="nb">echo</span> <span class="nv">$LOG_DIR</span>
update-rc.d -f hass-daemon remove
rm -fv <span class="s2">"</span><span class="nv">$0</span><span class="s2">"</span>
<span class="nb">echo</span> <span class="s2">"Home Assistant Daemon has been removed. Home Assistant is still installed."</span>
<span class="k">fi</span>
<span class="o">}</span>
create_piddir<span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">[</span> ! -d <span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">"</span> <span class="o">]</span>; <span class="k">then
</span>mkdir -p <span class="nv">$PID_DIR</span>
chown <span class="nv">$RUN_AS</span> <span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">"</span>
<span class="k">fi</span>
<span class="o">}</span>
remove_piddir<span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">[</span> -d <span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">"</span> <span class="o">]</span>; <span class="k">then
if</span> <span class="o">[</span> -e <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span> <span class="o">]</span>; <span class="k">then
</span>rm -fv <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span>
<span class="k">fi
</span>rmdir -fv <span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">"</span>
<span class="k">fi</span>
<span class="o">}</span>
<span class="k">case</span> <span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span> <span class="k">in
</span>start<span class="p">)</span>
start
<span class="p">;;</span>
stop<span class="p">)</span>
stop
<span class="p">;;</span>
install<span class="p">)</span>
install
<span class="p">;;</span>
uninstall<span class="p">)</span>
uninstall
<span class="p">;;</span>
restart<span class="p">)</span>
stop
start
<span class="p">;;</span>
<span class="k">*</span><span class="p">)</span>
<span class="nb">echo</span> <span class="s2">"Usage: </span><span class="nv">$0</span><span class="s2"> {start|stop|restart|install|uninstall}"</span>
<span class="k">esac</span>
</code></pre>
</div>
<h3><a class="title-link" name="python-virtual-environment" href="#python-virtual-environment"></a> Python virtual environment</h3>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="c">#!/bin/sh</span>
<span class="c">### BEGIN INIT INFO</span>
<span class="c"># Provides: hass</span>
<span class="c"># Required-Start: $local_fs $network $named $time $syslog</span>
<span class="c"># Required-Stop: $local_fs $network $named $time $syslog</span>
<span class="c"># Default-Start: 2 3 4 5</span>
<span class="c"># Default-Stop: 0 1 6</span>
<span class="c"># Description: Home\ Assistant</span>
<span class="c">### END INIT INFO</span>
<span class="c"># /etc/init.d Service Script for Home Assistant</span>
<span class="c"># Created with: https://gist.github.com/naholyr/4275302#file-new-service-sh</span>
<span class="nv">PRE_EXEC</span><span class="o">=</span><span class="s2">"cd /srv/homeassistant; python3 -m venv .; source bin/activate;"</span>
<span class="c"># Typically /usr/bin/hass</span>
<span class="nv">HASS_BIN</span><span class="o">=</span><span class="s2">"hass"</span>
<span class="nv">RUN_AS</span><span class="o">=</span><span class="s2">"homeassistant"</span>
<span class="nv">PID_DIR</span><span class="o">=</span><span class="s2">"/var/run/hass"</span>
<span class="nv">PID_FILE</span><span class="o">=</span><span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">/hass.pid"</span>
<span class="nv">CONFIG_DIR</span><span class="o">=</span><span class="s2">"/home/</span><span class="nv">$RUN_AS</span><span class="s2">/.homeassistant"</span>
<span class="nv">LOG_DIR</span><span class="o">=</span><span class="s2">"/var/log/homeassistant"</span>
<span class="nv">LOG_FILE</span><span class="o">=</span><span class="s2">"</span><span class="nv">$LOG_DIR</span><span class="s2">/home-assistant.log"</span>
<span class="nv">FLAGS</span><span class="o">=</span><span class="s2">"-v --config </span><span class="nv">$CONFIG_DIR</span><span class="s2"> --pid-file </span><span class="nv">$PID_FILE</span><span class="s2"> --log-file </span><span class="nv">$LOG_FILE</span><span class="s2"> --daemon"</span>
start<span class="o">()</span> <span class="o">{</span>
create_piddir
<span class="k">if</span> <span class="o">[</span> -f <span class="nv">$PID_FILE</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nb">kill</span> -0 <span class="k">$(</span>cat <span class="nv">$PID_FILE</span><span class="k">)</span> 2&gt; /dev/null; <span class="k">then
</span><span class="nb">echo</span> <span class="s1">'Service already running'</span> &gt;&amp;2
<span class="k">return </span>1
<span class="k">fi
</span><span class="nb">echo</span> -n <span class="s1">'Starting service… '</span> &gt;&amp;2
<span class="nb">local </span><span class="nv">CMD</span><span class="o">=</span><span class="s2">"</span><span class="nv">$PRE_EXEC</span><span class="s2"> </span><span class="nv">$HASS_BIN</span><span class="s2"> </span><span class="nv">$FLAGS</span><span class="s2">;"</span>
su -s /bin/bash -c <span class="s2">"</span><span class="nv">$CMD</span><span class="s2">"</span> <span class="nv">$RUN_AS</span>
<span class="k">if</span> <span class="o">[</span> <span class="nv">$?</span> -ne 0 <span class="o">]</span>; <span class="k">then
</span><span class="nb">echo</span> <span class="s2">"Failed"</span> &gt;&amp;2
<span class="k">else
</span><span class="nb">echo</span> <span class="s1">'Done'</span> &gt;&amp;2
<span class="k">fi</span>
<span class="o">}</span>
stop<span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">[</span> ! -f <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span> <span class="o">]</span> <span class="o">||</span> ! <span class="nb">kill</span> -0 <span class="k">$(</span>cat <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span><span class="k">)</span> 2&gt; /dev/null; <span class="k">then
</span><span class="nb">echo</span> <span class="s1">'Service not running'</span> &gt;&amp;2
<span class="k">return </span>1
<span class="k">fi
</span><span class="nb">echo</span> -n <span class="s1">'Stopping service… '</span> &gt;&amp;2
<span class="nb">kill</span> <span class="k">$(</span>cat <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span><span class="k">)</span>
<span class="k">while </span>ps -p <span class="k">$(</span>cat <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span><span class="k">)</span> &gt; /dev/null 2&gt;&amp;1; <span class="k">do </span>sleep 1;done;
rm -f <span class="nv">$PID_FILE</span>
<span class="nb">echo</span> <span class="s1">'Done'</span> &gt;&amp;2
<span class="o">}</span>
install<span class="o">()</span> <span class="o">{</span>
<span class="nb">echo</span> <span class="s2">"Installing Home Assistant Daemon (hass-daemon)"</span>
update-rc.d hass-daemon defaults
create_piddir
mkdir -p <span class="nv">$CONFIG_DIR</span>
chown <span class="nv">$RUN_AS</span> <span class="nv">$CONFIG_DIR</span>
mkdir -p <span class="nv">$LOG_DIR</span>
chown <span class="nv">$RUN_AS</span> <span class="nv">$LOG_DIR</span>
<span class="o">}</span>
uninstall<span class="o">()</span> <span class="o">{</span>
<span class="nb">echo</span> <span class="s2">"Are you really sure you want to uninstall this service? The INIT script will"</span>
<span class="nb">echo</span> -n <span class="s2">"also be deleted! That cannot be undone. [yes|No] "</span>
<span class="nb">local </span>SURE
<span class="nb">read </span>SURE
<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$SURE</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"yes"</span> <span class="o">]</span>; <span class="k">then
</span>stop
remove_piddir
<span class="nb">echo</span> <span class="s2">"Notice: The config directory has not been removed"</span>
<span class="nb">echo</span> <span class="nv">$CONFIG_DIR</span>
<span class="nb">echo</span> <span class="s2">"Notice: The log directory has not been removed"</span>
<span class="nb">echo</span> <span class="nv">$LOG_DIR</span>
update-rc.d -f hass-daemon remove
rm -fv <span class="s2">"</span><span class="nv">$0</span><span class="s2">"</span>
<span class="nb">echo</span> <span class="s2">"Home Assistant Daemon has been removed. Home Assistant is still installed."</span>
<span class="k">fi</span>
<span class="o">}</span>
create_piddir<span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">[</span> ! -d <span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">"</span> <span class="o">]</span>; <span class="k">then
</span>mkdir -p <span class="nv">$PID_DIR</span>
chown <span class="nv">$RUN_AS</span> <span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">"</span>
<span class="k">fi</span>
<span class="o">}</span>
remove_piddir<span class="o">()</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">[</span> -d <span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">"</span> <span class="o">]</span>; <span class="k">then
if</span> <span class="o">[</span> -e <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span> <span class="o">]</span>; <span class="k">then
</span>rm -fv <span class="s2">"</span><span class="nv">$PID_FILE</span><span class="s2">"</span>
<span class="k">fi
</span>rmdir -fv <span class="s2">"</span><span class="nv">$PID_DIR</span><span class="s2">"</span>
<span class="k">fi</span>
<span class="o">}</span>
<span class="k">case</span> <span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span> <span class="k">in
</span>start<span class="p">)</span>
start
<span class="p">;;</span>
stop<span class="p">)</span>
stop
<span class="p">;;</span>
install<span class="p">)</span>
install
<span class="p">;;</span>
uninstall<span class="p">)</span>
uninstall
<span class="p">;;</span>
restart<span class="p">)</span>
stop
start
<span class="p">;;</span>
<span class="k">*</span><span class="p">)</span>
<span class="nb">echo</span> <span class="s2">"Usage: </span><span class="nv">$0</span><span class="s2"> {start|stop|restart|install|uninstall}"</span>
<span class="k">esac</span>
</code></pre>
</div>
</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/entity-registry/'>Entity Registry </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/benchmark/'>benchmark </a></li>
<li><a href='/docs/tools/check_config/'>check_config </a></li>
<li><a href='/docs/tools/credstash/'>credstash </a></li>
<li><a href='/docs/tools/db_migrator/'>db_migrator </a></li>
<li><a href='/docs/tools/ensure_config/'>ensure_config </a></li>
<li><a href='/docs/tools/influxdb_import/'>influxdb_import </a></li>
<li><a href='/docs/tools/influxdb_migrator/'>influxdb_migrator </a></li>
<li><a href='/docs/tools/keyring/'>keyring </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 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 class='active' 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>