From 5d820ec188712303512e49b97481500fe6323296 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 9 May 2017 18:44:00 -0700 Subject: [PATCH] Add support for automation config panel (#7509) * Add support for automation config * Build fromtend * Lint --- .../components/automation/__init__.py | 36 ++++++- homeassistant/components/config/__init__.py | 88 +++++++++++++++--- homeassistant/components/config/automation.py | 20 ++++ homeassistant/components/frontend/version.py | 7 +- .../frontend/www_static/compatibility.js | 2 +- .../frontend/www_static/compatibility.js.gz | Bin 362 -> 355 bytes .../components/frontend/www_static/core.js | 2 +- .../components/frontend/www_static/core.js.gz | Bin 2695 -> 2678 bytes .../www_static/home-assistant-polymer | 2 +- .../panels/ha-panel-automation.html | 2 + .../panels/ha-panel-automation.html.gz | Bin 0 -> 40511 bytes .../www_static/panels/ha-panel-hassio.html | 2 +- .../www_static/panels/ha-panel-hassio.html.gz | Bin 7383 -> 7381 bytes .../frontend/www_static/service_worker.js | 2 +- .../frontend/www_static/service_worker.js.gz | Bin 2513 -> 2509 bytes homeassistant/config.py | 7 ++ 16 files changed, 144 insertions(+), 26 deletions(-) create mode 100644 homeassistant/components/config/automation.py create mode 100644 homeassistant/components/frontend/www_static/panels/ha-panel-automation.html create mode 100644 homeassistant/components/frontend/www_static/panels/ha-panel-automation.html.gz diff --git a/homeassistant/components/automation/__init__.py b/homeassistant/components/automation/__init__.py index 5f59f760d0b..7c11f15862f 100644 --- a/homeassistant/components/automation/__init__.py +++ b/homeassistant/components/automation/__init__.py @@ -16,7 +16,7 @@ from homeassistant.core import CoreState from homeassistant import config as conf_util from homeassistant.const import ( ATTR_ENTITY_ID, CONF_PLATFORM, STATE_ON, SERVICE_TURN_ON, SERVICE_TURN_OFF, - SERVICE_TOGGLE, SERVICE_RELOAD, EVENT_HOMEASSISTANT_START) + SERVICE_TOGGLE, SERVICE_RELOAD, EVENT_HOMEASSISTANT_START, CONF_ID) from homeassistant.components import logbook from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import extract_domain_configs, script, condition @@ -26,6 +26,7 @@ from homeassistant.helpers.restore_state import async_get_last_state from homeassistant.loader import get_platform from homeassistant.util.dt import utcnow import homeassistant.helpers.config_validation as cv +from homeassistant.components.frontend import register_built_in_panel DOMAIN = 'automation' ENTITY_ID_FORMAT = DOMAIN + '.{}' @@ -81,6 +82,7 @@ _TRIGGER_SCHEMA = vol.All( _CONDITION_SCHEMA = vol.All(cv.ensure_list, [cv.CONDITION_SCHEMA]) PLATFORM_SCHEMA = vol.Schema({ + CONF_ID: cv.string, CONF_ALIAS: cv.string, vol.Optional(CONF_INITIAL_STATE): cv.boolean, vol.Optional(CONF_HIDE_ENTITY, default=DEFAULT_HIDE_ENTITY): cv.boolean, @@ -139,6 +141,14 @@ def reload(hass): hass.services.call(DOMAIN, SERVICE_RELOAD) +def async_reload(hass): + """Reload the automation from config. + + Returns a coroutine object. + """ + return hass.services.async_call(DOMAIN, SERVICE_RELOAD) + + @asyncio.coroutine def async_setup(hass, config): """Set up the automation.""" @@ -215,15 +225,20 @@ def async_setup(hass, config): DOMAIN, service, turn_onoff_service_handler, descriptions.get(service), schema=SERVICE_SCHEMA) + if 'frontend' in hass.config.components: + register_built_in_panel(hass, 'automation', 'Automations', + 'mdi:playlist-play') + return True class AutomationEntity(ToggleEntity): """Entity to show status of entity.""" - def __init__(self, name, async_attach_triggers, cond_func, async_action, - hidden, initial_state): + def __init__(self, automation_id, name, async_attach_triggers, cond_func, + async_action, hidden, initial_state): """Initialize an automation entity.""" + self._id = automation_id self._name = name self._async_attach_triggers = async_attach_triggers self._async_detach_triggers = None @@ -346,6 +361,16 @@ class AutomationEntity(ToggleEntity): self.async_trigger) yield from self.async_update_ha_state() + @property + def device_state_attributes(self): + """Return automation attributes.""" + if self._id is None: + return None + + return { + CONF_ID: self._id + } + @asyncio.coroutine def _async_process_config(hass, config, component): @@ -359,6 +384,7 @@ def _async_process_config(hass, config, component): conf = config[config_key] for list_no, config_block in enumerate(conf): + automation_id = config_block.get(CONF_ID) name = config_block.get(CONF_ALIAS) or "{} {}".format(config_key, list_no) @@ -383,8 +409,8 @@ def _async_process_config(hass, config, component): config_block.get(CONF_TRIGGER, []), name ) entity = AutomationEntity( - name, async_attach_triggers, cond_func, action, hidden, - initial_state) + automation_id, name, async_attach_triggers, cond_func, action, + hidden, initial_state) entities.append(entity) diff --git a/homeassistant/components/config/__init__.py b/homeassistant/components/config/__init__.py index 1255043b6b5..0bc44501e28 100644 --- a/homeassistant/components/config/__init__.py +++ b/homeassistant/components/config/__init__.py @@ -5,7 +5,7 @@ import os import voluptuous as vol from homeassistant.core import callback -from homeassistant.const import EVENT_COMPONENT_LOADED +from homeassistant.const import EVENT_COMPONENT_LOADED, CONF_ID from homeassistant.setup import ( async_prepare_setup_platform, ATTR_COMPONENT) from homeassistant.components.frontend import register_built_in_panel @@ -14,8 +14,8 @@ from homeassistant.util.yaml import load_yaml, dump DOMAIN = 'config' DEPENDENCIES = ['http'] -SECTIONS = ('core', 'group', 'hassbian') -ON_DEMAND = ('zwave', ) +SECTIONS = ('core', 'group', 'hassbian', 'automation') +ON_DEMAND = ('zwave') @asyncio.coroutine @@ -60,7 +60,7 @@ def async_setup(hass, config): return True -class EditKeyBasedConfigView(HomeAssistantView): +class BaseEditConfigView(HomeAssistantView): """Configure a Group endpoint.""" def __init__(self, component, config_type, path, key_schema, data_schema, @@ -73,13 +73,29 @@ class EditKeyBasedConfigView(HomeAssistantView): self.data_schema = data_schema self.post_write_hook = post_write_hook + def _empty_config(self): + """Empty config if file not found.""" + raise NotImplementedError + + def _get_value(self, data, config_key): + """Get value.""" + raise NotImplementedError + + def _write_value(self, data, config_key, new_value): + """Set value.""" + raise NotImplementedError + @asyncio.coroutine def get(self, request, config_key): """Fetch device specific config.""" hass = request.app['hass'] - current = yield from hass.loop.run_in_executor( - None, _read, hass.config.path(self.path)) - return self.json(current.get(config_key, {})) + current = yield from self.read_config(hass) + value = self._get_value(current, config_key) + + if value is None: + return self.json_message('Resource not found', 404) + + return self.json(value) @asyncio.coroutine def post(self, request, config_key): @@ -104,10 +120,10 @@ class EditKeyBasedConfigView(HomeAssistantView): hass = request.app['hass'] path = hass.config.path(self.path) - current = yield from hass.loop.run_in_executor(None, _read, path) - current.setdefault(config_key, {}).update(data) + current = yield from self.read_config(hass) + self._write_value(current, config_key, data) - yield from hass.loop.run_in_executor(None, _write, path, current) + yield from hass.async_add_job(_write, path, current) if self.post_write_hook is not None: hass.async_add_job(self.post_write_hook(hass)) @@ -116,13 +132,59 @@ class EditKeyBasedConfigView(HomeAssistantView): 'result': 'ok', }) + @asyncio.coroutine + def read_config(self, hass): + """Read the config.""" + current = yield from hass.async_add_job( + _read, hass.config.path(self.path)) + if not current: + current = self._empty_config() + return current + + +class EditKeyBasedConfigView(BaseEditConfigView): + """Configure a list of entries.""" + + def _empty_config(self): + """Return an empty config.""" + return {} + + def _get_value(self, data, config_key): + """Get value.""" + return data.get(config_key, {}) + + def _write_value(self, data, config_key, new_value): + """Set value.""" + data.setdefault(config_key, {}).update(new_value) + + +class EditIdBasedConfigView(BaseEditConfigView): + """Configure key based config entries.""" + + def _empty_config(self): + """Return an empty config.""" + return [] + + def _get_value(self, data, config_key): + """Get value.""" + return next( + (val for val in data if val.get(CONF_ID) == config_key), None) + + def _write_value(self, data, config_key, new_value): + """Set value.""" + value = self._get_value(data, config_key) + + if value is None: + value = {CONF_ID: config_key} + data.append(value) + + value.update(new_value) + def _read(path): """Read YAML helper.""" if not os.path.isfile(path): - with open(path, 'w'): - pass - return {} + return None return load_yaml(path) diff --git a/homeassistant/components/config/automation.py b/homeassistant/components/config/automation.py new file mode 100644 index 00000000000..64eccfaa2b8 --- /dev/null +++ b/homeassistant/components/config/automation.py @@ -0,0 +1,20 @@ +"""Provide configuration end points for Z-Wave.""" +import asyncio + +from homeassistant.components.config import EditIdBasedConfigView +from homeassistant.components.automation import ( + PLATFORM_SCHEMA, DOMAIN, async_reload) +import homeassistant.helpers.config_validation as cv + + +CONFIG_PATH = 'automations.yaml' + + +@asyncio.coroutine +def async_setup(hass): + """Set up the Automation config API.""" + hass.http.register_view(EditIdBasedConfigView( + DOMAIN, 'config', CONFIG_PATH, cv.string, + PLATFORM_SCHEMA, post_write_hook=async_reload + )) + return True diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index 0d649344862..f92bb64ff69 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -1,18 +1,19 @@ """DO NOT MODIFY. Auto-generated by script/fingerprint_frontend.""" FINGERPRINTS = { - "compatibility.js": "83d9c77748dafa9db49ae77d7f3d8fb0", - "core.js": "5d08475f03adb5969bd31855d5ca0cfd", + "compatibility.js": "8e4c44b5f4288cc48ec1ba94a9bec812", + "core.js": "8cc30e2ad9ee3df44fe7a17507099d88", "frontend.html": "5999c8fac69c503b846672cae75a12b0", "mdi.html": "f407a5a57addbe93817ee1b244d33fbe", "micromarkdown-js.html": "93b5ec4016f0bba585521cf4d18dec1a", + "panels/ha-panel-automation.html": "cc6fe23a97c1974b9f4165a7692bb280", "panels/ha-panel-config.html": "59d9eb28758b497a4d9b2428f978b9b1", "panels/ha-panel-dev-event.html": "2db9c218065ef0f61d8d08db8093cad2", "panels/ha-panel-dev-info.html": "61610e015a411cfc84edd2c4d489e71d", "panels/ha-panel-dev-service.html": "415552027cb083badeff5f16080410ed", "panels/ha-panel-dev-state.html": "d70314913b8923d750932367b1099750", "panels/ha-panel-dev-template.html": "567fbf86735e1b891e40c2f4060fec9b", - "panels/ha-panel-hassio.html": "23d175b6744c20e2fdf475b6efdaa1d3", + "panels/ha-panel-hassio.html": "41fc94a5dc9247ed7efa112614491c71", "panels/ha-panel-history.html": "89062c48c76206cad1cec14ddbb1cbb1", "panels/ha-panel-iframe.html": "d920f0aa3c903680f2f8795e2255daab", "panels/ha-panel-logbook.html": "6dd6a16f52117318b202e60f98400163", diff --git a/homeassistant/components/frontend/www_static/compatibility.js b/homeassistant/components/frontend/www_static/compatibility.js index c152c50ddfa..927b37e68ce 100644 --- a/homeassistant/components/frontend/www_static/compatibility.js +++ b/homeassistant/components/frontend/www_static/compatibility.js @@ -1 +1 @@ -!(function(){"use strict";function e(e,r){var t=arguments;if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var n=Object(e),o=1;oc4p0@9HttTgJ=9g#JJ{Wv^ zCf{8PHg%1IYqg8Jn5KJwdS|M-tlNK5{mb7=UGF9y)msqad~K^jlv;RU*pgigoU^Vz z$g1Rhr*iF>goOK>J^S6e&Wq$RJyf&%&AmsMb<)k%t~@%c8p0LCwl1F5x^&rZ#*~AO zEuXlRTt!Q##Orbz{oX%`W$DEnt~;ugyFWGX&gYKNyIOFa?eib&2OBG_q9ues{dxCB zZl%esvx~#;U)WxBjAiK-^Xyp3>Cb-0hW{{jHn){;e9~4tFJ^AqBKGs^!ee36bkDhl$OV!9L QtcEoM$|F}#qS-D9!cu*?v{Wmnq?Dd+jcCbKLlFaLLaCw=B?3m8*%LR>x?;rWWq1;oW&VEB$cAibRD6^8y}xh%oAXJ)dLUYp3SxuS4D) zWN+b_ll1zLUFeI`!kgx;{jwubepcP8>AzeWH{0#HaafAY^v?fJMc*Tu^MY-D3p}31 YcDOsn(^O;SnbYzoG`4H0FflLy0C4iNAOHXW diff --git a/homeassistant/components/frontend/www_static/core.js b/homeassistant/components/frontend/www_static/core.js index df563364eaa..4e78459c294 100644 --- a/homeassistant/components/frontend/www_static/core.js +++ b/homeassistant/components/frontend/www_static/core.js @@ -1 +1 @@ -!(function(){"use strict";function e(e){return{type:"auth",api_password:e}}function t(){return{type:"get_states"}}function n(){return{type:"get_config"}}function r(){return{type:"get_services"}}function i(){return{type:"get_panels"}}function s(e,t,n){var r={type:"call_service",domain:e,service:t};return n&&(r.service_data=n),r}function o(e){var t={type:"subscribe_events"};return e&&(t.event_type=e),t}function c(e){return{type:"unsubscribe_events",subscription:e}}function u(){return{type:"ping"}}function a(e,t){return{type:"result",success:!1,error:{code:e,message:t}}}function f(t,n){function r(i,s,o){var c=new WebSocket(t),u=!1,a=function(){if(u)return void o(C);if(0===i)return void o(O);var e=i===-1?-1:i-1;setTimeout((function(){return r(e,s,o)}),1e3)},f=function(t){var r=JSON.parse(t.data);switch(r.type){case"auth_required":"authToken"in n?c.send(JSON.stringify(e(n.authToken))):(u=!0,c.close());break;case"auth_invalid":u=!0,c.close();break;case"auth_ok":c.removeEventListener("message",f),c.removeEventListener("close",a),s(c)}};c.addEventListener("message",f),c.addEventListener("close",a)}return new Promise(function(e,t){return r(n.setupRetry||0,e,t)})}function d(e){return e.result}function v(e,t){return void 0===t&&(t={}),f(e,t).then((function(n){var r=new L(e,t);return r.setSocket(n),r}))}function h(e,t){return e._subscribeConfig?e._subscribeConfig(t):new Promise(function(n,r){var i=null,s=null,o=[],c=null;t&&o.push(t);var u=function(e){i=Object.assign({},i,e);for(var t=0;t8{u`^%Zpgk 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

EyTNEZ4-P4?lkBwh@YGWJ@yLI$fXd*-Y(Q0S;w` zCKWcl-wYovBaAR3=%5(b%@;6na8>__S7kRyB`YPvpo)Mr<1OEUC<0IoME<@OL&o#a7iy`U@vE0p1|uF z{^>3k!nb-}$cdk}ZOV?%kNjPJR>wVmzv9&W!!djf{#RJ%&p4p&_F?9J#+pk~HP6;J z_B*Ulh(7ZuRYjalgQw#A_iRSj3GI&}rlhkkvZ;-pV!t)ZVN$HNxcAXp+xnj0i2GpU za(|hfbo3Wv>!|Y5^ftxS8w=`BTy&q^A#q~mu0{!4UX87%_|DAW$!7f#I+;y<3d?NY zw=8_loO{d|5)6ebxTikLX5agZGhMIbp#@VRL%Or$?IhlbTDzsQlDkXYavnMEy}Wl} z)9D0V!z0gTtSa#Atu!z#ORGueo0xd({L-JCo%*^rZv2aX+kB#3%_{WUtEC=76PVi` z>#~{$-`F)ZP2qXqn$U_)=GO4Uf<|`!lKSt{#kXs$=>1(T^Xy{TjQDS&H&4~B70zeL zabJ8Xp6h?j(ZE-m7whc{+`ZP?Ir;zfy(bl(=UP0Q{xJVf`VZ^!DbR}1Wa zk)Fl%M(4`1e`d}RdbX}cKPM?jS1WL9b8QG*DQQ;ws{G9z#&n@wZ3c&pkL*ifjqlbo zmy!4^C*T}2D`Bnb^dkmudLy3vesC*#b;$CP#tU0!B;L2}m{Vk6c$!DBa?RIHsmA29 zKO64k6u918_x(uP*|QPeYY)DT+HM;p+sV}Vl6kR%nAk4&xfAruHV0YOc6z>6?2_N< zY8PVUaekK+_d*tN<;O8Anlh)(TA{pI_tI6rzS*=tVCX;S)rK*dda)n+ZGTh)A1 zWbmAD(&CA0x)fTc`aj>Z)rqen;Q`$r^x^wT=xgE3a zy73%)Xu18)o?S1pj8}CZYn0m>!DFPkcb``C*3(|)o@_g&{(UO_V`cK6F1H`Nca9k5 z-Ie}1IM@lE8e zTMhj-4U^i}e~YN_PK1B$dzOG(kLeSeF58~sqa1N z|4Y4G`dy`9#(!pZ=9lw?(=J%ZD|LzZc*W=5}H~WXj=Wo1Wmi1F=n(@&}yTwyy8}qVk*?dJRb&1`Y zm>ph^J2JXBIxb&r-F(*Q`0@X;tLC4V`Tw{2`5N!NF86JU@407xtmEcq4Y7K0ahrYb z`RqOV^QLTA!1Vc9wEf+S+Ha3NxaXi4wJ!DoYv0bJhFde1O3tiv(G!1qeN*kH^?ILm zCx(|>gt2`hm$<&&(zH14 n=~juVtEO9D?^*wD@%E!<&Y#g-bRzZO{eSE|>Wt~_3JeSY9t

\ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-automation.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-automation.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..e717b38ea4bcf39acbe093a4bc03e6130d72fecf GIT binary patch literal 40511 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 \ No newline at end of file +}); \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html.gz index 5ed1205a99958263848ffedc2f48e134b50c3172..2a18410d99060cdb43efeb316028b7fc579b161f 100644 GIT binary patch delta 461 zcmca^dDW6#zMF$1{e$2}c2Vj2JWInfE=hvA9;qDWs=G~|rAyq@$%yQ@C9!jMZ>E3F zc7}WtR);5dg>5!J%1q+-x~2ic*I%WBw=Y)j1Y8eV56)+QKWLI&-IQ)iCl6tiNy1 z^K*O4oig5qhu;auiu#=1Vz#WT;IZ?qUFElVU)vZQl3MdG?^{kaN6s=yzCX^hZrsy4 z>wU@8X0M(5qV7ri@8>1#&D-<;p7clFm$K&fIXYy^?-z7b#+^H{JLZ2v_;>Ri-&wDA z`TsQgF0DFupYqF(vU}t1bX~b|^p@_|RA&dj`jD?oIo74V$uVtPIhTe0^4|X{{mG-# ztmT>f<-8xOFO*&Xu=C5-DZH0ocsyoaTleI7@9BgO1+)JItgq_o>+dhxxmEjC>d%bn zi#i!U_4?=XJelZu^XjLT)iu}i>JM+8{Ji&$n$`Z+`&Y~FWPi_h+Iw*UYmUPA@44^& zGLoaOKNg;3!<%@zW23;)}DUyR_t6 z!nbt~Nc%DhRDNeUzoufAg!8^n%R={DejGkMH^v~<>CwTS`+UC~>#nD#2dMw|Sis?a zH_~que?PTEF?9jT7wgRc^`y=$b3$HBI>&=drDHZj8o~qmBQy+Zg zJHPWkUB&IO&M!9nb_r*_Y_zs_rR<#_6Slp(TXxurzh?v6>ix5AZ_6>w&TM1;KS6EV zcCXKqN_hR(pP%?*(UbSvr6bl$zu*7et;V_P_*rwNq~mwZWs>GiH~yq|-Tubazr62i z9k)IT-gow|o9FWP9#u8&>&3S#nU-xV^RB%qP(ML9bT7kgzu3zX(-U)>GN=B#wEmam z&L2ewV{aXfb^ar_<*sRsUafBGVH2xMKO9!e|Ezp$Bw=$$&Hl>jd5a!DUL2G6wyP}C z?$*+bq=uTu!P3l?DM4jhZ60df-+KH0hc{0umA7}E%YRt@RrdR>zq14KO)?mzPyDUD zy<7O!jcZ?j*tMiM-!Mwjarszy-20c5)%8uQ7ky>^A{kiyYL>>9sh6}boqBm|;cki7 bCSj*G^c)eKpc=b0{Xh4!$O~ehS{N7rUDNBo diff --git a/homeassistant/components/frontend/www_static/service_worker.js b/homeassistant/components/frontend/www_static/service_worker.js index 445c8d0b9df..7315b62aa3d 100644 --- a/homeassistant/components/frontend/www_static/service_worker.js +++ b/homeassistant/components/frontend/www_static/service_worker.js @@ -1 +1 @@ -"use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}function notificationEventCallback(e,t){firePushCallback({action:t.action,data:t.notification.data,tag:t.notification.tag,type:e},t.notification.data.jwt)}function firePushCallback(e,t){delete e.data.jwt,0===Object.keys(e.data).length&&e.data.constructor===Object&&delete e.data,fetch("/api/notify.html5/callback",{method:"POST",headers:new Headers({"Content-Type":"application/json",Authorization:"Bearer "+t}),body:JSON.stringify(e)})}var precacheConfig=[["/","c255cdae4bfd691ee9fa43e38e8dc462"],["/frontend/panels/dev-event-2db9c218065ef0f61d8d08db8093cad2.html","b5b751e49b1bba55f633ae0d7a92677d"],["/frontend/panels/dev-info-61610e015a411cfc84edd2c4d489e71d.html","6568377ee31cbd78fedc003b317f7faf"],["/frontend/panels/dev-service-415552027cb083badeff5f16080410ed.html","a4b1ec9bfa5bc3529af7783ae56cb55c"],["/frontend/panels/dev-state-d70314913b8923d750932367b1099750.html","c61b5b1461959aac106400e122993e9e"],["/frontend/panels/dev-template-567fbf86735e1b891e40c2f4060fec9b.html","d2853ecf45de1dbadf49fe99a7424ef3"],["/frontend/panels/map-31c592c239636f91e07c7ac232a5ebc4.html","182580419ce2c935ae6ec65502b6db96"],["/static/compatibility-83d9c77748dafa9db49ae77d7f3d8fb0.js","5f05c83be2b028d577962f9625904806"],["/static/core-5d08475f03adb5969bd31855d5ca0cfd.js","1cd99ba798bfcff9768c9d2bb2f58a7c"],["/static/frontend-5999c8fac69c503b846672cae75a12b0.html","d6ce8eb348fbea599933b2a72beb1337"],["/static/mdi-f407a5a57addbe93817ee1b244d33fbe.html","5459090f217c77747b08d06e0bf73388"],["static/fonts/roboto/Roboto-Bold.ttf","d329cc8b34667f114a95422aaad1b063"],["static/fonts/roboto/Roboto-Light.ttf","7b5fb88f12bec8143f00e21bc3222124"],["static/fonts/roboto/Roboto-Medium.ttf","fe13e4170719c2fc586501e777bde143"],["static/fonts/roboto/Roboto-Regular.ttf","ac3f799d5bbaf5196fab15ab8de8431c"],["static/icons/favicon-192x192.png","419903b8422586a7e28021bbe9011175"],["static/icons/favicon.ico","04235bda7843ec2fceb1cbe2bc696cf4"],["static/images/card_media_player_bg.png","a34281d1c1835d338a642e90930e61aa"],["static/webcomponents-lite.min.js","32b5a9b7ada86304bec6b43d3f2194f0"]],cacheName="sw-precache-v3--"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,a){var c=new URL(e);return a&&c.pathname.match(a)||(c.search+=(c.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),c.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],a=new URL(t,self.location),c=createCacheKey(a,hashParamName,n,!1);return[a.toString(),c]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var a=new Request(n,{credentials:"same-origin"});return fetch(a).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);t=urlsToCacheKeys.has(n);t||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));!t&&"navigate"===e.request.mode&&isPathWhitelisted(["^((?!(static|api|local|service_worker.js|manifest.json)).)*$"],e.request.url)&&(n=new URL("/",self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}),self.addEventListener("push",function(e){var t;e.data&&(t=e.data.json(),e.waitUntil(self.registration.showNotification(t.title,t).then(function(e){firePushCallback({type:"received",tag:t.tag,data:t.data},t.data.jwt)})))}),self.addEventListener("notificationclick",function(e){var t;notificationEventCallback("clicked",e),e.notification.close(),e.notification.data&&e.notification.data.url&&(t=e.notification.data.url)&&e.waitUntil(clients.matchAll({type:"window"}).then(function(e){var n,a;for(n=0;n(<1=eK_R87lsi=vpoHRl9`nUS`tePh$sjA+7$sR4@a_9KY=XMO~HxDf^ z^;PUOzINJc)}nQ6x--82Qk`xbFn`vj(u2FR59rL!VmN5NBR5vxz<9--uWfV1pVbup zXip8ctKdJrJ*>d^2M1gDhpoN3p}AbK9(nus>}or;=SiyOjz7l3^`d_9&kbKCOWn>`#k*)H7w z%4a{vNA3O5@CnP@*Z)7s?X_ZAT3OMis?ckqZb_QHcXQ0<%z4xC*;K-^c&=c)$l`N* zZYQKYQ z7khf@;>GLR*2(<8uF93!^}i%L{apS5=?u1WD=R3H)*wXTGhQP{HvF4zVV_N5mJUXLRdqzxh&Eygg)C`%G8DPYt zEI2V_`K;HEv!XKAadRG?VQ?(NBiKc)o8_2m_A*bQw8S2@9Fva`0uy##n8PV)IIDQ> zGRa>@gft~4+h0i8(YVm-aK{nLPM2wyJ(lt?E)JZ;CG^a)F8cLEPRBPMb0*ArI>%c` ztx$q#p~-pW6AyRDF@JW=4Be=5)hXRm%1~hi-(dl-RgVogx0WWZ^}5*Os!)1HB#0^Y zdf__7^OaJUB}z&nM5j$vTy(ZbD|3o^;G#gs8KmUnb z37pA_qMSmSFHIvFxGX1qt!d<6q`_TmeMVtgq0WrH%xRvI=?a|>D$f)%8Y!FnxV5Os zg11mL`Gn0hXP0Ejl|Ah?Zdt2ryyk0UBy?1-&veP01csoV=2M&E^b#fX zrWq~F@JdyaQ1g`tb~Fi9e7d`By`a=4oAas5cKQ^ZoX{FMM`g!c=TjC7lZ2C}dYo`@ zDO|={uv@!}<*BBqg2$I5uXbv+N$j3td@g9+lm?qq96|Fqq>gKK1ssbq=r&yXIUu;{ zqsL_nS3hl^9|12+x;EMEz8<#t;@cG~U2|Vuto&~HXRTgnLeDlcH zSvIA39mll^FVYv?6S+Jy@}!qxkJ4$Aq=aN~cPU9<&S!#4r(F1vzUf|**0j%44R}?W zW-LkU+OjC($flN7mJ6|sCVll;H!OXotLBGY+R;1yjEcMhLixZ;;d$BKj*1s>M(R0AcFe+UV>YdN(& z-N-lhwD*l^oFg;zlcjfs*AN3@Awj0*$ z>5Pp&|L}p#o=Bg0_gj)0bO@8B?X{$8(>*22YBivCkzk0eoDv!5+yJ{_b z-0$5kjlj(;QV_KP$9i;|Arj%;_F z|0_It=ldTOhcfhEnQpzs*Smd1Zn@fB;{#6VYS$e0AL4IX`A@=fzqU;3UH{`J`cLXL z#_r1&F8U!Ex%hu;zU2GUr`gX-mw(zYt)zXX`Lqzxq^`>Doxw@wcen90Nyp9bpQ`D# z{qq9e4QZk8mi>^m_kBD6Vc)YqR^EYoe`jC*aGSxsd*^SKvkzuX_s+=uc!P1nt4$1t zdkk*yyn674(Wbp#KlhFHe?G_H7x@QIe>;7&-A*PgvH zT%Zu4v(|i>@+W4u&j%XIw3#Gce2d=rqsQ>g%WU%>?i>mItFL>kiDmn8Cq}-vzb)lY zy}{EHGxu4Y=zryYaJzfW`P&_D``7(AC(r0Lt#vNThsolf=Q~_AOcht(a_Hyn)!fUq zkNKYOT42w)-r>j{yD0Cw$8BF6>VL+VpQGl#_=0eK&IZxY$$K>!e>R=$<^Q|o&Cla3 z6_3*^?v-oFTv#@ZefPSA^;VWQv)$i`KQF&t`|-@%<*TaqX}rr_tMxvd{p{-5yMD6q zo(uh694C6~)F$nQ;>Z1E=>uz6tvqE~`#&D_HPb<&QsQPcM z_?zuV$Ul)?Vte=VH}gy1>iw;>QAY z@N%V=H8C(-S?`G7``PH3jZ5^O^?C)QJHh$@wub!>kYWXZ*yp7rT!&K zld0ZSJLCKNTf24}vESr7YO0Z5x->2SV%YY)Z-?WS+TNR2Y47#st+crg$2Y6&`&S>E zH~DQpF2!{1D27@ntf_E{JTuA zOF!=0Drt7ru6)&A-^ta#y0hzIQp=kgU%X{|+@5$~`)-Yd^8fm&N|9#CVhjubFK*pK literal 2513 zcmb2|=HL+M;E!ZtE>0~f%S=vt`=T$??sbZySfD~tKw6o2+v!TQ2H_v%l9J6jX3=h`;C5WZ7ZCvcPX%D=LM2id(h zTK!GB8}|L+-=9lO@ASkq9+mu)lkR=@#-%A3Te$7KOQ`2UyPpEL9-Nz^yC(;vKWZ|p(QJMHSzT;%iL%*%A&Ro!h8lEC+)?wNv}OyMXQ%<@cBFu`kT|^7g8Iob7+zqBAR>XB>U7 zCHrDun6AcgnJWpWe!jVDo&TtHo|i;$l!I39ISa-IZc9Wm7+b?Kr&YXn{&Qi=-pHy= zLZ%^iT@HVhm~;Mk=d>8rB^}0WYG#rbTl=_myJrNemRwrgP^B{2Qh7p==Ms^gnLR;_ z8_%)&Z?d`m{Ogphna3ngdhi$~Dyh0ihAvr9x+rL_m`u^4?O8_CL`}{!Y6J#7Z)IHj zXoiUZK4-bm$&kakSVG$ zGi>w={B?qb4F7hiY3uZq$^}mc{2gICDy-g4FiB zpuC3SiOW5?+UA9|W~TOJ7|&bL@~J0{P4vjlQ>=FCO^qQh!Jy=$x;dCh;fP#&6=1evvI4e3wkm7Rri78O2WW4 zy7KbUIgUEMewl$^nzn~6zIb;@Zc6g(lc)cs|49yhc_Qj@&Jxb>RSwF9{B09L3Z|)b z3OET%rhkcERHylzd-uet-f1a;5=R(99D}kZT;x1x;Wep6<>mI2zg)Xw^vw_P2ykhh zd@PeWRpMw@&rz0@6TO!d{_;H>cc><|vrO4nBdh3~>0zBziH9=(! z$#wWhN4B|y@VuI1`!hn%2l5ro`7Y-_;p5B`ikeAx6s@$?TAsXFGl%2D8H z$M=GWU-F3#f!~+%3=#}K&62uYZGP;=;d2Yuv>PnwOlk67GFQV$YWa(OKFdOaQzZO- z-|VfI|K|G4d}GVZ>vwy$ho;x~9#4LM>HPwuK<>{%+9C0W=E zBGGfj7rAzdWj|TZ#I1X6+s)l4-)HasV^ArdB=AR6d*ABw+wHGQ*`1f0B@zB3_Ur2O zb?5d~{^S-r^76vHXek(bN$Z>2?+y(_&Qa=k&ey;?lxVg6MQ`-(d) zH=EURR$tow@b0$S0}=9W3qRk#<;&B2_H*`+obuv#2e(#*yO-^V-P&+<(R;oBoZHzY z+DbLpWUd^n&3o-S_s8K^%5F@SlYFpXvvGPt#AE)00rekZZm9RIlH8U2dQaKDD@ z&7$1AUou~VZ<}@8ayxv&j^*X+>OTYP&;ESZAa#YAT;04_kMU>I!QSSD(R_!B znVMb-+q|zfHOnYI-h6m%!rEOsEVSJJS-&s8U;pcf{H|5{NuhOxJ6HYMWSLR7BlDL3 zg{1heshY1YSwy~T=?|3o^V9#v1lc!x@;%FTo}YV%fAjr1Gwa>G7j|j)D*pHq&9nFa z+zHN%H9GZtwVifx?dRHM-!5~WbVH@%I=94Et*_2j8@LnQ%@;`@d>(q=y7yFG3(xz4 zDRi?ZhBMs#A15)RsZ{| zcyETMS-92im-Bu;U%5Z3yjxf@$?6XO!rvPvI|umt=8~S%22-``^~>tXXqy z>Dn0gLY~hbW25WCpDEs6xQFd+?z$^?bZzjIef`Mh(#%$%jJHn-ZWU|x;*j?ik$^2z(Ep8ad+ENVW>+g4Zn zc+Zk_)OH2DEYYM-|20=bFNLF&NwM5!8|D0{Lz<0vx1ukO|tIpREy8y)L&G0 zj(^#Xr0h2Ct=sp$N(g@zm&!G#1$FoL+O4_ebe_)-~_`vwk~0<$SUj0|Nk| Cw(VvB diff --git a/homeassistant/config.py b/homeassistant/config.py index 39a6d3304ac..1d86953c0cc 100644 --- a/homeassistant/config.py +++ b/homeassistant/config.py @@ -98,6 +98,7 @@ tts: platform: google group: !include groups.yaml +automation: !include automations.yaml """ @@ -158,10 +159,13 @@ def create_default_config(config_dir, detect_location=True): """ from homeassistant.components.config.group import ( CONFIG_PATH as GROUP_CONFIG_PATH) + from homeassistant.components.config.automation import ( + CONFIG_PATH as AUTOMATION_CONFIG_PATH) config_path = os.path.join(config_dir, YAML_CONFIG_FILE) version_path = os.path.join(config_dir, VERSION_FILE) group_yaml_path = os.path.join(config_dir, GROUP_CONFIG_PATH) + automation_yaml_path = os.path.join(config_dir, AUTOMATION_CONFIG_PATH) info = {attr: default for attr, default, _, _ in DEFAULT_CORE_CONFIG} @@ -203,6 +207,9 @@ def create_default_config(config_dir, detect_location=True): with open(group_yaml_path, 'w'): pass + with open(automation_yaml_path, 'wt') as fil: + fil.write('[]') + return config_path except IOError: