UNPKG

homebridge-aron-airquality

Version:

homebridge plugin airquality

137 lines (123 loc) 5.52 kB
var Service,Characteristic; var http=require('http'); WeatherService = function(platform, config) { this.platform = platform; this.config = config; this.platform.log.debug("[WeatherService]Initializing Weather: " + this.config["city"]); return new WeatherServiceService(this); } WeatherServiceService = function(dThis) { this.name = dThis.config['name']; this.city = dThis.config['city']; this.platform = dThis.platform; this.temperature = 26; this.humidity = 50; this.pm25value = 50; this.pm10value = 50; this.timer = true; Service = dThis.platform.HomebridgeAPI.hap.Service; Characteristic = dThis.platform.HomebridgeAPI.hap.Characteristic; this.getData(); } WeatherServiceService.prototype.updateTimer = function() { if (this.timer) { clearTimeout(this.timer); this.timer = setTimeout(function() { this.getData(); }.bind(this), 1000 * 60 * 5); } } WeatherServiceService.prototype.getData = function() { var that = this; try{ http.get('http://tj.nineton.cn/Heart/index/all?city=' + this.city,function(req,res){ var datas = ""; req.on('data',function(data){ datas = data; }); req.on('end',function(){ try{ var dataa = JSON.parse(datas); if(dataa.status == "OK"){ var weather = dataa.weather; that.temperature = weather[0]['now']['temperature']; that.humidity = weather[0]['now']['humidity']; that.pm25value = weather[0]['now']['air_quality']['city']['pm25']; that.pm10value = weather[0]['now']['air_quality']['city']['pm10']; that.platform.log.debug('[' + that.name + ']temperature: %s °C', that.temperature); that.platform.log.debug('[' + that.name + ']humidity: %s %', that.humidity); that.platform.log.debug('[' + that.name + ']PM2.5: %s μg/m³', that.pm25value); that.platform.log.debug('[' + that.name + ']PM10: %s μg/m³', that.pm10value); that.updateAllValue(); } }catch(ex){ that.platform.log.error('Error JSON: ' + ex); } }); }); }catch(ex){ that.platform.log.error('Error: ' + ex); } this.updateTimer(); } WeatherServiceService.prototype.updateAllValue = function() { this.TemperatureService.getCharacteristic(Characteristic.CurrentTemperature).updateValue(this.temperature); this.HumidityService.getCharacteristic(Characteristic.CurrentRelativeHumidity).updateValue(this.humidity); this.AirQualityService.getCharacteristic(Characteristic.AirQuality).updateValue(this.calcAirQuality(this.pm25value)); this.AirQualityService.getCharacteristic(Characteristic.PM2_5Density).updateValue(this.pm25value); this.platform.log.debug('[' + this.name + ']Value Updated!'); } WeatherServiceService.prototype.getServices = function() { var that = this; var services = []; var infoService = new Service.AccessoryInformation(); infoService .setCharacteristic(Characteristic.Manufacturer, "Zzm317") .setCharacteristic(Characteristic.Model, "Weather-" + this.city) .setCharacteristic(Characteristic.SerialNumber, this.city); services.push(infoService); this.TemperatureService = new Service.TemperatureSensor(this.name); this.TemperatureService.getCharacteristic(Characteristic.CurrentTemperature) .on('get', function(callback) { callback(null,this.temperature); }.bind(this)) this.HumidityService = new Service.HumiditySensor(this.name); this.HumidityService.getCharacteristic(Characteristic.CurrentRelativeHumidity) .on('get', function(callback) { callback(null,this.humidity); }.bind(this)) this.AirQualityService = new Service.AirQualitySensor(this.name); this.AirQualityService.getCharacteristic(Characteristic.AirQuality) .on('get', function(callback) { callback(null,this.calcAirQuality(this.pm25value)); }.bind(this)); this.AirQualityService.addCharacteristic(Characteristic.PM2_5Density); this.AirQualityService.getCharacteristic(Characteristic.PM2_5Density) .on('get', function(callback) { callback(null,this.pm25value); }.bind(this)) this.AirQualityService.addCharacteristic(Characteristic.PM10Density); this.AirQualityService.getCharacteristic(Characteristic.PM10Density) .on('get', function(callback) { callback(null,this.pm10value); }.bind(this)) services.push(this.TemperatureService); services.push(this.HumidityService); services.push(this.AirQualityService); return services; } WeatherServiceService.prototype.calcAirQuality = function(pm25) { if(pm25 <= 50){ return Characteristic.AirQuality.EXCELLENT }else if(pm25 > 50 && pm25 <= 100){ return Characteristic.AirQuality.GOOD }else if(pm25 > 100 && pm25 <= 200){ return Characteristic.AirQuality.FAIR }else if(pm25 > 200 && pm25 <= 300){ return Characteristic.AirQuality.INFERIOR }else if(pm25 > 300){ return Characteristic.AirQuality.POOR }else{ return Characteristic.AirQuality.UNKNOWN } }