/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/homebridge-tuya-local@3.1.1/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
const TuyaAccessory=require("./lib/TuyaAccessory"),TuyaDiscovery=require("./lib/TuyaDiscovery"),OccupancySensorAccessory=require("./lib/OccupancySensorAccessory"),OutletAccessory=require("./lib/OutletAccessory"),SimpleLightAccessory=require("./lib/SimpleLightAccessory"),MultiOutletAccessory=require("./lib/MultiOutletAccessory"),CustomMultiOutletAccessory=require("./lib/CustomMultiOutletAccessory"),RGBTWLightAccessory=require("./lib/RGBTWLightAccessory"),RGBTWOutletAccessory=require("./lib/RGBTWOutletAccessory"),TWLightAccessory=require("./lib/TWLightAccessory"),AirConditionerAccessory=require("./lib/AirConditionerAccessory"),AirPurifierAccessory=require("./lib/AirPurifierAccessory"),DehumidifierAccessory=require("./lib/DehumidifierAccessory"),ConvectorAccessory=require("./lib/ConvectorAccessory"),GarageDoorAccessory=require("./lib/GarageDoorAccessory"),SimpleDimmerAccessory=require("./lib/SimpleDimmerAccessory"),SimpleDimmer2Accessory=require("./lib/SimpleDimmer2Accessory"),SimpleBlindsAccessory=require("./lib/SimpleBlindsAccessory"),SimpleHeaterAccessory=require("./lib/SimpleHeaterAccessory"),SimpleFanAccessory=require("./lib/SimpleFanAccessory"),SimpleFanLightAccessory=require("./lib/SimpleFanLightAccessory"),SwitchAccessory=require("./lib/SwitchAccessory"),ValveAccessory=require("./lib/ValveAccessory"),OilDiffuserAccessory=require("./lib/OilDiffuserAccessory"),PLUGIN_NAME="homebridge-tuya-local",PLATFORM_NAME="TuyaLan",CLASS_DEF={occupancysensor:OccupancySensorAccessory,outlet:OutletAccessory,simplelight:SimpleLightAccessory,rgbtwlight:RGBTWLightAccessory,rgbtwoutlet:RGBTWOutletAccessory,twlight:TWLightAccessory,multioutlet:MultiOutletAccessory,custommultioutlet:CustomMultiOutletAccessory,airconditioner:AirConditionerAccessory,airpurifier:AirPurifierAccessory,dehumidifier:DehumidifierAccessory,convector:ConvectorAccessory,garagedoor:GarageDoorAccessory,simpledimmer:SimpleDimmerAccessory,simpledimmer2:SimpleDimmer2Accessory,simpleblinds:SimpleBlindsAccessory,simpleheater:SimpleHeaterAccessory,switch:SwitchAccessory,fan:SimpleFanAccessory,fanlight:SimpleFanLightAccessory,watervalve:ValveAccessory,oildiffuser:OilDiffuserAccessory};let Characteristic,PlatformAccessory,Service,Categories,AdaptiveLightingController,UUID;module.exports=function(e){({platformAccessory:PlatformAccessory,hap:{Characteristic:Characteristic,Service:Service,AdaptiveLightingController:AdaptiveLightingController,Accessory:{Categories:Categories},uuid:UUID}}=e),e.registerPlatform(PLUGIN_NAME,"TuyaLan",TuyaLan,!0)};class TuyaLan{constructor(...e){if([this.log,this.config,this.api]=[...e],this.cachedAccessories=new Map,this.api.hap.EnergyCharacteristics=require("./lib/EnergyCharacteristics")(this.api.hap.Characteristic),!this.config||!this.config.devices)return this.log("No devices found. Check that you have specified them in your config.json file."),!1;this._expectedUUIDs=this.config.devices.map((e=>UUID.generate(PLUGIN_NAME+(e.fake?":fake:":":")+e.id))),this.api.on("didFinishLaunching",(()=>{this.discoverDevices()}))}discoverDevices(){const e={},i=[],s=[];this.config.devices.forEach((i=>{try{i.id=(""+i.id).trim(),i.key=(""+i.key).trim(),i.type=(""+i.type).trim(),i.ip=(""+(i.ip||"")).trim()}catch(e){}return i.type?CLASS_DEF[i.type.toLowerCase()]?void(i.fake?s.push({name:i.id.slice(8),...i}):e[i.id]={name:i.id.slice(8),...i}):this.log.error("%s (%s) doesn't have a valid type defined.",i.name||"Unnamed device",i.id):this.log.error("%s (%s) doesn't have a type defined.",i.name||"Unnamed device",i.id)}));const r=Object.keys(e);if(0===r.length)return this.log.error("No valid configured devices found.");this.log.info("Starting discovery..."),TuyaDiscovery.start({ids:r,log:this.log}).on("discover",(s=>{if(!s||!s.id)return;if(!e[s.id])return this.log.warn("Discovered a device that has not been configured yet (%s@%s).",s.id,s.ip);i.push(s.id),this.log.info("Discovered %s (%s) identified as %s (%s)",e[s.id].name,s.id,e[s.id].type,s.version);const r=new TuyaAccessory({...e[s.id],...s,log:this.log,UUID:UUID.generate(PLUGIN_NAME+":"+s.id),connect:!1});this.addAccessory(r)})).on("ipChanged",(({id:i,oldIp:s,newIp:r})=>{if(e[i]){this.log.info("Device %s (%s) IP changed from %s to %s.",e[i].name,i,s,r),e[i].ip=r;const c=new TuyaAccessory({...e[i],log:this.log,UUID:UUID.generate(PLUGIN_NAME+":"+i),connect:!1});this.addAccessory(c)}else this.log.warn("IP changed for unknown device %s from %s to %s.",i,s,r)})).on("update",(i=>{if(i&&i.id){if(!e[i.id])return this.log.warn("Trying to update IP of a device that has not been configured yet (%s@%s).",i.id,i.ip);if(e[i.id]&&e[i.id].ip!==i.ip){this.log.info("Device %s (%s) moved from %s to %s.",e[i.id].name,i.id,e[i.id].ip,i.ip);const s=new TuyaAccessory({...e[i.id],...i,log:this.log,UUID:UUID.generate(PLUGIN_NAME+":"+i.id),connect:!1});this.addAccessory(s)}}})),s.forEach((e=>{this.log.info("Adding fake device: %s",e.name),this.addAccessory(new TuyaAccessory({...e,log:this.log,UUID:UUID.generate(PLUGIN_NAME+":fake:"+e.id),connect:!1}))})),setTimeout((()=>{r.forEach((s=>{if(!i.includes(s))if(e[s].ip){this.log.info("Failed to discover %s (%s) in time but will connect via %s.",e[s].name,s,e[s].ip);const i=new TuyaAccessory({...e[s],log:this.log,UUID:UUID.generate(PLUGIN_NAME+":"+s),connect:!1});this.addAccessory(i)}else this.log.warn("Failed to discover %s (%s) in time but will keep looking.",e[s].name,s)}))}),6e4)}registerPlatformAccessories(e){this.api.registerPlatformAccessories(PLUGIN_NAME,"TuyaLan",Array.isArray(e)?e:[e])}configureAccessory(e){e instanceof PlatformAccessory&&this._expectedUUIDs&&this._expectedUUIDs.includes(e.UUID)?(this.cachedAccessories.set(e.UUID,e),e.services.forEach((i=>{i.UUID!==Service.AccessoryInformation.UUID&&i.characteristics.some((s=>{if(s.props&&Array.isArray(s.props.perms)&&3===s.props.perms.length&&s.props.perms.includes(Characteristic.Perms.WRITE)&&s.props.perms.includes(Characteristic.Perms.NOTIFY))return this.log.info("Marked %s unreachable by faulting Service.%s.%s",e.displayName,i.displayName,s.displayName),s.updateValue(new Error("Unreachable")),!0}))}))):setTimeout((()=>{this.removeAccessory(e)}),1e3)}addAccessory(e){const i=e.context,s=(i.type||"").toLowerCase(),r=CLASS_DEF[s];let c=this.cachedAccessories.get(i.UUID),o=!0;c&&c.category!==r.getCategory(Categories)&&(this.log.info("%s has a different type (%s vs %s)",c.displayName,c.category,r.getCategory(Categories)),this.removeAccessory(c),c=null),c||(c=new PlatformAccessory(i.name,i.UUID,r.getCategory(Categories)),c.getService(Service.AccessoryInformation).setCharacteristic(Characteristic.Manufacturer,i.manufacturer||"Unknown").setCharacteristic(Characteristic.Model,i.model||"Unknown").setCharacteristic(Characteristic.SerialNumber,i.id.slice(8)),o=!1),c&&c.displayName!==i.name&&(this.log.info("Configuration name %s differs from cached displayName %s. Updating cached displayName to %s ",i.name,c.displayName,i.name),c.displayName=i.name),c&&String(c.ip)!==String(i.ip)&&this.log.info("Accessory IP changed from %s to %s",String(c.ip),String(i.ip)),this.cachedAccessories.set(i.UUID,new r(this,c,e,!o))}removeAccessory(e){e&&(this.log.warn("Unregistering",e.displayName),delete this.cachedAccessories[e.UUID],this.api.unregisterPlatformAccessories("TuyaLan","TuyaLan",[e]))}removeAccessoryByUUID(e){e&&this.removeAccessory(this.cachedAccessories.get(e))}}
//# sourceMappingURL=/sm/67aa09c6610fdfde6aea57f385bd3151e7fb079b8545551a1d6ce7377534dd4c.map