homebridge#PlatformAccessoryEvent TypeScript Examples
The following examples show how to use
homebridge#PlatformAccessoryEvent.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: index.ts From homebridge-fordpass with GNU General Public License v3.0 | 4 votes |
configureAccessory(accessory: PlatformAccessory): void {
const self = this;
this.log.info(`Configuring accessory ${accessory.displayName}`);
accessory.on(PlatformAccessoryEvent.IDENTIFY, () => {
this.log.info(`${accessory.displayName} identified!`);
});
const vehicle = new Vehicle(accessory.context.name, accessory.context.vin, this.config, this.log);
const fordAccessory = new FordpassAccessory(accessory);
// Create Lock service
const defaultState = hap.Characteristic.LockTargetState.UNSECURED;
const lockService = fordAccessory.createService(hap.Service.LockMechanism);
const switchService = fordAccessory.createService(hap.Service.Switch);
const batteryService = fordAccessory.createService(
hap.Service.Battery,
this.config.options?.batteryName || 'Fuel Level',
);
lockService.setCharacteristic(hap.Characteristic.LockCurrentState, defaultState);
lockService
.setCharacteristic(hap.Characteristic.LockTargetState, defaultState)
.getCharacteristic(hap.Characteristic.LockTargetState)
.on(CharacteristicEventTypes.SET, async (value: CharacteristicValue, callback: CharacteristicSetCallback) => {
this.log.debug(`${value ? 'Locking' : 'Unlocking'} ${accessory.displayName}`);
let commandId = '';
let command = Command.LOCK;
if (value === hap.Characteristic.LockTargetState.UNSECURED) {
command = Command.UNLOCK;
}
commandId = await vehicle.issueCommand(command);
let tries = 30;
this.pendingLockUpdate = true;
const self = this;
const interval = setInterval(async () => {
if (tries > 0) {
const status = await vehicle.commandStatus(command, commandId);
if (status?.status === 200) {
lockService.updateCharacteristic(hap.Characteristic.LockCurrentState, value);
self.pendingLockUpdate = false;
clearInterval(interval);
}
tries--;
} else {
self.pendingLockUpdate = false;
clearInterval(interval);
}
}, 1000);
callback(undefined, value);
})
.on(CharacteristicEventTypes.GET, async (callback: CharacteristicGetCallback) => {
// Return cached value immediately then update properly
let lockNumber = hap.Characteristic.LockTargetState.UNSECURED;
const lockStatus = vehicle?.info?.lockStatus.value;
if (lockStatus === 'LOCKED') {
lockNumber = hap.Characteristic.LockTargetState.SECURED;
}
callback(undefined, lockNumber);
const status = await vehicle.status();
if (status) {
let lockNumber = hap.Characteristic.LockTargetState.UNSECURED;
const lockStatus = status.lockStatus.value;
if (lockStatus === 'LOCKED') {
lockNumber = hap.Characteristic.LockTargetState.SECURED;
}
lockService.updateCharacteristic(hap.Characteristic.LockCurrentState, lockNumber);
lockService.updateCharacteristic(hap.Characteristic.LockTargetState, lockNumber);
} else {
self.log.error(`Cannot get information for ${accessory.displayName} lock`);
}
});
switchService
.setCharacteristic(hap.Characteristic.On, false)
.getCharacteristic(hap.Characteristic.On)
.on(CharacteristicEventTypes.SET, async (value: CharacteristicValue, callback: CharacteristicSetCallback) => {
this.log.debug(`${value ? 'Starting' : 'Stopping'} ${accessory.displayName}`);
if (value as boolean) {
await vehicle.issueCommand(Command.START);
} else {
await vehicle.issueCommand(Command.STOP);
}
callback(undefined, value);
})
.on(CharacteristicEventTypes.GET, async (callback: CharacteristicGetCallback) => {
// Return cached value immediately then update properly
const engineStatus = vehicle?.info?.remoteStartStatus.value || 0;
callback(undefined, engineStatus);
const status = await vehicle.status();
if (status) {
let started = false;
const engineStatus = status.remoteStartStatus.value || 0;
if (engineStatus > 0) {
started = true;
}
switchService.updateCharacteristic(hap.Characteristic.On, started);
} else {
self.log.error(`Cannot get information for ${accessory.displayName} engine`);
}
});
batteryService
.setCharacteristic(hap.Characteristic.BatteryLevel, 100)
.getCharacteristic(hap.Characteristic.BatteryLevel)
.on(CharacteristicEventTypes.GET, async (callback: CharacteristicGetCallback) => {
// Return cached value immediately then update properly
const fuel = vehicle?.info?.fuel?.fuelLevel;
const battery = vehicle?.info?.batteryFillLevel?.value;
let level = fuel || battery || 100;
if (level > 100) {
level = 100;
}
if (level < 0) {
level = 0;
}
callback(undefined, level);
const status = await vehicle.status();
if (status) {
const fuel = status.fuel?.fuelLevel;
const battery = status.batteryFillLevel?.value;
const chargingStatus = vehicle?.info?.chargingStatus?.value;
let level = fuel || battery || 100;
if (level > 100) {
level = 100;
}
if (level < 0) {
level = 0;
}
batteryService.updateCharacteristic(hap.Characteristic.BatteryLevel, level);
if (battery) {
if (chargingStatus === 'ChargingAC') {
batteryService.updateCharacteristic(
hap.Characteristic.ChargingState,
hap.Characteristic.ChargingState.CHARGING,
);
} else {
batteryService.updateCharacteristic(
hap.Characteristic.ChargingState,
hap.Characteristic.ChargingState.NOT_CHARGING,
);
}
} else {
batteryService.updateCharacteristic(
hap.Characteristic.ChargingState,
hap.Characteristic.ChargingState.NOT_CHARGEABLE,
);
}
if (level < 10) {
batteryService.updateCharacteristic(
hap.Characteristic.StatusLowBattery,
hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW,
);
} else {
batteryService.updateCharacteristic(
hap.Characteristic.StatusLowBattery,
hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
);
}
} else {
self.log.error(`Cannot get information for ${accessory.displayName} engine`);
}
});
this.vehicles.push(vehicle);
this.accessories.push(accessory);
}
Example #2
Source File: index.ts From homebridge-nest-cam with GNU General Public License v3.0 | 4 votes |
configureAccessory(accessory: PlatformAccessory<Record<string, CameraInfo>>): void {
this.log.info(`Configuring accessory ${accessory.displayName}`);
accessory.on(PlatformAccessoryEvent.IDENTIFY, () => {
this.log.info(`${accessory.displayName} identified!`);
});
const cameraInfo = accessory.context.cameraInfo;
const camera = new NestCam(this.config, cameraInfo, this.log);
const nestAccessory = new NestAccessory(accessory, camera, this.config, this.log, hap);
nestAccessory.configureController();
// Microphone configuration
if (camera.info.capabilities.includes('audio.microphone')) {
nestAccessory.createService(hap.Service.Microphone);
nestAccessory.createService(hap.Service.Speaker);
this.log.debug(`Creating microphone for ${accessory.displayName}.`);
}
// Doorbell configuration
if (camera.info.capabilities.includes('indoor_chime') && this.options.doorbellAlerts) {
nestAccessory.createService(hap.Service.Doorbell, 'Doorbell');
this.log.debug(`Creating doorbell sensor for ${accessory.displayName}.`);
camera.startAlertChecks();
} else {
nestAccessory.removeService(hap.Service.Doorbell, 'Doorbell');
}
// Add doorbell switch
if (
camera.info.capabilities.includes('indoor_chime') &&
this.options.doorbellAlerts &&
this.options.doorbellSwitch
) {
const service = nestAccessory.createService(hap.Service.StatelessProgrammableSwitch, 'DoorbellSwitch');
this.log.debug(`Creating doorbell switch for ${accessory.displayName}.`);
service.getCharacteristic(hap.Characteristic.ProgrammableSwitchEvent).setProps({
maxValue: hap.Characteristic.ProgrammableSwitchEvent.SINGLE_PRESS,
});
} else {
nestAccessory.removeService(hap.Service.StatelessProgrammableSwitch, 'DoorbellSwitch');
}
// Streaming switch configuration
if (camera.info.capabilities.includes('streaming.start-stop') && this.options.streamingSwitch) {
nestAccessory.createSwitchService('Streaming', hap.Service.Switch, 'streaming.enabled', async (value) => {
await nestAccessory.toggleActive(value as boolean);
});
} else {
nestAccessory.removeService(hap.Service.Switch, 'Streaming');
}
// Chime switch configuration
if (camera.info.capabilities.includes('indoor_chime') && this.options.chimeSwitch) {
nestAccessory.createSwitchService('Chime', hap.Service.Switch, 'doorbell.indoor_chime.enabled', async (value) => {
await nestAccessory.toggleChime(value as boolean);
});
} else {
nestAccessory.removeService(hap.Service.Switch, 'Chime');
}
// Announcements switch configuration
if (camera.info.capabilities.includes('indoor_chime') && this.options.announcementsSwitch) {
nestAccessory.createSwitchService(
'Announcements',
hap.Service.Switch,
'doorbell.chime_assist.enabled',
async (value) => {
await nestAccessory.toggleAnnouncements(value as boolean);
},
);
} else {
nestAccessory.removeService(hap.Service.Switch, 'Announcements');
}
// Audio switch configuration
if (camera.info.capabilities.includes('audio.microphone') && this.options.audioSwitch) {
nestAccessory.createSwitchService('Audio', hap.Service.Switch, 'audio.enabled', async (value) => {
await nestAccessory.toggleAudio(value as boolean);
});
} else {
nestAccessory.removeService(hap.Service.Switch, 'Audio');
}
//Update Firmware Revision
const accessoryInformation = accessory.getService(hap.Service.AccessoryInformation);
if (accessoryInformation) {
accessoryInformation.setCharacteristic(hap.Characteristic.FirmwareRevision, cameraInfo.combined_software_version);
}
this.nestObjects.push({ accessory: accessory, camera: camera });
}
Example #3
Source File: index.ts From homebridge-philips-air with BSD 2-Clause "Simplified" License | 4 votes |
setService(accessory: PlatformAccessory, config: DeviceConfig): void {
accessory.on(PlatformAccessoryEvent.IDENTIFY, () => {
this.log('[' + accessory.displayName + '] Identify requested.');
});
const purifierService = accessory.getService(hap.Service.AirPurifier);
let min_step_purifier_speed = 25;
if (config.sleep_speed) {
min_step_purifier_speed = 20;
}
if (purifierService) {
purifierService
.getCharacteristic(hap.Characteristic.Active)
.on('set', async(state: CharacteristicValue, callback: CharacteristicSetCallback) => {
try {
await this.setPower(accessory, state);
callback();
} catch (err) {
callback(err);
}
});
purifierService
.getCharacteristic(hap.Characteristic.TargetAirPurifierState)
.on('set', async(state: CharacteristicValue, callback: CharacteristicSetCallback) => {
try {
await this.setMode(accessory, state);
callback();
} catch (err) {
callback(err);
}
});
purifierService
.getCharacteristic(hap.Characteristic.LockPhysicalControls)
.on('set', async(state: CharacteristicValue, callback: CharacteristicSetCallback) => {
try {
await this.setLock(accessory, state);
callback();
} catch (err) {
callback(err);
}
});
purifierService
.getCharacteristic(hap.Characteristic.RotationSpeed)
.on('set', async(state: CharacteristicValue, callback: CharacteristicSetCallback) => {
try {
await this.setFan(accessory, state);
callback();
} catch (err) {
callback(err);
}
}).setProps({
minValue: 0,
maxValue: 100,
minStep: min_step_purifier_speed
});
}
if (config.light_control) {
const lightService = accessory.getService('Lights');
if (lightService) {
lightService
.getCharacteristic(hap.Characteristic.Brightness)
.on('set', async(state: CharacteristicValue, callback: CharacteristicSetCallback) => {
try {
await this.setBrightness(accessory, state);
callback();
} catch (err) {
callback(err);
}
}).setProps({
minValue: 0,
maxValue: 100,
minStep: 25
});
}
}
if (config.humidifier) {
const Humidifier = accessory.getService('Humidifier');
if (Humidifier) {
Humidifier
.getCharacteristic(hap.Characteristic.Active)
.on('set', async(state: CharacteristicValue, callback: CharacteristicSetCallback) => {
try {
await this.setHumidity(accessory, state);
callback();
} catch (err) {
callback(err);
}
});
Humidifier
.getCharacteristic(hap.Characteristic.CurrentHumidifierDehumidifierState)
.on('set', async(state: CharacteristicValue, callback: CharacteristicSetCallback) => {
try {
await this.setHumidityTarget(accessory, state);
await this.setHumidity(accessory, state);
callback();
} catch (err) {
callback(err);
}
}).setProps({
validValues: [
hap.Characteristic.CurrentHumidifierDehumidifierState.INACTIVE,
hap.Characteristic.CurrentHumidifierDehumidifierState.HUMIDIFYING
]
});
Humidifier
.getCharacteristic(hap.Characteristic.TargetHumidifierDehumidifierState)
.on('set', async(state: CharacteristicValue, callback: CharacteristicSetCallback) => {
try {
await this.setHumidityTarget(accessory, state);
await this.setHumidity(accessory, state);
callback();
} catch (err) {
callback(err);
}
}).setProps({
validValues: [
hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER
]
});
Humidifier
.getCharacteristic(hap.Characteristic.RelativeHumidityHumidifierThreshold)
.on('set', async(state: CharacteristicValue, callback: CharacteristicSetCallback) => {
try {
await this.setHumidityTarget(accessory, state);
callback();
} catch (err) {
callback(err);
}
}).setProps({
minValue: 0,
maxValue: 100,
minStep: 25
});
}
}
}
Example #4
Source File: index.ts From homebridge-electrolux-wellbeing with Apache License 2.0 | 4 votes |
configureAccessory(accessory: PlatformAccessory): void {
this.log('Configuring accessory %s', accessory.displayName);
const { pncId } = accessory.context;
accessory.on(PlatformAccessoryEvent.IDENTIFY, () => {
this.log('%s identified!', accessory.displayName);
});
accessory
.getService(Service.AirPurifier)!
.getCharacteristic(Characteristic.Active)
.on(
CharacteristicEventTypes.SET,
(value: CharacteristicValue, callback: CharacteristicSetCallback) => {
const workMode = value === 1 ? WorkModes.Auto : WorkModes.Off;
if (
accessory
.getService(Service.AirPurifier)!
.getCharacteristic(Characteristic.Active).value !== value
) {
this.sendCommand(pncId, 'WorkMode', workMode);
this.log.info(
'%s AirPurifier Active was set to: ' + workMode,
accessory.displayName,
);
}
callback();
},
);
accessory
.getService(Service.AirPurifier)!
.getCharacteristic(Characteristic.TargetAirPurifierState)
.on(
CharacteristicEventTypes.SET,
(value: CharacteristicValue, callback: CharacteristicSetCallback) => {
const workMode =
value === Characteristic.TargetAirPurifierState.MANUAL
? WorkModes.Manual
: WorkModes.Auto;
this.sendCommand(pncId, 'WorkMode', workMode);
this.log.info(
'%s AirPurifier Work Mode was set to: ' + workMode,
accessory.displayName,
);
callback();
},
);
accessory
.getService(Service.AirPurifier)!
.getCharacteristic(Characteristic.RotationSpeed)
.on(
CharacteristicEventTypes.SET,
(value: CharacteristicValue, callback: CharacteristicSetCallback) => {
const fanSpeed = Math.floor(
parseInt(value.toString()) / FAN_SPEED_MULTIPLIER,
);
this.sendCommand(pncId, 'FanSpeed', fanSpeed);
this.log.info(
'%s AirPurifier Fan Speed set to: ' + fanSpeed,
accessory.displayName,
);
callback();
},
);
accessory
.getService(Service.AirPurifier)!
.getCharacteristic(Characteristic.LockPhysicalControls)
.on(
CharacteristicEventTypes.SET,
(value: CharacteristicValue, callback: CharacteristicSetCallback) => {
if (
accessory
.getService(Service.AirPurifier)!
.getCharacteristic(Characteristic.LockPhysicalControls).value !==
value
) {
this.sendCommand(pncId, 'SafetyLock', value);
this.log.info(
'%s AirPurifier Saftey Lock set to: ' + value,
accessory.displayName,
);
}
callback();
},
);
accessory
.getService(Service.AirPurifier)!
.getCharacteristic(Characteristic.SwingMode)
.on(
CharacteristicEventTypes.SET,
(value: CharacteristicValue, callback: CharacteristicSetCallback) => {
if (
accessory
.getService(Service.AirPurifier)!
.getCharacteristic(Characteristic.SwingMode).value !== value
) {
this.sendCommand(pncId, 'Ionizer', value);
this.log.info(
'%s AirPurifier Ionizer set to: ' + value,
accessory.displayName,
);
}
callback();
},
);
this.accessories.push(accessory);
}