homebridge-easy-mqtt 1.4.0-beta.9 → 1.4.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.
Files changed (124) hide show
  1. package/CHANGELOG.md +20 -6
  2. package/README.md +237 -22
  3. package/config.schema.json +1361 -92
  4. package/dist/accessory/abstract/base.js +5 -5
  5. package/dist/accessory/abstract/base.js.map +1 -1
  6. package/dist/accessory/abstract/common.d.ts +43 -0
  7. package/dist/accessory/abstract/common.js +172 -0
  8. package/dist/accessory/abstract/common.js.map +1 -0
  9. package/dist/accessory/abstract/helper.d.ts +1 -0
  10. package/dist/accessory/abstract/helper.js +21 -2
  11. package/dist/accessory/abstract/helper.js.map +1 -1
  12. package/dist/accessory/abstract/mqtt.d.ts +15 -26
  13. package/dist/accessory/abstract/mqtt.js +26 -143
  14. package/dist/accessory/abstract/mqtt.js.map +1 -1
  15. package/dist/accessory/addons/addon.d.ts +24 -0
  16. package/dist/accessory/addons/addon.js +52 -0
  17. package/dist/accessory/addons/addon.js.map +1 -0
  18. package/dist/accessory/addons/filter.d.ts +11 -0
  19. package/dist/accessory/addons/filter.js +37 -0
  20. package/dist/accessory/addons/filter.js.map +1 -0
  21. package/dist/accessory/button.d.ts +10 -0
  22. package/dist/accessory/button.js +43 -0
  23. package/dist/accessory/button.js.map +1 -0
  24. package/dist/accessory/climate/active.js +14 -8
  25. package/dist/accessory/climate/active.js.map +1 -1
  26. package/dist/accessory/climate/fan2.d.ts +20 -0
  27. package/dist/accessory/climate/fan2.js +122 -0
  28. package/dist/accessory/climate/fan2.js.map +1 -0
  29. package/dist/accessory/climate/heaterCooler.js +4 -2
  30. package/dist/accessory/climate/heaterCooler.js.map +1 -1
  31. package/dist/accessory/climate/purifier.js +5 -3
  32. package/dist/accessory/climate/purifier.js.map +1 -1
  33. package/dist/accessory/climate/temperatureControl.d.ts +1 -1
  34. package/dist/accessory/climate/temperatureControl.js +10 -8
  35. package/dist/accessory/climate/temperatureControl.js.map +1 -1
  36. package/dist/accessory/climate/thermostat.js +8 -8
  37. package/dist/accessory/climate/thermostat.js.map +1 -1
  38. package/dist/accessory/garage.d.ts +17 -0
  39. package/dist/accessory/garage.js +110 -0
  40. package/dist/accessory/garage.js.map +1 -0
  41. package/dist/accessory/lock.d.ts +2 -2
  42. package/dist/accessory/lock.js +3 -3
  43. package/dist/accessory/lock.js.map +1 -1
  44. package/dist/accessory/onoff/lightbulb.js +9 -4
  45. package/dist/accessory/onoff/lightbulb.js.map +1 -1
  46. package/dist/accessory/onoff/onoff.js +1 -1
  47. package/dist/accessory/onoff/onoff.js.map +1 -1
  48. package/dist/accessory/onoff/outlet.js +1 -1
  49. package/dist/accessory/onoff/outlet.js.map +1 -1
  50. package/dist/accessory/position/blind.d.ts +10 -0
  51. package/dist/accessory/position/blind.js +22 -0
  52. package/dist/accessory/position/blind.js.map +1 -0
  53. package/dist/accessory/position/position.d.ts +14 -0
  54. package/dist/accessory/position/position.js +88 -0
  55. package/dist/accessory/position/position.js.map +1 -0
  56. package/dist/accessory/security.js +4 -4
  57. package/dist/accessory/security.js.map +1 -1
  58. package/dist/accessory/sensor/air.d.ts +14 -0
  59. package/dist/accessory/sensor/air.js +96 -0
  60. package/dist/accessory/sensor/air.js.map +1 -0
  61. package/dist/accessory/sensor/carbonDioxide.js +3 -3
  62. package/dist/accessory/sensor/carbonDioxide.js.map +1 -1
  63. package/dist/accessory/sensor/carbonMonoxide.js +3 -3
  64. package/dist/accessory/sensor/carbonMonoxide.js.map +1 -1
  65. package/dist/accessory/sensor/contact.js +1 -1
  66. package/dist/accessory/sensor/contact.js.map +1 -1
  67. package/dist/accessory/sensor/humidity.js +1 -1
  68. package/dist/accessory/sensor/humidity.js.map +1 -1
  69. package/dist/accessory/sensor/leak.js +1 -1
  70. package/dist/accessory/sensor/leak.js.map +1 -1
  71. package/dist/accessory/sensor/light.js +1 -1
  72. package/dist/accessory/sensor/light.js.map +1 -1
  73. package/dist/accessory/sensor/motion.js +1 -1
  74. package/dist/accessory/sensor/motion.js.map +1 -1
  75. package/dist/accessory/sensor/occupancy.js +1 -1
  76. package/dist/accessory/sensor/occupancy.js.map +1 -1
  77. package/dist/accessory/sensor/sensor.js +4 -4
  78. package/dist/accessory/sensor/sensor.js.map +1 -1
  79. package/dist/accessory/sensor/smoke.js +1 -1
  80. package/dist/accessory/sensor/smoke.js.map +1 -1
  81. package/dist/accessory/sensor/temperature.js +1 -1
  82. package/dist/accessory/sensor/temperature.js.map +1 -1
  83. package/dist/accessory/valve.js +7 -7
  84. package/dist/accessory/valve.js.map +1 -1
  85. package/dist/homebridge/platform.js +4 -2
  86. package/dist/homebridge/platform.js.map +1 -1
  87. package/dist/homebridge-ui/public/index.html +1 -1
  88. package/dist/homebridge-ui/public/ui.js +1 -1
  89. package/dist/i18n/en.d.ts +183 -16
  90. package/dist/i18n/en.js +236 -69
  91. package/dist/i18n/en.js.map +1 -1
  92. package/dist/i18n/fr.d.ts +452 -18
  93. package/dist/i18n/fr.js +269 -2
  94. package/dist/i18n/fr.js.map +1 -1
  95. package/dist/i18n/i18n.d.ts +185 -17
  96. package/dist/i18n/i18n.js +6 -0
  97. package/dist/i18n/i18n.js.map +1 -1
  98. package/dist/i18n/ro.d.ts +347 -33
  99. package/dist/i18n/ro.js +164 -17
  100. package/dist/i18n/ro.js.map +1 -1
  101. package/dist/i18n/template.d.ts +183 -16
  102. package/dist/i18n/template.js +1 -1
  103. package/dist/i18n/vi.d.ts +1059 -0
  104. package/dist/i18n/vi.js +528 -0
  105. package/dist/i18n/vi.js.map +1 -0
  106. package/dist/model/enums.d.ts +35 -6
  107. package/dist/model/enums.js +34 -5
  108. package/dist/model/enums.js.map +1 -1
  109. package/dist/model/mqtt.d.ts +4 -3
  110. package/dist/model/mqtt.js +30 -9
  111. package/dist/model/mqtt.js.map +1 -1
  112. package/dist/model/types.d.ts +97 -4
  113. package/dist/tools/log.d.ts +7 -5
  114. package/dist/tools/log.js.map +1 -1
  115. package/dist/tools/properties.d.ts +11 -0
  116. package/dist/tools/properties.js +73 -0
  117. package/dist/tools/properties.js.map +1 -0
  118. package/dist/tools/temperature.d.ts +7 -3
  119. package/dist/tools/temperature.js +20 -9
  120. package/dist/tools/temperature.js.map +1 -1
  121. package/dist/tools/validation.d.ts +2 -0
  122. package/dist/tools/validation.js +11 -0
  123. package/dist/tools/validation.js.map +1 -1
  124. package/package.json +1 -1
@@ -21,8 +21,8 @@
21
21
  "type": {
22
22
  "type": "string",
23
23
  "title": "${config.title.type}",
24
- "enum": [ "AirPurifier", "CarbonMonoxideSensor", "CarbonDioxideSensor", "ContactSensor", "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.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", "StatelessProgrammableSwitch", "Switch", "TemperatureSensor", "Thermostat", "Valve", "WindowCovering"],
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.statelessSwitch}", "${config.enumNames.switch}", "${config.enumNames.temperatureSensor}", "${config.enumNames.thermostat}", "${config.enumNames.valve}", "${config.enumNames.windowCovering}"],
26
26
  "required": true
27
27
  },
28
28
  "group": {
@@ -71,6 +71,20 @@
71
71
  "description": "${config.description.options}",
72
72
  "placeholder": "{ \"protocolVersion\": \"4\", \"clientId\": \"my-client-id\", \"rejectUnauthorized\": true }",
73
73
  "pattern": "^\\{\\s*(?:\"[^\"\\\\\\r\\n]*\"\\s*:\\s*(?:\"[^\"\\\\\\r\\n]*\"|[0-9.+-eE]+|true|false|null)\\s*,\\s*)*(?:\"[^\"\\\\\\r\\n]*\"\\s*:\\s*(?:\"[^\"\\\\\\r\\n]*\"|[0-9.+-eE]+|true|false|null)\\s*)?\\}$"
74
+ },
75
+ "onConnect": {
76
+ "type": "array",
77
+ "items": {
78
+ "type": "object",
79
+ "properties": {
80
+ "topic": {
81
+ "type": "string"
82
+ },
83
+ "message": {
84
+ "type": "string"
85
+ }
86
+ }
87
+ }
74
88
  }
75
89
  }
76
90
  },
@@ -108,6 +122,18 @@
108
122
  "type": "array",
109
123
  "items": { "$ref": "#/definitions/customCharacteristic" }
110
124
  },
125
+ "maximumBrightness": {
126
+ "type": "integer",
127
+ "title": "${config.title.maximum}"
128
+ },
129
+ "maximumPosition": {
130
+ "type": "integer",
131
+ "title": "${config.title.maximum}"
132
+ },
133
+ "maximumRotationSpeed": {
134
+ "type": "integer",
135
+ "title": "${config.title.maximum}"
136
+ },
111
137
  "temperatureUnits": {
112
138
  "type": "string",
113
139
  "title": "${config.title.sourceUnits}",
@@ -396,6 +422,130 @@
396
422
  "type": "string",
397
423
  "title": "${config.title.topicSetTargetPurifierState}"
398
424
  },
425
+ "topicGetFilterChangeIndication": {
426
+ "type": "string",
427
+ "title": "${config.title.topicGetFilterChangeIndication}"
428
+ },
429
+ "topicGetFilterLifeLevel": {
430
+ "type": "string",
431
+ "title": "${config.title.topicGetFilterLifeLevel}"
432
+ },
433
+ "topicResetFilterIndication": {
434
+ "type": "string",
435
+ "title": "${config.title.topicResetFilterIndication}"
436
+ },
437
+ "topicGetCurrentDoorState": {
438
+ "type": "string",
439
+ "title": "${config.title.topicGetCurrentDoorState}"
440
+ },
441
+ "topicGetObstructionDetected": {
442
+ "type": "string",
443
+ "title": "${config.title.topicGetObstructionDetected}"
444
+ },
445
+ "topicGetTargetDoorState": {
446
+ "type": "string",
447
+ "title": "${config.title.topicGetTargetDoorState}"
448
+ },
449
+ "topicSetTargetDoorState": {
450
+ "type": "string",
451
+ "title": "${config.title.topicSetTargetDoorState}"
452
+ },
453
+ "topicGetCurrentFanState": {
454
+ "type": "string",
455
+ "title": "${config.title.topicGetCurrentFanState}"
456
+ },
457
+ "topicGetRotationDirection": {
458
+ "type": "string",
459
+ "title": "${config.title.topicGetRotationDirection}"
460
+ },
461
+ "topicGetTargetFanState": {
462
+ "type": "string",
463
+ "title": "${config.title.topicGetTargetFanState}"
464
+ },
465
+ "topicSetRotationDirection": {
466
+ "type": "string",
467
+ "title": "${config.title.topicSetRotationDirection}"
468
+ },
469
+ "topicSetTargetFanState": {
470
+ "type": "string",
471
+ "title": "${config.title.topicSetTargetFanState}"
472
+ },
473
+ "topicGetAirQuality": {
474
+ "type": "string",
475
+ "title": "${config.title.topicGetAirQuality}"
476
+ },
477
+ "topicGetNitrogenDioxideDensity": {
478
+ "type": "string",
479
+ "title": "${config.title.topicGetNitrogenDioxideDensity}"
480
+ },
481
+ "topicGetOzoneDensity": {
482
+ "type": "string",
483
+ "title": "${config.title.topicGetOzoneDensity}"
484
+ },
485
+ "topicGetPM10Density": {
486
+ "type": "string",
487
+ "title": "${config.title.topicGetPM10Density}"
488
+ },
489
+ "topicGetPM2_5Density": {
490
+ "type": "string",
491
+ "title": "${config.title.topicGetPM2_5Density}"
492
+ },
493
+ "topicGetSulphurDioxideDensity": {
494
+ "type": "string",
495
+ "title": "${config.title.topicGetSulphurDioxideDensity}"
496
+ },
497
+ "topicGetVOCDensity": {
498
+ "type": "string",
499
+ "title": "${config.title.topicGetVOCDensity}"
500
+ },
501
+ "topicGetCurrentPosition": {
502
+ "type": "string",
503
+ "title": "${config.title.topicGetCurrentPosition}"
504
+ },
505
+ "topicSetHoldPosition": {
506
+ "type": "string",
507
+ "title": "${config.title.topicSetHoldPosition}"
508
+ },
509
+ "topicGetPositionState": {
510
+ "type": "string",
511
+ "title": "${config.title.topicGetPositionState}"
512
+ },
513
+ "topicGetTargetPosition": {
514
+ "type": "string",
515
+ "title": "${config.title.topicGetTargetPosition}"
516
+ },
517
+ "topicSetTargetPosition": {
518
+ "type": "string",
519
+ "title": "${config.title.topicSetTargetPosition}"
520
+ },
521
+ "topicGetCurrentHorizontalTiltAngle": {
522
+ "type": "string",
523
+ "title": "${config.title.topicGetCurrentHorizontalTiltAngle}"
524
+ },
525
+ "topicGetCurrentVerticalTiltAngle": {
526
+ "type": "string",
527
+ "title": "${config.title.topicGetCurrentVerticalTiltAngle}"
528
+ },
529
+ "topicGetTargetHorizontalTiltAngle": {
530
+ "type": "string",
531
+ "title": "${config.title.topicGetTargetHorizontalTiltAngle}"
532
+ },
533
+ "topicGetTargetVerticalTiltAngle": {
534
+ "type": "string",
535
+ "title": "${config.title.topicGetTargetVerticalTiltAngle}"
536
+ },
537
+ "topicSetTargetHorizontalTiltAngle": {
538
+ "type": "string",
539
+ "title": "${config.title.topicSetTargetHorizontalTiltAngle}"
540
+ },
541
+ "topicSetTargetVerticalTiltAngle": {
542
+ "type": "string",
543
+ "title": "${config.title.topicSetTargetVerticalTiltAngle}"
544
+ },
545
+ "topicEventButtonPress": {
546
+ "type": "string",
547
+ "title": "${config.title.topicEventButtonPress}"
548
+ },
399
549
  "valueBatteryLow": {
400
550
  "type": "string",
401
551
  "title": "${config.title.valueBatteryLow}"
@@ -560,6 +710,114 @@
560
710
  "type": "string",
561
711
  "title": "${config.title.valueModePurifying}"
562
712
  },
713
+ "valueFilterChange": {
714
+ "type": "string",
715
+ "title": "${config.title.valueFilterChange}"
716
+ },
717
+ "valueFilterReset": {
718
+ "type": "string",
719
+ "title": "${config.title.valueFilterReset}"
720
+ },
721
+ "valueDoorObstructed": {
722
+ "type": "string",
723
+ "title": "${config.title.valueDoorObstructed}"
724
+ },
725
+ "valueDoorStateClosed": {
726
+ "type": "string",
727
+ "title": "${config.title.valueDoorStateClosed}"
728
+ },
729
+ "valueDoorStateClosing": {
730
+ "type": "string",
731
+ "title": "${config.title.valueDoorStateClosing}"
732
+ },
733
+ "valueDoorStateOpen": {
734
+ "type": "string",
735
+ "title": "${config.title.valueDoorStateOpen}"
736
+ },
737
+ "valueDoorStateOpening": {
738
+ "type": "string",
739
+ "title": "${config.title.valueDoorStateOpening}"
740
+ },
741
+ "valueDoorStateStopped": {
742
+ "type": "string",
743
+ "title": "${config.title.valueDoorStateStopped}"
744
+ },
745
+ "valueDirectionClockwise": {
746
+ "type": "string",
747
+ "title": "${config.title.valueDirectionClockwise}"
748
+ },
749
+ "valueDirectionCounterClockwise": {
750
+ "type": "string",
751
+ "title": "${config.title.valueDirectionCounterClockwise}"
752
+ },
753
+ "valueModeBlowing": {
754
+ "type": "string",
755
+ "title": "${config.title.valueModeBlowing}"
756
+ },
757
+ "valueAQExcellent": {
758
+ "type": "string",
759
+ "title": "${config.title.valueAQExcellent}"
760
+ },
761
+ "valueAQFair": {
762
+ "type": "string",
763
+ "title": "${config.title.valueAQFair}"
764
+ },
765
+ "valueAQGood": {
766
+ "type": "string",
767
+ "title": "${config.title.valueAQGood}"
768
+ },
769
+ "valueAQInferior": {
770
+ "type": "string",
771
+ "title": "${config.title.valueAQInferior}"
772
+ },
773
+ "valueAQPoor": {
774
+ "type": "string",
775
+ "title": "${config.title.valueAQPoor}"
776
+ },
777
+ "valueAQUnknown": {
778
+ "type": "string",
779
+ "title": "${config.title.valueAQUnknown}"
780
+ },
781
+ "valuePositionHold": {
782
+ "type": "string",
783
+ "title": "${config.title.valuePositionHold}"
784
+ },
785
+ "valuePositionDecreasing": {
786
+ "type": "string",
787
+ "title": "${config.title.valuePositionDecreasing}"
788
+ },
789
+ "valuePositionIncreasing": {
790
+ "type": "string",
791
+ "title": "${config.title.valuePositionIncreasing}"
792
+ },
793
+ "valuePositionObstructed": {
794
+ "type": "string",
795
+ "title": "${config.title.valuePositionObstructed}"
796
+ },
797
+ "valuePositionResume": {
798
+ "type": "string",
799
+ "title": "${config.title.valuePositionResume}"
800
+ },
801
+ "valuePositionStopped": {
802
+ "type": "string",
803
+ "title": "${config.title.valuePositionStopped}"
804
+ },
805
+ "valueSinglePress": {
806
+ "type": "string",
807
+ "title": "${config.title.valueSinglePress}"
808
+ },
809
+ "valueDoublePress": {
810
+ "type": "string",
811
+ "title": "${config.title.valueDoublePress}"
812
+ },
813
+ "valueLongPress": {
814
+ "type": "string",
815
+ "title": "${config.title.valueLongPress}"
816
+ },
817
+ "resetOnRestart": {
818
+ "type": "boolean",
819
+ "title": "${config.title.resetOnRestart}"
820
+ },
563
821
  "disableLogging": {
564
822
  "type": "boolean",
565
823
  "title": "${config.title.disableLogging}"
@@ -582,6 +840,50 @@
582
840
  "required": ["topicGetOn", "topicSetOn", "valueOn", "valueOff"]
583
841
  }
584
842
  },
843
+ {
844
+ "if": {
845
+ "properties": {
846
+ "info": {
847
+ "properties": {
848
+ "type" : {
849
+ "enum": ["WindowCovering"]
850
+ }
851
+ }
852
+ }
853
+ }
854
+ },
855
+ "then": {
856
+ "required": ["topicGetCurrentPosition", "topicGetTargetPosition", "topicSetTargetPosition", "topicGetPositionState"],
857
+ "anyOf": [
858
+ { "required": ["valuePositionDecreasing"] },
859
+ { "required": ["valuePositionIncreasing"] },
860
+ { "required": ["valuePositionStopped"] }
861
+ ]
862
+ }
863
+ },
864
+ {
865
+ "if": {
866
+ "properties": {
867
+ "info": {
868
+ "properties": {
869
+ "type" : {
870
+ "const": "AirQualitySensor"
871
+ }
872
+ }
873
+ }
874
+ }
875
+ },
876
+ "then": {
877
+ "required": ["topicGetAirQuality"],
878
+ "anyOf": [
879
+ { "required": ["valueAQExcellent"] },
880
+ { "required": ["valueAQFair"] },
881
+ { "required": ["valueAQGood"] },
882
+ { "required": ["valueAQInferior"] },
883
+ { "required": ["valueAQPoor"] }
884
+ ]
885
+ }
886
+ },
585
887
  {
586
888
  "if": {
587
889
  "properties": {
@@ -782,6 +1084,22 @@
782
1084
  ]
783
1085
  }
784
1086
  },
1087
+ {
1088
+ "if": {
1089
+ "properties": {
1090
+ "info": {
1091
+ "properties": {
1092
+ "type" : {
1093
+ "const": "Fanv2"
1094
+ }
1095
+ }
1096
+ }
1097
+ }
1098
+ },
1099
+ "then": {
1100
+ "required": ["topicGetActive", "topicSetActive", "valueStateActive", "valueStateInactive"]
1101
+ }
1102
+ },
785
1103
  {
786
1104
  "if": {
787
1105
  "properties": {
@@ -845,6 +1163,26 @@
845
1163
  ]
846
1164
  }
847
1165
  },
1166
+ {
1167
+ "if": {
1168
+ "properties": {
1169
+ "info": {
1170
+ "properties": {
1171
+ "type" : {
1172
+ "const": "GarageDoorOpener"
1173
+ }
1174
+ }
1175
+ }
1176
+ }
1177
+ },
1178
+ "then": {
1179
+ "required": ["topicGetCurrentDoorState", "topicGetTargetDoorState", "topicSetTargetDoorState", "topicGetObstructionDetected", "valueDoorObstructed"],
1180
+ "anyOf": [
1181
+ { "required": ["valueDoorStateOpen"] },
1182
+ { "required": ["valueDoorStateClosed"] }
1183
+ ]
1184
+ }
1185
+ },
848
1186
  {
849
1187
  "if": {
850
1188
  "properties": {
@@ -883,6 +1221,27 @@
883
1221
  ]
884
1222
  }
885
1223
  },
1224
+ {
1225
+ "if": {
1226
+ "properties": {
1227
+ "info": {
1228
+ "properties": {
1229
+ "type" : {
1230
+ "const": "StatelessProgrammableSwitch"
1231
+ }
1232
+ }
1233
+ }
1234
+ }
1235
+ },
1236
+ "then": {
1237
+ "required": ["topicEventButtonPress"],
1238
+ "anyOf": [
1239
+ { "required": ["valueSinglePress"] },
1240
+ { "required": ["valueDoublePress"] },
1241
+ { "required": ["valueLongPress"] }
1242
+ ]
1243
+ }
1244
+ },
886
1245
  {
887
1246
  "if": {
888
1247
  "properties": {
@@ -1041,52 +1400,281 @@
1041
1400
  "then": {
1042
1401
  "required": ["valueConfigured", "valueNotConfigured"]
1043
1402
  }
1044
- }
1045
- ]
1046
- },
1047
- "default": []
1048
- },
1049
- "verbose": {
1050
- "type": "boolean",
1051
- "default": false
1052
- }
1053
- }
1054
- },
1055
- "layout": [
1056
- {
1057
- "type": "array",
1058
- "key": "accessories",
1059
- "notitle": true,
1060
- "items": [
1061
- {
1062
- "type": "fieldset",
1063
- "expandable": true,
1064
- "title": "${config.title.accessory}",
1065
- "items": [
1403
+ },
1066
1404
  {
1067
- "type": "div",
1068
- "displayFlex": true,
1069
- "flex-direction": "row",
1070
- "items": [
1071
- {
1072
- "key": "accessories[].info.name",
1073
- "flex": "0 0 33%"
1074
- },
1075
- {
1076
- "key": "accessories[].info.type",
1077
- "flex": "0 0 33%"
1405
+ "if": {
1406
+ "properties": {
1407
+ "topicGetFilterChangeIndication": {
1408
+ "minLength": 1
1409
+ }
1078
1410
  },
1079
- {
1080
- "key": "accessories[].info.group",
1081
- "flex": "0 0 33%"
1082
- }
1083
- ]
1411
+ "required": ["topicGetFilterChangeIndication"]
1412
+ },
1413
+ "then": {
1414
+ "required": ["valueFilterChange"]
1415
+ }
1084
1416
  },
1085
1417
  {
1086
- "type": "fieldset",
1087
- "notitle": true,
1088
- "condition": {
1089
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Valve';"
1418
+ "if": {
1419
+ "properties": {
1420
+ "topicGetFilterLifeLevel": {
1421
+ "minLength": 1
1422
+ }
1423
+ },
1424
+ "required": ["topicGetFilterLifeLevel"]
1425
+ },
1426
+ "then": {
1427
+ "required": ["topicGetFilterChangeIndication"]
1428
+ }
1429
+ },
1430
+ {
1431
+ "if": {
1432
+ "properties": {
1433
+ "topicResetFilterIndication": {
1434
+ "minLength": 1
1435
+ }
1436
+ },
1437
+ "required": ["topicResetFilterIndication"]
1438
+ },
1439
+ "then": {
1440
+ "required": ["topicGetFilterChangeIndication", "valueFilterReset"]
1441
+ }
1442
+ },
1443
+ {
1444
+ "if": {
1445
+ "properties": {
1446
+ "topicGetCurrentLockState": {
1447
+ "minLength": 1
1448
+ }
1449
+ },
1450
+ "required": ["topicGetCurrentLockState"]
1451
+ },
1452
+ "then": {
1453
+ "required": ["valueLockStateSecured", "valueLockStateUnsecured"]
1454
+ }
1455
+ },
1456
+ {
1457
+ "if": {
1458
+ "properties": {
1459
+ "topicGetTargetLockState": {
1460
+ "minLength": 1
1461
+ }
1462
+ },
1463
+ "required": ["topicGetTargetLockState"]
1464
+ },
1465
+ "then": {
1466
+ "required": ["topicGetCurrentLockState", "topicSetTargetLockState"]
1467
+ }
1468
+ },
1469
+ {
1470
+ "if": {
1471
+ "properties": {
1472
+ "topicSetTargetLockState": {
1473
+ "minLength": 1
1474
+ }
1475
+ },
1476
+ "required": ["topicSetTargetLockState"]
1477
+ },
1478
+ "then": {
1479
+ "required": ["topicGetTargetLockState"]
1480
+ }
1481
+ },
1482
+ {
1483
+ "if": {
1484
+ "properties": {
1485
+ "topicGetCurrentFanState": {
1486
+ "minLength": 1
1487
+ }
1488
+ },
1489
+ "required": ["topicGetCurrentFanState"]
1490
+ },
1491
+ "then": {
1492
+ "anyOf": [
1493
+ { "required": ["valueModeInactive"] },
1494
+ { "required": ["valueModeIdle"] },
1495
+ { "required": ["valueModeBlowing"] }
1496
+ ]
1497
+ }
1498
+ },
1499
+ {
1500
+ "if": {
1501
+ "properties": {
1502
+ "topicGetTargetFanState": {
1503
+ "minLength": 1
1504
+ }
1505
+ },
1506
+ "required": ["topicGetTargetFanState"]
1507
+ },
1508
+ "then": {
1509
+ "required": ["topicSetTargetFanState"],
1510
+ "anyOf": [
1511
+ { "required": ["valueModeAuto"] },
1512
+ { "required": ["valueModeManual"] }
1513
+ ]
1514
+ }
1515
+ },
1516
+ {
1517
+ "if": {
1518
+ "properties": {
1519
+ "topicSetTargetFanState": {
1520
+ "minLength": 1
1521
+ }
1522
+ },
1523
+ "required": ["topicSetTargetFanState"]
1524
+ },
1525
+ "then": {
1526
+ "required": ["topicGetTargetFanState"]
1527
+ }
1528
+ },
1529
+ {
1530
+ "if": {
1531
+ "properties": {
1532
+ "topicGetRotationDirection": {
1533
+ "minLength": 1
1534
+ }
1535
+ },
1536
+ "required": ["topicGetRotationDirection"]
1537
+ },
1538
+ "then": {
1539
+ "required": ["topicSetRotationDirection", "valueDirectionClockwise", "valueDirectionCounterClockwise"]
1540
+ }
1541
+ },
1542
+ {
1543
+ "if": {
1544
+ "properties": {
1545
+ "topicSetRotationDirection": {
1546
+ "minLength": 1
1547
+ }
1548
+ },
1549
+ "required": ["topicSetRotationDirection"]
1550
+ },
1551
+ "then": {
1552
+ "required": ["topicGetRotationDirection"]
1553
+ }
1554
+ },
1555
+ {
1556
+ "if": {
1557
+ "properties": {
1558
+ "topicSetHoldPosition": {
1559
+ "minLength": 1
1560
+ }
1561
+ },
1562
+ "required": ["topicSetHoldPosition"]
1563
+ },
1564
+ "then": {
1565
+ "required": ["valuePositionHold", "valuePositionResume"]
1566
+ }
1567
+ },
1568
+ {
1569
+ "if": {
1570
+ "properties": {
1571
+ "topicGetObstructionDetected": {
1572
+ "minLength": 1
1573
+ }
1574
+ },
1575
+ "required": ["topicGetObstructionDetected"]
1576
+ },
1577
+ "then": {
1578
+ "required": ["valuePositionObstructed"]
1579
+ }
1580
+ },
1581
+ {
1582
+ "if": {
1583
+ "properties": {
1584
+ "topicGetCurrentHorizontalTiltAngle": {
1585
+ "minLength": 1
1586
+ }
1587
+ },
1588
+ "required": ["topicGetCurrentHorizontalTiltAngle"]
1589
+ },
1590
+ "then": {
1591
+ "required": ["topicGetTargetHorizontalTiltAngle", "topicSetTargetHorizontalTiltAngle"]
1592
+ }
1593
+ },
1594
+ {
1595
+ "if": {
1596
+ "properties": {
1597
+ "topicSetTargetHorizontalTiltAngle": {
1598
+ "minLength": 1
1599
+ }
1600
+ },
1601
+ "required": ["topicSetTargetHorizontalTiltAngle"]
1602
+ },
1603
+ "then": {
1604
+ "required": ["topicGetTargetHorizontalTiltAngle"]
1605
+ }
1606
+ },
1607
+ {
1608
+ "if": {
1609
+ "properties": {
1610
+ "topicGetTargetVerticalTiltAngle": {
1611
+ "minLength": 1
1612
+ }
1613
+ },
1614
+ "required": ["topicGetTargetVerticalTiltAngle"]
1615
+ },
1616
+ "then": {
1617
+ "required": ["topicGetCurrentVerticalTiltAngle", "topicSetTargetVerticalTiltAngle"]
1618
+ }
1619
+ },
1620
+ {
1621
+ "if": {
1622
+ "properties": {
1623
+ "topicSetTargetVerticalTiltAngle": {
1624
+ "minLength": 1
1625
+ }
1626
+ },
1627
+ "required": ["topicSetTargetVerticalTiltAngle"]
1628
+ },
1629
+ "then": {
1630
+ "required": ["topicGetCurrentVerticalTiltAngle"]
1631
+ }
1632
+ }
1633
+ ]
1634
+ },
1635
+ "default": []
1636
+ },
1637
+ "verbose": {
1638
+ "type": "boolean",
1639
+ "default": false
1640
+ }
1641
+ }
1642
+ },
1643
+ "layout": [
1644
+ {
1645
+ "type": "array",
1646
+ "key": "accessories",
1647
+ "notitle": true,
1648
+ "items": [
1649
+ {
1650
+ "type": "fieldset",
1651
+ "expandable": true,
1652
+ "title": "${config.title.accessory}",
1653
+ "items": [
1654
+ {
1655
+ "type": "div",
1656
+ "displayFlex": true,
1657
+ "flex-direction": "row",
1658
+ "items": [
1659
+ {
1660
+ "key": "accessories[].info.name",
1661
+ "flex": "0 0 33%"
1662
+ },
1663
+ {
1664
+ "key": "accessories[].info.type",
1665
+ "flex": "0 0 33%"
1666
+ },
1667
+ {
1668
+ "key": "accessories[].info.group",
1669
+ "flex": "0 0 33%"
1670
+ }
1671
+ ]
1672
+ },
1673
+ {
1674
+ "type": "fieldset",
1675
+ "notitle": true,
1676
+ "condition": {
1677
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Valve';"
1090
1678
  },
1091
1679
  "items": [
1092
1680
  {
@@ -1112,22 +1700,104 @@
1112
1700
  "key": "accessories[].mqtt.username",
1113
1701
  "flex": "0 0 50%"
1114
1702
  },
1115
- {
1116
- "key": "accessories[].mqtt.password",
1117
- "flex": "0 0 50%"
1118
- }
1119
- ]
1120
- },
1121
- "accessories[].mqtt.options",
1122
- "accessories[].disableLogging",
1123
- {
1124
- "type": "fieldset",
1125
- "title": "${config.title.topics}",
1126
- "description": "${config.description.topics}",
1127
- "condition": {
1128
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type !== undefined;"
1129
- },
1130
- "items": [
1703
+ {
1704
+ "key": "accessories[].mqtt.password",
1705
+ "flex": "0 0 50%"
1706
+ }
1707
+ ]
1708
+ },
1709
+ "accessories[].mqtt.options",
1710
+ {
1711
+ "type": "div",
1712
+ "displayFlex": true,
1713
+ "flex-direction": "row",
1714
+ "items": [
1715
+ {
1716
+ "key": "accessories[].resetOnRestart",
1717
+ "flex": "0 0 25%"
1718
+ },
1719
+ {
1720
+ "key": "accessories[].disableLogging",
1721
+ "flex": "0 0 25%"
1722
+ }
1723
+ ]
1724
+ },
1725
+ {
1726
+ "type": "fieldset",
1727
+ "title": "${config.title.topics}",
1728
+ "description": "${config.description.topics}",
1729
+ "condition": {
1730
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type !== undefined;"
1731
+ },
1732
+ "items": [
1733
+ {
1734
+ "type": "fieldset",
1735
+ "notitle": true,
1736
+ "condition": {
1737
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'GarageDoorOpener';"
1738
+ },
1739
+ "items": [
1740
+ {
1741
+ "type": "div",
1742
+ "displayFlex": true,
1743
+ "flex-direction": "row",
1744
+ "items": [
1745
+ {
1746
+ "key": "accessories[].topicGetCurrentDoorState",
1747
+ "flex": "0 0 50%"
1748
+ },
1749
+ {
1750
+ "key": "accessories[].topicGetObstructionDetected",
1751
+ "flex": "0 0 50%"
1752
+ }
1753
+ ]
1754
+ },
1755
+ {
1756
+ "type": "div",
1757
+ "displayFlex": true,
1758
+ "flex-direction": "row",
1759
+ "items": [
1760
+ {
1761
+ "key": "accessories[].topicGetTargetDoorState",
1762
+ "flex": "0 0 50%"
1763
+ },
1764
+ {
1765
+ "key": "accessories[].topicSetTargetDoorState",
1766
+ "flex": "0 0 50%"
1767
+ }
1768
+ ]
1769
+ },
1770
+ {
1771
+ "type": "div",
1772
+ "displayFlex": true,
1773
+ "flex-direction": "row",
1774
+ "items": [
1775
+ {
1776
+ "key": "accessories[].topicGetCurrentLockState",
1777
+ "title": "${config.title.topicGetCurrentLockStateOptional}",
1778
+ "flex": "0 0 50%"
1779
+ }
1780
+ ]
1781
+ },
1782
+ {
1783
+ "type": "div",
1784
+ "displayFlex": true,
1785
+ "flex-direction": "row",
1786
+ "items": [
1787
+ {
1788
+ "key": "accessories[].topicGetTargetLockState",
1789
+ "title": "${config.title.topicGetTargetLockStateOptional}",
1790
+ "flex": "0 0 50%"
1791
+ },
1792
+ {
1793
+ "key": "accessories[].topicSetTargetLockState",
1794
+ "title": "${config.title.topicSetTargetLockStateOptional}",
1795
+ "flex": "0 0 50%"
1796
+ }
1797
+ ]
1798
+ }
1799
+ ]
1800
+ },
1131
1801
  {
1132
1802
  "type": "fieldset",
1133
1803
  "notitle": true,
@@ -1163,6 +1833,26 @@
1163
1833
  }
1164
1834
  ]
1165
1835
  },
1836
+ {
1837
+ "type": "fieldset",
1838
+ "notitle": true,
1839
+ "condition": {
1840
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'StatelessProgrammableSwitch';"
1841
+ },
1842
+ "items": [
1843
+ {
1844
+ "type": "div",
1845
+ "displayFlex": true,
1846
+ "flex-direction": "row",
1847
+ "items": [
1848
+ {
1849
+ "key": "accessories[].topicEventButtonPress",
1850
+ "flex": "0 0 50%"
1851
+ }
1852
+ ]
1853
+ }
1854
+ ]
1855
+ },
1166
1856
  {
1167
1857
  "type": "fieldset",
1168
1858
  "notitle": true,
@@ -1288,11 +1978,15 @@
1288
1978
  "items": [
1289
1979
  {
1290
1980
  "key": "accessories[].topicGetBrightness",
1291
- "flex": "0 0 50%"
1981
+ "flex": "0 0 40%"
1292
1982
  },
1293
1983
  {
1294
1984
  "key": "accessories[].topicSetBrightness",
1295
- "flex": "0 0 50%"
1985
+ "flex": "0 0 40%"
1986
+ },
1987
+ {
1988
+ "key": "accessories[].maximumBrightness",
1989
+ "flex": "0 0 20%"
1296
1990
  }
1297
1991
  ]
1298
1992
  },
@@ -1363,6 +2057,161 @@
1363
2057
  }
1364
2058
  ]
1365
2059
  },
2060
+ {
2061
+ "type": "fieldset",
2062
+ "notitle": true,
2063
+ "condition": {
2064
+ "functionBody": "return ['WindowCovering'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2065
+ },
2066
+ "items": [
2067
+ {
2068
+ "type": "fieldset",
2069
+ "notitle": true,
2070
+ "items": [
2071
+ {
2072
+ "type": "div",
2073
+ "displayFlex": true,
2074
+ "flex-direction": "row",
2075
+ "items": [
2076
+ {
2077
+ "key": "accessories[].topicGetPositionState",
2078
+ "flex": "0 0 50%"
2079
+ }
2080
+ ]
2081
+ },
2082
+ {
2083
+ "type": "div",
2084
+ "displayFlex": true,
2085
+ "flex-direction": "row",
2086
+ "items": [
2087
+ {
2088
+ "key": "accessories[].topicGetCurrentPosition",
2089
+ "flex": "0 0 80%"
2090
+ },
2091
+ {
2092
+ "key": "accessories[].maximumPosition",
2093
+ "flex": "0 0 20%"
2094
+ }
2095
+ ]
2096
+ },
2097
+ {
2098
+ "type": "div",
2099
+ "displayFlex": true,
2100
+ "flex-direction": "row",
2101
+ "items": [
2102
+ {
2103
+ "key": "accessories[].topicGetTargetPosition",
2104
+ "flex": "0 0 50%"
2105
+ },
2106
+ {
2107
+ "key": "accessories[].topicSetTargetPosition",
2108
+ "flex": "0 0 50%"
2109
+ }
2110
+ ]
2111
+ }
2112
+ ]
2113
+ }
2114
+ ]
2115
+ },
2116
+ {
2117
+ "type": "fieldset",
2118
+ "notitle": true,
2119
+ "condition": {
2120
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'WindowCovering';"
2121
+ },
2122
+ "items": [
2123
+ {
2124
+ "type": "fieldset",
2125
+ "notitle": true,
2126
+ "items": [
2127
+ {
2128
+ "type": "div",
2129
+ "displayFlex": true,
2130
+ "flex-direction": "row",
2131
+ "items": [
2132
+ {
2133
+ "key": "accessories[].topicGetCurrentHorizontalTiltAngle",
2134
+ "flex": "0 0 50%"
2135
+ }
2136
+ ]
2137
+ },
2138
+ {
2139
+ "type": "div",
2140
+ "displayFlex": true,
2141
+ "flex-direction": "row",
2142
+ "items": [
2143
+ {
2144
+ "key": "accessories[].topicGetTargetHorizontalTiltAngle",
2145
+ "flex": "0 0 50%"
2146
+ },
2147
+ {
2148
+ "key": "accessories[].topicSetTargetHorizontalTiltAngle",
2149
+ "flex": "0 0 50%"
2150
+ }
2151
+ ]
2152
+ },
2153
+ {
2154
+ "type": "div",
2155
+ "displayFlex": true,
2156
+ "flex-direction": "row",
2157
+ "items": [
2158
+ {
2159
+ "type": "div",
2160
+ "displayFlex": true,
2161
+ "flex-direction": "row",
2162
+ "items": [
2163
+ {
2164
+ "key": "accessories[].topicGetCurrentVerticalTiltAngle",
2165
+ "flex": "0 0 50%"
2166
+ }
2167
+ ]
2168
+ }
2169
+ ]
2170
+ },
2171
+ {
2172
+ "type": "div",
2173
+ "displayFlex": true,
2174
+ "flex-direction": "row",
2175
+ "items": [
2176
+ {
2177
+ "key": "accessories[].topicGetTargetVerticalTiltAngle",
2178
+ "flex": "0 0 50%"
2179
+ },
2180
+ {
2181
+ "key": "accessories[].topicSetTargetVerticalTiltAngle",
2182
+ "flex": "0 0 50%"
2183
+ }
2184
+ ]
2185
+ }
2186
+ ]
2187
+ }
2188
+ ]
2189
+ },
2190
+ {
2191
+ "type": "fieldset",
2192
+ "notitle": true,
2193
+ "condition": {
2194
+ "functionBody": "return ['WindowCovering'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2195
+ },
2196
+ "items": [
2197
+ {
2198
+ "type": "div",
2199
+ "displayFlex": true,
2200
+ "flex-direction": "row",
2201
+ "items": [
2202
+ {
2203
+ "key": "accessories[].topicSetHoldPosition",
2204
+ "flex": "0 0 50%"
2205
+ },
2206
+ {
2207
+ "key": "accessories[].topicGetObstructionDetected",
2208
+ "title": "${config.title.topicGetObstructionDetectedOptional}",
2209
+ "flex": "0 0 50%"
2210
+ }
2211
+ ]
2212
+ }
2213
+ ]
2214
+ },
1366
2215
  {
1367
2216
  "type": "fieldset",
1368
2217
  "notitle": true,
@@ -1413,6 +2262,71 @@
1413
2262
  }
1414
2263
  ]
1415
2264
  },
2265
+ {
2266
+ "type": "fieldset",
2267
+ "notitle": true,
2268
+ "condition": {
2269
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'AirQualitySensor';"
2270
+ },
2271
+ "items": [
2272
+ {
2273
+ "type": "div",
2274
+ "displayFlex": true,
2275
+ "flex-direction": "row",
2276
+ "items": [
2277
+ {
2278
+ "key": "accessories[].topicGetAirQuality",
2279
+ "flex": "0 0 50%"
2280
+ }
2281
+ ]
2282
+ },
2283
+ {
2284
+ "type": "div",
2285
+ "displayFlex": true,
2286
+ "flex-direction": "row",
2287
+ "items": [
2288
+ {
2289
+ "key": "accessories[].topicGetNitrogenDioxideDensity",
2290
+ "flex": "0 0 50%"
2291
+ },
2292
+ {
2293
+ "key": "accessories[].topicGetOzoneDensity",
2294
+ "flex": "0 0 50%"
2295
+ }
2296
+ ]
2297
+ },
2298
+ {
2299
+ "type": "div",
2300
+ "displayFlex": true,
2301
+ "flex-direction": "row",
2302
+ "items": [
2303
+ {
2304
+ "key": "accessories[].topicGetPM2_5Density",
2305
+ "flex": "0 0 50%"
2306
+ },
2307
+ {
2308
+ "key": "accessories[].topicGetPM10Density",
2309
+ "flex": "0 0 50%"
2310
+ }
2311
+ ]
2312
+ },
2313
+ {
2314
+ "type": "div",
2315
+ "displayFlex": true,
2316
+ "flex-direction": "row",
2317
+ "items": [
2318
+ {
2319
+ "key": "accessories[].topicGetSulphurDioxideDensity",
2320
+ "flex": "0 0 50%"
2321
+ },
2322
+ {
2323
+ "key": "accessories[].topicGetVOCDensity",
2324
+ "flex": "0 0 50%"
2325
+ }
2326
+ ]
2327
+ }
2328
+ ]
2329
+ },
1416
2330
  {
1417
2331
  "type": "fieldset",
1418
2332
  "notitle": true,
@@ -1586,7 +2500,7 @@
1586
2500
  "type": "fieldset",
1587
2501
  "notitle": true,
1588
2502
  "condition": {
1589
- "functionBody": "return ['HeaterCooler', 'AirPurifier'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2503
+ "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1590
2504
  },
1591
2505
  "items": [
1592
2506
  {
@@ -1610,7 +2524,57 @@
1610
2524
  "type": "fieldset",
1611
2525
  "notitle": true,
1612
2526
  "condition": {
1613
- "functionBody": "return ['HeaterCooler', 'AirPurifier'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2527
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Fanv2';"
2528
+ },
2529
+ "items": [
2530
+ {
2531
+ "type": "div",
2532
+ "displayFlex": true,
2533
+ "flex-direction": "row",
2534
+ "items": [
2535
+ {
2536
+ "key": "accessories[].topicGetCurrentFanState",
2537
+ "flex": "0 0 50%"
2538
+ }
2539
+ ]
2540
+ },
2541
+ {
2542
+ "type": "div",
2543
+ "displayFlex": true,
2544
+ "flex-direction": "row",
2545
+ "items": [
2546
+ {
2547
+ "key": "accessories[].topicGetTargetFanState",
2548
+ "flex": "0 0 50%"
2549
+ },
2550
+ {
2551
+ "key": "accessories[].topicSetTargetFanState",
2552
+ "flex": "0 0 50%"
2553
+ }
2554
+ ]
2555
+ },
2556
+ {
2557
+ "type": "div",
2558
+ "displayFlex": true,
2559
+ "flex-direction": "row",
2560
+ "items": [
2561
+ {
2562
+ "key": "accessories[].topicGetRotationDirection",
2563
+ "flex": "0 0 50%"
2564
+ },
2565
+ {
2566
+ "key": "accessories[].topicSetRotationDirection",
2567
+ "flex": "0 0 50%"
2568
+ }
2569
+ ]
2570
+ }
2571
+ ]
2572
+ },
2573
+ {
2574
+ "type": "fieldset",
2575
+ "notitle": true,
2576
+ "condition": {
2577
+ "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1614
2578
  },
1615
2579
  "items": [
1616
2580
  {
@@ -1635,11 +2599,15 @@
1635
2599
  "items": [
1636
2600
  {
1637
2601
  "key": "accessories[].topicGetRotationSpeed",
1638
- "flex": "0 0 50%"
2602
+ "flex": "0 0 40%"
1639
2603
  },
1640
2604
  {
1641
2605
  "key": "accessories[].topicSetRotationSpeed",
1642
- "flex": "0 0 50%"
2606
+ "flex": "0 0 40%"
2607
+ },
2608
+ {
2609
+ "key": "accessories[].maximumRotationSpeed",
2610
+ "flex": "0 0 20%"
1643
2611
  }
1644
2612
  ]
1645
2613
  },
@@ -1816,23 +2784,62 @@
1816
2784
  "flex-direction": "row",
1817
2785
  "items": [
1818
2786
  {
1819
- "key": "accessories[].topicGetTargetTemperature",
2787
+ "key": "accessories[].topicGetTargetTemperature",
2788
+ "flex": "0 0 50%"
2789
+ },
2790
+ {
2791
+ "key": "accessories[].topicSetTargetTemperature",
2792
+ "flex": "0 0 50%"
2793
+ }
2794
+ ]
2795
+ },
2796
+ {
2797
+ "type": "div",
2798
+ "displayFlex": true,
2799
+ "flex-direction": "row",
2800
+ "items": [
2801
+ {
2802
+ "key": "accessories[].topicGetCurrentRelativeHumidity",
2803
+ "title": "${config.title.topicGetCurrentRelativeHumidityOptional}",
2804
+ "flex": "0 0 50%"
2805
+ }
2806
+ ]
2807
+ },
2808
+ {
2809
+ "type": "div",
2810
+ "displayFlex": true,
2811
+ "flex-direction": "row",
2812
+ "items": [
2813
+ {
2814
+ "key": "accessories[].topicGetTargetRelativeHumidity",
2815
+ "flex": "0 0 50%"
2816
+ },
2817
+ {
2818
+ "key": "accessories[].topicSetTargetRelativeHumidity",
2819
+ "flex": "0 0 50%"
2820
+ }
2821
+ ]
2822
+ }
2823
+ ]
2824
+ },
2825
+ {
2826
+ "type": "fieldset",
2827
+ "notitle": true,
2828
+ "condition": {
2829
+ "functionBody": "return ['HeaterCooler', 'Thermostat'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2830
+ },
2831
+ "items": [
2832
+ {
2833
+ "type": "div",
2834
+ "displayFlex": true,
2835
+ "flex-direction": "row",
2836
+ "items": [
2837
+ {
2838
+ "key": "accessories[].topicGetCoolingThresholdTemperature",
1820
2839
  "flex": "0 0 50%"
1821
2840
  },
1822
2841
  {
1823
- "key": "accessories[].topicSetTargetTemperature",
1824
- "flex": "0 0 50%"
1825
- }
1826
- ]
1827
- },
1828
- {
1829
- "type": "div",
1830
- "displayFlex": true,
1831
- "flex-direction": "row",
1832
- "items": [
1833
- {
1834
- "key": "accessories[].topicGetCurrentRelativeHumidity",
1835
- "title": "${config.title.topicGetCurrentRelativeHumidityOptional}",
2842
+ "key": "accessories[].topicSetCoolingThresholdTemperature",
1836
2843
  "flex": "0 0 50%"
1837
2844
  }
1838
2845
  ]
@@ -1843,11 +2850,11 @@
1843
2850
  "flex-direction": "row",
1844
2851
  "items": [
1845
2852
  {
1846
- "key": "accessories[].topicGetTargetRelativeHumidity",
2853
+ "key": "accessories[].topicGetHeatingThresholdTemperature",
1847
2854
  "flex": "0 0 50%"
1848
2855
  },
1849
2856
  {
1850
- "key": "accessories[].topicSetTargetRelativeHumidity",
2857
+ "key": "accessories[].topicSetHeatingThresholdTemperature",
1851
2858
  "flex": "0 0 50%"
1852
2859
  }
1853
2860
  ]
@@ -1858,7 +2865,7 @@
1858
2865
  "type": "fieldset",
1859
2866
  "notitle": true,
1860
2867
  "condition": {
1861
- "functionBody": "return ['HeaterCooler', 'Thermostat'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2868
+ "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1862
2869
  },
1863
2870
  "items": [
1864
2871
  {
@@ -1867,11 +2874,11 @@
1867
2874
  "flex-direction": "row",
1868
2875
  "items": [
1869
2876
  {
1870
- "key": "accessories[].topicGetCoolingThresholdTemperature",
2877
+ "key": "accessories[].topicGetFilterChangeIndication",
1871
2878
  "flex": "0 0 50%"
1872
2879
  },
1873
2880
  {
1874
- "key": "accessories[].topicSetCoolingThresholdTemperature",
2881
+ "key": "accessories[].topicGetFilterLifeLevel",
1875
2882
  "flex": "0 0 50%"
1876
2883
  }
1877
2884
  ]
@@ -1882,11 +2889,7 @@
1882
2889
  "flex-direction": "row",
1883
2890
  "items": [
1884
2891
  {
1885
- "key": "accessories[].topicGetHeatingThresholdTemperature",
1886
- "flex": "0 0 50%"
1887
- },
1888
- {
1889
- "key": "accessories[].topicSetHeatingThresholdTemperature",
2892
+ "key": "accessories[].topicResetFilterIndication",
1890
2893
  "flex": "0 0 50%"
1891
2894
  }
1892
2895
  ]
@@ -1942,6 +2945,7 @@
1942
2945
  {
1943
2946
  "type": "fieldset",
1944
2947
  "title": "${config.title.values}",
2948
+ "description": "${config.description.values}",
1945
2949
  "condition": {
1946
2950
  "functionBody": "return model.accessories?.[arguments[1]]?.info?.type !== undefined;"
1947
2951
  },
@@ -1950,7 +2954,7 @@
1950
2954
  "type": "fieldset",
1951
2955
  "notitle": true,
1952
2956
  "condition": {
1953
- "functionBody": "return ['HeaterCooler', 'AirPurifier'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2957
+ "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1954
2958
  },
1955
2959
  "items": [
1956
2960
  {
@@ -1970,6 +2974,57 @@
1970
2974
  }
1971
2975
  ]
1972
2976
  },
2977
+ {
2978
+ "type": "fieldset",
2979
+ "notitle": true,
2980
+ "condition": {
2981
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Fanv2';"
2982
+ },
2983
+ "items": [
2984
+ {
2985
+ "type": "div",
2986
+ "displayFlex": true,
2987
+ "flex-direction": "row",
2988
+ "items": [
2989
+ {
2990
+ "key": "accessories[].valueModeAuto",
2991
+ "flex": "0 0 20%"
2992
+ },
2993
+ {
2994
+ "key": "accessories[].valueModeManual",
2995
+ "flex": "0 0 20%"
2996
+ },
2997
+ {
2998
+ "key": "accessories[].valueModeBlowing",
2999
+ "flex": "0 0 20%"
3000
+ },
3001
+ {
3002
+ "key": "accessories[].valueModeIdle",
3003
+ "flex": "0 0 20%"
3004
+ },
3005
+ {
3006
+ "key": "accessories[].valueModeInactive",
3007
+ "flex": "0 0 20%"
3008
+ }
3009
+ ]
3010
+ },
3011
+ {
3012
+ "type": "div",
3013
+ "displayFlex": true,
3014
+ "flex-direction": "row",
3015
+ "items": [
3016
+ {
3017
+ "key": "accessories[].valueDirectionClockwise",
3018
+ "flex": "0 0 20%"
3019
+ },
3020
+ {
3021
+ "key": "accessories[].valueDirectionCounterClockwise",
3022
+ "flex": "0 0 20%"
3023
+ }
3024
+ ]
3025
+ }
3026
+ ]
3027
+ },
1973
3028
  {
1974
3029
  "type": "fieldset",
1975
3030
  "notitle": true,
@@ -2046,7 +3101,7 @@
2046
3101
  "type": "fieldset",
2047
3102
  "notitle": true,
2048
3103
  "condition": {
2049
- "functionBody": "return ['HeaterCooler', 'AirPurifier'].includes(model.accessories?.[arguments[1]]?.info?.type);"
3104
+ "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2050
3105
  },
2051
3106
  "items": [
2052
3107
  {
@@ -2074,6 +3129,98 @@
2074
3129
  }
2075
3130
  ]
2076
3131
  },
3132
+ {
3133
+ "type": "fieldset",
3134
+ "notitle": true,
3135
+ "condition": {
3136
+ "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
3137
+ },
3138
+ "items": [
3139
+ {
3140
+ "type": "div",
3141
+ "displayFlex": true,
3142
+ "flex-direction": "row",
3143
+ "items": [
3144
+ {
3145
+ "key": "accessories[].valueFilterChange",
3146
+ "flex": "0 0 20%"
3147
+ },
3148
+ {
3149
+ "key": "accessories[].valueFilterReset",
3150
+ "flex": "0 0 20%"
3151
+ }
3152
+ ]
3153
+ }
3154
+ ]
3155
+ },
3156
+ {
3157
+ "type": "fieldset",
3158
+ "notitle": true,
3159
+ "condition": {
3160
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'GarageDoorOpener';"
3161
+ },
3162
+ "items": [
3163
+ {
3164
+ "type": "div",
3165
+ "displayFlex": true,
3166
+ "flex-direction": "row",
3167
+ "items": [
3168
+ {
3169
+ "key": "accessories[].valueDoorStateOpen",
3170
+ "flex": "0 0 25%"
3171
+ },
3172
+ {
3173
+ "key": "accessories[].valueDoorStateClosed",
3174
+ "flex": "0 0 25%"
3175
+ },
3176
+ {
3177
+ "key": "accessories[].valueDoorStateOpening",
3178
+ "flex": "0 0 25%"
3179
+ },
3180
+ {
3181
+ "key": "accessories[].valueDoorStateClosing",
3182
+ "flex": "0 0 25%"
3183
+ }
3184
+ ]
3185
+ },
3186
+ {
3187
+ "type": "div",
3188
+ "displayFlex": true,
3189
+ "flex-direction": "row",
3190
+ "items": [
3191
+ {
3192
+ "key": "accessories[].valueDoorStateStopped",
3193
+ "flex": "0 0 25%"
3194
+ },
3195
+ {
3196
+ "key": "accessories[].valueDoorObstructed",
3197
+ "flex": "0 0 25%"
3198
+ }
3199
+ ]
3200
+ },
3201
+ {
3202
+ "type": "div",
3203
+ "displayFlex": true,
3204
+ "flex-direction": "row",
3205
+ "items": [
3206
+ {
3207
+ "key": "accessories[].valueLockStateSecured",
3208
+ "title": "${config.title.valueLockStateSecuredOptional}",
3209
+ "flex": "0 0 25%"
3210
+ },
3211
+ {
3212
+ "key": "accessories[].valueLockStateUnsecured",
3213
+ "title": "${config.title.valueLockStateUnsecuredOptional}",
3214
+ "flex": "0 0 25%"
3215
+ },
3216
+ {
3217
+ "key": "accessories[].valueLockStateJammed",
3218
+ "flex": "0 0 25%"
3219
+ }
3220
+ ]
3221
+ }
3222
+ ]
3223
+ },
2077
3224
  {
2078
3225
  "type": "div",
2079
3226
  "displayFlex": true,
@@ -2096,6 +3243,34 @@
2096
3243
  }
2097
3244
  ]
2098
3245
  },
3246
+ {
3247
+ "type": "fieldset",
3248
+ "notitle": true,
3249
+ "condition": {
3250
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'StatelessProgrammableSwitch';"
3251
+ },
3252
+ "items": [
3253
+ {
3254
+ "type": "div",
3255
+ "displayFlex": true,
3256
+ "flex-direction": "row",
3257
+ "items": [
3258
+ {
3259
+ "key": "accessories[].valueSinglePress",
3260
+ "flex": "0 0 25%"
3261
+ },
3262
+ {
3263
+ "key": "accessories[].valueDoublePress",
3264
+ "flex": "0 0 25%"
3265
+ },
3266
+ {
3267
+ "key": "accessories[].valueLongPress",
3268
+ "flex": "0 0 25%"
3269
+ }
3270
+ ]
3271
+ }
3272
+ ]
3273
+ },
2099
3274
  {
2100
3275
  "type": "fieldset",
2101
3276
  "notitle": true,
@@ -2175,6 +3350,53 @@
2175
3350
  }
2176
3351
  ]
2177
3352
  },
3353
+ {
3354
+ "type": "fieldset",
3355
+ "notitle": true,
3356
+ "condition": {
3357
+ "functionBody": "return ['WindowCovering'].includes(model.accessories?.[arguments[1]]?.info?.type);"
3358
+ },
3359
+ "items": [
3360
+ {
3361
+ "type": "div",
3362
+ "displayFlex": true,
3363
+ "flex-direction": "row",
3364
+ "items": [
3365
+ {
3366
+ "key": "accessories[].valuePositionDecreasing",
3367
+ "flex": "0 0 25%"
3368
+ },
3369
+ {
3370
+ "key": "accessories[].valuePositionIncreasing",
3371
+ "flex": "0 0 25%"
3372
+ },
3373
+ {
3374
+ "key": "accessories[].valuePositionStopped",
3375
+ "flex": "0 0 25%"
3376
+ }
3377
+ ]
3378
+ },
3379
+ {
3380
+ "type": "div",
3381
+ "displayFlex": true,
3382
+ "flex-direction": "row",
3383
+ "items": [
3384
+ {
3385
+ "key": "accessories[].valuePositionHold",
3386
+ "flex": "0 0 25%"
3387
+ },
3388
+ {
3389
+ "key": "accessories[].valuePositionResume",
3390
+ "flex": "0 0 25%"
3391
+ },
3392
+ {
3393
+ "key": "accessories[].valuePositionObstructed",
3394
+ "flex": "0 0 25%"
3395
+ }
3396
+ ]
3397
+ }
3398
+ ]
3399
+ },
2178
3400
  {
2179
3401
  "type": "fieldset",
2180
3402
  "notitle": true,
@@ -2252,6 +3474,53 @@
2252
3474
  }
2253
3475
  ]
2254
3476
  },
3477
+ {
3478
+ "type": "fieldset",
3479
+ "notitle": true,
3480
+ "condition": {
3481
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'AirQualitySensor';"
3482
+ },
3483
+ "items": [
3484
+ {
3485
+ "type": "div",
3486
+ "displayFlex": true,
3487
+ "flex-direction": "row",
3488
+ "items": [
3489
+ {
3490
+ "key": "accessories[].valueAQExcellent",
3491
+ "flex": "0 0 25%"
3492
+ },
3493
+ {
3494
+ "key": "accessories[].valueAQGood",
3495
+ "flex": "0 0 25%"
3496
+ },
3497
+ {
3498
+ "key": "accessories[].valueAQFair",
3499
+ "flex": "0 0 25%"
3500
+ }
3501
+ ]
3502
+ },
3503
+ {
3504
+ "type": "div",
3505
+ "displayFlex": true,
3506
+ "flex-direction": "row",
3507
+ "items": [
3508
+ {
3509
+ "key": "accessories[].valueAQInferior",
3510
+ "flex": "0 0 25%"
3511
+ },
3512
+ {
3513
+ "key": "accessories[].valueAQPoor",
3514
+ "flex": "0 0 25%"
3515
+ },
3516
+ {
3517
+ "key": "accessories[].valueAQUnknown",
3518
+ "flex": "0 0 25%"
3519
+ }
3520
+ ]
3521
+ }
3522
+ ]
3523
+ },
2255
3524
  {
2256
3525
  "type": "div",
2257
3526
  "displayFlex": true,