Repository: OctoPrint

I don´t think there should be any major changes to printer detection between OctoPrint Dev and OctoPrint. Could you try to:

  • Stop all OctoPrint addons (if you have multiple installed)
  • Make sure printer is connected and powered on
  • Start OctoPrint addon again

If it is seen by OctoPrint Dev I assume it is listed under Home Assistant - Supervisor - System - Hardware? For my Ender 3 Pro it is listed as both /dev/ttyUSB0 and /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

great! auto start of streamer already working! thanks!

I’m not sure what you’ve changed between 0.3.3 and 0.3.5 but today I discovered that my Octoprint has been auto-updated between those versions and that it now fails to start:

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] done.
[services.d] starting services
[services.d] done.
run.sh
[21:03:52] INFO: Create Ingress user
Traceback (most recent call last):
  File "/data/python/bin/octoprint", line 5, in <module>
    from octoprint import main
  File "/data/python/lib/python2.7/site-packages/octoprint/__init__.py", line 11, in <module>
    from ._version import get_versions
  File "/data/python/lib/python2.7/site-packages/octoprint/_version.py", line 7, in <module>
    import json
  File "/usr/lib/python2.7/json/__init__.py", line 1
    =this,t={domain:this.domain,service:this.service,serviceData:this.serviceData};this.hass.callService(this.domain,this.service,this.serviceData).then((function(){e.progress=!1,e.$.progress.actionSuccess(),t.success=!0}),(function(){e.progress=!1,e.$.progress.actionError(),t.success=!1})).then((function(){e.fire("hass-service-called",t)}))}},{key:"buttonTapped",value:function(){var e=this;this.confirmation?Object(o.b)(this,{text:this.confirmation,confirm:function(){return e.callService()}}):this.callService()}}])&&u(r.prototype,i),a&&u(r,a),m}(Object(a.a)(i.a));customElements.define("ha-call-service-button",m)},299:function(e,t,r){"use strict";r(113),r(162);var n=r(4);function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n      <style>\n        :host {\n          outline: none;\n        }\n        .container {\n          position: relative;\n          display: inline-block;\n        }\n\n        mwc-button {\n          transition: all 1s;\n        }\n\n        .success mwc-button {\n          --mdc-theme-primary: white;\n          background-color: var(--success-color);\n          transition: none;\n        }\n\n        .error mwc-button {\n          --mdc-theme-primary: white;\n          background-color: var(--error-color);\n          transition: none;\n        }\n\n        .progress {\n          @apply --layout;\n          @apply --layout-center-center;\n          position: absolute;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n        }\n      </style>\n      <div class="container" id="container">\n        <mwc-button\n          id="button"\n          disabled="[[computeDisabled(disabled, progress)]]"\n          on-click="buttonTapped"\n        >\n          <slot></slot>\n        </mwc-button>\n        <template is="dom-if" if="[[progress]]">\n          <div class="progress">\n            <ha-circular-progress active size="small"></ha-circular-progress>\n          </div>\n        </template>\n      </div>\n    ']);return o=function(){return e},e}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function c(e,t,r){return(c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=d(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function u(e,t){return!t||"object"!==i(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var p=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&l(e,t)}(m,e);var t,r,i,p,h=(t=m,function(){var e,r=d(t);if(f()){var n=d(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return u(this,e)});function m(){return a(this,m),h.apply(this,arguments)}return r=m,p=[{key:"template",get:function(){return Object(n.a)(o())}},{key:"properties",get:function(){return{hass:{type:Object},progress:{type:Boolean,value:!1},disabled:{type:Boolean,value:!1}}}}],(i=[{key:"tempClass",value:function(e){var t=this.$.container.classList;t.add(e),setTimeout((function(){t.remove(e)}),1e3)}},{key:"ready",value:function(){var e=this;c(d(m.prototype),"ready",this).call(this),this.addEventListener("click",(function(t){return e.buttonTapped(t)}))}},{key:"buttonTapped",value:function(e){this.progress&&e.stopPropagation()}},{key:"actionSuccess",value:function(){this.tempClass("success")}},{key:"actionError",value:function(){this.tempClass("error")}},{key:"computeDisabled",value:function(e,t){return e||t}}])&&s(r.prototype,i),p&&s(r,p),m}(r(32).a);customElements.define("ha-progress-button",p)},357:function(e,t,r){"use strict";r.d(t,"c",(function(){return n})),r.d(t,"b",(function(){return i})),r.d(t,"a",(function(){return o}));var n=function(e,t){return e.callWS(Object.assign({type:"config/core/update"},t))},i=function(e){return e.callWS({type:"config/core/detect"})},o=function(e){return e.callApi("POST","config/core/check_config")}},591:function(e,t,r){"use strict";r.r(t),r.d(t,"HaConfigServerControl",(function(){return F}));r(303),r(189),r(237);var n=r(289),i=r(0),o=(r(113),r(78),r(249)),a=(r(290),r(210),r(234),r(56)),s=r(357);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){var e=w(["\n        .validate-container {\n          height: 140px;\n        }\n\n        .validate-result {\n          color: var(--success-color);\n          font-weight: 500;\n          margin-bottom: 1em;\n        }\n\n        .config-invalid {\n          margin: 1em 0;\n        }\n\n        .config-invalid .text {\n          color: var(--error-color);\n          font-weight: 500;\n        }\n\n        .config-invalid mwc-button {\n          float: right;\n        }\n\n        .validate-log {\n          white-space: pre-wrap;\n          direction: ltr;\n        }\n      "]);return l=function(){return e},e}function u(e,t,r,n,i,o,a){try{var s=e[o](a),c=s.value}catch(l){return void r(l)}s.done?t(c):Promise.resolve(c).then(n,i)}function f(){var e=w(['<div class="card-actions">\n                          <ha-call-service-button\n                            .hass=',"\n                            .domain=",'\n                            service="reload"\n                            >',"\n                          </ha-call-service-button>\n                        </div>"]);return f=function(){return e},e}function d(){var e=w(["\n                <ha-card\n                  header=",'\n                >\n                  <div class="card-content">\n                    ','\n                  </div>\n                  <div class="card-actions">\n                    <ha-call-service-button\n                      .hass=','\n                      domain="homeassistant"\n                      service="reload_core_config"\n                      >',"\n                    </ha-call-service-button>\n                  </div>\n                  ","\n                </ha-card>\n              "]);return d=function(){return e},e}function p(){var e=w(['\n                        <div class="config-invalid">\n                          <span class="text">\n                            ',"\n                          </span>\n                          <mwc-button raised @click=",">\n                            ",'\n                          </mwc-button>\n                        </div>\n                        <div id="configLog" class="validate-log">\n                          ',"\n                        </div>\n                      "]);return p=function(){return e},e}function h(){var e=w(["\n                                <ha-circular-progress\n                                  active\n                                ></ha-circular-progress>\n                              "]);return h=function(){return e},e}function m(){var e=w([' <div\n                                      class="validate-result"\n                                      id="result"\n                                    >\n                                      ',"\n                                    </div>"]);return m=function(){return e},e}function v(){var e=w(["\n                                ","\n                                <mwc-button\n                                  raised\n                                  @click=","\n                                >\n                                  ","\n                                </mwc-button>\n                              "]);return v=function(){return e},e}function y(){var e=w(['\n                        <div\n                          class="validate-container layout vertical center-center"\n                        >\n                          ',"\n                        </div>\n                      "]);return y=function(){return e},e}function b(){var e=w([" <ha-card\n                header=",'\n              >\n                <div class="card-content">\n                  ',"\n                  ","\n                </div>\n              </ha-card>"]);return b=function(){return e},e}function g(){var e=w(["\n      <hass-tabs-subpage\n        .hass=","\n        .narrow=","\n        .route=",'\n        back-path="/config"\n        .tabs=',"\n        .showAdvanced=","\n      >\n        <ha-config-section .isWide=",'>\n          <span slot="header"\n            >','</span\n          >\n          <span slot="introduction"\n            >',"</span\n          >\n\n          ","\n\n          <ha-card\n            header=",'\n          >\n            <div class="card-content">\n              ','\n            </div>\n            <div class="card-actions warning">\n              <ha-call-service-button\n                class="warning"\n                .hass=','\n                domain="homeassistant"\n                service="restart"\n                .confirmation=',"\n                >",'\n              </ha-call-service-button>\n              <ha-call-service-button\n                class="warning"\n                .hass=','\n                domain="homeassistant"\n                service="stop"\n                confirmation=',"\n                >","\n              </ha-call-service-button>\n            </div>\n          </ha-card>\n\n          ","\n        </ha-config-section>\n      </hass-tabs-subpage>\n    "]);return g=function(){return e},e}function w(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function k(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function E(e,t){return(E=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function O(e,t){return!t||"object"!==c(t)&&"function"!=typeof t?j(e):t}function j(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function P(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function x(e){return(x=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _(e){var t,r=z(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function S(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function D(e){return e.decorators&&e.decorators.length}function A(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function T(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function z(e){var t=function(e,t){if("object"!==c(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===c(t)?t:String(t)}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var R=["group","automation","script","scene","person","zone","input_boolean","input_text","input_number","input_datetime","input_select"],F=function(e,t,r,n){var i=function(){(function(){return e});var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach((function(r){t.forEach((function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)}),this)}),this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach((function(n){t.forEach((function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}}),this)}),this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach((function(e){this.addElementPlacement(e,i)}),this),e.forEach((function(e){if(!D(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)}),this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u<l.length;u++)this.addElementPlac
    ^
SyntaxError: invalid syntax
[cmd] /run.sh exited 1
[cont-finish.d] executing container finish scripts...
[cont-finish.d] done.
[s6-finish] waiting for services.
[s6-finish] sending all processes the TERM signal.

I won’t be able to easily debug this week, but not sure what causes that. The changes should be visible on GitHub with “compare release” (I’m now trying to put tags for each release).
Could you verify that the following two lines are set to false in the configuration for the addon and restart?

request_rescue: false
add_build_packages: false

If that does not help, could you try request_rescue: true and restart?

Those 2 options are in my config, but restarting didnt make a difference (still). I will try a little later with the request_rescue set to true. Can you explain what it will do, as I do not want to lose my installed octoprint plugins or settings…

And unfortunately, that didnt work either:

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] done.
[services.d] starting services
[services.d] done.
run.sh
Traceback (most recent call last):
  File "/data/python/bin/pip", line 5, in <module>
    from pip._internal.cli.main import main
  File "/data/python/lib/python2.7/site-packages/pip/_internal/cli/main.py", line 10, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/data/python/lib/python2.7/site-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/data/python/lib/python2.7/site-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
    from pip._internal.cli import cmdoptions
  File "/data/python/lib/python2.7/site-packages/pip/_internal/cli/cmdoptions.py", line 24, in <module>
    from pip._internal.cli.progress_bars import BAR_TYPES
  File "/data/python/lib/python2.7/site-packages/pip/_internal/cli/progress_bars.py", line 12, in <module>
    from pip._internal.utils.logging import get_indentation
  File "/data/python/lib/python2.7/site-packages/pip/_internal/utils/logging.py", line 18, in <module>
    from pip._internal.utils.misc import ensure_dir
  File "/data/python/lib/python2.7/site-packages/pip/_internal/utils/misc.py", line 20, in <module>
    from pip._vendor import pkg_resources
  File "/data/python/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.py", line 41, in <module>
    import inspect
  File "/usr/lib/python2.7/inspect.py", line 748
    ?Lm(h?$????G?|Qhf??/???
    ^
SyntaxError: invalid syntax
[16:13:44] INFO: Could not save data from pip

The idea of the command is to save a list of installed plugins (more specific: packages installed by pip), replace the Python directory with a clean one and thereafter restore the list of plugins to the install. The files in /config/octoprint are never touched, same goes for files saved by plugins (assuming they store data in the plugins folder defined by OctoPrint).

Did the log stop at Could not save data?

I’ll have to setup a new development environment to try to figure out what happened and try to find a solution, I might be able to start with that this evening but since I’m on celluar data it will take some time.

The full log is

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] done.
[services.d] starting services
[services.d] done.
run.sh
Traceback (most recent call last):
  File "/data/python/lib/python2.7/site.py", line 165, in <module>
    main()
  File "/data/python/lib/python2.7/site.py", line 19, in main
    load_host_site()
  File "/data/python/lib/python2.7/site.py", line 50, in load_host_site
    import json
  File "/usr/lib/python2.7/json/__init__.py", line 1
    =this,t={domain:this.domain,service:this.service,serviceData:this.serviceData};this.hass.callService(this.domain,this.service,this.serviceData).then((function(){e.progress=!1,e.$.progress.actionSuccess(),t.success=!0}),(function(){e.progress=!1,e.$.progress.actionError(),t.success=!1})).then((function(){e.fire("hass-service-called",t)}))}},{key:"buttonTapped",value:function(){var e=this;this.confirmation?Object(o.b)(this,{text:this.confirmation,confirm:function(){return e.callService()}}):this.callService()}}])&&u(r.prototype,i),a&&u(r,a),m}(Object(a.a)(i.a));customElements.define("ha-call-service-button",m)},299:function(e,t,r){"use strict";r(113),r(162);var n=r(4);function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n      <style>\n        :host {\n          outline: none;\n        }\n        .container {\n          position: relative;\n          display: inline-block;\n        }\n\n        mwc-button {\n          transition: all 1s;\n        }\n\n        .success mwc-button {\n          --mdc-theme-primary: white;\n          background-color: var(--success-color);\n          transition: none;\n        }\n\n        .error mwc-button {\n          --mdc-theme-primary: white;\n          background-color: var(--error-color);\n          transition: none;\n        }\n\n        .progress {\n          @apply --layout;\n          @apply --layout-center-center;\n          position: absolute;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n        }\n      </style>\n      <div class="container" id="container">\n        <mwc-button\n          id="button"\n          disabled="[[computeDisabled(disabled, progress)]]"\n          on-click="buttonTapped"\n        >\n          <slot></slot>\n        </mwc-button>\n        <template is="dom-if" if="[[progress]]">\n          <div class="progress">\n            <ha-circular-progress active size="small"></ha-circular-progress>\n          </div>\n        </template>\n      </div>\n    ']);return o=function(){return e},e}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function c(e,t,r){return(c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=d(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function u(e,t){return!t||"object"!==i(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var p=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&l(e,t)}(m,e);var t,r,i,p,h=(t=m,function(){var e,r=d(t);if(f()){var n=d(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return u(this,e)});function m(){return a(this,m),h.apply(this,arguments)}return r=m,p=[{key:"template",get:function(){return Object(n.a)(o())}},{key:"properties",get:function(){return{hass:{type:Object},progress:{type:Boolean,value:!1},disabled:{type:Boolean,value:!1}}}}],(i=[{key:"tempClass",value:function(e){var t=this.$.container.classList;t.add(e),setTimeout((function(){t.remove(e)}),1e3)}},{key:"ready",value:function(){var e=this;c(d(m.prototype),"ready",this).call(this),this.addEventListener("click",(function(t){return e.buttonTapped(t)}))}},{key:"buttonTapped",value:function(e){this.progress&&e.stopPropagation()}},{key:"actionSuccess",value:function(){this.tempClass("success")}},{key:"actionError",value:function(){this.tempClass("error")}},{key:"computeDisabled",value:function(e,t){return e||t}}])&&s(r.prototype,i),p&&s(r,p),m}(r(32).a);customElements.define("ha-progress-button",p)},357:function(e,t,r){"use strict";r.d(t,"c",(function(){return n})),r.d(t,"b",(function(){return i})),r.d(t,"a",(function(){return o}));var n=function(e,t){return e.callWS(Object.assign({type:"config/core/update"},t))},i=function(e){return e.callWS({type:"config/core/detect"})},o=function(e){return e.callApi("POST","config/core/check_config")}},591:function(e,t,r){"use strict";r.r(t),r.d(t,"HaConfigServerControl",(function(){return F}));r(303),r(189),r(237);var n=r(289),i=r(0),o=(r(113),r(78),r(249)),a=(r(290),r(210),r(234),r(56)),s=r(357);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){var e=w(["\n        .validate-container {\n          height: 140px;\n        }\n\n        .validate-result {\n          color: var(--success-color);\n          font-weight: 500;\n          margin-bottom: 1em;\n        }\n\n        .config-invalid {\n          margin: 1em 0;\n        }\n\n        .config-invalid .text {\n          color: var(--error-color);\n          font-weight: 500;\n        }\n\n        .config-invalid mwc-button {\n          float: right;\n        }\n\n        .validate-log {\n          white-space: pre-wrap;\n          direction: ltr;\n        }\n      "]);return l=function(){return e},e}function u(e,t,r,n,i,o,a){try{var s=e[o](a),c=s.value}catch(l){return void r(l)}s.done?t(c):Promise.resolve(c).then(n,i)}function f(){var e=w(['<div class="card-actions">\n                          <ha-call-service-button\n                            .hass=',"\n                            .domain=",'\n                            service="reload"\n                            >',"\n                          </ha-call-service-button>\n                        </div>"]);return f=function(){return e},e}function d(){var e=w(["\n                <ha-card\n                  header=",'\n                >\n                  <div class="card-content">\n                    ','\n                  </div>\n                  <div class="card-actions">\n                    <ha-call-service-button\n                      .hass=','\n                      domain="homeassistant"\n                      service="reload_core_config"\n                      >',"\n                    </ha-call-service-button>\n                  </div>\n                  ","\n                </ha-card>\n              "]);return d=function(){return e},e}function p(){var e=w(['\n                        <div class="config-invalid">\n                          <span class="text">\n                            ',"\n                          </span>\n                          <mwc-button raised @click=",">\n                            ",'\n                          </mwc-button>\n                        </div>\n                        <div id="configLog" class="validate-log">\n                          ',"\n                        </div>\n                      "]);return p=function(){return e},e}function h(){var e=w(["\n                                <ha-circular-progress\n                                  active\n                                ></ha-circular-progress>\n                              "]);return h=function(){return e},e}function m(){var e=w([' <div\n                                      class="validate-result"\n                                      id="result"\n                                    >\n                                      ',"\n                                    </div>"]);return m=function(){return e},e}function v(){var e=w(["\n                                ","\n                                <mwc-button\n                                  raised\n                                  @click=","\n                                >\n                                  ","\n                                </mwc-button>\n                              "]);return v=function(){return e},e}function y(){var e=w(['\n                        <div\n                          class="validate-container layout vertical center-center"\n                        >\n                          ',"\n                        </div>\n                      "]);return y=function(){return e},e}function b(){var e=w([" <ha-card\n                header=",'\n              >\n                <div class="card-content">\n                  ',"\n                  ","\n                </div>\n              </ha-card>"]);return b=function(){return e},e}function g(){var e=w(["\n      <hass-tabs-subpage\n        .hass=","\n        .narrow=","\n        .route=",'\n        back-path="/config"\n        .tabs=',"\n        .showAdvanced=","\n      >\n        <ha-config-section .isWide=",'>\n          <span slot="header"\n            >','</span\n          >\n          <span slot="introduction"\n            >',"</span\n          >\n\n          ","\n\n          <ha-card\n            header=",'\n          >\n            <div class="card-content">\n              ','\n            </div>\n            <div class="card-actions warning">\n              <ha-call-service-button\n                class="warning"\n                .hass=','\n                domain="homeassistant"\n                service="restart"\n                .confirmation=',"\n                >",'\n              </ha-call-service-button>\n              <ha-call-service-button\n                class="warning"\n                .hass=','\n                domain="homeassistant"\n                service="stop"\n                confirmation=',"\n                >","\n              </ha-call-service-button>\n            </div>\n          </ha-card>\n\n          ","\n        </ha-config-section>\n      </hass-tabs-subpage>\n    "]);return g=function(){return e},e}function w(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function k(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function E(e,t){return(E=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function O(e,t){return!t||"object"!==c(t)&&"function"!=typeof t?j(e):t}function j(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function P(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function x(e){return(x=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _(e){var t,r=z(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function S(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function D(e){return e.decorators&&e.decorators.length}function A(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function T(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function z(e){var t=function(e,t){if("object"!==c(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===c(t)?t:String(t)}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var R=["group","automation","script","scene","person","zone","input_boolean","input_text","input_number","input_datetime","input_select"],F=function(e,t,r,n){var i=function(){(function(){return e});var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach((function(r){t.forEach((function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)}),this)}),this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach((function(n){t.forEach((function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}}),this)}),this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach((function(e){this.addElementPlacement(e,i)}),this),e.forEach((function(e){if(!D(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)}),this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u<l.length;u++)this.addElementPlac
    ^
SyntaxError: invalid syntax
[08:15:37] INFO: Could not save data from pip
Traceback (most recent call last):
  File "/data/python/lib/python2.7/site.py", line 165, in <module>
    main()
  File "/data/python/lib/python2.7/site.py", line 19, in main
    load_host_site()
  File "/data/python/lib/python2.7/site.py", line 50, in load_host_site
    import json
  File "/usr/lib/python2.7/json/__init__.py", line 1
    =this,t={domain:this.domain,service:this.service,serviceData:this.serviceData};this.hass.callService(this.domain,this.service,this.serviceData).then((function(){e.progress=!1,e.$.progress.actionSuccess(),t.success=!0}),(function(){e.progress=!1,e.$.progress.actionError(),t.success=!1})).then((function(){e.fire("hass-service-called",t)}))}},{key:"buttonTapped",value:function(){var e=this;this.confirmation?Object(o.b)(this,{text:this.confirmation,confirm:function(){return e.callService()}}):this.callService()}}])&&u(r.prototype,i),a&&u(r,a),m}(Object(a.a)(i.a));customElements.define("ha-call-service-button",m)},299:function(e,t,r){"use strict";r(113),r(162);var n=r(4);function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n      <style>\n        :host {\n          outline: none;\n        }\n        .container {\n          position: relative;\n          display: inline-block;\n        }\n\n        mwc-button {\n          transition: all 1s;\n        }\n\n        .success mwc-button {\n          --mdc-theme-primary: white;\n          background-color: var(--success-color);\n          transition: none;\n        }\n\n        .error mwc-button {\n          --mdc-theme-primary: white;\n          background-color: var(--error-color);\n          transition: none;\n        }\n\n        .progress {\n          @apply --layout;\n          @apply --layout-center-center;\n          position: absolute;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n        }\n      </style>\n      <div class="container" id="container">\n        <mwc-button\n          id="button"\n          disabled="[[computeDisabled(disabled, progress)]]"\n          on-click="buttonTapped"\n        >\n          <slot></slot>\n        </mwc-button>\n        <template is="dom-if" if="[[progress]]">\n          <div class="progress">\n            <ha-circular-progress active size="small"></ha-circular-progress>\n          </div>\n        </template>\n      </div>\n    ']);return o=function(){return e},e}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function c(e,t,r){return(c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=d(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function u(e,t){return!t||"object"!==i(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var p=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&l(e,t)}(m,e);var t,r,i,p,h=(t=m,function(){var e,r=d(t);if(f()){var n=d(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return u(this,e)});function m(){return a(this,m),h.apply(this,arguments)}return r=m,p=[{key:"template",get:function(){return Object(n.a)(o())}},{key:"properties",get:function(){return{hass:{type:Object},progress:{type:Boolean,value:!1},disabled:{type:Boolean,value:!1}}}}],(i=[{key:"tempClass",value:function(e){var t=this.$.container.classList;t.add(e),setTimeout((function(){t.remove(e)}),1e3)}},{key:"ready",value:function(){var e=this;c(d(m.prototype),"ready",this).call(this),this.addEventListener("click",(function(t){return e.buttonTapped(t)}))}},{key:"buttonTapped",value:function(e){this.progress&&e.stopPropagation()}},{key:"actionSuccess",value:function(){this.tempClass("success")}},{key:"actionError",value:function(){this.tempClass("error")}},{key:"computeDisabled",value:function(e,t){return e||t}}])&&s(r.prototype,i),p&&s(r,p),m}(r(32).a);customElements.define("ha-progress-button",p)},357:function(e,t,r){"use strict";r.d(t,"c",(function(){return n})),r.d(t,"b",(function(){return i})),r.d(t,"a",(function(){return o}));var n=function(e,t){return e.callWS(Object.assign({type:"config/core/update"},t))},i=function(e){return e.callWS({type:"config/core/detect"})},o=function(e){return e.callApi("POST","config/core/check_config")}},591:function(e,t,r){"use strict";r.r(t),r.d(t,"HaConfigServerControl",(function(){return F}));r(303),r(189),r(237);var n=r(289),i=r(0),o=(r(113),r(78),r(249)),a=(r(290),r(210),r(234),r(56)),s=r(357);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){var e=w(["\n        .validate-container {\n          height: 140px;\n        }\n\n        .validate-result {\n          color: var(--success-color);\n          font-weight: 500;\n          margin-bottom: 1em;\n        }\n\n        .config-invalid {\n          margin: 1em 0;\n        }\n\n        .config-invalid .text {\n          color: var(--error-color);\n          font-weight: 500;\n        }\n\n        .config-invalid mwc-button {\n          float: right;\n        }\n\n        .validate-log {\n          white-space: pre-wrap;\n          direction: ltr;\n        }\n      "]);return l=function(){return e},e}function u(e,t,r,n,i,o,a){try{var s=e[o](a),c=s.value}catch(l){return void r(l)}s.done?t(c):Promise.resolve(c).then(n,i)}function f(){var e=w(['<div class="card-actions">\n                          <ha-call-service-button\n                            .hass=',"\n                            .domain=",'\n                            service="reload"\n                            >',"\n                          </ha-call-service-button>\n                        </div>"]);return f=function(){return e},e}function d(){var e=w(["\n                <ha-card\n                  header=",'\n                >\n                  <div class="card-content">\n                    ','\n                  </div>\n                  <div class="card-actions">\n                    <ha-call-service-button\n                      .hass=','\n                      domain="homeassistant"\n                      service="reload_core_config"\n                      >',"\n                    </ha-call-service-button>\n                  </div>\n                  ","\n                </ha-card>\n              "]);return d=function(){return e},e}function p(){var e=w(['\n                        <div class="config-invalid">\n                          <span class="text">\n                            ',"\n                          </span>\n                          <mwc-button raised @click=",">\n                            ",'\n                          </mwc-button>\n                        </div>\n                        <div id="configLog" class="validate-log">\n                          ',"\n                        </div>\n                      "]);return p=function(){return e},e}function h(){var e=w(["\n                                <ha-circular-progress\n                                  active\n                                ></ha-circular-progress>\n                              "]);return h=function(){return e},e}function m(){var e=w([' <div\n                                      class="validate-result"\n                                      id="result"\n                                    >\n                                      ',"\n                                    </div>"]);return m=function(){return e},e}function v(){var e=w(["\n                                ","\n                                <mwc-button\n                                  raised\n                                  @click=","\n                                >\n                                  ","\n                                </mwc-button>\n                              "]);return v=function(){return e},e}function y(){var e=w(['\n                        <div\n                          class="validate-container layout vertical center-center"\n                        >\n                          ',"\n                        </div>\n                      "]);return y=function(){return e},e}function b(){var e=w([" <ha-card\n                header=",'\n              >\n                <div class="card-content">\n                  ',"\n                  ","\n                </div>\n              </ha-card>"]);return b=function(){return e},e}function g(){var e=w(["\n      <hass-tabs-subpage\n        .hass=","\n        .narrow=","\n        .route=",'\n        back-path="/config"\n        .tabs=',"\n        .showAdvanced=","\n      >\n        <ha-config-section .isWide=",'>\n          <span slot="header"\n            >','</span\n          >\n          <span slot="introduction"\n            >',"</span\n          >\n\n          ","\n\n          <ha-card\n            header=",'\n          >\n            <div class="card-content">\n              ','\n            </div>\n            <div class="card-actions warning">\n              <ha-call-service-button\n                class="warning"\n                .hass=','\n                domain="homeassistant"\n                service="restart"\n                .confirmation=',"\n                >",'\n              </ha-call-service-button>\n              <ha-call-service-button\n                class="warning"\n                .hass=','\n                domain="homeassistant"\n                service="stop"\n                confirmation=',"\n                >","\n              </ha-call-service-button>\n            </div>\n          </ha-card>\n\n          ","\n        </ha-config-section>\n      </hass-tabs-subpage>\n    "]);return g=function(){return e},e}function w(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function k(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function E(e,t){return(E=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function O(e,t){return!t||"object"!==c(t)&&"function"!=typeof t?j(e):t}function j(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function P(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function x(e){return(x=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _(e){var t,r=z(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function S(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function D(e){return e.decorators&&e.decorators.length}function A(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function T(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function z(e){var t=function(e,t){if("object"!==c(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===c(t)?t:String(t)}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var R=["group","automation","script","scene","person","zone","input_boolean","input_text","input_number","input_datetime","input_select"],F=function(e,t,r,n){var i=function(){(function(){return e});var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach((function(r){t.forEach((function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)}),this)}),this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach((function(n){t.forEach((function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}}),this)}),this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach((function(e){this.addElementPlacement(e,i)}),this),e.forEach((function(e){if(!D(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)}),this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u<l.length;u++)this.addElementPlac
    ^
SyntaxError: invalid syntax
[08:15:48] INFO: Could not restore data from pip
[08:15:50] INFO: Create Ingress user
Traceback (most recent call last):
  File "/data/python/lib/python2.7/site.py", line 165, in <module>
    main()
  File "/data/python/lib/python2.7/site.py", line 19, in main
    load_host_site()
  File "/data/python/lib/python2.7/site.py", line 50, in load_host_site
    import json
  File "/usr/lib/python2.7/json/__init__.py", line 1
    =this,t={domain:this.domain,service:this.service,serviceData:this.serviceData};this.hass.callService(this.domain,this.service,this.serviceData).then((function(){e.progress=!1,e.$.progress.actionSuccess(),t.success=!0}),(function(){e.progress=!1,e.$.progress.actionError(),t.success=!1})).then((function(){e.fire("hass-service-called",t)}))}},{key:"buttonTapped",value:function(){var e=this;this.confirmation?Object(o.b)(this,{text:this.confirmation,confirm:function(){return e.callService()}}):this.callService()}}])&&u(r.prototype,i),a&&u(r,a),m}(Object(a.a)(i.a));customElements.define("ha-call-service-button",m)},299:function(e,t,r){"use strict";r(113),r(162);var n=r(4);function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n      <style>\n        :host {\n          outline: none;\n        }\n        .container {\n          position: relative;\n          display: inline-block;\n        }\n\n        mwc-button {\n          transition: all 1s;\n        }\n\n        .success mwc-button {\n          --mdc-theme-primary: white;\n          background-color: var(--success-color);\n          transition: none;\n        }\n\n        .error mwc-button {\n          --mdc-theme-primary: white;\n          background-color: var(--error-color);\n          transition: none;\n        }\n\n        .progress {\n          @apply --layout;\n          @apply --layout-center-center;\n          position: absolute;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n        }\n      </style>\n      <div class="container" id="container">\n        <mwc-button\n          id="button"\n          disabled="[[computeDisabled(disabled, progress)]]"\n          on-click="buttonTapped"\n        >\n          <slot></slot>\n        </mwc-button>\n        <template is="dom-if" if="[[progress]]">\n          <div class="progress">\n            <ha-circular-progress active size="small"></ha-circular-progress>\n          </div>\n        </template>\n      </div>\n    ']);return o=function(){return e},e}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function c(e,t,r){return(c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=d(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function u(e,t){return!t||"object"!==i(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var p=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&l(e,t)}(m,e);var t,r,i,p,h=(t=m,function(){var e,r=d(t);if(f()){var n=d(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return u(this,e)});function m(){return a(this,m),h.apply(this,arguments)}return r=m,p=[{key:"template",get:function(){return Object(n.a)(o())}},{key:"properties",get:function(){return{hass:{type:Object},progress:{type:Boolean,value:!1},disabled:{type:Boolean,value:!1}}}}],(i=[{key:"tempClass",value:function(e){var t=this.$.container.classList;t.add(e),setTimeout((function(){t.remove(e)}),1e3)}},{key:"ready",value:function(){var e=this;c(d(m.prototype),"ready",this).call(this),this.addEventListener("click",(function(t){return e.buttonTapped(t)}))}},{key:"buttonTapped",value:function(e){this.progress&&e.stopPropagation()}},{key:"actionSuccess",value:function(){this.tempClass("success")}},{key:"actionError",value:function(){this.tempClass("error")}},{key:"computeDisabled",value:function(e,t){return e||t}}])&&s(r.prototype,i),p&&s(r,p),m}(r(32).a);customElements.define("ha-progress-button",p)},357:function(e,t,r){"use strict";r.d(t,"c",(function(){return n})),r.d(t,"b",(function(){return i})),r.d(t,"a",(function(){return o}));var n=function(e,t){return e.callWS(Object.assign({type:"config/core/update"},t))},i=function(e){return e.callWS({type:"config/core/detect"})},o=function(e){return e.callApi("POST","config/core/check_config")}},591:function(e,t,r){"use strict";r.r(t),r.d(t,"HaConfigServerControl",(function(){return F}));r(303),r(189),r(237);var n=r(289),i=r(0),o=(r(113),r(78),r(249)),a=(r(290),r(210),r(234),r(56)),s=r(357);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){var e=w(["\n        .validate-container {\n          height: 140px;\n        }\n\n        .validate-result {\n          color: var(--success-color);\n          font-weight: 500;\n          margin-bottom: 1em;\n        }\n\n        .config-invalid {\n          margin: 1em 0;\n        }\n\n        .config-invalid .text {\n          color: var(--error-color);\n          font-weight: 500;\n        }\n\n        .config-invalid mwc-button {\n          float: right;\n        }\n\n        .validate-log {\n          white-space: pre-wrap;\n          direction: ltr;\n        }\n      "]);return l=function(){return e},e}function u(e,t,r,n,i,o,a){try{var s=e[o](a),c=s.value}catch(l){return void r(l)}s.done?t(c):Promise.resolve(c).then(n,i)}function f(){var e=w(['<div class="card-actions">\n                          <ha-call-service-button\n                            .hass=',"\n                            .domain=",'\n                            service="reload"\n                            >',"\n                          </ha-call-service-button>\n                        </div>"]);return f=function(){return e},e}function d(){var e=w(["\n                <ha-card\n                  header=",'\n                >\n                  <div class="card-content">\n                    ','\n                  </div>\n                  <div class="card-actions">\n                    <ha-call-service-button\n                      .hass=','\n                      domain="homeassistant"\n                      service="reload_core_config"\n                      >',"\n                    </ha-call-service-button>\n                  </div>\n                  ","\n                </ha-card>\n              "]);return d=function(){return e},e}function p(){var e=w(['\n                        <div class="config-invalid">\n                          <span class="text">\n                            ',"\n                          </span>\n                          <mwc-button raised @click=",">\n                            ",'\n                          </mwc-button>\n                        </div>\n                        <div id="configLog" class="validate-log">\n                          ',"\n                        </div>\n                      "]);return p=function(){return e},e}function h(){var e=w(["\n                                <ha-circular-progress\n                                  active\n                                ></ha-circular-progress>\n                              "]);return h=function(){return e},e}function m(){var e=w([' <div\n                                      class="validate-result"\n                                      id="result"\n                                    >\n                                      ',"\n                                    </div>"]);return m=function(){return e},e}function v(){var e=w(["\n                                ","\n                                <mwc-button\n                                  raised\n                                  @click=","\n                                >\n                                  ","\n                                </mwc-button>\n                              "]);return v=function(){return e},e}function y(){var e=w(['\n                        <div\n                          class="validate-container layout vertical center-center"\n                        >\n                          ',"\n                        </div>\n                      "]);return y=function(){return e},e}function b(){var e=w([" <ha-card\n                header=",'\n              >\n                <div class="card-content">\n                  ',"\n                  ","\n                </div>\n              </ha-card>"]);return b=function(){return e},e}function g(){var e=w(["\n      <hass-tabs-subpage\n        .hass=","\n        .narrow=","\n        .route=",'\n        back-path="/config"\n        .tabs=',"\n        .showAdvanced=","\n      >\n        <ha-config-section .isWide=",'>\n          <span slot="header"\n            >','</span\n          >\n          <span slot="introduction"\n            >',"</span\n          >\n\n          ","\n\n          <ha-card\n            header=",'\n          >\n            <div class="card-content">\n              ','\n            </div>\n            <div class="card-actions warning">\n              <ha-call-service-button\n                class="warning"\n                .hass=','\n                domain="homeassistant"\n                service="restart"\n                .confirmation=',"\n                >",'\n              </ha-call-service-button>\n              <ha-call-service-button\n                class="warning"\n                .hass=','\n                domain="homeassistant"\n                service="stop"\n                confirmation=',"\n                >","\n              </ha-call-service-button>\n            </div>\n          </ha-card>\n\n          ","\n        </ha-config-section>\n      </hass-tabs-subpage>\n    "]);return g=function(){return e},e}function w(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function k(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function E(e,t){return(E=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function O(e,t){return!t||"object"!==c(t)&&"function"!=typeof t?j(e):t}function j(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function P(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function x(e){return(x=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _(e){var t,r=z(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function S(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function D(e){return e.decorators&&e.decorators.length}function A(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function T(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function z(e){var t=function(e,t){if("object"!==c(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===c(t)?t:String(t)}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var R=["group","automation","script","scene","person","zone","input_boolean","input_text","input_number","input_datetime","input_select"],F=function(e,t,r,n){var i=function(){(function(){return e});var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach((function(r){t.forEach((function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)}),this)}),this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach((function(n){t.forEach((function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}}),this)}),this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach((function(e){this.addElementPlacement(e,i)}),this),e.forEach((function(e){if(!D(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)}),this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u<l.length;u++)this.addElementPlac
    ^
SyntaxError: invalid syntax
[cmd] /run.sh exited 1
[cont-finish.d] executing container finish scripts...
[cont-finish.d] done.
[s6-finish] waiting for services.
[s6-finish] sending all processes the TERM signal.

Sorry, couldn’t past it all in one go, there’s a limit on the individual post :slight_smile:

I think PasteBin or a similar service, or to create an issue on GitHub, might be useful for longer log messages.

I’ve now prepared a virtual machine with addon version 0.3.3 and from there upgraded to 0.3.5 without encountering any issue. I won´t be able to access a Raspberry Pi for debugging until Saturday.

My suspicion is some kind of data corruption, which is difficult for me to debug. Are you using a Raspberry Pi or something else?
I’ve just pushed v0.3.6, difference is one archive is not removed (see https://github.com/fredrikbaberg/hassio-addons/compare/v0.3.5...v0.3.6 for changes). If the Python files are damaged, the idea is that an update (with request_resque:true) will replace those files. If it does not work I’ll make another version with an option to overwrite the install without attempting to reinstall (plugin configuration should not be in that folder).

Really appreciate the effort. Upgraded to 0.3.6 and first tried to start without the request_resque and then with. Unfortunately in both instances the same result and error.

I’m running on a Rpi 3B+

I’ve just noticed a new HassOS release (0.113.0) so may try upgrading that tomorrow and see if it is an external issue…

It wasn’t without a fight (again) but I got 0.113 installed and after fixing some breaking changes I once more tried to start Octoprint. No change (not expected tbh) so I then uninstalled the Octoprint add-on which fortunately left all the important files in /config/octoprint. I left them there too when I re-installed the add-on and now all is well again! Didn’t have to change anything as it picked up the config files from my (previously) working install.

Good that you got it working (again).

I should clarify that I do not remove/modify files from /config/octoprint with the rescue/reset script, since that folder is easy for the user to access through e.g. Samba, SSH or an IDE.

If you look at the config.yaml I use as default you will see that some folders are stored in /config/octoprint while others are in /data/octoprint/. The idea was to have /config/octoprint less cluttered with extra files.
When the addon is uninstalled, anything in /data/ is removed. If the plugin stores data in the plugins folder, those will be lost. This is the case for e.g. the FilamentManager plugin, which stores the database there.

Unless something urgent happens I do not have another release planned before OctoPrint 1.4.1 is ready.

A quick warning if you plan to upgrade OctoPrint 1.4.2: Don´t! (and make sure to have a backup).
I just tried it without success on my Pi3 (gcc is missing, which makes psutil install fail), causing the addon to completely break.

I don´t have time to debug right now. If requested I could build an updated image with OctoPrint 1.4.2 during the weekend.
Something that could work is to first set add_build_packages: true in configuration, restart addon (not just OctoPrint), then upgrade. Thereafter add_build_packages could probably be set to false again.

I tried upgrading from 1.4 to 1.4.2 using your suggestion @fredrikbaberg and it worked fine for me.

Any suggestions on how to get the rapsberry pi camera to work with this? I’ve read through a couple different pages referenced but not had any luck:

I’ve gotten the proper module to load (bcm2835_v4l2) but mjpg-streamer doesn’t have the input_raspicam.so library to use. I then tried to compile the mjpg-streamer repo from scratch inside the octoprint addon, but there’s several libraries missing (I copied the missing libraries over from an OctoPi sd card I was previously using, but that didn’t work for obvious reasons).

Anything else to try??

UPDATE

I changed mjpg-streamer to use input-uvc.so like so and it works!

#!/bin/bash

exec mjpg_streamer -i "input_uvc.so -n -u" -o "output_http.so -w /www_mjpg"

When I’m trying to upload some larger (to me…) gcode files, I get

`Maximum request body size 16777216 exceeded, actual body size 16777216

I haven’t encountered that (yet?), so it’d be good with some more information so that I can debug why this happens.

  • How are you uploading the file, web browser or application (e.g. Cura)?
    • If web browser: do you access through Ingress or WebUI?
      • If access is through Ingress, could you try to upload through WebUI and see if the same issue occurs?
  • The file, is it a gcode file with filesize 16777216 bytes (approx. 16 megabytes)?
  • Version number (Home Assistant, addon)?
1 Like

Hey - I am uploading directly to the webui using Ingress. I just tried direct access, and the problem does not occur there. And in fact, the file is bigger than 16Mb… Addon is 0.3.6 and Supervisor is 245.