337 lines
28 KiB
HTML
337 lines
28 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>Dynamic input select with Kodi media - Home Assistant</title>
|
|
<meta name="author" content="Home Assistant">
|
|
<meta name="description" content="How to configure an `input_select` that can play in Kodi the latest entries added to the library">
|
|
<meta name="viewport" content="width=device-width">
|
|
<link rel="canonical" href="https://home-assistant.io/cookbook/automation_kodi_dynamic_input_select/">
|
|
<meta property="fb:app_id" content="338291289691179">
|
|
<meta property="og:title" content="Dynamic input select with Kodi media">
|
|
<meta property="og:site_name" content="Home Assistant">
|
|
<meta property="og:url" content="https://home-assistant.io/cookbook/automation_kodi_dynamic_input_select/">
|
|
<meta property="og:type" content="article">
|
|
<meta property="og:description" content="How to configure an `input_select` that can play in Kodi the latest entries added to the library">
|
|
<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="Dynamic input select with Kodi media">
|
|
<meta name="twitter:description" content="How to configure an `input_select` that can play in Kodi the latest entries added to the library">
|
|
<meta name="twitter:image" content="https://home-assistant.io/images/default-social.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 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">
|
|
<header>
|
|
<h1 class="title indent">
|
|
Dynamic input select with Kodi media
|
|
</h1>
|
|
</header>
|
|
<hr class="divider">
|
|
<p>This requires a <a href="/components/media_player.kodi/">Kodi</a> media player, and consists of commands that perform queries in the Kodi library, and a selection box (<code class="highlighter-rouge">input_select</code>) that shows the available options. By clicking the commands, the selection box is updated, and when selecting an option, Kodi plays the media.</p>
|
|
<p>Option filling is done in an <a href="https://home-assistant.io/docs/ecosystem/appdaemon/tutorial/">AppDaemon</a> app, which listens for events that are triggered with the results of the Kodi JSONRPC API queries when scripts run. This application also listens to the selection box and calls the play media service with the corresponding parameters.</p>
|
|
<p>The media player yaml config:</p>
|
|
<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">media_player</span><span class="pi">:</span>
|
|
<span class="pi">-</span> <span class="s">platform</span><span class="pi">:</span> <span class="s">kodi</span>
|
|
<span class="s">name</span><span class="pi">:</span> <span class="s">Kodi</span>
|
|
<span class="s">host</span><span class="pi">:</span> <span class="s">192.168.0.123</span>
|
|
</code></pre>
|
|
</div>
|
|
<p>The <code class="highlighter-rouge">input_select</code> with the scripts and a group:</p>
|
|
<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">input_select</span><span class="pi">:</span>
|
|
<span class="s">kodi_results</span><span class="pi">:</span>
|
|
<span class="s">name</span><span class="pi">:</span> <span class="s">Kodi API results</span>
|
|
<span class="s">options</span><span class="pi">:</span>
|
|
<span class="pi">-</span> <span class="s">Nothing to do</span>
|
|
|
|
<span class="s">script</span><span class="pi">:</span>
|
|
<span class="s">get_recent_movies</span><span class="pi">:</span>
|
|
<span class="s">alias</span><span class="pi">:</span> <span class="s">Last added movies</span>
|
|
<span class="s">sequence</span><span class="pi">:</span>
|
|
<span class="pi">-</span> <span class="s">service</span><span class="pi">:</span> <span class="s">media_player.kodi_call_method</span>
|
|
<span class="s">data</span><span class="pi">:</span>
|
|
<span class="s">entity_id</span><span class="pi">:</span> <span class="s">media_player.kodi</span>
|
|
<span class="s">method</span><span class="pi">:</span> <span class="s">VideoLibrary.GetRecentlyAddedMovies</span>
|
|
<span class="s">properties</span><span class="pi">:</span>
|
|
<span class="pi">-</span> <span class="s">title</span>
|
|
<span class="pi">-</span> <span class="s">year</span>
|
|
<span class="pi">-</span> <span class="s">file</span>
|
|
<span class="pi">-</span> <span class="s">lastplayed</span>
|
|
|
|
<span class="s">get_recent_episodes</span><span class="pi">:</span>
|
|
<span class="s">alias</span><span class="pi">:</span> <span class="s">Last TV shows</span>
|
|
<span class="s">sequence</span><span class="pi">:</span>
|
|
<span class="pi">-</span> <span class="s">service</span><span class="pi">:</span> <span class="s">media_player.kodi_call_method</span>
|
|
<span class="s">data</span><span class="pi">:</span>
|
|
<span class="s">entity_id</span><span class="pi">:</span> <span class="s">media_player.kodi</span>
|
|
<span class="s">method</span><span class="pi">:</span> <span class="s">VideoLibrary.GetRecentlyAddedEpisodes</span>
|
|
<span class="s">properties</span><span class="pi">:</span>
|
|
<span class="pi">-</span> <span class="s">showtitle</span>
|
|
<span class="pi">-</span> <span class="s">file</span>
|
|
<span class="pi">-</span> <span class="s">lastplayed</span>
|
|
<span class="pi">-</span> <span class="s">firstaired</span>
|
|
|
|
<span class="s">get_pvr_channels</span><span class="pi">:</span>
|
|
<span class="s">alias</span><span class="pi">:</span> <span class="s">TV Channels</span>
|
|
<span class="s">sequence</span><span class="pi">:</span>
|
|
<span class="pi">-</span> <span class="s">service</span><span class="pi">:</span> <span class="s">media_player.kodi_call_method</span>
|
|
<span class="s">data</span><span class="pi">:</span>
|
|
<span class="s">entity_id</span><span class="pi">:</span> <span class="s">media_player.kodi</span>
|
|
<span class="s">method</span><span class="pi">:</span> <span class="s">PVR.GetChannels</span>
|
|
<span class="s">channelgroupid</span><span class="pi">:</span> <span class="s">1</span>
|
|
|
|
<span class="s">group</span><span class="pi">:</span>
|
|
<span class="s">Media Select</span><span class="pi">:</span>
|
|
<span class="s">control</span><span class="pi">:</span> <span class="s">hidden</span>
|
|
<span class="s">entities</span><span class="pi">:</span>
|
|
<span class="pi">-</span> <span class="s">input_select.kodi_results</span>
|
|
<span class="pi">-</span> <span class="s">script.get_recent_movies</span>
|
|
<span class="pi">-</span> <span class="s">script.get_recent_episodes</span>
|
|
<span class="pi">-</span> <span class="s">script.get_pvr_channels</span>
|
|
</code></pre>
|
|
</div>
|
|
<p>The AppDaemon app:</p>
|
|
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">appdaemon.appapi</span> <span class="kn">as</span> <span class="nn">appapi</span>
|
|
<span class="kn">from</span> <span class="nn">homeassistant.components.media_player.kodi</span> <span class="kn">import</span> <span class="p">(</span>
|
|
<span class="n">EVENT_KODI_CALL_METHOD_RESULT</span><span class="p">)</span>
|
|
|
|
<span class="n">ENTITY</span> <span class="o">=</span> <span class="s">'input_select.kodi_results'</span>
|
|
<span class="n">MEDIA_PLAYER</span> <span class="o">=</span> <span class="s">'media_player.kodi'</span>
|
|
<span class="n">DEFAULT_ACTION</span> <span class="o">=</span> <span class="s">"Nothing to do"</span>
|
|
<span class="n">MAX_RESULTS</span> <span class="o">=</span> <span class="mi">20</span>
|
|
|
|
<span class="k">class</span> <span class="nc">DynamicKodiInputSelect</span><span class="p">(</span><span class="n">appapi</span><span class="o">.</span><span class="n">AppDaemon</span><span class="p">):</span>
|
|
<span class="s">"""AppDaemon app to dynamically populate an `input_select`."""</span>
|
|
<span class="n">_ids_options</span> <span class="o">=</span> <span class="bp">None</span>
|
|
|
|
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="s">"""Set up appdaemon app."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">listen_event</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_receive_kodi_result</span><span class="p">,</span>
|
|
<span class="n">EVENT_KODI_CALL_METHOD_RESULT</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">listen_state</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_change_selected_option</span><span class="p">,</span> <span class="n">ENTITY</span><span class="p">)</span>
|
|
<span class="c"># Input select:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_ids_options</span> <span class="o">=</span> <span class="p">{</span><span class="n">DEFAULT_ACTION</span><span class="p">:</span> <span class="bp">None</span><span class="p">}</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_receive_kodi_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event_id</span><span class="p">,</span> <span class="n">payload_event</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">payload_event</span><span class="p">[</span><span class="s">'result'</span><span class="p">]</span>
|
|
<span class="n">method</span> <span class="o">=</span> <span class="n">payload_event</span><span class="p">[</span><span class="s">'input'</span><span class="p">][</span><span class="s">'method'</span><span class="p">]</span>
|
|
|
|
<span class="k">assert</span> <span class="n">event_id</span> <span class="o">==</span> <span class="n">EVENT_KODI_CALL_METHOD_RESULT</span>
|
|
<span class="k">if</span> <span class="n">method</span> <span class="o">==</span> <span class="s">'VideoLibrary.GetRecentlyAddedMovies'</span><span class="p">:</span>
|
|
<span class="n">values</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="s">'movies'</span><span class="p">][:</span><span class="n">MAX_RESULTS</span><span class="p">]</span>
|
|
<span class="n">data</span> <span class="o">=</span> <span class="p">[(</span><span class="s">'{} ({})'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="s">'label'</span><span class="p">],</span> <span class="n">r</span><span class="p">[</span><span class="s">'year'</span><span class="p">]),</span>
|
|
<span class="p">(</span><span class="s">'MOVIE'</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="s">'file'</span><span class="p">]))</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_ids_options</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">data</span><span class="p">))))</span>
|
|
<span class="n">labels</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">data</span><span class="p">))[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">call_service</span><span class="p">(</span><span class="s">'input_select/set_options'</span><span class="p">,</span>
|
|
<span class="n">entity_id</span><span class="o">=</span><span class="n">ENTITY</span><span class="p">,</span>
|
|
<span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="n">DEFAULT_ACTION</span><span class="p">]</span> <span class="o">+</span> <span class="n">labels</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ENTITY</span><span class="p">,</span>
|
|
<span class="n">attributes</span><span class="o">=</span><span class="p">{</span><span class="s">"friendly_name"</span><span class="p">:</span> <span class="s">'Recent Movies'</span><span class="p">,</span>
|
|
<span class="s">"icon"</span><span class="p">:</span> <span class="s">'mdi:movie'</span><span class="p">})</span>
|
|
<span class="k">elif</span> <span class="n">method</span> <span class="o">==</span> <span class="s">'VideoLibrary.GetRecentlyAddedEpisodes'</span><span class="p">:</span>
|
|
<span class="n">values</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">r</span><span class="p">:</span> <span class="ow">not</span> <span class="n">r</span><span class="p">[</span><span class="s">'lastplayed'</span><span class="p">],</span>
|
|
<span class="n">result</span><span class="p">[</span><span class="s">'episodes'</span><span class="p">]))[:</span><span class="n">MAX_RESULTS</span><span class="p">]</span>
|
|
<span class="n">data</span> <span class="o">=</span> <span class="p">[(</span><span class="s">'{} - {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="s">'showtitle'</span><span class="p">],</span> <span class="n">r</span><span class="p">[</span><span class="s">'label'</span><span class="p">]),</span>
|
|
<span class="p">(</span><span class="s">'TVSHOW'</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="s">'file'</span><span class="p">]))</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_ids_options</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">data</span><span class="p">))))</span>
|
|
<span class="n">labels</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">data</span><span class="p">))[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">call_service</span><span class="p">(</span><span class="s">'input_select/set_options'</span><span class="p">,</span>
|
|
<span class="n">entity_id</span><span class="o">=</span><span class="n">ENTITY</span><span class="p">,</span>
|
|
<span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="n">DEFAULT_ACTION</span><span class="p">]</span> <span class="o">+</span> <span class="n">labels</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ENTITY</span><span class="p">,</span>
|
|
<span class="n">attributes</span><span class="o">=</span><span class="p">{</span><span class="s">"friendly_name"</span><span class="p">:</span> <span class="s">'Recent TvShows'</span><span class="p">,</span>
|
|
<span class="s">"icon"</span><span class="p">:</span> <span class="s">'mdi:play-circle'</span><span class="p">})</span>
|
|
<span class="k">elif</span> <span class="n">method</span> <span class="o">==</span> <span class="s">'PVR.GetChannels'</span><span class="p">:</span>
|
|
<span class="n">values</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="s">'channels'</span><span class="p">]</span>
|
|
<span class="n">data</span> <span class="o">=</span> <span class="p">[(</span><span class="n">r</span><span class="p">[</span><span class="s">'label'</span><span class="p">],</span> <span class="p">(</span><span class="s">'CHANNEL'</span><span class="p">,</span> <span class="n">r</span><span class="p">[</span><span class="s">'channelid'</span><span class="p">]))</span>
|
|
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_ids_options</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">data</span><span class="p">))))</span>
|
|
<span class="n">labels</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">data</span><span class="p">))[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">call_service</span><span class="p">(</span><span class="s">'input_select/set_options'</span><span class="p">,</span>
|
|
<span class="n">entity_id</span><span class="o">=</span><span class="n">ENTITY</span><span class="p">,</span>
|
|
<span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="n">DEFAULT_ACTION</span><span class="p">]</span> <span class="o">+</span> <span class="n">labels</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_state</span><span class="p">(</span><span class="n">ENTITY</span><span class="p">,</span>
|
|
<span class="n">attributes</span><span class="o">=</span><span class="p">{</span><span class="s">"friendly_name"</span><span class="p">:</span> <span class="s">'TV channels'</span><span class="p">,</span>
|
|
<span class="s">"icon"</span><span class="p">:</span> <span class="s">'mdi:play-box-outline'</span><span class="p">})</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_change_selected_option</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">entity</span><span class="p">,</span> <span class="n">attribute</span><span class="p">,</span> <span class="n">old</span><span class="p">,</span> <span class="n">new</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">selected</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ids_options</span><span class="p">[</span><span class="n">new</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">selected</span><span class="p">:</span>
|
|
<span class="n">mediatype</span><span class="p">,</span> <span class="nb">file</span> <span class="o">=</span> <span class="n">selected</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">call_service</span><span class="p">(</span><span class="s">'media_player/play_media'</span><span class="p">,</span>
|
|
<span class="n">entity_id</span><span class="o">=</span><span class="n">MEDIA_PLAYER</span><span class="p">,</span>
|
|
<span class="n">media_content_type</span><span class="o">=</span><span class="n">mediatype</span><span class="p">,</span>
|
|
<span class="n">media_content_id</span><span class="o">=</span><span class="nb">file</span><span class="p">)</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='edit-github'><a href='https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_cookbook/automation_kodi_dynamic_input_select.markdown'>Edit this page on GitHub</a></div>
|
|
<div class='section'>
|
|
<a href='/cookbook'>Back to the cookbook</a>
|
|
</div>
|
|
<div class='section'>
|
|
<h1 class="title delta">Automation Examples</h1>
|
|
<ul class='divided'>
|
|
<li>
|
|
<a href='/cookbook/automation_for_rainy_days/'>Automation for rainy days</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/dim_and_brighten_lights/'>Dim (and brighten) lights via a remote</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/dim_lights_when_playing_media/'>Dim lights when playing media</a>
|
|
</li>
|
|
<li>
|
|
Dynamic input select with Kodi media
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/automation_flashing_lights/'>Examples for flashing lights</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/automation_telegram_presence_alert/'>Examples sending notification depending of the presence</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/automation_first_light/'>Examples using first light</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/automation_sun/'>Examples using the sun</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/foscam_away_mode_PTZ/'>Foscam Recording during Away Mode Only using Pan/Tilt/Zoom Control and Motion Detection</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/perform_actions_based_on_input_select/'>Perform actions based on input select</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/restart_ha_if_wemo_switch_is_not_detected/'>Restart Home Assistant if Wemo Switch is not detected</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/send_a_reminder/'>Send a reminder</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/notify_if_over_threshold/'>Send notification based on sensor</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/notify_if__new_ha_release/'>Send notification if new Home Assistant release</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/sonos_say/'>Sonos say script to speak with text-to-speech</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/automation_enocean_phue/'>Switch Philips Hue with enocean</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/track_battery_level/'>Track your battery level</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/turn_on_light_for_10_minutes_when_motion_detected/'>Turn on lights for 10 minutes after motion detected</a>
|
|
</li>
|
|
<li>
|
|
<a href='/cookbook/automation_using_timeinterval_inputboolean/'>Using time interval and input boolean</a>
|
|
</li>
|
|
</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>
|