homebridge-fibaro-home-center
Version:
Homebridge plugin for Fibaro Home Center (2, 2 Lite, 3, 3 Lite, Yubii Home).
611 lines • 26.3 kB
JavaScript
;
// 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