@fastybird/smart-panel-admin 0.5.0-alpha.2 → 0.6.0-alpha.1
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-DQXmUGYB.js → card-add-form-C-r8AyuF.js} +1 -1
- package/dist/assets/{card-edit-form-C_ueLwAl.js → card-edit-form-DS8HhsYA.js} +1 -1
- package/dist/assets/{common-ODOYsFyB.js → common-KNQoamuF.js} +4 -4
- package/dist/assets/{components-CLcIzP_8.js → components-97GEw4KH.js} +1 -1
- package/dist/assets/{components-DswxKCzv.js → components-ATSIVx3g.js} +1 -1
- package/dist/assets/{components-DuDfTryK.js → components-BxR7ollk.js} +1 -1
- package/dist/assets/{components-B0yDuRWl.js → components-BzYR_npg.js} +1 -1
- package/dist/assets/{components-uhACvBFm.js → components-D2IhLTn-.js} +1 -1
- package/dist/assets/{components-xu2Ecpu3.js → components-DxNCzJ4s.js} +1 -1
- package/dist/assets/{components-Dy1D-m8H.js → components-HmKzAi-6.js} +1 -1
- package/dist/assets/{components-DUJCqruw.js → components-e8yGrgLC.js} +2 -2
- package/dist/assets/{composables-BYBvtJtZ2.js → composables-BvAKC4Ps2.js} +1 -1
- package/dist/assets/{composables-CYtwppqp.js → composables-C3Nl8Aod.js} +1 -1
- package/dist/assets/{composables-ovO3IuNm.js → composables-CWx7LTou.js} +1 -1
- package/dist/assets/{composables-DMWrW6cA.js → composables-CZWb2Een.js} +1 -1
- package/dist/assets/{composables-COtKPd6m.js → composables-CZtEMVRN.js} +1 -1
- package/dist/assets/{composables-V0w_6yLu.js → composables-DnSTlSvu.js} +1 -1
- package/dist/assets/{composables-CyeF6JUD.js → composables-LhZ-WpvP.js} +1 -1
- package/dist/assets/{composables-OVMFuMEO.js → composables-bwop9nog.js} +1 -1
- package/dist/assets/{composables-BdOPVRLy.js → composables-nj4DTXZ_.js} +1 -1
- package/dist/assets/{dashboard-Bh7IoBmK.js → dashboard-SeVv7G4r.js} +2 -2
- package/dist/assets/{dashboard.types-C9xYIAqN.js → dashboard.types-aQINY5EZ.js} +1 -1
- package/dist/assets/{data-source-edit-form-1USzMzsk.js → data-source-edit-form-Bv0UnRrd.js} +1 -1
- package/dist/assets/{drawer-SsHoXCM6.js → drawer-kNUtrbew.js} +1 -1
- package/dist/assets/{index-DIIEtvlc.js → index-CEtTG8Dm.js} +4 -4
- package/dist/assets/{input-number-BcTX03rU.js → input-number-B7GeinaE.js} +1 -1
- package/dist/assets/{integration-config-dialog-BJktCyLq.js → integration-config-dialog-Dbbcplri.js} +1 -1
- package/dist/assets/{layout-config-wkusTAdj.js → layout-config-Cn_g2xtH.js} +1 -1
- package/dist/assets/{layout-default-BYUkR3hs.js → layout-default-CNaYu2G7.js} +1 -1
- package/dist/assets/{layout-lock-C-eqz7Us.js → layout-lock-7o2Fn3_U.js} +1 -1
- package/dist/assets/layout-profile-B49CEYXl.js +1 -0
- package/dist/assets/{layout-profile-CSv2mvny.js → layout-profile-D6yFVude.js} +1 -1
- package/dist/assets/{layout-sign-7JaoeYCx.js → layout-sign-BO8EIPsw.js} +1 -1
- package/dist/assets/layout-sign-Dvib82x_.js +1 -0
- package/dist/assets/{list-data-sources-adjust-BYOPPONj.js → list-data-sources-adjust-D_EvOPLr.js} +1 -1
- package/dist/assets/{list-locations-DLldQrVV.js → list-locations-v2Z1xAj2.js} +1 -1
- package/dist/assets/{list-users-qrVLd1pk.js → list-users-CtX12VnH.js} +1 -1
- package/dist/assets/{logs-entries.transformers-DfCpw1Mg.js → logs-entries.transformers-DSIwBTee.js} +1 -1
- package/dist/assets/{page-configure-BSOS0YWC.js → page-configure-_ruAwvw1.js} +1 -1
- package/dist/assets/{page-configure-C9foGeW1.js → page-configure-ttcyfrkj.js} +1 -1
- package/dist/assets/{pagination-BN2OOlZX.js → pagination-Cxb81UNH.js} +1 -1
- package/dist/assets/{popover-maUqtNv9.js → popover-DnWb4hrl.js} +1 -1
- package/dist/assets/{radio-D90nO0cl.js → radio-sk8UbYqe.js} +1 -1
- package/dist/assets/{scene-add-form-B6aQgGC0.js → scene-add-form-fplOWn54.js} +1 -1
- package/dist/assets/{scene-edit-form-2gyHb7pp.js → scene-edit-form-l74enXwk.js} +1 -1
- package/dist/assets/{select-data-source-plugin-CgCYxWux.js → select-data-source-plugin-Bp9HLkuB.js} +1 -1
- package/dist/assets/{steps-CqRZSdTY.js → steps-BErLQJN_.js} +1 -1
- package/dist/assets/{system-DxZSaAT-.js → system-LW_Jv-av.js} +2 -2
- package/dist/assets/{table-B8jVmQb4.js → table-Dw8tMjO-.js} +1 -1
- package/dist/assets/{tile-detail-e8sF8ITC.js → tile-detail-C1jmxP9U.js} +1 -1
- package/dist/assets/{tile-edit-form-8b25z62v.js → tile-edit-form-BkjdF5Rg.js} +1 -1
- package/dist/assets/{types-il6fmL4i.js → types-Dg-Lxa_X.js} +1 -1
- package/dist/assets/{useBuddyChat-BR1c5D1G.js → useBuddyChat-Q40lWDw6.js} +1 -1
- package/dist/assets/{useDataSources-CQ5RpxTF.js → useDataSources-CCAELaB8.js} +1 -1
- package/dist/assets/{useDevices-BW3E3-_x.js → useDevices-Dq6IpGlM.js} +1 -1
- package/dist/assets/{useGeolocation-B12pka0s.js → useGeolocation-BTmuWFgS.js} +1 -1
- package/dist/assets/{useLocation-C6TegHQd.js → useLocation-B9GpiCOS.js} +1 -1
- package/dist/assets/{usePage-CZkNy5eQ.js → usePage-bInyALHd.js} +1 -1
- package/dist/assets/{usePersonalTokens-DkMIEhh0.js → usePersonalTokens-BjMnj_tW.js} +1 -1
- package/dist/assets/{useSpaces-CwuN3REG.js → useSpaces-BtICJZ-p.js} +1 -1
- package/dist/assets/{view-buddy-chat-CrwcDa3M.js → view-buddy-chat-CV6JXXTT.js} +1 -1
- package/dist/assets/{view-card-add-BHxtttSX.js → view-card-add-D9emYUOP.js} +1 -1
- package/dist/assets/{view-card-edit-DY4LnDlA.js → view-card-edit-BTUALF_H.js} +1 -1
- package/dist/assets/{view-channel-ncXhyIGi.js → view-channel-DLtI49DD.js} +1 -1
- package/dist/assets/{view-channel-add-C-KNpSke.js → view-channel-add-DCiensQS.js} +1 -1
- package/dist/assets/{view-channel-edit-DyorqKCt.js → view-channel-edit-CAhgymZC.js} +1 -1
- package/dist/assets/{view-channel-property-add-CIFJh3ZE.js → view-channel-property-add-CSnML5ne.js} +1 -1
- package/dist/assets/{view-channel-property-edit-CrQTmWxu.js → view-channel-property-edit-wJ_9Xx3A.js} +1 -1
- package/dist/assets/{view-channels-Ol_mozxl.js → view-channels-DIhsDw1d.js} +1 -1
- package/dist/assets/{view-config-module-edit-DacuUceh.js → view-config-module-edit-BNbiA4oj.js} +1 -1
- package/dist/assets/{view-config-modules-N_v2eK_U.js → view-config-modules-sHGClzk-.js} +1 -1
- package/dist/assets/{view-config-plugin-edit-CjlZ3EEe.js → view-config-plugin-edit-Bn1qWnPt.js} +1 -1
- package/dist/assets/{view-config-plugins-bYWa-Ujv.js → view-config-plugins-CaEGcIi_.js} +1 -1
- package/dist/assets/{view-data-source-add-CexuIpgu.js → view-data-source-add-DwuMwtF4.js} +1 -1
- package/dist/assets/{view-data-source-add-DM304vey.js → view-data-source-add-bmNXuCUp.js} +1 -1
- package/dist/assets/{view-data-source-edit-Ca8K4gfX.js → view-data-source-edit-B1x4YE-c.js} +1 -1
- package/dist/assets/{view-data-source-edit-FHNzBHLd.js → view-data-source-edit-hqsziuvF.js} +1 -1
- package/dist/assets/{view-device-4MStawAp.js → view-device-DxoWKShF.js} +1 -1
- package/dist/assets/{view-device-add-B0Lt9OK4.js → view-device-add-BUIBKQ_F.js} +1 -1
- package/dist/assets/{view-device-control-vnzLerf1.js → view-device-control-BvDq2Sch.js} +1 -1
- package/dist/assets/{view-device-edit-DVVrHmS2.js → view-device-edit-CM56r-h_.js} +1 -1
- package/dist/assets/{view-devices-Bpn9DvaU.js → view-devices-DvEwuLix.js} +1 -1
- package/dist/assets/{view-display-BbvkyPbH.js → view-display-BvKmon8y.js} +1 -1
- package/dist/assets/{view-display-edit-CI52n4pj.js → view-display-edit-aB-4FpG7.js} +1 -1
- package/dist/assets/{view-display-tokens-DF6pWwNi.js → view-display-tokens-Dmt7gAKr.js} +1 -1
- package/dist/assets/{view-displays-hc3Dn3Qr.js → view-displays-vwqL7GeD.js} +1 -1
- package/dist/assets/{view-extension-detail-CVm5R10T.js → view-extension-detail-Dbb-72P0.js} +1 -1
- package/dist/assets/{view-extensions-uCxnYjwJ.js → view-extensions-HEcYwLEG.js} +1 -1
- package/dist/assets/{view-location-DBtyd0pi.js → view-location-R_qTTCpq.js} +1 -1
- package/dist/assets/{view-location-add-D3fbqOhD.js → view-location-add-D6oL_iDF.js} +1 -1
- package/dist/assets/{view-location-edit-C3geS5oJ.js → view-location-edit-DYMLPNXm.js} +1 -1
- package/dist/assets/{view-locations-8ZqZDbAk.js → view-locations-DtYdKMY7.js} +1 -1
- package/dist/assets/{view-lock-screen-B9MwbZ7J.js → view-lock-screen-COc39BFi.js} +1 -1
- package/dist/assets/{view-onboarding-Ci9OqPoQ.js → view-onboarding-BdoED5zk.js} +1 -1
- package/dist/assets/{view-page-CUptupIj.js → view-page-_3am-uZD.js} +1 -1
- package/dist/assets/{view-page-add-DLfnWIKK.js → view-page-add-BkGY4jQq.js} +1 -1
- package/dist/assets/{view-page-configure-jPI1gdzu.js → view-page-configure-BR-2Ufh6.js} +1 -1
- package/dist/assets/{view-page-configure-CBMGoYcU.js → view-page-configure-DnV_0Fw2.js} +1 -1
- package/dist/assets/{view-page-data-source-add-CBln54WX.js → view-page-data-source-add-Du7qRr2w.js} +1 -1
- package/dist/assets/{view-page-data-source-edit-9Dldezpi.js → view-page-data-source-edit-F-yjNqnQ.js} +1 -1
- package/dist/assets/{view-page-edit-BH7tMoob.js → view-page-edit-B1iS0rgO.js} +1 -1
- package/dist/assets/{view-page-plugin-D-vtnnCA.js → view-page-plugin-D6sEJ7pA.js} +1 -1
- package/dist/assets/{view-pages-CvkGoSlO.js → view-pages-B_Jonpdh.js} +1 -1
- package/dist/assets/{view-profile-general-Cq6MIsx5.js → view-profile-general-BnsIT9pk.js} +1 -1
- package/dist/assets/{view-profile-security-gyKy2iQC.js → view-profile-security-BAwH1hTb.js} +1 -1
- package/dist/assets/{view-scene-add-COkl_MaE.js → view-scene-add-CJCGBHSG.js} +1 -1
- package/dist/assets/{view-scene-edit-Bq08EufU.js → view-scene-edit-C8tFuxGS.js} +1 -1
- package/dist/assets/{view-scenes-DxNwHqS7.js → view-scenes-Qioh6NPc.js} +1 -1
- package/dist/assets/{view-sign-in-yDDqsso7.js → view-sign-in-CDGg0yGd.js} +1 -1
- package/dist/assets/{view-sign-up-D-jEaa9v.js → view-sign-up-CKqonxBi.js} +1 -1
- package/dist/assets/{view-space-NuALoUGM.js → view-space-DBQDsYtJ.js} +1 -1
- package/dist/assets/{view-space-add-Bq3ktwr8.js → view-space-add-DZ08dpJY.js} +1 -1
- package/dist/assets/{view-space-edit-Dmjg8QeN.js → view-space-edit-BJIWEzd0.js} +1 -1
- package/dist/assets/{view-spaces-CYQKPDfV.js → view-spaces-CHApPjMd.js} +1 -1
- package/dist/assets/{view-spaces-onboarding-CFxbUAb4.js → view-spaces-onboarding-B0j9Ge2h.js} +1 -1
- package/dist/assets/{view-stats-De-kusx5.js → view-stats-BFEGLr_b.js} +1 -1
- package/dist/assets/{view-system-info-vArgYxKA.js → view-system-info-BWOIGrBf.js} +1 -1
- package/dist/assets/{view-system-log-detail-CB_-ytuO.js → view-system-log-detail-k5fJwW4J.js} +1 -1
- package/dist/assets/{view-system-logs-DKGVQZn3.js → view-system-logs-3p_qMEmw.js} +1 -1
- package/dist/assets/{view-tile-add-Cq75xbje.js → view-tile-add-BWUXm3wu.js} +1 -1
- package/dist/assets/{view-tile-add-BIY19wOW.js → view-tile-add-CYKUr310.js} +1 -1
- package/dist/assets/{view-tile-data-source-add-CIX8tkna.js → view-tile-data-source-add-BO88FZ6Y.js} +1 -1
- package/dist/assets/{view-tile-data-source-edit-CW0xFJ2S.js → view-tile-data-source-edit-CzziPJWx.js} +1 -1
- package/dist/assets/{view-tile-edit-CbylTxla.js → view-tile-edit-B4s8h9dh.js} +1 -1
- package/dist/assets/{view-tile-edit-CASH-bTT.js → view-tile-edit-DlFsJyKd.js} +1 -1
- package/dist/assets/{view-tile-edit-DiEvgqjD.js → view-tile-edit-yisehRWY.js} +1 -1
- package/dist/assets/{view-tile-BsLyvePU.js → view-tile-h884MeXW.js} +1 -1
- package/dist/assets/{view-user-add-DvKzPDIS.js → view-user-add-BzySFuUT.js} +1 -1
- package/dist/assets/{view-user-edit-Bbs0gylG.js → view-user-edit-DBXWhLa7.js} +1 -1
- package/dist/assets/{view-users-CLqMdwqb.js → view-users-DJC7iqT6.js} +1 -1
- package/dist/assets/{weather-Cqr91jk4.js → weather-CTRCW2g9.js} +2 -2
- package/dist/assets/{weather-forecast.transformers-BJTdFLSr.js → weather-forecast.transformers-De2256AV.js} +1 -1
- package/dist/index.html +53 -53
- package/package.json +1 -1
- package/dist/assets/layout-profile--lk7ll_B.js +0 -1
- package/dist/assets/layout-sign-CFeVTVnB.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-DECur_0Z.js";import{Nr as e,Xr as t,ci as n,d as r,fi as i,hi as a,mr as o,n as s,si as c,ui as l}from"./icon-with-child-DmQ_XhQy.js";import{Ct as u,Dr as d,Fn as f,Gn as p,Kn as m,Qn as h,Rr as g,Un as _,Va as v,Wn as y,an as b,ar as x,cn as S,d as C,di as w,dr as T,er as E,fr as D,g as O,gn as k,hr as A,ir as j,k as M,mr as N,n as P,p as F,pr as I,s as L,sn as R,tr as z,v as B,w as V,wn as H,x as U}from"./common-ODOYsFyB.js";import{a as W,i as ee,n as G,o as te,r as K}from"./keys-Cm97UJHM.js";import{t as ne}from"./useDevices-BW3E3-_x.js";import{n as re}from"./logs-entries.transformers-DfCpw1Mg.js";var ie=({id:e})=>{let t=V().getStore(K),{data:n,semaphore:r}=v(t);return{channel:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items.includes(`all`):!1),fetchChannel:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},ae=(e={})=>{let{deviceId:t}=e,n=V().getStore(K),{firstLoad:r,semaphore:i}=v(n),a=t===void 0?void 0:typeof t==`string`?o(()=>t):t;return{channels:o(()=>n.findAll().filter(e=>!a?.value||e.device===a.value)),areLoading:o(()=>i.value.fetching.items.includes(a?.value??`all`)?!0:r.value.includes(a?.value??`all`)?!1:i.value.fetching.items.includes(a?.value??`all`)),loaded:o(()=>r.value.includes(a?.value??`all`)),fetchChannels:async()=>{await n.fetch({deviceId:a?.value})}}},oe=z({search:j().optional(),types:p(j()),state:_([`all`,`offline`,`online`]).default(`all`),states:p(h(d)),categories:p(h(T)),enabled:_([`all`,`enabled`,`disabled`]).default(`all`),validation:_([`all`,`valid`,`invalid`]).default(`all`)}),se=z({search:j().optional(),devices:p(j()),categories:p(h(D))}),ce=z({search:j().optional(),channels:p(j()),categories:p(h(I)),permissions:p(h(A)),dataTypes:p(h(N))}),q=f(),J={search:void 0,devices:[],categories:[]},le={by:`name`,dir:`asc`},ue=(e={})=>{let{deviceId:n}=e,r=V().getStore(K),{firstLoad:i,semaphore:a}=v(r),{filters:s,sort:c,pagination:u,reset:d}=C({key:`${b}:channels:list`,filters:{schema:se,defaults:J},sort:{defaults:[le]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==J.search||!(0,q.isEqual)(s.value.devices,J.devices)||!(0,q.isEqual)(s.value.categories,J.categories)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>H(r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.devices.length===0||s.value.devices.includes(e.device))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),y=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),x=async()=>{await r.fetch({deviceId:n})},S=o(()=>a.value.fetching.items.includes(n??`all`)?!0:i.value.includes(n??`all`)?!1:a.value.fetching.items.includes(n??`all`)),w=o(()=>i.value.includes(n??`all`)),T=o(()=>r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{channels:_,channelsPaginated:y,totalRows:T,areLoading:S,loaded:w,fetchChannels:x,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Y=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},X=class extends Y{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},Z=class extends Y{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},de=()=>{let{t:e}=r(),t=O(),n=V().getStore(K),i=e=>n.findById(e);return{remove:async r=>{let a=i(r);if(a===null)throw new Y(`Something went wrong, channel can't be loaded`);w.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 X&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof X&&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}))})}}},fe=({id:e})=>{let t=V().getStore(K);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:chip`}})}},pe={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:!0,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:!0,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}}}},me={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}}}},he={[T.generic]:[],[T.air_conditioner]:[D.cooler,D.heater,D.fan,D.temperature,D.humidity,D.electrical_energy,D.electrical_power,D.leak,D.device_information],[T.air_dehumidifier]:[D.cooler,D.fan,D.temperature,D.humidity,D.electrical_energy,D.electrical_power,D.leak,D.device_information],[T.air_humidifier]:[D.humidity,D.switcher,D.temperature,D.fan,D.electrical_energy,D.electrical_power,D.leak,D.device_information],[T.air_purifier]:[D.fan,D.air_particulate,D.carbon_dioxide,D.carbon_monoxide,D.humidity,D.leak,D.nitrogen_dioxide,D.ozone,D.pressure,D.sulphur_dioxide,D.temperature,D.volatile_organic_compounds,D.electrical_energy,D.electrical_power,D.device_information],[T.alarm]:[D.alarm,D.device_information],[T.camera]:[D.camera,D.motion,D.microphone,D.speaker,D.contact,D.light,D.temperature,D.humidity,D.battery,D.device_information],[T.door]:[D.door,D.lock,D.contact,D.motion,D.battery,D.device_information],[T.doorbell]:[D.doorbell,D.camera,D.lock,D.motion,D.microphone,D.speaker,D.contact,D.light,D.battery,D.device_information],[T.fan]:[D.fan,D.electrical_energy,D.electrical_power,D.device_information],[T.heating_unit]:[D.heater,D.temperature,D.humidity,D.electrical_energy,D.electrical_power,D.device_information],[T.lighting]:[D.light,D.illuminance,D.electrical_energy,D.electrical_power,D.device_information],[T.lock]:[D.lock,D.contact,D.motion,D.battery,D.device_information],[T.media]:[D.media_input,D.media_playback,D.microphone,D.speaker,D.device_information],[T.av_receiver]:[D.media_input,D.media_playback,D.speaker,D.device_information],[T.game_console]:[D.media_playback,D.media_input,D.device_information],[T.projector]:[D.projector,D.speaker,D.media_playback,D.media_input,D.device_information],[T.set_top_box]:[D.media_input,D.media_playback,D.device_information],[T.streaming_service]:[D.media_playback,D.device_information],[T.outlet]:[D.outlet,D.electrical_energy,D.electrical_power,D.device_information],[T.pump]:[D.flow,D.switcher,D.leak,D.pressure,D.electrical_energy,D.electrical_power,D.device_information],[T.robot_vacuum]:[D.robot_vacuum,D.electrical_energy,D.electrical_power,D.leak,D.battery,D.device_information],[T.sensor]:[D.air_particulate,D.battery,D.carbon_dioxide,D.carbon_monoxide,D.contact,D.humidity,D.illuminance,D.leak,D.motion,D.nitrogen_dioxide,D.occupancy,D.ozone,D.pressure,D.smoke,D.sulphur_dioxide,D.temperature,D.volatile_organic_compounds,D.device_information],[T.speaker]:[D.speaker,D.media_input,D.media_playback,D.electrical_energy,D.electrical_power,D.device_information],[T.sprinkler]:[D.valve,D.flow,D.pressure,D.leak,D.humidity,D.electrical_energy,D.electrical_power,D.device_information],[T.switcher]:[D.switcher,D.electrical_energy,D.electrical_power,D.device_information],[T.television]:[D.television,D.speaker,D.media_playback,D.media_input,D.device_information],[T.terminal]:[D.button,D.indicator,D.buzzer,D.illuminance,D.accelerometer,D.temperature,D.contact,D.switcher,D.device_information],[T.thermostat]:[D.thermostat,D.cooler,D.heater,D.temperature,D.humidity,D.contact,D.electrical_energy,D.electrical_power,D.device_information],[T.valve]:[D.valve,D.pressure,D.flow,D.leak,D.battery,D.electrical_energy,D.electrical_power,D.device_information],[T.water_heater]:[D.heater,D.temperature,D.leak,D.electrical_energy,D.electrical_power,D.device_information],[T.window_covering]:[D.window_covering,D.battery,D.electrical_energy,D.electrical_power,D.device_information]},ge=Object.fromEntries(Object.entries(me).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=he[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]})),_e=Object.fromEntries(Object.entries(me).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)}])),ve=Object.fromEntries(Object.entries(pe).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)}])),ye=(e,t)=>{let n=pe[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}},be=({id:e})=>{let t=V(),n=t.getStore(K),r=t.getStore(G),i=e=>n.findById(e),a=e=>ve[e.category]??null;return{canAddAnotherProperty:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o}=a(t)??{required:[],optional:[]},s=[...n,...o],c=r.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:o(()=>{let t=i(e);if(t===null)throw new Y(`Something went wrong, channel can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},xe=z({id:j().uuid().optional(),type:j().trim().nonempty(),device:j().uuid().optional(),category:h(D).default(D.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty(),description:j().trim().transform(e=>e===``?null:e).nullable().optional()}),Se=z({id:j().uuid(),type:j().trim().nonempty(),device:j().uuid(),category:h(D).default(D.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().optional(),description:j().trim().transform(e=>e===``?null:e).nullable().optional()}),Ce=()=>{let e=M(),{enabled:t}=k(),n=[`channelAddForm`,`channelEditForm`],r=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>H(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},we=({type:e})=>{let{getByType:t}=Ce(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Te=({id:e,type:a,deviceId:s})=>{let c=V(),{element:u}=we({type:a}),d=c.getStore(K),{devices:f,fetchDevices:p,areLoading:m}=ne(),{t:h}=r(),g=O(),_=U(),v=l(S.NONE),y,b=o(()=>E.device?f.value.find(e=>e.id===E.device)??null:null),x=o(()=>b.value?d.findForDevice(b.value.id).map(e=>e.category):[]),C=o(()=>b.value?_e[b.value.category]??null:null),w=o(()=>C.value===null?[]:Object.values(D).filter(e=>C.value?.required.includes(e)||C.value?.optional.includes(e)).filter(e=>!x.value.includes(e)||C.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),T=o(()=>f.value.filter(e=>e.type===a).map(e=>({value:e.id,label:e.name}))),E=n({...P(u.value?.schemas?.channelAddFormSchema||xe),id:e,type:a,device:s,category:D.generic,name:``,description:``}),k=F(i(E)),A=l(void 0),j=l(!1),M=async()=>{if(A.value.clearValidate(),!await A.value.validate())throw new Z(`Form not valid`);let t=s??E.device;if(!t)throw new Z(`Missing device identifier`);if(!E.category)throw new Z(`Missing data type definition`);let n=(u.value?.schemas?.channelAddFormSchema||xe).safeParse(E);if(!n.success)throw _.error(`Schema validation failed with:`,n.error),new Z(`Failed to validate create channel model.`);v.value=S.WORKING;let r=h(`devicesModule.messages.channels.notCreated`,{device:E.name});try{await d.add({id:e,deviceId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw v.value=S.ERROR,y=window.setTimeout(N,2e3),e instanceof X&&e.code===422?g.error(e.message):g.error(r),e}return v.value=S.OK,y=window.setTimeout(N,2e3),g.success(h(`devicesModule.messages.channels.created`,{device:E.name})),`added`},N=()=>{window.clearTimeout(y),v.value=S.NONE};return p().catch(()=>{}),t(E,()=>{j.value=!(0,q.isEqual)(i(E),k)}),t(()=>w.value,e=>{e.length&&e[0]&&(E.category=e[0].value,k.category=e[0].value)},{immediate:!0}),{categoriesOptions:w,devicesOptions:T,model:E,formEl:A,formChanged:j,submit:M,clear:N,formResult:v,loadingDevices:m}},Ee=({channel:e,messages:a})=>{let s=V(),{element:c}=we({type:e.type}),u=s.getStore(K),{devices:d,fetchDevices:f,areLoading:p}=ne(),{t:m}=r(),h=O(),g=U(),_=l(S.NONE),v,y=o(()=>d.value.find(t=>t.id===e.device)??null),b=o(()=>y.value?u.findForDevice(y.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),x=o(()=>y.value?_e[y.value.category]??null:null),C=o(()=>x.value===null?[]:Object.values(D).filter(e=>x.value?.required.includes(e)||x.value?.optional.includes(e)).filter(e=>!b.value.includes(e)||x.value?.multiple?.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channels.${e}`)}))),w=o(()=>d.value.map(e=>({value:e.id,label:e.name}))),T=n(e),E=F(i(T)),k=l(void 0),A=l(!1),j=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?m(`devicesModule.messages.channels.notCreated`,{channel:e.name}):m(`devicesModule.messages.channels.notEdited`,{channel:e.name});if(k.value.clearValidate(),!await k.value.validate())throw new Z(`Form not valid`);let r=(c.value?.schemas?.channelEditFormSchema||Se).safeParse(T);if(!r.success)throw g.error(`Schema validation failed with:`,r.error),new Z(`Failed to validate edit channel model.`);_.value=S.WORKING;try{await u.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await u.save({id:e.id,deviceId:e.device})}catch(e){throw _.value=S.ERROR,v=window.setTimeout(M,2e3),e instanceof X&&e.code===422?h.error(e.message):h.error(n),e}return _.value=S.OK,v=window.setTimeout(M,2e3),t?(h.success(m(a&&a.success?a.success:`devicesModule.messages.channels.created`,{channel:e.name})),`added`):(h.success(m(a&&a.success?a.success:`devicesModule.messages.channels.edited`,{channel:e.name})),A.value=!1,E=F(i(T)),`saved`)},M=()=>{window.clearTimeout(v),_.value=S.NONE};return f().catch(()=>{}),t(T,()=>{A.value=!(0,q.isEqual)(i(T),E)}),{categoriesOptions:C,devicesOptions:w,model:T,formEl:k,formChanged:A,submit:j,clear:M,formResult:_,loadingDevices:p}},De=({channelId:e,id:t})=>{let n=V().getStore(G),{data:r,semaphore:i}=v(n);return{property:o(()=>t===null?null:r.value[t]??null),isLoading:o(()=>i.value.fetching.item.includes(t)?!0:(r.value[t]??null)===null?i.value.fetching.items.includes(e)||i.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(r.value[t]??null)?.draft||await n.get({id:t,channelId:e})}}},Oe=({channelId:e})=>{let t=V().getStore(G),{firstLoad:n,semaphore:r}=v(t),i=typeof e==`string`?o(()=>e):e;return{properties:o(()=>t.findAll().filter(e=>!i?.value||e.channel===i.value)),areLoading:o(()=>i.value?r.value.fetching.items.includes(i.value)?!0:n.value.includes(i.value)?!1:r.value.fetching.items.includes(i.value):!1),loaded:o(()=>i.value?n.value.includes(i.value):!1),fetchProperties:async()=>{i.value&&await t.fetch({channelId:i.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},ke={by:`category`,dir:`asc`},Ae=({channelId:e,key:n=`list`})=>{let r=V().getStore(G),{firstLoad:i,semaphore:a}=v(r),{filters:s,sort:c,pagination:u,reset:d}=C({key:`${b}:channels-properties:${n}`,filters:{schema:ce,defaults:Q},sort:{defaults:[ke]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==Q.search||!(0,q.isEqual)(s.value.channels,Q.channels)||!(0,q.isEqual)(s.value.categories,Q.categories)||!(0,q.isEqual)(s.value.permissions,Q.permissions)||!(0,q.isEqual)(s.value.dataTypes,Q.dataTypes)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>H(r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!s.value.search||e.id?.toLowerCase().includes(s.value.search.toLowerCase())||e.name?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.dataTypes.length===0||s.value.dataTypes.includes(e.dataType))&&(s.value.permissions.length===0||e.permissions.some(e=>s.value.permissions.includes(e)))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),y=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),x=async()=>{await r.fetch({channelId:e})},S=o(()=>a.value.fetching.items.includes(e)?!0:i.value.includes(e)?!1:a.value.fetching.items.includes(e)),w=o(()=>i.value.includes(e)),T=o(()=>r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{properties:_,propertiesPaginated:y,totalRows:T,areLoading:S,loaded:w,fetchProperties:x,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},je=()=>{let{t:e}=r(),t=O(),n=V().getStore(G);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new Y(`Something went wrong, channel property can't be loaded`);w.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 X&&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 X&&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}`)}))})}}},Me=({id:e})=>{let t=V().getStore(G);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:tune`}})}},Ne=z({id:j().uuid().optional(),type:j().trim().nonempty(),channel:j().uuid().optional(),category:h(I).default(I.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().nullable(),permissions:p(h(A)),dataType:h(N),format:p(x([j(),x([E(),y()])])).nullable(),invalid:x([j(),E(),m(),y()]),step:x([j(),E()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:m().default(!1),value:x([j(),E(),m(),y()]).optional(),enumValues:p(j()),minValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional()}),Pe=z({id:j().uuid(),type:j().trim().nonempty(),channel:j().uuid(),category:h(I).default(I.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().nullable().optional(),permissions:p(h(A)),dataType:h(N),format:p(x([j(),x([E(),y()])])).nullable(),invalid:x([j(),E(),m(),y()]),step:x([j(),E()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:m().default(!1),value:x([j(),E(),m(),y()]).optional(),enumValues:p(j()),minValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional()}),Fe=()=>{let e=M(),{enabled:t}=k(),n=[`channelPropertyAddForm`,`channelPropertyEditForm`],r=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>H(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Ie=({type:e})=>{let{getByType:t}=Fe(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Le=({id:e,type:a,channelId:s})=>{let c=V(),{element:u}=Ie({type:a}),d=c.getStore(G),{channels:f,fetchChannels:p,areLoading:m}=ae(),{t:h}=r(),g=O(),_=U(),v=l(S.NONE),y,b=o(()=>j.channel?f.value.find(e=>e.id===j.channel)??null:null),x=o(()=>b.value?d.findForChannel(b.value.id).map(e=>e.category):[]),C=o(()=>b.value?ve[b.value.category]??null:null),w=o(()=>C.value===null?[]:Object.values(I).filter(e=>C.value?.required.includes(e)||C.value?.optional.includes(e)).filter(e=>!x.value.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channelsProperties.${e}`)}))),T=o(()=>f.value.map(e=>({value:e.id,label:e.name}))),E=Object.values(A).map(e=>({value:e,label:h(`devicesModule.permissions.${e}`)})),k=Object.values(N).map(e=>({value:e,label:h(`devicesModule.dataTypes.${e}`)})),j=n({...P(u.value?.schemas?.channelPropertyAddFormSchema||Ne),id:e,type:a,channel:s,category:I.generic,name:``,permissions:[],dataType:N.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),M=F(i(j)),L=l(void 0),R=l(!1),z=async()=>{if(L.value.clearValidate(),!await L.value.validate())throw new Z(`Form not valid`);let t=s??j.channel;if(!t)throw new Z(`Missing channel identifier`);if(j.name===``&&(j.name=null),!j.category)throw new Z(`Missing data type definition`);j.dataType===N.enum?j.format=j.enumValues:[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(j.dataType)&&(j.format=[typeof j.minValue==`string`&&j.minValue!==``?Number(j.minValue):typeof j.minValue==`number`?j.minValue:null,typeof j.maxValue==`string`&&j.maxValue!==``?Number(j.maxValue):typeof j.maxValue==`number`?j.maxValue:null]),j.enterValue||delete j.value;let n=(u.value?.schemas?.channelPropertyAddFormSchema||Ne).safeParse(j);if(!n.success)throw _.error(`Schema validation failed with:`,n.error),new Z(`Failed to validate create channel property model.`);v.value=S.WORKING;let r=h(`devicesModule.messages.channelsProperties.notCreated`,{device:j.name});try{await d.add({id:e,channelId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw v.value=S.ERROR,y=window.setTimeout(B,2e3),e instanceof X&&e.code===422?g.error(e.message):g.error(r),e}return v.value=S.OK,y=window.setTimeout(B,2e3),g.success(h(`devicesModule.messages.channelsProperties.created`,{device:j.name})),`added`},B=()=>{window.clearTimeout(y),v.value=S.NONE};return p().catch(()=>{}),t(j,()=>{R.value=!(0,q.isEqual)(i(j),M)}),t(()=>j.category,e=>{let t=ye(b.value?.category??D.generic,e);t&&(M.permissions=t.permissions,M.dataType=t.data_type,j.permissions=t.permissions,j.dataType=t.data_type,t.invalid!==void 0&&(M.invalid=t.invalid,j.invalid=t.invalid),t.step!==void 0&&(M.step=t.step,j.step=t.step),M.dataType===N.enum?(M.enumValues=t.format??[],M.minValue=void 0,M.maxValue=void 0,j.enumValues=t.format??[],j.minValue=void 0,j.maxValue=void 0):[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(j.dataType)?(M.enumValues=[],M.minValue=t.format?.[0],M.maxValue=t.format?.[1],j.enumValues=[],j.minValue=t.format?.[0],j.maxValue=t.format?.[1]):(M.enumValues=[],M.minValue=void 0,M.maxValue=void 0,j.enumValues=[],j.minValue=void 0,j.maxValue=void 0),R.value=!(0,q.isEqual)(i(j),M))},{immediate:!0}),t(()=>w.value,e=>{e.length&&e[0]&&(j.category=e[0].value,M.category=e[0].value)},{immediate:!0}),{categoriesOptions:w,channelsOptions:T,permissionsOptions:E,dataTypesOptions:k,model:j,formEl:L,formChanged:R,submit:z,clear:B,formResult:v,loadingChannels:m}},Re=({property:e,messages:a})=>{let s=V(),{element:c}=Ie({type:e.type}),u=s.getStore(G),{channels:d,fetchChannels:f,areLoading:p}=ae(),{t:m}=r(),h=O(),g=U(),_=l(S.NONE),v,y=[],b,x;e.dataType===N.enum?y=e.format?e.format.map(e=>e?.toString()||``):[]:[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(e.dataType)&&Array.isArray(e.format)&&e.format.length===2&&(b=e.format[0],x=e.format[1]);let C=o(()=>d.value.find(t=>t.id===e.channel)??null),w=o(()=>C.value?u.findForChannel(C.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),T=o(()=>C.value?ve[C.value.category]??null:null),E=o(()=>T.value===null?[]:Object.values(I).filter(e=>T.value?.required.includes(e)||T.value?.optional.includes(e)).filter(e=>!w.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),D=o(()=>d.value.map(e=>({value:e.id,label:e.name}))),k=Object.values(A).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),j=Object.values(N).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),M=n({...e,format:i(e.format),value:e.value?.value??null,enumValues:y,minValue:b,maxValue:x,enterValue:!1}),P=F(i(M)),L=l(void 0),R=l(!1),z=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)});if(L.value.clearValidate(),!await L.value.validate())throw new Z(`Form not valid`);M.name===``&&(M.name=null),e.dataType===N.enum?M.format=M.enumValues:[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(e.dataType)&&(M.format=[M.minValue??null,M.maxValue??null]),M.enterValue||delete M.value;let r=(c.value?.schemas?.channelPropertyEditFormSchema||Pe).safeParse(M);if(!r.success)throw g.error(`Schema validation failed with:`,r.error),new Z(`Failed to validate edit channel property model.`);_.value=S.WORKING;try{await u.edit({id:e.id,channelId:e.channel,data:{...r.data,type:e.type}}),e.draft&&await u.save({id:e.id,channelId:e.channel})}catch(e){throw _.value=S.ERROR,v=window.setTimeout(B,2e3),e instanceof X&&e.code===422?h.error(e.message):h.error(n),e}return _.value=S.OK,v=window.setTimeout(B,2e3),t?(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.created`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),`added`):(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.edited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),R.value=!1,P=F(i(M)),`saved`)},B=()=>{window.clearTimeout(v),_.value=S.NONE};return f().catch(()=>{}),t(M,()=>{R.value=!(0,q.isEqual)(i(M),P)}),{categoriesOptions:E,channelsOptions:D,permissionsOptions:k,dataTypesOptions:j,model:M,formEl:L,formChanged:R,submit:z,clear:B,formResult:_,loadingChannels:p}},ze=({id:e})=>{let t=V().getStore(W),{data:n,semaphore:r}=v(t);return{device:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items:!1),fetchDevice:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},Be={by:`name`,dir:`asc`},Ve=()=>{let e=V(),n=e.getStore(W),r=e.getStore(te),{firstLoad:i,semaphore:a}=v(n),{filters:s,sort:c,pagination:u,reset:f}=C({key:`${b}:devices:list`,filters:{schema:oe,defaults:$},sort:{defaults:[Be]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),p=o(()=>s.value.search!==$.search||!(0,q.isEqual)(s.value.types,$.types)||s.value.state!==$.state||!(0,q.isEqual)(s.value.states,$.states)||!(0,q.isEqual)(s.value.categories,$.categories)||!(0,q.isEqual)(s.value.enabled,$.enabled)||s.value.validation!==$.validation),m=l(u.value.size||10),h=l(u.value.page||1),g=l(c.value.length>0?c.value[0]?.by:void 0),_=l(c.value.length>0?c.value[0]?.dir??null:null),y=e=>r.findById(e)?.isValid??null,x=o(()=>H(n.findAll().filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.types.length===0||s.value.types.includes(e.type))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.enabled===`all`||s.value.enabled===`enabled`&&e.enabled||s.value.enabled===`disabled`&&!e.enabled)&&(s.value.states.length===0||s.value.states.includes(e.status?.status??d.unknown))&&(s.value.state===`all`||s.value.state===`online`&&[d.ready,d.connected,d.running].includes(e.status.status)||s.value.state===`offline`&&[d.disconnected,d.stopped,d.lost,d.unknown].includes(e.status.status))&&(s.value.validation===`all`||s.value.validation===`valid`&&y(e.id)===!0||s.value.validation===`invalid`&&y(e.id)===!1)),[e=>g.value===`state`?e.status?.status??d.unknown:e[g.value]??``],[_.value===`asc`?`asc`:`desc`])),S=o(()=>{let e=(h.value-1)*m.value,t=e+m.value;return x.value.slice(e,t)}),w=async()=>{await n.fetch()},T=o(()=>a.value.fetching.items||!i.value),E=o(()=>i.value),D=o(()=>n.findAll().filter(e=>!e.draft).length);return t(()=>u.value,e=>{h.value=e.page??1,m.value=e.size??10},{deep:!0}),t(()=>h.value,e=>{u.value.page=e}),t(()=>m.value,e=>{u.value.size=e}),t(()=>_.value,e=>{g.value===void 0||e===null?c.value=[]:c.value=[{by:g.value,dir:e}]}),t(()=>g.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:_.value}]}),{devices:x,devicesPaginated:S,totalRows:D,areLoading:T,loaded:E,fetchDevices:w,filters:s,filtersActive:p,paginateSize:m,paginatePage:h,sortBy:g,sortDir:_,resetFilter:f}},He=()=>{let{t:e}=r(),t=O(),n=V().getStore(W);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new Y(`Something went wrong, device can't be loaded`);w.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 X&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof X&&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 w.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`});let i=0,a=0;for(let e of r)try{await n.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkRemoved`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:a}))}catch{}},bulkEnable:async r=>{if(r.length!==0)try{await w.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`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!0}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkEnabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkEnableCanceled`))}},bulkDisable:async r=>{if(r.length!==0)try{await w.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`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!1}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkDisabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkDisableCanceled`))}}}},Ue=({id:e})=>{let t=V().getStore(W);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:devices`}})}},We=({id:e})=>{let t=V(),n=t.getStore(W),r=t.getStore(K),i=e=>n.findById(e),a=e=>_e[e.category]??null;return{canAddAnotherChannel:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o,multiple:s}=a(t)??{required:[],optional:[]},c=[...n,...o],l=r.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:o(()=>{let t=i(e);if(t===null)throw new Y(`Something went wrong, device can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},Ge=z({id:j().uuid().optional(),type:j().trim().nonempty(),category:h(T).default(T.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty(),description:j().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:m().default(!0).optional()}),Ke=z({id:j().uuid(),type:j().trim().nonempty(),category:h(T).default(T.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().optional(),description:j().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:m().optional(),roomId:j().uuid().nullable().optional()}),qe=()=>{let e=M(),{enabled:t}=k(),n=[`deviceAddForm`,`deviceEditForm`],r=[`deviceSchema`,`deviceAddFormSchema`,`deviceEditFormSchema`,`deviceCreateReqSchema`,`deviceUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>H(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Je=({type:e})=>{let{getByType:t}=qe(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Ye=({id:e,type:a})=>{let o=V(),{element:s}=Je({type:a}),c=o.getStore(W),{t:u}=r(),d=O(),f=U(),p=l(S.NONE),m,h=Object.values(T).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n({...P(s.value?.schemas?.deviceAddFormSchema||Ge),id:e,type:a,category:T.generic,name:``,description:``}),_=F(i(g)),v=l(void 0),y=l(!1),b=async()=>{if(v.value.clearValidate(),!await v.value.validate())throw new Z(`Form not valid`);let t=(s.value?.schemas?.deviceAddFormSchema||Ge).safeParse(g);if(!t.success)throw f.error(`Schema validation failed with:`,t.error),new Z(`Failed to validate create device model.`);p.value=S.WORKING;let n=u(`devicesModule.messages.devices.notCreated`,{device:g.name});try{await c.add({id:e,draft:!1,data:{...t.data,type:a}})}catch(e){throw p.value=S.ERROR,m=window.setTimeout(x,2e3),e instanceof X&&e.code===422?d.error(e.message):d.error(n),e}return p.value=S.OK,m=window.setTimeout(x,2e3),d.success(u(`devicesModule.messages.devices.created`,{device:g.name})),`added`},x=()=>{window.clearTimeout(m),p.value=S.NONE};return t(g,()=>{y.value=!(0,q.isEqual)(i(g),_)}),{categoriesOptions:h,model:g,formEl:v,formChanged:y,submit:b,clear:x,formResult:p}},Xe=({device:e,messages:a})=>{let o=V(),{element:s}=Je({type:e.type}),c=o.getStore(W),{t:u}=r(),d=O(),f=U(),p=l(S.NONE),m,h=Object.values(T).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n(e),_=F(i(g)),v=l(void 0),y=l(!1),b=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?u(`devicesModule.messages.devices.notCreated`,{device:e.name}):u(`devicesModule.messages.devices.notEdited`,{device:e.name});if(v.value.clearValidate(),!await v.value.validate())throw new Z(`Form not valid`);let r=(s.value?.schemas?.deviceEditFormSchema||Ke).safeParse(g);if(!r.success)throw f.error(`Schema validation failed with:`,r.error),new Z(`Failed to validate edit device model.`);p.value=S.WORKING;try{await c.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await c.save({id:e.id})}catch(e){throw p.value=S.ERROR,m=window.setTimeout(x,2e3),e instanceof X&&e.code===422?d.error(e.message):d.error(n),e}return p.value=S.OK,m=window.setTimeout(x,2e3),t?(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.created`,{device:e.name})),`added`):(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.edited`,{device:e.name})),y.value=!1,_=F(i(g)),`saved`)},x=()=>{window.clearTimeout(m),p.value=S.NONE};return t(g,()=>{y.value=!(0,q.isEqual)(i(g),_)}),{categoriesOptions:h,model:g,formEl:v,formChanged:y,submit:b,clear:x,formResult:p}},Ze=()=>{let e=V().getStore(te),{data:t,semaphore:n,firstLoad:r}=v(e);return{validation:o(()=>t.value),summary:o(()=>t.value?.summary??null),invalidDevices:o(()=>t.value?t.value.devices.filter(e=>!e.isValid):[]),isLoading:o(()=>n.value.fetching.items),isLoaded:o(()=>r.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}}},Qe=({id:e})=>{let t=V().getStore(te),{semaphore:n}=v(t);return{validation:o(()=>t.findById(e)),isValid:o(()=>{let n=t.findById(e);return n?n.isValid:null}),issues:o(()=>{let n=t.findById(e);return n?n.issues:[]}),errorCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`error`).length:0}),warningCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:o(()=>n.value.fetching.item.includes(e)),fetchValidation:async()=>{await t.get({id:e})}}},$e=300,et=1e4,tt=({id:n})=>{let r=V(),i=r.getStore(W),a=r.getStore(K),s=r.getStore(G),{data:c,semaphore:u}=v(i),{data:d,semaphore:f,firstLoad:p}=v(a),{semaphore:m,firstLoad:h}=v(s),{sendCommand:g}=L(),_={},y={},b={},x=l({}),S=l({}),C=o(()=>n===null?null:c.value[n]??null),w=o(()=>Object.values(d.value).filter(e=>e.device===n&&e.category!==D.device_information)),T=o(()=>w.value.filter(e=>s.findForChannel(e.id).some(e=>e.permissions.includes(A.rw)||e.permissions.includes(A.wo)))),E=o(()=>T.value.length>0),O=e=>s.findForChannel(e),k=e=>e.permissions.includes(A.rw)||e.permissions.includes(A.wo),j=e=>{let t=x.value[e];return t===void 0?s.findById(e)?.value?.value??null:t},M=e=>S.value[e]??!1,N=(e,t)=>{if(t!==void 0){let n=x.value[e];if(n!==t&&String(n)!==String(t))return}delete x.value[e],b[e]&&(clearTimeout(b[e]),delete b[e])},P=(e,t)=>{b[e]&&clearTimeout(b[e]),b[e]=setTimeout(()=>{let n=x.value[e];(n===t||String(n)===String(t))&&delete x.value[e],delete b[e]},et)},F=async(e,t,r)=>s.findById(t)?(_[t]&&(clearTimeout(_[t]),delete _[t],y[t]&&(y[t](!1),delete y[t])),x.value[t]=r,new Promise(i=>{y[t]=i;let a=setTimeout(async()=>{delete y[t],S.value[t]=!0;try{await g(R.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:n,channel:e,property:t,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(P(t,r),i(!0)):(N(t,r),i(!1))}catch{N(t,r),i(!1)}finally{S.value[t]=!1,_[t]===a&&delete _[t]}},$e);_[t]=a})):!1,I=async()=>{(n in c.value?c.value[n]:null)?.draft||await i.get({id:n})},z=async()=>{await a.fetch({deviceId:n})},B=async()=>{let e=Object.values(d.value).filter(e=>e.device===n);for(let t of e)await s.fetch({channelId:t.id})},H=o(()=>{if(u.value.fetching.item.includes(n)||f.value.fetching.items.includes(n))return!0;for(let e of w.value)if(m.value.fetching.items.includes(e.id))return!0;return!1}),U=o(()=>p.value.includes(n)),ee=o(()=>{if(!U.value)return!1;for(let e of w.value)if(!h.value.includes(e.id))return!1;return!0});return t(()=>{let e={};for(let t of Object.keys(x.value)){let n=s.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(x.value)){let r=e[t];(r===n||String(r)===String(n))&&N(t)}},{deep:!0}),e(()=>{for(let e of Object.keys(_))clearTimeout(_[e]),delete _[e],y[e]&&(y[e](!1),delete y[e]);for(let e of Object.keys(b))clearTimeout(b[e]),delete b[e]}),{device:C,channels:w,controllableChannels:T,hasControllableProperties:E,isLoading:H,areChannelsLoaded:U,arePropertiesLoaded:ee,fetchDevice:I,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:O,isPropertyWritable:k,getPropertyValue:j,isPropertyLoading:M,setPropertyValue:F}},nt=({deviceId:e})=>{let t=V().getStore(ee),{firstLoad:n,semaphore:r}=v(t);return{controls:o(()=>t.findForDevice(e)),areLoading:o(()=>r.value.fetching.items.includes(e)),loaded:o(()=>n.value.includes(e)),fetchControls:async()=>t.fetch({deviceId:e})}},rt=e=>{let n=B(),r=U(),i=l({}),d=l(!1),f=l(!1),p=l(!1),m=l(void 0),h=l(!1),_=null,v=0,y=o(()=>Object.values(i.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),b=o(()=>{let e=[g.warn,g.error,g.fatal,g.fail];return y.value.filter(t=>e.includes(t.type))}),x=o(()=>b.value.length),S=o(()=>x.value>0),C=async()=>{let t=a(e.deviceId);_=t,v++;let o=v;f.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${u}/logs`,{params:{query:{resource:t,limit:50}}});if(_!==t||v!==o)return;e===void 0?a&&r.error(`Failed to fetch device logs:`,a):(i.value=Object.fromEntries(e.data.map(e=>{let t=re(e);return[t.id,t]})),p.value=!0,d.value=e.metadata.has_more,m.value=e.metadata.next_cursor)}catch(e){_===t&&v===o&&r.error(`Error fetching device logs:`,e)}finally{_===t&&v===o&&(f.value=!1)}},w=async()=>{if(f.value||!d.value||!m.value)return;let t=a(e.deviceId),o=m.value,c=v;f.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${u}/logs`,{params:{query:{resource:t,after_id:o,limit:50}}});if(_!==t||v!==c)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=re(e);return[t.id,t]}));i.value={...i.value,...t},d.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else a&&r.error(`Failed to load more device logs:`,a)}catch(e){_===t&&v===c&&r.error(`Error loading more device logs:`,e)}finally{_===t&&v===c&&(f.value=!1)}},T=async()=>{i.value={},m.value=void 0,d.value=!1,p.value=!1,await C()},E=null;return t(()=>h.value,e=>{E&&=(clearInterval(E),null),e&&(E=setInterval(()=>{f.value||C()},3e3))}),c(()=>{E&&=(clearInterval(E),null)}),t(()=>a(e.deviceId),()=>{T()}),{logs:y,alertLogs:b,alertCount:x,hasAlerts:S,hasMore:d,isLoading:f,loaded:p,live:h,fetchLogs:C,loadMoreLogs:w,refreshLogs:T}};export{be as A,ie as B,je as C,Ee as D,De as E,X as F,Y as I,Z as L,ye as M,fe as N,Te as O,de as P,ue as R,Me as S,Oe as T,Re as _,Ze as a,Ne as b,Je as c,Ke as d,We as f,ze as g,Ve as h,Qe as i,ge as j,Ce as k,qe as l,He as m,nt as n,Xe as o,Ue as p,tt as r,Ye as s,rt as t,Ge as u,Le as v,Ae as w,Pe as x,Fe as y,ae as z};
|
|
1
|
+
import"./chunk-DECur_0Z.js";import{Nr as e,Xr as t,ci as n,d as r,fi as i,hi as a,mr as o,n as s,si as c,ui as l}from"./icon-with-child-DmQ_XhQy.js";import{Ct as u,Dr as d,Fn as f,Gn as p,Kn as m,Qn as h,Rr as g,Un as _,Va as v,Wn as y,an as b,ar as x,cn as S,d as C,di as w,dr as T,er as E,fr as D,g as O,gn as k,hr as A,ir as j,k as M,mr as N,n as P,p as F,pr as I,s as L,sn as R,tr as z,v as B,w as V,wn as H,x as U}from"./common-KNQoamuF.js";import{a as W,i as ee,n as G,o as te,r as K}from"./keys-Cm97UJHM.js";import{t as ne}from"./useDevices-Dq6IpGlM.js";import{n as re}from"./logs-entries.transformers-DSIwBTee.js";var ie=({id:e})=>{let t=V().getStore(K),{data:n,semaphore:r}=v(t);return{channel:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items.includes(`all`):!1),fetchChannel:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},ae=(e={})=>{let{deviceId:t}=e,n=V().getStore(K),{firstLoad:r,semaphore:i}=v(n),a=t===void 0?void 0:typeof t==`string`?o(()=>t):t;return{channels:o(()=>n.findAll().filter(e=>!a?.value||e.device===a.value)),areLoading:o(()=>i.value.fetching.items.includes(a?.value??`all`)?!0:r.value.includes(a?.value??`all`)?!1:i.value.fetching.items.includes(a?.value??`all`)),loaded:o(()=>r.value.includes(a?.value??`all`)),fetchChannels:async()=>{await n.fetch({deviceId:a?.value})}}},oe=z({search:j().optional(),types:p(j()),state:_([`all`,`offline`,`online`]).default(`all`),states:p(h(d)),categories:p(h(T)),enabled:_([`all`,`enabled`,`disabled`]).default(`all`),validation:_([`all`,`valid`,`invalid`]).default(`all`)}),se=z({search:j().optional(),devices:p(j()),categories:p(h(D))}),ce=z({search:j().optional(),channels:p(j()),categories:p(h(I)),permissions:p(h(A)),dataTypes:p(h(N))}),q=f(),J={search:void 0,devices:[],categories:[]},le={by:`name`,dir:`asc`},ue=(e={})=>{let{deviceId:n}=e,r=V().getStore(K),{firstLoad:i,semaphore:a}=v(r),{filters:s,sort:c,pagination:u,reset:d}=C({key:`${b}:channels:list`,filters:{schema:se,defaults:J},sort:{defaults:[le]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==J.search||!(0,q.isEqual)(s.value.devices,J.devices)||!(0,q.isEqual)(s.value.categories,J.categories)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>H(r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.devices.length===0||s.value.devices.includes(e.device))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),y=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),x=async()=>{await r.fetch({deviceId:n})},S=o(()=>a.value.fetching.items.includes(n??`all`)?!0:i.value.includes(n??`all`)?!1:a.value.fetching.items.includes(n??`all`)),w=o(()=>i.value.includes(n??`all`)),T=o(()=>r.findAll().filter(e=>!n||e.device===n).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{channels:_,channelsPaginated:y,totalRows:T,areLoading:S,loaded:w,fetchChannels:x,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},Y=class extends Error{exception;constructor(e,t=null){super(e),this.name=`DevicesException`,this.exception=t}},X=class extends Y{code;constructor(e,t=null,n=null){super(e,n),this.name=`DevicesApiException`,this.code=t}},Z=class extends Y{constructor(e,t=null){super(e,t),this.name=`DevicesValidationException`}},de=()=>{let{t:e}=r(),t=O(),n=V().getStore(K),i=e=>n.findById(e);return{remove:async r=>{let a=i(r);if(a===null)throw new Y(`Something went wrong, channel can't be loaded`);w.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 X&&n.code===404){let n=e(`devicesModule.messages.channels.notFound`,{channel:a.name});t.error(n)}else if(n instanceof X&&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}))})}}},fe=({id:e})=>{let t=V().getStore(K);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:chip`}})}},pe={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:!0,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:!0,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}}}},me={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}}}},he={[T.generic]:[],[T.air_conditioner]:[D.cooler,D.heater,D.fan,D.temperature,D.humidity,D.electrical_energy,D.electrical_power,D.leak,D.device_information],[T.air_dehumidifier]:[D.cooler,D.fan,D.temperature,D.humidity,D.electrical_energy,D.electrical_power,D.leak,D.device_information],[T.air_humidifier]:[D.humidity,D.switcher,D.temperature,D.fan,D.electrical_energy,D.electrical_power,D.leak,D.device_information],[T.air_purifier]:[D.fan,D.air_particulate,D.carbon_dioxide,D.carbon_monoxide,D.humidity,D.leak,D.nitrogen_dioxide,D.ozone,D.pressure,D.sulphur_dioxide,D.temperature,D.volatile_organic_compounds,D.electrical_energy,D.electrical_power,D.device_information],[T.alarm]:[D.alarm,D.device_information],[T.camera]:[D.camera,D.motion,D.microphone,D.speaker,D.contact,D.light,D.temperature,D.humidity,D.battery,D.device_information],[T.door]:[D.door,D.lock,D.contact,D.motion,D.battery,D.device_information],[T.doorbell]:[D.doorbell,D.camera,D.lock,D.motion,D.microphone,D.speaker,D.contact,D.light,D.battery,D.device_information],[T.fan]:[D.fan,D.electrical_energy,D.electrical_power,D.device_information],[T.heating_unit]:[D.heater,D.temperature,D.humidity,D.electrical_energy,D.electrical_power,D.device_information],[T.lighting]:[D.light,D.illuminance,D.electrical_energy,D.electrical_power,D.device_information],[T.lock]:[D.lock,D.contact,D.motion,D.battery,D.device_information],[T.media]:[D.media_input,D.media_playback,D.microphone,D.speaker,D.device_information],[T.av_receiver]:[D.media_input,D.media_playback,D.speaker,D.device_information],[T.game_console]:[D.media_playback,D.media_input,D.device_information],[T.projector]:[D.projector,D.speaker,D.media_playback,D.media_input,D.device_information],[T.set_top_box]:[D.media_input,D.media_playback,D.device_information],[T.streaming_service]:[D.media_playback,D.device_information],[T.outlet]:[D.outlet,D.electrical_energy,D.electrical_power,D.device_information],[T.pump]:[D.flow,D.switcher,D.leak,D.pressure,D.electrical_energy,D.electrical_power,D.device_information],[T.robot_vacuum]:[D.robot_vacuum,D.electrical_energy,D.electrical_power,D.leak,D.battery,D.device_information],[T.sensor]:[D.air_particulate,D.battery,D.carbon_dioxide,D.carbon_monoxide,D.contact,D.humidity,D.illuminance,D.leak,D.motion,D.nitrogen_dioxide,D.occupancy,D.ozone,D.pressure,D.smoke,D.sulphur_dioxide,D.temperature,D.volatile_organic_compounds,D.device_information],[T.speaker]:[D.speaker,D.media_input,D.media_playback,D.electrical_energy,D.electrical_power,D.device_information],[T.sprinkler]:[D.valve,D.flow,D.pressure,D.leak,D.humidity,D.electrical_energy,D.electrical_power,D.device_information],[T.switcher]:[D.switcher,D.electrical_energy,D.electrical_power,D.device_information],[T.television]:[D.television,D.speaker,D.media_playback,D.media_input,D.device_information],[T.terminal]:[D.button,D.indicator,D.buzzer,D.illuminance,D.accelerometer,D.temperature,D.contact,D.switcher,D.device_information],[T.thermostat]:[D.thermostat,D.cooler,D.heater,D.temperature,D.humidity,D.contact,D.electrical_energy,D.electrical_power,D.device_information],[T.valve]:[D.valve,D.pressure,D.flow,D.leak,D.battery,D.electrical_energy,D.electrical_power,D.device_information],[T.water_heater]:[D.heater,D.temperature,D.leak,D.electrical_energy,D.electrical_power,D.device_information],[T.window_covering]:[D.window_covering,D.battery,D.electrical_energy,D.electrical_power,D.device_information]},ge=Object.fromEntries(Object.entries(me).map(([e,t])=>{let n=Object.values(t.channels).map(e=>e.category),r=he[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]})),_e=Object.fromEntries(Object.entries(me).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)}])),ve=Object.fromEntries(Object.entries(pe).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)}])),ye=(e,t)=>{let n=pe[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}},be=({id:e})=>{let t=V(),n=t.getStore(K),r=t.getStore(G),i=e=>n.findById(e),a=e=>ve[e.category]??null;return{canAddAnotherProperty:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o}=a(t)??{required:[],optional:[]},s=[...n,...o],c=r.findForChannel(t.id).map(e=>e.category);return s.filter(e=>!c.includes(e)).length>0}),missingRequiredProperties:o(()=>{let t=i(e);if(t===null)throw new Y(`Something went wrong, channel can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForChannel(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},xe=z({id:j().uuid().optional(),type:j().trim().nonempty(),device:j().uuid().optional(),category:h(D).default(D.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty(),description:j().trim().transform(e=>e===``?null:e).nullable().optional()}),Se=z({id:j().uuid(),type:j().trim().nonempty(),device:j().uuid(),category:h(D).default(D.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().optional(),description:j().trim().transform(e=>e===``?null:e).nullable().optional()}),Ce=()=>{let e=M(),{enabled:t}=k(),n=[`channelAddForm`,`channelEditForm`],r=[`channelSchema`,`channelAddFormSchema`,`channelEditFormSchema`,`channelCreateReqSchema`,`channelUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>H(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},we=({type:e})=>{let{getByType:t}=Ce(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Te=({id:e,type:a,deviceId:s})=>{let c=V(),{element:u}=we({type:a}),d=c.getStore(K),{devices:f,fetchDevices:p,areLoading:m}=ne(),{t:h}=r(),g=O(),_=U(),v=l(S.NONE),y,b=o(()=>E.device?f.value.find(e=>e.id===E.device)??null:null),x=o(()=>b.value?d.findForDevice(b.value.id).map(e=>e.category):[]),C=o(()=>b.value?_e[b.value.category]??null:null),w=o(()=>C.value===null?[]:Object.values(D).filter(e=>C.value?.required.includes(e)||C.value?.optional.includes(e)).filter(e=>!x.value.includes(e)||C.value?.multiple?.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channels.${e}`)}))),T=o(()=>f.value.filter(e=>e.type===a).map(e=>({value:e.id,label:e.name}))),E=n({...P(u.value?.schemas?.channelAddFormSchema||xe),id:e,type:a,device:s,category:D.generic,name:``,description:``}),k=F(i(E)),A=l(void 0),j=l(!1),M=async()=>{if(A.value.clearValidate(),!await A.value.validate())throw new Z(`Form not valid`);let t=s??E.device;if(!t)throw new Z(`Missing device identifier`);if(!E.category)throw new Z(`Missing data type definition`);let n=(u.value?.schemas?.channelAddFormSchema||xe).safeParse(E);if(!n.success)throw _.error(`Schema validation failed with:`,n.error),new Z(`Failed to validate create channel model.`);v.value=S.WORKING;let r=h(`devicesModule.messages.channels.notCreated`,{device:E.name});try{await d.add({id:e,deviceId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw v.value=S.ERROR,y=window.setTimeout(N,2e3),e instanceof X&&e.code===422?g.error(e.message):g.error(r),e}return v.value=S.OK,y=window.setTimeout(N,2e3),g.success(h(`devicesModule.messages.channels.created`,{device:E.name})),`added`},N=()=>{window.clearTimeout(y),v.value=S.NONE};return p().catch(()=>{}),t(E,()=>{j.value=!(0,q.isEqual)(i(E),k)}),t(()=>w.value,e=>{e.length&&e[0]&&(E.category=e[0].value,k.category=e[0].value)},{immediate:!0}),{categoriesOptions:w,devicesOptions:T,model:E,formEl:A,formChanged:j,submit:M,clear:N,formResult:v,loadingDevices:m}},Ee=({channel:e,messages:a})=>{let s=V(),{element:c}=we({type:e.type}),u=s.getStore(K),{devices:d,fetchDevices:f,areLoading:p}=ne(),{t:m}=r(),h=O(),g=U(),_=l(S.NONE),v,y=o(()=>d.value.find(t=>t.id===e.device)??null),b=o(()=>y.value?u.findForDevice(y.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),x=o(()=>y.value?_e[y.value.category]??null:null),C=o(()=>x.value===null?[]:Object.values(D).filter(e=>x.value?.required.includes(e)||x.value?.optional.includes(e)).filter(e=>!b.value.includes(e)||x.value?.multiple?.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channels.${e}`)}))),w=o(()=>d.value.map(e=>({value:e.id,label:e.name}))),T=n(e),E=F(i(T)),k=l(void 0),A=l(!1),j=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?m(`devicesModule.messages.channels.notCreated`,{channel:e.name}):m(`devicesModule.messages.channels.notEdited`,{channel:e.name});if(k.value.clearValidate(),!await k.value.validate())throw new Z(`Form not valid`);let r=(c.value?.schemas?.channelEditFormSchema||Se).safeParse(T);if(!r.success)throw g.error(`Schema validation failed with:`,r.error),new Z(`Failed to validate edit channel model.`);_.value=S.WORKING;try{await u.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await u.save({id:e.id,deviceId:e.device})}catch(e){throw _.value=S.ERROR,v=window.setTimeout(M,2e3),e instanceof X&&e.code===422?h.error(e.message):h.error(n),e}return _.value=S.OK,v=window.setTimeout(M,2e3),t?(h.success(m(a&&a.success?a.success:`devicesModule.messages.channels.created`,{channel:e.name})),`added`):(h.success(m(a&&a.success?a.success:`devicesModule.messages.channels.edited`,{channel:e.name})),A.value=!1,E=F(i(T)),`saved`)},M=()=>{window.clearTimeout(v),_.value=S.NONE};return f().catch(()=>{}),t(T,()=>{A.value=!(0,q.isEqual)(i(T),E)}),{categoriesOptions:C,devicesOptions:w,model:T,formEl:k,formChanged:A,submit:j,clear:M,formResult:_,loadingDevices:p}},De=({channelId:e,id:t})=>{let n=V().getStore(G),{data:r,semaphore:i}=v(n);return{property:o(()=>t===null?null:r.value[t]??null),isLoading:o(()=>i.value.fetching.item.includes(t)?!0:(r.value[t]??null)===null?i.value.fetching.items.includes(e)||i.value.fetching.items.includes(`all`):!1),fetchProperty:async()=>{(r.value[t]??null)?.draft||await n.get({id:t,channelId:e})}}},Oe=({channelId:e})=>{let t=V().getStore(G),{firstLoad:n,semaphore:r}=v(t),i=typeof e==`string`?o(()=>e):e;return{properties:o(()=>t.findAll().filter(e=>!i?.value||e.channel===i.value)),areLoading:o(()=>i.value?r.value.fetching.items.includes(i.value)?!0:n.value.includes(i.value)?!1:r.value.fetching.items.includes(i.value):!1),loaded:o(()=>i.value?n.value.includes(i.value):!1),fetchProperties:async()=>{i.value&&await t.fetch({channelId:i.value})}}},Q={search:void 0,channels:[],categories:[],permissions:[],dataTypes:[]},ke={by:`category`,dir:`asc`},Ae=({channelId:e,key:n=`list`})=>{let r=V().getStore(G),{firstLoad:i,semaphore:a}=v(r),{filters:s,sort:c,pagination:u,reset:d}=C({key:`${b}:channels-properties:${n}`,filters:{schema:ce,defaults:Q},sort:{defaults:[ke]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),f=o(()=>s.value.search!==Q.search||!(0,q.isEqual)(s.value.channels,Q.channels)||!(0,q.isEqual)(s.value.categories,Q.categories)||!(0,q.isEqual)(s.value.permissions,Q.permissions)||!(0,q.isEqual)(s.value.dataTypes,Q.dataTypes)),p=l(u.value.size||10),m=l(u.value.page||1),h=l(c.value.length>0?c.value[0]?.by:void 0),g=l(c.value.length>0?c.value[0]?.dir??null:null),_=o(()=>H(r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft&&(!s.value.search||e.id?.toLowerCase().includes(s.value.search.toLowerCase())||e.name?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.dataTypes.length===0||s.value.dataTypes.includes(e.dataType))&&(s.value.permissions.length===0||e.permissions.some(e=>s.value.permissions.includes(e)))),[e=>e[h.value]??``],[g.value===`asc`?`asc`:`desc`])),y=o(()=>{let e=(m.value-1)*p.value,t=e+p.value;return _.value.slice(e,t)}),x=async()=>{await r.fetch({channelId:e})},S=o(()=>a.value.fetching.items.includes(e)?!0:i.value.includes(e)?!1:a.value.fetching.items.includes(e)),w=o(()=>i.value.includes(e)),T=o(()=>r.findAll().filter(t=>!e||t.channel===e).filter(e=>!e.draft).length);return t(()=>u.value,e=>{m.value=e.page??1,p.value=e.size??10},{deep:!0}),t(()=>m.value,e=>{u.value.page=e}),t(()=>p.value,e=>{u.value.size=e}),t(()=>g.value,e=>{h.value===void 0||e===null?c.value=[]:c.value=[{by:h.value,dir:e}]}),t(()=>h.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:g.value}]}),{properties:_,propertiesPaginated:y,totalRows:T,areLoading:S,loaded:w,fetchProperties:x,filters:s,filtersActive:f,paginateSize:p,paginatePage:m,sortBy:h,sortDir:g,resetFilter:d}},je=()=>{let{t:e}=r(),t=O(),n=V().getStore(G);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new Y(`Something went wrong, channel property can't be loaded`);w.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 X&&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 X&&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}`)}))})}}},Me=({id:e})=>{let t=V().getStore(G);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:tune`}})}},Ne=z({id:j().uuid().optional(),type:j().trim().nonempty(),channel:j().uuid().optional(),category:h(I).default(I.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().nullable(),permissions:p(h(A)),dataType:h(N),format:p(x([j(),x([E(),y()])])).nullable(),invalid:x([j(),E(),m(),y()]),step:x([j(),E()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:m().default(!1),value:x([j(),E(),m(),y()]).optional(),enumValues:p(j()),minValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional()}),Pe=z({id:j().uuid(),type:j().trim().nonempty(),channel:j().uuid(),category:h(I).default(I.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().nullable().optional(),permissions:p(h(A)),dataType:h(N),format:p(x([j(),x([E(),y()])])).nullable(),invalid:x([j(),E(),m(),y()]),step:x([j(),E()]).transform(e=>e===``?null:Number(e)).nullable(),enterValue:m().default(!1),value:x([j(),E(),m(),y()]).optional(),enumValues:p(j()),minValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional(),maxValue:x([j(),E()]).transform(e=>e===``?void 0:Number(e)).optional()}),Fe=()=>{let e=M(),{enabled:t}=k(),n=[`channelPropertyAddForm`,`channelPropertyEditForm`],r=[`channelPropertySchema`,`channelPropertyAddFormSchema`,`channelPropertyEditFormSchema`,`channelPropertyCreateReqSchema`,`channelPropertyUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>H(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Ie=({type:e})=>{let{getByType:t}=Fe(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Le=({id:e,type:a,channelId:s})=>{let c=V(),{element:u}=Ie({type:a}),d=c.getStore(G),{channels:f,fetchChannels:p,areLoading:m}=ae(),{t:h}=r(),g=O(),_=U(),v=l(S.NONE),y,b=o(()=>j.channel?f.value.find(e=>e.id===j.channel)??null:null),x=o(()=>b.value?d.findForChannel(b.value.id).map(e=>e.category):[]),C=o(()=>b.value?ve[b.value.category]??null:null),w=o(()=>C.value===null?[]:Object.values(I).filter(e=>C.value?.required.includes(e)||C.value?.optional.includes(e)).filter(e=>!x.value.includes(e)).map(e=>({value:e,label:h(`devicesModule.categories.channelsProperties.${e}`)}))),T=o(()=>f.value.map(e=>({value:e.id,label:e.name}))),E=Object.values(A).map(e=>({value:e,label:h(`devicesModule.permissions.${e}`)})),k=Object.values(N).map(e=>({value:e,label:h(`devicesModule.dataTypes.${e}`)})),j=n({...P(u.value?.schemas?.channelPropertyAddFormSchema||Ne),id:e,type:a,channel:s,category:I.generic,name:``,permissions:[],dataType:N.unknown,format:null,invalid:null,step:null,enumValues:[],minValue:void 0,maxValue:void 0,enterValue:!1,value:void 0}),M=F(i(j)),L=l(void 0),R=l(!1),z=async()=>{if(L.value.clearValidate(),!await L.value.validate())throw new Z(`Form not valid`);let t=s??j.channel;if(!t)throw new Z(`Missing channel identifier`);if(j.name===``&&(j.name=null),!j.category)throw new Z(`Missing data type definition`);j.dataType===N.enum?j.format=j.enumValues:[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(j.dataType)&&(j.format=[typeof j.minValue==`string`&&j.minValue!==``?Number(j.minValue):typeof j.minValue==`number`?j.minValue:null,typeof j.maxValue==`string`&&j.maxValue!==``?Number(j.maxValue):typeof j.maxValue==`number`?j.maxValue:null]),j.enterValue||delete j.value;let n=(u.value?.schemas?.channelPropertyAddFormSchema||Ne).safeParse(j);if(!n.success)throw _.error(`Schema validation failed with:`,n.error),new Z(`Failed to validate create channel property model.`);v.value=S.WORKING;let r=h(`devicesModule.messages.channelsProperties.notCreated`,{device:j.name});try{await d.add({id:e,channelId:t,draft:!1,data:{...n.data,type:a}})}catch(e){throw v.value=S.ERROR,y=window.setTimeout(B,2e3),e instanceof X&&e.code===422?g.error(e.message):g.error(r),e}return v.value=S.OK,y=window.setTimeout(B,2e3),g.success(h(`devicesModule.messages.channelsProperties.created`,{device:j.name})),`added`},B=()=>{window.clearTimeout(y),v.value=S.NONE};return p().catch(()=>{}),t(j,()=>{R.value=!(0,q.isEqual)(i(j),M)}),t(()=>j.category,e=>{let t=ye(b.value?.category??D.generic,e);t&&(M.permissions=t.permissions,M.dataType=t.data_type,j.permissions=t.permissions,j.dataType=t.data_type,t.invalid!==void 0&&(M.invalid=t.invalid,j.invalid=t.invalid),t.step!==void 0&&(M.step=t.step,j.step=t.step),M.dataType===N.enum?(M.enumValues=t.format??[],M.minValue=void 0,M.maxValue=void 0,j.enumValues=t.format??[],j.minValue=void 0,j.maxValue=void 0):[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(j.dataType)?(M.enumValues=[],M.minValue=t.format?.[0],M.maxValue=t.format?.[1],j.enumValues=[],j.minValue=t.format?.[0],j.maxValue=t.format?.[1]):(M.enumValues=[],M.minValue=void 0,M.maxValue=void 0,j.enumValues=[],j.minValue=void 0,j.maxValue=void 0),R.value=!(0,q.isEqual)(i(j),M))},{immediate:!0}),t(()=>w.value,e=>{e.length&&e[0]&&(j.category=e[0].value,M.category=e[0].value)},{immediate:!0}),{categoriesOptions:w,channelsOptions:T,permissionsOptions:E,dataTypesOptions:k,model:j,formEl:L,formChanged:R,submit:z,clear:B,formResult:v,loadingChannels:m}},Re=({property:e,messages:a})=>{let s=V(),{element:c}=Ie({type:e.type}),u=s.getStore(G),{channels:d,fetchChannels:f,areLoading:p}=ae(),{t:m}=r(),h=O(),g=U(),_=l(S.NONE),v,y=[],b,x;e.dataType===N.enum?y=e.format?e.format.map(e=>e?.toString()||``):[]:[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(e.dataType)&&Array.isArray(e.format)&&e.format.length===2&&(b=e.format[0],x=e.format[1]);let C=o(()=>d.value.find(t=>t.id===e.channel)??null),w=o(()=>C.value?u.findForChannel(C.value.id).filter(t=>t.id!==e.id).map(e=>e.category):[]),T=o(()=>C.value?ve[C.value.category]??null:null),E=o(()=>T.value===null?[]:Object.values(I).filter(e=>T.value?.required.includes(e)||T.value?.optional.includes(e)).filter(e=>!w.value.includes(e)).map(e=>({value:e,label:m(`devicesModule.categories.channelsProperties.${e}`)}))),D=o(()=>d.value.map(e=>({value:e.id,label:e.name}))),k=Object.values(A).map(e=>({value:e,label:m(`devicesModule.permissions.${e}`)})),j=Object.values(N).map(e=>({value:e,label:m(`devicesModule.dataTypes.${e}`)})),M=n({...e,format:i(e.format),value:e.value?.value??null,enumValues:y,minValue:b,maxValue:x,enterValue:!1}),P=F(i(M)),L=l(void 0),R=l(!1),z=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?m(`devicesModule.messages.channelsProperties.notCreated`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)}):m(`devicesModule.messages.channelsProperties.notEdited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)});if(L.value.clearValidate(),!await L.value.validate())throw new Z(`Form not valid`);M.name===``&&(M.name=null),e.dataType===N.enum?M.format=M.enumValues:[N.char,N.uchar,N.short,N.ushort,N.int,N.uint,N.float].includes(e.dataType)&&(M.format=[M.minValue??null,M.maxValue??null]),M.enterValue||delete M.value;let r=(c.value?.schemas?.channelPropertyEditFormSchema||Pe).safeParse(M);if(!r.success)throw g.error(`Schema validation failed with:`,r.error),new Z(`Failed to validate edit channel property model.`);_.value=S.WORKING;try{await u.edit({id:e.id,channelId:e.channel,data:{...r.data,type:e.type}}),e.draft&&await u.save({id:e.id,channelId:e.channel})}catch(e){throw _.value=S.ERROR,v=window.setTimeout(B,2e3),e instanceof X&&e.code===422?h.error(e.message):h.error(n),e}return _.value=S.OK,v=window.setTimeout(B,2e3),t?(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.created`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),`added`):(h.success(m(a&&a.success?a.success:`devicesModule.messages.channelsProperties.edited`,{property:e.name??m(`devicesModule.categories.channelsProperties.${e.category}`)})),R.value=!1,P=F(i(M)),`saved`)},B=()=>{window.clearTimeout(v),_.value=S.NONE};return f().catch(()=>{}),t(M,()=>{R.value=!(0,q.isEqual)(i(M),P)}),{categoriesOptions:E,channelsOptions:D,permissionsOptions:k,dataTypesOptions:j,model:M,formEl:L,formChanged:R,submit:z,clear:B,formResult:_,loadingChannels:p}},ze=({id:e})=>{let t=V().getStore(W),{data:n,semaphore:r}=v(t);return{device:o(()=>e===null?null:n.value[e]??null),isLoading:o(()=>r.value.fetching.item.includes(e)?!0:(n.value[e]??null)===null?r.value.fetching.items:!1),fetchDevice:async()=>{(n.value[e]??null)?.draft||await t.get({id:e})}}},$={search:void 0,types:[],state:`all`,states:[],categories:[],enabled:`all`,validation:`all`},Be={by:`name`,dir:`asc`},Ve=()=>{let e=V(),n=e.getStore(W),r=e.getStore(te),{firstLoad:i,semaphore:a}=v(n),{filters:s,sort:c,pagination:u,reset:f}=C({key:`${b}:devices:list`,filters:{schema:oe,defaults:$},sort:{defaults:[Be]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),p=o(()=>s.value.search!==$.search||!(0,q.isEqual)(s.value.types,$.types)||s.value.state!==$.state||!(0,q.isEqual)(s.value.states,$.states)||!(0,q.isEqual)(s.value.categories,$.categories)||!(0,q.isEqual)(s.value.enabled,$.enabled)||s.value.validation!==$.validation),m=l(u.value.size||10),h=l(u.value.page||1),g=l(c.value.length>0?c.value[0]?.by:void 0),_=l(c.value.length>0?c.value[0]?.dir??null:null),y=e=>r.findById(e)?.isValid??null,x=o(()=>H(n.findAll().filter(e=>!e.draft&&(!s.value.search||e.id.toLowerCase().includes(s.value.search.toLowerCase())||e.name.toLowerCase().includes(s.value.search.toLowerCase())||e.description?.toLowerCase().includes(s.value.search.toLowerCase())||e.identifier?.toLowerCase().includes(s.value.search.toLowerCase()))&&(s.value.types.length===0||s.value.types.includes(e.type))&&(s.value.categories.length===0||s.value.categories.includes(e.category))&&(s.value.enabled===`all`||s.value.enabled===`enabled`&&e.enabled||s.value.enabled===`disabled`&&!e.enabled)&&(s.value.states.length===0||s.value.states.includes(e.status?.status??d.unknown))&&(s.value.state===`all`||s.value.state===`online`&&[d.ready,d.connected,d.running].includes(e.status.status)||s.value.state===`offline`&&[d.disconnected,d.stopped,d.lost,d.unknown].includes(e.status.status))&&(s.value.validation===`all`||s.value.validation===`valid`&&y(e.id)===!0||s.value.validation===`invalid`&&y(e.id)===!1)),[e=>g.value===`state`?e.status?.status??d.unknown:e[g.value]??``],[_.value===`asc`?`asc`:`desc`])),S=o(()=>{let e=(h.value-1)*m.value,t=e+m.value;return x.value.slice(e,t)}),w=async()=>{await n.fetch()},T=o(()=>a.value.fetching.items||!i.value),E=o(()=>i.value),D=o(()=>n.findAll().filter(e=>!e.draft).length);return t(()=>u.value,e=>{h.value=e.page??1,m.value=e.size??10},{deep:!0}),t(()=>h.value,e=>{u.value.page=e}),t(()=>m.value,e=>{u.value.size=e}),t(()=>_.value,e=>{g.value===void 0||e===null?c.value=[]:c.value=[{by:g.value,dir:e}]}),t(()=>g.value,e=>{e===void 0?c.value=[]:c.value=[{by:e,dir:_.value}]}),{devices:x,devicesPaginated:S,totalRows:D,areLoading:T,loaded:E,fetchDevices:w,filters:s,filtersActive:p,paginateSize:m,paginatePage:h,sortBy:g,sortDir:_,resetFilter:f}},He=()=>{let{t:e}=r(),t=O(),n=V().getStore(W);return{remove:async r=>{let i=n.findById(r);if(i===null)throw new Y(`Something went wrong, device can't be loaded`);w.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 X&&n.code===404){let n=e(`devicesModule.messages.devices.notFound`,{device:i.name});t.error(n)}else if(n instanceof X&&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 w.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`});let i=0,a=0;for(let e of r)try{await n.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkRemoved`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkRemoveFailed`,{count:a}))}catch{}},bulkEnable:async r=>{if(r.length!==0)try{await w.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`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!0}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkEnabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkEnableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkEnableCanceled`))}},bulkDisable:async r=>{if(r.length!==0)try{await w.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`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{type:e.type,enabled:!1}}),i++}catch{a++}i>0&&t.success(e(`devicesModule.messages.devices.bulkDisabled`,{count:i})),a>0&&t.error(e(`devicesModule.messages.devices.bulkDisableFailed`,{count:a}))}catch{t.info(e(`devicesModule.messages.devices.bulkDisableCanceled`))}}}},Ue=({id:e})=>{let t=V().getStore(W);return{icon:o(()=>{switch(t.findById(e)?.category){default:return`mdi:devices`}})}},We=({id:e})=>{let t=V(),n=t.getStore(W),r=t.getStore(K),i=e=>n.findById(e),a=e=>_e[e.category]??null;return{canAddAnotherChannel:o(()=>{let t=i(e);if(t===null)return!0;let{required:n,optional:o,multiple:s}=a(t)??{required:[],optional:[]},c=[...n,...o],l=r.findForDevice(t.id).map(e=>e.category);return c.filter(e=>!l.includes(e)).length>0||s!==void 0&&s.length>0}),missingRequiredChannels:o(()=>{let t=i(e);if(t===null)throw new Y(`Something went wrong, device can't be loaded`);let{required:n}=a(t)??{required:[]},o=r.findForDevice(t.id).map(e=>e.category);return n.filter(e=>!o.includes(e))})}},Ge=z({id:j().uuid().optional(),type:j().trim().nonempty(),category:h(T).default(T.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty(),description:j().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:m().default(!0).optional()}),Ke=z({id:j().uuid(),type:j().trim().nonempty(),category:h(T).default(T.generic),identifier:j().trim().nonempty().nullable().optional(),name:j().trim().nonempty().optional(),description:j().trim().transform(e=>e===``?null:e).nullable().optional(),enabled:m().optional(),roomId:j().uuid().nullable().optional()}),qe=()=>{let e=M(),{enabled:t}=k(),n=[`deviceAddForm`,`deviceEditForm`],r=[`deviceSchema`,`deviceAddFormSchema`,`deviceEditFormSchema`,`deviceCreateReqSchema`,`deviceUpdateReqSchema`],i=o(()=>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=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:o(()=>H(i.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`devices-module`)).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.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 i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`)));if(n)return n}}}},Je=({type:e})=>{let{getByType:t}=qe(),n=o(()=>t(e));return{plugin:n,element:o(()=>(n.value?.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`devices-module`))))}},Ye=({id:e,type:a})=>{let o=V(),{element:s}=Je({type:a}),c=o.getStore(W),{t:u}=r(),d=O(),f=U(),p=l(S.NONE),m,h=Object.values(T).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n({...P(s.value?.schemas?.deviceAddFormSchema||Ge),id:e,type:a,category:T.generic,name:``,description:``}),_=F(i(g)),v=l(void 0),y=l(!1),b=async()=>{if(v.value.clearValidate(),!await v.value.validate())throw new Z(`Form not valid`);let t=(s.value?.schemas?.deviceAddFormSchema||Ge).safeParse(g);if(!t.success)throw f.error(`Schema validation failed with:`,t.error),new Z(`Failed to validate create device model.`);p.value=S.WORKING;let n=u(`devicesModule.messages.devices.notCreated`,{device:g.name});try{await c.add({id:e,draft:!1,data:{...t.data,type:a}})}catch(e){throw p.value=S.ERROR,m=window.setTimeout(x,2e3),e instanceof X&&e.code===422?d.error(e.message):d.error(n),e}return p.value=S.OK,m=window.setTimeout(x,2e3),d.success(u(`devicesModule.messages.devices.created`,{device:g.name})),`added`},x=()=>{window.clearTimeout(m),p.value=S.NONE};return t(g,()=>{y.value=!(0,q.isEqual)(i(g),_)}),{categoriesOptions:h,model:g,formEl:v,formChanged:y,submit:b,clear:x,formResult:p}},Xe=({device:e,messages:a})=>{let o=V(),{element:s}=Je({type:e.type}),c=o.getStore(W),{t:u}=r(),d=O(),f=U(),p=l(S.NONE),m,h=Object.values(T).map(e=>({value:e,label:u(`devicesModule.categories.devices.${e}`)})),g=n(e),_=F(i(g)),v=l(void 0),y=l(!1),b=async()=>{let t=e.draft,n=a&&a.error?a.error:e.draft?u(`devicesModule.messages.devices.notCreated`,{device:e.name}):u(`devicesModule.messages.devices.notEdited`,{device:e.name});if(v.value.clearValidate(),!await v.value.validate())throw new Z(`Form not valid`);let r=(s.value?.schemas?.deviceEditFormSchema||Ke).safeParse(g);if(!r.success)throw f.error(`Schema validation failed with:`,r.error),new Z(`Failed to validate edit device model.`);p.value=S.WORKING;try{await c.edit({id:e.id,data:{...r.data,type:e.type}}),e.draft&&await c.save({id:e.id})}catch(e){throw p.value=S.ERROR,m=window.setTimeout(x,2e3),e instanceof X&&e.code===422?d.error(e.message):d.error(n),e}return p.value=S.OK,m=window.setTimeout(x,2e3),t?(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.created`,{device:e.name})),`added`):(d.success(u(a&&a.success?a.success:`devicesModule.messages.devices.edited`,{device:e.name})),y.value=!1,_=F(i(g)),`saved`)},x=()=>{window.clearTimeout(m),p.value=S.NONE};return t(g,()=>{y.value=!(0,q.isEqual)(i(g),_)}),{categoriesOptions:h,model:g,formEl:v,formChanged:y,submit:b,clear:x,formResult:p}},Ze=()=>{let e=V().getStore(te),{data:t,semaphore:n,firstLoad:r}=v(e);return{validation:o(()=>t.value),summary:o(()=>t.value?.summary??null),invalidDevices:o(()=>t.value?t.value.devices.filter(e=>!e.isValid):[]),isLoading:o(()=>n.value.fetching.items),isLoaded:o(()=>r.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}}},Qe=({id:e})=>{let t=V().getStore(te),{semaphore:n}=v(t);return{validation:o(()=>t.findById(e)),isValid:o(()=>{let n=t.findById(e);return n?n.isValid:null}),issues:o(()=>{let n=t.findById(e);return n?n.issues:[]}),errorCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`error`).length:0}),warningCount:o(()=>{let n=t.findById(e);return n?n.issues.filter(e=>e.severity===`warning`).length:0}),isLoading:o(()=>n.value.fetching.item.includes(e)),fetchValidation:async()=>{await t.get({id:e})}}},$e=300,et=1e4,tt=({id:n})=>{let r=V(),i=r.getStore(W),a=r.getStore(K),s=r.getStore(G),{data:c,semaphore:u}=v(i),{data:d,semaphore:f,firstLoad:p}=v(a),{semaphore:m,firstLoad:h}=v(s),{sendCommand:g}=L(),_={},y={},b={},x=l({}),S=l({}),C=o(()=>n===null?null:c.value[n]??null),w=o(()=>Object.values(d.value).filter(e=>e.device===n&&e.category!==D.device_information)),T=o(()=>w.value.filter(e=>s.findForChannel(e.id).some(e=>e.permissions.includes(A.rw)||e.permissions.includes(A.wo)))),E=o(()=>T.value.length>0),O=e=>s.findForChannel(e),k=e=>e.permissions.includes(A.rw)||e.permissions.includes(A.wo),j=e=>{let t=x.value[e];return t===void 0?s.findById(e)?.value?.value??null:t},M=e=>S.value[e]??!1,N=(e,t)=>{if(t!==void 0){let n=x.value[e];if(n!==t&&String(n)!==String(t))return}delete x.value[e],b[e]&&(clearTimeout(b[e]),delete b[e])},P=(e,t)=>{b[e]&&clearTimeout(b[e]),b[e]=setTimeout(()=>{let n=x.value[e];(n===t||String(n)===String(t))&&delete x.value[e],delete b[e]},et)},F=async(e,t,r)=>s.findById(t)?(_[t]&&(clearTimeout(_[t]),delete _[t],y[t]&&(y[t](!1),delete y[t])),x.value[t]=r,new Promise(i=>{y[t]=i;let a=setTimeout(async()=>{delete y[t],S.value[t]=!0;try{await g(R.CHANNEL_PROPERTY_SET,{context:{origin:`admin`},properties:[{device:n,channel:e,property:t,value:r}]},`DevicesModule.Internal.SetPropertyValue`)===!0?(P(t,r),i(!0)):(N(t,r),i(!1))}catch{N(t,r),i(!1)}finally{S.value[t]=!1,_[t]===a&&delete _[t]}},$e);_[t]=a})):!1,I=async()=>{(n in c.value?c.value[n]:null)?.draft||await i.get({id:n})},z=async()=>{await a.fetch({deviceId:n})},B=async()=>{let e=Object.values(d.value).filter(e=>e.device===n);for(let t of e)await s.fetch({channelId:t.id})},H=o(()=>{if(u.value.fetching.item.includes(n)||f.value.fetching.items.includes(n))return!0;for(let e of w.value)if(m.value.fetching.items.includes(e.id))return!0;return!1}),U=o(()=>p.value.includes(n)),ee=o(()=>{if(!U.value)return!1;for(let e of w.value)if(!h.value.includes(e.id))return!1;return!0});return t(()=>{let e={};for(let t of Object.keys(x.value)){let n=s.findById(t);n&&(e[t]=n.value?.value??null)}return e},e=>{for(let[t,n]of Object.entries(x.value)){let r=e[t];(r===n||String(r)===String(n))&&N(t)}},{deep:!0}),e(()=>{for(let e of Object.keys(_))clearTimeout(_[e]),delete _[e],y[e]&&(y[e](!1),delete y[e]);for(let e of Object.keys(b))clearTimeout(b[e]),delete b[e]}),{device:C,channels:w,controllableChannels:T,hasControllableProperties:E,isLoading:H,areChannelsLoaded:U,arePropertiesLoaded:ee,fetchDevice:I,fetchChannels:z,fetchProperties:B,getPropertiesForChannel:O,isPropertyWritable:k,getPropertyValue:j,isPropertyLoading:M,setPropertyValue:F}},nt=({deviceId:e})=>{let t=V().getStore(ee),{firstLoad:n,semaphore:r}=v(t);return{controls:o(()=>t.findForDevice(e)),areLoading:o(()=>r.value.fetching.items.includes(e)),loaded:o(()=>n.value.includes(e)),fetchControls:async()=>t.fetch({deviceId:e})}},rt=e=>{let n=B(),r=U(),i=l({}),d=l(!1),f=l(!1),p=l(!1),m=l(void 0),h=l(!1),_=null,v=0,y=o(()=>Object.values(i.value).sort((e,t)=>new Date(t.ts).getTime()-new Date(e.ts).getTime())),b=o(()=>{let e=[g.warn,g.error,g.fatal,g.fail];return y.value.filter(t=>e.includes(t.type))}),x=o(()=>b.value.length),S=o(()=>x.value>0),C=async()=>{let t=a(e.deviceId);_=t,v++;let o=v;f.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${u}/logs`,{params:{query:{resource:t,limit:50}}});if(_!==t||v!==o)return;e===void 0?a&&r.error(`Failed to fetch device logs:`,a):(i.value=Object.fromEntries(e.data.map(e=>{let t=re(e);return[t.id,t]})),p.value=!0,d.value=e.metadata.has_more,m.value=e.metadata.next_cursor)}catch(e){_===t&&v===o&&r.error(`Error fetching device logs:`,e)}finally{_===t&&v===o&&(f.value=!1)}},w=async()=>{if(f.value||!d.value||!m.value)return;let t=a(e.deviceId),o=m.value,c=v;f.value=!0;try{let{data:e,error:a}=await n.client.GET(`/${s}/${u}/logs`,{params:{query:{resource:t,after_id:o,limit:50}}});if(_!==t||v!==c)return;if(e!==void 0){let t=Object.fromEntries(e.data.map(e=>{let t=re(e);return[t.id,t]}));i.value={...i.value,...t},d.value=e.metadata.has_more,m.value=e.metadata.next_cursor}else a&&r.error(`Failed to load more device logs:`,a)}catch(e){_===t&&v===c&&r.error(`Error loading more device logs:`,e)}finally{_===t&&v===c&&(f.value=!1)}},T=async()=>{i.value={},m.value=void 0,d.value=!1,p.value=!1,await C()},E=null;return t(()=>h.value,e=>{E&&=(clearInterval(E),null),e&&(E=setInterval(()=>{f.value||C()},3e3))}),c(()=>{E&&=(clearInterval(E),null)}),t(()=>a(e.deviceId),()=>{T()}),{logs:y,alertLogs:b,alertCount:x,hasAlerts:S,hasMore:d,isLoading:f,loaded:p,live:h,fetchLogs:C,loadMoreLogs:w,refreshLogs:T}};export{be as A,ie as B,je as C,Ee as D,De as E,X as F,Y as I,Z as L,ye as M,fe as N,Te as O,de as P,ue as R,Me as S,Oe as T,Re as _,Ze as a,Ne as b,Je as c,Ke as d,We as f,ze as g,Ve as h,Qe as i,ge as j,Ce as k,qe as l,He as m,nt as n,Xe as o,Ue as p,tt as r,Ye as s,rt as t,Ge as u,Le as v,Ae as w,Pe as x,Fe as y,ae as z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{mr as e}from"./icon-with-child-DmQ_XhQy.js";import{Va as t,un as n,w as r}from"./common-
|
|
1
|
+
import{mr as e}from"./icon-with-child-DmQ_XhQy.js";import{Va as t,un as n,w as r}from"./common-KNQoamuF.js";var i=()=>{let i=r().getStore(n),{profile:a}=t(i);return{profile:e(()=>a.value),isSignedIn:e(()=>i.isSignedIn())}};export{i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-DECur_0Z.js";import{Nr as e,Xr as t,ci as n,d as r,fi as i,mr as a,ui as o}from"./icon-with-child-DmQ_XhQy.js";import{Fn as s,Gn as c,Kn as l,Or as u,Qn as d,Qt as f,Un as p,Va as m,Xn as h,ar as g,d as _,di as v,er as y,g as b,gn as x,ir as S,k as C,or as w,p as T,qt as E,rr as D,tr as O,w as k,wn as A,x as ee}from"./common-ODOYsFyB.js";import{t as te}from"./useSpaces-CwuN3REG.js";import{o as j,s as M}from"./composables-CYtwppqp.js";var N=`scenes`,P=`scenes-module`,F=`ScenesModule.`,I=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerScene`,e}({}),L=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerSceneHandler`,e}({}),R=function(e){return e.SCENE_CREATED=`ScenesModule.Scene.Created`,e.SCENE_UPDATED=`ScenesModule.Scene.Updated`,e.SCENE_DELETED=`ScenesModule.Scene.Deleted`,e.SCENE_TRIGGERED=`ScenesModule.Scene.Triggered`,e.SCENE_EXECUTION_STARTED=`ScenesModule.Scene.ExecutionStarted`,e.SCENE_EXECUTION_COMPLETED=`ScenesModule.Scene.ExecutionCompleted`,e.SCENE_EXECUTION_FAILED=`ScenesModule.Scene.ExecutionFailed`,e.SCENE_ACTION_CREATED=`ScenesModule.SceneAction.Created`,e.SCENE_ACTION_UPDATED=`ScenesModule.SceneAction.Updated`,e.SCENE_ACTION_DELETED=`ScenesModule.SceneAction.Deleted`,e}({}),z=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),B={SCENES:`scenes_module-scenes`,SCENES_ADD:`scenes_module-scenes_add`,SCENES_EDIT:`scenes_module-scenes_edit`,SCENE:`scenes_module-scene`,SCENE_EDIT:`scenes_module-scene_edit`,SCENE_ADD_ACTION:`scenes_module-scene_add_action`,SCENE_EDIT_ACTION:`scenes_module-scene_edit_action`},V={[u.generic]:`mdi:playlist-play`,[u.lighting]:`mdi:lightbulb-group`,[u.climate]:`mdi:thermostat`,[u.media]:`mdi:television-play`,[u.work]:`mdi:briefcase`,[u.relax]:`mdi:sofa`,[u.night]:`mdi:weather-night`,[u.morning]:`mdi:weather-sunset-up`,[u.party]:`mdi:party-popper`,[u.movie]:`mdi:movie-open`,[u.away]:`mdi:home-export-outline`,[u.home]:`mdi:home-import-outline`,[u.security]:`mdi:shield-home`,[u.energy]:`mdi:flash`,[u.custom]:`mdi:shape-outline`},H=O({search:S().optional(),categories:c(d(u)),primarySpaceId:g([S().uuid(),h(`whole_home`)]).optional(),enabled:p([`all`,`enabled`,`disabled`]).default(`all`)}),U=({id:e})=>{let t=k(),n=t.getStore(M),r=t.getStore(j),{data:i,semaphore:o}=m(n);return{scene:a(()=>e===null?null:i.value.get(e)??null),isLoading:a(()=>o.value.fetching.item.includes(e)?!0:i.value.get(e)===void 0?o.value.fetching.items:!1),fetchScene:async()=>{i.value.get(e)?.draft||(await n.get({id:e}),await r.fetch({sceneId:e}))}}},W=O({id:S().uuid().optional(),type:S().trim().nonempty(),configuration:D(S(),w()).default({}),order:y().int().min(0).optional(),enabled:l().default(!0)}).catchall(w());O({id:S().uuid(),type:S().trim().nonempty(),configuration:D(S(),w()).optional(),order:y().int().min(0).optional(),enabled:l().optional()}).catchall(w());var G=O({id:S().uuid().optional(),name:S().trim().nonempty(),description:S().trim().transform(e=>e===``?null:e).nullable().optional(),category:d(u).default(u.generic),icon:S().nullable().optional(),enabled:l().default(!0),order:y().optional(),primarySpaceId:S().uuid().nullable().optional().transform(e=>e===``?null:e),actions:c(W).default([])}),K=O({id:S().uuid(),name:S().trim().nonempty().optional(),description:S().trim().transform(e=>e===``?null:e).nullable().optional(),category:d(u).optional(),icon:S().nullable().optional(),enabled:l().optional(),order:y().optional(),primarySpaceId:S().uuid().nullable().optional().transform(e=>e===``?null:e),actions:c(W).default([])}),q=class extends Error{exception;constructor(e,t=null){super(e),this.name=`ScenesException`,this.exception=t}},J=class extends q{code;constructor(e,t=null,n=null){super(e,n),this.name=`ScenesApiException`,this.code=t}},Y=class extends q{constructor(e,t=null){super(e,t),this.name=`ScenesValidationException`}},ne=()=>{let e=C(),{enabled:t}=x(),n=[`sceneActionAddForm`,`sceneActionEditForm`,`sceneActionCard`],r=[`sceneActionSchema`,`sceneActionAddFormSchema`,`sceneActionEditFormSchema`,`sceneActionCreateReqSchema`,`sceneActionUpdateReqSchema`],i=a(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`scenes-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`scenes-module`)))return!1;let t=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:a(()=>A(i.value.flatMap(e=>(e.elements??[]).filter(e=>{let t=e.modules===void 0||e.modules.includes(`scenes-module`),r=!!e.components&&n.some(t=>e.components&&t in e.components);return t&&r}).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)))),getElement:e=>{for(let t of i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)));if(n)return n}}}},X=s(),Z=({id:e})=>{let s=k(),c=s.getStore(M),l=s.getStore(j),{t:d}=r(),p=b(),m=ee(),{spaces:h,fetching:g,fetchSpaces:_}=te(),v=o(z.NONE),y,x=a(()=>Object.values(u).map(e=>({value:e,label:d(`scenes.categories.${e}`),icon:V[e]}))),S=a(()=>{let e=h.value.filter(e=>e.type===E.ROOM).map(e=>({value:e.id,label:e.name,icon:f(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=h.value.filter(e=>e.type===E.ZONE).map(e=>({value:e.id,label:e.name,icon:f(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:E.ROOM,label:d(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:E.ZONE,label:d(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),C=n({id:e,category:u.generic,name:``,description:null,icon:null,enabled:!0,primarySpaceId:null,actions:[]}),{options:w,getElement:D}=ne(),O=e=>{let t=e.propertyId;return t&&C.actions.find(e=>e.propertyId===t)?(p.warning(d(`scenes.messages.duplicateAction`)),!1):(C.actions.push(e),!0)},A=e=>{C.actions.splice(e,1)},N=(e,t)=>{e>=0&&e<C.actions.length&&(C.actions[e]=t)},P=e=>D(e)?.components?.sceneActionCard??null,F=e=>D(e)?.components?.sceneActionAddForm??null,I=e=>D(e)?.components?.sceneActionEditForm??null,L=e=>w.value.find(t=>t.value===e)?.label??e,R=T(i(C)),B=o(void 0),H=o(!1),U=async(e,t)=>{try{for(let n=0;n<t.length;n++){let r=t[n];r&&await l.add({sceneId:e,data:{...r,order:n,enabled:r.enabled??!0}})}}catch(e){throw m.error(`Error syncing scene actions:`,e),e}},W=async()=>{if(B.value.clearValidate(),!await B.value.validate())throw new Y(`Form not valid`);let t=G.safeParse(C);if(!t.success)throw m.error(`Schema validation failed with:`,t.error),new Y(`Failed to validate create scene model.`);v.value=z.WORKING;let n=d(`scenes.messages.createFailed`);try{let n=await c.add({id:e,draft:!1,data:t.data});t.data.actions.length>0&&await U(n.id,t.data.actions)}catch(e){throw v.value=z.ERROR,y=window.setTimeout(K,2e3),e instanceof J&&e.code===422?p.error(e.message):p.error(n),e}return v.value=z.OK,y=window.setTimeout(K,2e3),p.success(d(`scenes.messages.created`)),`added`},K=()=>{window.clearTimeout(y),v.value=z.NONE};return t(C,()=>{H.value=!(0,X.isEqual)(i(C),R)}),{categoriesOptions:x,spacesOptionsGrouped:S,model:C,formEl:B,formChanged:H,submit:W,clear:K,formResult:v,loadingSpaces:g,fetchSpaces:_,actionPluginOptions:w,addAction:O,removeAction:A,updateAction:N,getActionCardComponent:P,getActionFormComponent:F,getActionEditFormComponent:I,getPluginLabel:L}},re=({scene:s,messages:c})=>{let l=k(),d=l.getStore(M),p=l.getStore(j),{t:m}=r(),h=b(),g=ee(),{spaces:_,fetching:v,fetchSpaces:y}=te(),x=o(z.NONE),S=a(()=>p.findForScene(s.id)),C=o(T(S.value)),w,D=a(()=>Object.values(u).map(e=>({value:e,label:m(`scenes.categories.${e}`),icon:V[e]}))),O=a(()=>{let e=_.value.filter(e=>e.type===E.ROOM).map(e=>({value:e.id,label:e.name,icon:f(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=_.value.filter(e=>e.type===E.ZONE).map(e=>({value:e.id,label:e.name,icon:f(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:E.ROOM,label:m(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:E.ZONE,label:m(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),A=a(()=>S.value.map(e=>({...e}))),N=n({id:s.id,category:s.category,name:s.name,description:s.description,icon:s.icon,enabled:s.enabled,primarySpaceId:s.primarySpaceId,actions:A.value}),{options:P,getElement:F}=ne(),I=e=>{let t=e.propertyId;return t&&N.actions.find(e=>e.propertyId===t)?(h.warning(m(`scenes.messages.duplicateAction`)),!1):(N.actions.push(e),!0)},L=e=>{N.actions.splice(e,1)},R=(e,t)=>{e>=0&&e<N.actions.length&&(N.actions[e]=t)},B=e=>F(e)?.components?.sceneActionCard??null,H=e=>F(e)?.components?.sceneActionAddForm??null,U=e=>F(e)?.components?.sceneActionEditForm??null,W=e=>P.value.find(t=>t.value===e)?.label??e,G=o(void 0),q=o(!1),Z=T(i(N)),re=async(e,t)=>{try{let n=new Set(C.value.map(e=>e.id)),r=new Set(t.filter(e=>e.id).map(e=>e.id));for(let t of C.value)r.has(t.id)||await p.remove({id:t.id,sceneId:e});let i=new Map;for(let r=0;r<t.length;r++){let a=t[r];if(!a)continue;let o=a.id;if(!o||!n.has(o)){let t=await p.add({sceneId:e,data:{...a,order:r,enabled:a.enabled??!0}});i.set(r,t.id)}else{let t=C.value.find(e=>e.id===o);if(t){let n=new Set([`id`,`draft`,`createdAt`,`updatedAt`,`scene`]),i=e=>Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)));(0,X.isEqual)(i(t),{...i(a),order:r})||await p.edit({id:o,sceneId:e,data:{...a,order:r}})}}}for(let[e,t]of i){let n=N.actions[e];n&&(n.id=t)}C.value=T(p.findForScene(e))}catch(e){throw g.error(`Error syncing scene actions:`,e),e}},ie=async()=>{let e=s.draft,t=c&&c.error?c.error:s.draft?m(`scenes.messages.createFailed`):m(`scenes.messages.editFailed`,{scene:s.name});if(G.value.clearValidate(),!await G.value.validate())throw new Y(`Form not valid`);let n=K.safeParse(N);if(!n.success)throw g.error(`Schema validation failed with:`,n.error),new Y(`Failed to validate edit scene model.`);x.value=z.WORKING;try{await d.edit({id:s.id,data:n.data});let t=s.id;if(e){let e=await d.save({id:s.id});N.id=e.id,N.category=e.category,N.name=e.name,N.description=e.description,N.icon=e.icon,N.enabled=e.enabled,N.primarySpaceId=e.primarySpaceId,t=e.id}await re(t,n.data.actions)}catch(e){throw x.value=z.ERROR,w=window.setTimeout(Q,2e3),e instanceof J&&e.code===422?h.error(e.message):e instanceof Y||(h.error(t),g.error(`Scene edit failed:`,e)),e}return x.value=z.OK,w=window.setTimeout(Q,2e3),e?(h.success(m(c&&c.success?c.success:`scenes.messages.created`)),`added`):(h.success(m(c&&c.success?c.success:`scenes.messages.edited`,{scene:s.name})),q.value=!1,Z=T(i(N)),`saved`)},Q=()=>{window.clearTimeout(w),x.value=z.NONE};return t(N,()=>{q.value=!(0,X.isEqual)(i(N),Z)}),e(()=>{Q()}),{categoriesOptions:D,spacesOptionsGrouped:O,model:N,formEl:G,formChanged:q,submit:ie,clear:Q,formResult:x,loadingSpaces:v,fetchSpaces:y,actionPluginOptions:P,addAction:I,removeAction:L,updateAction:R,getActionCardComponent:B,getActionFormComponent:H,getActionEditFormComponent:U,getPluginLabel:W}},ie=({id:e})=>{let t=k().getStore(M);return{icon:a(()=>{let n=t.findById(e);return n?.icon?n.icon:n?.category&&n.category in V?V[n.category]:V[u.generic]})}},Q=()=>{let e=k().getStore(M),{data:t,semaphore:n,firstLoad:r}=m(e);return{scenes:a(()=>Array.from(t.value.values()).sort((e,t)=>e.name.localeCompare(t.name))),fetching:a(()=>n.value.fetching.items),loaded:a(()=>r.value),fetchScenes:async()=>e.fetch(),getScene:async t=>e.get({id:t}),findById:t=>e.findById(t),findBySpace:t=>e.findBySpace(t),triggerScene:async(t,n)=>{await e.trigger({id:t,source:n})},removeScene:async t=>{await e.remove({id:t})}}},ae=()=>{let{t:e}=r(),t=b(),n=k().getStore(M);return{addScene:async e=>n.add(e),editScene:async e=>n.edit(e),removeScene:async e=>{await n.remove({id:e})},bulkRemove:async r=>{if(r.length!==0)try{await v.confirm(e(`scenes.texts.confirmBulkRemove`,{count:r.length}),e(`scenes.headings.bulkRemove`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of r)try{await n.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`scenes.messages.bulkRemoved`,{count:i})),a>0&&t.error(e(`scenes.messages.bulkRemoveFailed`,{count:a}))}catch{}},bulkEnable:async r=>{if(r.length!==0)try{await v.confirm(e(`scenes.texts.confirmBulkEnable`,{count:r.length}),e(`scenes.headings.bulkEnable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`info`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{enabled:!0}}),i++}catch{a++}i>0&&t.success(e(`scenes.messages.bulkEnabled`,{count:i})),a>0&&t.error(e(`scenes.messages.bulkEnableFailed`,{count:a}))}catch{t.info(e(`scenes.messages.bulkEnableCanceled`))}},bulkDisable:async r=>{if(r.length!==0)try{await v.confirm(e(`scenes.texts.confirmBulkDisable`,{count:r.length}),e(`scenes.headings.bulkDisable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{enabled:!1}}),i++}catch{a++}i>0&&t.success(e(`scenes.messages.bulkDisabled`,{count:i})),a>0&&t.error(e(`scenes.messages.bulkDisableFailed`,{count:a}))}catch{t.info(e(`scenes.messages.bulkDisableCanceled`))}}}},$={search:void 0,categories:[],primarySpaceId:void 0,enabled:`all`},oe={by:`name`,dir:`asc`},se=()=>{let e=k().getStore(M),{firstLoad:n,semaphore:r}=m(e),{filters:i,sort:s,pagination:c,reset:l}=_({key:`${P}:scenes:list`,filters:{schema:H,defaults:$},sort:{defaults:[oe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=a(()=>i.value.search!==$.search||!(0,X.isEqual)(i.value.categories,$.categories)||i.value.primarySpaceId!==$.primarySpaceId||i.value.enabled!==$.enabled),d=o(c.value.size||10),f=o(c.value.page||1),p=o(s.value.length>0?s.value[0]?.by:void 0),h=o(s.value.length>0?s.value[0]?.dir??null:null),g=(e,t)=>t?t===`whole_home`?!e:e===t:!0,v=a(()=>{let t=e.findAll().filter(e=>!e.draft&&(!i.value.search||e.id.toLowerCase().includes(i.value.search.toLowerCase())||e.name.toLowerCase().includes(i.value.search.toLowerCase())||e.description?.toLowerCase().includes(i.value.search.toLowerCase()))&&(i.value.categories.length===0||i.value.categories.includes(e.category))&&g(e.primarySpaceId,i.value.primarySpaceId)&&(i.value.enabled===`all`||i.value.enabled===`enabled`&&e.enabled||i.value.enabled===`disabled`&&!e.enabled)),n=p.value??`order`;return A(t,[e=>e[n]??``],[h.value??`asc`])}),y=a(()=>{let e=(f.value-1)*d.value,t=e+d.value;return v.value.slice(e,t)}),b=async()=>{await e.fetch()},x=a(()=>r.value.fetching.items||!n.value),S=a(()=>n.value),C=a(()=>e.findAll().filter(e=>!e.draft).length);return t(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),t(()=>f.value,e=>{c.value.page=e}),t(()=>d.value,e=>{c.value.size=e}),t(()=>h.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),t(()=>p.value,e=>{e===void 0||h.value===null?s.value=[]:s.value=[{by:e,dir:h.value}]}),t(()=>i.value,()=>{f.value=1},{deep:!0}),{scenes:v,scenesPaginated:y,totalRows:C,areLoading:x,loaded:S,fetchScenes:b,filters:i,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:h,resetFilter:l}};export{P as _,re as a,q as c,L as d,I as f,F as g,B as h,ie as i,Y as l,z as m,ae as n,Z as o,R as p,Q as r,J as s,se as t,U as u,N as v,V as y};
|
|
1
|
+
import"./chunk-DECur_0Z.js";import{Nr as e,Xr as t,ci as n,d as r,fi as i,mr as a,ui as o}from"./icon-with-child-DmQ_XhQy.js";import{Fn as s,Gn as c,Kn as l,Or as u,Qn as d,Qt as f,Un as p,Va as m,Xn as h,ar as g,d as _,di as v,er as y,g as b,gn as x,ir as S,k as C,or as w,p as T,qt as E,rr as D,tr as O,w as k,wn as A,x as ee}from"./common-KNQoamuF.js";import{t as te}from"./useSpaces-BtICJZ-p.js";import{o as j,s as M}from"./composables-C3Nl8Aod.js";var N=`scenes`,P=`scenes-module`,F=`ScenesModule.`,I=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerScene`,e}({}),L=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerSceneHandler`,e}({}),R=function(e){return e.SCENE_CREATED=`ScenesModule.Scene.Created`,e.SCENE_UPDATED=`ScenesModule.Scene.Updated`,e.SCENE_DELETED=`ScenesModule.Scene.Deleted`,e.SCENE_TRIGGERED=`ScenesModule.Scene.Triggered`,e.SCENE_EXECUTION_STARTED=`ScenesModule.Scene.ExecutionStarted`,e.SCENE_EXECUTION_COMPLETED=`ScenesModule.Scene.ExecutionCompleted`,e.SCENE_EXECUTION_FAILED=`ScenesModule.Scene.ExecutionFailed`,e.SCENE_ACTION_CREATED=`ScenesModule.SceneAction.Created`,e.SCENE_ACTION_UPDATED=`ScenesModule.SceneAction.Updated`,e.SCENE_ACTION_DELETED=`ScenesModule.SceneAction.Deleted`,e}({}),z=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),B={SCENES:`scenes_module-scenes`,SCENES_ADD:`scenes_module-scenes_add`,SCENES_EDIT:`scenes_module-scenes_edit`,SCENE:`scenes_module-scene`,SCENE_EDIT:`scenes_module-scene_edit`,SCENE_ADD_ACTION:`scenes_module-scene_add_action`,SCENE_EDIT_ACTION:`scenes_module-scene_edit_action`},V={[u.generic]:`mdi:playlist-play`,[u.lighting]:`mdi:lightbulb-group`,[u.climate]:`mdi:thermostat`,[u.media]:`mdi:television-play`,[u.work]:`mdi:briefcase`,[u.relax]:`mdi:sofa`,[u.night]:`mdi:weather-night`,[u.morning]:`mdi:weather-sunset-up`,[u.party]:`mdi:party-popper`,[u.movie]:`mdi:movie-open`,[u.away]:`mdi:home-export-outline`,[u.home]:`mdi:home-import-outline`,[u.security]:`mdi:shield-home`,[u.energy]:`mdi:flash`,[u.custom]:`mdi:shape-outline`},H=O({search:S().optional(),categories:c(d(u)),primarySpaceId:g([S().uuid(),h(`whole_home`)]).optional(),enabled:p([`all`,`enabled`,`disabled`]).default(`all`)}),U=({id:e})=>{let t=k(),n=t.getStore(M),r=t.getStore(j),{data:i,semaphore:o}=m(n);return{scene:a(()=>e===null?null:i.value.get(e)??null),isLoading:a(()=>o.value.fetching.item.includes(e)?!0:i.value.get(e)===void 0?o.value.fetching.items:!1),fetchScene:async()=>{i.value.get(e)?.draft||(await n.get({id:e}),await r.fetch({sceneId:e}))}}},W=O({id:S().uuid().optional(),type:S().trim().nonempty(),configuration:D(S(),w()).default({}),order:y().int().min(0).optional(),enabled:l().default(!0)}).catchall(w());O({id:S().uuid(),type:S().trim().nonempty(),configuration:D(S(),w()).optional(),order:y().int().min(0).optional(),enabled:l().optional()}).catchall(w());var G=O({id:S().uuid().optional(),name:S().trim().nonempty(),description:S().trim().transform(e=>e===``?null:e).nullable().optional(),category:d(u).default(u.generic),icon:S().nullable().optional(),enabled:l().default(!0),order:y().optional(),primarySpaceId:S().uuid().nullable().optional().transform(e=>e===``?null:e),actions:c(W).default([])}),K=O({id:S().uuid(),name:S().trim().nonempty().optional(),description:S().trim().transform(e=>e===``?null:e).nullable().optional(),category:d(u).optional(),icon:S().nullable().optional(),enabled:l().optional(),order:y().optional(),primarySpaceId:S().uuid().nullable().optional().transform(e=>e===``?null:e),actions:c(W).default([])}),q=class extends Error{exception;constructor(e,t=null){super(e),this.name=`ScenesException`,this.exception=t}},J=class extends q{code;constructor(e,t=null,n=null){super(e,n),this.name=`ScenesApiException`,this.code=t}},Y=class extends q{constructor(e,t=null){super(e,t),this.name=`ScenesValidationException`}},ne=()=>{let e=C(),{enabled:t}=x(),n=[`sceneActionAddForm`,`sceneActionEditForm`,`sceneActionCard`],r=[`sceneActionSchema`,`sceneActionAddFormSchema`,`sceneActionEditFormSchema`,`sceneActionCreateReqSchema`,`sceneActionUpdateReqSchema`],i=a(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`scenes-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`scenes-module`)))return!1;let t=n.length===0||!!e.components&&n.some(t=>e.components&&t in e.components),i=r.length===0||!!e.schemas&&r.some(t=>e.schemas&&t in e.schemas);return t||i}):!1));return{plugins:i,options:a(()=>A(i.value.flatMap(e=>(e.elements??[]).filter(e=>{let t=e.modules===void 0||e.modules.includes(`scenes-module`),r=!!e.components&&n.some(t=>e.components&&t in e.components);return t&&r}).map(n=>({value:n.type,label:n.name?.trim()?n.name:e.name,disabled:!t(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>i.value.find(t=>t.type===e),getByType:e=>i.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)))),getElement:e=>{for(let t of i.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)));if(n)return n}}}},X=s(),Z=({id:e})=>{let s=k(),c=s.getStore(M),l=s.getStore(j),{t:d}=r(),p=b(),m=ee(),{spaces:h,fetching:g,fetchSpaces:_}=te(),v=o(z.NONE),y,x=a(()=>Object.values(u).map(e=>({value:e,label:d(`scenes.categories.${e}`),icon:V[e]}))),S=a(()=>{let e=h.value.filter(e=>e.type===E.ROOM).map(e=>({value:e.id,label:e.name,icon:f(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=h.value.filter(e=>e.type===E.ZONE).map(e=>({value:e.id,label:e.name,icon:f(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:E.ROOM,label:d(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:E.ZONE,label:d(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),C=n({id:e,category:u.generic,name:``,description:null,icon:null,enabled:!0,primarySpaceId:null,actions:[]}),{options:w,getElement:D}=ne(),O=e=>{let t=e.propertyId;return t&&C.actions.find(e=>e.propertyId===t)?(p.warning(d(`scenes.messages.duplicateAction`)),!1):(C.actions.push(e),!0)},A=e=>{C.actions.splice(e,1)},N=(e,t)=>{e>=0&&e<C.actions.length&&(C.actions[e]=t)},P=e=>D(e)?.components?.sceneActionCard??null,F=e=>D(e)?.components?.sceneActionAddForm??null,I=e=>D(e)?.components?.sceneActionEditForm??null,L=e=>w.value.find(t=>t.value===e)?.label??e,R=T(i(C)),B=o(void 0),H=o(!1),U=async(e,t)=>{try{for(let n=0;n<t.length;n++){let r=t[n];r&&await l.add({sceneId:e,data:{...r,order:n,enabled:r.enabled??!0}})}}catch(e){throw m.error(`Error syncing scene actions:`,e),e}},W=async()=>{if(B.value.clearValidate(),!await B.value.validate())throw new Y(`Form not valid`);let t=G.safeParse(C);if(!t.success)throw m.error(`Schema validation failed with:`,t.error),new Y(`Failed to validate create scene model.`);v.value=z.WORKING;let n=d(`scenes.messages.createFailed`);try{let n=await c.add({id:e,draft:!1,data:t.data});t.data.actions.length>0&&await U(n.id,t.data.actions)}catch(e){throw v.value=z.ERROR,y=window.setTimeout(K,2e3),e instanceof J&&e.code===422?p.error(e.message):p.error(n),e}return v.value=z.OK,y=window.setTimeout(K,2e3),p.success(d(`scenes.messages.created`)),`added`},K=()=>{window.clearTimeout(y),v.value=z.NONE};return t(C,()=>{H.value=!(0,X.isEqual)(i(C),R)}),{categoriesOptions:x,spacesOptionsGrouped:S,model:C,formEl:B,formChanged:H,submit:W,clear:K,formResult:v,loadingSpaces:g,fetchSpaces:_,actionPluginOptions:w,addAction:O,removeAction:A,updateAction:N,getActionCardComponent:P,getActionFormComponent:F,getActionEditFormComponent:I,getPluginLabel:L}},re=({scene:s,messages:c})=>{let l=k(),d=l.getStore(M),p=l.getStore(j),{t:m}=r(),h=b(),g=ee(),{spaces:_,fetching:v,fetchSpaces:y}=te(),x=o(z.NONE),S=a(()=>p.findForScene(s.id)),C=o(T(S.value)),w,D=a(()=>Object.values(u).map(e=>({value:e,label:m(`scenes.categories.${e}`),icon:V[e]}))),O=a(()=>{let e=_.value.filter(e=>e.type===E.ROOM).map(e=>({value:e.id,label:e.name,icon:f(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=_.value.filter(e=>e.type===E.ZONE).map(e=>({value:e.id,label:e.name,icon:f(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:E.ROOM,label:m(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:E.ZONE,label:m(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),A=a(()=>S.value.map(e=>({...e}))),N=n({id:s.id,category:s.category,name:s.name,description:s.description,icon:s.icon,enabled:s.enabled,primarySpaceId:s.primarySpaceId,actions:A.value}),{options:P,getElement:F}=ne(),I=e=>{let t=e.propertyId;return t&&N.actions.find(e=>e.propertyId===t)?(h.warning(m(`scenes.messages.duplicateAction`)),!1):(N.actions.push(e),!0)},L=e=>{N.actions.splice(e,1)},R=(e,t)=>{e>=0&&e<N.actions.length&&(N.actions[e]=t)},B=e=>F(e)?.components?.sceneActionCard??null,H=e=>F(e)?.components?.sceneActionAddForm??null,U=e=>F(e)?.components?.sceneActionEditForm??null,W=e=>P.value.find(t=>t.value===e)?.label??e,G=o(void 0),q=o(!1),Z=T(i(N)),re=async(e,t)=>{try{let n=new Set(C.value.map(e=>e.id)),r=new Set(t.filter(e=>e.id).map(e=>e.id));for(let t of C.value)r.has(t.id)||await p.remove({id:t.id,sceneId:e});let i=new Map;for(let r=0;r<t.length;r++){let a=t[r];if(!a)continue;let o=a.id;if(!o||!n.has(o)){let t=await p.add({sceneId:e,data:{...a,order:r,enabled:a.enabled??!0}});i.set(r,t.id)}else{let t=C.value.find(e=>e.id===o);if(t){let n=new Set([`id`,`draft`,`createdAt`,`updatedAt`,`scene`]),i=e=>Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)));(0,X.isEqual)(i(t),{...i(a),order:r})||await p.edit({id:o,sceneId:e,data:{...a,order:r}})}}}for(let[e,t]of i){let n=N.actions[e];n&&(n.id=t)}C.value=T(p.findForScene(e))}catch(e){throw g.error(`Error syncing scene actions:`,e),e}},ie=async()=>{let e=s.draft,t=c&&c.error?c.error:s.draft?m(`scenes.messages.createFailed`):m(`scenes.messages.editFailed`,{scene:s.name});if(G.value.clearValidate(),!await G.value.validate())throw new Y(`Form not valid`);let n=K.safeParse(N);if(!n.success)throw g.error(`Schema validation failed with:`,n.error),new Y(`Failed to validate edit scene model.`);x.value=z.WORKING;try{await d.edit({id:s.id,data:n.data});let t=s.id;if(e){let e=await d.save({id:s.id});N.id=e.id,N.category=e.category,N.name=e.name,N.description=e.description,N.icon=e.icon,N.enabled=e.enabled,N.primarySpaceId=e.primarySpaceId,t=e.id}await re(t,n.data.actions)}catch(e){throw x.value=z.ERROR,w=window.setTimeout(Q,2e3),e instanceof J&&e.code===422?h.error(e.message):e instanceof Y||(h.error(t),g.error(`Scene edit failed:`,e)),e}return x.value=z.OK,w=window.setTimeout(Q,2e3),e?(h.success(m(c&&c.success?c.success:`scenes.messages.created`)),`added`):(h.success(m(c&&c.success?c.success:`scenes.messages.edited`,{scene:s.name})),q.value=!1,Z=T(i(N)),`saved`)},Q=()=>{window.clearTimeout(w),x.value=z.NONE};return t(N,()=>{q.value=!(0,X.isEqual)(i(N),Z)}),e(()=>{Q()}),{categoriesOptions:D,spacesOptionsGrouped:O,model:N,formEl:G,formChanged:q,submit:ie,clear:Q,formResult:x,loadingSpaces:v,fetchSpaces:y,actionPluginOptions:P,addAction:I,removeAction:L,updateAction:R,getActionCardComponent:B,getActionFormComponent:H,getActionEditFormComponent:U,getPluginLabel:W}},ie=({id:e})=>{let t=k().getStore(M);return{icon:a(()=>{let n=t.findById(e);return n?.icon?n.icon:n?.category&&n.category in V?V[n.category]:V[u.generic]})}},Q=()=>{let e=k().getStore(M),{data:t,semaphore:n,firstLoad:r}=m(e);return{scenes:a(()=>Array.from(t.value.values()).sort((e,t)=>e.name.localeCompare(t.name))),fetching:a(()=>n.value.fetching.items),loaded:a(()=>r.value),fetchScenes:async()=>e.fetch(),getScene:async t=>e.get({id:t}),findById:t=>e.findById(t),findBySpace:t=>e.findBySpace(t),triggerScene:async(t,n)=>{await e.trigger({id:t,source:n})},removeScene:async t=>{await e.remove({id:t})}}},ae=()=>{let{t:e}=r(),t=b(),n=k().getStore(M);return{addScene:async e=>n.add(e),editScene:async e=>n.edit(e),removeScene:async e=>{await n.remove({id:e})},bulkRemove:async r=>{if(r.length!==0)try{await v.confirm(e(`scenes.texts.confirmBulkRemove`,{count:r.length}),e(`scenes.headings.bulkRemove`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of r)try{await n.remove({id:e.id}),i++}catch{a++}i>0&&t.success(e(`scenes.messages.bulkRemoved`,{count:i})),a>0&&t.error(e(`scenes.messages.bulkRemoveFailed`,{count:a}))}catch{}},bulkEnable:async r=>{if(r.length!==0)try{await v.confirm(e(`scenes.texts.confirmBulkEnable`,{count:r.length}),e(`scenes.headings.bulkEnable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`info`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{enabled:!0}}),i++}catch{a++}i>0&&t.success(e(`scenes.messages.bulkEnabled`,{count:i})),a>0&&t.error(e(`scenes.messages.bulkEnableFailed`,{count:a}))}catch{t.info(e(`scenes.messages.bulkEnableCanceled`))}},bulkDisable:async r=>{if(r.length!==0)try{await v.confirm(e(`scenes.texts.confirmBulkDisable`,{count:r.length}),e(`scenes.headings.bulkDisable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`});let i=0,a=0;for(let e of r)try{await n.edit({id:e.id,data:{enabled:!1}}),i++}catch{a++}i>0&&t.success(e(`scenes.messages.bulkDisabled`,{count:i})),a>0&&t.error(e(`scenes.messages.bulkDisableFailed`,{count:a}))}catch{t.info(e(`scenes.messages.bulkDisableCanceled`))}}}},$={search:void 0,categories:[],primarySpaceId:void 0,enabled:`all`},oe={by:`name`,dir:`asc`},se=()=>{let e=k().getStore(M),{firstLoad:n,semaphore:r}=m(e),{filters:i,sort:s,pagination:c,reset:l}=_({key:`${P}:scenes:list`,filters:{schema:H,defaults:$},sort:{defaults:[oe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=a(()=>i.value.search!==$.search||!(0,X.isEqual)(i.value.categories,$.categories)||i.value.primarySpaceId!==$.primarySpaceId||i.value.enabled!==$.enabled),d=o(c.value.size||10),f=o(c.value.page||1),p=o(s.value.length>0?s.value[0]?.by:void 0),h=o(s.value.length>0?s.value[0]?.dir??null:null),g=(e,t)=>t?t===`whole_home`?!e:e===t:!0,v=a(()=>{let t=e.findAll().filter(e=>!e.draft&&(!i.value.search||e.id.toLowerCase().includes(i.value.search.toLowerCase())||e.name.toLowerCase().includes(i.value.search.toLowerCase())||e.description?.toLowerCase().includes(i.value.search.toLowerCase()))&&(i.value.categories.length===0||i.value.categories.includes(e.category))&&g(e.primarySpaceId,i.value.primarySpaceId)&&(i.value.enabled===`all`||i.value.enabled===`enabled`&&e.enabled||i.value.enabled===`disabled`&&!e.enabled)),n=p.value??`order`;return A(t,[e=>e[n]??``],[h.value??`asc`])}),y=a(()=>{let e=(f.value-1)*d.value,t=e+d.value;return v.value.slice(e,t)}),b=async()=>{await e.fetch()},x=a(()=>r.value.fetching.items||!n.value),S=a(()=>n.value),C=a(()=>e.findAll().filter(e=>!e.draft).length);return t(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),t(()=>f.value,e=>{c.value.page=e}),t(()=>d.value,e=>{c.value.size=e}),t(()=>h.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),t(()=>p.value,e=>{e===void 0||h.value===null?s.value=[]:s.value=[{by:e,dir:h.value}]}),t(()=>i.value,()=>{f.value=1},{deep:!0}),{scenes:v,scenesPaginated:y,totalRows:C,areLoading:x,loaded:S,fetchScenes:b,filters:i,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:h,resetFilter:l}};export{P as _,re as a,q as c,L as d,I as f,F as g,B as h,ie as i,Y as l,z as m,ae as n,Z as o,R as p,Q as r,J as s,se as t,U as u,N as v,V as y};
|