-
-
Notifications
You must be signed in to change notification settings - Fork 32k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
0.45 #7648
0.45 #7648
Conversation
This clears the internal cache in case polling picked up the state as set by an effect. For example, aborting an effect by selecting a new brightness could keep a color set by the effect.
State restoration takes up to a second because bulbs can be slow to react. During this time an effect could keep running, overwriting the state that we were trying to restore. Now the effect forgets the light immediately and it thus avoids further changes while the restored state settles.
This does not really matter because the colorloop uses saturated colors (without much white). Anyway, just copy the 3500K that the LIFX app uses.
It's a reasonable default for several light effects.
This update silences some warnings (aiolifx/aiolifx#7).
Forcing a refresh will log a warning if the periodic async_update happens to be running already. So let's do the refresh locally and remove the force_refresh.
Recent aiolifx allow sending messages to unregistered devices (as a no-op). This is handy because bulbs can disappear anytime we yield and constantly testing for availability is both error-prone and annoying. So keep the aiolifx device around until a new one registers on the same mac_addr.
MQTT Cover: Fixed status reporting for range with non-zero base
LIFX: small error corrections
Log out of TP-Link router after devices are recorded.
* Add new raspihats component * added raspihats to COMMENT_REQUIREMENTS in gen_requirements_all.py * disabled pylint import errors * using hass.data for storing i2c-hats manager
Adding requirements that is not explicitly pulled in by the library that manages the Enviro pHAT.
* Remove default zwave config path PYOZW now has much more comprehensive default handling for the config path (in src-lib/libopenzwave/libopenzwave.pyx:getConfig()). It looks in the same place we were looking, plus _many_ more. It will certainly do a much better job of finding the config files than we will (and will be updated as the library is changed, so we don't end up chasing it). The getConfig() method has been there for a while, but was subsntially improved recently. This change simply leaves the config_path as None if it is not specified, which will trigger the default handling in PYOZW. * Install python-openzwave from PyPI As of version 0.4, python-openzwave supports installation from PyPI, which means we can use our 'normal' dependency management tooling to install it. Yay. This uses the default 'embed' build (which goes and downloads statically sources to avoid having to compile anything locally). Check out the python-openzwave readme for more details. * Add python-openzwave deps to .travis.yml Python OpenZwave require the libudev headers to build. This adds the libudev-dev package to Travis runs via the 'apt' addon for Travis. Thanks to @MartinHjelmare for this fix. * Update docker build for PyPI openzwave Now that PYOZW can be install from PyPI, the docker image build process can be simplified to remove the explicit compilation of PYOZW.
* Add datadog component * Improve test_invalid_config datadog test * Use assert_setup_component for test setup
#7429 describes a TypeError that is raised if the port is omitted in the config for the KNX component (integer is required (got type str)). This commit changes the default port from a string to an integer. I expect this will resolve that issue...
self._brightness is assigned with the returned value of the set_luminance() function, which is always equal to None.
* Add initial seven segments OCR image processing * Fix typo
@@ -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;t<o.length;t++)o[t](i)},a=function(e,t){return u({services:Object.assign({},i.services,(n={},n[e]=t,n))});var n},f=function(e){if(null!==i){var t=Object.assign({},i.core,{components:i.core.components.concat(e.data.component)});u({core:t})}},d=function(e){if(null!==i){var t,n=e.data,r=n.domain,s=n.service,o=Object.assign({},i.services[r]||{},(t={},t[s]={description:"",fields:{}},t));a(r,o)}},v=function(e){if(null!==i){var t=e.data,n=t.domain,r=t.service,s=i.services[n];if(s&&r in s){var o={};Object.keys(s).forEach((function(e){e!==r&&(o[e]=s[e])})),a(n,o)}}},h=function(){return Promise.all([e.getConfig(),e.getPanels(),e.getServices()]).then((function(e){var t=e[0],n=e[1],r=e[2];u({core:t,panels:n,services:r})}))},l=function(e){e&&o.splice(o.indexOf(e),1),0===o.length&&s()};e._subscribeConfig=function(e){return e&&(o.push(e),null!==i&&e(i)),c.then((function(){return function(){return l(e)}}))},c=Promise.all([e.subscribeEvents(f,"component_loaded"),e.subscribeEvents(d,"service_registered"),e.subscribeEvents(v,"service_removed"),h()]),c.then((function(r){var i=r[0],o=r[1],c=r[2];s=function(){removeEventListener("ready",h),i(),o(),c()},e.addEventListener("ready",h),n((function(){return l(t)}))}),(function(){return r()}))})}function l(e){for(var t={},n=0;n<e.length;n++){var r=e[n];t[r.entity_id]=r}return t}function p(e,t){var n=Object.assign({},e);return n[t.entity_id]=t,n}function b(e,t){var n=Object.assign({},e);return delete n[t],n}function g(e,t){return e._subscribeEntities?e._subscribeEntities(t):new Promise(function(n,r){function i(e){if(null!==c){var t=e.data,n=t.entity_id,r=t.new_state;c=r?p(c,r):b(c,n);for(var i=0;i<a.length;i++)a[i](c)}}function s(){return e.getStates().then((function(e){c=l(e);for(var t=0;t<a.length;t++)a[t](c)}))}function o(t){t&&a.splice(a.indexOf(t),1),0===a.length&&(u(),e.removeEventListener("ready",s),e._subscribeEntities=null)}var c=null,u=null,a=[],f=null;t&&a.push(t),e._subscribeEntities=function(e){return e&&(a.push(e),null!==c&&e(c)),f.then((function(){return function(){return o(e)}}))},f=Promise.all([e.subscribeEvents(i,"state_changed"),s()]),f.then((function(r){var i=r[0];u=i,e.addEventListener("ready",s),n((function(){return o(t)}))}),(function(){return r()}))})}function m(e){return e.substr(0,e.indexOf("."))}function y(e){return e.substr(e.indexOf(".")+1)}function _(e,t){var n={};return t.attributes.entity_id.forEach((function(t){var r=e[t];r&&(n[r.entity_id]=r)})),n}function E(e){var t=[],n={};return Object.keys(e).forEach((function(r){var i=e[r];"group"===m(r)?t.push(i):n[r]=i})),t.sort((function(e,t){return e.attributes.order-t.attributes.order})),t.forEach((function(e){return e.attributes.entity_id.forEach((function(e){delete n[e]}))})),{groups:t,ungrouped:n}}function w(e,t){var n={};return t.attributes.entity_id.forEach((function(t){var r=e[t];if(r&&!r.attributes.hidden&&(n[r.entity_id]=r,"group"===m(r.entity_id))){var i=_(e,r);Object.keys(i).forEach((function(e){var t=i[e];t.attributes.hidden||(n[e]=t)}))}})),n}function k(e){var t=[];return Object.keys(e).forEach((function(n){var r=e[n];r.attributes.view&&t.push(r)})),t.sort((function(e,t){return e.entity_id===P?-1:t.entity_id===P?1:e.attributes.order-t.attributes.order})),t}var O=1,C=2,j=3,L=function(e,t){this.url=e,this.options=t||{},this.commandId=1,this.commands={},this.eventListeners={},this.closeRequested=!1,this._handleMessage=this._handleMessage.bind(this),this._handleClose=this._handleClose.bind(this)};L.prototype.setSocket=function(e){var t=this,n=this.socket;if(this.socket=e,e.addEventListener("message",this._handleMessage),e.addEventListener("close",this._handleClose),n){var r=this.commands;this.commandId=1,this.commands={},Object.keys(r).forEach((function(e){var n=r[e];n.eventType&&t.subscribeEvents(n.eventCallback,n.eventType).then((function(e){n.unsubscribe=e}))})),this.fireEvent("ready")}},L.prototype.addEventListener=function(e,t){var n=this.eventListeners[e];n||(n=this.eventListeners[e]=[]),n.push(t)},L.prototype.removeEventListener=function(e,t){var n=this.eventListeners[e];if(n){var r=n.indexOf(t);r!==-1&&n.splice(r,1)}},L.prototype.fireEvent=function(e){var t=this;(this.eventListeners[e]||[]).forEach((function(e){return e(t)}))},L.prototype.close=function(){this.closeRequested=!0,this.socket.close()},L.prototype.getStates=function(){return this.sendMessagePromise(t()).then(d)},L.prototype.getServices=function(){return this.sendMessagePromise(r()).then(d)},L.prototype.getPanels=function(){return this.sendMessagePromise(i()).then(d)},L.prototype.getConfig=function(){return this.sendMessagePromise(n()).then(d)},L.prototype.callService=function(e,t,n){return this.sendMessagePromise(s(e,t,n))},L.prototype.subscribeEvents=function(e,t){var n=this;return this.sendMessagePromise(o(t)).then((function(r){var i={eventCallback:e,eventType:t,unsubscribe:function(){return n.sendMessagePromise(c(r.id)).then((function(){delete n.commands[r.id]}))}};return n.commands[r.id]=i,function(){return i.unsubscribe()}}))},L.prototype.ping=function(){return this.sendMessagePromise(u())},L.prototype.sendMessage=function(e){this.socket.send(JSON.stringify(e))},L.prototype.sendMessagePromise=function(e){var t=this;return new Promise(function(n,r){t.commandId+=1;var i=t.commandId;e.id=i,t.commands[i]={resolve:n,reject:r},t.sendMessage(e)})},L.prototype._handleMessage=function(e){var t=JSON.parse(e.data);switch(t.type){case"event":this.commands[t.id].eventCallback(t.event);break;case"result":t.success?this.commands[t.id].resolve(t):this.commands[t.id].reject(t.error),delete this.commands[t.id];break;case"pong":}},L.prototype._handleClose=function(){var e=this;if(Object.keys(this.commands).forEach((function(t){var n=e.commands[t],r=n.reject;r&&r(a(j,"Connection lost"))})),!this.closeRequested){this.fireEvent("disconnected");var t=Object.assign({},this.options,{setupRetry:0}),n=function(r){setTimeout((function(){f(e.url,t).then((function(t){return e.setSocket(t)}),(function(){return n(r+1)}))}),1e3*Math.min(r,5))};n(0)}};var P="group.default_view",S=Object.freeze({ERR_CANNOT_CONNECT:O,ERR_INVALID_AUTH:C,createConnection:v,subscribeConfig:h,subscribeEntities:g,getGroupEntities:_,splitByGroups:E,getViewEntities:w,extractViews:k,extractDomain:m,extractObjectId:y});window.HAWS=S,window.HASS_DEMO=!1;var M=window.createHassConnection=function(e){var t="https:"===window.location.protocol?"wss":"ws",n=t+"://"+window.location.host+"/api/websocket",r={setupRetry:10};return void 0!==e&&(r.authToken=e),v(n,r).then((function(e){return g(e),h(e),e}))};window.noAuth?window.hassConnection=M():window.localStorage.authToken?window.hassConnection=M(window.localStorage.authToken):window.hassConnection=null,"serviceWorker"in navigator&&window.addEventListener("load",(function(){navigator.serviceWorker.register("/service_worker.js")}))})(); | |||
!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 i(){return{type:"get_services"}}function r(){return{type:"get_panels"}}function s(e,t,n){var i={type:"call_service",domain:e,service:t};return n&&(i.service_data=n),i}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 d(t,n){function i(r,s,o){var c=new WebSocket(t),u=!1,a=function(){if(u)return void o(C);if(0===r)return void o(O);var e=-1===r?-1:r-1;setTimeout(function(){return i(e,s,o)},1e3)},d=function t(i){switch(JSON.parse(i.data).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",t),c.removeEventListener("close",a),s(c)}};c.addEventListener("message",d),c.addEventListener("close",a)}return new Promise(function(e,t){return i(n.setupRetry||0,e,t)})}function f(e){return e.result}function v(e,t){return void 0===t&&(t={}),d(e,t).then(function(n){var i=new S(e,t);return i.setSocket(n),i})}function h(e,t){return e._subscribeConfig?e._subscribeConfig(t):new Promise(function(n,i){var r=null,s=null,o=[],c=null;t&&o.push(t);var u=function(e){r=Object.assign({},r,e);for(var t=0;t<o.length;t++)o[t](r)},a=function(e,t){return u({services:Object.assign({},r.services,(n={},n[e]=t,n))});var n},d=function(e){if(null!==r){var t=Object.assign({},r.core,{components:r.core.components.concat(e.data.component)});u({core:t})}},f=function(e){if(null!==r){var t,n=e.data,i=n.domain,s=n.service,o=Object.assign({},r.services[i]||{},(t={},t[s]={description:"",fields:{}},t));a(i,o)}},v=function(e){if(null!==r){var t=e.data,n=t.domain,i=t.service,s=r.services[n];if(s&&i in s){var o={};Object.keys(s).forEach(function(e){e!==i&&(o[e]=s[e])}),a(n,o)}}},h=function(){return Promise.all([e.getConfig(),e.getPanels(),e.getServices()]).then(function(e){var t=e[0],n=e[1],i=e[2];u({core:t,panels:n,services:i})})},l=function(e){e&&o.splice(o.indexOf(e),1),0===o.length&&s()};e._subscribeConfig=function(e){return e&&(o.push(e),null!==r&&e(r)),c.then(function(){return function(){return l(e)}})},c=Promise.all([e.subscribeEvents(d,"component_loaded"),e.subscribeEvents(f,"service_registered"),e.subscribeEvents(v,"service_removed"),h()]),c.then(function(i){var r=i[0],o=i[1],c=i[2];s=function(){removeEventListener("ready",h),r(),o(),c()},e.addEventListener("ready",h),n(function(){return l(t)})},function(){return i()})})}function l(e){for(var t={},n=0;n<e.length;n++){var i=e[n];t[i.entity_id]=i}return t}function p(e,t){var n=Object.assign({},e);return n[t.entity_id]=t,n}function b(e,t){var n=Object.assign({},e);return delete n[t],n}function g(e,t){return e._subscribeEntities?e._subscribeEntities(t):new Promise(function(n,i){function r(e){if(null!==c){var t=e.data,n=t.entity_id,i=t.new_state;c=i?p(c,i):b(c,n);for(var r=0;r<a.length;r++)a[r](c)}}function s(){return e.getStates().then(function(e){c=l(e);for(var t=0;t<a.length;t++)a[t](c)})}function o(t){t&&a.splice(a.indexOf(t),1),0===a.length&&(u(),e.removeEventListener("ready",s),e._subscribeEntities=null)}var c=null,u=null,a=[],d=null;t&&a.push(t),e._subscribeEntities=function(e){return e&&(a.push(e),null!==c&&e(c)),d.then(function(){return function(){return o(e)}})},d=Promise.all([e.subscribeEvents(r,"state_changed"),s()]),d.then(function(i){var r=i[0];u=r,e.addEventListener("ready",s),n(function(){return o(t)})},function(){return i()})})}function m(e){return e.substr(0,e.indexOf("."))}function y(e){return e.substr(e.indexOf(".")+1)}function _(e,t){var n={};return t.attributes.entity_id.forEach(function(t){var i=e[t];i&&(n[i.entity_id]=i)}),n}function E(e){var t=[],n={};return Object.keys(e).forEach(function(i){var r=e[i];"group"===m(i)?t.push(r):n[i]=r}),t.sort(function(e,t){return e.attributes.order-t.attributes.order}),t.forEach(function(e){return e.attributes.entity_id.forEach(function(e){delete n[e]})}),{groups:t,ungrouped:n}}function w(e,t){var n={};return t.attributes.entity_id.forEach(function(t){var i=e[t];if(i&&!i.attributes.hidden&&(n[i.entity_id]=i,"group"===m(i.entity_id))){var r=_(e,i);Object.keys(r).forEach(function(e){var t=r[e];t.attributes.hidden||(n[e]=t)})}}),n}function k(e){var t=[];return Object.keys(e).forEach(function(n){var i=e[n];i.attributes.view&&t.push(i)}),t.sort(function(e,t){return e.entity_id===j?-1:t.entity_id===j?1:e.attributes.order-t.attributes.order}),t}var O=1,C=2,S=function(e,t){this.url=e,this.options=t||{},this.commandId=1,this.commands={},this.eventListeners={},this.closeRequested=!1,this._handleMessage=this._handleMessage.bind(this),this._handleClose=this._handleClose.bind(this)};S.prototype.setSocket=function(e){var t=this,n=this.socket;if(this.socket=e,e.addEventListener("message",this._handleMessage),e.addEventListener("close",this._handleClose),n){var i=this.commands;this.commandId=1,this.commands={},Object.keys(i).forEach(function(e){var n=i[e];n.eventType&&t.subscribeEvents(n.eventCallback,n.eventType).then(function(e){n.unsubscribe=e})}),this.fireEvent("ready")}},S.prototype.addEventListener=function(e,t){var n=this.eventListeners[e];n||(n=this.eventListeners[e]=[]),n.push(t)},S.prototype.removeEventListener=function(e,t){var n=this.eventListeners[e];if(n){var i=n.indexOf(t);-1!==i&&n.splice(i,1)}},S.prototype.fireEvent=function(e){var t=this;(this.eventListeners[e]||[]).forEach(function(e){return e(t)})},S.prototype.close=function(){this.closeRequested=!0,this.socket.close()},S.prototype.getStates=function(){return this.sendMessagePromise(t()).then(f)},S.prototype.getServices=function(){return this.sendMessagePromise(i()).then(f)},S.prototype.getPanels=function(){return this.sendMessagePromise(r()).then(f)},S.prototype.getConfig=function(){return this.sendMessagePromise(n()).then(f)},S.prototype.callService=function(e,t,n){return this.sendMessagePromise(s(e,t,n))},S.prototype.subscribeEvents=function(e,t){var n=this;return this.sendMessagePromise(o(t)).then(function(i){var r={eventCallback:e,eventType:t,unsubscribe:function(){return n.sendMessagePromise(c(i.id)).then(function(){delete n.commands[i.id]})}};return n.commands[i.id]=r,function(){return r.unsubscribe()}})},S.prototype.ping=function(){return this.sendMessagePromise(u())},S.prototype.sendMessage=function(e){this.socket.send(JSON.stringify(e))},S.prototype.sendMessagePromise=function(e){var t=this;return new Promise(function(n,i){t.commandId+=1;var r=t.commandId;e.id=r,t.commands[r]={resolve:n,reject:i},t.sendMessage(e)})},S.prototype._handleMessage=function(e){var t=JSON.parse(e.data);switch(t.type){case"event":this.commands[t.id].eventCallback(t.event);break;case"result":t.success?this.commands[t.id].resolve(t):this.commands[t.id].reject(t.error),delete this.commands[t.id]}},S.prototype._handleClose=function(){var e=this;if(Object.keys(this.commands).forEach(function(t){var n=e.commands[t],i=n.reject;i&&i(a(3,"Connection lost"))}),!this.closeRequested){this.fireEvent("disconnected");var t=Object.assign({},this.options,{setupRetry:0});!function n(i){setTimeout(function(){d(e.url,t).then(function(t){return e.setSocket(t)},function(){return n(i+1)})},1e3*Math.min(i,5))}(0)}};var j="group.default_view",L=Object.freeze({ERR_CANNOT_CONNECT:O,ERR_INVALID_AUTH:C,createConnection:v,subscribeConfig:h,subscribeEntities:g,getGroupEntities:_,splitByGroups:E,getViewEntities:w,extractViews:k,extractDomain:m,extractObjectId:y});window.HAWS=L,window.HASS_DEMO=!1,window.HASS_DEV=!1;var P=window.createHassConnection=function(e){var t="https:"===window.location.protocol?"wss":"ws",n=t+"://"+window.location.host+"/api/websocket",i={setupRetry:10};return void 0!==e&&(i.authToken=e),v(n,i).then(function(e){return g(e),h(e),e})};window.noAuth?window.hassConnection=P():window.localStorage.authToken?window.hassConnection=P(window.localStorage.authToken):window.hassConnection=null,"serviceWorker"in navigator&&window.addEventListener("load",function(){navigator.serviceWorker.register("/service_worker.js")})}(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing semicolon.
Expected an assignment or function call and instead saw an expression.
Unreachable 'var' after 'return'.
Too many errors. (50% scanned).
@@ -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;o<arguments.length;o++){var i=t[o];if(void 0!==i&&null!==i)for(var l=Object.keys(Object(i)),a=0,c=l.length;a<c;a++){var b=l[a],f=Object.getOwnPropertyDescriptor(i,b);void 0!==f&&f.enumerable&&(n[b]=i[b])}}return n}function r(){Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:e})}var t={assign:e,polyfill:r};t.polyfill()})(); | |||
!function(){"use strict";function e(e,t){if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var r=Object(e),n=1;n<arguments.length;n++){var o=arguments[n];if(void 0!==o&&null!==o)for(var i=Object.keys(Object(o)),l=0,c=i.length;l<c;l++){var a=i[l],b=Object.getOwnPropertyDescriptor(o,a);void 0!==b&&b.enumerable&&(r[a]=o[a])}}return r}function t(){Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:e})}({assign:e,polyfill:t}).polyfill()}(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Expected an assignment or function call and instead saw an expression.
Missing semicolon.
Function declarations are not invocable. Wrap the whole function invocation in parens.
@balloob Should I have written (new platform) for the Axis integration? |
@Kane610 should be picked up automatically. Although sometimes our bots don't apply the right labels. |
* # This is a combination of 3 commits. # The first commit's message is: Add seperate zwave panel # The 2nd commit message will be skipped: # unused import # The 3rd commit message will be skipped: # Use get for config * Add seperate zwave panel * Modify set_config_parameter to accept setting string values * descriptions * Tweaks * Tweaks * Tweaks * Tweaks * lint * Fallback if no config parameteres are available * Update services.yaml * review changes
* Add network_key as a config option * Update __init__.py
In the "PyPI Openzwave " line: IF YOU CHANGED |
Is it still time to get #7646 into 0.45? The docs were updated and is included at home-assistant/home-assistant.io#2657 so it would make sense to have it here too. Thank you guys |
* Implemented ffmpeg option on Amcrest camera and upgraded to version 1.2.0 * Added ffmpeg arguments and binary options to Amcrest camera * Added ffmpeg as dependencies * Makes lint happy and fixed requirements_all.txt * Inherent the ffmpeg.binary configuration from ffmpeg component * Update amcrest.py
Make sure to cherry-pick all PRs that went into dev after release branch was cut: https://github.com/home-assistant/home-assistant/milestone/62
Welcome to another great release of Home Assistant! While some of contributors and users are gathering at PyCon US 2017, we still managed to get a great release together!
First thing for this release is a feature that has been requested a lot: an automation editor! It's still experimental - and many things are still in progress - but it works! You can create new automations and edit existing ones. If you start a new config, you're all good to go. Otherwise check these instructions to get your automations ready for editing in the UI.
As the editor is experimental, there are some limitations. These include that Chrome is the only supported browser, we don't support all triggers and actions and there is no support for conditions yet. But the foundation is there and so if you want to contribute to this, come help!
On the Z-Wave front a lot has happened. The biggest one is that we have a major extension of the Z-Wave panel thanks to @turbokongen! You will now be able to change config parameters and manage your devices.
Thanks to the work by the Python Open Z-Wave team we are now able to install it on demand from PyPi! There is no longer a need to pre-compile it yourself. This should give us the guarantee that we work with the Python Open Z-Wave version that the code expects. Warning: If you have a security key set in your Open Z-Wave
options.xml
, copyoptions.xml
to your Home Assistant configuration directory. This is the only place where options will get persisted.Next to that @armills has lead the charge and managed to get full test coverage for Z-Wave! Thanks for all the hard work!
This release also contains two integrations which could help you to make non-smart devices a little smarter. The
file
sensor and theseven_segments
OCR image processing platform. The first simply reads a plain-text file which was created by a logger or alike. The latter one extracts the value from a captured image that shows a seven-segments display.And last, but not least, our Docker image is now based off Python 3.6. This version is faster and uses less memory than Python 3.5. Win!
If you are using our experimental Hass.io image, we made a breaking change in how the panel is served. If you have an existing installation, make sure you update your supervisor to the latest version before updating Home Assistant. If you are going to flash a new Hass.io image, make sure to only flash the new 0.8 image as linked on the installation page.
New platform and components
Breaking changes
homeassistant_start
with event automation (@balloob - #7474) (automation.event docs) (breaking change)All changes
product_name
in email headers (@azogue - #7533) (notify.smtp docs)