/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/iobroker.vis-shelly@0.0.7/main.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";const utils=require("@iobroker/adapter-core");class visShelly extends utils.Adapter{constructor(e){super({...e,name:"vis-shelly"}),this.isUnloaded=!1,this.on("ready",this.onReady.bind(this)),this.on("objectChange",this.onObjectChange.bind(this)),this.on("stateChange",this.onStateChange.bind(this)),this.on("unload",this.onUnload.bind(this)),this.setState("info.connection",!1,!0)}async onReady(){void 0===this.config.knownShellyIDs&&(this.config.knownShellyIDs={}),await this.subscribeForeignObjectsAsync("shelly.*"),this.updateDeviceList(!0),this.updateRoomsList(),this.setState("info.connection",!0,!0)}async updateDeviceList(e=!1){const t=await this.getForeignObjectsAsync("shelly.*","device"),s=Object.keys(t);let i=[],n=!1;if(await this.setObjectNotExistsAsync("devices.ids",{type:"state",common:{name:"Shelly DeviceList",type:"array",role:"shelly.deviceList",read:!0,write:!0,def:"[]"},native:{}}),e)this.config.knownShellyIDs={};else{const e=await this.getStateAsync("devices.ids");"string"==typeof e&&(i=JSON.parse(e)),Array.isArray(i)||(i=[])}for(const t of s)await this.updateDevice(t,i,e)&&(n=!0);n&&await this.setStateAsync("devices.ids",{val:JSON.stringify(i),ack:!0}),this.log.info(`Devices updated (Force:${e?"yes":"no"})`)}async updateDevice(e,t,s){let i=!1;const n=e.substring(e.lastIndexOf(".")+1,e.length);if(void 0===await this.getStatesAsync(`devices.${n}`)||s){await this.setObjectNotExistsAsync("devices."+n,{type:"device",common:{name:n},native:{}}),await this.setObjectNotExistsAsync("devices."+n+".type",{type:"state",common:{name:n+".type",type:"string",role:"name",read:!0,write:!0},native:{}});let s=1;const a=await this.getForeignStateAsync(e+".type");null!=a&&(this.setState("devices."+n+".type",{val:a.val,ack:!0}),t.push({stateId:e,id:n,type:a.val}),this.config.knownShellyIDs[e]=!0,i=!0,"shellyplus2pm"==a.val&&(s=2));for(let t=0;t<s;t++)await this.setObjectNotExistsAsync("devices."+n+"."+t,{type:"device",common:{name:"Device Realay "+n},native:{}}),this.setObjectNotExists("devices."+n+"."+t+".name",{type:"state",common:{name:n+".name",type:"string",role:"name",read:!0,write:!0,def:null},native:{}},(()=>{this.getState(`devices.${n}.${t}.name`,((i,a)=>{null==a&&this.getForeignState(e+".name",((e,i)=>{let a="";a=null==i||null==i.val||""==i.val?n:i.val.toString(),s>1&&(a+=`-${t}`),this.setState(`devices.${n}.${t}.name`,{val:a,ack:!0})}))}))}))}return i}async updateRoomsList(){const e={};for(const t of Object.keys(this.config.rooms)){const s=this.config.rooms[t];e[s.id]=s.name}const t=await this.getObjectViewAsync("system","device",{startkey:`vis-shelly.${this.instance}.devices.`,endkey:`vis-shelly.${this.instance}.devices.香`});for(const s of Object.keys(t.rows)){const i=[...t.rows[s].id.matchAll(/[.]([^.]*[.][0-9]*)$/g)];0!=i.length&&this.setObjectAsync("devices."+i[0][1]+".room",{type:"state",common:{name:"room",type:"string",role:"name",read:!0,write:!0,states:e},native:{}})}this.setObjectAsync("devices.roomIds",{type:"state",common:{name:"room",type:"array",role:"name",read:!0,write:!1},native:{}}),await this.setStateAsync("devices.roomIds",{val:JSON.stringify(e),ack:!0})}onUnload(e){try{this.setState("info.connection",!1,!0),this.log.info("cleaned everything up..."),this.unsubscribeForeignObjects("shelly.*"),e()}catch(t){e()}}onObjectChange(e,t){e.indexOf("vis-shelly")>-1||t&&"device"==t.type&&void 0===this.config.knownShellyIDs[t._id]&&(this.log.info("update new Device"),this.log.info(JSON.stringify(this.config.knownShellyIDs)),this.log.info(e),this.updateDeviceList())}onStateChange(e,t){t?this.log.info(`state ${e} changed: ${t.val} (ack = ${t.ack})`):this.log.info(`state ${e} deleted`)}createAndSetState(e,t,s,i){this.setObjectNotExists(t,{type:"state",common:{name:s,type:"string",role:i,read:!0,write:!0},native:{}},(()=>{this.setState(t,{val:e,ack:!0})}))}}require.main!==module?module.exports=e=>new visShelly(e):new visShelly;
//# sourceMappingURL=/sm/e98da2f5d95bae576595387b77688d5974ba6d7814f2509693f785a32beb5c85.map