UNPKG

iobroker.javascript

Version:
2 lines 1.09 MB
/*! For license information please see 917.f1e12831.chunk.js.LICENSE.txt */ (self.webpackChunkjs=self.webpackChunkjs||[]).push([[917],{43488:(e,t,n)=>{"use strict";var r=n(64836),a=n(18698);t.Z=void 0;var o=r(n(18698)),i=r(n(56690)),s=r(n(89728)),c=r(n(66115)),l=r(n(41588)),u=r(n(61655)),d=r(n(94993)),h=r(n(73808)),f=r(n(38416)),p=r(n(88564)),m=n(66086),_=r(n(15854)),g=N(n(43041)),v=N(n(10812)),y=n(18967),b=n(59665),w=r(n(86940)),S=r(n(37674)),k=r(n(32126)),E=r(n(42924)),C=r(n(58844)),T=r(n(97581)),x=r(n(20889)),O=r(n(18181)),I=r(n(32548));function D(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(D=function(e){return e?n:t})(e)}function N(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=a(e)&&"function"!=typeof e)return{default:e};var n=D(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var s=o?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(r,i,s):r[i]=e[i]}return r.default=e,n&&n.set(e,r),r}function R(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function A(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?R(Object(n),!0).forEach((function(t){(0,f.default)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):R(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function j(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=(0,h.default)(e);if(t){var a=(0,h.default)(this).constructor;n=Reflect.construct(r,arguments,a)}else n=r.apply(this,arguments);return(0,d.default)(this,n)}}window.localStorage||(window.localStorage={getItem:function(){return null},setItem:function(){return null}});var M=function(e){(0,u.default)(r,e);var t=j(r);function r(e,a){var o;(0,i.default)(this,r);var s=e.Connection||a.Connection||m.Connection;if(!window.document.getElementById("generic-app-iobroker-component")){var l=window.document.createElement("style");l.setAttribute("id","generic-app-iobroker-component"),l.innerHTML='\nhtml {\n height: 100%;\n}\n\nbody {\n margin: 0;\n padding: 0;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n/* scrollbar */\n::-webkit-scrollbar-track {\n background-color: #ccc;\n border-radius: 5px;\n}\n\n::-webkit-scrollbar {\n width: 5px;\n height: 5px;\n background-color: #ccc;\n}\n\n::-webkit-scrollbar-thumb {\n background-color: #575757;\n border-radius: 5px;\n}\n\n#root {\n height: 100%;\n}\n\n.App {\n height: 100%;\n}\n\n@keyframes glow {\n from {\n background-color: initial;\n }\n to {\n background-color: #58c458;\n }\n}\n',window.document.head.appendChild(l)}if(!s.isWeb()&&window.io&&"3000"===window.location.port)try{var u=new window.SocketClient;delete window.io,window.io=u}catch(S){}o=t.call(this,e),(0,f.default)((0,c.default)(o),"socket",void 0),(0,f.default)((0,c.default)(o),"onSystemConfigChanged",(function(e,t){var n;t&&"system.config"===e&&(o.socket.systemLang!==(null===t||void 0===t?void 0:t.common.language)&&(o.socket.systemLang=(null===t||void 0===t?void 0:t.common.language)||"en",O.default.setLanguage(o.socket.systemLang)),o._systemConfig.expertMode!==!(null===t||void 0===t||null===(n=t.common)||void 0===n||!n.expertMode)?(o._systemConfig=(null===t||void 0===t?void 0:t.common)||{},o.setState({expertMode:o.getExpertMode()})):o._systemConfig=(null===t||void 0===t?void 0:t.common)||{})})),(0,f.default)((0,c.default)(o),"onReceiveMessage",(function(e){if(null!==e&&void 0!==e&&e.data)if("updateTheme"===e.data){var t=C.default.getThemeName();C.default.setThemeName(C.default.getThemeName());var n=o.createTheme(t);o.setState({theme:n,themeName:o.getThemeName(n),themeType:o.getThemeType(n)},(function(){o.props.onThemeChange&&o.props.onThemeChange(t),o.onThemeChanged&&o.onThemeChanged(t)}))}else"updateExpertMode"===e.data?o.onToggleExpertMode&&o.onToggleExpertMode(o.getExpertMode()):"chartReady"!==e.data&&console.debug('Received unknown message: "'.concat(JSON.stringify(e.data),'". May be it will be processed later'))})),(0,f.default)((0,c.default)(o),"onResize",(function(){o.resizeTimer&&clearTimeout(o.resizeTimer),o.resizeTimer=setTimeout((function(){o.resizeTimer=null,o.setState({width:r.getWidth()})}),200)})),(0,w.default)();var d=(window.location.search||"").replace(/^\?/,"").replace(/#.*$/,""),h={};d.trim().split("&").filter((function(e){return e.trim()})).forEach((function(e){var t=e.split("=");h[t[0]]=2!==t.length||t[1],"true"===h[t[0]]?h[t[0]]=!0:"false"===h[t[0]]&&(h[t[0]]=!1)})),o.instance=void 0!==h.instance?parseInt(h.instance,10)||0:parseInt(window.location.search.slice(1),10)||0;var p=window.location.pathname.split("/");o.adapterName=(null===a||void 0===a?void 0:a.adapterName)||e.adapterName||window.adapterName||p[p.length-2]||"iot",o.instanceId="system.adapter.".concat(o.adapterName,".").concat(o.instance),o.newReact=!0===h.newReact;var _=E.default.getLocation();_.tab=_.tab||(window._localStorage||window.localStorage).getItem("".concat(o.adapterName,"-adapter"))||"";var y=o.createTheme();o.state={selectedTab:(window._localStorage||window.localStorage).getItem("".concat(o.adapterName,"-adapter"))||"",selectedTabNum:-1,native:{},errorText:"",changed:!1,connected:!1,loaded:!1,isConfigurationError:"",expertMode:!1,toast:"",theme:y,themeName:o.getThemeName(y),themeType:o.getThemeType(y),bottomButtons:!1!==(a&&a.bottomButtons)&&!1!==(null===e||void 0===e?void 0:e.bottomButtons),width:r.getWidth(),confirmClose:!1,_alert:!1,_alertType:"info",_alertMessage:""};var b={en:n(19260),de:n(80580),ru:n(97078),pt:n(63952),nl:n(92417),fr:n(20599),it:n(96951),es:n(31332),pl:n(15170),uk:n(23482),"zh-cn":n(6290)};return a&&a.translations?Object.keys(a.translations).forEach((function(e){return b[e]=Object.assign(b[e],a.translations[e])})):e.translations&&Object.keys(e.translations).forEach((function(t){return b[t]=Object.assign(b[t],e.translations[t])})),O.default.setTranslations(b),o.savedNative={},o.encryptedFields=e.encryptedFields||(null===a||void 0===a?void 0:a.encryptedFields)||[],o.sentryDSN=a&&a.sentryDSN||e.sentryDSN,window.socketUrl&&(window.socketUrl.startsWith(":")?window.socketUrl="".concat(window.location.protocol,"//").concat(window.location.hostname).concat(window.socketUrl):window.socketUrl.startsWith("http://")||window.socketUrl.startsWith("https://")||(window.socketUrl="".concat(window.location.protocol,"//").concat(window.socketUrl))),o.alerDialogRendered=!1,window.oldAlert=window.alert,window.alert=function(e){o.alerDialogRendered?e&&e.toString().toLowerCase().includes("error")?(console.error(e),o.showAlert(e.toString(),"error")):(console.log(e),o.showAlert(e.toString(),"info")):window.oldAlert(e)},o.socket=new s(A(A({},(null===e||void 0===e?void 0:e.socket)||(null===a||void 0===a?void 0:a.socket)),{},{name:o.adapterName,doNotLoadAllObjects:null===a||void 0===a?void 0:a.doNotLoadAllObjects,onProgress:function(e){e===m.PROGRESS.CONNECTING?o.setState({connected:!1}):(m.PROGRESS.READY,o.setState({connected:!0}))},onReady:function(){O.default.setLanguage(o.socket.systemLang),o.socket.subscribeObject("system.config",o.onSystemConfigChanged).then((function(){return o.getSystemConfig()})).then((function(e){return o._secret="undefined"!==typeof e&&e.native&&e.native.secret||"Zgfr56gFe87jJOM",o._systemConfig=(null===e||void 0===e?void 0:e.common)||{},o.socket.getObject(o.instanceId)})).then((function(e){var t,n="none"!==o._systemConfig.diag&&e&&e.common&&e.common.name&&e.common.version&&!e.common.disableDataReporting&&"localhost:3000"!==window.location.host;!o.sentryStarted&&o.sentryDSN&&n&&(o.sentryStarted=!0,g.init({dsn:o.sentryDSN,release:"iobroker.".concat(e.common.name,"@").concat(e.common.version),integrations:[new v.Dedupe]})),!o.sentryInited&&n&&(o.sentryInited=!0,t=o.socket.getObject("system.meta.uuid").then((function(e){e&&e.native&&e.native.uuid&&g.configureScope((function(t){return t.setUser({id:e.native.uuid})}))}))),(t=t||Promise.resolve()).then((function(){e?(o.common=null===e||void 0===e?void 0:e.common,o.onPrepareLoad(e.native,e.encryptedNative),o.savedNative=JSON.parse(JSON.stringify(e.native)),o.setState({native:e.native,loaded:!0,expertMode:o.getExpertMode()},(function(){return o.onConnectionReady&&o.onConnectionReady()}))):(console.warn("Cannot load instance settings"),o.setState({native:{},loaded:!0,expertMode:o.getExpertMode()},(function(){return o.onConnectionReady&&o.onConnectionReady()})))}))})).catch((function(e){return window.alert("Cannot settings: ".concat(e))}))},onError:function(e){console.error(e),o.showError(e)}})),o}return(0,s.default)(r,[{key:"showAlert",value:function(e,t){"error"!==t&&"warning"!==t&&"info"!==t&&"success"!==t&&(t="info"),this.setState({_alert:!0,_alertType:t,_alertMessage:e})}},{key:"renderAlertSnackbar",value:function(){var e=this;return this.alerDialogRendered=!0,p.default.createElement(y.Snackbar,{style:"error"===this.state._alertType?{backgroundColor:"#f44336"}:"success"===this.state._alertType?{backgroundColor:"#4caf50"}:void 0,open:this.state._alert,autoHideDuration:6e3,onClose:function(t){return"clickaway"!==t&&e.setState({_alert:!1})},message:this.state.alertMessage})}},{key:"componentDidMount",value:function(){window.addEventListener("resize",this.onResize,!0),window.addEventListener("message",this.onReceiveMessage,!1),(0,l.default)((0,h.default)(r.prototype),"componentDidMount",this).call(this)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.onResize,!0),window.removeEventListener("message",this.onReceiveMessage,!1),(0,l.default)((0,h.default)(r.prototype),"componentWillUnmount",this).call(this)}},{key:"createTheme",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return(0,S.default)(C.default.getThemeName(e))}},{key:"getThemeName",value:function(e){return e.name}},{key:"getThemeType",value:function(e){return e.palette.mode}},{key:"toggleTheme",value:function(e){var t=this,n=this.state.themeName;if((e=e||("dark"===n?"blue":"blue"===n?"colored":"colored"===n?"light":"dark"))!==n){C.default.setThemeName(e);var r=this.createTheme(e);this.setState({theme:r,themeName:this.getThemeName(r),themeType:this.getThemeType(r)},(function(){t.props.onThemeChange&&t.props.onThemeChange(e),t.onThemeChanged&&t.onThemeChanged(e)}))}}},{key:"getSystemConfig",value:function(){return this.socket.getSystemConfig()}},{key:"getExpertMode",value:function(){return"true"===window.sessionStorage.getItem("App.expertMode")||!!this._systemConfig.expertMode}},{key:"onConnectionReady",value:function(){}},{key:"encrypt",value:function(e){for(var t="",n=0;n<e.length;n++)t+=String.fromCharCode(this._secret[n%this._secret.length].charCodeAt(0)^e.charCodeAt(n));return t}},{key:"decrypt",value:function(e){for(var t="",n=0;n<e.length;n++)t+=String.fromCharCode(this._secret[n%this._secret.length].charCodeAt(0)^e.charCodeAt(n));return t}},{key:"onHashChanged",value:function(){var e=E.default.getLocation();e.tab!==this.state.selectedTab&&this.selectTab(e.tab)}},{key:"selectTab",value:function(e,t){(window._localStorage||window.localStorage).setItem("".concat(this.adapterName,"-adapter"),e),this.setState({selectedTab:e,selectedTabNum:t})}},{key:"onPrepareSave",value:function(e){var t=this;return this.encryptedFields&&this.encryptedFields.forEach((function(n){e[n]&&(e[n]=t.encrypt(e[n]))})),!0}},{key:"onPrepareLoad",value:function(e,t){var n=this;this.encryptedFields&&this.encryptedFields.forEach((function(t){e[t]&&(e[t]=n.decrypt(e[t]))})),t&&t.forEach((function(t){n.encryptedFields=n.encryptedFields||[],!n.encryptedFields.includes(t)&&n.encryptedFields.push(t),e[t]&&(e[t]=n.decrypt(e[t]))}))}},{key:"getExtendableInstances",value:function(){var e=this;return new Promise((function(t){e.socket._socket.emit("getObjectView","system","instance",null,(function(e,n){t(e?[]:n.rows.filter((function(e){return e.value.common.webExtendable})).map((function(e){return e.value})))}))}))}},{key:"getIpAddresses",value:function(e){var t=this;return new Promise((function(n){t.socket._socket.emit("getHostByIp",e||t.common.host,(function(t,r){var a=[{name:"[IPv4] 0.0.0.0 - ".concat(O.default.t("ra_Listen on all IPs")),address:"0.0.0.0",family:"ipv4"}],o=[{name:"[IPv6] ::",address:"::",family:"ipv6"}];r&&((e=r).native.hardware&&e.native.hardware.networkInterfaces&&Object.keys(e.native.hardware.networkInterfaces).forEach((function(t){return e.native.hardware.networkInterfaces[t].forEach((function(e){"IPv6"!==e.family?a.push({name:"[".concat(e.family,"] ").concat(e.address," - ").concat(t),address:e.address,family:"ipv4"}):o.push({name:"[".concat(e.family,"] ").concat(e.address," - ").concat(t),address:e.address,family:"ipv6"})}))})),o.forEach((function(e){return a.push(e)}))),n(a)}))}))}},{key:"onSave",value:function(e){var t,n=this;this.state.isConfigurationError?this.setState({errorText:this.state.isConfigurationError}):this.socket.getObject(this.instanceId).then((function(e){for(var r in t=e||{},n.state.native)Object.prototype.hasOwnProperty.call(n.state.native,r)&&(null===n.state.native[r]?t.native[r]=null:void 0!==n.state.native[r]?t.native[r]=JSON.parse(JSON.stringify(n.state.native[r])):delete t.native[r]);if(n.state.common)for(var a in n.state.common)null===n.state.common[a]?t.common[a]=null:void 0!==n.state.common[a]?t.common[a]=JSON.parse(JSON.stringify(n.state.common[a])):delete t.common[a];return!1!==n.onPrepareSave(t.native)?n.socket.setObject(n.instanceId,t):Promise.reject(new Error("Invalid configuration"))})).then((function(){n.savedNative=t.native,globalThis.changed=!1;try{window.parent.postMessage("nochange","*")}catch(a){}n.setState({changed:!1}),e&&r.onClose()})).catch((function(e){return console.error("Cannot save configuration: ".concat(e))}))}},{key:"renderToast",value:function(){var e=this;return this.state.toast?p.default.createElement(y.Snackbar,{anchorOrigin:{vertical:"bottom",horizontal:"left"},open:!0,autoHideDuration:6e3,onClose:function(){return e.setState({toast:""})},ContentProps:{"aria-describedby":"message-id"},message:p.default.createElement("span",{id:"message-id"},this.state.toast),action:[p.default.createElement(y.IconButton,{key:"close","aria-label":"Close",color:"inherit",className:this.props.classes.close,onClick:function(){return e.setState({toast:""})},size:"large"},p.default.createElement(b.Close,null))]}):null}},{key:"renderError",value:function(){var e=this;return this.state.errorText?p.default.createElement(I.default,{text:this.state.errorText,onClose:function(){return e.setState({errorText:""})}}):null}},{key:"getIsChanged",value:function(e){e=e||this.state.native;var t=JSON.stringify(e)!==JSON.stringify(this.savedNative);return globalThis.changed=t,t}},{key:"onLoadConfig",value:function(e){JSON.stringify(e)!==JSON.stringify(this.state.native)&&this.setState({native:e,changed:this.getIsChanged(e)})}},{key:"setConfigurationError",value:function(e){this.state.isConfigurationError!==e&&this.setState({isConfigurationError:e})}},{key:"renderSaveCloseButtons",value:function(){var e=this;return this.state.confirmClose||this.state.bottomButtons?p.default.createElement(p.default.Fragment,null,this.state.bottomButtons?p.default.createElement(T.default,{theme:this.state.theme,newReact:this.newReact,noTextOnButtons:"xs"===this.state.width||"sm"===this.state.width||"md"===this.state.width,changed:this.state.changed,onSave:function(t){return e.onSave(t)},onClose:function(){e.state.changed?e.setState({confirmClose:!0}):r.onClose()}}):null,this.state.confirmClose?p.default.createElement(x.default,{title:O.default.t("ra_Please confirm"),text:O.default.t("ra_Some data are not stored. Discard?"),ok:O.default.t("ra_Discard"),cancel:O.default.t("ra_Cancel"),onClose:function(t){return e.setState({confirmClose:!1},(function(){return t&&r.onClose()}))}}):null):null}},{key:"_updateNativeValue",value:function(e,t,n){"object"!==(0,o.default)(t)&&(t=t.split("."));var r=t.shift();if(!t.length)return n&&"object"===(0,o.default)(n)?JSON.stringify(e[r])!==JSON.stringify(n)&&(e[r]=n,!0):e[r]!==n&&(e[r]=n,!0);if(e[r]=e[r]||{},"object"!==(0,o.default)(e[r]))throw new Error("attribute ".concat(r," is no object, but ").concat((0,o.default)(e[r])));return this._updateNativeValue(e[r],t,n)}},{key:"updateNativeValue",value:function(e,t,n){var r=JSON.parse(JSON.stringify(this.state.native));if(this._updateNativeValue(r,e,t)){var a=this.getIsChanged(r);if(a!==this.state.changed)try{window.parent.postMessage(a?"change":"nochange","*")}catch(o){}this.setState({native:r,changed:a},n)}}},{key:"showError",value:function(e){this.setState({errorText:e})}},{key:"showToast",value:function(e){this.setState({toast:e})}},{key:"renderHelperDialogs",value:function(){return p.default.createElement(p.default.Fragment,null,this.renderError(),this.renderToast(),this.renderSaveCloseButtons(),this.renderAlertSnackbar())}},{key:"render",value:function(){return this.state.loaded?p.default.createElement("div",{className:"App"},this.renderError(),this.renderToast(),this.renderSaveCloseButtons(),this.renderAlertSnackbar()):p.default.createElement(k.default,{theme:this.state.themeType})}}],[{key:"getWidth",value:function(){var e={xs:0,sm:600,md:960,lg:1280,xl:1920},t=window.innerWidth;return Object.keys(e).reverse().find((function(n){return t>=e[n]}))||"xs"}},{key:"onClose",value:function(){if("undefined"!==typeof window.parent&&window.parent)try{window.parent.$iframeDialog&&"function"===typeof window.parent.$iframeDialog.close?window.parent.$iframeDialog.close():window.parent.postMessage("close","*")}catch(e){window.parent.postMessage("close","*")}}}]),r}(E.default);M.propTypes={adapterName:_.default.string,onThemeChange:_.default.func,socket:_.default.object,encryptedFields:_.default.array,bottomButtons:_.default.bool,Connection:_.default.object};t.Z=M},57046:(e,t)=>{"use strict";var n,r;(function(e){e.unknown="unknown",e.airCondition="airCondition",e.blind="blind",e.blindButtons="blindButtons",e.button="button",e.buttonSensor="buttonSensor",e.camera="camera",e.chart="chart",e.cie="cie",e.ct="ct",e.dimmer="dimmer",e.door="door",e.fireAlarm="fireAlarm",e.floodAlarm="floodAlarm",e.gate="gate",e.hue="hue",e.humidity="humidity",e.image="image",e.info="info",e.instance="instance",e.light="light",e.location="location",e.lock="lock",e.media="media",e.motion="motion",e.rgb="rgb",e.rgbSingle="rgbSingle",e.rgbwSingle="rgbwSingle",e.slider="slider",e.socket="socket",e.temperature="temperature",e.thermostat="thermostat",e.vacuumCleaner="vacuumCleaner",e.volume="volume",e.volumeGroup="volumeGroup",e.warning="warning",e.weatherCurrent="weatherCurrent",e.weatherForecast="weatherForecast",e.window="window",e.windowTilt="windowTilt"})(n||(n={})),function(e){e.Number="number",e.String="string",e.Boolean="boolean",e.File="file"}(r||(r={}));const a={working:{role:/^indicator\.working$/,indicator:!0,notSingle:!0,name:"WORKING",required:!1,defaultRole:"indicator.working",defaultType:r.Boolean},unreach:{role:/^indicator(\.maintenance)?\.unreach$/,indicator:!0,type:r.Boolean,notSingle:!0,name:"UNREACH",required:!1,defaultRole:"indicator.maintenance.unreach"},lowbat:{role:/^indicator(\.maintenance)?\.lowbat$|^indicator(\.maintenance)?\.battery$/,indicator:!0,type:r.Boolean,notSingle:!0,name:"LOWBAT",required:!1,defaultRole:"indicator.maintenance.lowbat"},maintain:{role:/^indicator\.maintenance$/,indicator:!0,type:r.Boolean,notSingle:!0,name:"MAINTAIN",required:!1,defaultRole:"indicator.maintenance"},error:{role:/^indicator\.error$/,indicator:!0,notSingle:!0,name:"ERROR",required:!1,defaultRole:"indicator.error",defaultType:r.String},direction:{role:/^indicator\.direction$/,indicator:!0,notSingle:!0,name:"DIRECTION",required:!1,defaultRole:"indicator.direction"},reachable:{role:/^indicator\.reachable$/,indicator:!0,type:r.Boolean,notSingle:!0,name:"CONNECTED",required:!1,defaultRole:"indicator.reachable",inverted:!0}};class o{constructor(){this.enums=null,this.cache={}}static checkEnum(e,t){let n=!1;return e&&e.forEach((e=>{const r=e.lastIndexOf(".");-1!==r&&(e=e.substring(r+1));for(const a in t)if(t.hasOwnProperty(a)&&t[a].find((t=>t.test(e))))return n=!0,!1})),n}static roleOrEnum(e,t,n,r){return!!(n&&e.common.role&&n.includes(e.common.role))||o.checkEnum(t,r)}static roleOrEnumLight(e,t){return o.roleOrEnum(e,t,o.lightRoles,o.lightWords)}static roleOrEnumBlind(e,t){return o.roleOrEnum(e,t,o.blindRoles,o.blindWords)}static roleOrEnumGate(e,t){return o.roleOrEnum(e,t,o.gateRoles,o.gateWords)}static roleOrEnumWindow(e,t){return o.roleOrEnum(e,t,o.windowRoles,o.blindWords)}static roleOrEnumDoor(e,t){return o.roleOrEnum(e,t,o.doorsRoles,o.doorsWords)}static getEnums(){return{door:{roles:o.doorsRoles,words:o.doorsWords},window:{roles:o.windowRoles,words:o.blindWords},blind:{roles:o.blindRoles,words:o.blindWords},gate:{roles:o.gateRoles,words:o.gateWords},light:{roles:o.lightRoles,words:o.lightWords}}}static getAllStatesInChannel(e,t){const n=[],r=new RegExp("^".concat(t.replace(/([$^.)([\]{}])/g,"\\$1"),"\\.[^.]+$"));return e.forEach((e=>r.test(e)&&n.push(e))),n}static getAllStatesInDevice(e,t){const n=[],r=new RegExp("^".concat(t.replace(/([$^.)([\]{}])/g,"\\$1"),"\\.[^.]+\\.[^.]+$"));return e.forEach((e=>r.test(e)&&n.push(e))),n}static getFunctionEnums(e){const t=[],n=/^enum\.functions\./;for(const r in e)e.hasOwnProperty(r)&&n.test(r)&&e[r]&&"enum"===e[r].type&&e[r].common&&e[r].common.members&&e[r].common.members.length&&t.push(r);return t}static getParentId(e){const t=e.lastIndexOf(".");return-1!==t?e.substring(0,t):e}_applyPattern(e,t,n){var a;if(e[t]&&e[t].common){let i=null;if(n.role&&(i=n.role.test(e[t].common.role||""),i&&n.channelRole)){const r=o.getParentId(t),s=(null===(a=e[r])||void 0===a?void 0:a.common.role)||"";i=!(!s||"channel"!==e[r].type&&"device"!==e[r].type)&&n.channelRole.test(s)}if(!1===i)return!1;if(n.objectType&&e[t].type!==n.objectType)return!1;if(n.stateName&&!n.stateName.test(t))return!1;if(n.unit&&n.unit!==e[t].common.unit)return!1;if(n.ignoreRole){const r=e[t].common.role||"";if(r&&n.ignoreRole.test(r))return!1}if(!1===n.indicator&&(e[t].common.role||"").match(/^indicator(\.[.\w]+)?$/))return!1;if(n.state){const e=t.split(".").pop()||"";if(e&&!n.state.test(e))return!1}if(void 0!==n.write&&n.write!==(e[t].common.write||!1))return!1;if(n.min===r.Number&&typeof e[t].common.min!==r.Number)return!1;if(n.max===r.Number&&typeof e[t].common.max!==r.Number)return!1;if(void 0!==n.read&&n.read!==(void 0===e[t].common.read||e[t].common.read))return!1;if(n.type)if(typeof n.type===r.String){if(n.type!==e[t].common.type)return!1}else{let r=!0;for(let a=0;a<n.type.length;a++)if(n.type[a]===e[t].common.type){r=!1;break}if(r)return!1}if(n.enums&&"function"===typeof n.enums){const r=this._getEnumsForId(e,t);if(!n.enums(e[t],r||[]))return!1}return!0}return!1}_getEnumsForId(e,t){this.enums=this.enums||o.getFunctionEnums(e);const n=[];if(this.enums.forEach((r=>{e[r].common.members.includes(t)&&n.push(r)})),!n.length&&e[t]&&"state"===e[t].type){let r=o.getParentId(t);!e[r]||"channel"!==e[r].type&&"device"!==e[r].type||this.enums.forEach((t=>{e[t].common.members.includes(r)&&n.push(t)}))}return n.length?n:null}static copyState(e,t){return(t=t||JSON.parse(JSON.stringify(e)))&&(t.original=e.original||e,"enums"in e&&e.enums&&(t.enums=e.enums),"role"in e&&e.role&&(t.role=e.role),"channelRole"in e&&e.channelRole&&(t.channelRole=e.channelRole)),t}_testOneState(e){const t=e.objects,n=e.pattern,r=e.state,a=e.channelStates,i=e.usedIds,s=e.usedInCurrentDevice,c=e.ignoreIndicators;let l=e.result,u=!1;return a.forEach((d=>{if("COVER"!==r.name||!(null===l||void 0===l?void 0:l.states.find((e=>e.id&&"COVER"===e.name)))){if(r.indicator&&c){const e=d.split(".").pop()||"";if(e&&c.includes(e))return void console.log("".concat(d," ignored"))}if((r.indicator||!s.includes(d)&&(r.notSingle||!i.includes(d)))&&this._applyPattern(t,d,r)&&(r.indicator||s.push(d),l||(l=JSON.parse(JSON.stringify(o.patterns[n])),e.result=l,null===l||void 0===l||l.states.forEach(((e,t)=>o.copyState(o.patterns[n].states[t],e)))),l)){if(!l.states.find((e=>e.id===d))){let e=!1;for(let t=0;t<l.states.length;t++)if(l.states[t].name===r.name){l.states[t].id=d,e=!0;break}e||console.error("Cannot find state for ".concat(d))}u=!0,r.multiple&&a.length>1&&a.forEach((e=>{if(e!==d&&(r.indicator||!s.includes(e)&&(r.notSingle||!i.includes(e)))&&this._applyPattern(t,e,r)&&(r.indicator||s.push(e),l))if(Array.isArray(r)){const t=o.copyState(r[0]);t.id=e,l.states.push(t)}else{const t=o.copyState(r);t.id=e,l.states.push(t)}}))}}})),u}static getChannelStates(e,t,n){switch(e[t].type){case"chart":case"state":return[t];case"device":const e=o.getAllStatesInDevice(n,t);return e.length?e:o.getAllStatesInChannel(n,t);default:return o.getAllStatesInChannel(n,t)}}static patternIsAllowed(e,t,n){if(!e)return!1;if(Array.isArray(e.type)){for(let r=0;r<e.type.length;r++){if(t&&!t.includes(e.type[r]))return!1;if(n&&n.includes(e.type[r]))return!1}return!0}return!(t&&!t.includes(e.type))&&(!n||!n.includes(e.type))}static allRequiredStatesFound(e){if(!e.result)return!1;const t=e.result.states;for(let n=0;n<t.length;n++)if(t[n].required&&!t[n].id)return!1;return!0}static cleanState(e,t){var n,r;const a=(null===(r=null===(n=t[e.id])||void 0===n?void 0:n.common)||void 0===r?void 0:r.role)||"";if(e.name.includes("%d")&&e.role&&e.id&&a){const t=e.role.exec(a);t&&(e.name=e.name.replace("%d",t[1]))}e.role&&delete e.role,e.enums&&delete e.enums,e.original&&delete e.original}_detectNext(e){const t=e.objects,r=e.id,a=e._keysOptional||[];let i=e._usedIdsOptional||[];const s=e.ignoreIndicators;if(i||(i=[],e._usedIdsOptional=i),!t[r]||!t[r].common)return null;const c={objects:t,channelStates:o.getChannelStates(t,r,a||[]),usedIds:i,ignoreIndicators:s||[],result:null,pattern:n.unknown,usedInCurrentDevice:[],state:{}};for(const n in o.patterns){if(!o.patternIsAllowed(o.patterns[n],e.allowedTypes,e.excludedTypes))continue;if(c.result=null,c.pattern=n,c.usedInCurrentDevice=[],o.patterns[n].states.forEach((e=>{let t=!1;if(c.state=e,this._testOneState(c)&&(t=!0),e.required&&!t)return c.result=null,!1})),!o.allRequiredStatesFound(c))continue;let s;if(c.usedInCurrentDevice.forEach((e=>i.push(e))),"device"!==t[r].type){let e=o.getParentId(r);!t[e]||"channel"!==t[e].type&&"device"!==t[e].type||(s=o.getAllStatesInDevice(a,e),null===s||void 0===s||s.forEach((e=>{var n;null===(n=c.result)||void 0===n||n.states.forEach(((n,r)=>{n.id||!n.indicator&&!n.searchInParent||n.noDeviceDetection||this._applyPattern(t,e,n.original)&&c.result&&(c.result.states[r].id=e)}))})))}if(c.result){const e=c.result;e&&e.states.forEach((e=>o.cleanState(e,c.objects)))}return c.result}return null}detect(e){const t=e.objects,n=e.id;let r=e._keysOptional,a=e._usedIdsOptional;if(void 0!==this.cache[n])return this.cache[n];r||(r=Object.keys(t),r.sort(),e._keysOptional=r),a&&(a=[],e._usedIdsOptional=a);const o=[];let i;for(;i=this._detectNext(e);)o.push(i);return this.cache[n]=o.length?o:null,this.cache[n]}static getPatterns(){const e={};return Object.keys(o.patterns).forEach((t=>{const n=JSON.parse(JSON.stringify(o.patterns[t]));n.states.forEach(((e,r)=>{let a=o.patterns[t].states[r];a.role&&(n.states[r].role=a.role.toString()),a.enums&&(n.states[r].enums=!0,n.states[r].enum=!0)})),e[t]=n})),e}}o.patterns={chart:{states:[{objectType:"chart",name:"CHART"}],type:n.chart},mediaPlayer:{states:[{role:/^media.state(\..*)?$/,indicator:!1,type:[r.Boolean,r.Number],name:"STATE",required:!0,defaultRole:"media.state"},{role:/^button.play(\..*)?$|^action.play(\..*)?$/,indicator:!1,write:!0,type:r.Boolean,name:"PLAY",required:!1,noSubscribe:!0,defaultRole:"button.play"},{role:/^button.pause(\..*)?$|^action.pause(\..*)?$/,indicator:!1,write:!0,type:r.Boolean,name:"PAUSE",required:!1,noSubscribe:!0,defaultRole:"button.pause"},{role:/^button.stop(\..*)?$|^action.stop(\..*)?$/,indicator:!1,write:!0,type:r.Boolean,name:"STOP",required:!1,noSubscribe:!0,defaultRole:"button.stop"},{role:/^button.next(\..*)?$|^action.next(\..*)?$/,indicator:!1,write:!0,type:r.Boolean,name:"NEXT",required:!1,noSubscribe:!0,defaultRole:"button.next"},{role:/^button.prev(\..*)?$|^action.prev(\..*)?$/,indicator:!1,write:!0,type:r.Boolean,name:"PREV",required:!1,noSubscribe:!0,defaultRole:"button.prev"},{role:/^media.mode.shuffle(\..*)?$/,indicator:!1,write:!0,type:r.Boolean,name:"SHUFFLE",required:!1,noSubscribe:!0,defaultRole:"media.mode.shuffle"},{role:/^media.mode.repeat(\..*)?$/,indicator:!1,write:!0,type:r.Number,name:"REPEAT",required:!1,noSubscribe:!0,defaultRole:"media.mode.repeat"},{role:/^media.artist(\..*)?$/,indicator:!1,write:!1,type:r.String,name:"ARTIST",required:!1,defaultRole:"media.artist"},{role:/^media.album(\..*)?$/,indicator:!1,write:!1,type:r.String,name:"ALBUM",required:!1,defaultRole:"media.album"},{role:/^media.title(\..*)?$/,indicator:!1,write:!1,type:r.String,name:"TITLE",required:!1,defaultRole:"media.title"},{role:/^media.cover$|^media.cover.big$/,indicator:!1,write:!1,type:r.String,name:"COVER",required:!1,notSingle:!0,defaultRole:"media.cover"},{role:/^media.cover(\..*)$/,indicator:!1,write:!1,type:r.String,name:"COVER",required:!1,notSingle:!0},{role:/^media.duration(\..*)?$/,indicator:!1,write:!1,type:r.Number,name:"DURATION",required:!1,noSubscribe:!0,defaultRole:"media.duration",defaultUnit:"sec"},{role:/^media.elapsed(\..*)?$/,indicator:!1,type:r.Number,name:"ELAPSED",required:!1,noSubscribe:!0,defaultRole:"media.elapsed",defaultUnit:"sec"},{role:/^media.seek(\..*)?$/,indicator:!1,write:!0,type:r.Number,name:"SEEK",required:!1,noSubscribe:!0,defaultRole:"media.seek"},{role:/^media.track(\..*)?$/,indicator:!1,type:r.String,name:"TRACK",required:!1,noSubscribe:!0,defaultRole:"media.track"},{role:/^media.episode(\..*)?$/,indicator:!1,type:r.String,name:"EPISODE",required:!1,noSubscribe:!0,defaultRole:"media.episode"},{role:/^media.season(\..*)?$/,indicator:!1,type:r.String,name:"SEASON",required:!1,noSubscribe:!0,defaultRole:"media.season"},{role:/^level.volume?$/,indicator:!1,type:r.Number,min:r.Number,max:r.Number,write:!0,name:"VOLUME",required:!1,notSingle:!0,noSubscribe:!0,defaultRole:"level.volume"},{role:/^value.volume?$/,indicator:!1,type:r.Number,min:r.Number,max:r.Number,write:!1,name:"VOLUME_ACTUAL",required:!1,notSingle:!0,noSubscribe:!0,defaultRole:"value.volume"},{role:/^media.mute?$/,indicator:!1,type:r.Boolean,write:!0,name:"MUTE",required:!1,notSingle:!0,noSubscribe:!0,defaultRole:"media.mute"},{stateName:/\.paused$|\.playerState$/,indicator:!1,name:"IGNORE",required:!1,multiple:!0,noSubscribe:!0},a.reachable,a.lowbat,a.maintain,a.error],type:n.media},weatherForecast:{states:[{role:/^weather.icon$|^weather.icon.forecast.0$/,indicator:!1,type:r.String,name:"ICON",required:!0,defaultRole:"weather.icon.forecast.0"},{role:/^value.temperature.min.forecast.0$/,indicator:!1,type:r.Number,name:"TEMP_MIN",required:!0,defaultRole:"value.temperature.min.forecast.0"},{role:/^value.temperature.max.forecast.0$/,indicator:!1,type:r.Number,name:"TEMP_MAX",required:!0,defaultRole:"value.temperature.max.forecast.0"},{role:/^value.precipitation$|^value.precipitation.forecast.0$/,indicator:!1,type:r.Number,name:"PRECIPITATION_CHANCE",unit:"%",required:!1,defaultRole:"value.precipitation.forecast.0"},{role:/^value.precipitation$|^value.precipitation.forecast.0$/,indicator:!1,type:r.Number,name:"PRECIPITATION",unit:"mm",required:!1,defaultRole:"value.precipitation.forecast.0"},{role:/^date$|^date.forecast.0$/,indicator:!1,type:r.String,name:"DATE",required:!1,defaultRole:"date.forecast.0"},{role:/^dayofweek$|^dayofweek.forecast.0$/,indicator:!1,type:r.String,name:"DOW",required:!1,defaultRole:"dayofweek.forecast.0"},{role:/^weather.state$|^weather.state.forecast.0$/,indicator:!1,type:r.String,name:"STATE",required:!1,defaultRole:"weather.state.forecast.0"},{role:/^value.temperature$|^value.temperature.forecast.0$/,indicator:!1,type:r.Number,name:"TEMP",required:!1,defaultRole:"value.temperature.forecast.0"},{role:/^value.pressure$/,indicator:!1,type:r.Number,name:"PRESSURE",required:!1,defaultRole:"weather.icon.forecast.0"},{role:/^value.humidity$|value.humidity.forecast.0$/,indicator:!1,type:r.Number,name:"HUMIDITY",required:!1,defaultRole:"value.humidity.forecast.0"},{role:/^(?:date|time).sunrise(?:.forecast\.0)?$/,indicator:!1,type:r.String,name:"TIME_SUNRISE",required:!1,defaultRole:"date.sunrise"},{role:/^(?:date|time).sunset(?:.forecast\.0)?$/,indicator:!1,type:r.String,name:"TIME_SUNSET",required:!1,defaultRole:"date.sunset"},{role:/^value.temperature.windchill$|^value.temperature.windchill.forecast.0$/,indicator:!1,type:r.Number,name:"WIND_CHILL",required:!1,defaultRole:"value.temperature.windchill.forecast.0"},{role:/^value.temperature.feelslike$|^value.temperature.feelslike.forecast.0$/,indicator:!1,type:r.Number,name:"FEELS_LIKE",required:!1,defaultRole:"value.temperature.feelslike.forecast.0"},{role:/^value.speed.wind$|^value.speed.wind.forecast.0$/,indicator:!1,type:r.Number,name:"WIND_SPEED",required:!1,defaultRole:"value.speed.wind.forecast.0"},{role:/^value.direction.wind$|^value.direction.wind.forecast.0$/,indicator:!1,type:r.Number,name:"WIND_DIRECTION",required:!1,defaultRole:"value.direction.wind.forecast.0"},{role:/^weather.direction.wind$|^weather.direction.wind.forecast.0$/,indicator:!1,type:r.String,name:"WIND_DIRECTION_STR",required:!1,defaultRole:"weather.direction.wind.forecast.0"},{role:/^weather.icon.wind$|^weather.icon.wind.forecast.0$/,indicator:!1,type:r.String,name:"WIND_ICON",required:!1,defaultRole:"weather.icon.wind.forecast.0"},{role:/^weather.chart.url$/,indicator:!1,type:r.String,name:"HISTORY_CHART",required:!1,noSubscribe:!0,defaultRole:"weather.chart.url"},{role:/^weather.chart.url.forecast$/,indicator:!1,type:r.String,name:"FORECAST_CHART",required:!1,noSubscribe:!0,defaultRole:"weather.chart.url.forecast"},{role:/^location$/,indicator:!1,type:r.String,name:"LOCATION",required:!1,defaultRole:"location"},{role:/^weather.icon.forecast.(\d)$/,indicator:!1,type:r.String,name:"ICON%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0,notSingle:!0},{role:/^value.temperature.min.forecast.(\d)$/,indicator:!1,type:r.Number,name:"TEMP_MIN%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value.temperature.max.forecast.(\d)$/,indicator:!1,type:r.Number,name:"TEMP_MAX%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^date.forecast.(\d)$/,indicator:!1,type:r.String,name:"DATE%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^dayofweek.forecast.(\d)$/,indicator:!1,type:r.String,name:"DOW%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^weather.state.forecast.(\d)$/,indicator:!1,type:r.String,name:"STATE%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value.temperature.forecast.(\d)$/,indicator:!1,type:r.Number,name:"TEMP%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value.humidity.forecast.(\d)$/,indicator:!1,type:r.Number,name:"HUMIDITY%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value.humidity.max.forecast.(\d)$/,indicator:!1,type:r.Number,name:"HUMIDITY_MAX%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value.precipitation.forecast.(\d)$/,indicator:!1,type:r.Number,unit:"%",name:"PRECIPITATION_CHANCE%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value.precipitation.forecast.(\d)$/,indicator:!1,type:r.Number,unit:"mm",name:"PRECIPITATION%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value.speed.wind.forecast.(\d)$/,indicator:!1,type:r.Number,name:"WIND_SPEED%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^value.direction.wind.forecast.(\d)$/,indicator:!1,type:r.Number,name:"WIND_DIRECTION%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^weather.direction.wind.forecast.(\d)$/,indicator:!1,type:r.String,name:"WIND_DIRECTION_STR%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0},{role:/^weather.icon.wind.forecast.(\d)$/,indicator:!1,type:r.String,name:"WIND_ICON%d",required:!1,searchInParent:!0,multiple:!0,noSubscribe:!0}],type:n.weatherForecast},rgb:{states:[{role:/^level\.color\.red$/,indicator:!1,type:r.Number,write:!0,name:"RED",required:!0,defaultRole:"level.color.red"},{role:/^level\.color\.green$/,indicator:!1,type:r.Number,write:!0,name:"GREEN",required:!0,defaultRole:"level.color.green"},{role:/^level\.color\.blue$/,indicator:!1,type:r.Number,write:!0,name:"BLUE",required:!0,defaultRole:"level.color.blue"},{role:/^level\.color\.white$/,indicator:!1,type:r.Number,write:!0,name:"WHITE",required:!1,defaultRole:"level.color.white"},{role:/^level\.dimmer$/,indicator:!1,type:r.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:r.Number,write:!0,name:"BRIGHTNESS",required:!1},{role:/^level\.color\.saturation$/,indicator:!1,type:r.Number,write:!0,name:"SATURATION",required:!1},{role:/^level\.color\.temperature$/,indicator:!1,type:r.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"\xb0K"},{role:/^switch\.light$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^switch$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:r.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light"},a.working,a.unreach,a.lowbat,a.maintain,a.error],type:n.rgb},rgbwSingle:{states:[{role:/^level\.color\.rgbw$/,indicator:!1,type:r.String,write:!0,name:"RGBW",required:!0,defaultRole:"level.color.rgbw"},{role:/^level\.dimmer$/,indicator:!1,type:r.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:r.Number,write:!0,name:"BRIGHTNESS",required:!1,defaultUnit:"%"},{role:/^level\.color\.saturation$/,indicator:!1,type:r.Number,write:!0,name:"SATURATION",required:!1},{role:/^level\.color\.temperature$/,indicator:!1,type:r.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"\xb0K"},{role:/^switch\.light$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^switch$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:r.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light"},a.working,a.unreach,a.lowbat,a.maintain,a.error],type:n.rgbwSingle},rgbSingle:{states:[{role:/^level\.color\.rgb$/,indicator:!1,type:r.String,write:!0,name:"RGB",required:!0,defaultRole:"level.color.rgb"},{role:/^level\.dimmer$/,indicator:!1,type:r.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:r.Number,write:!0,name:"BRIGHTNESS",required:!1,defaultUnit:"%"},{role:/^level\.color\.saturation$/,indicator:!1,type:r.Number,write:!0,name:"SATURATION",required:!1},{role:/^level\.color\.temperature$/,indicator:!1,type:r.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"\xb0K"},{role:/^switch\.light$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^switch$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:r.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light"},a.working,a.unreach,a.lowbat,a.maintain,a.error],type:n.rgbSingle},cie:{states:[{role:/^level\.color\.cie$/,indicator:!1,type:r.String,write:!0,name:"CIE",required:!0,defaultRole:"level.color.cie"},{role:/^level\.dimmer$/,indicator:!1,type:r.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:r.Number,write:!0,name:"BRIGHTNESS",required:!1,defaultUnit:"%"},{role:/^level\.color\.saturation$/,indicator:!1,type:r.Number,write:!0,name:"SATURATION",required:!1},{role:/^level\.color\.temperature$/,indicator:!1,type:r.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"\xb0K"},{role:/^switch(\.light)?$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:r.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light"},a.working,a.unreach,a.lowbat,a.maintain,a.error],type:n.cie},hue:{states:[{role:/^level\.color\.hue$/,indicator:!1,type:r.Number,write:!0,name:"HUE",required:!0,defaultRole:"level.color.hue",defaultUnit:"\xb0"},{role:/^level\.dimmer$/,indicator:!1,type:r.Number,write:!0,name:"DIMMER",required:!1,searchInParent:!0,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:r.Number,write:!0,name:"BRIGHTNESS",required:!1},{role:/^level\.color\.saturation$/,indicator:!1,type:r.Number,write:!0,name:"SATURATION",required:!1},{role:/^level\.color\.temperature$/,indicator:!1,type:r.Number,write:!0,name:"TEMPERATURE",required:!1,defaultRole:"level.color.temperature",defaultUnit:"\xb0K"},{role:/^switch\.light$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^switch$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:r.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light"},a.working,a.unreach,a.lowbat,a.maintain,a.error],type:n.hue},ct:{states:[{role:/^level\.color\.temperature$/,indicator:!1,type:r.Number,write:!0,name:"TEMPERATURE",required:!0,defaultRole:"level.color.temperature",defaultUnit:"\xb0K"},{role:/^level\.dimmer$/,indicator:!1,type:r.Number,write:!0,name:"DIMMER",required:!1,defaultRole:"level.dimmer",defaultUnit:"%"},{role:/^level\.brightness$/,indicator:!1,type:r.Number,write:!0,name:"BRIGHTNESS",required:!1},{role:/^level\.color\.saturation$/,indicator:!1,type:r.Number,write:!0,name:"SATURATION",required:!1},{role:/^switch\.light$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1,defaultRole:"switch.light"},{role:/^switch$/,indicator:!1,type:r.Boolean,write:!0,name:"ON",required:!1},{role:/^(state|switch|sensor)\.light|switch$/,indicator:!1,type:r.Boolean,write:!1,name:"ON_ACTUAL",required:!1,defaultRole:"sensor.light"},a.working,a.unreach,a.lowbat,a.maintain,a.error],type:n.ct},warning:{states:[{role:/^value\.warning$/,indicator:!1,name:"LEVEL",required:!0,defaultRole:"value.warning"},{role:/^weather\.title\.short$/,indicator:!1,type:r.String,name:"TITLE",required:!1,defaultRole:"weather.title.short"},{role:/^weather\.title$/,indicator:!1,type:r.String,name:"INFO",required:!1,defaultRole:"weather.title"},{role:/^date\.start$/,indicator:!1,type:r.String,name:"START",required:!1,defaultRole:"date.start"},{role:/^date\.end$/,indicator:!1,type:r.String,name:"END",required:!1,defaultRole:"date.end"},{role:/^date$/,indicator:!1,type:r.String,name:"START",required:!1},{role:/^weather\.chart\.url/,indicator:!1,type:r.String,name:"ICON",required:!1,defaultRole:"weather.chart.url"},{role:/^weather\.state$/,indicator:!1,type:r.String,name:"DESC",required:!1,noSubscribe:!0,defaultRole:"weather.state"}],type:n.warning},airCondition:{states:[{role:/temperature(\..*)?$/,indicator:!1,write:!0,type:r.Number,name:"SET",required:!0,defaultRole:"level.temperature",defaultUnit:"\xb0C"},{role:/airconditioner$/,indicator:!1,write:!0,type:r.Number,searchInParent:!0,name:"MODE",required:!0,defaultRole:"level.mode.airconditioner",defaultStates:{0:"OFF",1:"AUTO",2:"COOL",3:"HEAT",4:"ECO",5:"FAN_ONLY",6:"DRY"}},{role:/(speed|mode)\.fan$/,indicator:!1,write:!0,type:r.Number,name:"SPEED",required:!1,defaultRole:"level.mode.fan",defaultStates:{0:"AUTO",1:"HIGH",2:"LOW",3:"MEDIUM",4:"QUIET",5:"TURBO"}},{role:/^switch\.power$/,indicator:!1,write:!0,type:[r.Boolean,r.Number],searchInParent:!0,name:"POWER",required:!1,defaultRole:"switch.power"},{role:/^switch$/,indicator:!1,write:!0,type:r.Boolean,searchInParent:!0,name:"POWER",required:!1},{role:/temperature(\..*)?$/,indicator:!1,write:!1,type:r.Number,searchInParent:!0,name:"ACTUAL",required:!1,defaultRole:"value.temperature",defaultUnit:"\xb0C"},{role:/humidity(\..*)?$/,indicator:!1,write:!1,type:r.Number,searchInParent:!0,name:"HUMIDITY",required:!1,defaultRole:"value.humidity",defaultUnit:"%"},{role:/^switch\.boost(\..*)?$/,indicator:!1,write:!0,type:[r.Boolean,r.Number],searchInParent:!0,name:"BOOST",required:!1,defaultRole:"switch.boost"},{role:/swing$/,indicator:!1,write:!0,type:r.Number,searchInParent:!0,name:"SWING",required:!1,defaultRole:"level.mode.swing",defaultStates:{0:"AUTO",1:"HORIZONTAL",2:"STATIONARY",3:"VERTICAL"}},{role:/swing$/,indicator:!1,write:!0,type:r.Boolean,searchInParent:!0,name:"SWING",required:!1,defaultRole:"switch.mode.swing"},a.unreach,a.maintain,a.error],type:n.airCondition},thermostat:{states:[{role:/temperature(\..*)?$/,indicator:!1,write:!0,type:r.Number,name:"SET",required:!0,defaultRole:"level.temperature",defaultUnit:"\xb0C"},{role:/temperature(\..*)?$/,indicator:!1,write:!1,type:r.Number,searchInParent:!0,name:"ACTUAL",required:!1,defaultRole:"value.temperature",defaultUnit:"\xb0C"},{role:/humidity(\..*)?$/,indicator:!1,write:!1,type:r.Number,searchInParent:!0,name:"HUMIDITY",required:!1,defaultRole:"value.humidity",defaultUnit:"%"},{role:/^switch(\.mode)?\.boost(\..*)?$/,indicator:!1,write:!0,type:[r.Boolean,r.Number],searchInParent:!0,name:"BOOST",required:!1,defaultRole:"switch.mode.boost"},{role:/^switch\.power$/,indicator:!1,write:!0,type:[r.Boolean,r.Number],searchInParent:!0,name:"POWER",required:!1,defaultRole:"switch.power"},{role:/^switch(\.mode)?\.party$/,indicator:!1,write:!0,type:[r.Boolean,r.Number],searchInParent:!0,name:"PARTY",required:!1,defaultRole:"switch.mode.party"},{role:/^switch$/,indicator:!1,write:!0,type:r.Boolean,searchInParent:!0,name:"POWER",required:!1},{role:/^level(\.mode)?\.thermostat$/,indicator:!1,write:!0,type:r.Number,searchInParent:!0,name:"MODE",required:!1,defaultRole:"level.mode.thermostat",defaultStates:{0:"AUTO",1:"MANUAL"}},a.working,a.unreach,a.lowbat,a.maintain,a.error],type:n.thermostat},vacuumCleaner:{states:[{role:/^switch\.power$/,indicator:!1,write:!0,type:[r.Boolean,r.Number],searchInParent:!0,name:"POWER",required:!0,defaultRole:"switch.power"},{role:/mode\.cleanup$/,indicator:!1,write:!0,type:r.Number,searchInParent:!0,name:"MODE",required:!0,defaultRole:"level.mode.cleanup",defaultStates:{0:"AUTO",1:"NORMAL",2:"QUIET",3:"ECO",4:"EXPRESS"}},{role:/vacuum\.map\.base64$/,indicator:!1,write:!1,type:r.String,searchInParent:!0,name:"MAP_BASE64",required:!1,defaultRole:"vacuum.map.base64"},{role:/vacuum\.map\.url$/,indicator:!1,write:!1,type:r.String,searchInParent:!0,name:"MAP_URL",required:!1},{role:/mode\.work$/,indicator:!1,write:!0,type:r.Number,searchInParent:!0,name:"WORK_MODE",required:!1,defaultRole:"level.mode.work",defaultStates:{0:"AUTO",1:"FAST",2:"MEDIUM",3:"SLOW",4:"TURBO"}},{role:/^value\.water$/,indicator:!1,write:!1,type:r.Number,searchInParent:!0,unit:"%",name:"WATER",required:!1,defaultRole:"value.water",defaultUnit:"%"},{role:/^value\.waste$/,indicator:!1,write:!1,type:r.Number,searchInParent:!0,unit:"%",name:"WASTE",required:!1,defaultRole:"value.waste",defaultUnit:"%"},{role:/^value\.battery$/,indicator:!1,write:!1,type:r.Number,searchInParent:!0,unit:"%",name:"BATTERY",required:!1,defaultRole:"value.battery",defaultUnit:"%"},{role:/^value\.state$/,indicator:!1,write:!1,type:[r.Number,r.String],searchInParent:!0,name:"STATE",required:!1,defaultRole:"value.state"},{role:/^switch\.pause$/,indicator:!1,write:!0,type:r.Boolean,searchInParent:!0,name:"PAUSE",required:!1,defaultRole:"switch.pause"},{role:/^indicator(\.maintenance)?\.waste$|^indicator(\.alarm)?\.waste/,indicator:!0,type:r.Boolean,searchInParent:!0,name:"WASTE_ALARM",required:!1,defaultRole:"indicator.maintenance.waste"},{role:/^indicator(\.maintenance)?\.water$|^indicator(\.alarm)?\.water/,indicator:!0,type:r.Boolean,searchInParent:!0,name:"WATER_ALARM",required:!1,defaultRole:"indicator.maintenance.water"},{role:/^value(\.usage)?\.filter/,indicator:!0,type:r.Number,searchInParent:!0,name:"FILTER",required:!1,defaultRole:"value.usage.filter",defaultUnit:"%"},{role:/^value(\.usage)?\.brush/,indicator:!0,type:r.Number,searchInParent:!0,name:"BRUSH",required:!1,defaultRole:"value.usage.brush",defaultUnit:"%"},{role:/^value(\.usage)?\.sensors/,indicator:!0,type:r.Number,searchInParent:!0,name:"SENSORS",required:!1,defaultRole:"value.usage.sensors",defaultUnit:"%"},{role:/^value(\.usage)?\.brush\.side/,indicator:!0,type:r.Number,searchInParent:!0,name:"SIDE_BRUSH",required:!1,defaultRole:"value.usage.brush.side",defaultUnit:"%"},a.unreach,a.lowbat,a.maintain,a.error],type:n.vacuumCleaner},blinds:{states:[{role:/^level(\.blind)?$/,indicator:!1,type:r.Number,write:!0,enums:o.roleOrEnumBlind,name:"SET",required:!0,defaultRole:"level.blind",defaultUnit:"%"},{role:/^value(\.blind)?$/,indicat