Site updated at 2016-12-18 10:06:17 UTC

This commit is contained in:
Travis CI 2016-12-18 10:06:17 +00:00
parent d85e9c6c63
commit c9af647a96
41 changed files with 4335 additions and 53 deletions

View file

@ -4,7 +4,7 @@
<title><![CDATA[Home Assistant]]></title> <title><![CDATA[Home Assistant]]></title>
<link href="https://home-assistant.io/atom.xml" rel="self"/> <link href="https://home-assistant.io/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>
@ -44,7 +44,7 @@
<li>Media player: Support for Sharp <a href="https://home-assistant.io/components/media_player.aquostv/">AquaosTV</a> (<a href="https://github.com/titilambert">@titilambert</a>)</li> <li>Media player: Support for Sharp <a href="https://home-assistant.io/components/media_player.aquostv/">AquaosTV</a> (<a href="https://github.com/titilambert">@titilambert</a>)</li>
<li>Media player: <a href="https://home-assistant.io/components/media_player.vlc/">VLC</a> support (<a href="https://github.com/Danielhiversen">@Danielhiversen</a>)</li> <li>Media player: <a href="https://home-assistant.io/components/media_player.vlc/">VLC</a> support (<a href="https://github.com/Danielhiversen">@Danielhiversen</a>)</li>
<li>Switch: Digital Loggers relay(<a href="https://github.com/dethpickle">@dethpickle</a>)</li> <li>Switch: Digital Loggers relay(<a href="https://github.com/dethpickle">@dethpickle</a>)</li>
<li>Sensor: Support for <a href="https://home-assistant.io/components/switch.digitalloggers/">Netdata</a> (<a href="https://github.com/fabaff">@fabaff</a>, <a href="https://github.com/ezar">@ezar</a>)</li> <li>Sensor: Support for <a href="https://home-assistant.io/components/sensor.netdata/">Netdata</a> (<a href="https://github.com/fabaff">@fabaff</a>, <a href="https://github.com/ezar">@ezar</a>)</li>
<li>Sensor: Support weather conditions from Austrian <a href="https://home-assistant.io/components/sensor.zamg/">ZAMG</a> (<a href="https://github.com/mjl">@mjl</a>)</li> <li>Sensor: Support weather conditions from Austrian <a href="https://home-assistant.io/components/sensor.zamg/">ZAMG</a> (<a href="https://github.com/mjl">@mjl</a>)</li>
<li>Verisure: Add Verisure smartcam capture service (<a href="https://github.com/turbokongen">@turbokongen</a>)</li> <li>Verisure: Add Verisure smartcam capture service (<a href="https://github.com/turbokongen">@turbokongen</a>)</li>
<li>Binary sensor: <a href="https://home-assistant.io/components/binary_sensor.flic/">Flic</a> button support added (<a href="https://github.com/soldag">@soldag</a>)</li> <li>Binary sensor: <a href="https://home-assistant.io/components/binary_sensor.flic/">Flic</a> button support added (<a href="https://github.com/soldag">@soldag</a>)</li>

View file

@ -135,7 +135,7 @@
<li>Media player: Support for Sharp <a href="https://home-assistant.io/components/media_player.aquostv/">AquaosTV</a> (<a href="https://github.com/titilambert">@titilambert</a>)</li> <li>Media player: Support for Sharp <a href="https://home-assistant.io/components/media_player.aquostv/">AquaosTV</a> (<a href="https://github.com/titilambert">@titilambert</a>)</li>
<li>Media player: <a href="https://home-assistant.io/components/media_player.vlc/">VLC</a> support (<a href="https://github.com/Danielhiversen">@Danielhiversen</a>)</li> <li>Media player: <a href="https://home-assistant.io/components/media_player.vlc/">VLC</a> support (<a href="https://github.com/Danielhiversen">@Danielhiversen</a>)</li>
<li>Switch: Digital Loggers relay(<a href="https://github.com/dethpickle">@dethpickle</a>)</li> <li>Switch: Digital Loggers relay(<a href="https://github.com/dethpickle">@dethpickle</a>)</li>
<li>Sensor: Support for <a href="https://home-assistant.io/components/switch.digitalloggers/">Netdata</a> (<a href="https://github.com/fabaff">@fabaff</a>, <a href="https://github.com/ezar">@ezar</a>)</li> <li>Sensor: Support for <a href="https://home-assistant.io/components/sensor.netdata/">Netdata</a> (<a href="https://github.com/fabaff">@fabaff</a>, <a href="https://github.com/ezar">@ezar</a>)</li>
<li>Sensor: Support weather conditions from Austrian <a href="https://home-assistant.io/components/sensor.zamg/">ZAMG</a> (<a href="https://github.com/mjl">@mjl</a>)</li> <li>Sensor: Support weather conditions from Austrian <a href="https://home-assistant.io/components/sensor.zamg/">ZAMG</a> (<a href="https://github.com/mjl">@mjl</a>)</li>
<li>Verisure: Add Verisure smartcam capture service (<a href="https://github.com/turbokongen">@turbokongen</a>)</li> <li>Verisure: Add Verisure smartcam capture service (<a href="https://github.com/turbokongen">@turbokongen</a>)</li>
<li>Binary sensor: <a href="https://home-assistant.io/components/binary_sensor.flic/">Flic</a> button support added (<a href="https://github.com/soldag">@soldag</a>)</li> <li>Binary sensor: <a href="https://home-assistant.io/components/binary_sensor.flic/">Flic</a> button support added (<a href="https://github.com/soldag">@soldag</a>)</li>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Community | Home Assistant]]></title> <title><![CDATA[Category: Community | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/community/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/community/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Device-Tracking | Home Assistant]]></title> <title><![CDATA[Category: Device-Tracking | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/device-tracking/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/device-tracking/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: ESP8266 | Home Assistant]]></title> <title><![CDATA[Category: ESP8266 | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/esp8266/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/esp8266/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: How-To | Home Assistant]]></title> <title><![CDATA[Category: How-To | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/how-to/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/how-to/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: iBeacons | Home Assistant]]></title> <title><![CDATA[Category: iBeacons | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/ibeacons/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/ibeacons/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Internet-of-Things | Home Assistant]]></title> <title><![CDATA[Category: Internet-of-Things | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/internet-of-things/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/internet-of-things/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: IoT-Data | Home Assistant]]></title> <title><![CDATA[Category: IoT-Data | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/iot-data/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/iot-data/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Micropython | Home Assistant]]></title> <title><![CDATA[Category: Micropython | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/micropython/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/micropython/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: MQTT | Home Assistant]]></title> <title><![CDATA[Category: MQTT | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/mqtt/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/mqtt/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Organisation | Home Assistant]]></title> <title><![CDATA[Category: Organisation | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/organisation/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/organisation/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: OwnTracks | Home Assistant]]></title> <title><![CDATA[Category: OwnTracks | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/owntracks/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/owntracks/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Presence-Detection | Home Assistant]]></title> <title><![CDATA[Category: Presence-Detection | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/presence-detection/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/presence-detection/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Public-Service-Announcement | Home Assistant]]></title> <title><![CDATA[Category: Public-Service-Announcement | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/public-service-announcement/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/public-service-announcement/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Release-Notes | Home Assistant]]></title> <title><![CDATA[Category: Release-Notes | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/release-notes/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/release-notes/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>
@ -128,7 +128,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
[vlc-media]: https://home-assistant.io/components/media_player.vlc/ [vlc-media]: https://home-assistant.io/components/media_player.vlc/
[aquostv]: https://home-assistant.io/components/media_player.aquostv/ [aquostv]: https://home-assistant.io/components/media_player.aquostv/
[digitalloggers]: https://home-assistant.io/components/switch.digitalloggers/ [digitalloggers]: https://home-assistant.io/components/switch.digitalloggers/
[netdata]: https://home-assistant.io/components/switch.digitalloggers/ [netdata]: https://home-assistant.io/components/sensor.netdata/
[bl-sensor]: https://home-assistant.io/components/sensor.broadlink/ [bl-sensor]: https://home-assistant.io/components/sensor.broadlink/
[bl-switch]: https://home-assistant.io/components/switch.broadlink/ [bl-switch]: https://home-assistant.io/components/switch.broadlink/
[hikvision]: https://home-assistant.io/components/binary_sensor.hikvision/ [hikvision]: https://home-assistant.io/components/binary_sensor.hikvision/

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Survey | Home Assistant]]></title> <title><![CDATA[Category: Survey | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/survey/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/survey/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Talks | Home Assistant]]></title> <title><![CDATA[Category: Talks | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/talks/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/talks/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Technology | Home Assistant]]></title> <title><![CDATA[Category: Technology | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/technology/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/technology/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: User-Stories | Home Assistant]]></title> <title><![CDATA[Category: User-Stories | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/user-stories/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/user-stories/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Video | Home Assistant]]></title> <title><![CDATA[Category: Video | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/video/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/video/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -4,7 +4,7 @@
<title><![CDATA[Category: Website | Home Assistant]]></title> <title><![CDATA[Category: Website | Home Assistant]]></title>
<link href="https://home-assistant.io/blog/categories/website/atom.xml" rel="self"/> <link href="https://home-assistant.io/blog/categories/website/atom.xml" rel="self"/>
<link href="https://home-assistant.io/"/> <link href="https://home-assistant.io/"/>
<updated>2016-12-18T08:59:56+00:00</updated> <updated>2016-12-18T10:04:06+00:00</updated>
<id>https://home-assistant.io/</id> <id>https://home-assistant.io/</id>
<author> <author>
<name><![CDATA[Home Assistant]]></name> <name><![CDATA[Home Assistant]]></name>

View file

@ -139,7 +139,7 @@
<li>Media player: Support for Sharp <a href="https://home-assistant.io/components/media_player.aquostv/">AquaosTV</a> (<a href="https://github.com/titilambert">@titilambert</a>)</li> <li>Media player: Support for Sharp <a href="https://home-assistant.io/components/media_player.aquostv/">AquaosTV</a> (<a href="https://github.com/titilambert">@titilambert</a>)</li>
<li>Media player: <a href="https://home-assistant.io/components/media_player.vlc/">VLC</a> support (<a href="https://github.com/Danielhiversen">@Danielhiversen</a>)</li> <li>Media player: <a href="https://home-assistant.io/components/media_player.vlc/">VLC</a> support (<a href="https://github.com/Danielhiversen">@Danielhiversen</a>)</li>
<li>Switch: Digital Loggers relay(<a href="https://github.com/dethpickle">@dethpickle</a>)</li> <li>Switch: Digital Loggers relay(<a href="https://github.com/dethpickle">@dethpickle</a>)</li>
<li>Sensor: Support for <a href="https://home-assistant.io/components/switch.digitalloggers/">Netdata</a> (<a href="https://github.com/fabaff">@fabaff</a>, <a href="https://github.com/ezar">@ezar</a>)</li> <li>Sensor: Support for <a href="https://home-assistant.io/components/sensor.netdata/">Netdata</a> (<a href="https://github.com/fabaff">@fabaff</a>, <a href="https://github.com/ezar">@ezar</a>)</li>
<li>Sensor: Support weather conditions from Austrian <a href="https://home-assistant.io/components/sensor.zamg/">ZAMG</a> (<a href="https://github.com/mjl">@mjl</a>)</li> <li>Sensor: Support weather conditions from Austrian <a href="https://home-assistant.io/components/sensor.zamg/">ZAMG</a> (<a href="https://github.com/mjl">@mjl</a>)</li>
<li>Verisure: Add Verisure smartcam capture service (<a href="https://github.com/turbokongen">@turbokongen</a>)</li> <li>Verisure: Add Verisure smartcam capture service (<a href="https://github.com/turbokongen">@turbokongen</a>)</li>
<li>Binary sensor: <a href="https://home-assistant.io/components/binary_sensor.flic/">Flic</a> button support added (<a href="https://github.com/soldag">@soldag</a>)</li> <li>Binary sensor: <a href="https://home-assistant.io/components/binary_sensor.flic/">Flic</a> button support added (<a href="https://github.com/soldag">@soldag</a>)</li>

View file

@ -94,7 +94,7 @@
<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># Example configuration.yaml entry</span> <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># Example configuration.yaml entry</span>
<span class="s">alarm_control_panel</span><span class="pi">:</span> <span class="s">alarm_control_panel</span><span class="pi">:</span>
<span class="s">platform</span><span class="pi">:</span> <span class="s">manual</span> <span class="pi">-</span> <span class="s">platform</span><span class="pi">:</span> <span class="s">manual</span>
</code></pre> </code></pre>
</div> </div>

View file

@ -105,32 +105,43 @@
<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># Example configuration.yaml entry</span> <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># Example configuration.yaml entry</span>
<span class="s">cover</span><span class="pi">:</span> <span class="s">cover</span><span class="pi">:</span>
<span class="s">platform</span><span class="pi">:</span> <span class="s">rpi_gpio</span> <span class="pi">-</span> <span class="s">platform</span><span class="pi">:</span> <span class="s">rpi_gpio</span>
<span class="s">relay_time</span><span class="pi">:</span> <span class="s">0.2</span> <span class="s">covers</span><span class="pi">:</span>
<span class="s">state_pull_mode</span><span class="pi">:</span> <span class="s1">'</span><span class="s">UP'</span> <span class="pi">-</span> <span class="s">relay_pin</span><span class="pi">:</span> <span class="s">10</span>
<span class="s">covers</span><span class="pi">:</span> <span class="s">state_pin</span><span class="pi">:</span> <span class="s">11</span>
<span class="pi">-</span> <span class="s">relay_pin</span><span class="pi">:</span> <span class="s">10</span>
<span class="s">state_pin</span><span class="pi">:</span> <span class="s">11</span>
<span class="pi">-</span> <span class="s">relay_pin</span><span class="pi">:</span> <span class="s">12</span>
<span class="s">state_pin</span><span class="pi">:</span> <span class="s">13</span>
<span class="s">name</span><span class="pi">:</span> <span class="s1">'</span><span class="s">Right</span><span class="nv"> </span><span class="s">door'</span>
</code></pre> </code></pre>
</div> </div>
<p>Configuration variables:</p> <p>Configuration variables:</p>
<ul> <ul>
<li><strong>relay_time</strong> (<em>Optional</em>): The time that the relay will be on for in seconds. Default is .2 seconds.</li>
<li><strong>state_pull_mode</strong> (<em>Optional</em>): The direction the State pin is pulling. It can be UP or DOWN. Default is UP.</li>
<li><strong>covers</strong> array (<em>Required</em>): List of your doors. <li><strong>covers</strong> array (<em>Required</em>): List of your doors.
<ul> <ul>
<li><strong>name</strong> (<em>Optional</em>): Name to use in the Frontend.</li>
<li><strong>relay_pin</strong> (<em>Required</em>): The pin of your Raspberry Pi where the relay is connected.</li> <li><strong>relay_pin</strong> (<em>Required</em>): The pin of your Raspberry Pi where the relay is connected.</li>
<li><strong>state_pin</strong> (<em>Required</em>): The pin of your Raspberry Pi to retrieve the state.</li> <li><strong>state_pin</strong> (<em>Required</em>): The pin of your Raspberry Pi to retrieve the state.</li>
<li><strong>state_pull_mode</strong> (<em>Optional</em>): The direction the State pin is pulling. It can be UP or DOWN. Default is UP.</li> <li><strong>name</strong> (<em>Optional</em>): Name to use in the frontend.</li>
<li><strong>relay_time</strong> (<em>Optional</em>): The time that the relay will be on for in seconds. Default is .2 seconds.</li>
</ul> </ul>
</li> </li>
</ul> </ul>
<p>Full example:</p>
<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># Example configuration.yaml entry</span>
<span class="s">cover</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">platform</span><span class="pi">:</span> <span class="s">rpi_gpio</span>
<span class="s">relay_time</span><span class="pi">:</span> <span class="s">0.2</span>
<span class="s">state_pull_mode</span><span class="pi">:</span> <span class="s1">'</span><span class="s">UP'</span>
<span class="s">covers</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">relay_pin</span><span class="pi">:</span> <span class="s">10</span>
<span class="s">state_pin</span><span class="pi">:</span> <span class="s">11</span>
<span class="pi">-</span> <span class="s">relay_pin</span><span class="pi">:</span> <span class="s">12</span>
<span class="s">state_pin</span><span class="pi">:</span> <span class="s">13</span>
<span class="s">name</span><span class="pi">:</span> <span class="s1">'</span><span class="s">Right</span><span class="nv"> </span><span class="s">door'</span>
</code></pre>
</div>
</article> </article>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,229 @@
<!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>Configuration - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="AppDaemon Configuration">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/configuration/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Configuration">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/configuration/">
<meta property="og:type" content="article">
<meta property="og:description" content="AppDaemon Configuration">
<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="Configuration">
<meta name="twitter:description" content="AppDaemon Configuration">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
Configuration
</h1>
</header>
<hr class="divider">
<p>When you have appdaemon installed by either method, copy the <code class="highlighter-rouge">conf/appdaemon.cfg.example</code> file to <code class="highlighter-rouge">conf/appdaemon.cfg</code>, then edit the <code class="highlighter-rouge">[AppDaemon]</code> section to reflect your environment:</p>
<div class="highlighter-rouge"><pre class="highlight"><code>[AppDaemon]
ha_url = &lt;some_url&gt;
ha_key = &lt;some key&gt;
logfile = STDOUT
errorfile = STDERR
app_dir = &lt;Path to appdaemon dir&gt;/conf/apps
threads = 10
latitude = &lt;latitude&gt;
longitude = &lt;longitude&gt;
elevation = &lt;elevation
timezone = &lt;timezone&gt;
cert_path = &lt;path/to/root/CA/cert&gt;
# Apps
[hello_world]
module = hello
class = HelloWorld
</code></pre>
</div>
<ul>
<li><code class="highlighter-rouge">ha_url</code> is a reference to your home assistant installation and must include the correct port number and scheme (<code class="highlighter-rouge">http://</code> or <code class="highlighter-rouge">https://</code> as appropriate)</li>
<li><code class="highlighter-rouge">ha_key</code> should be set to your key if you have one, otherwise it can be removed.</li>
<li><code class="highlighter-rouge">logfile</code> (optional) is the path to where you want <code class="highlighter-rouge">AppDaemon</code> to keep its main log. When run from the command line this is not used - log messages come out on the terminal. When running as a daemon this is where the log information will go. In the example above I created a directory specifically for AppDaemon to run from, although there is no reason you cant keep it in the <code class="highlighter-rouge">appdaemon</code> directory of the cloned repository. If <code class="highlighter-rouge">logfile = STDOUT</code>, output will be sent to stdout instead of stderr when running in the foreground, if not specified, output will be sent to STDOUT.</li>
<li><code class="highlighter-rouge">errorfile</code> (optional) is the name of the logfile for errors - this will usually be errors during compilation and execution of the apps. If <code class="highlighter-rouge">errorfile = STDERR</code> errors will be sent to stderr instead of a file, if not specified, output will be sent to STDERR.</li>
<li><code class="highlighter-rouge">app_dir</code> (optional) is the directory the apps are placed in. If not specified, AppDaemon will look first in <code class="highlighter-rouge">~/.homeassistant</code> then <code class="highlighter-rouge">/etc/appdaemon</code> for a subdirectory named <code class="highlighter-rouge">apps</code></li>
<li><code class="highlighter-rouge">threads</code> - the number of dedicated worker threads to create for running the apps. Note, this will bear no resembelance to the number of apps you have, the threads are re-used and only active for as long as required to tun a particular callback or initialization, leave this set to 10 unless you experience thread starvation</li>
<li><code class="highlighter-rouge">latitude</code>, <code class="highlighter-rouge">longitude</code>, <code class="highlighter-rouge">elevation</code>, <code class="highlighter-rouge">timezone</code> - should all be copied from your home assistant configuration file</li>
<li><code class="highlighter-rouge">cert_path</code> (optional) - path to root CA cert directory - use only if you are using self signed certs.</li>
</ul>
<p>The <code class="highlighter-rouge">#Apps</code> section is the configuration for the Hello World program and should be left in place for initial testing but can be removed later if desired, as other Apps are added, App configuration is described in the <a href="API.md">API doc</a>.</p>
<h2><a class="title-link" name="docker" href="#docker"></a> Docker</h2>
<p>For Docker Configuration you need to take a couple of extra things into consideration.</p>
<p>Our Docker image is designed to load your configuration and apps from a volume at <code class="highlighter-rouge">/conf</code> so that you can manage them in your own git repository, or place them anywhere else on the system and map them using the Docker command line.</p>
<p>For example, if you have a local repository in <code class="highlighter-rouge">/Users/foo/ha-config</code> containing the following files:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>git ls-files
configuration.yaml
customize.yaml
known_devices.yaml
appdaemon.cfg
apps
apps/magic.py
</code></pre>
</div>
<p>You will need to modify the <code class="highlighter-rouge">appdaemon.cfg</code> file to point to these apps in <code class="highlighter-rouge">/conf/apps</code>:</p>
<div class="highlighter-rouge"><pre class="highlight"><code>[AppDaemon]
ha_url = &lt;some_url&gt;
ha_key = &lt;some key&gt;
logfile = STDOUT
errorfile = STDERR
app_dir = /conf/apps
threads = 10
latitude = &lt;latitude&gt;
longitude = &lt;longitude&gt;
elevation = &lt;elevation
timezone = &lt;timezone&gt;
</code></pre>
</div>
<p>You can run Docker and point the conf volume to that directory.</p>
</article>
</div>
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
<div class="grid">
<section class="aside-module grid__item one-whole lap-one-half">
<div class="section">
<h1 class="title delta">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a href='/ecosystem/appdaemon/'>General </a></li>
<li><a href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a class='active' href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -0,0 +1,161 @@
<!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>Example Apps - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="AppDaemon Example Apps">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/example_apps/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Example Apps">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/example_apps/">
<meta property="og:type" content="article">
<meta property="og:description" content="AppDaemon Example Apps">
<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="Example Apps">
<meta name="twitter:description" content="AppDaemon Example Apps">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
Example Apps
</h1>
</header>
<hr class="divider">
<p>There are a number of example apps under conf/examples, and the <code class="highlighter-rouge">conf/examples.cfg</code> file gives sample parameters for them.</p>
</article>
</div>
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
<div class="grid">
<section class="aside-module grid__item one-whole lap-one-half">
<div class="section">
<h1 class="title delta">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a href='/ecosystem/appdaemon/'>General </a></li>
<li><a href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a class='active' href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -0,0 +1,161 @@
<!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>AppDaemon - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="AppDaemon is a loosely coupled, multithreaded, sandboxed python execution environment for writing automation apps for Home Assistant">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="AppDaemon">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/">
<meta property="og:type" content="article">
<meta property="og:description" content="AppDaemon is a loosely coupled, multithreaded, sandboxed python execution environment for writing automation apps for Home Assistant">
<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="AppDaemon">
<meta name="twitter:description" content="AppDaemon is a loosely coupled, multithreaded, sandboxed python execution environment for writing automation apps for Home Assistant">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
AppDaemon
</h1>
</header>
<hr class="divider">
<p>AppDaemon is a loosely coupled, multithreaded, sandboxed python execution environment for writing automation apps for Home Assistant.</p>
</article>
</div>
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
<div class="grid">
<section class="aside-module grid__item one-whole lap-one-half">
<div class="section">
<h1 class="title delta">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a class='active' href='/ecosystem/appdaemon/'>General </a></li>
<li><a href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -0,0 +1,193 @@
<!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>Installation - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="AppDaemon Installation">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/installation/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Installation">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/installation/">
<meta property="og:type" content="article">
<meta property="og:description" content="AppDaemon Installation">
<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="Installation">
<meta name="twitter:description" content="AppDaemon Installation">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
Installation
</h1>
</header>
<hr class="divider">
<p>Installation is either by <code class="highlighter-rouge">pip3</code> or Docker.</p>
<h2><a class="title-link" name="clone-the-repository" href="#clone-the-repository"></a> Clone the Repository</h2>
<p>For either method you will need to clone the <strong>AppDaemon</strong> repository to the current local directory on your machine.</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>git clone https://github.com/acockburn/appdaemon.git
</code></pre>
</div>
<p>Change your working directory to the repository root. Moving forward, we will be working from this directory.</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span><span class="nb">cd </span>appdaemon
</code></pre>
</div>
<h2><a class="title-link" name="install-using-docker" href="#install-using-docker"></a> Install using Docker</h2>
<p>To build the Docker image run the following:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>docker build -t appdaemon .
</code></pre>
</div>
<p>(Note the period at the end of the above command)</p>
<h2><a class="title-link" name="install-using-pip3" href="#install-using-pip3"></a> Install using <code class="highlighter-rouge">pip3</code></h2>
<p>Before running <code class="highlighter-rouge">AppDaemon</code> you will need to install the package:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>sudo pip3 install .
</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">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a href='/ecosystem/appdaemon/'>General </a></li>
<li><a class='active' href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -0,0 +1,161 @@
<!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>Operation - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="Operation">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/operation/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Operation">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/operation/">
<meta property="og:type" content="article">
<meta property="og:description" content="Operation">
<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="Operation">
<meta name="twitter:description" content="Operation">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
Operation
</h1>
</header>
<hr class="divider">
<p>Since <code class="highlighter-rouge">AppDaemon</code> under the covers uses the exact same APIs as the frontend UI, you typically see it react at about the same time to a given event. Calling back to Home Assistant is also pretty fast especially if they are running on the same machine. In action, observed latency above the built in automation component is usually sub-second.</p>
</article>
</div>
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
<div class="grid">
<section class="aside-module grid__item one-whole lap-one-half">
<div class="section">
<h1 class="title delta">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a href='/ecosystem/appdaemon/'>General </a></li>
<li><a href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a class='active' href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -0,0 +1,161 @@
<!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>Starting at Reboot - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="Starting at Reboot">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/reboot/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Starting at Reboot">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/reboot/">
<meta property="og:type" content="article">
<meta property="og:description" content="Starting at Reboot">
<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="Starting at Reboot">
<meta name="twitter:description" content="Starting at Reboot">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
Starting at Reboot
</h1>
</header>
<hr class="divider">
<p>To run <code class="highlighter-rouge">AppDaemon</code> at reboot, I have provided a sample init script in the <code class="highlighter-rouge">./scripts</code> directory. These have been tested on a Raspberry PI - your mileage may vary on other systems. There is also a sample Systemd script.</p>
</article>
</div>
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
<div class="grid">
<section class="aside-module grid__item one-whole lap-one-half">
<div class="section">
<h1 class="title delta">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a href='/ecosystem/appdaemon/'>General </a></li>
<li><a href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a class='active' href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -0,0 +1,243 @@
<!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>Running AppDaemon - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="Running AppDaemon">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/running/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Running AppDaemon">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/running/">
<meta property="og:type" content="article">
<meta property="og:description" content="Running AppDaemon">
<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="Running AppDaemon">
<meta name="twitter:description" content="Running AppDaemon">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
Running AppDaemon
</h1>
</header>
<hr class="divider">
<p>As configured, <code class="highlighter-rouge">AppDaemon</code> comes with a single HelloWorld App that will send a greeting to the logfile to show that everything is working correctly.</p>
<h2><a class="title-link" name="docker" href="#docker"></a> Docker</h2>
<p>Assuming you have set the config up as described above for Docker, you can run it with the command:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>docker run -d -v &lt;Path to Config&gt;/conf:/conf --name appdaemon appdaemon:latest
</code></pre>
</div>
<p>In the example above you would use:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>docker run -d -v /Users/foo/ha-config:/conf --name appdaemon appdaemon:latest
</code></pre>
</div>
<p>Where you place the <code class="highlighter-rouge">conf</code> and <code class="highlighter-rouge">conf/apps</code> directory is up to you - it can be in downloaded repostory, or anywhere else on the host, as long as you use the correct mapping in the <code class="highlighter-rouge">docker run</code> command.</p>
<p>You can inspect the logs as follows:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>docker logs appdaemon
2016-08-22 10:08:16,575 INFO Got initial state
2016-08-22 10:08:16,576 INFO Loading Module: /export/hass/appdaemon_test/conf/apps/hello.py
2016-08-22 10:08:16,578 INFO Loading Object hello_world using class HelloWorld from module hello
2016-08-22 10:08:16,580 INFO Hello from AppDaemon
2016-08-22 10:08:16,584 INFO You are now ready to run Apps!
</code></pre>
</div>
<p>Note that for Docker, the error and regular logs are combined.</p>
<h2><a class="title-link" name="pip3" href="#pip3"></a> <code class="highlighter-rouge">pip3</code></h2>
<p>You can then run AppDaemon from the command line as follows:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>appdaemon -c conf/appdaemon.cfg
</code></pre>
</div>
<p>If all is well, you should see something like the following:</p>
<div class="highlighter-rouge"><pre class="highlight"><code>$ appdaemon -c conf/appdaemon.cfg
2016-08-22 10:08:16,575 INFO Got initial state
2016-08-22 10:08:16,576 INFO Loading Module: /export/hass/appdaemon_test/conf/apps/hello.py
2016-08-22 10:08:16,578 INFO Loading Object hello_world using class HelloWorld from module hello
2016-08-22 10:08:16,580 INFO Hello from AppDaemon
2016-08-22 10:08:16,584 INFO You are now ready to run Apps!
</code></pre>
</div>
<h2><a class="title-link" name="appdaemon-arguments" href="#appdaemon-arguments"></a> AppDaemon arguments</h2>
<div class="highlighter-rouge"><pre class="highlight"><code>usage: appdaemon [-h] [-c CONFIG] [-p PIDFILE] [-t TICK] [-s STARTTIME]
[-e ENDTIME] [-i INTERVAL]
[-D {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [-v] [-d]
optional arguments:
-h, --help show this help message and exit
-c CONFIG, --config CONFIG
full path to config file
-p PIDFILE, --pidfile PIDFILE
full path to PID File
-t TICK, --tick TICK time in seconds that a tick in the schedular lasts
-s STARTTIME, --starttime STARTTIME
start time for scheduler &lt;YYYY-MM-DD HH:MM:SS&gt;
-e ENDTIME, --endtime ENDTIME
end time for scheduler &lt;YYYY-MM-DD HH:MM:SS&gt;
-i INTERVAL, --interval INTERVAL
multiplier for scheduler tick
-D {DEBUG,INFO,WARNING,ERROR,CRITICAL}, --debug {DEBUG,INFO,WARNING,ERROR,CRITICAL}
debug level
-v, --version show program's version number and exit
-d, --daemon run as a background process
</code></pre>
</div>
<p>-c is the path to the configuration file. If not specified, AppDaemon will look for a file named <code class="highlighter-rouge">appdaemon.cfg</code> first in <code class="highlighter-rouge">~/.homeassistant</code> then in <code class="highlighter-rouge">/etc/appdaemon</code>. If the file is not specified and it is not found in either location, AppDaemon will raise an exception.</p>
<p>-d and -p are used by the init file to start the process as a daemon and are not required if running from the command line.</p>
<p>-D can be used to increase the debug level for internal AppDaemon operations as well as apps using the logging function.</p>
<p>The -s, -i, -t and -s options are for the Time Travel feature and should only be used for testing. They are described in more detail in the API documentation.</p>
</article>
</div>
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
<div class="grid">
<section class="aside-module grid__item one-whole lap-one-half">
<div class="section">
<h1 class="title delta">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a href='/ecosystem/appdaemon/'>General </a></li>
<li><a href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a class='active' href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -0,0 +1,280 @@
<!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>AppDaemon Tutorial - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="AppDaemon Tutorial">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/tutorial/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="AppDaemon Tutorial">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/tutorial/">
<meta property="og:type" content="article">
<meta property="og:description" content="AppDaemon Tutorial">
<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="AppDaemon Tutorial">
<meta name="twitter:description" content="AppDaemon Tutorial">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
AppDaemon Tutorial
</h1>
</header>
<hr class="divider">
<h2><a class="title-link" name="another-take-on-automation" href="#another-take-on-automation"></a> Another Take on Automation</h2>
<p>If you havent yet read Paulus excellent Blog entry on <a href="https://home-assistant.io/blog/2016/01/19/perfect-home-automation/">Perfect Home Automation</a> I would encourage you to take a look. As a veteran of several Home Automation systems with varying degrees success, it was this article more than anything else that convinced me that Home Assistant had the right philosophy behind it and was on the right track. One of the most important points made is that being able to control your lights from your phone, 9 times out of 10 is harder than using a lightswitch - where Home Automation really comes into its own is when you start removing the need to use a phone or the switch - the “Automation” in Home Automation. A surprisingly large number of systems out there miss this essential point and have limited abilities to automate anything which is why a robust and open system such as Home Assistant is such an important part of the equation in bring this all together in the vast and chaotic ecosystem that is the “Internet of Things”.</p>
<p>So given the importance of Automation, what should Automation allow us to do? I am a pragmatist at heart so I judge individual systems by the ease of accomplishing a few basic but representative tasks:</p>
<ul>
<li>Can the system respond to presence or absence of people?</li>
<li>Can I turn a light on at Sunset +/- a certain amount of time?</li>
<li>Can I arrive home in light or dark and have the lights figure out if they should be on or off?</li>
<li>As I build my system out, can I get the individual pieces to co-operate and use and re-use (potentially complex) logic to make sure everything works smoothly?</li>
<li>Is it open and expandable?</li>
<li>Does it run locally without any reliance on the cloud?</li>
</ul>
<p>In my opinion, Home Assistant accomplishes the majority of these very well with a combination of Automations, Scripts and Templates, and its Restful API.</p>
<p>So why <code class="highlighter-rouge">AppDaemon</code>? AppDaemon is not meant to replace Home Assistant Automations and Scripts, rather complement them. For a lot of things, automations work well and can be very succinct. However, there is a class of more complex automations for which they become harder to use, and appdeamon then comes into its own. It brings quite a few things to the table:</p>
<ul>
<li>New paradigm - some problems require a procedural and/or iterative approach, and <code class="highlighter-rouge">AppDaemon</code> Apps are a much more natural fit for this. Recent enhancements to Home Assistant scripts and templates have made huge strides, but for the most complex scenarios, Apps can do things that Automations cant</li>
<li>Ease of use - AppDaemons API is full of helper functions that make programming as easy and natural as possible. The functions and their operation are as “Pythonic” as possible, experienced Python programmers should feel right at home.</li>
<li>Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g. a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file</li>
<li>Dynamic - AppDaemon has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to its loose coupling. However, it is better than that - the user can make changes to code and AppDaemon will automatically reload the code, figure out which Apps were using it and restart them to use the new code with out the need to restart <code class="highlighter-rouge">AppDaemon</code> itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result.</li>
<li>Complex logic - Pythons If/Else constructs are clearer and easier to code for arbitrarily complex nested logic</li>
<li>Durable variables and state - variables can be kept between events to keep track of things like the number of times a motion sensor has been activated, or how long it has been since a door opened</li>
<li>All the power of Python - use any of Pythons libraries, create your own modules, share variables, refactor and re-use code, create a single app to do everything, or multiple apps for individual tasks - nothing is off limits!</li>
</ul>
<p>It is in fact a testament to Home Assistants open nature that a component like <code class="highlighter-rouge">AppDaemon</code> can be integrated so neatly and closely that it acts in all ways like an extension of the system, not a second class citizen. Part of the strength of Home Assistants underlying design is that it makes no assumptions whatever about what it is controlling or reacting to, or reporting state on. This is made achievable in part by the great flexibility of Python as a programming environment for Home Assistant, and carrying that forward has enabled me to use the same philosophy for <code class="highlighter-rouge">AppDaemon</code> - it took surprisingly little code to be able to respond to basic events and call services in a completely open ended manner - the bulk of the work after that was adding additonal functions to make things that were already possible easier.</p>
<h2><a class="title-link" name="how-it-works" href="#how-it-works"></a> How it Works</h2>
<p>The best way to show what AppDaemon does is through a few simple examples.</p>
<h3><a class="title-link" name="sunrisesunset-lighting" href="#sunrisesunset-lighting"></a> Sunrise/Sunset Lighting</h3>
<p>Lets start with a simple App to turn a light on every night at sunset and off every morning at sunrise. Every App when first started will have its <code class="highlighter-rouge">initialize()</code> function called which gives it a chance to register a callback for AppDaemonss scheduler for a specific time. In this case we are using <code class="highlighter-rouge">run_at_sunrise()</code> and <code class="highlighter-rouge">run_at_sunset()</code> to register 2 separate callbacks. The argument <code class="highlighter-rouge">0</code> is the number of seconds offset from sunrise or sunset and can be negative or positive. For complex intervals it can be convenient to use Pythons <code class="highlighter-rouge">datetime.timedelta</code> class for calculations. When sunrise or sunset occurs, the appropriate callback function, <code class="highlighter-rouge">sunrise_cb()</code> or <code class="highlighter-rouge">sunset_cb()</code> is called which then makes a call to Home Assistant to turn the porch light on or off by activating a scene. The variables <code class="highlighter-rouge">args["on_scene"]</code> and <code class="highlighter-rouge">args["off_scene"]</code> are passed through from the configuration of this particular App, and the same code could be reused to activate completely different scenes in a different version of the App.</p>
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">homeassistant.appapi</span> <span class="kn">as</span> <span class="nn">appapi</span>
<span class="k">class</span> <span class="nc">OutsideLights</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="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">run_at_sunrise</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sunrise_cb</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">run_at_sunset</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sunset_cb</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">sunrise_cb</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">turn_on</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s">"off_scene"</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">sunset_cb</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">turn_on</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s">"on_scene"</span><span class="p">])</span>
</code></pre>
</div>
<p>This is also fairly easy to achieve with Home Assistant automations, but we are just getting started.</p>
<h3>Motion Light</h3>
<p>Our next example is to turn on a light when motion is detected and it is dark, and turn it off after a period of time. This time, the <code class="highlighter-rouge">initialize()</code> function registers a callback on a state change (of the motion sensor) rather than a specific time. We tell AppDaemon that we are only interested in state changesd where the motion detector comes on by adding an additional parameter to the callback registration - <code class="highlighter-rouge">new = "on"</code>. When the motion is detected, the callack function <code class="highlighter-rouge">motion()</code> is called, and we check whether or not the sun has set using a built-in convenience function: <code class="highlighter-rouge">sun_down()</code>. Next, we turn the light on with <code class="highlighter-rouge">turn_on()</code>, then set a timer using <code class="highlighter-rouge">run_in()</code> to turn the light off after 60 seconds, which is another call to the scheduler to execute in a set time from now, which results in <code class="highlighter-rouge">AppDaemon</code> calling <code class="highlighter-rouge">light_off()</code> 60 seconds later using the <code class="highlighter-rouge">turn_off()</code> call to actually turn the light off. This is still pretty simple in code terms:</p>
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">homeassistant.appapi</span> <span class="kn">as</span> <span class="nn">appapi</span>
<span class="k">class</span> <span class="nc">FlashyMotionLights</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="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="bp">self</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">motion</span><span class="p">,</span> <span class="s">"binary_sensor.drive"</span><span class="p">,</span> <span class="n">new</span> <span class="o">=</span> <span class="s">"on"</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">motion</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sun_down</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">turn_on</span><span class="p">(</span><span class="s">"light.drive"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">run_in</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">light_off</span><span class="p">,</span> <span class="mi">60</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">light_off</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">turn_off</span><span class="p">(</span><span class="s">"light.drive"</span><span class="p">)</span>
</code></pre>
</div>
<p>This is starting to get a little more complex in Home Assistant automations requiring an Automation rule and two separate scripts.</p>
<p>Now lets extend this with a somewhat artificial example to show something that is simple in AppDaemon but very difficult if not impossible using automations. Lets warn someone inside the house that there has been motion outside by flashing a lamp on and off 10 times. We are reacting to the motion as before by turning on the light and setting a timer to turn it off again, but in addition, we set a 1 second timer to run <code class="highlighter-rouge">flash_warning()</code> which when called, toggles the inside light and sets another timer to call itself a second later. To avoid re-triggering forever, it keeps a count of how many times it has been activated and bales out after 10 iterations.</p>
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">homeassistant.appapi</span> <span class="kn">as</span> <span class="nn">appapi</span>
<span class="k">class</span> <span class="nc">MotionLights</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="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="bp">self</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">motion</span><span class="p">,</span> <span class="s">"binary_sensor.drive"</span><span class="p">,</span> <span class="n">new</span> <span class="o">=</span> <span class="s">"on"</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">motion</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="bp">self</span><span class="o">.</span><span class="n">sun_down</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">turn_on</span><span class="p">(</span><span class="s">"light.drive"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">run_in</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">light_off</span><span class="p">,</span> <span class="mi">60</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">flashcount</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">run_in</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">flash_warning</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">light_off</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">turn_off</span><span class="p">(</span><span class="s">"light.drive"</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">flash_warning</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">toggle</span><span class="p">(</span><span class="s">"light.living_room"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">flashcount</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">flashcount</span> <span class="o">&lt;</span> <span class="mi">10</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">run_in</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">flash_warning</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</code></pre>
</div>
<p>Of course if I wanted to make this App or its predecessor reusable I would have provide parameters for the sensor, the light to activate on motion, the warning light and even the number of flashes and delay between flashes.</p>
<p>In addition, Apps can write to <code class="highlighter-rouge">AppDaemon</code>s logfiles, and there is a system of constraints that allows yout to control when and under what circumstances Apps and callbacks are active to keep the logic clean and simple.</p>
<p>I have spent the last few weeks moving all of my (fairly complex) automations over to <code class="highlighter-rouge">APPDaemon</code> and so far it is working very reliably.</p>
<p>Some people will maybe look at all of this and say “what use is this, I can already do all of this”, and that is fine, as I said this is an alternative not a replacement, but I am hopeful that for some users this will seem a more natural, powerful and nimble way of building potentially very complex automations.</p>
<p>If this has whet your appetite, feel free to give it a try.</p>
<p>Happy Automating!</p>
</article>
</div>
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
<div class="grid">
<section class="aside-module grid__item one-whole lap-one-half">
<div class="section">
<h1 class="title delta">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a href='/ecosystem/appdaemon/'>General </a></li>
<li><a href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a class='active' href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -0,0 +1,174 @@
<!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>Updating AppDaemon - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="Updating AppDaemon">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/updating/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Updating AppDaemon">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/updating/">
<meta property="og:type" content="article">
<meta property="og:description" content="Updating AppDaemon">
<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="Updating AppDaemon">
<meta name="twitter:description" content="Updating AppDaemon">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
Updating AppDaemon
</h1>
</header>
<hr class="divider">
<p>To update AppDaemon after I have released new code, just run the following command to update your copy:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>git pull origin
</code></pre>
</div>
<p>If you are using pip3 for the install do this:</p>
<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>sudo pip3 uninstall appdaemon
<span class="gp">$ </span>sudo pip3 install .
</code></pre>
</div>
<p>If you are using docker, rerun the steps to create a new docker image.</p>
</article>
</div>
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
<div class="grid">
<section class="aside-module grid__item one-whole lap-one-half">
<div class="section">
<h1 class="title delta">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a href='/ecosystem/appdaemon/'>General </a></li>
<li><a href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a class='active' href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -0,0 +1,172 @@
<!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>Windows Support - Home Assistant</title>
<meta name="author" content="Home Assistant">
<meta name="description" content="Windows Support">
<meta name="viewport" content="width=device-width">
<link rel="canonical" href="https://home-assistant.io/ecosystem/appdaemon/windows/">
<meta property="fb:app_id" content="338291289691179">
<meta property="og:title" content="Windows Support">
<meta property="og:site_name" content="Home Assistant">
<meta property="og:url" content="https://home-assistant.io/ecosystem/appdaemon/windows/">
<meta property="og:type" content="article">
<meta property="og:description" content="Windows Support">
<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="Windows Support">
<meta name="twitter:description" content="Windows Support">
<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>
<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="/ecosystem/">Ecosystem</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>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="grid-wrapper">
<div class="grid grid-center">
<div class="grid__item two-thirds lap-one-whole palm-one-whole">
<article class="page">
<header>
<h1 class="title indent">
Windows Support
</h1>
</header>
<hr class="divider">
<p>AppDaemon runs under windows and has been tested with the official 3.5.2 release of Python. There are a couple of caveats however:</p>
<ul>
<li>The <code class="highlighter-rouge">-d</code> or <code class="highlighter-rouge">--daemonize</code> option is not supported owing to limitations in the Windows implementation of Python.</li>
<li>Some internal diagnostics are disabled. This is not user visible but may hamper troubleshooting of internal issues if any crop up</li>
</ul>
<p>AppDaemon can be installed exactly as per the instructions for every other version using pip3.</p>
<h2><a class="title-link" name="windows-under-the-linux-subsystem" href="#windows-under-the-linux-subsystem"></a> Windows Under the Linux Subsystem</h2>
<p>Windows 10 now supports a full Linux bash environment that is capable of running Python. This is essentially an Ubuntu distribution and works extremely well. It is possible to run AppDaemon in exactly the same way as for Linux distributions, and none of the above Windows Caveats apply to this version. This is the reccomended way to run AppDaemon in a Windows 10 and later environment.</p>
</article>
</div>
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
<div class="grid">
<section class="aside-module grid__item one-whole lap-one-half">
<div class="section">
<h1 class="title delta">AppDaemon</h1>
<ul class="divided sidebar-menu">
<li><a href='/ecosystem/appdaemon/'>General </a></li>
<li><a href='/ecosystem/appdaemon/installation/'>Installation </a></li>
<li><a href='/ecosystem/appdaemon/configuration/'>AppDaemon Configuration </a></li>
<li><a href='/ecosystem/appdaemon/example_apps/'>Example Apps </a></li>
<li><a href='/ecosystem/appdaemon/running/'>Running AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/reboot/'>Starting AppDaemon at Reboot </a></li>
<li><a href='/ecosystem/appdaemon/operation/'>AppDaemon Operation </a></li>
<li><a class='active' href='/ecosystem/appdaemon/windows/'>AppDaemon on Windows </a></li>
<li><a href='/ecosystem/appdaemon/updating/'>Updating AppDaemon </a></li>
<li><a href='/ecosystem/appdaemon/tutorial/'>AppDaemon Tutorial </a></li>
<li><a href='/ecosystem/appdaemon/api/'>AppDaemon API Reference </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>.<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>
</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>
</body>
</html>

View file

@ -109,6 +109,7 @@
<div class="section"> <div class="section">
<h1 class="title delta">Ecosystem</h1> <h1 class="title delta">Ecosystem</h1>
<ul class="divided"> <ul class="divided">
<li><a href="/ecosystem/appdaemon/">AppDaemon</a></li>
<li><a href="/ecosystem/hadashboard/">HADashboard</a></li> <li><a href="/ecosystem/hadashboard/">HADashboard</a></li>
<li><a href="/ecosystem/nginx/">NGINX</a></li> <li><a href="/ecosystem/nginx/">NGINX</a></li>
<li><a href="/ecosystem/scenegen/">SceneGen</a></li> <li><a href="/ecosystem/scenegen/">SceneGen</a></li>

View file

@ -229,6 +229,7 @@ sudo ln ../sites-available/hass default
<div class="section"> <div class="section">
<h1 class="title delta">Ecosystem</h1> <h1 class="title delta">Ecosystem</h1>
<ul class="divided"> <ul class="divided">
<li><a href="/ecosystem/appdaemon/">AppDaemon</a></li>
<li><a href="/ecosystem/hadashboard/">HADashboard</a></li> <li><a href="/ecosystem/hadashboard/">HADashboard</a></li>
<li><a href="/ecosystem/nginx/">NGINX</a></li> <li><a href="/ecosystem/nginx/">NGINX</a></li>
<li><a href="/ecosystem/scenegen/">SceneGen</a></li> <li><a href="/ecosystem/scenegen/">SceneGen</a></li>

View file

@ -284,6 +284,7 @@ light.bedside:
<div class="section"> <div class="section">
<h1 class="title delta">Ecosystem</h1> <h1 class="title delta">Ecosystem</h1>
<ul class="divided"> <ul class="divided">
<li><a href="/ecosystem/appdaemon/">AppDaemon</a></li>
<li><a href="/ecosystem/hadashboard/">HADashboard</a></li> <li><a href="/ecosystem/hadashboard/">HADashboard</a></li>
<li><a href="/ecosystem/nginx/">NGINX</a></li> <li><a href="/ecosystem/nginx/">NGINX</a></li>
<li><a href="/ecosystem/scenegen/">SceneGen</a></li> <li><a href="/ecosystem/scenegen/">SceneGen</a></li>

View file

@ -124,6 +124,7 @@
<div class="section"> <div class="section">
<h1 class="title delta">Ecosystem</h1> <h1 class="title delta">Ecosystem</h1>
<ul class="divided"> <ul class="divided">
<li><a href="/ecosystem/appdaemon/">AppDaemon</a></li>
<li><a href="/ecosystem/hadashboard/">HADashboard</a></li> <li><a href="/ecosystem/hadashboard/">HADashboard</a></li>
<li><a href="/ecosystem/nginx/">NGINX</a></li> <li><a href="/ecosystem/nginx/">NGINX</a></li>
<li><a href="/ecosystem/scenegen/">SceneGen</a></li> <li><a href="/ecosystem/scenegen/">SceneGen</a></li>

View file

@ -2410,6 +2410,39 @@
<loc>https://home-assistant.io/ecosystem/ios/requirements/</loc> <loc>https://home-assistant.io/ecosystem/ios/requirements/</loc>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/ecosystem/appdaemon/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/api/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/configuration/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/example_apps/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/installation/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/operation/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/reboot/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/running/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/tutorial/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/updating/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/appdaemon/windows/</loc>
</url>
<url>
<loc>https://home-assistant.io/ecosystem/hadashboard/</loc> <loc>https://home-assistant.io/ecosystem/hadashboard/</loc>
</url> </url>
<url> <url>
@ -2462,62 +2495,62 @@
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/frontend.html</loc> <loc>https://home-assistant.io/demo/frontend.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/index.html</loc> <loc>https://home-assistant.io/demo/index.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/panels/ha-panel-dev-event.html</loc> <loc>https://home-assistant.io/demo/panels/ha-panel-dev-event.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/panels/ha-panel-dev-info.html</loc> <loc>https://home-assistant.io/demo/panels/ha-panel-dev-info.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/panels/ha-panel-dev-service.html</loc> <loc>https://home-assistant.io/demo/panels/ha-panel-dev-service.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/panels/ha-panel-dev-state.html</loc> <loc>https://home-assistant.io/demo/panels/ha-panel-dev-state.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/panels/ha-panel-dev-template.html</loc> <loc>https://home-assistant.io/demo/panels/ha-panel-dev-template.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/panels/ha-panel-history.html</loc> <loc>https://home-assistant.io/demo/panels/ha-panel-history.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/panels/ha-panel-iframe.html</loc> <loc>https://home-assistant.io/demo/panels/ha-panel-iframe.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/panels/ha-panel-logbook.html</loc> <loc>https://home-assistant.io/demo/panels/ha-panel-logbook.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/demo/panels/ha-panel-map.html</loc> <loc>https://home-assistant.io/demo/panels/ha-panel-map.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/googlef4f3693c209fe788.html</loc> <loc>https://home-assistant.io/googlef4f3693c209fe788.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/static/fonts/roboto/DESCRIPTION.en_us.html</loc> <loc>https://home-assistant.io/static/fonts/roboto/DESCRIPTION.en_us.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/static/fonts/robotomono/DESCRIPTION.en_us.html</loc> <loc>https://home-assistant.io/static/fonts/robotomono/DESCRIPTION.en_us.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
<url> <url>
<loc>https://home-assistant.io/static/mdi-demo.html</loc> <loc>https://home-assistant.io/static/mdi-demo.html</loc>
<lastmod>2016-12-18T08:59:12+00:00</lastmod> <lastmod>2016-12-18T10:03:23+00:00</lastmod>
</url> </url>
</urlset> </urlset>