Site updated at 2016-10-18 05:32:07 UTC
This commit is contained in:
parent
baa5bef666
commit
81f4a78ce1
61 changed files with 1436 additions and 106 deletions
2
atom.xml
2
atom.xml
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -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-10-17T19:34:27+00:00</updated>
|
<updated>2016-10-18T05:30:18+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>
|
||||||
|
|
|
@ -171,9 +171,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -177,9 +177,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -197,9 +197,16 @@ Diagram showing interaction between components and the Home Assistant core
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
228
developers/asyncio/index.html
Normal file
228
developers/asyncio/index.html
Normal file
|
@ -0,0 +1,228 @@
|
||||||
|
<!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>Asynchronous Programming - Home Assistant</title>
|
||||||
|
<meta name="author" content="Home Assistant">
|
||||||
|
<meta name="description" content="Introduction to the asynchronous core of Home Assistant.">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width">
|
||||||
|
<link rel="canonical" href="https://home-assistant.io/developers/asyncio/">
|
||||||
|
|
||||||
|
<meta property="fb:app_id" content="338291289691179">
|
||||||
|
<meta property="og:title" content="Asynchronous Programming">
|
||||||
|
<meta property="og:site_name" content="Home Assistant">
|
||||||
|
<meta property="og:url" content="https://home-assistant.io/developers/asyncio/">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:description" content="Introduction to the asynchronous core of 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="Asynchronous Programming">
|
||||||
|
<meta name="twitter:description" content="Introduction to the asynchronous core of 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='/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">
|
||||||
|
Asynchronous Programming
|
||||||
|
</h1>
|
||||||
|
</header>
|
||||||
|
<hr class="divider">
|
||||||
|
|
||||||
|
|
||||||
|
<p>On September 29, 2016 we released <a href="https://home-assistant.io/blog/2016/09/29/async-sleepiq-emoncms-stocks/">Home Assistant 0.29</a> as part of our bi-weekly release schedule. This release introduced a complete overhaul of the core spearheaded by <a href="https://github.com/bbangert/">Ben Bangert</a>.</p>
|
||||||
|
|
||||||
|
<p>The old core was set up like a “traditional” threaded application. Each resource that was not thread safe (ie. the state of entities) would be protected by a lock. This caused a lot of waiting and potential inconsistency because a task could now end up waiting halfway through it’s job until some resource got freed.</p>
|
||||||
|
|
||||||
|
<p>Our new core is based on an Python’s built-in asyncio module. Instead of having all threads have access to the core API objects, access is now limited to a special thread called the event loop. All components will now schedule themselves as a task to be executed by the event loop. This gives us the guarantee that only one task is executed at once, meaning we no longer need any locks.</p>
|
||||||
|
|
||||||
|
<p>The only problem with running everything inside the event loop is when a task is doing blocking I/O, what most third-party Python libraries are doing. For example while requesting new information from a device, the core will stop running until we get a response from the device. To handle this, a task is able to suspend itself until the response is available after which it will be enqueued for the event loop to process the result.</p>
|
||||||
|
|
||||||
|
<p>For a task to be able to suspend itself, all code that it calls has to have this capability added. This means in practice that each device integration will need a full rewrite of the library that offers the integration! As this is not something that can be achieved, ever, a 100% backwards compatible API has been added so that no platform will require updating.</p>
|
||||||
|
|
||||||
|
<p>The backwards compatible API works by scheduling a task from a different thread and blocking that thread until the task has been processed by the event loop.</p>
|
||||||
|
|
||||||
|
<h3><a href="/developers/asyncio_categorizing_functions/">Next step: Categorizing Functions »</a></h3>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
|
||||||
|
<div class="grid">
|
||||||
|
|
||||||
|
|
||||||
|
<section class="aside-module grid__item one-whole lap-one-half">
|
||||||
|
<div class='edit-github'><a href='https://github.com/home-assistant/home-assistant.github.io/tree/current/source/developers/asyncio.markdown'>Edit this page on GitHub</a></div>
|
||||||
|
<div class='section'>
|
||||||
|
<h1 class="title delta">Development Guide</h1>
|
||||||
|
<ul class='divided sidebar-menu'>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/'>Introduction </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/architecture/'>Architecture </a></li>
|
||||||
|
<li><a href='/developers/architecture_components/'>Components </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/development/'>Starting with Development </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/development_environment/'>Setting up Environment </a></li>
|
||||||
|
<li><a href='/developers/development_submitting/'>Submit your Work </a></li>
|
||||||
|
<li><a href='/developers/development_checklist/'>Checklist </a></li>
|
||||||
|
<li><a href='/developers/development_testing/'>Testing </a></li>
|
||||||
|
<li><a href='/developers/development_catching_up/'>Catching up with Reality </a></li>
|
||||||
|
<li><a href='/developers/development_validation/'>Validation </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/add_new_platform/'>Support a new device (as a platform) </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/platform_example_sensor/'>Example sensor platform </a></li>
|
||||||
|
<li><a href='/developers/platform_example_light/'>Example light platform </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/creating_components/'>Adding a new component </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/component_loading/'>Loading components </a></li>
|
||||||
|
<li><a href='/developers/component_deps_and_reqs/'>Requirements & Dependencies </a></li>
|
||||||
|
<li><a href='/developers/component_initialization/'>Initialization </a></li>
|
||||||
|
<li><a href='/developers/component_events/'>Handling events </a></li>
|
||||||
|
<li><a href='/developers/component_states/'>States </a></li>
|
||||||
|
<li><a href='/developers/component_visibility/'>Visibility </a></li>
|
||||||
|
<li><a href='/developers/component_generic_discovery/'>Loading Platforms </a></li>
|
||||||
|
<li><a href='/developers/component_discovery/'>Component Discovery </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class='active' href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
API
|
||||||
|
<ul>
|
||||||
|
<li><a href='https://dev-docs.home-assistant.io/en/dev/'>Home Assistant API </a></li>
|
||||||
|
<li><a href='/developers/rest_api/'>RESTful API </a></li>
|
||||||
|
<li><a href='/developers/python_api/'>Python API </a></li>
|
||||||
|
<li><a href='/developers/server_sent_events/'>Server-sent events </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href='/developers/helpers/'>Online helpers </a></li>
|
||||||
|
<li><a href='/developers/multiple_instances/'>Multiple Instances </a></li>
|
||||||
|
<li><a href='/developers/website/'>Home-Assistant.io </a></li>
|
||||||
|
<li><a href='/developers/credits/'>Credits </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>
|
282
developers/asyncio_categorizing_functions/index.html
Normal file
282
developers/asyncio_categorizing_functions/index.html
Normal file
|
@ -0,0 +1,282 @@
|
||||||
|
<!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>Categorizing Functions - Home Assistant</title>
|
||||||
|
<meta name="author" content="Home Assistant">
|
||||||
|
<meta name="description" content="A categorization of functions to work with the asynchronous core of Home Assistant.">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width">
|
||||||
|
<link rel="canonical" href="https://home-assistant.io/developers/asyncio_categorizing_functions/">
|
||||||
|
|
||||||
|
<meta property="fb:app_id" content="338291289691179">
|
||||||
|
<meta property="og:title" content="Categorizing Functions">
|
||||||
|
<meta property="og:site_name" content="Home Assistant">
|
||||||
|
<meta property="og:url" content="https://home-assistant.io/developers/asyncio_categorizing_functions/">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:description" content="A categorization of functions to work with the asynchronous core of 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="Categorizing Functions">
|
||||||
|
<meta name="twitter:description" content="A categorization of functions to work with the asynchronous core of 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='/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">
|
||||||
|
Categorizing Functions
|
||||||
|
</h1>
|
||||||
|
</header>
|
||||||
|
<hr class="divider">
|
||||||
|
|
||||||
|
|
||||||
|
<p>A piece of work within Home Assistant is represented by a function that will be invoked. It will either run inside our event loop or inside our thread pool, depending on if it is async safe.</p>
|
||||||
|
|
||||||
|
<p>Home Assistant uses the convention that all functions that must be run from within the event loop are prefixed with <code class="highlighter-rouge">async_</code>.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="the-coroutine-function" href="#the-coroutine-function"></a> The coroutine function</h2>
|
||||||
|
|
||||||
|
<p>Coroutines are special functions based on Python’s generators syntax which allows them to suspend execution while waiting on a result.</p>
|
||||||
|
|
||||||
|
<p>Invoking a coroutine function will return a Generator object back, but will not actually begin execution. This object will execute the task when it is either yielded from (from within another coroutine) or it is scheduled on the event loop.</p>
|
||||||
|
|
||||||
|
<p>To declare a function a coroutine, import the coroutine annotation from the asyncio package and annotate your function.</p>
|
||||||
|
|
||||||
|
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">asyncio</span>
|
||||||
|
|
||||||
|
<span class="nd">@asyncio.coroutine</span>
|
||||||
|
<span class="k">def</span> <span class="nf">async_look_my_coroutine</span><span class="p">(</span><span class="n">target</span><span class="p">):</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="k">yield</span> <span class="k">from</span> <span class="n">entity</span><span class="o">.</span><span class="n">async_turn_on</span><span class="p">()</span>
|
||||||
|
<span class="k">if</span> <span class="n">result</span><span class="p">:</span>
|
||||||
|
<span class="k">print</span><span class="p">(</span><span class="s">"hello {}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="n">hass</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span><span class="n">async_look_my_coroutine</span><span class="p">(</span><span class="s">"world"</span><span class="p">)</span>
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>In this example, we schedule the coroutine by calling <code class="highlighter-rouge">hass.loop.create_task</code>. This will add the coroutine to the queue of tasks to be run. When the event loop is running <code class="highlighter-rouge">async_look_my_coroutine</code> it will suspend the task when <code class="highlighter-rouge">yield from entity.async_turn_on()</code> is called. At that point a new task will be scheduled to execute <code class="highlighter-rouge">entity.async_turn_on()</code>. When that job has been executed, <code class="highlighter-rouge">async_look_my_coroutine</code> will resume.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="the-callback-function" href="#the-callback-function"></a> The callback function</h2>
|
||||||
|
|
||||||
|
<p>This is a normal function that is considered safe to be run from within the event loop. A callback is unable to suspend itself and thus cannot do any I/O or call a coroutine. A callback is capable of scheduling a new task but it will not be able to wait for the results.</p>
|
||||||
|
|
||||||
|
<p>To declare a function as a callback, import the callback annotation from the core package and annotate your function.</p>
|
||||||
|
|
||||||
|
<p>A common use case for a callback in Home Assistant is as a listener for an event or a service call. It can process the incoming information and then schedule the right calls to be made. Example from the automation component.</p>
|
||||||
|
|
||||||
|
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">homeassistant.core</span> <span class="kn">import</span> <span class="n">callback</span>
|
||||||
|
|
||||||
|
<span class="nd">@callback</span>
|
||||||
|
<span class="k">def</span> <span class="nf">async_trigger_service_handler</span><span class="p">(</span><span class="n">service_call</span><span class="p">):</span>
|
||||||
|
<span class="s">"""Handle automation trigger service calls."""</span>
|
||||||
|
<span class="nb">vars</span> <span class="o">=</span> <span class="n">service_call</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ATTR_VARIABLES</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">entity</span> <span class="ow">in</span> <span class="n">component</span><span class="o">.</span><span class="n">async_extract_from_service</span><span class="p">(</span><span class="n">service_call</span><span class="p">):</span>
|
||||||
|
<span class="n">hass</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span><span class="n">entity</span><span class="o">.</span><span class="n">async_trigger</span><span class="p">(</span><span class="nb">vars</span><span class="p">,</span> <span class="bp">True</span><span class="p">))</span>
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>In this example, <code class="highlighter-rouge">entity.async_trigger</code> is a coroutine function. Invoking the coroutine function will return a coroutine task. The passed in parameters will be used when the task gets executed.</p>
|
||||||
|
|
||||||
|
<p>To execute the task we have to schedule it for execution on the event loop. This is done by calling <code class="highlighter-rouge">hass.loop.create_task</code>.</p>
|
||||||
|
|
||||||
|
<h3><a class="title-link" name="why-even-have-callbacks" href="#why-even-have-callbacks"></a> Why even have callbacks?</h3>
|
||||||
|
|
||||||
|
<p>You might wonder, if a coroutine can do everything a callback can do, why even have a callback. The reason is performance and better state consistency of the core API objects.</p>
|
||||||
|
|
||||||
|
<p>When coroutine A waits for coroutine B, it will suspend itself and schedule a new task to run B. This means that the event loop is now running A, B and then A again. If B is a callback, A will never have to suspend itself and thus the event loop is just running A. The consistency implication is that other events queued to run on the event loop continue to wait until callbacks complete, but will be interleaved when yielding to another coroutine.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="event-loop-and-thread-safe" href="#event-loop-and-thread-safe"></a> Event loop and thread safe</h2>
|
||||||
|
|
||||||
|
<p>These are functions that are safe to run both in a thread and inside the event loop. These functions are usually performing a computation or transform data in memory. Anything that does I/O does not fall under this category. Many standard library functions fall in this category. For example generating the sum of a set of numbers using sum or merging two dictionaries.</p>
|
||||||
|
|
||||||
|
<p>There is no special annotation to mark functions as part of this category and care should be taken when using these functions from inside the event loop. When in doubt, look at their implementation.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="other-functions" href="#other-functions"></a> Other functions</h2>
|
||||||
|
|
||||||
|
<p>These are all the functions that did not fit in the previous categories. These functions are either thread-safe or not considered safe to be run within the event loop. These are functions that use sleep, or perform I/O.</p>
|
||||||
|
|
||||||
|
<p>There is no special annotation necessary to be considered part of this category.</p>
|
||||||
|
|
||||||
|
<h3><a href="/developers/asyncio_working_with_async/">Next step: Working with Async »</a></h3>
|
||||||
|
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
|
||||||
|
<div class="grid">
|
||||||
|
|
||||||
|
|
||||||
|
<section class="aside-module grid__item one-whole lap-one-half">
|
||||||
|
<div class='edit-github'><a href='https://github.com/home-assistant/home-assistant.github.io/tree/current/source/developers/asyncio_categorizing_functions.markdown'>Edit this page on GitHub</a></div>
|
||||||
|
<div class='section'>
|
||||||
|
<h1 class="title delta">Development Guide</h1>
|
||||||
|
<ul class='divided sidebar-menu'>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/'>Introduction </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/architecture/'>Architecture </a></li>
|
||||||
|
<li><a href='/developers/architecture_components/'>Components </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/development/'>Starting with Development </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/development_environment/'>Setting up Environment </a></li>
|
||||||
|
<li><a href='/developers/development_submitting/'>Submit your Work </a></li>
|
||||||
|
<li><a href='/developers/development_checklist/'>Checklist </a></li>
|
||||||
|
<li><a href='/developers/development_testing/'>Testing </a></li>
|
||||||
|
<li><a href='/developers/development_catching_up/'>Catching up with Reality </a></li>
|
||||||
|
<li><a href='/developers/development_validation/'>Validation </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/add_new_platform/'>Support a new device (as a platform) </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/platform_example_sensor/'>Example sensor platform </a></li>
|
||||||
|
<li><a href='/developers/platform_example_light/'>Example light platform </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/creating_components/'>Adding a new component </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/component_loading/'>Loading components </a></li>
|
||||||
|
<li><a href='/developers/component_deps_and_reqs/'>Requirements & Dependencies </a></li>
|
||||||
|
<li><a href='/developers/component_initialization/'>Initialization </a></li>
|
||||||
|
<li><a href='/developers/component_events/'>Handling events </a></li>
|
||||||
|
<li><a href='/developers/component_states/'>States </a></li>
|
||||||
|
<li><a href='/developers/component_visibility/'>Visibility </a></li>
|
||||||
|
<li><a href='/developers/component_generic_discovery/'>Loading Platforms </a></li>
|
||||||
|
<li><a href='/developers/component_discovery/'>Component Discovery </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a class='active' href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
API
|
||||||
|
<ul>
|
||||||
|
<li><a href='https://dev-docs.home-assistant.io/en/dev/'>Home Assistant API </a></li>
|
||||||
|
<li><a href='/developers/rest_api/'>RESTful API </a></li>
|
||||||
|
<li><a href='/developers/python_api/'>Python API </a></li>
|
||||||
|
<li><a href='/developers/server_sent_events/'>Server-sent events </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href='/developers/helpers/'>Online helpers </a></li>
|
||||||
|
<li><a href='/developers/multiple_instances/'>Multiple Instances </a></li>
|
||||||
|
<li><a href='/developers/website/'>Home-Assistant.io </a></li>
|
||||||
|
<li><a href='/developers/credits/'>Credits </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>
|
223
developers/asyncio_misc/index.html
Normal file
223
developers/asyncio_misc/index.html
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
<!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>Miscellaneous Async - Home Assistant</title>
|
||||||
|
<meta name="author" content="Home Assistant">
|
||||||
|
<meta name="description" content="A collection of miscellaneous topics about async that didn't fit on the other pages.">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width">
|
||||||
|
<link rel="canonical" href="https://home-assistant.io/developers/asyncio_misc/">
|
||||||
|
|
||||||
|
<meta property="fb:app_id" content="338291289691179">
|
||||||
|
<meta property="og:title" content="Miscellaneous Async">
|
||||||
|
<meta property="og:site_name" content="Home Assistant">
|
||||||
|
<meta property="og:url" content="https://home-assistant.io/developers/asyncio_misc/">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:description" content="A collection of miscellaneous topics about async that didn't fit on the other pages.">
|
||||||
|
<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="Miscellaneous Async">
|
||||||
|
<meta name="twitter:description" content="A collection of miscellaneous topics about async that didn't fit on the other pages.">
|
||||||
|
<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='/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">
|
||||||
|
Miscellaneous Async
|
||||||
|
</h1>
|
||||||
|
</header>
|
||||||
|
<hr class="divider">
|
||||||
|
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="what-about-async-and-await-syntax" href="#what-about-async-and-await-syntax"></a> What about ‘async’ and ‘await’ syntax?</h2>
|
||||||
|
<p>Python 3.5 introduced new syntax to formalize the asynchronous pattern. This is however not compatible with Python 3.4. The minimum required Python version for Home Assistant is based on the Python version shipped with Debian stable, which is currently 3.4.2.</p>
|
||||||
|
|
||||||
|
<p>For more information, Brett Cannon wrote <a href="http://www.snarky.ca/how-the-heck-does-async-await-work-in-python-3-5">an excellent breakdown</a> on ‘async’ and ‘await’ syntax and how asynchronous programming works.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="acknowledgements" href="#acknowledgements"></a> Acknowledgements</h2>
|
||||||
|
|
||||||
|
<p>Huge thanks to <a href="https://github.com/bbangert/">Ben Bangert</a> for starting the conversion of the core to async, guiding other contributors while taking their first steps with async programming and peer reviewing this 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='edit-github'><a href='https://github.com/home-assistant/home-assistant.github.io/tree/current/source/developers/asyncio_misc.markdown'>Edit this page on GitHub</a></div>
|
||||||
|
<div class='section'>
|
||||||
|
<h1 class="title delta">Development Guide</h1>
|
||||||
|
<ul class='divided sidebar-menu'>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/'>Introduction </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/architecture/'>Architecture </a></li>
|
||||||
|
<li><a href='/developers/architecture_components/'>Components </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/development/'>Starting with Development </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/development_environment/'>Setting up Environment </a></li>
|
||||||
|
<li><a href='/developers/development_submitting/'>Submit your Work </a></li>
|
||||||
|
<li><a href='/developers/development_checklist/'>Checklist </a></li>
|
||||||
|
<li><a href='/developers/development_testing/'>Testing </a></li>
|
||||||
|
<li><a href='/developers/development_catching_up/'>Catching up with Reality </a></li>
|
||||||
|
<li><a href='/developers/development_validation/'>Validation </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/add_new_platform/'>Support a new device (as a platform) </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/platform_example_sensor/'>Example sensor platform </a></li>
|
||||||
|
<li><a href='/developers/platform_example_light/'>Example light platform </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/creating_components/'>Adding a new component </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/component_loading/'>Loading components </a></li>
|
||||||
|
<li><a href='/developers/component_deps_and_reqs/'>Requirements & Dependencies </a></li>
|
||||||
|
<li><a href='/developers/component_initialization/'>Initialization </a></li>
|
||||||
|
<li><a href='/developers/component_events/'>Handling events </a></li>
|
||||||
|
<li><a href='/developers/component_states/'>States </a></li>
|
||||||
|
<li><a href='/developers/component_visibility/'>Visibility </a></li>
|
||||||
|
<li><a href='/developers/component_generic_discovery/'>Loading Platforms </a></li>
|
||||||
|
<li><a href='/developers/component_discovery/'>Component Discovery </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a class='active' href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
API
|
||||||
|
<ul>
|
||||||
|
<li><a href='https://dev-docs.home-assistant.io/en/dev/'>Home Assistant API </a></li>
|
||||||
|
<li><a href='/developers/rest_api/'>RESTful API </a></li>
|
||||||
|
<li><a href='/developers/python_api/'>Python API </a></li>
|
||||||
|
<li><a href='/developers/server_sent_events/'>Server-sent events </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href='/developers/helpers/'>Online helpers </a></li>
|
||||||
|
<li><a href='/developers/multiple_instances/'>Multiple Instances </a></li>
|
||||||
|
<li><a href='/developers/website/'>Home-Assistant.io </a></li>
|
||||||
|
<li><a href='/developers/credits/'>Credits </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>
|
340
developers/asyncio_working_with_async/index.html
Normal file
340
developers/asyncio_working_with_async/index.html
Normal file
|
@ -0,0 +1,340 @@
|
||||||
|
<!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>Working with Async - Home Assistant</title>
|
||||||
|
<meta name="author" content="Home Assistant">
|
||||||
|
<meta name="description" content="A breakdown of all the different ways to work with the asynchronous core of Home Assistant.">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width">
|
||||||
|
<link rel="canonical" href="https://home-assistant.io/developers/asyncio_working_with_async/">
|
||||||
|
|
||||||
|
<meta property="fb:app_id" content="338291289691179">
|
||||||
|
<meta property="og:title" content="Working with Async">
|
||||||
|
<meta property="og:site_name" content="Home Assistant">
|
||||||
|
<meta property="og:url" content="https://home-assistant.io/developers/asyncio_working_with_async/">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:description" content="A breakdown of all the different ways to work with the asynchronous core of 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="Working with Async">
|
||||||
|
<meta name="twitter:description" content="A breakdown of all the different ways to work with the asynchronous core of 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='/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">
|
||||||
|
Working With Async
|
||||||
|
</h1>
|
||||||
|
</header>
|
||||||
|
<hr class="divider">
|
||||||
|
|
||||||
|
|
||||||
|
<p>Although we have a backwards compatible API, using the async core directly will be a lot faster. Most core components have already been rewritten to leverage the async core. This includes the EntityComponent helper (foundation of light, switch, etc), scripts, groups and automation.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="interacting-with-the-core" href="#interacting-with-the-core"></a> Interacting with the core</h2>
|
||||||
|
|
||||||
|
<p><a href="https://dev-docs.home-assistant.io/en/master/api/core.html">All methods in the Home Assistant core</a> are implemented in two flavors: an async version and a version to be called from other threads. The versions for other are merely wrappers that call the async version in a threadsafe manner using <a href="https://dev-docs.home-assistant.io/en/dev/api/util.html#module-homeassistant.util.async">the available async utilities</a>.</p>
|
||||||
|
|
||||||
|
<p>So if you are making calls to the core (the hass object) from within a callback or coroutine, use the methods that start with async_. If you need to call an async_ function that is a coroutine, your task must also be a coroutine.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="implementing-an-async-component" href="#implementing-an-async-component"></a> Implementing an async component</h2>
|
||||||
|
|
||||||
|
<p>We currently do not support async setup for components. We do however support using async functions as service handlers. Just define your handlers as a callback or coroutine and register them as usual.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="implementing-an-async-platform" href="#implementing-an-async-platform"></a> Implementing an async platform</h2>
|
||||||
|
|
||||||
|
<p>For platforms we support async setup. Instead of setup_platform you need to have a coroutine async_setup_platform.</p>
|
||||||
|
|
||||||
|
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="n">setup_platform</span><span class="p">(</span><span class="n">hass</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">add_entities</span><span class="p">,</span> <span class="n">discovery_info</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||||
|
<span class="c"># Setup your platform outside of the event loop.</span>
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>Will turn into:</p>
|
||||||
|
|
||||||
|
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">asyncio</span>
|
||||||
|
|
||||||
|
<span class="nd">@asyncio.coroutine</span>
|
||||||
|
<span class="k">def</span> <span class="nf">async_setup_platform</span><span class="p">(</span><span class="n">hass</span><span class="p">,</span> <span class="n">config</span><span class="p">,</span> <span class="n">async_add_entities</span><span class="p">,</span>
|
||||||
|
<span class="n">discovery_info</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||||
|
<span class="c"># Setup your platform inside of the event loop</span>
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>The only difference with the original parameters is that the add_entities function has been replaced by the coroutine <code class="highlighter-rouge">async_add_entities</code>.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="implementing-an-async-entity" href="#implementing-an-async-entity"></a> Implementing an async entity</h2>
|
||||||
|
|
||||||
|
<p>You can make your entity async friendly by converting your update method to be async. This requires the dependency of your entities to also be async friendly!</p>
|
||||||
|
|
||||||
|
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="k">class</span> <span class="nc">MyEntity</span><span class="p">(</span><span class="n">Entity</span><span class="p">):</span>
|
||||||
|
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="s">"""Retrieve latest state."""</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="n">fetch_state</span><span class="p">()</span>
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>Will turn into:</p>
|
||||||
|
|
||||||
|
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">asyncio</span>
|
||||||
|
|
||||||
|
<span class="k">class</span> <span class="nc">MyEntity</span><span class="p">(</span><span class="n">Entity</span><span class="p">):</span>
|
||||||
|
<span class="nd">@asyncio.coroutine</span>
|
||||||
|
<span class="k">def</span> <span class="nf">async_update</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="s">"""Retrieve latest state."""</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="k">yield</span> <span class="k">from</span> <span class="n">async_fetch_state</span><span class="p">()</span>
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>Make sure that all properties defined on your entity do not result in I/O being done. All data has to be fetched inside the update method and cached on the entity. This is because these properties are read from within the event loop and thus doing I/O will result in the core of Home Assistant waiting until your I/O is done.</p>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="calling-async-functions-from-threads" href="#calling-async-functions-from-threads"></a> Calling async functions from threads</h2>
|
||||||
|
|
||||||
|
<p>Sometimes it will happen that you’re in a thread and you want to call a function that is only available as async. Home Assistant includes a few async helper utilities to help with this.</p>
|
||||||
|
|
||||||
|
<p>In the following example, <code class="highlighter-rouge">say_hello</code> will schedule <code class="highlighter-rouge">async_say_hello</code> and block till the function has run and get the result back.</p>
|
||||||
|
|
||||||
|
<div class="language-python highlighter-rouge"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">homeassistant.util.async</span> <span class="kn">import</span> <span class="n">run_callback_threadsafe</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">say_hello</span><span class="p">(</span><span class="n">hass</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">run_callback_threadsafe</span><span class="p">(</span>
|
||||||
|
<span class="n">hass</span><span class="o">.</span><span class="n">loop</span><span class="p">,</span> <span class="n">async_say_hello</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span><span class="o">.</span><span class="n">result</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">async_say_hello</span><span class="p">(</span><span class="n">hass</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="s">"Hello {}!"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2><a class="title-link" name="dealing-with-passed-in-functions" href="#dealing-with-passed-in-functions"></a> Dealing with passed in functions</h2>
|
||||||
|
|
||||||
|
<p>If your code takes in functions from other code, you will not know which category the function belongs to and how they should be invoked. This usually only occurs if your code supplies an event helper like <code class="highlighter-rouge">mqtt.async_subscribe</code> or <code class="highlighter-rouge">track_state_change_listener</code>.</p>
|
||||||
|
|
||||||
|
<p>To help with this, there are two helper methods on the hass object that you can call from inside the event loop:</p>
|
||||||
|
|
||||||
|
<h4><a class="title-link" name="hassasync_run_job" href="#hassasync_run_job"></a> hass.async_run_job</h4>
|
||||||
|
|
||||||
|
<p>Use this method if the function should be called as soon as possible. This will call callbacks immediately, schedule coroutines for execution on the event loop and schedule other functions to be run inside the thread pool.</p>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Callback</td>
|
||||||
|
<td>Call immediately.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Coroutine</td>
|
||||||
|
<td>Schedule for execution on the event loop.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Other functions</td>
|
||||||
|
<td>Schedule for execution in the thread pool.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h4><a class="title-link" name="hassasync_add_job" href="#hassasync_add_job"></a> hass.async_add_job</h4>
|
||||||
|
|
||||||
|
<p>Use this method if the function should be called but not get priority over already scheduled calls.</p>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Callback</td>
|
||||||
|
<td>Schedule for execution on the event loop.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Coroutine</td>
|
||||||
|
<td>Schedule for execution on the event loop.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Other functions</td>
|
||||||
|
<td>Schedule for execution in the thread pool.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3><a href="/developers/asyncio_misc/">Next step: Miscellaneous »</a></h3>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<aside id="sidebar" class="grid__item one-third lap-one-whole palm-one-whole">
|
||||||
|
<div class="grid">
|
||||||
|
|
||||||
|
|
||||||
|
<section class="aside-module grid__item one-whole lap-one-half">
|
||||||
|
<div class='edit-github'><a href='https://github.com/home-assistant/home-assistant.github.io/tree/current/source/developers/asyncio_working_with_async.markdown'>Edit this page on GitHub</a></div>
|
||||||
|
<div class='section'>
|
||||||
|
<h1 class="title delta">Development Guide</h1>
|
||||||
|
<ul class='divided sidebar-menu'>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/'>Introduction </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/architecture/'>Architecture </a></li>
|
||||||
|
<li><a href='/developers/architecture_components/'>Components </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/development/'>Starting with Development </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/development_environment/'>Setting up Environment </a></li>
|
||||||
|
<li><a href='/developers/development_submitting/'>Submit your Work </a></li>
|
||||||
|
<li><a href='/developers/development_checklist/'>Checklist </a></li>
|
||||||
|
<li><a href='/developers/development_testing/'>Testing </a></li>
|
||||||
|
<li><a href='/developers/development_catching_up/'>Catching up with Reality </a></li>
|
||||||
|
<li><a href='/developers/development_validation/'>Validation </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/add_new_platform/'>Support a new device (as a platform) </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/platform_example_sensor/'>Example sensor platform </a></li>
|
||||||
|
<li><a href='/developers/platform_example_light/'>Example light platform </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/creating_components/'>Adding a new component </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/component_loading/'>Loading components </a></li>
|
||||||
|
<li><a href='/developers/component_deps_and_reqs/'>Requirements & Dependencies </a></li>
|
||||||
|
<li><a href='/developers/component_initialization/'>Initialization </a></li>
|
||||||
|
<li><a href='/developers/component_events/'>Handling events </a></li>
|
||||||
|
<li><a href='/developers/component_states/'>States </a></li>
|
||||||
|
<li><a href='/developers/component_visibility/'>Visibility </a></li>
|
||||||
|
<li><a href='/developers/component_generic_discovery/'>Loading Platforms </a></li>
|
||||||
|
<li><a href='/developers/component_discovery/'>Component Discovery </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a class='active' href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
API
|
||||||
|
<ul>
|
||||||
|
<li><a href='https://dev-docs.home-assistant.io/en/dev/'>Home Assistant API </a></li>
|
||||||
|
<li><a href='/developers/rest_api/'>RESTful API </a></li>
|
||||||
|
<li><a href='/developers/python_api/'>Python API </a></li>
|
||||||
|
<li><a href='/developers/server_sent_events/'>Server-sent events </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href='/developers/helpers/'>Online helpers </a></li>
|
||||||
|
<li><a href='/developers/multiple_instances/'>Multiple Instances </a></li>
|
||||||
|
<li><a href='/developers/website/'>Home-Assistant.io </a></li>
|
||||||
|
<li><a href='/developers/credits/'>Credits </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>
|
|
@ -181,9 +181,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -178,9 +178,16 @@ This option is only available for built-in components.
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -146,9 +146,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -216,9 +216,16 @@ In the past, this was achieved by adding your component to the <code class="high
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -190,9 +190,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -161,9 +161,16 @@ Home Assistant will use the directory that contains your config file as the dire
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -158,9 +158,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -155,9 +155,16 @@ You can set a suggestion for your entity’s visibility by setting the <code cla
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -161,9 +161,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -365,9 +365,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -155,9 +155,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -170,9 +170,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -158,9 +158,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -182,9 +182,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -183,9 +183,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -197,9 +197,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -224,9 +224,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -210,9 +210,16 @@ Do not use development mode in production. Home Assistant uses aggressive cachin
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class='active' href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a class='active' href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -164,9 +164,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a class='active' href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a class='active' href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -159,9 +159,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a class='active' href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a class='active' href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -210,9 +210,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a class='active' href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a class='active' href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -155,9 +155,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -158,9 +158,16 @@ Diagram showing interaction between components and the Home Assistant core.
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -174,9 +174,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -177,9 +177,16 @@ Because each slave maintains its own Service Registry it is possible to have mul
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -252,9 +252,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -189,9 +189,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -330,9 +330,16 @@ longer timeout.</p>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -180,9 +180,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -628,9 +628,16 @@ If your client does not support <code>DELETE</code> HTTP requests you can add an
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -208,9 +208,16 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
|
@ -256,9 +256,16 @@ Content...Written in markdown.
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Frontend Development
|
<a href='/developers/asyncio/'>Asynchronous Programming </a>
|
||||||
|
<ul>
|
||||||
|
<li><a href='/developers/asyncio_categorizing_functions/'>Categorizing Functions </a></li>
|
||||||
|
<li><a href='/developers/asyncio_working_with_async/'>Working with Async </a></li>
|
||||||
|
<li><a href='/developers/asyncio_misc/'>Miscellaneous </a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href='/developers/frontend/'>Frontend Development </a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href='/developers/frontend/'>Setup Frontend Environment </a></li>
|
|
||||||
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
<li><a href='/developers/frontend_add_card/'>Add State Card </a></li>
|
||||||
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
<li><a href='/developers/frontend_add_more_info/'>Add More Info Dialog </a></li>
|
||||||
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
<li><a href='/developers/frontend_creating_custom_panels/'>Add Custom Panels </a></li>
|
||||||
|
|
42
sitemap.xml
42
sitemap.xml
|
@ -361,6 +361,18 @@
|
||||||
<loc>https://home-assistant.io/developers/architecture_components/</loc>
|
<loc>https://home-assistant.io/developers/architecture_components/</loc>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
|
<loc>https://home-assistant.io/developers/asyncio/</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://home-assistant.io/developers/asyncio_categorizing_functions/</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://home-assistant.io/developers/asyncio_misc/</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://home-assistant.io/developers/asyncio_working_with_async/</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
<loc>https://home-assistant.io/getting-started/automation-action/</loc>
|
<loc>https://home-assistant.io/getting-started/automation-action/</loc>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
|
@ -2168,62 +2180,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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+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-10-17T19:33:47+00:00</lastmod>
|
<lastmod>2016-10-18T05:29:40+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
</urlset>
|
</urlset>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue