UNPKG

homebridge-fibaro-home-center

Version:

Homebridge plugin for Fibaro Home Center (2, 2 Lite, 3, 3 Lite, Yubii Home).

611 lines 26.3 kB
"use strict"; // deviceConfigurations.ts var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.autoDeviceConfigs = exports.DeviceConfigurations = void 0; const constants = __importStar(require("./constants")); const autoDeviceConfigs = new Map(); exports.autoDeviceConfigs = autoDeviceConfigs; // Decorator function for mapping device configurations to the device type function DeviceType(type) { return function (target, propertyKey) { autoDeviceConfigs.set(type, target[propertyKey]); }; } class DeviceConfigurations { constructor() { } // Light / Dimmer static lightWithSwitchOrDimmer(Service, Characteristic, device) { const { deviceControlType } = device.properties || {}; const controlType = typeof deviceControlType === 'string' ? parseInt(deviceControlType, 10) : deviceControlType; const isLightingControl = controlType === constants.CONTROL_TYPE_LIGHTING || controlType === constants.CONTROL_TYPE_LIGHTING_ALT; if (isLightingControl) { return [{ service: Service.Lightbulb, characteristics: [Characteristic.On, Characteristic.Brightness], subtype: device.id + '----', }]; } else { return [{ service: Service.Switch, characteristics: [Characteristic.On], subtype: device.id + '----', }]; } } // Light RGBW static lightWithRGBW(Service, Characteristic, device) { return [{ service: Service.Lightbulb, characteristics: [Characteristic.On, Characteristic.Brightness, Characteristic.Hue, Characteristic.Saturation], subtype: device.id + '----', }]; } // Light / Switch / Outlet / Valve // for Switch / Double Switch / Smart Implant / etc. static variousSwitches(Service, Characteristic, device) { const { deviceControlType } = device.properties || {}; const controlType = typeof deviceControlType === 'string' ? parseInt(deviceControlType, 10) : deviceControlType; switch (controlType) { // Lighting devices case constants.CONTROL_TYPE_LIGHTING: case constants.CONTROL_TYPE_BEDSIDE_LAMP: case constants.CONTROL_TYPE_WALL_LAMP: return [{ service: Service.Lightbulb, characteristics: [Characteristic.On], subtype: `${device.id}----`, }]; // Other devices case constants.CONTROL_TYPE_OTHER_DEVICE: case constants.CONTROL_TYPE_OTHER_DEVICE_ALT: return [{ service: Service.Switch, characteristics: [Characteristic.On], subtype: `${device.id}----`, }]; // Lock devices case constants.CONTROL_TYPE_VIDEO_INTERCOM: case constants.CONTROL_TYPE_VIDEO_GATE_OPEN: return [{ service: Service.LockMechanism, characteristics: [Characteristic.LockCurrentState, Characteristic.LockTargetState], subtype: `${device.id}--${constants.SUBTYPE_LOCK}`, }]; // Valve devices case constants.CONTROL_TYPE_SPRINKLER: case constants.CONTROL_TYPE_VALVE: return [{ service: Service.Valve, characteristics: [Characteristic.Active, Characteristic.InUse, Characteristic.ValveType], subtype: `${device.id}----`, }]; // Default case default: return [{ service: Service.Outlet, characteristics: [Characteristic.On, Characteristic.OutletInUse], subtype: `${device.id}----`, }]; } } // Window Covering / Garage door static windowCoveringAndGarageDoor(Service, Characteristic, device) { const properties = device.properties || {}; const { deviceControlType } = properties; const controlType = typeof deviceControlType === 'string' ? parseInt(deviceControlType, 10) : deviceControlType; const isGarageDoor = controlType === constants.CONTROL_TYPE_GATE_WITH_POSITIONING || controlType === constants.CONTROL_TYPE_GARAGE_DOOR || device.type === 'com.fibaro.barrier' || (device.type === 'com.fibaro.baseShutter' && !properties.favoritePositionsNativeSupport); const isBlindsWithPositioning = controlType === constants.CONTROL_TYPE_BLINDS_WITH_POSITIONING; const isBaseShutter = device.type === 'com.fibaro.baseShutter' || device.type === 'com.fibaro.remoteBaseShutter'; // Garage door cases if (isGarageDoor) { return [{ service: Service.GarageDoorOpener, characteristics: [ Characteristic.CurrentDoorState, Characteristic.TargetDoorState, Characteristic.ObstructionDetected ], subtype: device.id + '----', }]; } // Window covering case const characteristics = [ Characteristic.CurrentPosition, Characteristic.TargetPosition, Characteristic.PositionState, Characteristic.HoldPosition, ]; if (isBlindsWithPositioning) { characteristics.push(Characteristic.CurrentHorizontalTiltAngle, Characteristic.TargetHorizontalTiltAngle); } if (isBaseShutter) { return [{ service: Service.WindowCovering, characteristics: characteristics, subtype: device.id + '--' + constants.SUBTYPE_OPEN_CLOSE_ONLY, }]; } else { return [{ service: Service.WindowCovering, characteristics: characteristics, subtype: device.id + '----', }]; } } // Temperature sensor static temperatureSensor(Service, Characteristic, device) { return [{ service: Service.TemperatureSensor, characteristics: [Characteristic.CurrentTemperature], subtype: device.id + '----', }]; } // Humidity sensor static humiditySensor(Service, Characteristic, device) { return [{ service: Service.HumiditySensor, characteristics: [Characteristic.CurrentRelativeHumidity], subtype: device.id + '----', }]; } // Light sensor static lightSensor(Service, Characteristic, device) { return [{ service: Service.LightSensor, characteristics: [Characteristic.CurrentAmbientLightLevel], subtype: device.id + '----', }]; } // Multilevel sensor static multilevelSensor(Service, Characteristic, device, config, log) { const properties = device.properties || {}; const { deviceRole } = properties; const role = typeof deviceRole === 'string' ? parseInt(deviceRole, 10) : deviceRole; switch (role) { case constants.DEVICE_ROLE_TEMPERATURE_SENSOR: return [{ service: Service.TemperatureSensor, characteristics: [Characteristic.CurrentTemperature], subtype: device.id + '----', }]; case constants.DEVICE_ROLE_HUMIDITY_SENSOR: return [{ service: Service.HumiditySensor, characteristics: [Characteristic.CurrentRelativeHumidity], subtype: device.id + '----', }]; case constants.DEVICE_ROLE_LIGHT_SENSOR: case constants.DEVICE_ROLE_MULTILEVEL_SENSOR: return [{ service: Service.LightSensor, characteristics: [Characteristic.CurrentAmbientLightLevel], subtype: device.id + '----', }]; default: log.debug(`Unsupported device role for ID: ${device.id}, type: ${device.type}, role: ${deviceRole}`); return; } } // Motion sensor static motionSensor(Service, Characteristic, device) { return [{ service: Service.MotionSensor, characteristics: [Characteristic.MotionDetected], subtype: device.id + '----', }]; } // Doorbell / Contact sensor static doorbellContactSensor(Service, Characteristic, device, config) { const properties = device.properties || {}; const { deviceRole } = properties; const role = typeof deviceRole === 'string' ? parseInt(deviceRole, 10) : deviceRole; switch (true) { case role === constants.DEVICE_ROLE_MOTION_SENSOR || properties.deviceRole === 'MotionSensor': return [{ service: Service.MotionSensor, characteristics: [Characteristic.MotionDetected], subtype: device.id + '----', }]; case role === constants.DEVICE_ROLE_PRESENCE_SENSOR: return [{ service: Service.OccupancySensor, characteristics: [Characteristic.OccupancyDetected], subtype: device.id + '----', }]; case device.id === config.doorbellDeviceId: return [{ service: Service.Doorbell, characteristics: [Characteristic.ProgrammableSwitchEvent], subtype: device.id + '----', }]; default: return [{ service: Service.ContactSensor, characteristics: [Characteristic.ContactSensorState], subtype: device.id + '----', }]; } } // Leak sensor static leakSensor(Service, Characteristic, device) { return [{ service: Service.LeakSensor, characteristics: [Characteristic.LeakDetected], subtype: device.id + '----', }]; } // Smoke sensor static smokeSensor(Service, Characteristic, device) { return [{ service: Service.SmokeSensor, characteristics: [Characteristic.SmokeDetected], subtype: device.id + '----', }]; } // Carbon Monoxide Sensor static carbonMonoxideSensor(Service, Characteristic, device) { return [{ service: Service.CarbonMonoxideSensor, characteristics: [ Characteristic.CarbonMonoxideDetected, Characteristic.CarbonMonoxideLevel, Characteristic.CarbonMonoxidePeakLevel, Characteristic.BatteryLevel, ], subtype: device.id + '----', }]; } // Lock Mechanism static lockMechanism(Service, Characteristic, device) { return [{ service: Service.LockMechanism, characteristics: [ Characteristic.LockCurrentState, Characteristic.LockTargetState, ], subtype: device.id + '----', }]; } // Remote controller and remote scene controller static remoteController(Service, Characteristic, device) { let availableScenes = device.properties.availableScenes || []; let centralSceneSupport = device.properties.centralSceneSupport || []; // Parse availableScenes if it's a string if (typeof availableScenes === 'string') { try { availableScenes = JSON.parse(availableScenes); } catch (_a) { availableScenes = []; } } // Parse centralSceneSupport if it's a string if (typeof centralSceneSupport === 'string') { try { centralSceneSupport = JSON.parse(centralSceneSupport); } catch (_b) { centralSceneSupport = []; } } // Ensure availableScenes is an array and not empty if (Array.isArray(availableScenes) && availableScenes.length > 0) { const numberOfButtons = Math.ceil(availableScenes.length / 2); return Array.from({ length: numberOfButtons }, (_, index) => ({ service: Service.StatelessProgrammableSwitch, characteristics: [ Characteristic.ProgrammableSwitchEvent, Characteristic.ServiceLabelIndex, ], subtype: `${device.id}---${constants.SUBTYPE_REMOTE_CONTROLLER_SCENE_ACTIVATION}-${index + 1}`, })); } else if (Array.isArray(centralSceneSupport) && centralSceneSupport.length > 0) { // Fibaro button like devices return centralSceneSupport.map(keys => ({ service: Service.StatelessProgrammableSwitch, characteristics: [ Characteristic.ProgrammableSwitchEvent, Characteristic.ServiceLabelIndex, ], subtype: `${device.id}---${constants.SUBTYPE_REMOTE_CONTROLLER_CENTRAL_SCENE}-${keys.keyId}`, })); } // No supported configuration is found return; } // Radiator thermostatic valve. static radiatorThermostaticValve(Service, Characteristic, device) { return [{ service: Service.Thermostat, characteristics: [ Characteristic.CurrentTemperature, Characteristic.TargetTemperature, Characteristic.CurrentHeatingCoolingState, Characteristic.TargetHeatingCoolingState, Characteristic.TemperatureDisplayUnits, ], subtype: device.id + '--' + constants.SUBTYPE_RADIATOR_THERMOSTATIC_VALVE, }]; } // Security system static securitySystem(Service, Characteristic) { return [{ service: Service.SecuritySystem, characteristics: [ Characteristic.SecuritySystemCurrentState, Characteristic.SecuritySystemTargetState, ], subtype: '0--', }]; } // Scene static scene(Service, Characteristic, device) { return [{ service: Service.Switch, characteristics: [Characteristic.On], subtype: device.id + '--' + constants.SUBTYPE_SCENE, }]; } // Climate zone (HC3) static climateZone(Service, Characteristic, device) { return [{ service: Service.Thermostat, characteristics: [ Characteristic.CurrentTemperature, Characteristic.TargetTemperature, Characteristic.CurrentHeatingCoolingState, Characteristic.TargetHeatingCoolingState, Characteristic.TemperatureDisplayUnits, ], subtype: device.id + '--' + constants.SUBTYPE_CLIMATE_ZONE, }]; } // Heating zone (HC2 and HCL) static heatingZone(Service, Characteristic, device) { return [{ service: Service.Thermostat, characteristics: [ Characteristic.CurrentTemperature, Characteristic.TargetTemperature, Characteristic.CurrentHeatingCoolingState, Characteristic.TargetHeatingCoolingState, Characteristic.TemperatureDisplayUnits, ], subtype: device.id + '--' + constants.SUBTYPE_HEATING_ZONE, }]; } // Global variables static globalVariable(Service, Characteristic, device) { return [{ service: Service.Switch, characteristics: [Characteristic.On], subtype: device.type + '-' + device.name + '-', }]; } // Dimmer global variables static dimmerGlobalVariable(Service, Characteristic, device) { return [{ service: Service.Lightbulb, characteristics: [Characteristic.On, Characteristic.Brightness], subtype: device.type + '-' + device.name + '-', }]; } } exports.DeviceConfigurations = DeviceConfigurations; __decorate([ DeviceType(/^com\.fibaro\.FGD(?!W)/) // Exclude 'com.fibaro.FGDW' , DeviceType(/^com\.fibaro\.FGWD/), DeviceType('com.fibaro.multilevelSwitch'), DeviceType('com.fibaro.FGD212'), DeviceType('com.fibaro.FGWD111'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "lightWithSwitchOrDimmer", null); __decorate([ DeviceType(/^com\.fibaro\.FGRGBW/), DeviceType('com.fibaro.colorController'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "lightWithRGBW", null); __decorate([ DeviceType(/^com\.fibaro\.FGWDS/), DeviceType('com.fibaro.binarySwitch'), DeviceType('com.fibaro.developer.bxs.virtualBinarySwitch'), DeviceType('com.fibaro.satelOutput'), DeviceType(/^com\.fibaro\.FGWP/), DeviceType(/^com\.fibaro\.FGWOEF/), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "variousSwitches", null); __decorate([ DeviceType(/^com\.fibaro\.FGR(?!GBW)/), DeviceType(/^com\.fibaro\.FGRM/), DeviceType(/^com\.fibaro\.FGWR/), DeviceType('com.fibaro.rollerShutter'), DeviceType('com.fibaro.remoteBaseShutter'), DeviceType('com.fibaro.baseShutter'), DeviceType('com.fibaro.barrier'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "windowCoveringAndGarageDoor", null); __decorate([ DeviceType('com.fibaro.temperatureSensor'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "temperatureSensor", null); __decorate([ DeviceType('com.fibaro.humiditySensor'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "humiditySensor", null); __decorate([ DeviceType('com.fibaro.lightSensor'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "lightSensor", null); __decorate([ DeviceType('com.fibaro.multilevelSensor'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "multilevelSensor", null); __decorate([ DeviceType(/^com\.fibaro\.FGMS/), DeviceType('com.fibaro.motionSensor'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "motionSensor", null); __decorate([ DeviceType(/^com\.fibaro\.FGDW/), DeviceType('com.fibaro.binarySensor'), DeviceType('com.fibaro.doorSensor'), DeviceType('com.fibaro.windowSensor'), DeviceType('com.fibaro.satelZone'), DeviceType('com.fibaro.doorWindowSensor'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "doorbellContactSensor", null); __decorate([ DeviceType(/^com\.fibaro\.FGFS/), DeviceType('com.fibaro.floodSensor'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "leakSensor", null); __decorate([ DeviceType(/^com\.fibaro\.FGSS/), DeviceType('com.fibaro.smokeSensor'), DeviceType('com.fibaro.gasDetector'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "smokeSensor", null); __decorate([ DeviceType(/^com\.fibaro\.FGCD/), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "carbonMonoxideSensor", null); __decorate([ DeviceType('com.fibaro.doorLock'), DeviceType('com.fibaro.gerda'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "lockMechanism", null); __decorate([ DeviceType('com.fibaro.remoteController'), DeviceType('com.fibaro.remoteSceneController'), DeviceType(/^com\.fibaro\.FGPB/), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "remoteController", null); __decorate([ DeviceType('com.fibaro.thermostatDanfoss'), DeviceType('com.fibaro.FGT001'), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "radiatorThermostaticValve", null); __decorate([ DeviceType(constants.DEVICE_TYPE_SECURITY_SYSTEM), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "securitySystem", null); __decorate([ DeviceType(constants.DEVICE_TYPE_SCENE), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "scene", null); __decorate([ DeviceType(constants.DEVICE_TYPE_CLIMATE_ZONE), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "climateZone", null); __decorate([ DeviceType(constants.DEVICE_TYPE_HEATING_ZONE), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "heatingZone", null); __decorate([ DeviceType(constants.DEVICE_TYPE_GLOBAL_VARIABLE), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "globalVariable", null); __decorate([ DeviceType(constants.DEVICE_TYPE_DIMMER_GLOBAL_VARIABLE), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object, Object]), __metadata("design:returntype", void 0) ], DeviceConfigurations, "dimmerGlobalVariable", null); //# sourceMappingURL=deviceAuto.js.map