homebridge-easy-mqtt 1.4.0-beta.14 → 1.4.0-beta.16

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/CHANGELOG.md CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  All notable changes to homebridge-dummy will be documented in this file.
4
4
 
5
- ## 1.4.0-beta.14 (2025-09-25)
5
+ ## 1.4.0-beta.16 (2025-09-26)
6
6
 
7
7
  ### Added
8
- - Support for Air Purifier, Fan (v2) GarageDoorOpener, HeaterCooler, LightSensor, and Valve
8
+ - `Air Purifier`, `Air Quality Sensor`, `Fanv2`, `GarageDoorOpener`, `HeaterCooler`, `LightSensor`, and `Valve`
9
9
  - Broker, username, and password can be set via environment variables ([documentation](https://github.com/mpatfield/homebridge-easy-mqtt#environment-variables))
10
10
  - Publish arbitrary MQTT messages on connect ([documentation] (https://github.com/mpatfield/homebridge-easy-mqtt#mqtt-onconnect))
11
11
  - Traduceri în limba română. Mulțumesc, [@rursache](https://github.com/sponsors/rursache)!
@@ -13,13 +13,11 @@ All notable changes to homebridge-dummy will be documented in this file.
13
13
  ### Changed
14
14
  - ⚠️ All accessory states are now saved across plugin/Homebridge restarts
15
15
  - If you want to keep the old behavior, select the `Reset on Restart` option for each accessory you want to reset
16
+ - MQTT `options` JSON can now also include publish options, such as `retain`, in addition to client options
16
17
  - Optimized MQTT connections by sharing across multiple accessories when possible
17
- - Previously, every accessory had its own connection
18
+ - Previously, every accessory always had its own connection
18
19
  - Better field validation in config UI (Thank you, [@justjam2013](https://github.com/sponsors/justjam2013) for teaching me this!)
19
20
 
20
- ### Fixed
21
- - Config UI rendering issue when migrating deprecated fields
22
-
23
21
  ### Notes
24
22
  Would you like to see Homebridge Easy MQTT in your language? Please consider [getting involved](https://github.com/mpatfield/homebridge-easy-mqtt/issues/4). No coding experience required!
25
23
 
package/README.md CHANGED
@@ -26,6 +26,7 @@ This plugin is designed to be a simple replacement for the fantastic [homebridge
26
26
  **HomebridgeEasyMQTT** currently supports the following accessory types but will be expanded over time as more use cases are requested. If there is an accessory type you'd like to see supported, please [create an issue in GitHub](https://github.com/mpatfield/homebridge-easy-mqtt/issues/new/choose).
27
27
 
28
28
  - `AirPurifier`
29
+ - `AirQualitySensor`
29
30
  - `CarbonDioxideSensor`
30
31
  - `CarbonMonoxideSensor`
31
32
  - `ContactSensor`
@@ -176,6 +177,25 @@ These values are used for both determining current state and, where appropriate,
176
177
 
177
178
  ### Sensors
178
179
 
180
+ #### AirQualitySensor
181
+ - `topicGetAirQuality*` - Get air quality
182
+ - `topicGetNitrogenDioxideDensity` - Get nitrogen dioxide density in µg/m³
183
+ - `topicGetOzoneDensity` - Get ozone density in µg/m³
184
+ - `topicGetPM2_5Density` - Get PM2.5 density in µg/m³
185
+ - `topicGetPM10Density` - Get PM10 density in µg/m³
186
+ - `topicGetSulphurDioxideDensity` - Get sulphur dioxide density in µg/m³
187
+ - `topicGetVOCDensity` - Get VOC density in µg/m³
188
+ - `topicGetStatusFault` - Whether or not the sensor has a generic fault
189
+ - `topicGetStatusTampered` - Whether or not the sensor has been tampered with
190
+ - `valueAQExcellent` - Air quality excellent
191
+ - `valueAQGood` - Air quality good
192
+ - `valueAQFair` - Air quality fair
193
+ - `valueAQInferior` - Air quality inferior
194
+ - `valueAQPoor` - Air quality poor
195
+ - `valueAQUnknown` - Air quality unknown
196
+ - `valueFault` - Accessory has a fault
197
+ - `valueTampered` - Accessory has been tampered with
198
+
179
199
  #### CarbonDioxideSensor
180
200
  - `topicGetCarbonDioxideDetected*` - Whether or not the sensor has detected carbon dioxide
181
201
  - `topicGetCarbonDioxideLevel` - The current carbon dioxide level
@@ -313,20 +333,32 @@ These values are used for both determining current state and, where appropriate,
313
333
  - `valueFilterChange` - Indicates that the filter needs to be changed. *Required if `topicGetFilterChangeIndication` is defined.
314
334
 
315
335
  #### Fanv2
316
- TODO
317
- topicGetCurrentFanState?: string,
318
- topicGetRotationDirection?: string,
319
- topicGetTargetFanState?: string,
320
- topicSetRotationDirection?: string,
321
- topicSetTargetFanState?: string,
322
- valueDirectionClockwise?: string,
323
- valueDirectionCounterClockwise?: string,
324
- valueModeAuto?: string,
325
- valueModeBlowing?: string,
326
- valueModeIdle?: string,
327
- valueModeInactive?: string,
328
- valueModeManual?: string,
329
-
336
+ - `topicGetActive*` - Get whether or not the accessory is currently active
337
+ - `topicSetActive*` - Set whether or not the accessory is currently active
338
+ - `topicGetCurrentFanState` - Get current fan mode (blowing, idle, inactive)
339
+ - `topicGetTargetFanState` - Get target fan mode (auto, manual)
340
+ - `topicSetTargetFanState` - Set target fan mode (auto, manual)
341
+ - `topicGetLockPhysicalControls` - Get whether or not the physical controls are locked
342
+ - `topicSetLockPhysicalControls` - Set whether or not the physical controls are locked
343
+ - `topicGetRotationDirection` - Get the fan rotation direction (clockwise, counter clockwise)
344
+ - `topicSetRotationDirection` - Set the fan rotation direction (clockwise, counter clockwise)
345
+ - `topicGetRotationSpeed` - Get the rotation speed as a percentage
346
+ - `topicSetRotationSpeed` - Set the rotation speed as a percentage
347
+ - `topicGetSwingMode` - Get whether or not accessory is oscillating
348
+ - `topicSetSwingMode` - Set whether or not accessory is oscillating
349
+ - `valueStateActive*` - Accessory is currently active
350
+ - `valueStateInactive*` - Accessory is currently inactive
351
+ - `valueModeBlowing` - Air blowing mode
352
+ - `valueModeIdle` - Idle mode
353
+ - `valueModeInactive` - Inactive mode
354
+ - `valueModeAuto` - Auto target mode
355
+ - `valueModeManual` - Manual target mode
356
+ - `valueDirectionClockwise` - Rotating clockwise
357
+ - `valueDirectionCounterClockwise` - Rotating counter clockwise
358
+ - `valueControlLock` - Physical controls are locked
359
+ - `valueControlUnlock` - Physical controls are unlocked
360
+ - `valueSwingEnabled` - Accessory is oscillating
361
+ - `valueSwingDisabled` - Accessory is not oscillating
330
362
 
331
363
  #### HeaterCooler
332
364
  - `temperatureUnits` - The temperature units of the incoming value supplied by the thermostat, `C` for Celsius (default) `F` for Fahrenheit
@@ -436,10 +468,10 @@ You may also turn on additional logging if you'd like to see the MQTT messages p
436
468
 
437
469
  ## MQTT Options
438
470
 
439
- You are able to pass in any arbitrary MQTT options via `mqtt.options` in the config. This can include, for example, such as clientId, protocolVersion, etc. Just make sure the value provided is valid JSON. For example:
471
+ You are able to pass in any arbitrary MQTT options via `mqtt.options` in the config. This can be a combination of [client options](https://github.com/mqttjs/MQTT.js?tab=readme-ov-file#mqttclientstreambuilder-options) and [publish options](https://github.com/mqttjs/MQTT.js?tab=readme-ov-file#mqttclientpublishtopic-message-options-callback). Just make sure the value provided is valid JSON. For example:
440
472
 
441
473
  ```
442
- "options": "{ \"protocolVersion\": \"4\", \"clientId\": \"my-client-id\", \"rejectUnauthorized\": true }"
474
+ "options": "{ \"protocolVersion\": \"4\", \"clientId\": \"my-client-id\", \"retain\": true }"
443
475
  ```
444
476
 
445
477
  ## MQTT OnConnect
@@ -21,8 +21,8 @@
21
21
  "type": {
22
22
  "type": "string",
23
23
  "title": "${config.title.type}",
24
- "enum": [ "AirPurifier", "CarbonMonoxideSensor", "CarbonDioxideSensor", "ContactSensor", "Fanv2", "GarageDoorOpener", "HeaterCooler", "HumiditySensor", "LeakSensor", "Lightbulb", "LightSensor", "LockMechanism", "MotionSensor", "OccupancySensor", "Outlet", "SecuritySystem", "SmokeSensor", "Switch", "TemperatureSensor", "Thermostat", "Valve"],
25
- "enumNames": ["${config.enumNames.airPurifier}", "${config.enumNames.carbonMonoxideSensor}", "${config.enumNames.carbonDioxideSensor}", "${config.enumNames.contactSensor}", "${config.enumNames.fan}", "${config.enumNames.garageDoorOpener}", "${config.enumNames.heaterCooler}", "${config.enumNames.humiditySensor}", "${config.enumNames.leakSensor}", "${config.enumNames.lightbulb}", "${config.enumNames.lightSensor}", "${config.enumNames.lockMechanism}", "${config.enumNames.motionSensor}", "${config.enumNames.occupancySensor}", "${config.enumNames.outlet}", "${config.enumNames.securitySystem}", "${config.enumNames.smokeSensor}", "${config.enumNames.switch}", "${config.enumNames.temperatureSensor}", "${config.enumNames.thermostat}", "${config.enumNames.valve}"],
24
+ "enum": [ "AirPurifier", "AirQualitySensor", "CarbonMonoxideSensor", "CarbonDioxideSensor", "ContactSensor", "Fanv2", "GarageDoorOpener", "HeaterCooler", "HumiditySensor", "LeakSensor", "Lightbulb", "LightSensor", "LockMechanism", "MotionSensor", "OccupancySensor", "Outlet", "SecuritySystem", "SmokeSensor", "Switch", "TemperatureSensor", "Thermostat", "Valve"],
25
+ "enumNames": ["${config.enumNames.airPurifier}", "${config.enumNames.airQualitySensor}", "${config.enumNames.carbonMonoxideSensor}", "${config.enumNames.carbonDioxideSensor}", "${config.enumNames.contactSensor}", "${config.enumNames.fanv2}", "${config.enumNames.garageDoorOpener}", "${config.enumNames.heaterCooler}", "${config.enumNames.humiditySensor}", "${config.enumNames.leakSensor}", "${config.enumNames.lightbulb}", "${config.enumNames.lightSensor}", "${config.enumNames.lockMechanism}", "${config.enumNames.motionSensor}", "${config.enumNames.occupancySensor}", "${config.enumNames.outlet}", "${config.enumNames.securitySystem}", "${config.enumNames.smokeSensor}", "${config.enumNames.switch}", "${config.enumNames.temperatureSensor}", "${config.enumNames.thermostat}", "${config.enumNames.valve}"],
26
26
  "required": true
27
27
  },
28
28
  "group": {
@@ -458,6 +458,34 @@
458
458
  "type": "string",
459
459
  "title": "${config.title.topicSetTargetFanState}"
460
460
  },
461
+ "topicGetAirQuality": {
462
+ "type": "string",
463
+ "title": "${config.title.topicGetAirQuality}"
464
+ },
465
+ "topicGetNitrogenDioxideDensity": {
466
+ "type": "string",
467
+ "title": "${config.title.topicGetNitrogenDioxideDensity}"
468
+ },
469
+ "topicGetOzoneDensity": {
470
+ "type": "string",
471
+ "title": "${config.title.topicGetOzoneDensity}"
472
+ },
473
+ "topicGetPM10Density": {
474
+ "type": "string",
475
+ "title": "${config.title.topicGetPM10Density}"
476
+ },
477
+ "topicGetPM2_5Density": {
478
+ "type": "string",
479
+ "title": "${config.title.topicGetPM2_5Density}"
480
+ },
481
+ "topicGetSulphurDioxideDensity": {
482
+ "type": "string",
483
+ "title": "${config.title.topicGetSulphurDioxideDensity}"
484
+ },
485
+ "topicGetVOCDensity": {
486
+ "type": "string",
487
+ "title": "${config.title.topicGetVOCDensity}"
488
+ },
461
489
  "valueBatteryLow": {
462
490
  "type": "string",
463
491
  "title": "${config.title.valueBatteryLow}"
@@ -666,6 +694,30 @@
666
694
  "type": "string",
667
695
  "title": "${config.title.valueModeBlowing}"
668
696
  },
697
+ "valueAQExcellent": {
698
+ "type": "string",
699
+ "title": "${config.title.valueAQExcellent}"
700
+ },
701
+ "valueAQFair": {
702
+ "type": "string",
703
+ "title": "${config.title.valueAQFair}"
704
+ },
705
+ "valueAQGood": {
706
+ "type": "string",
707
+ "title": "${config.title.valueAQGood}"
708
+ },
709
+ "valueAQInferior": {
710
+ "type": "string",
711
+ "title": "${config.title.valueAQInferior}"
712
+ },
713
+ "valueAQPoor": {
714
+ "type": "string",
715
+ "title": "${config.title.valueAQPoor}"
716
+ },
717
+ "valueAQUnknown": {
718
+ "type": "string",
719
+ "title": "${config.title.valueAQUnknown}"
720
+ },
669
721
  "resetOnRestart": {
670
722
  "type": "boolean",
671
723
  "title": "${config.title.resetOnRestart}"
@@ -692,6 +744,29 @@
692
744
  "required": ["topicGetOn", "topicSetOn", "valueOn", "valueOff"]
693
745
  }
694
746
  },
747
+ {
748
+ "if": {
749
+ "properties": {
750
+ "info": {
751
+ "properties": {
752
+ "type" : {
753
+ "const": "AirQualitySensor"
754
+ }
755
+ }
756
+ }
757
+ }
758
+ },
759
+ "then": {
760
+ "required": ["topicGetAirQuality"],
761
+ "anyOf": [
762
+ { "required": ["valueAQExcellent"] },
763
+ { "required": ["valueAQFair"] },
764
+ { "required": ["valueAQGood"] },
765
+ { "required": ["valueAQInferior"] },
766
+ { "required": ["valueAQPoor"] }
767
+ ]
768
+ }
769
+ },
695
770
  {
696
771
  "if": {
697
772
  "properties": {
@@ -1792,6 +1867,71 @@
1792
1867
  }
1793
1868
  ]
1794
1869
  },
1870
+ {
1871
+ "type": "fieldset",
1872
+ "notitle": true,
1873
+ "condition": {
1874
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'AirQualitySensor';"
1875
+ },
1876
+ "items": [
1877
+ {
1878
+ "type": "div",
1879
+ "displayFlex": true,
1880
+ "flex-direction": "row",
1881
+ "items": [
1882
+ {
1883
+ "key": "accessories[].topicGetAirQuality",
1884
+ "flex": "0 0 50%"
1885
+ }
1886
+ ]
1887
+ },
1888
+ {
1889
+ "type": "div",
1890
+ "displayFlex": true,
1891
+ "flex-direction": "row",
1892
+ "items": [
1893
+ {
1894
+ "key": "accessories[].topicGetNitrogenDioxideDensity",
1895
+ "flex": "0 0 50%"
1896
+ },
1897
+ {
1898
+ "key": "accessories[].topicGetOzoneDensity",
1899
+ "flex": "0 0 50%"
1900
+ }
1901
+ ]
1902
+ },
1903
+ {
1904
+ "type": "div",
1905
+ "displayFlex": true,
1906
+ "flex-direction": "row",
1907
+ "items": [
1908
+ {
1909
+ "key": "accessories[].topicGetPM2_5Density",
1910
+ "flex": "0 0 50%"
1911
+ },
1912
+ {
1913
+ "key": "accessories[].topicGetPM10Density",
1914
+ "flex": "0 0 50%"
1915
+ }
1916
+ ]
1917
+ },
1918
+ {
1919
+ "type": "div",
1920
+ "displayFlex": true,
1921
+ "flex-direction": "row",
1922
+ "items": [
1923
+ {
1924
+ "key": "accessories[].topicGetSulphurDioxideDensity",
1925
+ "flex": "0 0 50%"
1926
+ },
1927
+ {
1928
+ "key": "accessories[].topicGetVOCDensity",
1929
+ "flex": "0 0 50%"
1930
+ }
1931
+ ]
1932
+ }
1933
+ ]
1934
+ },
1795
1935
  {
1796
1936
  "type": "fieldset",
1797
1937
  "notitle": true,
@@ -2415,7 +2555,7 @@
2415
2555
  "type": "fieldset",
2416
2556
  "notitle": true,
2417
2557
  "condition": {
2418
- "functionBody": "return ['AirPurifier', 'Fanv2, 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2558
+ "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2419
2559
  },
2420
2560
  "items": [
2421
2561
  {
@@ -2562,7 +2702,7 @@
2562
2702
  "type": "fieldset",
2563
2703
  "notitle": true,
2564
2704
  "condition": {
2565
- "functionBody": "return ['AirPurifier', 'Fanv2, 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2705
+ "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2566
2706
  },
2567
2707
  "items": [
2568
2708
  {
@@ -2860,6 +3000,53 @@
2860
3000
  }
2861
3001
  ]
2862
3002
  },
3003
+ {
3004
+ "type": "fieldset",
3005
+ "notitle": true,
3006
+ "condition": {
3007
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'AirQualitySensor';"
3008
+ },
3009
+ "items": [
3010
+ {
3011
+ "type": "div",
3012
+ "displayFlex": true,
3013
+ "flex-direction": "row",
3014
+ "items": [
3015
+ {
3016
+ "key": "accessories[].valueAQExcellent",
3017
+ "flex": "0 0 25%"
3018
+ },
3019
+ {
3020
+ "key": "accessories[].valueAQGood",
3021
+ "flex": "0 0 25%"
3022
+ },
3023
+ {
3024
+ "key": "accessories[].valueAQFair",
3025
+ "flex": "0 0 25%"
3026
+ }
3027
+ ]
3028
+ },
3029
+ {
3030
+ "type": "div",
3031
+ "displayFlex": true,
3032
+ "flex-direction": "row",
3033
+ "items": [
3034
+ {
3035
+ "key": "accessories[].valueAQInferior",
3036
+ "flex": "0 0 25%"
3037
+ },
3038
+ {
3039
+ "key": "accessories[].valueAQPoor",
3040
+ "flex": "0 0 25%"
3041
+ },
3042
+ {
3043
+ "key": "accessories[].valueAQUnknown",
3044
+ "flex": "0 0 25%"
3045
+ }
3046
+ ]
3047
+ }
3048
+ ]
3049
+ },
2863
3050
  {
2864
3051
  "type": "div",
2865
3052
  "displayFlex": true,
@@ -3,12 +3,14 @@ import { AccessoryType } from '../../model/enums.js';
3
3
  import { GarageDoorAccessory } from '../garage.js';
4
4
  import { LockMechanismAccessory } from '../lock.js';
5
5
  import { SecuritySystemAccessory } from '../security.js';
6
+ import { FanV2Accessory } from '../climate/fan2.js';
6
7
  import { HeaterCoolerAccessory } from '../climate/heaterCooler.js';
7
8
  import { PurifierAccessory } from '../climate/purifier.js';
8
9
  import { ThermostatAccessory } from '../climate/thermostat.js';
9
10
  import { LightbulbAccessory } from '../onoff/lightbulb.js';
10
11
  import { OutletAccessory } from '../onoff/outlet.js';
11
12
  import { SwitchAccessory } from '../onoff/switch.js';
13
+ import { AirSensorAccessory } from '../sensor/air.js';
12
14
  import { CO2SensorAccessory } from '../sensor/carbonDioxide.js';
13
15
  import { COSensorAccessory } from '../sensor/carbonMonoxide.js';
14
16
  import { ContactSensorAccessory } from '../sensor/contact.js';
@@ -21,7 +23,6 @@ import { SmokeSensorAccessory } from '../sensor/smoke.js';
21
23
  import { TemperatureSensorAccessory } from '../sensor/temperature.js';
22
24
  import { ValveAccessory } from '../valve.js';
23
25
  import { PLUGIN_NAME } from '../../homebridge/settings.js';
24
- import { FanAccessory } from '../climate/fan.js';
25
26
  export function createIdentifier(info) {
26
27
  return info.id ?? `${PLUGIN_NAME}:${info.type}:${info.name}`;
27
28
  }
@@ -29,6 +30,8 @@ export function createAccessory(Service, Characteristic, platformAccessory, acce
29
30
  switch (accessoryConfig.info.type) {
30
31
  case AccessoryType.AirPurifier:
31
32
  return new PurifierAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
33
+ case AccessoryType.AirQualitySensor:
34
+ return new AirSensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
32
35
  case AccessoryType.CarbonDioxideSensor:
33
36
  return new CO2SensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
34
37
  case AccessoryType.CarbonMonoxideSensor:
@@ -36,7 +39,7 @@ export function createAccessory(Service, Characteristic, platformAccessory, acce
36
39
  case AccessoryType.ContactSensor:
37
40
  return new ContactSensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
38
41
  case AccessoryType.Fanv2:
39
- return new FanAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
42
+ return new FanV2Accessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
40
43
  case AccessoryType.GarageDoorOpener:
41
44
  return new GarageDoorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
42
45
  case AccessoryType.HeaterCooler:
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/accessory/abstract/helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/accessory/abstract/helper.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import { PlatformAccessory } from 'homebridge';
2
2
  import { ActiveClimateAccessory } from './active.js';
3
3
  import { AccessoryType } from '../../model/enums.js';
4
- import { CharacteristicType, ServiceType, FanConfig } from '../../model/types.js';
4
+ import { CharacteristicType, ServiceType, FanV2Config } from '../../model/types.js';
5
5
  import { Log } from '../../tools/log.js';
6
- export declare class FanAccessory extends ActiveClimateAccessory<FanConfig> {
6
+ export declare class FanV2Accessory extends ActiveClimateAccessory<FanV2Config> {
7
7
  private readonly CURRENT_STATE_MAP;
8
8
  private readonly TARGET_STATE_MAP;
9
- constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: FanConfig, log: Log, isGrouped: boolean);
9
+ constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: FanV2Config, log: Log, isGrouped: boolean);
10
10
  protected getAccessoryType(): AccessoryType;
11
11
  private onCurrentStateUpdate;
12
12
  private onTargetStateUpdate;
@@ -1,7 +1,7 @@
1
1
  import { ActiveClimateAccessory } from './active.js';
2
2
  import { strings } from '../../i18n/i18n.js';
3
3
  import { AccessoryType, CharacteristicKey } from '../../model/enums.js';
4
- export class FanAccessory extends ActiveClimateAccessory {
4
+ export class FanV2Accessory extends ActiveClimateAccessory {
5
5
  CURRENT_STATE_MAP;
6
6
  TARGET_STATE_MAP;
7
7
  constructor(Service, Characteristic, accessory, config, log, isGrouped) {
@@ -16,20 +16,20 @@ export class FanAccessory extends ActiveClimateAccessory {
16
16
  ['valueModeManual', Characteristic.TargetFanState.MANUAL],
17
17
  ]);
18
18
  const validCurrentStates = Array.from(this.CURRENT_STATE_MAP.keys()).filter((key) => this.getRawValue(key, false) !== undefined);
19
- if (validCurrentStates.length === 0) {
20
- this.log.error(strings.fan.noCurrentStateValues, this.name);
19
+ if (config.topicGetCurrentFanState !== undefined && validCurrentStates.length === 0) {
20
+ this.log.error(strings.fanv2.noCurrentStateValues, this.name);
21
21
  return;
22
22
  }
23
23
  this.setupCharacteristic(CharacteristicKey.CurrentFanState, this.CURRENT_STATE_MAP.get(validCurrentStates[0]), 'topicGetCurrentFanState', this.onCurrentStateUpdate.bind(this), false)
24
24
  ?.setProps({ validValues: validCurrentStates.map((key) => this.CURRENT_STATE_MAP.get(key)) });
25
25
  const validTargetStates = Array.from(this.TARGET_STATE_MAP.keys()).filter((key) => this.getRawValue(key, false) !== undefined);
26
- if (validTargetStates.length === 0) {
27
- this.log.error(strings.fan.noTargetStateValues, this.name);
26
+ if (config.topicGetTargetFanState !== undefined && validTargetStates.length === 0) {
27
+ this.log.error(strings.fanv2.noTargetStateValues, this.name);
28
28
  return;
29
29
  }
30
30
  this.setupCharacteristic(CharacteristicKey.TargetFanState, this.TARGET_STATE_MAP.get(validTargetStates[0]), 'topicGetTargetFanState', this.onTargetStateUpdate.bind(this), false, 'topicSetTargetFanState', this.onSetTargetState.bind(this))
31
31
  ?.setProps({ validValues: validTargetStates.map((key) => this.TARGET_STATE_MAP.get(key)) });
32
- this.setupCharacteristic(CharacteristicKey.RotationDirection, Characteristic.RotationDirection.CLOCKWISE, 'topicGetRotationDirection', this.bindOnUpdateNumericBoolean(CharacteristicKey.RotationDirection, 'valueDirectionCounterClockwise', strings.fan.clockwise, strings.fan.counterClockwise), false, 'topicSetRotationDirection', this.onSetDirection.bind(this));
32
+ this.setupCharacteristic(CharacteristicKey.RotationDirection, Characteristic.RotationDirection.CLOCKWISE, 'topicGetRotationDirection', this.bindOnUpdateNumericBoolean(CharacteristicKey.RotationDirection, 'valueDirectionCounterClockwise', strings.fanv2.clockwise, strings.fanv2.counterClockwise), false, 'topicSetRotationDirection', this.onSetDirection.bind(this));
33
33
  }
34
34
  getAccessoryType() {
35
35
  return AccessoryType.Fanv2;
@@ -60,7 +60,7 @@ export class FanAccessory extends ActiveClimateAccessory {
60
60
  return;
61
61
  }
62
62
  const clockwise = value === this.Characteristic.RotationDirection.CLOCKWISE;
63
- const logString = clockwise ? strings.fan.setDirectionClockwise : strings.fan.setDirectionCounterClockwise;
63
+ const logString = clockwise ? strings.fanv2.setDirectionClockwise : strings.fanv2.setDirectionCounterClockwise;
64
64
  const publish = clockwise ? this.config.valueDirectionClockwise : this.config.valueDirectionCounterClockwise;
65
65
  this.onSet(CharacteristicKey.RotationDirection, value, publish, 'topicSetRotationDirection', logString);
66
66
  }
@@ -72,7 +72,7 @@ export class FanAccessory extends ActiveClimateAccessory {
72
72
  }
73
73
  });
74
74
  if (primative === undefined) {
75
- this.log.error(strings.fan.badValue, this.name, `'${value}'`);
75
+ this.log.error(strings.fanv2.badValue, this.name, `'${value}'`);
76
76
  }
77
77
  return primative;
78
78
  }
@@ -85,7 +85,7 @@ export class FanAccessory extends ActiveClimateAccessory {
85
85
  case this.getPrimitiveValue('valueModeBlowing', false):
86
86
  return this.CURRENT_STATE_MAP.get('valueModeBlowing');
87
87
  }
88
- this.logIfDesired(strings.fan.unknownValue, `'${value}'`);
88
+ this.logIfDesired(strings.fanv2.unknownValue, `'${value}'`);
89
89
  }
90
90
  toTargetCVState(value) {
91
91
  switch (value) {
@@ -94,29 +94,29 @@ export class FanAccessory extends ActiveClimateAccessory {
94
94
  case this.getPrimitiveValue('valueModeManual', false):
95
95
  return this.TARGET_STATE_MAP.get('valueModeManual');
96
96
  }
97
- this.logIfDesired(strings.fan.unknownValue, `'${value}'`);
97
+ this.logIfDesired(strings.fanv2.unknownValue, `'${value}'`);
98
98
  }
99
99
  stateStringForCurrentCV(state) {
100
100
  switch (state) {
101
101
  case this.Characteristic.CurrentFanState.INACTIVE:
102
- return strings.fan.stateInactive;
102
+ return strings.fanv2.stateInactive;
103
103
  case this.Characteristic.CurrentFanState.IDLE:
104
- return strings.fan.stateIdle;
104
+ return strings.fanv2.stateIdle;
105
105
  case this.Characteristic.CurrentFanState.BLOWING_AIR:
106
- return strings.fan.stateBlowing;
106
+ return strings.fanv2.stateBlowing;
107
107
  default:
108
- return strings.fan.stateUnknown;
108
+ return strings.fanv2.stateUnknown;
109
109
  }
110
110
  }
111
111
  stateStringForTargetCV(state) {
112
112
  switch (state) {
113
113
  case this.Characteristic.TargetFanState.AUTO:
114
- return strings.fan.stateAuto;
114
+ return strings.fanv2.stateAuto;
115
115
  case this.Characteristic.TargetFanState.MANUAL:
116
- return strings.fan.stateManual;
116
+ return strings.fanv2.stateManual;
117
117
  default:
118
- return strings.fan.stateUnknown;
118
+ return strings.fanv2.stateUnknown;
119
119
  }
120
120
  }
121
121
  }
122
- //# sourceMappingURL=fan.js.map
122
+ //# sourceMappingURL=fan2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fan2.js","sourceRoot":"","sources":["../../../src/accessory/climate/fan2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { PlatformAccessory } from 'homebridge';
2
+ import { SensorAccessory } from './sensor.js';
3
+ import { AccessoryType } from '../../model/enums.js';
4
+ import { CharacteristicType, AirSensorConfig, ServiceType } from '../../model/types.js';
5
+ import { Log } from '../../tools/log.js';
6
+ export declare class AirSensorAccessory extends SensorAccessory<AirSensorConfig> {
7
+ private readonly STATE_MAP;
8
+ constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: AirSensorConfig, log: Log, isGrouped: boolean);
9
+ protected getAccessoryType(): AccessoryType;
10
+ private onAirQualityUpdate;
11
+ private toCVState;
12
+ private qualityStringForCV;
13
+ private logTemplateForDensityKey;
14
+ }