homebridge-ambient-realtime
Version:
Ambient Weather Realtime API platform plugin for [Homebridge](https://github.com/nfarina/homebridge).
98 lines • 4.68 kB
JavaScript
export default class airSensorIn {
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, airSensorIn) {
const name = 'Indoor Air Quality';
if (!airSensorIn) {
this.log.info('Adding indoor air quality sensor for %s', device.info.name);
airSensorIn = new this.platform.api.platformAccessory(`${device.info.name} ${name}`, uuid);
}
else {
this.log.debug('Update %s PM25IN', `${device.info.name} ${name}`);
}
airSensorIn.getService(this.Service.AccessoryInformation)
.setCharacteristic(this.Characteristic.Name, `${device.info.name} ${name}`)
.setCharacteristic(this.Characteristic.Manufacturer, this.platform.config.manufacturer ? this.platform.config.manufacturer : 'Ambient')
.setCharacteristic(this.Characteristic.SerialNumber, device.macAddress)
.setCharacteristic(this.Characteristic.Model, 'PM25IN');
let airSensor = airSensorIn.getService(this.Service.AirQualitySensor);
if (!airSensor) {
airSensor = new this.Service.AirQualitySensor(name);
airSensorIn.addService(airSensor);
airSensor.addCharacteristic(this.Characteristic.ConfiguredName);
airSensor.setCharacteristic(this.Characteristic.ConfiguredName, `${device.info.name} ${name}`);
}
let aqi = this.Characteristic.AirQuality.UNKNOWN;
if (device.lastData.aqi_pm25_aqin > 300) {
aqi = this.Characteristic.AirQuality.POOR;
}
else if (device.lastData.aqi_pm25_aqin > 200) {
aqi = this.Characteristic.AirQuality.POOR;
}
else if (device.lastData.aqi_pm25_aqin > 150) {
aqi = this.Characteristic.AirQuality.INFERIOR;
}
else if (device.lastData.aqi_pm25_aqin > 100) {
aqi = this.Characteristic.AirQuality.FAIR;
}
else if (device.lastData.aqi_pm25_aqin > 50) {
aqi = this.Characteristic.AirQuality.GOOD;
}
else if (device.lastData.aqi_pm25_aqin > 0) {
aqi = this.Characteristic.AirQuality.EXCELLENT;
}
airSensor
.setCharacteristic(this.Characteristic.Name, `${device.info.name} ${name}`)
.setCharacteristic(this.Characteristic.StatusFault, this.Characteristic.StatusFault.NO_FAULT)
.setCharacteristic(this.Characteristic.AirQuality, aqi)
.setCharacteristic(this.Characteristic.PM2_5Density, device.lastData.pm25_in);
airSensor
.getCharacteristic(this.Characteristic.AirQuality)
.onGet(this.getStatusAir.bind(this, airSensor));
let batteryStatus = airSensorIn.getService(this.Service.Battery);
if (!batteryStatus) {
batteryStatus = new this.Service.Battery(name);
airSensorIn.addService(batteryStatus);
}
batteryStatus
.setCharacteristic(this.Characteristic.Name, `${device.info.name} ${name}`)
.setCharacteristic(this.Characteristic.StatusLowBattery, !device.lastData.batt_25_in)
.setCharacteristic(this.Characteristic.ChargingState, this.Characteristic.ChargingState.NOT_CHARGEABLE)
.setCharacteristic(this.Characteristic.BatteryLevel, (device.lastData.batt_25_in) * 100);
batteryStatus
.getCharacteristic(this.Characteristic.StatusLowBattery)
.onGet(this.getStatusLowBattery.bind(this, batteryStatus));
return airSensorIn;
}
async getStatusAir(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.AirQuality).value;
return currentValue;
}
}
async getStatusLowBattery(batteryStatus) {
let currentValue = 0;
try {
currentValue = batteryStatus.getCharacteristic(this.Characteristic.StatusLowBattery).value;
if (currentValue === 1) {
this.log.warn('Air Sensor Battery Status Low');
}
}
catch (error) {
this.log.error('caught low battery error');
}
return currentValue;
}
}
//# sourceMappingURL=air_in.js.map