Site updated at 2016-08-22 08:21:42 UTC
This commit is contained in:
parent
f9d65cbe57
commit
4acb07bf8e
559 changed files with 18878 additions and 21688 deletions
|
@ -91,108 +91,104 @@
|
|||
|
||||
<p>This example is for adding support for the imaginary Awesome Lights. It shows the different best practices for developing a platform.</p>
|
||||
|
||||
<p>Similar to Example Sensor Platform, Copy the code below and create it as a file in <code><config_dir>/custom_components/light/awesomelights.py</code>.</p>
|
||||
<p>Similar to Example Sensor Platform, Copy the code below and create it as a file in <code class="highlighter-rouge"><config_dir>/custom_components/light/awesomelights.py</code>.</p>
|
||||
|
||||
<p>Add the following to your configuration.yaml:</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre><span class="key">light</span>:
|
||||
- <span class="string"><span class="content">platform: awesomelights</span></span>
|
||||
<span class="key">host</span>: <span class="string"><span class="content">HOST_HERE</span></span>
|
||||
<span class="key">username</span>: <span class="string"><span class="content">USERNAME_HERE</span></span>
|
||||
<span class="key">password</span>: <span class="string"><span class="content">PASSWORD_HERE_OR_secrets.yaml</span></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">light</span><span class="pi">:</span>
|
||||
<span class="pi">-</span> <span class="s">platform</span><span class="pi">:</span> <span class="s">awesomelights</span>
|
||||
<span class="s">host</span><span class="pi">:</span> <span class="s">HOST_HERE</span>
|
||||
<span class="s">username</span><span class="pi">:</span> <span class="s">USERNAME_HERE</span>
|
||||
<span class="s">password</span><span class="pi">:</span> <span class="s">PASSWORD_HERE_OR_secrets.yaml</span>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>Note the <code>platform</code> name matches the filename for the source code.</p>
|
||||
<p>Note the <code class="highlighter-rouge">platform</code> name matches the filename for the source code.</p>
|
||||
|
||||
<div class="highlighter-coderay"><div class="CodeRay">
|
||||
<div class="code"><pre><span class="keyword">import</span> <span class="include">logging</span>
|
||||
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">logging</span>
|
||||
|
||||
<span class="comment"># Import the device class from the component that you want to support</span>
|
||||
<span class="keyword">from</span> <span class="include">homeassistant.components.light</span> <span class="keyword">import</span> <span class="include">ATTR_BRIGHTNESS</span>, <span class="include">Light</span>
|
||||
<span class="keyword">from</span> <span class="include">homeassistant.const</span> <span class="keyword">import</span> <span class="include">CONF_HOST</span>, <span class="include">CONF_USERNAME</span>, <span class="include">CONF_PASSWORD</span>
|
||||
<span class="c"># Import the device class from the component that you want to support</span>
|
||||
<span class="kn">from</span> <span class="nn">homeassistant.components.light</span> <span class="kn">import</span> <span class="n">ATTR_BRIGHTNESS</span><span class="p">,</span> <span class="n">Light</span>
|
||||
<span class="kn">from</span> <span class="nn">homeassistant.const</span> <span class="kn">import</span> <span class="n">CONF_HOST</span><span class="p">,</span> <span class="n">CONF_USERNAME</span><span class="p">,</span> <span class="n">CONF_PASSWORD</span>
|
||||
|
||||
<span class="comment"># Home Assistant depends on 3rd party packages for API specific code.</span>
|
||||
REQUIREMENTS = [<span class="string"><span class="delimiter">'</span><span class="content">awesome_lights==1.2.3</span><span class="delimiter">'</span></span>]
|
||||
<span class="c"># Home Assistant depends on 3rd party packages for API specific code.</span>
|
||||
<span class="n">REQUIREMENTS</span> <span class="o">=</span> <span class="p">[</span><span class="s">'awesome_lights==1.2.3'</span><span class="p">]</span>
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
<span class="n">_LOGGER</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="keyword">def</span> <span class="function">setup_platform</span>(hass, config, add_devices, discovery_info=<span class="predefined-constant">None</span>):
|
||||
<span class="docstring"><span class="delimiter">"""</span><span class="content">Setup the Awesome Light platform.</span><span class="delimiter">"""</span></span>
|
||||
<span class="keyword">import</span> <span class="include">awesomelights</span>
|
||||
<span class="k">def</span> <span class="nf">setup_platform</span><span class="p">(</span><span class="n">hass</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">add_devices</span><span class="p">,</span> <span class="n">discovery_info</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="s">"""Setup the Awesome Light platform."""</span>
|
||||
<span class="kn">import</span> <span class="nn">awesomelights</span>
|
||||
|
||||
<span class="comment"># Validate passed in config</span>
|
||||
host = config.get(CONF_HOST)
|
||||
username = config.get(CONF_USERNAME)
|
||||
password = config.get(CONF_PASSWORD)
|
||||
<span class="c"># Validate passed in config</span>
|
||||
<span class="n">host</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">CONF_HOST</span><span class="p">)</span>
|
||||
<span class="n">username</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">CONF_USERNAME</span><span class="p">)</span>
|
||||
<span class="n">password</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">CONF_PASSWORD</span><span class="p">)</span>
|
||||
|
||||
<span class="keyword">if</span> host <span class="keyword">is</span> <span class="predefined-constant">None</span> <span class="keyword">or</span> username <span class="keyword">is</span> <span class="predefined-constant">None</span> <span class="keyword">or</span> password <span class="keyword">is</span> <span class="predefined-constant">None</span>:
|
||||
_LOGGER.error(<span class="string"><span class="delimiter">'</span><span class="content">Invalid config. Expected %s, %s and %s</span><span class="delimiter">'</span></span>,
|
||||
CONF_HOST, CONF_USERNAME, CONF_PASSWORD)
|
||||
<span class="keyword">return</span> <span class="predefined-constant">False</span>
|
||||
<span class="k">if</span> <span class="n">host</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">username</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">password</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
||||
<span class="n">_LOGGER</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">'Invalid config. Expected </span><span class="si">%</span><span class="s">s, </span><span class="si">%</span><span class="s">s and </span><span class="si">%</span><span class="s">s'</span><span class="p">,</span>
|
||||
<span class="n">CONF_HOST</span><span class="p">,</span> <span class="n">CONF_USERNAME</span><span class="p">,</span> <span class="n">CONF_PASSWORD</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">False</span>
|
||||
|
||||
<span class="comment"># Setup connection with devices/cloud</span>
|
||||
hub = awesomelights.Hub(host, username, password)
|
||||
<span class="c"># Setup connection with devices/cloud</span>
|
||||
<span class="n">hub</span> <span class="o">=</span> <span class="n">awesomelights</span><span class="o">.</span><span class="n">Hub</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">)</span>
|
||||
|
||||
<span class="comment"># Verify that passed in config works</span>
|
||||
<span class="keyword">if</span> <span class="keyword">not</span> hub.is_valid_login():
|
||||
_LOGGER.error(<span class="string"><span class="delimiter">'</span><span class="content">Could not connect to AwesomeLight hub</span><span class="delimiter">'</span></span>)
|
||||
<span class="keyword">return</span> <span class="predefined-constant">False</span>
|
||||
<span class="c"># Verify that passed in config works</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">hub</span><span class="o">.</span><span class="n">is_valid_login</span><span class="p">():</span>
|
||||
<span class="n">_LOGGER</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">'Could not connect to AwesomeLight hub'</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">False</span>
|
||||
|
||||
<span class="comment"># Add devices</span>
|
||||
add_devices(AwesomeLight(light) <span class="keyword">for</span> light <span class="keyword">in</span> hub.lights())
|
||||
<span class="c"># Add devices</span>
|
||||
<span class="n">add_devices</span><span class="p">(</span><span class="n">AwesomeLight</span><span class="p">(</span><span class="n">light</span><span class="p">)</span> <span class="k">for</span> <span class="n">light</span> <span class="ow">in</span> <span class="n">hub</span><span class="o">.</span><span class="n">lights</span><span class="p">())</span>
|
||||
|
||||
|
||||
<span class="keyword">class</span> <span class="class">AwesomeLight</span>(Light):
|
||||
<span class="docstring"><span class="delimiter">"""</span><span class="content">Representation of an Awesome Light.</span><span class="delimiter">"""</span></span>
|
||||
<span class="k">class</span> <span class="nc">AwesomeLight</span><span class="p">(</span><span class="n">Light</span><span class="p">):</span>
|
||||
<span class="s">"""Representation of an Awesome Light."""</span>
|
||||
|
||||
<span class="keyword">def</span> <span class="function">__init__</span>(<span class="predefined-constant">self</span>, light):
|
||||
<span class="docstring"><span class="delimiter">"""</span><span class="content">Initialize an AwesomeLight.</span><span class="delimiter">"""</span></span>
|
||||
<span class="predefined-constant">self</span>._light = light
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">light</span><span class="p">):</span>
|
||||
<span class="s">"""Initialize an AwesomeLight."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_light</span> <span class="o">=</span> <span class="n">light</span>
|
||||
|
||||
<span class="decorator">@property</span>
|
||||
<span class="keyword">def</span> <span class="function">name</span>(<span class="predefined-constant">self</span>):
|
||||
<span class="docstring"><span class="delimiter">"""</span><span class="content">Return the display name of this light.</span><span class="delimiter">"""</span></span>
|
||||
<span class="keyword">return</span> <span class="predefined-constant">self</span>._light.name
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="s">"""Return the display name of this light."""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_light</span><span class="o">.</span><span class="n">name</span>
|
||||
|
||||
<span class="decorator">@property</span>
|
||||
<span class="keyword">def</span> <span class="function">brightness</span>(<span class="predefined-constant">self</span>):
|
||||
<span class="docstring"><span class="delimiter">"""</span><span class="content">Brightness of the light (an integer in the range 1-255).</span><span class="content">
|
||||
</span><span class="content">
|
||||
</span><span class="content"> This method is optional. Removing it indicates to Home Assistant</span><span class="content">
|
||||
</span><span class="content"> that brightness is not supported for this light.</span><span class="content">
|
||||
</span><span class="content"> </span><span class="delimiter">"""</span></span>
|
||||
<span class="keyword">return</span> <span class="predefined-constant">self</span>._light.brightness
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">brightness</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="s">"""Brightness of the light (an integer in the range 1-255).
|
||||
|
||||
<span class="decorator">@property</span>
|
||||
<span class="keyword">def</span> <span class="function">is_on</span>(<span class="predefined-constant">self</span>):
|
||||
<span class="docstring"><span class="delimiter">"""</span><span class="content">Return true if light is on.</span><span class="delimiter">"""</span></span>
|
||||
<span class="keyword">return</span> <span class="predefined-constant">self</span>._light.is_on()
|
||||
This method is optional. Removing it indicates to Home Assistant
|
||||
that brightness is not supported for this light.
|
||||
"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_light</span><span class="o">.</span><span class="n">brightness</span>
|
||||
|
||||
<span class="keyword">def</span> <span class="function">turn_on</span>(<span class="predefined-constant">self</span>, **kwargs):
|
||||
<span class="docstring"><span class="delimiter">"""</span><span class="content">Instruct the light to turn on.</span><span class="content">
|
||||
</span><span class="content">
|
||||
</span><span class="content"> You can skip the brightness part if your light does not support</span><span class="content">
|
||||
</span><span class="content"> brightness control.</span><span class="content">
|
||||
</span><span class="content"> </span><span class="delimiter">"""</span></span>
|
||||
<span class="predefined-constant">self</span>._light.brightness = kwargs.get(ATTR_BRIGHTNESS, <span class="integer">255</span>)
|
||||
<span class="predefined-constant">self</span>._light.turn_on()
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">is_on</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="s">"""Return true if light is on."""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_light</span><span class="o">.</span><span class="n">is_on</span><span class="p">()</span>
|
||||
|
||||
<span class="keyword">def</span> <span class="function">turn_off</span>(<span class="predefined-constant">self</span>, **kwargs):
|
||||
<span class="docstring"><span class="delimiter">"""</span><span class="content">Instruct the light to turn off.</span><span class="delimiter">"""</span></span>
|
||||
<span class="predefined-constant">self</span>._light.turn_off()
|
||||
<span class="k">def</span> <span class="nf">turn_on</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="s">"""Instruct the light to turn on.
|
||||
|
||||
<span class="keyword">def</span> <span class="function">update</span>(<span class="predefined-constant">self</span>):
|
||||
<span class="docstring"><span class="delimiter">"""</span><span class="content">Fetch new state data for this light.</span><span class="content">
|
||||
</span><span class="content">
|
||||
</span><span class="content"> This is the only method that should fetch new data for Home Assistant.</span><span class="content">
|
||||
</span><span class="content"> </span><span class="delimiter">"""</span></span>
|
||||
<span class="predefined-constant">self</span>._light.update()
|
||||
</pre></div>
|
||||
</div>
|
||||
You can skip the brightness part if your light does not support
|
||||
brightness control.
|
||||
"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_light</span><span class="o">.</span><span class="n">brightness</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ATTR_BRIGHTNESS</span><span class="p">,</span> <span class="mi">255</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_light</span><span class="o">.</span><span class="n">turn_on</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">turn_off</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="s">"""Instruct the light to turn off."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_light</span><span class="o">.</span><span class="n">turn_off</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="s">"""Fetch new state data for this light.
|
||||
|
||||
This is the only method that should fetch new data for Home Assistant.
|
||||
"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_light</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue