@fastybird/smart-panel-admin 1.1.0-alpha.1 → 1.1.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{card-add-form-y0JKMGkg.js → card-add-form-hQfcolyj.js} +1 -1
- package/dist/assets/{card-edit-form-C5lxEul-.js → card-edit-form-BPs9Aljn.js} +1 -1
- package/dist/assets/{components-BHQu75iz.js → components-B4a-3cag.js} +1 -1
- package/dist/assets/{components-D-Zy5b_J.js → components-BqvPyJ09.js} +2 -2
- package/dist/assets/{components-IJY1gRZ-.js → components-CDS0rEqD.js} +1 -1
- package/dist/assets/components-CGY9a3zE.js +1 -0
- package/dist/assets/{components-D4AuJ7WM.js → components-CtSAjzWY.js} +1 -1
- package/dist/assets/components-DKCuWF26.js +6 -0
- package/dist/assets/{components-w1Sp0NSp.js → components-Dula1I7c.js} +1 -1
- package/dist/assets/{composables-BWLSK4fg.js → composables-BiL7NDB2.js} +1 -1
- package/dist/assets/{dashboard-CIZXZYsZ.js → dashboard-CQWK08VY.js} +2 -2
- package/dist/assets/{devices-eIGsCNDg.js → devices-DPaIRKfd.js} +2 -2
- package/dist/assets/{index-mFC4sSVS.js → index-DsUh3vY9.js} +4 -4
- package/dist/assets/index-E5bAVcL9.css +1 -0
- package/dist/assets/{page-configure-C00e7Aho.js → page-configure-Bt3Zbbmn.js} +1 -1
- package/dist/assets/{page-configure-DOEhCZdm.js → page-configure-CVQE_kOC.js} +1 -1
- package/dist/assets/{spaces-BStWGhe9.js → spaces-DUnXUSuq.js} +2 -2
- package/dist/assets/{spaces-home-control.constants-CW7LkkKR.js → spaces-home-control.constants-DR2Pcn9V.js} +1 -1
- package/dist/assets/{system-Cv_hpTOe.js → system-DcykQsKX.js} +2 -2
- package/dist/assets/{view-card-add-DD5YryZP.js → view-card-add-BcIFVzzf.js} +1 -1
- package/dist/assets/{view-card-edit-Dffb6C_5.js → view-card-edit-BbS-QIUa.js} +1 -1
- package/dist/assets/{view-channel-q98Exy7t.js → view-channel-KMBt7x1r.js} +1 -1
- package/dist/assets/{view-channel-add-DrABNejP.js → view-channel-add-CkU6QiFM.js} +1 -1
- package/dist/assets/{view-channel-edit-DgJprYvz.js → view-channel-edit-DMGNRzXp.js} +1 -1
- package/dist/assets/{view-channel-property-add-DzdI9AUZ.js → view-channel-property-add-D6wgVVAD.js} +1 -1
- package/dist/assets/{view-channel-property-edit-BdmTT670.js → view-channel-property-edit-BX81I2m7.js} +1 -1
- package/dist/assets/{view-channels-CqHCFAo-.js → view-channels-BAfnLqdq.js} +1 -1
- package/dist/assets/{view-data-source-add-D4vJyE9o.js → view-data-source-add-Bzb-61aK.js} +1 -1
- package/dist/assets/{view-data-source-add-HhueBh4s.js → view-data-source-add-_7ip7mrf.js} +1 -1
- package/dist/assets/{view-data-source-edit-D4vape9E.js → view-data-source-edit-CoUrprKG.js} +1 -1
- package/dist/assets/{view-data-source-edit-T9LTr9Ls.js → view-data-source-edit-DrlMJPDn.js} +1 -1
- package/dist/assets/view-device-DaO5gtKC.js +1 -0
- package/dist/assets/view-device-TJjGoba6.css +1 -0
- package/dist/assets/{view-device-add-EQksbpRv.js → view-device-add-CBukVLds.js} +1 -1
- package/dist/assets/{view-device-control-R7en7F29.js → view-device-control-DaFqVxUq.js} +1 -1
- package/dist/assets/{view-device-edit-BhvFQYS7.js → view-device-edit-C3s_k0Qb.js} +1 -1
- package/dist/assets/{view-devices-BZvnh_6I.css → view-devices-BV3p7TrL.css} +1 -1
- package/dist/assets/view-devices-By3K8mW3.js +1 -0
- package/dist/assets/{view-devices-wizard-fmlWqzsS.js → view-devices-wizard-x1o4hu_X.js} +1 -1
- package/dist/assets/{view-display-edit-BTw3bsC4.js → view-display-edit-KWE_nXux.js} +1 -1
- package/dist/assets/{view-displays-DF3FwHTl.js → view-displays-CHfrmtje.js} +1 -1
- package/dist/assets/{view-extension-detail-QL4_ZhS_.js → view-extension-detail-ol0GG8Op.js} +1 -1
- package/dist/assets/{view-extensions-BhgJ2M09.js → view-extensions-DVIU3WDc.js} +1 -1
- package/dist/assets/{view-page-add-j9s2LGzK.js → view-page-add-CKANfB0w.js} +1 -1
- package/dist/assets/{view-page-configure-ejLDXru-.js → view-page-configure-C-eA0dC4.js} +1 -1
- package/dist/assets/{view-page-configure-BderLwGA.js → view-page-configure-C5n0g4eO.js} +1 -1
- package/dist/assets/{view-page-edit-D0oRtckq.js → view-page-edit-CWXaQZak.js} +1 -1
- package/dist/assets/{view-pages-BR2NP6KY.js → view-pages-BBiRpjJE.js} +1 -1
- package/dist/assets/{view-scenes-085iK0py.js → view-scenes-DWbfoSPZ.js} +1 -1
- package/dist/assets/{view-simulator-device-wizard-D6hl-fV8.js → view-simulator-device-wizard-1NlmPIqF.js} +1 -1
- package/dist/assets/{view-space-configure-D9U0Iqm8.js → view-space-configure-DpiLxtMc.js} +1 -1
- package/dist/assets/{view-spaces-CHnRlHr9.js → view-spaces-BlGL7Tsw.js} +1 -1
- package/dist/assets/{view-stats-DFIFKdoJ.js → view-stats-DAvsMByk.js} +1 -1
- package/dist/assets/{view-system-backups-BnGnx4Cv.js → view-system-backups-BUw9L8nZ.js} +1 -1
- package/dist/assets/{view-system-info-DChy6JDC.js → view-system-info-Dzmb0cpQ.js} +1 -1
- package/dist/assets/{view-system-log-detail-CcJNgQDH.js → view-system-log-detail-BfYGDRhq.js} +1 -1
- package/dist/assets/{view-system-logs-BBW0txIV.js → view-system-logs-DyxQDzUR.js} +1 -1
- package/dist/assets/{view-tile-add-M2rs-Gls.js → view-tile-add-BXX2-rGD.js} +1 -1
- package/dist/assets/{view-tile-add-TeQiMyjD.js → view-tile-add-Cn7SJEqT.js} +1 -1
- package/dist/assets/{view-tile-edit-CRrO0_NH.js → view-tile-edit-D80VgTdu.js} +1 -1
- package/dist/assets/{view-tile-edit-CqHN9fJY.js → view-tile-edit-XzR_OQfI.js} +1 -1
- package/dist/assets/view-virtual-device-wizard-JqYK7YnI.js +1 -0
- package/dist/assets/{weather-CM1Kb9sH.js → weather-dPU3SxIP.js} +1 -1
- package/dist/index.html +19 -19
- package/package.json +1 -1
- package/dist/assets/components-B3o0jJFh.js +0 -6
- package/dist/assets/components-B6Z0UuLq.js +0 -1
- package/dist/assets/index-ypk03oDF.css +0 -1
- package/dist/assets/view-device-CoxxlPu_.css +0 -1
- package/dist/assets/view-device-Qz8-vs_4.js +0 -1
- package/dist/assets/view-devices-YjxrKDyE.js +0 -1
- package/dist/assets/view-virtual-device-wizard-_rXxNd6h.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o,ki as s,n as c,yi as l}from"./icon-with-child-CgZMNB3F.js";import{Dr as u,Fn as d,On as f,Xn as p,aa as m,an as h,at as g,b as _,c as v,d as y,f as b,ft as x,g as S,ht as C,i as w,in as T,it as E,mt as D,nn as O,o as k,ot as A,p as j,rn as M,rt as N,tn as P,vt as F,yt as I}from"./common-CEAYa_VX.js";import{r as L}from"./config-CIAUSdP7.js";import{r as R}from"./usePlugins-BAUrRkxK.js";import{t as z}from"./schemas.utils-DPM2Btj1.js";import{t as B}from"./dist-DJgPCOr0.js";import{a as V,i as ee,n as H,o as U,r as W}from"./keys-DghNVBR5.js";import{a as G,i as te,n as ne}from"./devices.constants-HX5whDWr.js";import{t as re}from"./useDevicesPlugins-IYuPoZmZ.js";import{s as ie}from"./system.constants-BvSIFqdm.js";import{n as ae}from"./logs-entries.transformers-CZw7f53p.js";var K=y(),q=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},J=class extends q{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},Y=class extends q{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},oe=()=>{let e=R(),{enabled:n}=L(),r=[`channelPropertyAddForm`,`channelPropertyEditForm`],i=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>B(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},se=()=>{let e=R(),{enabled:n}=L(),r=[`channelAddForm`,`channelEditForm`],i=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>B(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},ce=({id:e})=>{let n=_().getStore(W),{data:r,semaphore:i}=m(n);return{channel:t(()=>e===null?null:r.value[e]??null),isLoading:t(()=>i.value.fetching.item.includes(e)?!0:(r.value[e]??null)===null&&i.value.fetching.items.includes(`all`)),fetchChannel:async()=>{(r.value[e]??null)?.draft||await n.get({id:e})}}},le=(e={})=>{let{deviceId:n}=e,r=_().getStore(W),{firstLoad:i,semaphore:a}=m(r),o=n===void 0?void 0:typeof n==`string`?t(()=>n):n;return{channels:t(()=>r.findAll().filter(e=>!o?.value||e.device===o.value)),areLoading:t(()=>a.value.fetching.items.includes(o?.value??`all`)?!0:!i.value.includes(o?.value??`all`)&&a.value.fetching.items.includes(o?.value??`all`)),loaded:t(()=>i.value.includes(o?.value??`all`)),fetchChannels:async()=>{await r.fetch({deviceId:o?.value})}}},ue=C({search:F().optional(),types:g(F()),state:N([`all`,`offline`,`online`]).default(`all`),states:g(x(d)),categories:g(x(P)),enabled:N([`all`,`enabled`,`disabled`]).default(`all`),validation:N([`all`,`valid`,`invalid`]).default(`all`)}),de=C({search:F().optional(),devices:g(F()),categories:g(x(O))}),fe=C({search:F().optional(),channels:g(F()),categories:g(x(M)),permissions:g(x(h)),dataTypes:g(x(T))}),X={search:void 0,devices:[],categories:[]},pe={by:`name`,dir:`asc`},me=(e={})=>{let{deviceId:n}=e,i=_().getStore(W),{firstLoad:a,semaphore:s}=m(i),{filters:c,sort:l,pagination:u,reset:d}=k({key:`${ne}:channels:list`,filters:{schema:de,defaults:X},sort:{defaults:[pe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==X.search||!(0,K.isEqual)(c.value.devices,X.devices)||!(0,K.isEqual)(c.value.categories,X.categories)),p=r(u.value.size||10),h=r(u.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),v=r(l.value.length>0?l.value[0]?.dir??null:null),y=t(()=>B(i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.devices.length===0||c.value.devices.includes(e.device))),[e=>e[g.value]??``],[v.value===`asc`?`asc`:`desc`])),b=t(()=>{let e=(h.value-1)*p.value,t=e+p.value;return y.value.slice(e,t)}),x=async()=>{await i.fetch({deviceId:n})},S=t(()=>s.value.fetching.items.includes(n??`all`)?!0:!a.value.includes(n??`all`)&&s.value.fetching.items.includes(n??`all`)),C=t(()=>a.value.includes(n??`all`)),w=t(()=>i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return o(()=>u.value,e=>{h.value=e.page??1,p.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{u.value.page=e}),o(()=>p.value,e=>{u.value.size=e}),o(()=>v.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:v.value}]}),{channels:y,channelsPaginated:b,totalRows:w,areLoading:S,loaded:C,fetchChannels:x,filters:c,filtersActive:f,paginateSize:p,paginatePage:h,sortBy:g,sortDir:v,resetFilter:d}},he=()=>{let{t:e}=i(),t=b(),n=_().getStore(W),r=e=>n.findById(e);return{remove:async i=>{let a=r(i);if(a===null)throw new q(`Something went wrong, channel can't be loaded`);u.confirm(e(`devicesModule.texts.channels.confirmRemove`,{channel:a.name}),e(`devicesModule.headings.channels.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:a.id}),t.success(e(`devicesModule.messages.channels.removed`,{channel:a.name}))}catch(n){if(n instanceof J&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof J&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channels.notRemoved`,{channel:a.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channels.removeCanceled`,{channel:a.name}))})}}},ge=({id:e})=>{let n=_().getStore(W);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:chip`}})}},_e={air_quality:{category:`air_quality`,constraints:{oneOrMoreOf:[[`aqi`,`level`]]},properties:{aqi:{category:`aqi`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:null,format:[0,500]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`excellent`,`good`,`fair`,`inferior`,`poor`,`unknown`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},air_particulate:{category:`air_particulate`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`pm1`,`pm2_5`,`pm10`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_dioxide:{category:`carbon_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_monoxide:{category:`carbon_monoxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},flow:{category:`flow`,properties:{rate:{category:`rate`,required:!0,permissions:[`ro`],data_type:`float`,unit:`m³/h`,format:[0,65533]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},humidity:{category:`humidity`,properties:{humidity:{category:`humidity`,required:!0,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},illuminance:{category:`illuminance`,properties:{illuminance:{category:`illuminance`,required:!0,permissions:[`ro`],data_type:`float`,unit:`lx`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`bright`,`moderate`,`dusky`,`dark`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},nitrogen_dioxide:{category:`nitrogen_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`annual`,`1_hour`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},ozone:{category:`ozone`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},pressure:{category:`pressure`,properties:{pressure:{category:`pressure`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kPa`,format:[0,32767]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},sulphur_dioxide:{category:`sulphur_dioxide`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!0,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},temperature:{category:`temperature`,properties:{temperature:{category:`temperature`,required:!0,permissions:[`ro`],data_type:`float`,unit:`°C`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},volatile_organic_compounds:{category:`volatile_organic_compounds`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},alarm:{category:`alarm`,properties:{state:{category:`state`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`disarmed`,`armed_home`,`armed_away`,`armed_night`]},alarm_state:{category:`alarm_state`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`pending`,`triggered`,`silenced`]},triggered:{category:`triggered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},siren:{category:`siren`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},fault_description:{category:`fault_description`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},last_event:{category:`last_event`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},contact:{category:`contact`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},gas:{category:`gas`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`normal`,`warning`,`alarm`]},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`ppm`,format:[0,65535]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},leak:{category:`leak`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},lock:{category:`lock`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`locked`,`unlocked`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},motion:{category:`motion`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},occupancy:{category:`occupancy`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},smoke:{category:`smoke`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},cooler:{category:`cooler`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},dehumidifier:{category:`dehumidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`continuous`,`laundry`,`quiet`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`dehumidifying`,`defrosting`]},water_tank_full:{category:`water_tank_full`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},defrost_active:{category:`defrost_active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},door:{category:`door`,properties:{obstruction:{category:`obstruction`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`door`,`garage`]},percentage:{category:`percentage`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,100]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},fan:{category:`fan`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},swing:{category:`swing`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},speed:{category:`speed`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Speed as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`turbo`,`auto`],description:{en:`Speed as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`eco`,`sleep`,`natural`,`turbo`]},direction:{category:`direction`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`clockwise`,`counter_clockwise`]},natural_breeze:{category:`natural_breeze`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},heater:{category:`heater`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]}}},humidifier:{category:`humidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`sleep`,`baby`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`humidifying`]},mist_level:{category:`mist_level`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Mist level as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`],description:{en:`Mist level as discrete levels`}}]},warm_mist:{category:`warm_mist`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},water_tank_empty:{category:`water_tank_empty`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},light:{category:`light`,constraints:{mutuallyExclusiveGroups:[[[`color_red`,`color_green`,`color_blue`],[`hue`,`saturation`]]]},properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},color_red:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_green:{category:`color_green`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_blue:{category:`color_blue`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_white:{category:`color_white`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_temperature:{category:`color_temperature`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`K`,format:[2e3,1e4]},hue:{category:`hue`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`deg`,format:[0,360]},saturation:{category:`saturation`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]}}},outlet:{category:`outlet`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},in_use:{category:`in_use`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},robot_vacuum:{category:`robot_vacuum`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`cleaning`,`vacuuming`,`mopping`,`docking`,`charging`]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`spot`,`manual`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},switcher:{category:`switcher`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},child_lock:{category:`child_lock`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]}}},thermostat:{category:`thermostat`,properties:{locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},valve:{category:`valve`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},type:{category:`type`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`generic`,`irrigation`,`shower_head`,`water_faucet`]},duration:{category:`duration`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`s`,format:[0,3600]},remaining:{category:`remaining`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:`s`,format:[0,3600]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`manual`,`scheduled`]},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},window_covering:{category:`window_covering`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`curtain`,`roller`,`blind`,`venetian_blind`,`vertical_blind`,`shutter`,`outdoor_blind`,`awning`]},command:{category:`command`,required:!0,permissions:[`wo`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},obstruction:{category:`obstruction`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},battery:{category:`battery`,properties:{percentage:{category:`percentage`,required:!0,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Battery as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`critical`,`low`,`medium`,`high`,`full`],description:{en:`Battery as discrete levels`}}]},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`ok`,`low`,`charging`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_energy:{category:`electrical_energy`,properties:{consumption:{category:`consumption`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},average_power:{category:`average_power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`interval_average`},grid_import:{category:`grid_import`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},grid_export:{category:`grid_export`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_generation:{category:`electrical_generation`,properties:{production:{category:`production`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},power:{category:`power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`instantaneous`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_power:{category:`electrical_power`,properties:{power:{category:`power`,required:!0,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e4],measurement_kind:`instantaneous`},voltage:{category:`voltage`,required:!1,permissions:[`ro`],data_type:`float`,unit:`V`,format:[0,500],measurement_kind:`instantaneous`},current:{category:`current`,required:!1,permissions:[`ro`],data_type:`float`,unit:`A`,format:[0,100],measurement_kind:`instantaneous`},frequency:{category:`frequency`,required:!1,permissions:[`ro`],data_type:`float`,unit:`Hz`,format:[40,70],measurement_kind:`instantaneous`},over_current:{category:`over_current`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_voltage:{category:`over_voltage`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_power:{category:`over_power`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},camera:{category:`camera`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`available`,`in_use`,`unavailable`,`offline`,`initializing`,`error`]},source:{category:`source`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},zoom:{category:`zoom`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[1,10]},pan:{category:`pan`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-180,180]},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},infrared:{category:`infrared`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},doorbell:{category:`doorbell`,properties:{event:{category:`event`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`single_press`,`double_press`,`long_press`]},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},media_input:{category:`media_input`,properties:{source:{category:`source`,required:!0,permissions:[`rw`],data_types:[{id:`standard`,data_type:`enum`,unit:null,format:`hdmi1.hdmi2.hdmi3.hdmi4.hdmi5.hdmi6.arc.earc.tv.cable.satellite.antenna.av1.av2.component.vga.dvi.usb.bluetooth.wifi.airplay.cast.dlna.miracast.app_netflix.app_youtube.app_spotify.app_prime_video.app_disney_plus.app_hbo_max.app_apple_tv.app_plex.app_kodi.other`.split(`.`),step:null,description:{en:`Standardized input/source identifier (recommended for UI).`}},{id:`custom`,data_type:`string`,unit:null,format:null,step:null,description:{en:`Integration-specific input/source value (fallback).`}}]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},source_label:{category:`source_label`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},media_playback:{category:`media_playback`,properties:{status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`playing`,`paused`,`stopped`]},track:{category:`track`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},duration:{category:`duration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`s`,format:[0,86400]},position:{category:`position`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`s`,format:[0,86400]},shuffle:{category:`shuffle`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},repeat:{category:`repeat`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`off`,`one`,`all`]},command:{category:`command`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`play`,`pause`,`stop`,`next`,`previous`,`rewind`,`fast_forward`]},artist:{category:`artist`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},album:{category:`album`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},artwork_url:{category:`artwork_url`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},media_type:{category:`media_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`music`,`tvshow`,`movie`,`video`,`playlist`,`podcast`,`audiobook`,`radio`,`unknown`]}}},microphone:{category:`microphone`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]}}},speaker:{category:`speaker`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`stereo`,`mono`,`surround`]},mute:{category:`mute`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},balance:{category:`balance`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-1,1]},bass:{category:`bass`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]},treble:{category:`treble`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]}}},television:{category:`television`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},projector:{category:`projector`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},device_information:{category:`device_information`,properties:{manufacturer:{category:`manufacturer`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},model:{category:`model`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},serial_number:{category:`serial_number`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},firmware_revision:{category:`firmware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},hardware_revision:{category:`hardware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},link_quality:{category:`link_quality`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},connection_type:{category:`connection_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`wired`,`wifi`,`zigbee`,`bluetooth`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`connected`,`disconnected`,`init`,`ready`,`running`,`sleeping`,`stopped`,`lost`,`alert`,`unknown`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},filter:{category:`filter`,properties:{life_remaining:{category:`life_remaining`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`good`,`replace_soon`,`replace_now`]},change_needed:{category:`change_needed`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},reset:{category:`reset`,required:!1,permissions:[`wo`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},button:{category:`button`,properties:{event:{category:`event`,required:!0,permissions:[`ev`],data_type:`enum`,unit:null,format:[`press`,`long_press`,`double_press`]},detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},indicator:{category:`indicator`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`red`,`green`,`blue`,`yellow`,`white`,`off`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},buzzer:{category:`buzzer`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},frequency:{category:`frequency`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`Hz`,format:[100,1e4]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},accelerometer:{category:`accelerometer`,properties:{acceleration_x:{category:`acceleration_x`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_y:{category:`acceleration_y`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_z:{category:`acceleration_z`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},orientation:{category:`orientation`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`landscape`,`portrait`,`landscape_inverted`,`portrait_inverted`,`face_up`,`face_down`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},generic:{category:`generic`,properties:{generic:{category:`generic`,required:!1}}}},ve={generic:{category:`generic`,channels:{generic:{category:`generic`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1}}},air_conditioner:{category:`air_conditioner`,channels:{cooler:{category:`cooler`,required:!0,multiple:!1},fan:{category:`fan`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1}}},air_dehumidifier:{category:`air_dehumidifier`,channels:{dehumidifier:{category:`dehumidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_humidifier:{category:`air_humidifier`,channels:{humidifier:{category:`humidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_purifier:{category:`air_purifier`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},air_quality:{category:`air_quality`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},thermostat:{category:`thermostat`,channels:{temperature:{category:`temperature`,required:!0,multiple:!1},thermostat:{category:`thermostat`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},cooler:{category:`cooler`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},alarm:{category:`alarm`,channels:{alarm:{category:`alarm`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1}}},camera:{category:`camera`,channels:{camera:{category:`camera`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},doorbell:{category:`doorbell`,channels:{doorbell:{category:`doorbell`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},camera:{category:`camera`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},door:{category:`door`,channels:{door:{category:`door`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},lock:{category:`lock`,channels:{lock:{category:`lock`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},fan:{category:`fan`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},heating_unit:{category:`heating_unit`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1}}},water_heater:{category:`water_heater`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1}}},lighting:{category:`lighting`,channels:{light:{category:`light`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1}}},outlet:{category:`outlet`,channels:{outlet:{category:`outlet`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},pump:{category:`pump`,channels:{flow:{category:`flow`,required:!1,multiple:!1},switcher:{category:`switcher`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},sprinkler:{category:`sprinkler`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},switcher:{category:`switcher`,constraints:{oneOrMoreOf:[[`outlet`,`switcher`]],mutuallyExclusiveGroups:[[[`outlet`],[`switcher`]]]},channels:{outlet:{category:`outlet`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},valve:{category:`valve`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},window_covering:{category:`window_covering`,channels:{window_covering:{category:`window_covering`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},media:{category:`media`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},speaker:{category:`speaker`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1}}},television:{category:`television`,channels:{speaker:{category:`speaker`,required:!0,multiple:!1},television:{category:`television`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},projector:{category:`projector`,channels:{projector:{category:`projector`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},av_receiver:{category:`av_receiver`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},media_input:{category:`media_input`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1}}},set_top_box:{category:`set_top_box`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},game_console:{category:`game_console`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},streaming_service:{category:`streaming_service`,channels:{media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},robot_vacuum:{category:`robot_vacuum`,channels:{battery:{category:`battery`,required:!0,multiple:!1},robot_vacuum:{category:`robot_vacuum`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1}}},sensor:{category:`sensor`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},gas:{category:`gas`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},occupancy:{category:`occupancy`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},smoke:{category:`smoke`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},terminal:{category:`terminal`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},button:{category:`button`,required:!1,multiple:!0},indicator:{category:`indicator`,required:!1,multiple:!0},buzzer:{category:`buzzer`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},accelerometer:{category:`accelerometer`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},temperature:{category:`temperature`,required:!1,multiple:!1}}}},ye={[P.generic]:[],[P.air_conditioner]:[O.cooler,O.heater,O.fan,O.temperature,O.humidity,O.electrical_energy,O.electrical_power,O.leak,O.device_information],[P.air_dehumidifier]:[O.cooler,O.fan,O.temperature,O.humidity,O.electrical_energy,O.electrical_power,O.leak,O.device_information],[P.air_humidifier]:[O.humidity,O.switcher,O.temperature,O.fan,O.electrical_energy,O.electrical_power,O.leak,O.device_information],[P.air_purifier]:[O.fan,O.air_particulate,O.carbon_dioxide,O.carbon_monoxide,O.humidity,O.leak,O.nitrogen_dioxide,O.ozone,O.pressure,O.sulphur_dioxide,O.temperature,O.volatile_organic_compounds,O.electrical_energy,O.electrical_power,O.device_information],[P.alarm]:[O.alarm,O.device_information],[P.camera]:[O.camera,O.motion,O.microphone,O.speaker,O.contact,O.light,O.temperature,O.humidity,O.battery,O.device_information],[P.door]:[O.door,O.lock,O.contact,O.motion,O.battery,O.device_information],[P.doorbell]:[O.doorbell,O.camera,O.lock,O.motion,O.microphone,O.speaker,O.contact,O.light,O.battery,O.device_information],[P.fan]:[O.fan,O.electrical_energy,O.electrical_power,O.device_information],[P.heating_unit]:[O.heater,O.temperature,O.humidity,O.electrical_energy,O.electrical_power,O.device_information],[P.lighting]:[O.light,O.illuminance,O.electrical_energy,O.electrical_power,O.device_information],[P.lock]:[O.lock,O.contact,O.motion,O.battery,O.device_information],[P.media]:[O.media_input,O.media_playback,O.microphone,O.speaker,O.device_information],[P.av_receiver]:[O.media_input,O.media_playback,O.speaker,O.device_information],[P.game_console]:[O.media_playback,O.media_input,O.device_information],[P.projector]:[O.projector,O.speaker,O.media_playback,O.media_input,O.device_information],[P.set_top_box]:[O.media_input,O.media_playback,O.device_information],[P.streaming_service]:[O.media_playback,O.device_information],[P.outlet]:[O.outlet,O.electrical_energy,O.electrical_power,O.device_information],[P.pump]:[O.flow,O.switcher,O.leak,O.pressure,O.electrical_energy,O.electrical_power,O.device_information],[P.robot_vacuum]:[O.robot_vacuum,O.electrical_energy,O.electrical_power,O.leak,O.battery,O.device_information],[P.sensor]:[O.air_particulate,O.battery,O.carbon_dioxide,O.carbon_monoxide,O.contact,O.humidity,O.illuminance,O.leak,O.motion,O.nitrogen_dioxide,O.occupancy,O.ozone,O.pressure,O.smoke,O.sulphur_dioxide,O.temperature,O.volatile_organic_compounds,O.device_information],[P.speaker]:[O.speaker,O.media_input,O.media_playback,O.electrical_energy,O.electrical_power,O.device_information],[P.sprinkler]:[O.valve,O.flow,O.pressure,O.leak,O.humidity,O.electrical_energy,O.electrical_power,O.device_information],[P.switcher]:[O.switcher,O.electrical_energy,O.electrical_power,O.device_information],[P.television]:[O.television,O.speaker,O.media_playback,O.media_input,O.device_information],[P.terminal]:[O.button,O.indicator,O.buzzer,O.illuminance,O.accelerometer,O.temperature,O.contact,O.switcher,O.device_information],[P.thermostat]:[O.thermostat,O.cooler,O.heater,O.temperature,O.humidity,O.contact,O.electrical_energy,O.electrical_power,O.device_information],[P.valve]:[O.valve,O.pressure,O.flow,O.leak,O.battery,O.electrical_energy,O.electrical_power,O.device_information],[P.water_heater]:[O.heater,O.temperature,O.leak,O.electrical_energy,O.electrical_power,O.device_information],[P.window_covering]:[O.window_covering,O.battery,O.electrical_energy,O.electrical_power,O.device_information]},be=Object.fromEntries(Object.entries(ve).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=ye[e];return[e,r?[...n].sort((e,t)=>{let n=r.indexOf(e),i=r.indexOf(t);return n===-1&&i===-1?0:n===-1?1:i===-1?-1:n-i}):n]})),Z=Object.fromEntries(Object.entries(ve).map(([e,t])=>[e,{required:Object.values(t.channels).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.channels).filter(e=>!e.required).map(e=>e.category),multiple:Object.values(t.channels).filter(e=>e.multiple).map(e=>e.category)}])),xe=Object.fromEntries(Object.entries(_e).map(([e,t])=>[e,{required:Object.values(t.properties).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.properties).filter(e=>!e.required).map(e=>e.category)}])),Se=(e,t)=>{let n=_e[e];if(!n)return;let r=Object.values(n.properties).find(e=>e.category===t);if(!r)return;let i=r.data_types?.[0];if(i)return{category:r.category,required:r.required,description:i.description??r.description??{en:``},permissions:r.permissions,data_type:i.data_type,unit:i.unit??null,format:i.format??null,invalid:r.invalid,step:i.step??null};if(r.data_type)return{category:r.category,required:r.required,description:r.description??{en:``},permissions:r.permissions,data_type:r.data_type,unit:r.unit??null,format:r.format??null,invalid:r.invalid,step:r.step??null}},Ce=({id:e})=>{let n=_(),r=n.getStore(W),i=n.getStore(H),a=e=>r.findById(e),o=e=>xe[e.category]??null;return{canAddAnotherProperty:t(()=>{let t=a(e);if(t===null)return!0;let{required:n,optional:r}=o(t)??{required:[],optional:[]},s=[...n,...r],c=i.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:t(()=>{let t=a(e);if(t===null)throw new q(`Something went wrong, channel can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},we=C({id:F().uuid().optional(),type:F().trim().nonempty(),device:F().uuid().optional(),category:x(O).default(O.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty(),description:F().trim().transform(e=>e===``?null:e).nullable().optional()}),Te=C({id:F().uuid(),type:F().trim().nonempty(),device:F().uuid(),category:x(O).default(O.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty().optional(),description:F().trim().transform(e=>e===``?null:e).nullable().optional()}),Ee=({type:e})=>{let{getByType:n}=se(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},De=()=>{let e=_().getStore(V),{firstLoad:n,semaphore:r}=m(e);return{devices:t(()=>e.findAll().filter(e=>!e.draft&&!e.hidden)),areLoading:t(()=>r.value.fetching.items),loaded:t(()=>n.value),fetchDevices:async()=>{await e.fetch()}}},Oe=({id:n,type:s,deviceId:c})=>{let l=_(),{element:u}=Ee({type:s}),d=l.getStore(W),{devices:f,fetchDevices:p,areLoading:m}=De(),{t:h}=i(),g=b(),y=S(),x=r(G.NONE),C,w=t(()=>A.device?f.value.find(e=>e.id===A.device)??null:null),T=t(()=>w.value?d.findForDevice(w.value.id).map(e=>e.category):[]),E=t(()=>w.value?Z[w.value.category]??null:null),D=t(()=>E.value===null?[]:Object.values(O).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)||E.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),k=t(()=>f.value.filter(e=>e.type===s).map(e=>({value:e.id,label:e.name}))),A=a({...z(u.value?.schemas?.channelAddFormSchema||we),id:n,type:s,device:c,category:O.generic,name:``,description:``}),j=v(e(A)),M=r(void 0),N=r(!1),P=async()=>{if(M.value.clearValidate(),!await M.value.validate())throw new Y(`Form not valid`);let e=c??A.device;if(!e)throw new Y(`Missing device identifier`);if(!A.category)throw new Y(`Missing data type definition`);let t=(u.value?.schemas?.channelAddFormSchema||we).safeParse(A);if(!t.success)throw y.error(`Schema validation failed with:`,t.error),new Y(`Failed to validate create channel model.`);x.value=G.WORKING;let r=h(`devicesModule.messages.channels.notCreated`,{device:A.name});try{await d.add({id:n,deviceId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw x.value=G.ERROR,C=window.setTimeout(F,2e3),e instanceof J&&e.code===422?g.error(e.message):g.error(r),e}return x.value=G.OK,C=window.setTimeout(F,2e3),g.success(h(`devicesModule.messages.channels.created`,{device:A.name})),`added`},F=()=>{window.clearTimeout(C),x.value=G.NONE};return p().catch(()=>{}),o(A,()=>{N.value=!(0,K.isEqual)(e(A),j)}),o(()=>D.value,e=>{e.length&&e[0]&&(A.category=e[0].value,j.category=e[0].value)},{immediate:!0}),{categoriesOptions:D,devicesOptions:k,model:A,formEl:M,formChanged:N,submit:P,clear:F,formResult:x,loadingDevices:m}},ke=({channel:n,messages:s})=>{let c=_(),{element:l}=Ee({type:n.type}),u=c.getStore(W),{devices:d,fetchDevices:f,areLoading:p}=De(),{t:m}=i(),h=b(),g=S(),y=r(G.NONE),x,C=t(()=>d.value.find(e=>e.id===n.device)??null),w=t(()=>C.value?u.findForDevice(C.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),T=t(()=>C.value?Z[C.value.category]??null:null),E=t(()=>T.value===null?[]:Object.values(O).filter(e=>T.value?.required.includes(e)||T.value?.optional.includes(e)).filter(e=>!w.value.includes(e)||T.value?.multiple?.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channels.${e}`)}))),D=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),k=a(n),A=v(e(k)),j=r(void 0),M=r(!1),N=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?m(`devicesModule.messages.channels.notCreated`,{channel:n.name}):m(`devicesModule.messages.channels.notEdited`,{channel:n.name});if(j.value.clearValidate(),!await j.value.validate())throw new Y(`Form not valid`);let i=(l.value?.schemas?.channelEditFormSchema||Te).safeParse(k);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new Y(`Failed to validate edit channel model.`);y.value=G.WORKING;try{await u.edit({id:n.id,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,deviceId:n.device})}catch(e){throw y.value=G.ERROR,x=window.setTimeout(P,2e3),e instanceof J&&e.code===422?h.error(e.message):h.error(r),e}return y.value=G.OK,x=window.setTimeout(P,2e3),t?(h.success(m(s&&s.success?s.success:`devicesModule.messages.channels.created`,{channel:n.name})),`added`):(h.success(m(s&&s.success?s.success:`devicesModule.messages.channels.edited`,{channel:n.name})),M.value=!1,A=v(e(k)),`saved`)},P=()=>{window.clearTimeout(x),y.value=G.NONE};return f().catch(()=>{}),o(k,()=>{M.value=!(0,K.isEqual)(e(k),A)}),{categoriesOptions:E,devicesOptions:D,model:k,formEl:j,formChanged:M,submit:N,clear:P,formResult:y,loadingDevices:p}},Ae=({channelId:e,id:n})=>{let r=_().getStore(H),{data:i,semaphore:a}=m(r);return{property:t(()=>n===null?null:i.value[n]??null),isLoading:t(()=>a.value.fetching.item.includes(n)?!0:(i.value[n]??null)===null?a.value.fetching.items.includes(e)||a.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(i.value[n]??null)?.draft||await r.get({id:n,channelId:e})}}},je=({channelId:e})=>{let n=_().getStore(H),{firstLoad:r,semaphore:i}=m(n),a=typeof e==`string`?t(()=>e):e;return{properties:t(()=>n.findAll().filter(e=>!a?.value||e.channel===a.value)),areLoading:t(()=>a.value?i.value.fetching.items.includes(a.value)?!0:!r.value.includes(a.value)&&i.value.fetching.items.includes(a.value):!1),loaded:t(()=>a.value?r.value.includes(a.value):!1),fetchProperties:async()=>{a.value&&await n.fetch({channelId:a.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},Me={by:`category`,dir:`asc`},Ne=({channelId:e,key:n=`list`})=>{let i=_().getStore(H),{firstLoad:a,semaphore:s}=m(i),{filters:c,sort:l,pagination:u,reset:d}=k({key:`${ne}:channels-properties:${n}`,filters:{schema:fe,defaults:Q},sort:{defaults:[Me]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Q.search||!(0,K.isEqual)(c.value.channels,Q.channels)||!(0,K.isEqual)(c.value.categories,Q.categories)||!(0,K.isEqual)(c.value.permissions,Q.permissions)||!(0,K.isEqual)(c.value.dataTypes,Q.dataTypes)),p=r(u.value.size||10),h=r(u.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),v=r(l.value.length>0?l.value[0]?.dir??null:null),y=t(()=>B(i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!c.value.search||e.id?.toLowerCase().includes(c.value.search.toLowerCase())||e.name?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.dataTypes.length===0||c.value.dataTypes.includes(e.dataType))&&(c.value.permissions.length===0||e.permissions.some(e=>c.value.permissions.includes(e)))),[e=>e[g.value]??``],[v.value===`asc`?`asc`:`desc`])),b=t(()=>{let e=(h.value-1)*p.value,t=e+p.value;return y.value.slice(e,t)}),x=async()=>{await i.fetch({channelId:e})},S=t(()=>s.value.fetching.items.includes(e)?!0:!a.value.includes(e)&&s.value.fetching.items.includes(e)),C=t(()=>a.value.includes(e)),w=t(()=>i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return o(()=>u.value,e=>{h.value=e.page??1,p.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{u.value.page=e}),o(()=>p.value,e=>{u.value.size=e}),o(()=>v.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:v.value}]}),{properties:y,propertiesPaginated:b,totalRows:w,areLoading:S,loaded:C,fetchProperties:x,filters:c,filtersActive:f,paginateSize:p,paginatePage:h,sortBy:g,sortDir:v,resetFilter:d}},Pe=()=>{let{t:e}=i(),t=b(),n=_().getStore(H);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new q(`Something went wrong, channel property can't be loaded`);u.confirm(e(`devicesModule.texts.channelsProperties.confirmRemove`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}),e(`devicesModule.headings.channelsProperties.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id,channelId:i.channel}),t.success(e(`devicesModule.messages.channelsProperties.removed`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))}catch(n){if(n instanceof J&&n.code===404){let n=e(`devicesModule.messages.channelsProperties.notFound`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}else if(n instanceof J&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channelsProperties.notRemoved`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channelsProperties.removeCanceled`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))})}}},Fe=({id:e})=>{let n=_().getStore(H);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:tune`}})}},Ie=C({id:F().uuid().optional(),type:F().trim().nonempty(),channel:F().uuid().optional(),category:x(M).default(M.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty().nullable(),permissions:g(x(h)),dataType:x(T),format:g(I([F(),I([D(),E()])])).nullable(),invalid:I([F(),D(),A(),E()]),step:I([F(),D()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:A().default(!1),value:I([F(),D(),A(),E()]).optional(),enumValues:g(F()),minValue:I([F(),D()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:I([F(),D()]).transform(e=>e===``?void 0:Number(e)).optional()}),Le=C({id:F().uuid(),type:F().trim().nonempty(),channel:F().uuid(),category:x(M).default(M.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty().nullable().optional(),permissions:g(x(h)),dataType:x(T),format:g(I([F(),I([D(),E()])])).nullable(),invalid:I([F(),D(),A(),E()]),step:I([F(),D()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:A().default(!1),value:I([F(),D(),A(),E()]).optional(),enumValues:g(F()),minValue:I([F(),D()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:I([F(),D()]).transform(e=>e===``?void 0:Number(e)).optional()}),Re=({type:e})=>{let{getByType:n}=oe(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},ze=({id:n,type:s,channelId:c})=>{let l=_(),{element:u}=Re({type:s}),d=l.getStore(H),{channels:f,fetchChannels:p,areLoading:m}=le(),{t:g}=i(),y=b(),x=S(),C=r(G.NONE),w,E=t(()=>F.channel?f.value.find(e=>e.id===F.channel)??null:null),D=t(()=>E.value?d.findForChannel(E.value.id).map(e=>e.category):[]),k=t(()=>E.value?xe[E.value.category]??null:null),A=t(()=>k.value===null?[]:Object.values(M).filter(e=>k.value?.required.includes(e)||k.value?.optional.includes(e)).filter(e=>!D.value.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channelsProperties.${e}`)}))),j=t(()=>f.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(h).map(e=>({value:e,label:g(`devicesModule.permissions.${e}`)})),P=Object.values(T).map(e=>({value:e,label:g(`devicesModule.dataTypes.${e}`)})),F=a({...z(u.value?.schemas?.channelPropertyAddFormSchema||Ie),id:n,type:s,channel:c,category:M.generic,name:``,permissions:[],dataType:T.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),I=v(e(F)),L=r(void 0),R=r(!1),B=async()=>{if(L.value.clearValidate(),!await L.value.validate())throw new Y(`Form not valid`);let e=c??F.channel;if(!e)throw new Y(`Missing channel identifier`);if(F.name===``&&(F.name=null),!F.category)throw new Y(`Missing data type definition`);F.dataType===T.enum?F.format=F.enumValues:[T.char,T.uchar,T.short,T.ushort,T.int,T.uint,T.float].includes(F.dataType)&&(F.format=[typeof F.minValue==`string`&&F.minValue!==``?Number(F.minValue):typeof F.minValue==`number`?F.minValue:null,typeof F.maxValue==`string`&&F.maxValue!==``?Number(F.maxValue):typeof F.maxValue==`number`?F.maxValue:null]),F.enterValue||delete F.value;let t=(u.value?.schemas?.channelPropertyAddFormSchema||Ie).safeParse(F);if(!t.success)throw x.error(`Schema validation failed with:`,t.error),new Y(`Failed to validate create channel property model.`);C.value=G.WORKING;let r=g(`devicesModule.messages.channelsProperties.notCreated`,{device:F.name});try{await d.add({id:n,channelId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw C.value=G.ERROR,w=window.setTimeout(V,2e3),e instanceof J&&e.code===422?y.error(e.message):y.error(r),e}return C.value=G.OK,w=window.setTimeout(V,2e3),y.success(g(`devicesModule.messages.channelsProperties.created`,{device:F.name})),`added`},V=()=>{window.clearTimeout(w),C.value=G.NONE};return p().catch(()=>{}),o(F,()=>{R.value=!(0,K.isEqual)(e(F),I)}),o(()=>F.category,t=>{let n=Se(E.value?.category??O.generic,t);n&&(I.permissions=n.permissions,I.dataType=n.data_type,F.permissions=n.permissions,F.dataType=n.data_type,n.invalid!==void 0&&(I.invalid=n.invalid,F.invalid=n.invalid),n.step!==void 0&&(I.step=n.step,F.step=n.step),I.dataType===T.enum?(I.enumValues=n.format??[],I.minValue=void 0,I.maxValue=void 0,F.enumValues=n.format??[],F.minValue=void 0,F.maxValue=void 0):[T.char,T.uchar,T.short,T.ushort,T.int,T.uint,T.float].includes(F.dataType)?(I.enumValues=[],I.minValue=n.format?.[0],I.maxValue=n.format?.[1],F.enumValues=[],F.minValue=n.format?.[0],F.maxValue=n.format?.[1]):(I.enumValues=[],I.minValue=void 0,I.maxValue=void 0,F.enumValues=[],F.minValue=void 0,F.maxValue=void 0),R.value=!(0,K.isEqual)(e(F),I))},{immediate:!0}),o(()=>A.value,e=>{e.length&&e[0]&&(F.category=e[0].value,I.category=e[0].value)},{immediate:!0}),{categoriesOptions:A,channelsOptions:j,permissionsOptions:N,dataTypesOptions:P,model:F,formEl:L,formChanged:R,submit:B,clear:V,formResult:C,loadingChannels:m}},Be=({property:n,messages:s})=>{let c=_(),{element:l}=Re({type:n.type}),u=c.getStore(H),{channels:d,fetchChannels:f,areLoading:p}=le(),{t:m}=i(),g=b(),y=S(),x=r(G.NONE),C,w=[],E,D;n.dataType===T.enum?w=n.format?n.format.map(e=>e?.toString()||``):[]:[T.char,T.uchar,T.short,T.ushort,T.int,T.uint,T.float].includes(n.dataType)&&Array.isArray(n.format)&&n.format.length===2&&(E=n.format[0],D=n.format[1]);let O=t(()=>d.value.find(e=>e.id===n.channel)??null),k=t(()=>O.value?u.findForChannel(O.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),A=t(()=>O.value?xe[O.value.category]??null:null),j=t(()=>A.value===null?[]:Object.values(M).filter(e=>A.value?.required.includes(e)||A.value?.optional.includes(e)).filter(e=>!k.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),N=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),P=Object.values(h).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),F=Object.values(T).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),I=a({...n,format:e(n.format),value:n.value?.value??null,enumValues:w,minValue:E,maxValue:D,enterValue:!1}),L=v(e(I)),R=r(void 0),z=r(!1),B=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)});if(R.value.clearValidate(),!await R.value.validate())throw new Y(`Form not valid`);I.name===``&&(I.name=null),n.dataType===T.enum?I.format=I.enumValues:[T.char,T.uchar,T.short,T.ushort,T.int,T.uint,T.float].includes(n.dataType)&&(I.format=[I.minValue??null,I.maxValue??null]),I.enterValue||delete I.value;let i=(l.value?.schemas?.channelPropertyEditFormSchema||Le).safeParse(I);if(!i.success)throw y.error(`Schema validation failed with:`,i.error),new Y(`Failed to validate edit channel property model.`);x.value=G.WORKING;try{await u.edit({id:n.id,channelId:n.channel,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,channelId:n.channel})}catch(e){throw x.value=G.ERROR,C=window.setTimeout(V,2e3),e instanceof J&&e.code===422?g.error(e.message):g.error(r),e}return x.value=G.OK,C=window.setTimeout(V,2e3),t?(g.success(m(s&&s.success?s.success:`devicesModule.messages.channelsProperties.created`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)})),`added`):(g.success(m(s&&s.success?s.success:`devicesModule.messages.channelsProperties.edited`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)})),z.value=!1,L=v(e(I)),`saved`)},V=()=>{window.clearTimeout(C),x.value=G.NONE};return f().catch(()=>{}),o(I,()=>{z.value=!(0,K.isEqual)(e(I),L)}),{categoriesOptions:j,channelsOptions:N,permissionsOptions:P,dataTypesOptions:F,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:x,loadingChannels:p}},Ve=({id:e})=>{let n=_().getStore(V),{data:r,semaphore:i}=m(n);return{device:t(()=>e===null?null:r.value[e]??null),isLoading:t(()=>i.value.fetching.item.includes(e)?!0:(r.value[e]??null)===null&&i.value.fetching.items),fetchDevice:async()=>{(r.value[e]??null)?.draft||await n.get({id:e})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},He={by:`name`,dir:`asc`},Ue=()=>{let e=_(),n=e.getStore(V),i=e.getStore(U),{firstLoad:a,semaphore:s}=m(n),{filters:c,sort:l,pagination:u,reset:p}=k({key:`${ne}:devices:list`,filters:{schema:ue,defaults:$},sort:{defaults:[He]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),h=t(()=>c.value.search!==$.search||!(0,K.isEqual)(c.value.types,$.types)||c.value.state!==$.state||!(0,K.isEqual)(c.value.states,$.states)||!(0,K.isEqual)(c.value.categories,$.categories)||!(0,K.isEqual)(c.value.enabled,$.enabled)||c.value.validation!==$.validation),g=r(u.value.size||10),v=r(u.value.page||1),y=r(l.value.length>0?l.value[0]?.by:void 0),b=r(l.value.length>0?l.value[0]?.dir??null:null),x=r(!1),S=e=>i.findById(e)?.isValid??null,C=t(()=>B(n.findAll().filter(e=>!e.draft&&(x.value||!e.hidden)&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.types.length===0||c.value.types.includes(e.type))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.enabled===`all`||c.value.enabled===`enabled`&&e.enabled||c.value.enabled===`disabled`&&!e.enabled)&&(c.value.states.length===0||c.value.states.includes(e.status?.status??d.unknown))&&(c.value.state===`all`||c.value.state===`online`&&[d.ready,d.connected,d.running].includes(e.status.status)||c.value.state===`offline`&&[d.disconnected,d.stopped,d.lost,d.unknown].includes(e.status.status))&&(c.value.validation===`all`||c.value.validation===`valid`&&S(e.id)===!0||c.value.validation===`invalid`&&S(e.id)===!1)),[e=>y.value===`state`?e.status?.status??d.unknown:e[y.value]??``],[b.value===`asc`?`asc`:`desc`])),w=t(()=>{let e=(v.value-1)*g.value,t=e+g.value;return C.value.slice(e,t)}),T=async()=>{await n.fetch({hidden:x.value?f.all:f.false})},E=t(()=>s.value.fetching.items||!a.value),D=t(()=>a.value),O=t(()=>n.findAll().filter(e=>!e.draft&&(x.value||!e.hidden)).length);return o(()=>u.value,e=>{v.value=e.page??1,g.value=e.size??10},{deep:!0}),o(()=>v.value,e=>{u.value.page=e}),o(()=>g.value,e=>{u.value.size=e}),o(()=>b.value,e=>{y.value===void 0||e===null?l.value=[]:l.value=[{by:y.value,dir:e}]}),o(()=>y.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:b.value}]}),{devices:C,devicesPaginated:w,totalRows:O,areLoading:E,loaded:D,fetchDevices:T,filters:c,filtersActive:h,paginateSize:g,paginatePage:v,sortBy:y,sortDir:b,resetFilter:p,showHidden:x}},We=()=>{let{t:e}=i(),t=b(),n=_().getStore(V);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new q(`Something went wrong, device can't be loaded`);u.confirm(e(`devicesModule.texts.devices.confirmRemove`,{device:i.name}),e(`devicesModule.headings.devices.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id}),t.success(e(`devicesModule.messages.devices.removed`,{device:i.name}))}catch(n){if(n instanceof J&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof J&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.devices.notRemoved`,{device:i.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.devices.removeCanceled`,{device:i.name}))})},bulkRemove:async r=>{if(r.length!==0){try{await u.confirm(e(`devicesModule.texts.devices.confirmBulkRemove`,{count:r.length}),e(`devicesModule.headings.devices.bulkRemove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:r.length}))}}},bulkEnable:async r=>{if(r.length!==0){try{await u.confirm(e(`devicesModule.texts.devices.confirmBulkEnable`,{count:r.length}),e(`devicesModule.headings.devices.bulkEnable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`info`})}catch{t.info(e(`devicesModule.messages.devices.bulkEnableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!0});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkEnabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:r.length}))}}},bulkDisable:async r=>{if(r.length!==0){try{await u.confirm(e(`devicesModule.texts.devices.confirmBulkDisable`,{count:r.length}),e(`devicesModule.headings.devices.bulkDisable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`})}catch{t.info(e(`devicesModule.messages.devices.bulkDisableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!1});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkDisabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:r.length}))}}}}},Ge=({id:e})=>{let n=_().getStore(V);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:devices`}})}},Ke=({id:e})=>{let n=_(),r=n.getStore(V),i=n.getStore(W),a=e=>r.findById(e),o=e=>Z[e.category]??null;return{canAddAnotherChannel:t(()=>{let t=a(e);if(t===null)return!0;let{required:n,optional:r,multiple:s}=o(t)??{required:[],optional:[]},c=[...n,...r],l=i.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:t(()=>{let t=a(e);if(t===null)throw new q(`Something went wrong, device can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},qe=C({id:F().uuid().optional(),type:F().trim().nonempty(),category:x(P).default(P.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty(),description:F().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:A().default(!0).optional()}),Je=C({id:F().uuid(),type:F().trim().nonempty(),category:x(P).default(P.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty().optional(),description:F().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:A().optional(),roomId:F().uuid().nullable().optional()}),Ye=({type:e})=>{let{getByType:n}=re(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Xe=({id:t,type:n})=>{let s=_(),{element:c}=Ye({type:n}),l=s.getStore(V),{t:u}=i(),d=b(),f=S(),p=r(G.NONE),m,h=Object.values(P).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=a({...z(c.value?.schemas?.deviceAddFormSchema||qe),id:t,type:n,category:P.generic,name:``,description:``}),y=v(e(g)),x=r(void 0),C=r(!1),w=async()=>{if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let e=(c.value?.schemas?.deviceAddFormSchema||qe).safeParse(g);if(!e.success)throw f.error(`Schema validation failed with:`,e.error),new Y(`Failed to validate create device model.`);p.value=G.WORKING;let r=u(`devicesModule.messages.devices.notCreated`,{device:g.name});try{await l.add({id:t,draft:!1,data:{...e.data,type:n}})}catch(e){throw p.value=G.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(r),e}return p.value=G.OK,m=window.setTimeout(T,2e3),d.success(u(`devicesModule.messages.devices.created`,{device:g.name})),`added`},T=()=>{window.clearTimeout(m),p.value=G.NONE};return o(g,()=>{C.value=!(0,K.isEqual)(e(g),y)}),{categoriesOptions:h,model:g,formEl:x,formChanged:C,submit:w,clear:T,formResult:p}},Ze=({device:t,messages:n})=>{let s=_(),{element:c}=Ye({type:t.type}),l=s.getStore(V),{t:u}=i(),d=b(),f=S(),p=r(G.NONE),m,h=Object.values(P).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=a(t),y=v(e(g)),x=r(void 0),C=r(!1),w=async()=>{let r=t.draft,i=n&&n.error?n.error:t.draft?u(`devicesModule.messages.devices.notCreated`,{device:t.name}):u(`devicesModule.messages.devices.notEdited`,{device:t.name});if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let a=(c.value?.schemas?.deviceEditFormSchema||Je).safeParse(g);if(!a.success)throw f.error(`Schema validation failed with:`,a.error),new Y(`Failed to validate edit device model.`);let o={...a.data};(0,K.isEqual)(o.roomId,y.roomId)&&delete o.roomId,p.value=G.WORKING;try{await l.edit({id:t.id,data:{...o,type:t.type}}),t.draft&&await l.save({id:t.id})}catch(e){throw p.value=G.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(i),e}return p.value=G.OK,m=window.setTimeout(T,2e3),r?(d.success(u(n&&n.success?n.success:`devicesModule.messages.devices.created`,{device:t.name})),`added`):(d.success(u(n&&n.success?n.success:`devicesModule.messages.devices.edited`,{device:t.name})),C.value=!1,y=v(e(g)),`saved`)},T=()=>{window.clearTimeout(m),p.value=G.NONE};return o(g,()=>{C.value=!(0,K.isEqual)(e(g),y)}),{categoriesOptions:h,model:g,formEl:x,formChanged:C,submit:w,clear:T,formResult:p}},Qe=()=>{let e=_().getStore(U),{data:n,semaphore:r,firstLoad:i}=m(e);return{validation:t(()=>n.value),summary:t(()=>n.value?.summary??null),invalidDevices:t(()=>n.value?n.value.devices.filter(e=>!e.isValid):[]),isLoading:t(()=>r.value.fetching.items),isLoaded:t(()=>i.value),fetchValidation:async()=>{await e.fetch()},findById:t=>e.findById(t),isDeviceValid:t=>{let n=e.findById(t);return n?n.isValid:null},getDeviceIssueCount:t=>{let n=e.findById(t);return n?n.issues.length:0}}},$e=({id:e})=>{let n=_().getStore(U),{semaphore:r}=m(n);return{validation:t(()=>n.findById(e)),isValid:t(()=>{let t=n.findById(e);return t?t.isValid:null}),issues:t(()=>{let t=n.findById(e);return t?t.issues:[]}),errorCount:t(()=>{let t=n.findById(e);return t?t.issues.filter(e=>e.severity===`error`).length:0}),warningCount:t(()=>{let t=n.findById(e);return t?t.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:t(()=>r.value.fetching.item.includes(e)),fetchValidation:async()=>{await n.get({id:e})}}},et=300,tt=1e4,nt=({id:e})=>{let i=_(),a=i.getStore(V),s=i.getStore(W),c=i.getStore(H),{data:l,semaphore:u}=m(a),{data:d,semaphore:f,firstLoad:p}=m(s),{semaphore:g,firstLoad:v}=m(c),{sendCommand:y}=w(),b={},x={},S={},C=r({}),T=r({}),E=t(()=>e===null?null:l.value[e]??null),D=t(()=>Object.values(d.value).filter(t=>t.device===e&&t.category!==O.device_information)),k=t(()=>D.value.filter(e=>c.findForChannel(e.id).some(e=>e.permissions.includes(h.rw)||e.permissions.includes(h.wo)))),A=t(()=>k.value.length>0),j=e=>c.findForChannel(e),M=e=>e.permissions.includes(h.rw)||e.permissions.includes(h.wo),N=e=>{let t=C.value[e];return t===void 0?c.findById(e)?.value?.value??null:t},P=e=>T.value[e]??!1,F=(e,t)=>{if(t!==void 0){let n=C.value[e];if(n!==t&&String(n)!==String(t))return}delete C.value[e],S[e]&&(clearTimeout(S[e]),delete S[e])},I=(e,t)=>{S[e]&&clearTimeout(S[e]),S[e]=setTimeout(()=>{let n=C.value[e];(n===t||String(n)===String(t))&&delete C.value[e],delete S[e]},tt)},L=async(t,n,r)=>c.findById(n)?(b[n]&&(clearTimeout(b[n]),delete b[n],x[n]&&(x[n](!1),delete x[n])),C.value[n]=r,new Promise(i=>{x[n]=i;let a=setTimeout(async()=>{delete x[n],T.value[n]=!0;try{await y(te.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:e,channel:t,property:n,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(I(n,r),i(!0)):(F(n,r),i(!1))}catch{F(n,r),i(!1)}finally{T.value[n]=!1,b[n]===a&&delete b[n]}},et);b[n]=a})):!1,R=async()=>{(e in l.value?l.value[e]:null)?.draft||await a.get({id:e})},z=async()=>{await s.fetch({deviceId:e})},B=async()=>{let t=Object.values(d.value).filter(t=>t.device===e);for(let e of t)await c.fetch({channelId:e.id})},ee=t(()=>{if(u.value.fetching.item.includes(e)||f.value.fetching.items.includes(e))return!0;for(let e of D.value)if(g.value.fetching.items.includes(e.id))return!0;return!1}),U=t(()=>p.value.includes(e)),G=t(()=>{if(!U.value)return!1;for(let e of D.value)if(!v.value.includes(e.id))return!1;return!0});return o(()=>{let e={};for(let t of Object.keys(C.value)){let n=c.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(C.value)){let r=e[t];(r===n||String(r)===String(n))&&F(t)}},{deep:!0}),n(()=>{for(let e of Object.keys(b))clearTimeout(b[e]),delete b[e],x[e]&&(x[e](!1),delete x[e]);for(let e of Object.keys(S))clearTimeout(S[e]),delete S[e]}),{device:E,channels:D,controllableChannels:k,hasControllableProperties:A,isLoading:ee,areChannelsLoaded:U,arePropertiesLoaded:G,fetchDevice:R,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:j,isPropertyWritable:M,getPropertyValue:N,isPropertyLoading:P,setPropertyValue:L}},rt=({deviceId:e})=>{let n=_().getStore(ee),{firstLoad:r,semaphore:i}=m(n);return{controls:t(()=>n.findForDevice(e)),areLoading:t(()=>i.value.fetching.items.includes(e)),loaded:t(()=>r.value.includes(e)),fetchControls:async()=>n.fetch({deviceId:e})}},it=e=>{let n=j(),i=S(),a=r({}),u=r(!1),d=r(!1),f=r(!1),m=r(void 0),h=r(!1),g=null,_=0,v=t(()=>Object.values(a.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),y=t(()=>{let e=[p.warn,p.error,p.fatal,p.fail];return v.value.filter(t=>e.includes(t.type))}),b=t(()=>y.value.length),x=t(()=>b.value>0),C=async()=>{let t=s(e.deviceId);g=t,_++;let r=_;d.value=!0;try{let{data:e,error:o}=await n.client.GET(`/${c}/${ie}/logs`,{params:{query:{resource:t,limit:50}}});if(g!==t||_!==r)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ae(e);return[t.id,t]}));a.value=t,f.value=!0,u.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else o&&i.error(`Failed to fetch device logs:`,o)}catch(e){g===t&&_===r&&i.error(`Error fetching device logs:`,e)}finally{g===t&&_===r&&(d.value=!1)}},w=async()=>{if(d.value||!u.value||!m.value)return;let t=s(e.deviceId),r=m.value,o=_;d.value=!0;try{let{data:e,error:s}=await n.client.GET(`/${c}/${ie}/logs`,{params:{query:{resource:t,after_id:r,limit:50}}});if(g!==t||_!==o)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ae(e);return[t.id,t]}));a.value={...a.value,...t},u.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else s&&i.error(`Failed to load more device logs:`,s)}catch(e){g===t&&_===o&&i.error(`Error loading more device logs:`,e)}finally{g===t&&_===o&&(d.value=!1)}},T=async()=>{a.value={},m.value=void 0,u.value=!1,f.value=!1,await C()},E=null;return o(()=>h.value,e=>{E&&=(clearInterval(E),null),e&&(E=setInterval(()=>{d.value||C()},3e3))}),l(()=>{E&&=(clearInterval(E),null)}),o(()=>s(e.deviceId),()=>{T()}),{logs:v,alertLogs:y,alertCount:b,hasAlerts:x,hasMore:u,isLoading:d,loaded:f,live:h,fetchLogs:C,loadMoreLogs:w,refreshLogs:T}};export{Z as A,se as B,je as C,De as D,Oe as E,ge as F,J as H,he as I,me as L,Se as M,ve as N,Ce as O,_e as P,le as R,Ne as S,ke as T,q as U,oe as V,Y as W,ze as _,Qe as a,Fe as b,Ye as c,Ke as d,Ge as f,Be as g,Ve as h,$e as i,be as j,xe as k,qe as l,Ue as m,rt as n,Ze as o,We as p,nt as r,Xe as s,it as t,Je as u,Ie as v,Ae as w,Pe as x,Le as y,ce as z};
|
|
1
|
+
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o,ki as s,n as c,yi as l}from"./icon-with-child-CgZMNB3F.js";import{Dr as u,Fn as d,On as f,Xn as p,aa as m,an as h,at as g,b as _,c as v,d as y,f as b,ft as x,g as S,ht as C,i as w,in as T,it as E,mt as D,nn as O,o as k,ot as A,p as j,rn as M,rt as N,tn as P,vt as F,yt as I}from"./common-CEAYa_VX.js";import{r as L}from"./config-CIAUSdP7.js";import{r as R}from"./usePlugins-BAUrRkxK.js";import{t as z}from"./schemas.utils-DPM2Btj1.js";import{t as B}from"./dist-DJgPCOr0.js";import{a as V,i as ee,n as H,o as U,r as W}from"./keys-DghNVBR5.js";import{a as G,i as te,n as ne}from"./devices.constants-HX5whDWr.js";import{t as re}from"./useDevicesPlugins-IYuPoZmZ.js";import{s as ie}from"./system.constants-BvSIFqdm.js";import{n as ae}from"./logs-entries.transformers-CZw7f53p.js";var K=y(),q=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},J=class extends q{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},Y=class extends q{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},oe=()=>{let e=R(),{enabled:n}=L(),r=[`channelPropertyAddForm`,`channelPropertyEditForm`],i=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>B(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},se=()=>{let e=R(),{enabled:n}=L(),r=[`channelAddForm`,`channelEditForm`],i=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`devices-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>B(a.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},ce=({id:e})=>{let n=_().getStore(W),{data:r,semaphore:i}=m(n);return{channel:t(()=>e===null?null:r.value[e]??null),isLoading:t(()=>i.value.fetching.item.includes(e)?!0:(r.value[e]??null)===null&&i.value.fetching.items.includes(`all`)),fetchChannel:async()=>{(r.value[e]??null)?.draft||await n.get({id:e})}}},le=(e={})=>{let{deviceId:n}=e,r=_().getStore(W),{firstLoad:i,semaphore:a}=m(r),o=n===void 0?void 0:typeof n==`string`?t(()=>n):n;return{channels:t(()=>r.findAll().filter(e=>!o?.value||e.device===o.value)),areLoading:t(()=>a.value.fetching.items.includes(o?.value??`all`)?!0:!i.value.includes(o?.value??`all`)&&a.value.fetching.items.includes(o?.value??`all`)),loaded:t(()=>i.value.includes(o?.value??`all`)),fetchChannels:async()=>{await r.fetch({deviceId:o?.value})}}},ue=C({search:F().optional(),types:g(F()),state:N([`all`,`offline`,`online`]).default(`all`),states:g(x(d)),categories:g(x(P)),enabled:N([`all`,`enabled`,`disabled`]).default(`all`),validation:N([`all`,`valid`,`invalid`]).default(`all`)}),de=C({search:F().optional(),devices:g(F()),categories:g(x(O))}),fe=C({search:F().optional(),channels:g(F()),categories:g(x(M)),permissions:g(x(h)),dataTypes:g(x(T))}),X={search:void 0,devices:[],categories:[]},pe={by:`name`,dir:`asc`},me=(e={})=>{let{deviceId:n}=e,i=_().getStore(W),{firstLoad:a,semaphore:s}=m(i),{filters:c,sort:l,pagination:u,reset:d}=k({key:`${ne}:channels:list`,filters:{schema:de,defaults:X},sort:{defaults:[pe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==X.search||!(0,K.isEqual)(c.value.devices,X.devices)||!(0,K.isEqual)(c.value.categories,X.categories)),p=r(u.value.size||10),h=r(u.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),v=r(l.value.length>0?l.value[0]?.dir??null:null),y=t(()=>B(i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.devices.length===0||c.value.devices.includes(e.device))),[e=>e[g.value]??``],[v.value===`asc`?`asc`:`desc`])),b=t(()=>{let e=(h.value-1)*p.value,t=e+p.value;return y.value.slice(e,t)}),x=async()=>{await i.fetch({deviceId:n})},S=t(()=>s.value.fetching.items.includes(n??`all`)?!0:!a.value.includes(n??`all`)&&s.value.fetching.items.includes(n??`all`)),C=t(()=>a.value.includes(n??`all`)),w=t(()=>i.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return o(()=>u.value,e=>{h.value=e.page??1,p.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{u.value.page=e}),o(()=>p.value,e=>{u.value.size=e}),o(()=>v.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:v.value}]}),{channels:y,channelsPaginated:b,totalRows:w,areLoading:S,loaded:C,fetchChannels:x,filters:c,filtersActive:f,paginateSize:p,paginatePage:h,sortBy:g,sortDir:v,resetFilter:d}},he=()=>{let{t:e}=i(),t=b(),n=_().getStore(W),r=e=>n.findById(e);return{remove:async i=>{let a=r(i);if(a===null)throw new q(`Something went wrong, channel can't be loaded`);u.confirm(e(`devicesModule.texts.channels.confirmRemove`,{channel:a.name}),e(`devicesModule.headings.channels.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:a.id}),t.success(e(`devicesModule.messages.channels.removed`,{channel:a.name}))}catch(n){if(n instanceof J&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof J&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channels.notRemoved`,{channel:a.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channels.removeCanceled`,{channel:a.name}))})}}},ge=({id:e})=>{let n=_().getStore(W);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:chip`}})}},_e={air_quality:{category:`air_quality`,constraints:{oneOrMoreOf:[[`aqi`,`level`]]},properties:{aqi:{category:`aqi`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:null,format:[0,500]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`excellent`,`good`,`fair`,`inferior`,`poor`,`unknown`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},air_particulate:{category:`air_particulate`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`pm1`,`pm2_5`,`pm10`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_dioxide:{category:`carbon_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,1e5]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},carbon_monoxide:{category:`carbon_monoxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},peak_level:{category:`peak_level`,required:!1,permissions:[`ro`],data_type:`float`,unit:`ppm`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},flow:{category:`flow`,properties:{rate:{category:`rate`,required:!0,permissions:[`ro`],data_type:`float`,unit:`m³/h`,format:[0,65533]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},humidity:{category:`humidity`,properties:{humidity:{category:`humidity`,required:!0,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},illuminance:{category:`illuminance`,properties:{illuminance:{category:`illuminance`,required:!0,permissions:[`ro`],data_type:`float`,unit:`lx`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`bright`,`moderate`,`dusky`,`dark`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},nitrogen_dioxide:{category:`nitrogen_dioxide`,constraints:{oneOrMoreOf:[[`detected`,`concentration`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`annual`,`1_hour`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},ozone:{category:`ozone`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},pressure:{category:`pressure`,properties:{pressure:{category:`pressure`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kPa`,format:[0,32767]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},sulphur_dioxide:{category:`sulphur_dioxide`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!0,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e5]},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},temperature:{category:`temperature`,properties:{temperature:{category:`temperature`,required:!0,permissions:[`ro`],data_type:`float`,unit:`°C`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},volatile_organic_compounds:{category:`volatile_organic_compounds`,constraints:{oneOrMoreOf:[[`detected`,`concentration`,`level`]],oneOf:[[`concentration`,`level`]]},properties:{detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`float`,unit:`µg/m³`,format:[0,1e3]},level:{category:`level`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},alarm:{category:`alarm`,properties:{state:{category:`state`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`disarmed`,`armed_home`,`armed_away`,`armed_night`]},alarm_state:{category:`alarm_state`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`pending`,`triggered`,`silenced`]},triggered:{category:`triggered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},siren:{category:`siren`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},fault_description:{category:`fault_description`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},last_event:{category:`last_event`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},contact:{category:`contact`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},gas:{category:`gas`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`normal`,`warning`,`alarm`]},concentration:{category:`concentration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`ppm`,format:[0,65535]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},leak:{category:`leak`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},level:{category:`level`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`low`,`medium`,`high`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},lock:{category:`lock`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`locked`,`unlocked`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},motion:{category:`motion`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},occupancy:{category:`occupancy`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},distance:{category:`distance`,required:!1,permissions:[`ro`],data_type:`float`,unit:`m`,format:[0,100]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},smoke:{category:`smoke`,properties:{detected:{category:`detected`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},cooler:{category:`cooler`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},dehumidifier:{category:`dehumidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`continuous`,`laundry`,`quiet`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`dehumidifying`,`defrosting`]},water_tank_full:{category:`water_tank_full`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},defrost_active:{category:`defrost_active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},door:{category:`door`,properties:{obstruction:{category:`obstruction`,required:!0,permissions:[`ro`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`door`,`garage`]},percentage:{category:`percentage`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,100]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},fan:{category:`fan`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},swing:{category:`swing`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},speed:{category:`speed`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Speed as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`turbo`,`auto`],description:{en:`Speed as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`eco`,`sleep`,`natural`,`turbo`]},direction:{category:`direction`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`clockwise`,`counter_clockwise`]},natural_breeze:{category:`natural_breeze`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},heater:{category:`heater`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},temperature:{category:`temperature`,required:!0,permissions:[`rw`],data_type:`float`,unit:`°C`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]}}},humidifier:{category:`humidifier`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},humidity:{category:`humidity`,required:!0,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`manual`,`sleep`,`baby`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`humidifying`]},mist_level:{category:`mist_level`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Mist level as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`],description:{en:`Mist level as discrete levels`}}]},warm_mist:{category:`warm_mist`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},water_tank_empty:{category:`water_tank_empty`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},water_tank_level:{category:`water_tank_level`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]},locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},light:{category:`light`,constraints:{mutuallyExclusiveGroups:[[[`color_red`,`color_green`,`color_blue`],[`hue`,`saturation`]]]},properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},color_red:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_green:{category:`color_green`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_blue:{category:`color_blue`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_white:{category:`color_white`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color_temperature:{category:`color_temperature`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`K`,format:[2e3,1e4]},hue:{category:`hue`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`deg`,format:[0,360]},saturation:{category:`saturation`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:`%`,format:[0,100]}}},outlet:{category:`outlet`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},in_use:{category:`in_use`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},robot_vacuum:{category:`robot_vacuum`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`idle`,`cleaning`,`vacuuming`,`mopping`,`docking`,`charging`]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`auto`,`spot`,`manual`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},switcher:{category:`switcher`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},child_lock:{category:`child_lock`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},timer:{category:`timer`,required:!1,permissions:[`rw`],data_types:[{id:`duration`,data_type:`ushort`,unit:`s`,format:[0,86400],step:60,description:{en:`Timer duration in seconds (0-86400)`}},{id:`preset`,data_type:`enum`,format:[`off`,`30m`,`1h`,`2h`,`4h`,`8h`,`12h`],description:{en:`Preset timer intervals`}}]}}},thermostat:{category:`thermostat`,properties:{locked:{category:`locked`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null}}},valve:{category:`valve`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},type:{category:`type`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`generic`,`irrigation`,`shower_head`,`water_faucet`]},duration:{category:`duration`,required:!1,permissions:[`rw`],data_type:`ushort`,unit:`s`,format:[0,3600]},remaining:{category:`remaining`,required:!1,permissions:[`ro`],data_type:`ushort`,unit:`s`,format:[0,3600]},mode:{category:`mode`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`manual`,`scheduled`]},position:{category:`position`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},window_covering:{category:`window_covering`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`opened`,`closed`,`opening`,`closing`,`stopped`]},position:{category:`position`,required:!0,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Position as percentage (0-100%)`}},{id:`state`,data_type:`enum`,format:[`closed`,`quarter`,`half`,`three_quarter`,`open`],description:{en:`Position as discrete states`}}]},type:{category:`type`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`curtain`,`roller`,`blind`,`venetian_blind`,`vertical_blind`,`shutter`,`outdoor_blind`,`awning`]},command:{category:`command`,required:!0,permissions:[`wo`],data_type:`enum`,unit:null,format:[`open`,`close`,`stop`]},obstruction:{category:`obstruction`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},battery:{category:`battery`,properties:{percentage:{category:`percentage`,required:!0,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Battery as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`critical`,`low`,`medium`,`high`,`full`],description:{en:`Battery as discrete levels`}}]},status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`ok`,`low`,`charging`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_energy:{category:`electrical_energy`,properties:{consumption:{category:`consumption`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},average_power:{category:`average_power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`interval_average`},grid_import:{category:`grid_import`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},grid_export:{category:`grid_export`,required:!1,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_generation:{category:`electrical_generation`,properties:{production:{category:`production`,required:!0,permissions:[`ro`],data_type:`float`,unit:`kWh`,format:[0,null],measurement_kind:`cumulative`,reset_behavior:`unknown`},power:{category:`power`,required:!1,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e5],measurement_kind:`instantaneous`},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},electrical_power:{category:`electrical_power`,properties:{power:{category:`power`,required:!0,permissions:[`ro`],data_type:`float`,unit:`W`,format:[0,1e4],measurement_kind:`instantaneous`},voltage:{category:`voltage`,required:!1,permissions:[`ro`],data_type:`float`,unit:`V`,format:[0,500],measurement_kind:`instantaneous`},current:{category:`current`,required:!1,permissions:[`ro`],data_type:`float`,unit:`A`,format:[0,100],measurement_kind:`instantaneous`},frequency:{category:`frequency`,required:!1,permissions:[`ro`],data_type:`float`,unit:`Hz`,format:[40,70],measurement_kind:`instantaneous`},over_current:{category:`over_current`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_voltage:{category:`over_voltage`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},over_power:{category:`over_power`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},camera:{category:`camera`,properties:{status:{category:`status`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`available`,`in_use`,`unavailable`,`offline`,`initializing`,`error`]},source:{category:`source`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},zoom:{category:`zoom`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[1,10]},pan:{category:`pan`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-180,180]},tilt:{category:`tilt`,required:!1,permissions:[`rw`],data_type:`float`,unit:`°`,format:[-90,90]},infrared:{category:`infrared`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},doorbell:{category:`doorbell`,properties:{event:{category:`event`,required:!0,permissions:[`ro`],data_type:`enum`,unit:null,format:[`single_press`,`double_press`,`long_press`]},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},tampered:{category:`tampered`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},media_input:{category:`media_input`,properties:{source:{category:`source`,required:!0,permissions:[`rw`],data_types:[{id:`standard`,data_type:`enum`,unit:null,format:`hdmi1.hdmi2.hdmi3.hdmi4.hdmi5.hdmi6.arc.earc.tv.cable.satellite.antenna.av1.av2.component.vga.dvi.usb.bluetooth.wifi.airplay.cast.dlna.miracast.app_netflix.app_youtube.app_spotify.app_prime_video.app_disney_plus.app_hbo_max.app_apple_tv.app_plex.app_kodi.other`.split(`.`),step:null,description:{en:`Standardized input/source identifier (recommended for UI).`}},{id:`custom`,data_type:`string`,unit:null,format:null,step:null,description:{en:`Integration-specific input/source value (fallback).`}}]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},source_label:{category:`source_label`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null}}},media_playback:{category:`media_playback`,properties:{status:{category:`status`,required:!0,permissions:[`rw`],data_type:`enum`,unit:null,format:[`playing`,`paused`,`stopped`]},track:{category:`track`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},duration:{category:`duration`,required:!1,permissions:[`ro`],data_type:`uint`,unit:`s`,format:[0,86400]},position:{category:`position`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`s`,format:[0,86400]},shuffle:{category:`shuffle`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},repeat:{category:`repeat`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`off`,`one`,`all`]},command:{category:`command`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`play`,`pause`,`stop`,`next`,`previous`,`rewind`,`fast_forward`]},artist:{category:`artist`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},album:{category:`album`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},artwork_url:{category:`artwork_url`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},media_type:{category:`media_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`music`,`tvshow`,`movie`,`video`,`playlist`,`podcast`,`audiobook`,`radio`,`unknown`]}}},microphone:{category:`microphone`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`ro`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]}}},speaker:{category:`speaker`,properties:{active:{category:`active`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},volume:{category:`volume`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Volume as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`mute`,`low`,`medium`,`high`,`max`],description:{en:`Volume as discrete levels`}}]},mode:{category:`mode`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`stereo`,`mono`,`surround`]},mute:{category:`mute`,required:!1,permissions:[`rw`],data_type:`bool`,unit:null,format:null},balance:{category:`balance`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-1,1]},bass:{category:`bass`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]},treble:{category:`treble`,required:!1,permissions:[`rw`],data_type:`float`,unit:null,format:[-10,10]}}},television:{category:`television`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},projector:{category:`projector`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_types:[{id:`percentage`,data_type:`uchar`,unit:`%`,format:[0,100],step:1,description:{en:`Brightness as percentage (0-100%)`}},{id:`level`,data_type:`enum`,format:[`off`,`low`,`medium`,`high`,`full`],description:{en:`Brightness as discrete levels`}}]},remote_key:{category:`remote_key`,required:!1,permissions:[`wo`],data_type:`enum`,unit:null,format:[`rewind`,`fast_forward`,`next`,`previous`,`arrow_up`,`arrow_down`,`arrow_left`,`arrow_right`,`select`,`back`,`exit`,`info`,`play`,`pause`]}}},device_information:{category:`device_information`,properties:{manufacturer:{category:`manufacturer`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},model:{category:`model`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},serial_number:{category:`serial_number`,required:!0,permissions:[`ro`],data_type:`string`,unit:null,format:null},firmware_revision:{category:`firmware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},hardware_revision:{category:`hardware_revision`,required:!1,permissions:[`ro`],data_type:`string`,unit:null,format:null},link_quality:{category:`link_quality`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},connection_type:{category:`connection_type`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`wired`,`wifi`,`zigbee`,`bluetooth`]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`connected`,`disconnected`,`init`,`ready`,`running`,`sleeping`,`stopped`,`lost`,`alert`,`unknown`]},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},filter:{category:`filter`,properties:{life_remaining:{category:`life_remaining`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:`%`,format:[0,100]},status:{category:`status`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`good`,`replace_soon`,`replace_now`]},change_needed:{category:`change_needed`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},reset:{category:`reset`,required:!1,permissions:[`wo`],data_type:`bool`,unit:null,format:null},fault:{category:`fault`,required:!1,permissions:[`ro`],data_type:`uchar`,unit:null,format:[0,255]}}},button:{category:`button`,properties:{event:{category:`event`,required:!0,permissions:[`ev`],data_type:`enum`,unit:null,format:[`press`,`long_press`,`double_press`]},detected:{category:`detected`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},indicator:{category:`indicator`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},brightness:{category:`brightness`,required:!1,permissions:[`rw`],data_type:`uchar`,unit:null,format:[0,255]},color:{category:`color_red`,required:!1,permissions:[`rw`],data_type:`enum`,unit:null,format:[`red`,`green`,`blue`,`yellow`,`white`,`off`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},buzzer:{category:`buzzer`,properties:{on:{category:`on`,required:!0,permissions:[`rw`],data_type:`bool`,unit:null,format:null},frequency:{category:`frequency`,required:!1,permissions:[`rw`],data_type:`uint`,unit:`Hz`,format:[100,1e4]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},accelerometer:{category:`accelerometer`,properties:{acceleration_x:{category:`acceleration_x`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_y:{category:`acceleration_y`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},acceleration_z:{category:`acceleration_z`,required:!0,permissions:[`ro`],data_type:`float`,unit:`g`,format:[-16,16],step:.001},orientation:{category:`orientation`,required:!1,permissions:[`ro`],data_type:`enum`,unit:null,format:[`landscape`,`portrait`,`landscape_inverted`,`portrait_inverted`,`face_up`,`face_down`]},active:{category:`active`,required:!1,permissions:[`ro`],data_type:`bool`,unit:null,format:null}}},generic:{category:`generic`,properties:{generic:{category:`generic`,required:!1}}}},ve={generic:{category:`generic`,channels:{generic:{category:`generic`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1}}},air_conditioner:{category:`air_conditioner`,channels:{cooler:{category:`cooler`,required:!0,multiple:!1},fan:{category:`fan`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1}}},air_dehumidifier:{category:`air_dehumidifier`,channels:{dehumidifier:{category:`dehumidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_humidifier:{category:`air_humidifier`,channels:{humidifier:{category:`humidifier`,required:!0,multiple:!1},humidity:{category:`humidity`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},fan:{category:`fan`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},air_purifier:{category:`air_purifier`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},air_quality:{category:`air_quality`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},thermostat:{category:`thermostat`,channels:{temperature:{category:`temperature`,required:!0,multiple:!1},thermostat:{category:`thermostat`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},cooler:{category:`cooler`,required:!1,multiple:!1},heater:{category:`heater`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},alarm:{category:`alarm`,channels:{alarm:{category:`alarm`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1}}},camera:{category:`camera`,channels:{camera:{category:`camera`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1}}},doorbell:{category:`doorbell`,channels:{doorbell:{category:`doorbell`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},camera:{category:`camera`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},light:{category:`light`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},door:{category:`door`,channels:{door:{category:`door`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},lock:{category:`lock`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},lock:{category:`lock`,channels:{lock:{category:`lock`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1}}},fan:{category:`fan`,channels:{fan:{category:`fan`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},heating_unit:{category:`heating_unit`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1}}},water_heater:{category:`water_heater`,channels:{heater:{category:`heater`,required:!0,multiple:!1},temperature:{category:`temperature`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1}}},lighting:{category:`lighting`,channels:{light:{category:`light`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1}}},outlet:{category:`outlet`,channels:{outlet:{category:`outlet`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},pump:{category:`pump`,channels:{flow:{category:`flow`,required:!1,multiple:!1},switcher:{category:`switcher`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},sprinkler:{category:`sprinkler`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},switcher:{category:`switcher`,constraints:{oneOrMoreOf:[[`outlet`,`switcher`]],mutuallyExclusiveGroups:[[[`outlet`],[`switcher`]]]},channels:{outlet:{category:`outlet`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},valve:{category:`valve`,channels:{valve:{category:`valve`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},flow:{category:`flow`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1}}},window_covering:{category:`window_covering`,channels:{window_covering:{category:`window_covering`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},media:{category:`media`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},microphone:{category:`microphone`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},speaker:{category:`speaker`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1}}},television:{category:`television`,channels:{speaker:{category:`speaker`,required:!0,multiple:!1},television:{category:`television`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},projector:{category:`projector`,channels:{projector:{category:`projector`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1}}},av_receiver:{category:`av_receiver`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!0,multiple:!0},media_input:{category:`media_input`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1}}},set_top_box:{category:`set_top_box`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},media_input:{category:`media_input`,required:!1,multiple:!1},speaker:{category:`speaker`,required:!1,multiple:!1}}},game_console:{category:`game_console`,channels:{switcher:{category:`switcher`,required:!1,multiple:!1},media_playback:{category:`media_playback`,required:!1,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},streaming_service:{category:`streaming_service`,channels:{media_playback:{category:`media_playback`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1}}},robot_vacuum:{category:`robot_vacuum`,channels:{battery:{category:`battery`,required:!0,multiple:!1},robot_vacuum:{category:`robot_vacuum`,required:!0,multiple:!1},device_information:{category:`device_information`,required:!0,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},filter:{category:`filter`,required:!1,multiple:!1}}},sensor:{category:`sensor`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},air_particulate:{category:`air_particulate`,required:!1,multiple:!1},battery:{category:`battery`,required:!1,multiple:!1},carbon_dioxide:{category:`carbon_dioxide`,required:!1,multiple:!1},carbon_monoxide:{category:`carbon_monoxide`,required:!1,multiple:!1},gas:{category:`gas`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!1},humidity:{category:`humidity`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},leak:{category:`leak`,required:!1,multiple:!1},motion:{category:`motion`,required:!1,multiple:!1},nitrogen_dioxide:{category:`nitrogen_dioxide`,required:!1,multiple:!1},occupancy:{category:`occupancy`,required:!1,multiple:!1},ozone:{category:`ozone`,required:!1,multiple:!1},pressure:{category:`pressure`,required:!1,multiple:!1},smoke:{category:`smoke`,required:!1,multiple:!1},sulphur_dioxide:{category:`sulphur_dioxide`,required:!1,multiple:!1},temperature:{category:`temperature`,required:!1,multiple:!1},volatile_organic_compounds:{category:`volatile_organic_compounds`,required:!1,multiple:!1},electrical_energy:{category:`electrical_energy`,required:!1,multiple:!1},electrical_power:{category:`electrical_power`,required:!1,multiple:!1}}},terminal:{category:`terminal`,channels:{device_information:{category:`device_information`,required:!0,multiple:!1},button:{category:`button`,required:!1,multiple:!0},indicator:{category:`indicator`,required:!1,multiple:!0},buzzer:{category:`buzzer`,required:!1,multiple:!1},illuminance:{category:`illuminance`,required:!1,multiple:!1},accelerometer:{category:`accelerometer`,required:!1,multiple:!1},contact:{category:`contact`,required:!1,multiple:!0},switcher:{category:`switcher`,required:!1,multiple:!0},temperature:{category:`temperature`,required:!1,multiple:!1}}}},ye={[P.generic]:[],[P.air_conditioner]:[O.cooler,O.heater,O.fan,O.temperature,O.humidity,O.electrical_energy,O.electrical_power,O.leak,O.device_information],[P.air_dehumidifier]:[O.cooler,O.fan,O.temperature,O.humidity,O.electrical_energy,O.electrical_power,O.leak,O.device_information],[P.air_humidifier]:[O.humidity,O.switcher,O.temperature,O.fan,O.electrical_energy,O.electrical_power,O.leak,O.device_information],[P.air_purifier]:[O.fan,O.air_particulate,O.carbon_dioxide,O.carbon_monoxide,O.humidity,O.leak,O.nitrogen_dioxide,O.ozone,O.pressure,O.sulphur_dioxide,O.temperature,O.volatile_organic_compounds,O.electrical_energy,O.electrical_power,O.device_information],[P.alarm]:[O.alarm,O.device_information],[P.camera]:[O.camera,O.motion,O.microphone,O.speaker,O.contact,O.light,O.temperature,O.humidity,O.battery,O.device_information],[P.door]:[O.door,O.lock,O.contact,O.motion,O.battery,O.device_information],[P.doorbell]:[O.doorbell,O.camera,O.lock,O.motion,O.microphone,O.speaker,O.contact,O.light,O.battery,O.device_information],[P.fan]:[O.fan,O.electrical_energy,O.electrical_power,O.device_information],[P.heating_unit]:[O.heater,O.temperature,O.humidity,O.electrical_energy,O.electrical_power,O.device_information],[P.lighting]:[O.light,O.illuminance,O.electrical_energy,O.electrical_power,O.device_information],[P.lock]:[O.lock,O.contact,O.motion,O.battery,O.device_information],[P.media]:[O.media_input,O.media_playback,O.microphone,O.speaker,O.device_information],[P.av_receiver]:[O.media_input,O.media_playback,O.speaker,O.device_information],[P.game_console]:[O.media_playback,O.media_input,O.device_information],[P.projector]:[O.projector,O.speaker,O.media_playback,O.media_input,O.device_information],[P.set_top_box]:[O.media_input,O.media_playback,O.device_information],[P.streaming_service]:[O.media_playback,O.device_information],[P.outlet]:[O.outlet,O.electrical_energy,O.electrical_power,O.device_information],[P.pump]:[O.flow,O.switcher,O.leak,O.pressure,O.electrical_energy,O.electrical_power,O.device_information],[P.robot_vacuum]:[O.robot_vacuum,O.electrical_energy,O.electrical_power,O.leak,O.battery,O.device_information],[P.sensor]:[O.air_particulate,O.battery,O.carbon_dioxide,O.carbon_monoxide,O.contact,O.humidity,O.illuminance,O.leak,O.motion,O.nitrogen_dioxide,O.occupancy,O.ozone,O.pressure,O.smoke,O.sulphur_dioxide,O.temperature,O.volatile_organic_compounds,O.device_information],[P.speaker]:[O.speaker,O.media_input,O.media_playback,O.electrical_energy,O.electrical_power,O.device_information],[P.sprinkler]:[O.valve,O.flow,O.pressure,O.leak,O.humidity,O.electrical_energy,O.electrical_power,O.device_information],[P.switcher]:[O.switcher,O.electrical_energy,O.electrical_power,O.device_information],[P.television]:[O.television,O.speaker,O.media_playback,O.media_input,O.device_information],[P.terminal]:[O.button,O.indicator,O.buzzer,O.illuminance,O.accelerometer,O.temperature,O.contact,O.switcher,O.device_information],[P.thermostat]:[O.thermostat,O.cooler,O.heater,O.temperature,O.humidity,O.contact,O.electrical_energy,O.electrical_power,O.device_information],[P.valve]:[O.valve,O.pressure,O.flow,O.leak,O.battery,O.electrical_energy,O.electrical_power,O.device_information],[P.water_heater]:[O.heater,O.temperature,O.leak,O.electrical_energy,O.electrical_power,O.device_information],[P.window_covering]:[O.window_covering,O.battery,O.electrical_energy,O.electrical_power,O.device_information]},be=Object.fromEntries(Object.entries(ve).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=ye[e];return[e,r?[...n].sort((e,t)=>{let n=r.indexOf(e),i=r.indexOf(t);return n===-1&&i===-1?0:n===-1?1:i===-1?-1:n-i}):n]})),Z=Object.fromEntries(Object.entries(ve).map(([e,t])=>[e,{required:Object.values(t.channels).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.channels).filter(e=>!e.required).map(e=>e.category),multiple:Object.values(t.channels).filter(e=>e.multiple).map(e=>e.category)}])),xe=Object.fromEntries(Object.entries(_e).map(([e,t])=>[e,{required:Object.values(t.properties).filter(e=>e.required).map(e=>e.category),optional:Object.values(t.properties).filter(e=>!e.required).map(e=>e.category)}])),Se=(e,t)=>{let n=_e[e];if(!n)return;let r=Object.values(n.properties).find(e=>e.category===t);if(!r)return;let i=r.data_types?.[0];if(i)return{category:r.category,required:r.required,description:i.description??r.description??{en:``},permissions:r.permissions,data_type:i.data_type,unit:i.unit??null,format:i.format??null,invalid:r.invalid,step:i.step??null};if(r.data_type)return{category:r.category,required:r.required,description:r.description??{en:``},permissions:r.permissions,data_type:r.data_type,unit:r.unit??null,format:r.format??null,invalid:r.invalid,step:r.step??null}},Ce=({id:e})=>{let n=_(),r=n.getStore(W),i=n.getStore(H),a=e=>r.findById(e),o=e=>xe[e.category]??null;return{canAddAnotherProperty:t(()=>{let t=a(e);if(t===null)return!0;let{required:n,optional:r}=o(t)??{required:[],optional:[]},s=[...n,...r],c=i.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:t(()=>{let t=a(e);if(t===null)throw new q(`Something went wrong, channel can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},we=C({id:F().uuid().optional(),type:F().trim().nonempty(),device:F().uuid().optional(),category:x(O).default(O.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty(),description:F().trim().transform(e=>e===``?null:e).nullable().optional()}),Te=C({id:F().uuid(),type:F().trim().nonempty(),device:F().uuid(),category:x(O).default(O.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty().optional(),description:F().trim().transform(e=>e===``?null:e).nullable().optional()}),Ee=({type:e})=>{let{getByType:n}=se(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},De=()=>{let e=_().getStore(V),{firstLoad:n,semaphore:r}=m(e);return{devices:t(()=>e.findAll().filter(e=>!e.draft&&!e.hidden)),areLoading:t(()=>r.value.fetching.items),loaded:t(()=>n.value),fetchDevices:async()=>{await e.fetch()}}},Oe=({id:n,type:s,deviceId:c})=>{let l=_(),{element:u}=Ee({type:s}),d=l.getStore(W),{devices:f,fetchDevices:p,areLoading:m}=De(),{t:h}=i(),g=b(),y=S(),x=r(G.NONE),C,w=t(()=>A.device?f.value.find(e=>e.id===A.device)??null:null),T=t(()=>w.value?d.findForDevice(w.value.id).map(e=>e.category):[]),E=t(()=>w.value?Z[w.value.category]??null:null),D=t(()=>E.value===null?[]:Object.values(O).filter(e=>E.value?.required.includes(e)||E.value?.optional.includes(e)).filter(e=>!T.value.includes(e)||E.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),k=t(()=>f.value.filter(e=>e.type===s).map(e=>({value:e.id,label:e.name}))),A=a({...z(u.value?.schemas?.channelAddFormSchema||we),id:n,type:s,device:c,category:O.generic,name:``,description:``}),j=v(e(A)),M=r(void 0),N=r(!1),P=async()=>{if(M.value.clearValidate(),!await M.value.validate())throw new Y(`Form not valid`);let e=c??A.device;if(!e)throw new Y(`Missing device identifier`);if(!A.category)throw new Y(`Missing data type definition`);let t=(u.value?.schemas?.channelAddFormSchema||we).safeParse(A);if(!t.success)throw y.error(`Schema validation failed with:`,t.error),new Y(`Failed to validate create channel model.`);x.value=G.WORKING;let r=h(`devicesModule.messages.channels.notCreated`,{device:A.name});try{await d.add({id:n,deviceId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw x.value=G.ERROR,C=window.setTimeout(F,2e3),e instanceof J&&e.code===422?g.error(e.message):g.error(r),e}return x.value=G.OK,C=window.setTimeout(F,2e3),g.success(h(`devicesModule.messages.channels.created`,{device:A.name})),`added`},F=()=>{window.clearTimeout(C),x.value=G.NONE};return p().catch(()=>{}),o(A,()=>{N.value=!(0,K.isEqual)(e(A),j)}),o(()=>D.value,e=>{e.length&&e[0]&&(A.category=e[0].value,j.category=e[0].value)},{immediate:!0}),{categoriesOptions:D,devicesOptions:k,model:A,formEl:M,formChanged:N,submit:P,clear:F,formResult:x,loadingDevices:m}},ke=({channel:n,messages:s})=>{let c=_(),{element:l}=Ee({type:n.type}),u=c.getStore(W),{devices:d,fetchDevices:f,areLoading:p}=De(),{t:m}=i(),h=b(),g=S(),y=r(G.NONE),x,C=t(()=>d.value.find(e=>e.id===n.device)??null),w=t(()=>C.value?u.findForDevice(C.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),T=t(()=>C.value?Z[C.value.category]??null:null),E=t(()=>T.value===null?[]:Object.values(O).filter(e=>T.value?.required.includes(e)||T.value?.optional.includes(e)).filter(e=>!w.value.includes(e)||T.value?.multiple?.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channels.${e}`)}))),D=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),k=a(n),A=v(e(k)),j=r(void 0),M=r(!1),N=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?m(`devicesModule.messages.channels.notCreated`,{channel:n.name}):m(`devicesModule.messages.channels.notEdited`,{channel:n.name});if(j.value.clearValidate(),!await j.value.validate())throw new Y(`Form not valid`);let i=(l.value?.schemas?.channelEditFormSchema||Te).safeParse(k);if(!i.success)throw g.error(`Schema validation failed with:`,i.error),new Y(`Failed to validate edit channel model.`);y.value=G.WORKING;try{await u.edit({id:n.id,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,deviceId:n.device})}catch(e){throw y.value=G.ERROR,x=window.setTimeout(P,2e3),e instanceof J&&e.code===422?h.error(e.message):h.error(r),e}return y.value=G.OK,x=window.setTimeout(P,2e3),t?(h.success(m(s&&s.success?s.success:`devicesModule.messages.channels.created`,{channel:n.name})),`added`):(h.success(m(s&&s.success?s.success:`devicesModule.messages.channels.edited`,{channel:n.name})),M.value=!1,A=v(e(k)),`saved`)},P=()=>{window.clearTimeout(x),y.value=G.NONE};return f().catch(()=>{}),o(k,()=>{M.value=!(0,K.isEqual)(e(k),A)}),{categoriesOptions:E,devicesOptions:D,model:k,formEl:j,formChanged:M,submit:N,clear:P,formResult:y,loadingDevices:p}},Ae=({channelId:e,id:n})=>{let r=_().getStore(H),{data:i,semaphore:a}=m(r);return{property:t(()=>n===null?null:i.value[n]??null),isLoading:t(()=>a.value.fetching.item.includes(n)?!0:(i.value[n]??null)===null?a.value.fetching.items.includes(e)||a.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(i.value[n]??null)?.draft||await r.get({id:n,channelId:e})}}},je=({channelId:e})=>{let n=_().getStore(H),{firstLoad:r,semaphore:i}=m(n),a=typeof e==`string`?t(()=>e):e;return{properties:t(()=>n.findAll().filter(e=>!a?.value||e.channel===a.value)),areLoading:t(()=>a.value?i.value.fetching.items.includes(a.value)?!0:!r.value.includes(a.value)&&i.value.fetching.items.includes(a.value):!1),loaded:t(()=>a.value?r.value.includes(a.value):!1),fetchProperties:async()=>{a.value&&await n.fetch({channelId:a.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},Me={by:`category`,dir:`asc`},Ne=({channelId:e,key:n=`list`})=>{let i=_().getStore(H),{firstLoad:a,semaphore:s}=m(i),{filters:c,sort:l,pagination:u,reset:d}=k({key:`${ne}:channels-properties:${n}`,filters:{schema:fe,defaults:Q},sort:{defaults:[Me]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=t(()=>c.value.search!==Q.search||!(0,K.isEqual)(c.value.channels,Q.channels)||!(0,K.isEqual)(c.value.categories,Q.categories)||!(0,K.isEqual)(c.value.permissions,Q.permissions)||!(0,K.isEqual)(c.value.dataTypes,Q.dataTypes)),p=r(u.value.size||10),h=r(u.value.page||1),g=r(l.value.length>0?l.value[0]?.by:void 0),v=r(l.value.length>0?l.value[0]?.dir??null:null),y=t(()=>B(i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!c.value.search||e.id?.toLowerCase().includes(c.value.search.toLowerCase())||e.name?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.dataTypes.length===0||c.value.dataTypes.includes(e.dataType))&&(c.value.permissions.length===0||e.permissions.some(e=>c.value.permissions.includes(e)))),[e=>e[g.value]??``],[v.value===`asc`?`asc`:`desc`])),b=t(()=>{let e=(h.value-1)*p.value,t=e+p.value;return y.value.slice(e,t)}),x=async()=>{await i.fetch({channelId:e})},S=t(()=>s.value.fetching.items.includes(e)?!0:!a.value.includes(e)&&s.value.fetching.items.includes(e)),C=t(()=>a.value.includes(e)),w=t(()=>i.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return o(()=>u.value,e=>{h.value=e.page??1,p.value=e.size??10},{deep:!0}),o(()=>h.value,e=>{u.value.page=e}),o(()=>p.value,e=>{u.value.size=e}),o(()=>v.value,e=>{g.value===void 0||e===null?l.value=[]:l.value=[{by:g.value,dir:e}]}),o(()=>g.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:v.value}]}),{properties:y,propertiesPaginated:b,totalRows:w,areLoading:S,loaded:C,fetchProperties:x,filters:c,filtersActive:f,paginateSize:p,paginatePage:h,sortBy:g,sortDir:v,resetFilter:d}},Pe=()=>{let{t:e}=i(),t=b(),n=_().getStore(H);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new q(`Something went wrong, channel property can't be loaded`);u.confirm(e(`devicesModule.texts.channelsProperties.confirmRemove`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}),e(`devicesModule.headings.channelsProperties.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id,channelId:i.channel}),t.success(e(`devicesModule.messages.channelsProperties.removed`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))}catch(n){if(n instanceof J&&n.code===404){let n=e(`devicesModule.messages.channelsProperties.notFound`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}else if(n instanceof J&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.channelsProperties.notRemoved`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.channelsProperties.removeCanceled`,{property:i.name??e(`devicesModule.categories.channelsProperties.${i.category}`)}))})}}},Fe=({id:e})=>{let n=_().getStore(H);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:tune`}})}},Ie=C({id:F().uuid().optional(),type:F().trim().nonempty(),channel:F().uuid().optional(),category:x(M).default(M.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty().nullable(),permissions:g(x(h)),dataType:x(T),format:g(I([F(),I([D(),E()])])).nullable(),invalid:I([F(),D(),A(),E()]),step:I([F(),D()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:A().default(!1),value:I([F(),D(),A(),E()]).optional(),enumValues:g(F()),minValue:I([F(),D()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:I([F(),D()]).transform(e=>e===``?void 0:Number(e)).optional()}),Le=C({id:F().uuid(),type:F().trim().nonempty(),channel:F().uuid(),category:x(M).default(M.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty().nullable().optional(),permissions:g(x(h)),dataType:x(T),format:g(I([F(),I([D(),E()])])).nullable(),invalid:I([F(),D(),A(),E()]),step:I([F(),D()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:A().default(!1),value:I([F(),D(),A(),E()]).optional(),enumValues:g(F()),minValue:I([F(),D()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:I([F(),D()]).transform(e=>e===``?void 0:Number(e)).optional()}),Re=({type:e})=>{let{getByType:n}=oe(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},ze=({id:n,type:s,channelId:c})=>{let l=_(),{element:u}=Re({type:s}),d=l.getStore(H),{channels:f,fetchChannels:p,areLoading:m}=le(),{t:g}=i(),y=b(),x=S(),C=r(G.NONE),w,E=t(()=>F.channel?f.value.find(e=>e.id===F.channel)??null:null),D=t(()=>E.value?d.findForChannel(E.value.id).map(e=>e.category):[]),k=t(()=>E.value?xe[E.value.category]??null:null),A=t(()=>k.value===null?[]:Object.values(M).filter(e=>k.value?.required.includes(e)||k.value?.optional.includes(e)).filter(e=>!D.value.includes(e)).map(e=>({value:e,label:g(`devicesModule.categories.channelsProperties.${e}`)}))),j=t(()=>f.value.map(e=>({value:e.id,label:e.name}))),N=Object.values(h).map(e=>({value:e,label:g(`devicesModule.permissions.${e}`)})),P=Object.values(T).map(e=>({value:e,label:g(`devicesModule.dataTypes.${e}`)})),F=a({...z(u.value?.schemas?.channelPropertyAddFormSchema||Ie),id:n,type:s,channel:c,category:M.generic,name:``,permissions:[],dataType:T.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),I=v(e(F)),L=r(void 0),R=r(!1),B=async()=>{if(L.value.clearValidate(),!await L.value.validate())throw new Y(`Form not valid`);let e=c??F.channel;if(!e)throw new Y(`Missing channel identifier`);if(F.name===``&&(F.name=null),!F.category)throw new Y(`Missing data type definition`);F.dataType===T.enum?F.format=F.enumValues:[T.char,T.uchar,T.short,T.ushort,T.int,T.uint,T.float].includes(F.dataType)&&(F.format=[typeof F.minValue==`string`&&F.minValue!==``?Number(F.minValue):typeof F.minValue==`number`?F.minValue:null,typeof F.maxValue==`string`&&F.maxValue!==``?Number(F.maxValue):typeof F.maxValue==`number`?F.maxValue:null]),F.enterValue||delete F.value;let t=(u.value?.schemas?.channelPropertyAddFormSchema||Ie).safeParse(F);if(!t.success)throw x.error(`Schema validation failed with:`,t.error),new Y(`Failed to validate create channel property model.`);C.value=G.WORKING;let r=g(`devicesModule.messages.channelsProperties.notCreated`,{device:F.name});try{await d.add({id:n,channelId:e,draft:!1,data:{...t.data,type:s}})}catch(e){throw C.value=G.ERROR,w=window.setTimeout(V,2e3),e instanceof J&&e.code===422?y.error(e.message):y.error(r),e}return C.value=G.OK,w=window.setTimeout(V,2e3),y.success(g(`devicesModule.messages.channelsProperties.created`,{device:F.name})),`added`},V=()=>{window.clearTimeout(w),C.value=G.NONE};return p().catch(()=>{}),o(F,()=>{R.value=!(0,K.isEqual)(e(F),I)}),o(()=>F.category,t=>{let n=Se(E.value?.category??O.generic,t);n&&(I.permissions=n.permissions,I.dataType=n.data_type,F.permissions=n.permissions,F.dataType=n.data_type,n.invalid!==void 0&&(I.invalid=n.invalid,F.invalid=n.invalid),n.step!==void 0&&(I.step=n.step,F.step=n.step),I.dataType===T.enum?(I.enumValues=n.format??[],I.minValue=void 0,I.maxValue=void 0,F.enumValues=n.format??[],F.minValue=void 0,F.maxValue=void 0):[T.char,T.uchar,T.short,T.ushort,T.int,T.uint,T.float].includes(F.dataType)?(I.enumValues=[],I.minValue=n.format?.[0],I.maxValue=n.format?.[1],F.enumValues=[],F.minValue=n.format?.[0],F.maxValue=n.format?.[1]):(I.enumValues=[],I.minValue=void 0,I.maxValue=void 0,F.enumValues=[],F.minValue=void 0,F.maxValue=void 0),R.value=!(0,K.isEqual)(e(F),I))},{immediate:!0}),o(()=>A.value,e=>{e.length&&e[0]&&(F.category=e[0].value,I.category=e[0].value)},{immediate:!0}),{categoriesOptions:A,channelsOptions:j,permissionsOptions:N,dataTypesOptions:P,model:F,formEl:L,formChanged:R,submit:B,clear:V,formResult:C,loadingChannels:m}},Be=({property:n,messages:s})=>{let c=_(),{element:l}=Re({type:n.type}),u=c.getStore(H),{channels:d,fetchChannels:f,areLoading:p}=le(),{t:m}=i(),g=b(),y=S(),x=r(G.NONE),C,w=[],E,D;n.dataType===T.enum?w=n.format?n.format.map(e=>e?.toString()||``):[]:[T.char,T.uchar,T.short,T.ushort,T.int,T.uint,T.float].includes(n.dataType)&&Array.isArray(n.format)&&n.format.length===2&&(E=n.format[0],D=n.format[1]);let O=t(()=>d.value.find(e=>e.id===n.channel)??null),k=t(()=>O.value?u.findForChannel(O.value.id).filter(e=>e.id!==n.id).map(e=>e.category):[]),A=t(()=>O.value?xe[O.value.category]??null:null),j=t(()=>A.value===null?[]:Object.values(M).filter(e=>A.value?.required.includes(e)||A.value?.optional.includes(e)).filter(e=>!k.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),N=t(()=>d.value.map(e=>({value:e.id,label:e.name}))),P=Object.values(h).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),F=Object.values(T).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),I=a({...n,format:e(n.format),value:n.value?.value??null,enumValues:w,minValue:E,maxValue:D,enterValue:!1}),L=v(e(I)),R=r(void 0),z=r(!1),B=async()=>{let t=n.draft,r=s&&s.error?s.error:n.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)});if(R.value.clearValidate(),!await R.value.validate())throw new Y(`Form not valid`);I.name===``&&(I.name=null),n.dataType===T.enum?I.format=I.enumValues:[T.char,T.uchar,T.short,T.ushort,T.int,T.uint,T.float].includes(n.dataType)&&(I.format=[I.minValue??null,I.maxValue??null]),I.enterValue||delete I.value;let i=(l.value?.schemas?.channelPropertyEditFormSchema||Le).safeParse(I);if(!i.success)throw y.error(`Schema validation failed with:`,i.error),new Y(`Failed to validate edit channel property model.`);x.value=G.WORKING;try{await u.edit({id:n.id,channelId:n.channel,data:{...i.data,type:n.type}}),n.draft&&await u.save({id:n.id,channelId:n.channel})}catch(e){throw x.value=G.ERROR,C=window.setTimeout(V,2e3),e instanceof J&&e.code===422?g.error(e.message):g.error(r),e}return x.value=G.OK,C=window.setTimeout(V,2e3),t?(g.success(m(s&&s.success?s.success:`devicesModule.messages.channelsProperties.created`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)})),`added`):(g.success(m(s&&s.success?s.success:`devicesModule.messages.channelsProperties.edited`,{property:n.name??m(`devicesModule.categories.channelsProperties.${n.category}`)})),z.value=!1,L=v(e(I)),`saved`)},V=()=>{window.clearTimeout(C),x.value=G.NONE};return f().catch(()=>{}),o(I,()=>{z.value=!(0,K.isEqual)(e(I),L)}),{categoriesOptions:j,channelsOptions:N,permissionsOptions:P,dataTypesOptions:F,model:I,formEl:R,formChanged:z,submit:B,clear:V,formResult:x,loadingChannels:p}},Ve=({id:e})=>{let n=_().getStore(V),{data:r,semaphore:i}=m(n);return{device:t(()=>{let t=s(e);return t===null?null:r.value[t]??null}),isLoading:t(()=>{let t=s(e);return i.value.fetching.item.includes(t)?!0:(r.value[t]??null)===null&&i.value.fetching.items}),fetchDevice:async()=>{let t=s(e);(r.value[t]??null)?.draft||await n.get({id:t})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},He={by:`name`,dir:`asc`},Ue=()=>{let e=_(),n=e.getStore(V),i=e.getStore(U),{firstLoad:a,semaphore:s}=m(n),{filters:c,sort:l,pagination:u,reset:p}=k({key:`${ne}:devices:list`,filters:{schema:ue,defaults:$},sort:{defaults:[He]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),h=t(()=>c.value.search!==$.search||!(0,K.isEqual)(c.value.types,$.types)||c.value.state!==$.state||!(0,K.isEqual)(c.value.states,$.states)||!(0,K.isEqual)(c.value.categories,$.categories)||!(0,K.isEqual)(c.value.enabled,$.enabled)||c.value.validation!==$.validation),g=r(u.value.size||10),v=r(u.value.page||1),y=r(l.value.length>0?l.value[0]?.by:void 0),b=r(l.value.length>0?l.value[0]?.dir??null:null),x=r(!1),S=e=>i.findById(e)?.isValid??null,C=t(()=>B(n.findAll().filter(e=>!e.draft&&(x.value||!e.hidden)&&(!c.value.search||e.id.toLowerCase().includes(c.value.search.toLowerCase())||e.name.toLowerCase().includes(c.value.search.toLowerCase())||e.description?.toLowerCase().includes(c.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(c.value.search.toLowerCase()))&&(c.value.types.length===0||c.value.types.includes(e.type))&&(c.value.categories.length===0||c.value.categories.includes(e.category))&&(c.value.enabled===`all`||c.value.enabled===`enabled`&&e.enabled||c.value.enabled===`disabled`&&!e.enabled)&&(c.value.states.length===0||c.value.states.includes(e.status?.status??d.unknown))&&(c.value.state===`all`||c.value.state===`online`&&[d.ready,d.connected,d.running].includes(e.status.status)||c.value.state===`offline`&&[d.disconnected,d.stopped,d.lost,d.unknown].includes(e.status.status))&&(c.value.validation===`all`||c.value.validation===`valid`&&S(e.id)===!0||c.value.validation===`invalid`&&S(e.id)===!1)),[e=>y.value===`state`?e.status?.status??d.unknown:e[y.value]??``],[b.value===`asc`?`asc`:`desc`])),w=t(()=>{let e=(v.value-1)*g.value,t=e+g.value;return C.value.slice(e,t)}),T=async()=>{await n.fetch({hidden:x.value?f.all:f.false})},E=t(()=>s.value.fetching.items||!a.value),D=t(()=>a.value),O=t(()=>n.findAll().filter(e=>!e.draft&&(x.value||!e.hidden)).length);return o(()=>u.value,e=>{v.value=e.page??1,g.value=e.size??10},{deep:!0}),o(()=>v.value,e=>{u.value.page=e}),o(()=>g.value,e=>{u.value.size=e}),o(()=>b.value,e=>{y.value===void 0||e===null?l.value=[]:l.value=[{by:y.value,dir:e}]}),o(()=>y.value,e=>{e===void 0?l.value=[]:l.value=[{by:e,dir:b.value}]}),{devices:C,devicesPaginated:w,totalRows:O,areLoading:E,loaded:D,fetchDevices:T,filters:c,filtersActive:h,paginateSize:g,paginatePage:v,sortBy:y,sortDir:b,resetFilter:p,showHidden:x}},We=()=>{let{t:e}=i(),t=b(),n=_().getStore(V);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new q(`Something went wrong, device can't be loaded`);u.confirm(e(`devicesModule.texts.devices.confirmRemove`,{device:i.name}),e(`devicesModule.headings.devices.remove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{await n.remove({id:i.id}),t.success(e(`devicesModule.messages.devices.removed`,{device:i.name}))}catch(n){if(n instanceof J&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof J&&n.code===422)t.error(n.message);else{let n=e(`devicesModule.messages.devices.notRemoved`,{device:i.name});t.error(n)}}}).catch(()=>{t.info(e(`devicesModule.messages.devices.removeCanceled`,{device:i.name}))})},bulkRemove:async r=>{if(r.length!==0){try{await u.confirm(e(`devicesModule.texts.devices.confirmBulkRemove`,{count:r.length}),e(`devicesModule.headings.devices.bulkRemove`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:r.length}))}}},bulkEnable:async r=>{if(r.length!==0){try{await u.confirm(e(`devicesModule.texts.devices.confirmBulkEnable`,{count:r.length}),e(`devicesModule.headings.devices.bulkEnable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`info`})}catch{t.info(e(`devicesModule.messages.devices.bulkEnableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!0});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkEnabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:r.length}))}}},bulkDisable:async r=>{if(r.length!==0){try{await u.confirm(e(`devicesModule.texts.devices.confirmBulkDisable`,{count:r.length}),e(`devicesModule.headings.devices.bulkDisable`),{confirmButtonText:e(`devicesModule.buttons.yes.title`),cancelButtonText:e(`devicesModule.buttons.no.title`),type:`warning`})}catch{t.info(e(`devicesModule.messages.devices.bulkDisableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!1});i.succeeded.length>0&&t.success(e(`devicesModule.messages.devices.bulkDisabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:i.failed.length}))}catch{t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:r.length}))}}}}},Ge=({id:e})=>{let n=_().getStore(V);return{icon:t(()=>{switch(n.findById(e)?.category){default:return`mdi:devices`}})}},Ke=({id:e})=>{let n=_(),r=n.getStore(V),i=n.getStore(W),a=e=>r.findById(e),o=e=>Z[e.category]??null;return{canAddAnotherChannel:t(()=>{let t=a(typeof e==`string`?e:e.value);if(t===null)return!0;let{required:n,optional:r,multiple:s}=o(t)??{required:[],optional:[]},c=[...n,...r],l=i.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:t(()=>{let t=a(typeof e==`string`?e:e.value);if(t===null)throw new q(`Something went wrong, device can't be loaded`);let{required:n}=o(t)??{required:[]},r=i.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!r.includes(e))})}},qe=C({id:F().uuid().optional(),type:F().trim().nonempty(),category:x(P).default(P.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty(),description:F().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:A().default(!0).optional()}),Je=C({id:F().uuid(),type:F().trim().nonempty(),category:x(P).default(P.generic),identifier:F().trim().nonempty().nullable().optional(),name:F().trim().nonempty().optional(),description:F().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:A().optional(),roomId:F().uuid().nullable().optional()}),Ye=({type:e})=>{let{getByType:n}=re(),r=t(()=>n(e));return{plugin:r,element:t(()=>(r.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Xe=({id:t,type:n})=>{let s=_(),{element:c}=Ye({type:n}),l=s.getStore(V),{t:u}=i(),d=b(),f=S(),p=r(G.NONE),m,h=Object.values(P).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=a({...z(c.value?.schemas?.deviceAddFormSchema||qe),id:t,type:n,category:P.generic,name:``,description:``}),y=v(e(g)),x=r(void 0),C=r(!1),w=async()=>{if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let e=(c.value?.schemas?.deviceAddFormSchema||qe).safeParse(g);if(!e.success)throw f.error(`Schema validation failed with:`,e.error),new Y(`Failed to validate create device model.`);p.value=G.WORKING;let r=u(`devicesModule.messages.devices.notCreated`,{device:g.name});try{await l.add({id:t,draft:!1,data:{...e.data,type:n}})}catch(e){throw p.value=G.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(r),e}return p.value=G.OK,m=window.setTimeout(T,2e3),d.success(u(`devicesModule.messages.devices.created`,{device:g.name})),`added`},T=()=>{window.clearTimeout(m),p.value=G.NONE};return o(g,()=>{C.value=!(0,K.isEqual)(e(g),y)}),{categoriesOptions:h,model:g,formEl:x,formChanged:C,submit:w,clear:T,formResult:p}},Ze=({device:t,messages:n})=>{let s=_(),{element:c}=Ye({type:t.type}),l=s.getStore(V),{t:u}=i(),d=b(),f=S(),p=r(G.NONE),m,h=Object.values(P).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=a(t),y=v(e(g)),x=r(void 0),C=r(!1),w=async()=>{let r=t.draft,i=n&&n.error?n.error:t.draft?u(`devicesModule.messages.devices.notCreated`,{device:t.name}):u(`devicesModule.messages.devices.notEdited`,{device:t.name});if(x.value.clearValidate(),!await x.value.validate())throw new Y(`Form not valid`);let a=(c.value?.schemas?.deviceEditFormSchema||Je).safeParse(g);if(!a.success)throw f.error(`Schema validation failed with:`,a.error),new Y(`Failed to validate edit device model.`);let o={...a.data};(0,K.isEqual)(o.roomId,y.roomId)&&delete o.roomId,p.value=G.WORKING;try{await l.edit({id:t.id,data:{...o,type:t.type}}),t.draft&&await l.save({id:t.id})}catch(e){throw p.value=G.ERROR,m=window.setTimeout(T,2e3),e instanceof J&&e.code===422?d.error(e.message):d.error(i),e}return p.value=G.OK,m=window.setTimeout(T,2e3),r?(d.success(u(n&&n.success?n.success:`devicesModule.messages.devices.created`,{device:t.name})),`added`):(d.success(u(n&&n.success?n.success:`devicesModule.messages.devices.edited`,{device:t.name})),C.value=!1,y=v(e(g)),`saved`)},T=()=>{window.clearTimeout(m),p.value=G.NONE};return o(g,()=>{C.value=!(0,K.isEqual)(e(g),y)}),{categoriesOptions:h,model:g,formEl:x,formChanged:C,submit:w,clear:T,formResult:p}},Qe=()=>{let e=_().getStore(U),{data:n,semaphore:r,firstLoad:i}=m(e);return{validation:t(()=>n.value),summary:t(()=>n.value?.summary??null),invalidDevices:t(()=>n.value?n.value.devices.filter(e=>!e.isValid):[]),isLoading:t(()=>r.value.fetching.items),isLoaded:t(()=>i.value),fetchValidation:async()=>{await e.fetch()},findById:t=>e.findById(t),isDeviceValid:t=>{let n=e.findById(t);return n?n.isValid:null},getDeviceIssueCount:t=>{let n=e.findById(t);return n?n.issues.length:0}}},$e=({id:e})=>{let n=_().getStore(U),{semaphore:r}=m(n);return{validation:t(()=>n.findById(typeof e==`string`?e:e.value)),isValid:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.isValid:null}),issues:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.issues:[]}),errorCount:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.issues.filter(e=>e.severity===`error`).length:0}),warningCount:t(()=>{let t=n.findById(typeof e==`string`?e:e.value);return t?t.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:t(()=>r.value.fetching.item.includes(typeof e==`string`?e:e.value)),fetchValidation:async()=>{await n.get({id:typeof e==`string`?e:e.value})}}},et=300,tt=1e4,nt=({id:e})=>{let i=_(),a=i.getStore(V),s=i.getStore(W),c=i.getStore(H),{data:l,semaphore:u}=m(a),{data:d,semaphore:f,firstLoad:p}=m(s),{semaphore:g,firstLoad:v}=m(c),{sendCommand:y}=w(),b={},x={},S={},C=r({}),T=r({}),E=t(()=>e===null?null:l.value[e]??null),D=t(()=>Object.values(d.value).filter(t=>t.device===e&&t.category!==O.device_information)),k=t(()=>D.value.filter(e=>c.findForChannel(e.id).some(e=>e.permissions.includes(h.rw)||e.permissions.includes(h.wo)))),A=t(()=>k.value.length>0),j=e=>c.findForChannel(e),M=e=>e.permissions.includes(h.rw)||e.permissions.includes(h.wo),N=e=>{let t=C.value[e];return t===void 0?c.findById(e)?.value?.value??null:t},P=e=>T.value[e]??!1,F=(e,t)=>{if(t!==void 0){let n=C.value[e];if(n!==t&&String(n)!==String(t))return}delete C.value[e],S[e]&&(clearTimeout(S[e]),delete S[e])},I=(e,t)=>{S[e]&&clearTimeout(S[e]),S[e]=setTimeout(()=>{let n=C.value[e];(n===t||String(n)===String(t))&&delete C.value[e],delete S[e]},tt)},L=async(t,n,r)=>c.findById(n)?(b[n]&&(clearTimeout(b[n]),delete b[n],x[n]&&(x[n](!1),delete x[n])),C.value[n]=r,new Promise(i=>{x[n]=i;let a=setTimeout(async()=>{delete x[n],T.value[n]=!0;try{await y(te.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:e,channel:t,property:n,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(I(n,r),i(!0)):(F(n,r),i(!1))}catch{F(n,r),i(!1)}finally{T.value[n]=!1,b[n]===a&&delete b[n]}},et);b[n]=a})):!1,R=async()=>{(e in l.value?l.value[e]:null)?.draft||await a.get({id:e})},z=async()=>{await s.fetch({deviceId:e})},B=async()=>{let t=Object.values(d.value).filter(t=>t.device===e);for(let e of t)await c.fetch({channelId:e.id})},ee=t(()=>{if(u.value.fetching.item.includes(e)||f.value.fetching.items.includes(e))return!0;for(let e of D.value)if(g.value.fetching.items.includes(e.id))return!0;return!1}),U=t(()=>p.value.includes(e)),G=t(()=>{if(!U.value)return!1;for(let e of D.value)if(!v.value.includes(e.id))return!1;return!0});return o(()=>{let e={};for(let t of Object.keys(C.value)){let n=c.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(C.value)){let r=e[t];(r===n||String(r)===String(n))&&F(t)}},{deep:!0}),n(()=>{for(let e of Object.keys(b))clearTimeout(b[e]),delete b[e],x[e]&&(x[e](!1),delete x[e]);for(let e of Object.keys(S))clearTimeout(S[e]),delete S[e]}),{device:E,channels:D,controllableChannels:k,hasControllableProperties:A,isLoading:ee,areChannelsLoaded:U,arePropertiesLoaded:G,fetchDevice:R,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:j,isPropertyWritable:M,getPropertyValue:N,isPropertyLoading:P,setPropertyValue:L}},rt=({deviceId:e})=>{let n=_().getStore(ee),{firstLoad:r,semaphore:i}=m(n);return{controls:t(()=>n.findForDevice(typeof e==`string`?e:e.value)),areLoading:t(()=>i.value.fetching.items.includes(typeof e==`string`?e:e.value)),loaded:t(()=>r.value.includes(typeof e==`string`?e:e.value)),fetchControls:async()=>n.fetch({deviceId:typeof e==`string`?e:e.value})}},it=e=>{let n=j(),i=S(),a=r({}),u=r(!1),d=r(!1),f=r(!1),m=r(void 0),h=r(!1),g=null,_=0,v=t(()=>Object.values(a.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),y=t(()=>{let e=[p.warn,p.error,p.fatal,p.fail];return v.value.filter(t=>e.includes(t.type))}),b=t(()=>y.value.length),x=t(()=>b.value>0),C=async()=>{let t=s(e.deviceId);g=t,_++;let r=_;d.value=!0;try{let{data:e,error:o}=await n.client.GET(`/${c}/${ie}/logs`,{params:{query:{resource:t,limit:50}}});if(g!==t||_!==r)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ae(e);return[t.id,t]}));a.value=t,f.value=!0,u.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else o&&i.error(`Failed to fetch device logs:`,o)}catch(e){g===t&&_===r&&i.error(`Error fetching device logs:`,e)}finally{g===t&&_===r&&(d.value=!1)}},w=async()=>{if(d.value||!u.value||!m.value)return;let t=s(e.deviceId),r=m.value,o=_;d.value=!0;try{let{data:e,error:s}=await n.client.GET(`/${c}/${ie}/logs`,{params:{query:{resource:t,after_id:r,limit:50}}});if(g!==t||_!==o)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=ae(e);return[t.id,t]}));a.value={...a.value,...t},u.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else s&&i.error(`Failed to load more device logs:`,s)}catch(e){g===t&&_===o&&i.error(`Error loading more device logs:`,e)}finally{g===t&&_===o&&(d.value=!1)}},T=async()=>{a.value={},m.value=void 0,u.value=!1,f.value=!1,await C()},E=null;return o(()=>h.value,e=>{E&&=(clearInterval(E),null),e&&(E=setInterval(()=>{d.value||C()},3e3))}),l(()=>{E&&=(clearInterval(E),null)}),o(()=>s(e.deviceId),()=>{T()}),{logs:v,alertLogs:y,alertCount:b,hasAlerts:x,hasMore:u,isLoading:d,loaded:f,live:h,fetchLogs:C,loadMoreLogs:w,refreshLogs:T}};export{Z as A,se as B,je as C,De as D,Oe as E,ge as F,J as H,he as I,me as L,Se as M,ve as N,Ce as O,_e as P,le as R,Ne as S,ke as T,q as U,oe as V,Y as W,ze as _,Qe as a,Fe as b,Ye as c,Ke as d,Ge as f,Be as g,Ve as h,$e as i,be as j,xe as k,qe as l,Ue as m,rt as n,Ze as o,We as p,nt as r,Xe as s,it as t,Je as u,Ie as v,Ae as w,Pe as x,Le as y,ce as z};
|