homebridge-blueair-purifier 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintignore ADDED
@@ -0,0 +1,3 @@
1
+ dist
2
+ .vscode
3
+ .github
package/.gitattributes ADDED
@@ -0,0 +1,3 @@
1
+ # Handle line endings automatically for files detected as text
2
+ # and leave all files detected as binary untouched.
3
+ * text=auto eol=lf
package/.prettierrc ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "useTabs": false,
3
+ "printWidth": 140,
4
+ "tabWidth": 2,
5
+ "semi": true,
6
+ "singleQuote": true,
7
+ "trailingComma": "all",
8
+ "bracketSpacing": true,
9
+ "bracketSameLine": false,
10
+ "endOfLine": "lf",
11
+ "overrides": [
12
+ {
13
+ "files": "*.{json,babelrc,eslintrc,remarkrc,prettierrc}",
14
+ "options": {
15
+ "useTabs": false
16
+ }
17
+ }
18
+ ]
19
+ }
@@ -1,47 +1,69 @@
1
1
  {
2
2
  "pluginAlias": "blueair-purifier",
3
3
  "pluginType": "platform",
4
+ "customUi": true,
4
5
  "singular": true,
5
6
  "schema": {
6
7
  "type": "object",
7
8
  "properties": {
8
9
  "username": {
9
10
  "title": "Username",
10
- "description": "Username for BlueAir account",
11
- "type": "string",
12
- "required": true
11
+ "description": "Username for BlueAir account. This should be filled in automatically in the discovery process.",
12
+ "type": "string"
13
13
  },
14
14
  "password": {
15
15
  "title": "Password",
16
- "description": "Password for BlueAir account",
16
+ "description": "Password for BlueAir account. This should be filled in automatically in the discovery process.",
17
+ "type": "string"
18
+ },
19
+ "region": {
20
+ "title": "Region",
21
+ "description": "Region for BlueAir account. This should be filled in automatically in the discovery process.",
17
22
  "type": "string",
23
+ "enum": ["Default (all other regions)", "Australia", "China", "Russia", "USA"],
24
+ "default": "Default (all other regions)",
18
25
  "required": true
19
26
  },
27
+ "accountUuid": {
28
+ "title": "Account UUID",
29
+ "description": "Account UUID for BlueAir account. This should be filled in automatically in the discovery process.",
30
+ "type": "string"
31
+ },
20
32
  "verboseLogging": {
21
33
  "title": "Verbose Logging",
22
34
  "description": "Enable to receive detailed log messages. Useful for troubleshooting.",
23
35
  "type": "boolean"
24
36
  },
37
+ "uiDebug": {
38
+ "title": "UI Debug",
39
+ "description": "Enable to show debug information in the Homebridge UI.",
40
+ "type": "boolean"
41
+ },
42
+ "pollingInterval": {
43
+ "title": "Polling Interval",
44
+ "description": "Interval in miliseconds to poll the BlueAir API for updates. It's recommended to keep this at least 5 seconds (5000 miliseconds).",
45
+ "type": "number"
46
+ },
25
47
  "devices": {
26
48
  "title": "Devices",
27
49
  "type": "array",
28
50
  "items": {
29
51
  "type": "object",
30
52
  "properties": {
31
- "name": {
32
- "title": "Name",
53
+ "id": {
54
+ "title": "ID",
33
55
  "type": "string",
34
56
  "required": true
35
57
  },
36
- "id": {
37
- "title": "ID",
58
+ "name": {
59
+ "title": "Name",
38
60
  "type": "string",
39
61
  "required": true
40
62
  },
41
- "isAWSDevice": {
42
- "title": "AWS Device",
43
- "description": "Enable AWS integration. This is required for devices like DustMagnet, HealthProtect, and Blue Pure.",
44
- "type": "boolean"
63
+ "filterChangeLevel": {
64
+ "title": "Filter Change Level",
65
+ "description": "Percentage of filter life remaining to trigger a filter change alert.",
66
+ "type": "number"
45
67
  },
46
68
  "led": {
47
69
  "title": "LED",
@@ -53,21 +75,11 @@
53
75
  "description": "Toggles if the air quality sensor service is created with the accessory.",
54
76
  "type": "boolean"
55
77
  },
56
- "co2Sensor": {
57
- "title": "CO2 Sensor",
58
- "description": "Toggles if the CO2 sensor service is created with the accessory.",
59
- "type": "boolean"
60
- },
61
78
  "temperatureSensor": {
62
79
  "title": "Temperature Sensor",
63
80
  "description": "Toggles if the temperature sensor service is created with the accessory.",
64
81
  "type": "boolean"
65
82
  },
66
- "humiditySensor": {
67
- "title": "Humidity Sensor",
68
- "description": "Toggles if the humidity sensor service is created with the accessory.",
69
- "type": "boolean"
70
- },
71
83
  "germShield": {
72
84
  "title": "Germ Shield",
73
85
  "description": "Toggles if the germ shield switch service is created with the accessory.",
@@ -95,7 +107,11 @@
95
107
  "items": [
96
108
  "username",
97
109
  "password",
98
- "verboseLogging"
110
+ "region",
111
+ "accountUuid",
112
+ "verboseLogging",
113
+ "uiDebug",
114
+ "pollingInterval"
99
115
  ]
100
116
  },
101
117
  {
@@ -103,14 +119,12 @@
103
119
  "type": "tabarray",
104
120
  "title": "{{ value.name || 'new device' }}",
105
121
  "items": [
106
- "devices[].name",
107
122
  "devices[].id",
108
- "devices[].enableAWS",
123
+ "devices[].name",
124
+ "devices[].filterChangeLevel",
109
125
  "devices[].led",
110
126
  "devices[].airQualitySensor",
111
- "devices[].co2Sensor",
112
127
  "devices[].temperatureSensor",
113
- "devices[].humiditySensor",
114
128
  "devices[].germShield",
115
129
  "devices[].nightMode"
116
130
  ]
@@ -2,25 +2,44 @@ import { CharacteristicValue, PlatformAccessory } from 'homebridge';
2
2
  import { BlueAirPlatform } from '../platform';
3
3
  import { BlueAirDevice } from '../device/BlueAirDevice';
4
4
  import { DeviceConfig } from '../platformUtils';
5
+ import { FullBlueAirDeviceState } from '../api/BlueAirAwsApi';
5
6
  export declare class AirPurifierAccessory {
6
7
  protected readonly platform: BlueAirPlatform;
7
8
  protected readonly accessory: PlatformAccessory;
8
9
  protected readonly device: BlueAirDevice;
9
10
  protected readonly configDev: DeviceConfig;
10
11
  private service;
12
+ private filterMaintenanceService?;
13
+ private ledService?;
14
+ private airQualityService?;
15
+ private temperatureService?;
16
+ private germShieldService?;
17
+ private nightModeService?;
11
18
  constructor(platform: BlueAirPlatform, accessory: PlatformAccessory, device: BlueAirDevice, configDev: DeviceConfig);
19
+ updateCharacteristics(changedStates: Partial<FullBlueAirDeviceState>): void;
12
20
  getActive(): CharacteristicValue;
13
- setActive(value: CharacteristicValue): void;
21
+ setActive(value: CharacteristicValue): Promise<void>;
14
22
  getCurrentAirPurifierState(): CharacteristicValue;
15
23
  getTargetAirPurifierState(): CharacteristicValue;
16
- setTargetAirPurifierState(value: CharacteristicValue): void;
24
+ setTargetAirPurifierState(value: CharacteristicValue): Promise<void>;
17
25
  getLockPhysicalControls(): CharacteristicValue;
18
- setLockPhysicalControls(value: CharacteristicValue): void;
26
+ setLockPhysicalControls(value: CharacteristicValue): Promise<void>;
19
27
  getRotationSpeed(): CharacteristicValue;
20
- setRotationSpeed(value: CharacteristicValue): void;
28
+ setRotationSpeed(value: CharacteristicValue): Promise<void>;
21
29
  getFilterChangeIndication(): CharacteristicValue;
22
30
  getFilterLifeLevel(): CharacteristicValue;
23
31
  getCurrentTemperature(): CharacteristicValue;
24
- getCurrentRelativeHumidity(): CharacteristicValue;
32
+ getLedOn(): CharacteristicValue;
33
+ setLedOn(value: CharacteristicValue): Promise<void>;
34
+ getLedBrightness(): CharacteristicValue;
35
+ setLedBrightness(value: CharacteristicValue): Promise<void>;
36
+ getPM2_5Density(): CharacteristicValue;
37
+ getPM10Density(): CharacteristicValue;
38
+ getVOCDensity(): CharacteristicValue;
39
+ getAirQuality(): CharacteristicValue;
40
+ getGermShield(): CharacteristicValue;
41
+ setGermShield(value: CharacteristicValue): Promise<void>;
42
+ getNightMode(): CharacteristicValue;
43
+ setNightMode(value: CharacteristicValue): Promise<void>;
25
44
  }
26
45
  //# sourceMappingURL=AirPurifierAccessory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AirPurifierAccessory.d.ts","sourceRoot":"","sources":["../../src/accessory/AirPurifierAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,qBAAa,oBAAoB;IAK7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAC5C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB;IAC/C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa;IACxC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY;IAN5C,OAAO,CAAC,OAAO,CAAU;gBAGJ,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,YAAY;IA2C5C,SAAS,IAAI,mBAAmB;IAIhC,SAAS,CAAC,KAAK,EAAE,mBAAmB;IAIpC,0BAA0B,IAAI,mBAAmB;IAMjD,yBAAyB,IAAI,mBAAmB;IAMhD,yBAAyB,CAAC,KAAK,EAAE,mBAAmB;IAIpD,uBAAuB,IAAI,mBAAmB;IAM9C,uBAAuB,CAAC,KAAK,EAAE,mBAAmB;IAIlD,gBAAgB,IAAI,mBAAmB;IAIvC,gBAAgB,CAAC,KAAK,EAAE,mBAAmB;IAI3C,yBAAyB,IAAI,mBAAmB;IAWhD,kBAAkB,IAAI,mBAAmB;IAIzC,qBAAqB,IAAI,mBAAmB;IAI5C,0BAA0B,IAAI,mBAAmB;CAGlD"}
1
+ {"version":3,"file":"AirPurifierAccessory.d.ts","sourceRoot":"","sources":["../../src/accessory/AirPurifierAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,qBAAa,oBAAoB;IAU7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAC5C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB;IAC/C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa;IACxC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY;IAZ5C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,wBAAwB,CAAC,CAAU;IAC3C,OAAO,CAAC,UAAU,CAAC,CAAU;IAC7B,OAAO,CAAC,iBAAiB,CAAC,CAAU;IACpC,OAAO,CAAC,kBAAkB,CAAC,CAAU;IACrC,OAAO,CAAC,iBAAiB,CAAC,CAAU;IACpC,OAAO,CAAC,gBAAgB,CAAC,CAAU;gBAGd,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,YAAY;IA+G5C,qBAAqB,CAAC,aAAa,EAAE,OAAO,CAAC,sBAAsB,CAAC;IAiEpE,SAAS,IAAI,mBAAmB;IAI1B,SAAS,CAAC,KAAK,EAAE,mBAAmB;IAK1C,0BAA0B,IAAI,mBAAmB;IAUjD,yBAAyB,IAAI,mBAAmB;IAM1C,yBAAyB,CAAC,KAAK,EAAE,mBAAmB;IAK1D,uBAAuB,IAAI,mBAAmB;IAMxC,uBAAuB,CAAC,KAAK,EAAE,mBAAmB;IAKxD,gBAAgB,IAAI,mBAAmB;IAIjC,gBAAgB,CAAC,KAAK,EAAE,mBAAmB;IAKjD,yBAAyB,IAAI,mBAAmB;IAMhD,kBAAkB,IAAI,mBAAmB;IAIzC,qBAAqB,IAAI,mBAAmB;IAI5C,QAAQ,IAAI,mBAAmB;IAIzB,QAAQ,CAAC,KAAK,EAAE,mBAAmB;IAKzC,gBAAgB,IAAI,mBAAmB;IAIjC,gBAAgB,CAAC,KAAK,EAAE,mBAAmB;IAKjD,eAAe,IAAI,mBAAmB;IAItC,cAAc,IAAI,mBAAmB;IAIrC,aAAa,IAAI,mBAAmB;IAIpC,aAAa,IAAI,mBAAmB;IAkBpC,aAAa,IAAI,mBAAmB;IAI9B,aAAa,CAAC,KAAK,EAAE,mBAAmB;IAK9C,YAAY,IAAI,mBAAmB;IAI7B,YAAY,CAAC,KAAK,EAAE,mBAAmB;CAI9C"}
@@ -3,89 +3,271 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AirPurifierAccessory = void 0;
4
4
  class AirPurifierAccessory {
5
5
  constructor(platform, accessory, device, configDev) {
6
+ var _a, _b, _c, _d, _e;
6
7
  this.platform = platform;
7
8
  this.accessory = accessory;
8
9
  this.device = device;
9
10
  this.configDev = configDev;
10
11
  this.accessory
11
12
  .getService(this.platform.Service.AccessoryInformation)
12
- .setCharacteristic(this.platform.Characteristic.Manufacturer, 'BlueAir')
13
- .setCharacteristic(this.platform.Characteristic.SerialNumber, this.configDev.id);
14
- this.service = this.accessory.getService(this.platform.Service.AirPurifier) ||
15
- this.accessory.addService(this.platform.Service.AirPurifier);
13
+ .setCharacteristic(this.platform.Characteristic.Manufacturer, 'BlueAir');
14
+ this.service =
15
+ this.accessory.getService(this.platform.Service.AirPurifier) || this.accessory.addService(this.platform.Service.AirPurifier);
16
16
  this.service.setCharacteristic(this.platform.Characteristic.Name, this.configDev.name);
17
- this.service.getCharacteristic(this.platform.Characteristic.Active)
18
- .on('set', this.setActive.bind(this))
19
- .on('get', this.getActive.bind(this));
20
- this.service.getCharacteristic(this.platform.Characteristic.CurrentAirPurifierState)
21
- .on('get', this.getCurrentAirPurifierState.bind(this));
22
- this.service.getCharacteristic(this.platform.Characteristic.TargetAirPurifierState)
23
- .on('set', this.setTargetAirPurifierState.bind(this))
24
- .on('get', this.getTargetAirPurifierState.bind(this));
25
- this.service.getCharacteristic(this.platform.Characteristic.LockPhysicalControls)
26
- .on('set', this.setLockPhysicalControls.bind(this))
27
- .on('get', this.getLockPhysicalControls.bind(this));
28
- this.service.getCharacteristic(this.platform.Characteristic.RotationSpeed)
29
- .on('set', this.setRotationSpeed.bind(this))
30
- .on('get', this.getRotationSpeed.bind(this));
31
- this.service.getCharacteristic(this.platform.Characteristic.FilterChangeIndication)
32
- .on('get', this.getFilterChangeIndication.bind(this));
33
- this.service.getCharacteristic(this.platform.Characteristic.FilterLifeLevel)
34
- .on('get', this.getFilterLifeLevel.bind(this));
35
- this.service.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
36
- .on('get', this.getCurrentTemperature.bind(this));
37
- this.service.getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
38
- .on('get', this.getCurrentRelativeHumidity.bind(this));
17
+ this.service.getCharacteristic(this.platform.Characteristic.Active).onGet(this.getActive.bind(this)).onSet(this.setActive.bind(this));
18
+ this.service.getCharacteristic(this.platform.Characteristic.CurrentAirPurifierState).onGet(this.getCurrentAirPurifierState.bind(this));
19
+ this.service
20
+ .getCharacteristic(this.platform.Characteristic.TargetAirPurifierState)
21
+ .onGet(this.getTargetAirPurifierState.bind(this))
22
+ .onSet(this.setTargetAirPurifierState.bind(this));
23
+ this.service
24
+ .getCharacteristic(this.platform.Characteristic.LockPhysicalControls)
25
+ .onGet(this.getLockPhysicalControls.bind(this))
26
+ .onSet(this.setLockPhysicalControls.bind(this));
27
+ this.service
28
+ .getCharacteristic(this.platform.Characteristic.RotationSpeed)
29
+ .onGet(this.getRotationSpeed.bind(this))
30
+ .onSet(this.setRotationSpeed.bind(this));
31
+ this.filterMaintenanceService =
32
+ this.accessory.getService(this.platform.Service.FilterMaintenance) ||
33
+ this.accessory.addService(this.platform.Service.FilterMaintenance);
34
+ this.filterMaintenanceService
35
+ .getCharacteristic(this.platform.Characteristic.FilterChangeIndication)
36
+ .onGet(this.getFilterChangeIndication.bind(this));
37
+ this.filterMaintenanceService.getCharacteristic(this.platform.Characteristic.FilterLifeLevel).onGet(this.getFilterLifeLevel.bind(this));
38
+ this.ledService = this.accessory.getServiceById(this.platform.Service.Lightbulb, 'Led');
39
+ if (this.configDev.led) {
40
+ (_a = this.ledService) !== null && _a !== void 0 ? _a : (this.ledService = this.accessory.addService(this.platform.Service.Lightbulb, `${this.device.name} Led`, 'Led'));
41
+ this.ledService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Led`);
42
+ this.ledService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Led`);
43
+ this.ledService.getCharacteristic(this.platform.Characteristic.On).onGet(this.getLedOn.bind(this)).onSet(this.setLedOn.bind(this));
44
+ this.ledService
45
+ .getCharacteristic(this.platform.Characteristic.Brightness)
46
+ .onGet(this.getLedBrightness.bind(this))
47
+ .onSet(this.setLedBrightness.bind(this));
48
+ }
49
+ else if (this.ledService) {
50
+ this.accessory.removeService(this.ledService);
51
+ }
52
+ this.airQualityService = this.accessory.getServiceById(this.platform.Service.AirQualitySensor, 'AirQuality');
53
+ if (this.configDev.airQualitySensor) {
54
+ (_b = this.airQualityService) !== null && _b !== void 0 ? _b : (this.airQualityService = this.accessory.addService(this.platform.Service.AirQualitySensor, `${this.device.name} Air Quality`, 'AirQuality'));
55
+ this.airQualityService.getCharacteristic(this.platform.Characteristic.AirQuality).onGet(this.getAirQuality.bind(this));
56
+ this.airQualityService.getCharacteristic(this.platform.Characteristic.PM2_5Density).onGet(this.getPM2_5Density.bind(this));
57
+ this.airQualityService.getCharacteristic(this.platform.Characteristic.PM10Density).onGet(this.getPM10Density.bind(this));
58
+ this.airQualityService.getCharacteristic(this.platform.Characteristic.VOCDensity).onGet(this.getVOCDensity.bind(this));
59
+ }
60
+ else if (this.airQualityService) {
61
+ this.accessory.removeService(this.airQualityService);
62
+ }
63
+ this.temperatureService = this.accessory.getServiceById(this.platform.Service.TemperatureSensor, 'Temperature');
64
+ if (this.configDev.temperatureSensor) {
65
+ (_c = this.temperatureService) !== null && _c !== void 0 ? _c : (this.temperatureService = this.accessory.addService(this.platform.Service.TemperatureSensor, `${this.device.name} Temperature`, 'Temperature'));
66
+ this.temperatureService
67
+ .getCharacteristic(this.platform.Characteristic.CurrentTemperature)
68
+ .onGet(this.getCurrentTemperature.bind(this));
69
+ }
70
+ else if (this.temperatureService) {
71
+ this.accessory.removeService(this.temperatureService);
72
+ }
73
+ this.germShieldService = this.accessory.getServiceById(this.platform.Service.Switch, 'GermShield');
74
+ if (this.configDev.germShield) {
75
+ (_d = this.germShieldService) !== null && _d !== void 0 ? _d : (this.germShieldService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Germ Shield`, 'GermShield'));
76
+ this.germShieldService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Germ Shield`);
77
+ this.germShieldService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Germ Shield`);
78
+ this.germShieldService
79
+ .getCharacteristic(this.platform.Characteristic.On)
80
+ .onGet(this.getGermShield.bind(this))
81
+ .onSet(this.setGermShield.bind(this));
82
+ }
83
+ else if (this.germShieldService) {
84
+ this.accessory.removeService(this.germShieldService);
85
+ }
86
+ this.nightModeService = this.accessory.getServiceById(this.platform.Service.Switch, 'NightMode');
87
+ if (this.configDev.nightMode) {
88
+ (_e = this.nightModeService) !== null && _e !== void 0 ? _e : (this.nightModeService = this.accessory.addService(this.platform.Service.Switch, `${this.device.name} Night Mode`, 'NightMode'));
89
+ this.nightModeService.setCharacteristic(this.platform.Characteristic.Name, `${this.device.name} Night Mode`);
90
+ this.nightModeService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${this.device.name} Night Mode`);
91
+ this.nightModeService
92
+ .getCharacteristic(this.platform.Characteristic.On)
93
+ .onGet(this.getNightMode.bind(this))
94
+ .onSet(this.setNightMode.bind(this));
95
+ }
96
+ else if (this.nightModeService) {
97
+ this.accessory.removeService(this.nightModeService);
98
+ }
99
+ this.device.on('stateUpdated', this.updateCharacteristics.bind(this));
100
+ }
101
+ updateCharacteristics(changedStates) {
102
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
103
+ for (const [k, v] of Object.entries(changedStates)) {
104
+ this.platform.log.debug(`[${this.device.name}] ${k} changed to ${v}`);
105
+ let updateState = false;
106
+ let updateAirQuality = false;
107
+ switch (k) {
108
+ case 'standby':
109
+ updateState = true;
110
+ break;
111
+ case 'automode':
112
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetAirPurifierState, this.getTargetAirPurifierState());
113
+ break;
114
+ case 'childlock':
115
+ this.service.updateCharacteristic(this.platform.Characteristic.LockPhysicalControls, this.getLockPhysicalControls());
116
+ break;
117
+ case 'fanspeed':
118
+ this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, this.getRotationSpeed());
119
+ this.service.updateCharacteristic(this.platform.Characteristic.Active, this.getActive());
120
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentAirPurifierState, this.getCurrentAirPurifierState());
121
+ break;
122
+ case 'filterusage':
123
+ this.service.updateCharacteristic(this.platform.Characteristic.FilterChangeIndication, this.getFilterChangeIndication());
124
+ this.service.updateCharacteristic(this.platform.Characteristic.FilterLifeLevel, this.getFilterLifeLevel());
125
+ break;
126
+ case 'temperature':
127
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, this.getCurrentTemperature());
128
+ break;
129
+ case 'brightness':
130
+ (_a = this.ledService) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.platform.Characteristic.On, this.getLedOn());
131
+ (_b = this.ledService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.Brightness, this.getLedBrightness());
132
+ break;
133
+ case 'pm25':
134
+ (_c = this.airQualityService) === null || _c === void 0 ? void 0 : _c.updateCharacteristic(this.platform.Characteristic.PM2_5Density, this.getPM2_5Density());
135
+ updateAirQuality = true;
136
+ break;
137
+ case 'pm10':
138
+ (_d = this.airQualityService) === null || _d === void 0 ? void 0 : _d.updateCharacteristic(this.platform.Characteristic.PM10Density, this.getPM10Density());
139
+ updateAirQuality = true;
140
+ break;
141
+ case 'voc':
142
+ (_e = this.airQualityService) === null || _e === void 0 ? void 0 : _e.updateCharacteristic(this.platform.Characteristic.VOCDensity, this.getVOCDensity());
143
+ updateAirQuality = true;
144
+ break;
145
+ case 'germshield':
146
+ (_f = this.germShieldService) === null || _f === void 0 ? void 0 : _f.updateCharacteristic(this.platform.Characteristic.On, this.getGermShield());
147
+ break;
148
+ case 'nightmode':
149
+ (_g = this.nightModeService) === null || _g === void 0 ? void 0 : _g.updateCharacteristic(this.platform.Characteristic.On, this.getNightMode());
150
+ break;
151
+ }
152
+ if (updateState) {
153
+ this.service.updateCharacteristic(this.platform.Characteristic.Active, this.getActive());
154
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentAirPurifierState, this.getCurrentAirPurifierState());
155
+ (_h = this.ledService) === null || _h === void 0 ? void 0 : _h.updateCharacteristic(this.platform.Characteristic.On, this.getLedOn());
156
+ (_j = this.germShieldService) === null || _j === void 0 ? void 0 : _j.updateCharacteristic(this.platform.Characteristic.On, this.getGermShield());
157
+ (_k = this.nightModeService) === null || _k === void 0 ? void 0 : _k.updateCharacteristic(this.platform.Characteristic.On, this.getNightMode());
158
+ }
159
+ if (updateAirQuality) {
160
+ (_l = this.airQualityService) === null || _l === void 0 ? void 0 : _l.updateCharacteristic(this.platform.Characteristic.AirQuality, this.getAirQuality());
161
+ }
162
+ }
39
163
  }
40
164
  getActive() {
41
- return this.device.state.standby ? this.platform.Characteristic.Active.INACTIVE : this.platform.Characteristic.Active.ACTIVE;
165
+ return this.device.state.standby === false ? this.platform.Characteristic.Active.ACTIVE : this.platform.Characteristic.Active.INACTIVE;
42
166
  }
43
- setActive(value) {
44
- this.device.setState('standby', value === this.platform.Characteristic.Active.ACTIVE);
167
+ async setActive(value) {
168
+ this.platform.log.debug(`[${this.device.name}] Setting active to ${value}`);
169
+ await this.device.setState('standby', value === this.platform.Characteristic.Active.INACTIVE);
45
170
  }
46
171
  getCurrentAirPurifierState() {
47
- return this.device.state.standby ?
48
- this.platform.Characteristic.CurrentAirPurifierState.PURIFYING_AIR :
49
- this.platform.Characteristic.CurrentAirPurifierState.IDLE;
172
+ if (this.device.state.standby === false) {
173
+ return this.device.state.automode && this.device.state.fanspeed === 0
174
+ ? this.platform.Characteristic.CurrentAirPurifierState.IDLE
175
+ : this.platform.Characteristic.CurrentAirPurifierState.PURIFYING_AIR;
176
+ }
177
+ return this.platform.Characteristic.CurrentAirPurifierState.INACTIVE;
50
178
  }
51
179
  getTargetAirPurifierState() {
52
- return this.device.state.automode ?
53
- this.platform.Characteristic.TargetAirPurifierState.AUTO :
54
- this.platform.Characteristic.TargetAirPurifierState.MANUAL;
180
+ return this.device.state.automode
181
+ ? this.platform.Characteristic.TargetAirPurifierState.AUTO
182
+ : this.platform.Characteristic.TargetAirPurifierState.MANUAL;
55
183
  }
56
- setTargetAirPurifierState(value) {
57
- this.device.setState('automode', value === this.platform.Characteristic.TargetAirPurifierState.AUTO);
184
+ async setTargetAirPurifierState(value) {
185
+ this.platform.log.debug(`[${this.device.name}] Setting target air purifier state to ${value}`);
186
+ await this.device.setState('automode', value === this.platform.Characteristic.TargetAirPurifierState.AUTO);
58
187
  }
59
188
  getLockPhysicalControls() {
60
- return this.device.state.childlock ?
61
- this.platform.Characteristic.LockPhysicalControls.CONTROL_LOCK_ENABLED :
62
- this.platform.Characteristic.LockPhysicalControls.CONTROL_LOCK_DISABLED;
189
+ return this.device.state.childlock
190
+ ? this.platform.Characteristic.LockPhysicalControls.CONTROL_LOCK_ENABLED
191
+ : this.platform.Characteristic.LockPhysicalControls.CONTROL_LOCK_DISABLED;
63
192
  }
64
- setLockPhysicalControls(value) {
65
- this.device.setState('childlock', value === this.platform.Characteristic.LockPhysicalControls.CONTROL_LOCK_ENABLED);
193
+ async setLockPhysicalControls(value) {
194
+ this.platform.log.debug(`[${this.device.name}] Setting lock physical controls to ${value}`);
195
+ await this.device.setState('childlock', value === this.platform.Characteristic.LockPhysicalControls.CONTROL_LOCK_ENABLED);
66
196
  }
67
197
  getRotationSpeed() {
68
- return this.device.state.fanspeed || 0;
198
+ return this.device.state.standby === false ? this.device.state.fanspeed || 0 : 0;
69
199
  }
70
- setRotationSpeed(value) {
71
- this.device.setState('fanspeed', value);
200
+ async setRotationSpeed(value) {
201
+ this.platform.log.debug(`[${this.device.name}] Setting rotation speed to ${value}`);
202
+ await this.device.setState('fanspeed', value);
72
203
  }
73
204
  getFilterChangeIndication() {
74
- if (this.device.state.filterusage === undefined) {
75
- return this.platform.Characteristic.FilterChangeIndication.FILTER_OK;
76
- }
77
- return this.device.state.filterusage < 95 ?
78
- this.platform.Characteristic.FilterChangeIndication.FILTER_OK :
79
- this.platform.Characteristic.FilterChangeIndication.CHANGE_FILTER;
205
+ return this.device.state.filterusage !== undefined && this.device.state.filterusage >= this.configDev.filterChangeLevel
206
+ ? this.platform.Characteristic.FilterChangeIndication.CHANGE_FILTER
207
+ : this.platform.Characteristic.FilterChangeIndication.FILTER_OK;
80
208
  }
81
209
  getFilterLifeLevel() {
82
- return this.device.state.filterusage || 0;
210
+ return 100 - (this.device.state.filterusage || 0);
83
211
  }
84
212
  getCurrentTemperature() {
85
213
  return this.device.sensorData.temperature || 0;
86
214
  }
87
- getCurrentRelativeHumidity() {
88
- return this.device.sensorData.humidity || 0;
215
+ getLedOn() {
216
+ return this.device.state.brightness !== undefined && this.device.state.brightness > 0 && this.device.state.nightmode !== true;
217
+ }
218
+ async setLedOn(value) {
219
+ this.platform.log.debug(`[${this.device.name}] Setting LED on to ${value}`);
220
+ await this.device.setLedOn(value);
221
+ }
222
+ getLedBrightness() {
223
+ return this.device.state.brightness || 0;
224
+ }
225
+ async setLedBrightness(value) {
226
+ this.platform.log.debug(`[${this.device.name}] Setting LED brightness to ${value}`);
227
+ await this.device.setState('brightness', value);
228
+ }
229
+ getPM2_5Density() {
230
+ return this.device.sensorData.pm2_5 || 0;
231
+ }
232
+ getPM10Density() {
233
+ return this.device.sensorData.pm10 || 0;
234
+ }
235
+ getVOCDensity() {
236
+ return this.device.sensorData.voc || 0;
237
+ }
238
+ getAirQuality() {
239
+ if (this.device.sensorData.aqi === undefined) {
240
+ return this.platform.Characteristic.AirQuality.UNKNOWN;
241
+ }
242
+ if (this.device.sensorData.aqi <= 50) {
243
+ return this.platform.Characteristic.AirQuality.EXCELLENT;
244
+ }
245
+ else if (this.device.sensorData.aqi <= 100) {
246
+ return this.platform.Characteristic.AirQuality.GOOD;
247
+ }
248
+ else if (this.device.sensorData.aqi <= 150) {
249
+ return this.platform.Characteristic.AirQuality.FAIR;
250
+ }
251
+ else if (this.device.sensorData.aqi <= 200) {
252
+ return this.platform.Characteristic.AirQuality.INFERIOR;
253
+ }
254
+ else {
255
+ return this.platform.Characteristic.AirQuality.POOR;
256
+ }
257
+ }
258
+ getGermShield() {
259
+ return this.device.state.germshield === true;
260
+ }
261
+ async setGermShield(value) {
262
+ this.platform.log.debug(`[${this.device.name}] Setting germ shield to ${value}`);
263
+ await this.device.setState('germshield', value);
264
+ }
265
+ getNightMode() {
266
+ return this.device.state.nightmode === true;
267
+ }
268
+ async setNightMode(value) {
269
+ this.platform.log.debug(`[${this.device.name}] Setting night mode to ${value}`);
270
+ await this.device.setState('nightmode', value);
89
271
  }
90
272
  }
91
273
  exports.AirPurifierAccessory = AirPurifierAccessory;
@@ -1 +1 @@
1
- {"version":3,"file":"AirPurifierAccessory.js","sourceRoot":"","sources":["../../src/accessory/AirPurifierAccessory.ts"],"names":[],"mappings":";;;AAKA,MAAa,oBAAoB;IAI/B,YACqB,QAAyB,EACzB,SAA4B,EAC5B,MAAqB,EACrB,SAAuB;QAHvB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAAmB;QAC5B,WAAM,GAAN,MAAM,CAAe;QACrB,cAAS,GAAT,SAAS,CAAc;QAE1C,IAAI,CAAC,SAAS;aACX,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAE;aACvD,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC;aACvE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEnF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;YAC5D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE5E,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;aAChE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACpC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAExC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;aACjF,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC;aAChF,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACpD,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC;aAC9E,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClD,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC;aACvE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC3C,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC;aAChF,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC;aACzE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aAC5E,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;aACjF,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;IAC/H,CAAC;IAED,SAAS,CAAC,KAA0B;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxF,CAAC;IAED,0BAA0B;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;YACpE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,yBAAyB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,MAAM,CAAC;IAC/D,CAAC;IAED,yBAAyB,CAAC,KAA0B;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACvG,CAAC;IAED,uBAAuB;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;YACxE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;IAC5E,CAAC;IAED,uBAAuB,CAAC,KAA0B;QAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;IACtH,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,gBAAgB,CAAC,KAA0B;QACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAe,CAAC,CAAC;IACpD,CAAC;IAED,yBAAyB;QAEvB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,aAAa,CAAC;IACtE,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,0BAA0B;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF;AAnHD,oDAmHC"}
1
+ {"version":3,"file":"AirPurifierAccessory.js","sourceRoot":"","sources":["../../src/accessory/AirPurifierAccessory.ts"],"names":[],"mappings":";;;AAMA,MAAa,oBAAoB;IAS/B,YACqB,QAAyB,EACzB,SAA4B,EAC5B,MAAqB,EACrB,SAAuB;;QAHvB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAAmB;QAC5B,WAAM,GAAN,MAAM,CAAe;QACrB,cAAS,GAAT,SAAS,CAAc;QAE1C,IAAI,CAAC,SAAS;aACX,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAE;aACvD,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE3E,IAAI,CAAC,OAAO;YACV,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE/H,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvI,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC;aACtE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC;aACpE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC9C,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAElD,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC;aAC7D,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3C,IAAI,CAAC,wBAAwB;YAC3B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC;gBAClE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAErE,IAAI,CAAC,wBAAwB;aAC1B,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC;aACtE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAExI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YACvB,MAAA,IAAI,CAAC,UAAU,oCAAf,IAAI,CAAC,UAAU,GAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,KAAK,CAAC,EAAC;YACjH,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;YAChG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;YAC1G,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACnI,IAAI,CAAC,UAAU;iBACZ,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;iBAC1D,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACvC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC7G,IAAI,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACpC,MAAA,IAAI,CAAC,iBAAiB,oCAAtB,IAAI,CAAC,iBAAiB,GAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAClD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EACtC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,cAAc,EACjC,YAAY,CACb,EAAC;YACF,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvH,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3H,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzH,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzH,CAAC;aAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAChH,IAAI,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;YACrC,MAAA,IAAI,CAAC,kBAAkB,oCAAvB,IAAI,CAAC,kBAAkB,GAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CACnD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EACvC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,cAAc,EACjC,aAAa,CACd,EAAC;YACF,IAAI,CAAC,kBAAkB;iBACpB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;iBAClE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACnG,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAC9B,MAAA,IAAI,CAAC,iBAAiB,oCAAtB,IAAI,CAAC,iBAAiB,GAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,cAAc,EAAE,YAAY,CAAC,EAAC;YACpI,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC;YAC/G,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC;YACzH,IAAI,CAAC,iBAAiB;iBACnB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;iBAClD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACpC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAA,IAAI,CAAC,gBAAgB,oCAArB,IAAI,CAAC,gBAAgB,GAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,aAAa,EAAE,WAAW,CAAC,EAAC;YACjI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,CAAC;YAC7G,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,CAAC;YACvH,IAAI,CAAC,gBAAgB;iBAClB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;iBAClD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,qBAAqB,CAAC,aAA8C;;QAClE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YACtE,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,QAAQ,CAAC,EAAE,CAAC;gBACV,KAAK,SAAS;oBACZ,WAAW,GAAG,IAAI,CAAC;oBACnB,MAAM;gBACR,KAAK,UAAU;oBACb,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;oBACzH,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;oBACrH,MAAM;gBACR,KAAK,UAAU;oBACb,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBACvG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBACzF,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,EAAE,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;oBAC3H,MAAM;gBACR,KAAK,aAAa;oBAChB,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;oBACzH,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;oBAC3G,MAAM;gBACR,KAAK,aAAa;oBAChB,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;oBACjH,MAAM;gBACR,KAAK,YAAY;oBACf,MAAA,IAAI,CAAC,UAAU,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACxF,MAAA,IAAI,CAAC,UAAU,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBACxG,MAAM;gBACR,KAAK,MAAM;oBACT,MAAA,IAAI,CAAC,iBAAiB,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;oBAChH,gBAAgB,GAAG,IAAI,CAAC;oBACxB,MAAM;gBACR,KAAK,MAAM;oBACT,MAAA,IAAI,CAAC,iBAAiB,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;oBAC9G,gBAAgB,GAAG,IAAI,CAAC;oBACxB,MAAM;gBACR,KAAK,KAAK;oBACR,MAAA,IAAI,CAAC,iBAAiB,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;oBAC5G,gBAAgB,GAAG,IAAI,CAAC;oBACxB,MAAM;gBACR,KAAK,YAAY;oBACf,MAAA,IAAI,CAAC,iBAAiB,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;oBACpG,MAAM;gBACR,KAAK,WAAW;oBACd,MAAA,IAAI,CAAC,gBAAgB,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;oBAClG,MAAM;YACV,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBACzF,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,EAAE,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;gBAC3H,MAAA,IAAI,CAAC,UAAU,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACxF,MAAA,IAAI,CAAC,iBAAiB,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;gBACpG,MAAA,IAAI,CAAC,gBAAgB,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACpG,CAAC;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAA,IAAI,CAAC,iBAAiB,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAC9G,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;IACzI,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAA0B;QACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,uBAAuB,KAAK,EAAE,CAAC,CAAC;QAC5E,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChG,CAAC;IAED,0BAA0B;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,IAAI;gBAC3D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,aAAa,CAAC;QACzE,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,QAAQ,CAAC;IACvE,CAAC;IAED,yBAAyB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ;YAC/B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,IAAI;YAC1D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,MAAM,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,KAA0B;QACxD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,0CAA0C,KAAK,EAAE,CAAC,CAAC;QAC/F,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7G,CAAC;IAED,uBAAuB;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS;YAChC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,oBAAoB;YACxE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,KAA0B;QACtD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,uCAAuC,KAAK,EAAE,CAAC,CAAC;QAC5F,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;IAC5H,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAA0B;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,+BAA+B,KAAK,EAAE,CAAC,CAAC;QACpF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAe,CAAC,CAAC;IAC1D,CAAC;IAED,yBAAyB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,iBAAiB;YACrH,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,aAAa;YACnE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC;IACpE,CAAC;IAED,kBAAkB;QAChB,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAChI,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAA0B;QACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,uBAAuB,KAAK,EAAE,CAAC,CAAC;QAC5E,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAgB,CAAC,CAAC;IAC/C,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAA0B;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,+BAA+B,KAAK,EAAE,CAAC,CAAC;QACpF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAe,CAAC,CAAC;IAC5D,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3D,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QACtD,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QACtD,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;QACtD,CAAC;IACH,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAA0B;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACjF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAgB,CAAC,CAAC;IAC7D,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAA0B;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,2BAA2B,KAAK,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAgB,CAAC,CAAC;IAC5D,CAAC;CACF;AA9TD,oDA8TC"}
@@ -8,6 +8,7 @@ type BlueAirDeviceDiscovery = {
8
8
  uuid: string;
9
9
  'wifi-firmware': string;
10
10
  };
11
+ export type FullBlueAirDeviceState = BlueAirDeviceState & BlueAirDeviceSensorData;
11
12
  export type BlueAirDeviceState = {
12
13
  cfv?: string;
13
14
  germshield?: boolean;
@@ -31,7 +32,7 @@ export type BlueAirDeviceSensorData = {
31
32
  humidity?: number;
32
33
  pm1?: number;
33
34
  pm10?: number;
34
- pm25?: number;
35
+ pm2_5?: number;
35
36
  temperature?: number;
36
37
  voc?: number;
37
38
  };
@@ -54,8 +55,10 @@ export declare const BlueAirDeviceSensorDataMap: {
54
55
  export default class BlueAirAwsApi {
55
56
  private readonly logger;
56
57
  private readonly gigyaApi;
57
- private readonly blueairAxios;
58
58
  private last_login;
59
+ private semaphore;
60
+ private accessToken;
61
+ private blueAirApiUrl;
59
62
  constructor(username: string, password: string, region: string, logger: Logger);
60
63
  login(): Promise<void>;
61
64
  checkTokenExpiration(): Promise<void>;