UNPKG

homebridge-ambient-realtime

Version:

Ambient Weather Realtime API platform plugin for [Homebridge](https://github.com/nfarina/homebridge).

90 lines 4.7 kB
export default class occupancySensor { platform; log; Service; Characteristic; constructor(platform, log = platform.log) { this.platform = platform; this.log = log; this.Service = platform.Service; this.Characteristic = platform.Characteristic; } createAccessory(device, uuid, occupancySensor, newSensor) { const value = device.lastData[newSensor.dataPoint]; const occupancy = value > newSensor.threshold ? true : false; if (!occupancySensor) { this.log.info('Adding custom sensor %s for %s', newSensor.name, device.info.name); occupancySensor = new this.platform.api.platformAccessory(`${device.info.name} ${newSensor.name}`, uuid); } else { this.log.debug('Update %s custom sensor %s for %s', device.info.name, newSensor.name, newSensor.dataPoint); } occupancySensor.getService(this.Service.AccessoryInformation) .setCharacteristic(this.Characteristic.Name, `${device.info.name} ${newSensor.name}`) .setCharacteristic(this.Characteristic.Manufacturer, this.platform.config.manufacturer ? this.platform.config.manufacturer : 'Ambient') .setCharacteristic(this.Characteristic.SerialNumber, device.macAddress) .setCharacteristic(this.Characteristic.Model, 'Custom-' + newSensor.name) .setCharacteristic(this.Characteristic.ProductData, 'occupancy'); let sensor = occupancySensor.getService(this.Service.OccupancySensor); if (!sensor) { sensor = new this.Service.OccupancySensor(newSensor.name); occupancySensor.addService(sensor); sensor.addCharacteristic(this.Characteristic.ConfiguredName); sensor.addCharacteristic(this.Characteristic.CurrentAmbientLightLevel); sensor.setCharacteristic(this.Characteristic.ConfiguredName, `${device.info.name} ${newSensor.name}`); } sensor .getCharacteristic(this.Characteristic.CurrentAmbientLightLevel) .setProps({ minValue: 0, maxValue: 10000, }); sensor .setCharacteristic(this.Characteristic.Name, `${device.info.name} ${newSensor.name}`) .setCharacteristic(this.Characteristic.StatusFault, this.Characteristic.StatusFault.NO_FAULT) .setCharacteristic(this.Characteristic.OccupancyDetected, occupancy) .setCharacteristic(this.Characteristic.CurrentAmbientLightLevel, value); sensor .getCharacteristic(this.Characteristic.OccupancyDetected) .onGet(this.getStatusoccupancy.bind(this, sensor)); if (newSensor.dataPointBatt !== undefined) { let batteryStatus = occupancySensor.getService(this.Service.Battery); if (!batteryStatus) { batteryStatus = new this.Service.Battery(newSensor.name); occupancySensor.addService(batteryStatus); } batteryStatus .setCharacteristic(this.Characteristic.Name, `${device.info.name} ${newSensor.name}`) .setCharacteristic(this.Characteristic.StatusLowBattery, device.lastData[newSensor.dataPointBatt]) .setCharacteristic(this.Characteristic.ChargingState, this.Characteristic.ChargingState.NOT_CHARGEABLE) .setCharacteristic(this.Characteristic.BatteryLevel, Number(!device.lastData[newSensor.dataPointBatt]) * 100); batteryStatus .getCharacteristic(this.Characteristic.StatusLowBattery) .onGet(this.getStatusLowBattery.bind(this, batteryStatus, newSensor.name)); } return occupancySensor; } async getStatusoccupancy(sensorStatus) { if (sensorStatus.getCharacteristic(this.Characteristic.StatusFault).value === this.Characteristic.StatusFault.GENERAL_FAULT) { throw new this.platform.HapStatusError(this.platform.HapStatus.SERVICE_COMMUNICATION_FAILURE); } else { const currentValue = sensorStatus.getCharacteristic(this.Characteristic.OccupancyDetected).value; return currentValue; } } async getStatusLowBattery(batteryStatus, name) { let currentValue = 0; try { currentValue = batteryStatus.getCharacteristic(this.Characteristic.StatusLowBattery).value; if (currentValue === 1) { this.log.warn('Leak Detector %s Battery Status Low', name); } } catch (error) { this.log.error('caught low battery error'); } return currentValue; } } //# sourceMappingURL=occupancy.js.map